mirror of
https://github.com/mangosfour/server.git
synced 2025-12-15 10:37:02 +00:00
[7312] Use localized DB-based achievement message instead hardcoded string.
This commit is contained in:
parent
34a9f0302e
commit
7c2e850283
7 changed files with 64 additions and 29 deletions
|
|
@ -22,7 +22,7 @@
|
||||||
DROP TABLE IF EXISTS `db_version`;
|
DROP TABLE IF EXISTS `db_version`;
|
||||||
CREATE TABLE `db_version` (
|
CREATE TABLE `db_version` (
|
||||||
`version` varchar(120) default NULL,
|
`version` varchar(120) default NULL,
|
||||||
`required_7303_01_mangos_pools` bit(1) default NULL
|
`required_7312_01_mangos_mangos_string` bit(1) default NULL
|
||||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Used DB version notes';
|
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Used DB version notes';
|
||||||
|
|
||||||
--
|
--
|
||||||
|
|
@ -2870,6 +2870,7 @@ INSERT INTO `mangos_string` VALUES
|
||||||
(807,'Please provide character name',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
|
(807,'Please provide character name',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
|
||||||
(808,'Player %s not found or offline',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
|
(808,'Player %s not found or offline',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
|
||||||
(809,'Account for character %s not found',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
|
(809,'Account for character %s not found',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
|
||||||
|
(810,'|Hplayer:$N|h[$N]|h has earned the achievement $a!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
|
||||||
(1000,'Exiting daemon...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
|
(1000,'Exiting daemon...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
|
||||||
(1001,'Account deleted: %s',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
|
(1001,'Account deleted: %s',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
|
||||||
(1002,'Account %s NOT deleted (probably sql file format was updated)',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
|
(1002,'Account %s NOT deleted (probably sql file format was updated)',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
|
||||||
|
|
|
||||||
5
sql/updates/7312_01_mangos_mangos_string.sql
Normal file
5
sql/updates/7312_01_mangos_mangos_string.sql
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
ALTER TABLE db_version CHANGE COLUMN required_7303_01_mangos_pools required_7312_01_mangos_mangos_string bit;
|
||||||
|
|
||||||
|
DELETE FROM `mangos_string` WHERE entry = 810;
|
||||||
|
INSERT INTO `mangos_string` VALUES
|
||||||
|
(810,'|Hplayer:$N|h[$N]|h has earned the achievement $a!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
|
||||||
|
|
@ -181,6 +181,7 @@ pkgdata_DATA = \
|
||||||
7292_02_mangos_locales_points_of_interest.sql \
|
7292_02_mangos_locales_points_of_interest.sql \
|
||||||
7303_01_mangos_pools.sql \
|
7303_01_mangos_pools.sql \
|
||||||
7307_01_characters_arena_team_member.sql \
|
7307_01_characters_arena_team_member.sql \
|
||||||
|
7312_01_mangos_mangos_string.sql \
|
||||||
README
|
README
|
||||||
|
|
||||||
## Additional files to include when running 'make dist'
|
## Additional files to include when running 'make dist'
|
||||||
|
|
@ -342,4 +343,5 @@ EXTRA_DIST = \
|
||||||
7292_02_mangos_locales_points_of_interest.sql \
|
7292_02_mangos_locales_points_of_interest.sql \
|
||||||
7303_01_mangos_pools.sql \
|
7303_01_mangos_pools.sql \
|
||||||
7307_01_characters_arena_team_member.sql \
|
7307_01_characters_arena_team_member.sql \
|
||||||
|
7312_01_mangos_mangos_string.sql \
|
||||||
README
|
README
|
||||||
|
|
|
||||||
|
|
@ -28,6 +28,9 @@
|
||||||
#include "World.h"
|
#include "World.h"
|
||||||
#include "SpellMgr.h"
|
#include "SpellMgr.h"
|
||||||
#include "ProgressBar.h"
|
#include "ProgressBar.h"
|
||||||
|
#include "GridNotifiersImpl.h"
|
||||||
|
#include "CellImpl.h"
|
||||||
|
#include "Language.h"
|
||||||
|
|
||||||
#include "Policies/SingletonImp.h"
|
#include "Policies/SingletonImp.h"
|
||||||
|
|
||||||
|
|
@ -83,6 +86,37 @@ const CriteriaCastSpellRequirement AchievementGlobalMgr::m_criteriaCastSpellRequ
|
||||||
{6662, 31261, 0, 0}
|
{6662, 31261, 0, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
namespace MaNGOS
|
||||||
|
{
|
||||||
|
class AchievementChatBuilder
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
AchievementChatBuilder(Player const& pl, ChatMsg msgtype, int32 textId, uint32 ach_id)
|
||||||
|
: i_player(pl), i_msgtype(msgtype), i_textId(textId), i_achievementId(ach_id) {}
|
||||||
|
void operator()(WorldPacket& data, int32 loc_idx)
|
||||||
|
{
|
||||||
|
char const* text = objmgr.GetMangosString(i_textId,loc_idx);
|
||||||
|
|
||||||
|
data << uint8(i_msgtype);
|
||||||
|
data << uint32(LANG_UNIVERSAL);
|
||||||
|
data << uint64(i_player.GetGUID());
|
||||||
|
data << uint32(5);
|
||||||
|
data << uint64(i_player.GetGUID());
|
||||||
|
data << uint32(strlen(text)+1);
|
||||||
|
data << text;
|
||||||
|
data << uint8(0);
|
||||||
|
data << uint32(i_achievementId);
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
Player const& i_player;
|
||||||
|
ChatMsg i_msgtype;
|
||||||
|
int32 i_textId;
|
||||||
|
uint32 i_achievementId;
|
||||||
|
};
|
||||||
|
} // namespace MaNGOS
|
||||||
|
|
||||||
AchievementMgr::AchievementMgr(Player *player)
|
AchievementMgr::AchievementMgr(Player *player)
|
||||||
{
|
{
|
||||||
m_player = player;
|
m_player = player;
|
||||||
|
|
@ -276,20 +310,11 @@ void AchievementMgr::SendAchievementEarned(AchievementEntry const* achievement)
|
||||||
{
|
{
|
||||||
sLog.outDebug("AchievementMgr::SendAchievementEarned(%u)", achievement->ID);
|
sLog.outDebug("AchievementMgr::SendAchievementEarned(%u)", achievement->ID);
|
||||||
|
|
||||||
const char *msg = "|Hplayer:$N|h[$N]|h has earned the achievement $a!";
|
|
||||||
if(Guild* guild = objmgr.GetGuildById(GetPlayer()->GetGuildId()))
|
if(Guild* guild = objmgr.GetGuildById(GetPlayer()->GetGuildId()))
|
||||||
{
|
{
|
||||||
WorldPacket data(SMSG_MESSAGECHAT, 200);
|
MaNGOS::AchievementChatBuilder say_builder(*GetPlayer(), CHAT_MSG_GUILD_ACHIEVEMENT, LANG_ACHIEVEMENT_EARNED,achievement->ID);
|
||||||
data << uint8(CHAT_MSG_GUILD_ACHIEVEMENT);
|
MaNGOS::LocalizedPacketDo<MaNGOS::AchievementChatBuilder> say_do(say_builder);
|
||||||
data << uint32(LANG_UNIVERSAL);
|
guild->BroadcastWorker(say_do,GetPlayer());
|
||||||
data << uint64(GetPlayer()->GetGUID());
|
|
||||||
data << uint32(5);
|
|
||||||
data << uint64(GetPlayer()->GetGUID());
|
|
||||||
data << uint32(strlen(msg)+1);
|
|
||||||
data << msg;
|
|
||||||
data << uint8(0);
|
|
||||||
data << uint32(achievement->ID);
|
|
||||||
guild->BroadcastPacket(&data);
|
|
||||||
}
|
}
|
||||||
if(achievement->flags & (ACHIEVEMENT_FLAG_REALM_FIRST_KILL|ACHIEVEMENT_FLAG_REALM_FIRST_REACH))
|
if(achievement->flags & (ACHIEVEMENT_FLAG_REALM_FIRST_KILL|ACHIEVEMENT_FLAG_REALM_FIRST_REACH))
|
||||||
{
|
{
|
||||||
|
|
@ -298,23 +323,23 @@ void AchievementMgr::SendAchievementEarned(AchievementEntry const* achievement)
|
||||||
data << GetPlayer()->GetName();
|
data << GetPlayer()->GetName();
|
||||||
data << uint64(GetPlayer()->GetGUID());
|
data << uint64(GetPlayer()->GetGUID());
|
||||||
data << uint32(achievement->ID);
|
data << uint32(achievement->ID);
|
||||||
data << uint32(0); // 1=link supplied string as player name, 0=display plain string
|
data << uint32(0); // 1=link supplied string as player name, 0=display plain string
|
||||||
sWorld.SendGlobalMessage(&data);
|
sWorld.SendGlobalMessage(&data);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
WorldPacket data(SMSG_MESSAGECHAT, 200);
|
CellPair p = MaNGOS::ComputeCellPair(GetPlayer()->GetPositionX(), GetPlayer()->GetPositionY());
|
||||||
data << uint8(CHAT_MSG_ACHIEVEMENT);
|
|
||||||
data << uint32(LANG_UNIVERSAL);
|
|
||||||
data << uint64(GetPlayer()->GetGUID());
|
|
||||||
data << uint32(5);
|
|
||||||
data << uint64(GetPlayer()->GetGUID());
|
|
||||||
data << uint32(strlen(msg)+1);
|
|
||||||
data << msg;
|
|
||||||
data << uint8(0);
|
|
||||||
data << uint32(achievement->ID);
|
|
||||||
GetPlayer()->SendMessageToSet(&data, true);
|
|
||||||
|
|
||||||
|
Cell cell(p);
|
||||||
|
cell.data.Part.reserved = ALL_DISTRICT;
|
||||||
|
cell.SetNoCreate();
|
||||||
|
|
||||||
|
MaNGOS::AchievementChatBuilder say_builder(*GetPlayer(), CHAT_MSG_GUILD_ACHIEVEMENT, LANG_ACHIEVEMENT_EARNED,achievement->ID);
|
||||||
|
MaNGOS::LocalizedPacketDo<MaNGOS::AchievementChatBuilder> say_do(say_builder);
|
||||||
|
MaNGOS::PlayerDistWorker<MaNGOS::LocalizedPacketDo<MaNGOS::AchievementChatBuilder> > say_worker(GetPlayer(),sWorld.getConfig(CONFIG_LISTEN_RANGE_SAY),say_do);
|
||||||
|
TypeContainerVisitor<MaNGOS::PlayerDistWorker<MaNGOS::LocalizedPacketDo<MaNGOS::AchievementChatBuilder> >, WorldTypeMapContainer > message(say_worker);
|
||||||
|
CellLock<GridReadGuard> cell_lock(cell, p);
|
||||||
|
cell_lock->Visit(cell_lock, message, *GetPlayer()->GetMap());
|
||||||
}
|
}
|
||||||
WorldPacket data(SMSG_ACHIEVEMENT_EARNED, 8+4+8);
|
WorldPacket data(SMSG_ACHIEVEMENT_EARNED, 8+4+8);
|
||||||
data.append(GetPlayer()->GetPackGUID());
|
data.append(GetPlayer()->GetPackGUID());
|
||||||
|
|
|
||||||
|
|
@ -316,11 +316,12 @@ class Guild
|
||||||
void BroadcastPacket(WorldPacket *packet);
|
void BroadcastPacket(WorldPacket *packet);
|
||||||
|
|
||||||
template<class Do>
|
template<class Do>
|
||||||
void BroadcastWorker(Do& _do)
|
void BroadcastWorker(Do& _do, Player* except = NULL)
|
||||||
{
|
{
|
||||||
for(MemberList::iterator itr = members.begin(); itr != members.end(); ++itr)
|
for(MemberList::iterator itr = members.begin(); itr != members.end(); ++itr)
|
||||||
if(Player *player = ObjectAccessor::FindPlayer(MAKE_NEW_GUID(itr->first, 0, HIGHGUID_PLAYER)))
|
if(Player *player = ObjectAccessor::FindPlayer(MAKE_NEW_GUID(itr->first, 0, HIGHGUID_PLAYER)))
|
||||||
_do(player);
|
if(player != except)
|
||||||
|
_do(player);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CreateRank(std::string name,uint32 rights);
|
void CreateRank(std::string name,uint32 rights);
|
||||||
|
|
|
||||||
|
|
@ -693,7 +693,8 @@ enum MangosStrings
|
||||||
LANG_NEED_CHARACTER_NAME = 807,
|
LANG_NEED_CHARACTER_NAME = 807,
|
||||||
LANG_PLAYER_NOT_EXIST_OR_OFFLINE = 808,
|
LANG_PLAYER_NOT_EXIST_OR_OFFLINE = 808,
|
||||||
LANG_ACCOUNT_FOR_PLAYER_NOT_FOUND = 809,
|
LANG_ACCOUNT_FOR_PLAYER_NOT_FOUND = 809,
|
||||||
// Room for in-game strings 810-999 not used
|
LANG_ACHIEVEMENT_EARNED = 810,
|
||||||
|
// Room for in-game strings 811-999 not used
|
||||||
|
|
||||||
// Level 4 (CLI only commands)
|
// Level 4 (CLI only commands)
|
||||||
LANG_COMMAND_EXIT = 1000,
|
LANG_COMMAND_EXIT = 1000,
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
#ifndef __REVISION_NR_H__
|
#ifndef __REVISION_NR_H__
|
||||||
#define __REVISION_NR_H__
|
#define __REVISION_NR_H__
|
||||||
#define REVISION_NR "7311"
|
#define REVISION_NR "7312"
|
||||||
#endif // __REVISION_NR_H__
|
#endif // __REVISION_NR_H__
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue