diff options
| author | megamage <none@none> | 2009-03-24 17:43:16 -0600 |
|---|---|---|
| committer | megamage <none@none> | 2009-03-24 17:43:16 -0600 |
| commit | 3c10cc0635cc5645524752272e829de030230f85 (patch) | |
| tree | 40216dd2db7eb9e6937286acdb13bcc6a1d6af5d /src | |
| parent | 1c6c199f5da5e811fb3e010175bb065510924b9a (diff) | |
[7534] Fixed some problems in achievement messages broadcasting. Author: VladimirMangos
* Send SMSG_CRITERIA_UPDATE to player itself only. This will fix bug when, for example near player death
owerwrite another player death count in statistics until next death or relogin.
* Send to near player CHAT_MSG_ACHIEVEMENT instead CHAT_MSG_GUILD_ACHIEVEMENT
* Not send CHAT_MSG_GUILD_ACHIEVEMENT to player itself.
* Limit around broadcast of SMSG_ACHIEVEMENT_EARNED to CONFIG_LISTEN_RANGE_SAY (same as for CHAT_MSG_ACHIEVEMENT)
--HG--
branch : trunk
Diffstat (limited to 'src')
| -rw-r--r-- | src/game/AchievementMgr.cpp | 8 | ||||
| -rw-r--r-- | src/shared/Database/DBCEnums.h | 1 |
2 files changed, 5 insertions, 4 deletions
diff --git a/src/game/AchievementMgr.cpp b/src/game/AchievementMgr.cpp index aef535cc337..5e8078de0b1 100644 --- a/src/game/AchievementMgr.cpp +++ b/src/game/AchievementMgr.cpp @@ -319,6 +319,7 @@ void AchievementMgr::SendAchievementEarned(AchievementEntry const* achievement) MaNGOS::LocalizedPacketDo<MaNGOS::AchievementChatBuilder> say_do(say_builder); guild->BroadcastWorker(say_do,GetPlayer()); } + if(achievement->flags & (ACHIEVEMENT_FLAG_REALM_FIRST_KILL|ACHIEVEMENT_FLAG_REALM_FIRST_REACH)) { // broadcast realm first reached @@ -337,19 +338,20 @@ void AchievementMgr::SendAchievementEarned(AchievementEntry const* achievement) cell.data.Part.reserved = ALL_DISTRICT; cell.SetNoCreate(); - MaNGOS::AchievementChatBuilder say_builder(*GetPlayer(), CHAT_MSG_GUILD_ACHIEVEMENT, LANG_ACHIEVEMENT_EARNED,achievement->ID); + MaNGOS::AchievementChatBuilder say_builder(*GetPlayer(), CHAT_MSG_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); data.append(GetPlayer()->GetPackGUID()); data << uint32(achievement->ID); data << uint32(secsToTimeBitFields(time(NULL))); data << uint32(0); - GetPlayer()->SendMessageToSet(&data, true); + GetPlayer()->SendMessageToSetInRange(&data, sWorld.getConfig(CONFIG_LISTEN_RANGE_SAY), true); } void AchievementMgr::SendCriteriaUpdate(uint32 id, CriteriaProgress const* progress) @@ -365,7 +367,7 @@ void AchievementMgr::SendCriteriaUpdate(uint32 id, CriteriaProgress const* progr data << uint32(secsToTimeBitFields(progress->date)); data << uint32(0); // timer 1 data << uint32(0); // timer 2 - GetPlayer()->SendMessageToSet(&data, true); + GetPlayer()->SendDirectMessage(&data); } /** diff --git a/src/shared/Database/DBCEnums.h b/src/shared/Database/DBCEnums.h index ee4f165f898..c5801c7b315 100644 --- a/src/shared/Database/DBCEnums.h +++ b/src/shared/Database/DBCEnums.h @@ -88,7 +88,6 @@ enum AchievementCriteriaTypes ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_DAILY_QUEST = 14, ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_BATTLEGROUND= 15, ACHIEVEMENT_CRITERIA_TYPE_DEATH_AT_MAP= 16, - // TODO: this can be both arena and total deaths. Where is this difference in the dbc? ACHIEVEMENT_CRITERIA_TYPE_DEATH= 17, ACHIEVEMENT_CRITERIA_TYPE_DEATH_IN_DUNGEON = 18, ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_RAID = 19, |
