aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/updates/world/2014_09_02_00_world_misc_335.sql2
-rw-r--r--src/server/game/Achievements/AchievementMgr.cpp10
-rw-r--r--src/server/game/Entities/Player/Player.cpp2
-rw-r--r--src/server/game/Guilds/Guild.cpp22
-rw-r--r--src/server/game/Guilds/Guild.h9
-rw-r--r--src/server/game/Handlers/GuildFinderHandler.cpp2
-rw-r--r--src/server/game/Handlers/GuildHandler.cpp6
-rw-r--r--src/server/game/Handlers/LFGHandler.cpp4
-rw-r--r--src/server/game/Handlers/MiscHandler.cpp4
-rw-r--r--src/server/game/Handlers/QueryHandler.cpp2
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp14
-rw-r--r--src/server/game/Server/WorldSession.h1
-rw-r--r--src/server/game/Spells/SpellMgr.cpp3
13 files changed, 65 insertions, 16 deletions
diff --git a/sql/updates/world/2014_09_02_00_world_misc_335.sql b/sql/updates/world/2014_09_02_00_world_misc_335.sql
new file mode 100644
index 00000000000..0ead7e514e6
--- /dev/null
+++ b/sql/updates/world/2014_09_02_00_world_misc_335.sql
@@ -0,0 +1,2 @@
+--
+UPDATE `creature_template` SET `faction` = 554 WHERE `entry` = 3203;
diff --git a/src/server/game/Achievements/AchievementMgr.cpp b/src/server/game/Achievements/AchievementMgr.cpp
index c85aacb3336..785bc605310 100644
--- a/src/server/game/Achievements/AchievementMgr.cpp
+++ b/src/server/game/Achievements/AchievementMgr.cpp
@@ -2034,8 +2034,13 @@ template<>
void AchievementMgr<Guild>::SendAllAchievementData(Player* receiver) const
{
VisibleAchievementPred isVisible;
- WorldPacket data(SMSG_GUILD_ACHIEVEMENT_DATA, m_completedAchievements.size() * (4 + 4) + 3);
- data.WriteBits(std::count_if(m_completedAchievements.begin(), m_completedAchievements.end(), isVisible), 23);
+
+ auto count = std::count_if(m_completedAchievements.begin(), m_completedAchievements.end(), isVisible);
+
+ WorldPacket data(SMSG_GUILD_ACHIEVEMENT_DATA, count * (4 + 4) + 3);
+ data.WriteBits(count, 23);
+ data.FlushBits();
+
for (CompletedAchievementMap::const_iterator itr = m_completedAchievements.begin(); itr != m_completedAchievements.end(); ++itr)
{
if (!isVisible(*itr))
@@ -2148,6 +2153,7 @@ void AchievementMgr<Guild>::SendAchievementInfo(Player* receiver, uint32 achieve
// send empty packet
WorldPacket data(SMSG_GUILD_CRITERIA_DATA, 3);
data.WriteBits(0, 21);
+ data.FlushBits();
receiver->GetSession()->SendPacket(&data);
return;
}
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 45c0ceae281..563993fa3d8 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -7343,7 +7343,7 @@ void Player::SendPvpRewards() const
packet << GetCurrencyOnWeek(CURRENCY_TYPE_CONQUEST_META_RBG, true);
packet << GetCurrencyOnWeek(CURRENCY_TYPE_CONQUEST_META_ARENA, true);
packet << GetCurrencyWeekCap(CURRENCY_TYPE_CONQUEST_POINTS, true);
- packet << GetCurrencyWeekCap(CURRENCY_TYPE_CONQUEST_META_RBG, true);
+
GetSession()->SendPacket(&packet);
}
diff --git a/src/server/game/Guilds/Guild.cpp b/src/server/game/Guilds/Guild.cpp
index 3ee01c88c3f..2b0c2be4bbd 100644
--- a/src/server/game/Guilds/Guild.cpp
+++ b/src/server/game/Guilds/Guild.cpp
@@ -2162,6 +2162,28 @@ void Guild::HandleGuildPartyRequest(WorldSession* session)
TC_LOG_DEBUG("guild", "SMSG_GUILD_PARTY_STATE_RESPONSE [%s]", session->GetPlayerInfo().c_str());
}
+void Guild::HandleGuildRequestChallengeUpdate(WorldSession* session)
+{
+ WorldPacket data(SMSG_GUILD_CHALLENGE_UPDATED, 4 * GUILD_CHALLENGES_TYPES * 5);
+
+ for (int i = 0; i < GUILD_CHALLENGES_TYPES; ++i)
+ data << uint32(GuildChallengeXPReward[i]);
+
+ for (int i = 0; i < GUILD_CHALLENGES_TYPES; ++i)
+ data << uint32(GuildChallengeGoldReward[i]);
+
+ for (int i = 0; i < GUILD_CHALLENGES_TYPES; ++i)
+ data << uint32(GuildChallengesPerWeek[i]);
+
+ for (int i = 0; i < GUILD_CHALLENGES_TYPES; ++i)
+ data << uint32(GuildChallengeMaxLevelGoldReward[i]);
+
+ for (int i = 0; i < GUILD_CHALLENGES_TYPES; ++i)
+ data << uint32(0); /// @todo current count
+
+ session->SendPacket(&data);
+}
+
void Guild::SendEventLog(WorldSession* session) const
{
WorldPacket data(SMSG_GUILD_EVENT_LOG_QUERY_RESULT, 1 + m_eventLog->GetSize() * (1 + 8 + 4));
diff --git a/src/server/game/Guilds/Guild.h b/src/server/game/Guilds/Guild.h
index d5421bc67b5..730626e0675 100644
--- a/src/server/game/Guilds/Guild.h
+++ b/src/server/game/Guilds/Guild.h
@@ -268,6 +268,14 @@ struct GuildReward
uint32 const MinNewsItemLevel[MAX_CONTENT] = { 61, 90, 200, 353 };
+// Guild Challenge
+#define GUILD_CHALLENGES_TYPES 4
+
+const uint32 GuildChallengeGoldReward[GUILD_CHALLENGES_TYPES] = { 0, 250, 1000, 500 };
+const uint32 GuildChallengeMaxLevelGoldReward[GUILD_CHALLENGES_TYPES] = { 0, 125, 500, 250 };
+const uint32 GuildChallengeXPReward[GUILD_CHALLENGES_TYPES] = { 0, 300000, 3000000, 1500000 };
+const uint32 GuildChallengesPerWeek[GUILD_CHALLENGES_TYPES] = { 0, 7, 1, 3 };
+
// Emblem info
class EmblemInfo
{
@@ -804,6 +812,7 @@ public:
void HandleDisband(WorldSession* session);
void HandleGuildPartyRequest(WorldSession* session);
void HandleNewsSetSticky(WorldSession* session, uint32 newsId, bool sticky);
+ void HandleGuildRequestChallengeUpdate(WorldSession* session);
void UpdateMemberData(Player* player, uint8 dataid, uint32 value);
void OnPlayerStatusChange(Player* player, uint32 flag, bool state);
diff --git a/src/server/game/Handlers/GuildFinderHandler.cpp b/src/server/game/Handlers/GuildFinderHandler.cpp
index 14175b44d9f..f4baafd1d6f 100644
--- a/src/server/game/Handlers/GuildFinderHandler.cpp
+++ b/src/server/game/Handlers/GuildFinderHandler.cpp
@@ -356,8 +356,8 @@ void WorldSession::HandleGuildFinderPostRequest(WorldPacket& /*recvPacket*/)
if (isGuildMaster)
{
- data.WriteBit(settings.IsListed());
data.WriteBits(settings.GetComment().size(), 11);
+ data.WriteBit(settings.IsListed());
data << uint32(settings.GetLevel());
data.WriteString(settings.GetComment());
data << uint32(0); // Unk Int32
diff --git a/src/server/game/Handlers/GuildHandler.cpp b/src/server/game/Handlers/GuildHandler.cpp
index a4229f0fe66..7538ef05034 100644
--- a/src/server/game/Handlers/GuildHandler.cpp
+++ b/src/server/game/Handlers/GuildHandler.cpp
@@ -709,6 +709,12 @@ void WorldSession::HandleGuildRequestPartyState(WorldPacket& recvPacket)
guild->HandleGuildPartyRequest(this);
}
+void WorldSession::HandleGuildRequestChallengeUpdate(WorldPacket& /*recvPacket*/)
+{
+ if (Guild* guild = _player->GetGuild())
+ guild->HandleGuildRequestChallengeUpdate(this);
+}
+
void WorldSession::HandleGuildRequestMaxDailyXP(WorldPacket& recvPacket)
{
ObjectGuid guid;
diff --git a/src/server/game/Handlers/LFGHandler.cpp b/src/server/game/Handlers/LFGHandler.cpp
index c67d0bbf895..8f38a940d21 100644
--- a/src/server/game/Handlers/LFGHandler.cpp
+++ b/src/server/game/Handlers/LFGHandler.cpp
@@ -237,8 +237,8 @@ void WorldSession::HandleLfgSetRolesOpcode(WorldPacket& recvData)
void WorldSession::HandleLfgSetCommentOpcode(WorldPacket& recvData)
{
- std::string comment;
- recvData >> comment;
+ uint32 length = recvData.ReadBits(9);
+ std::string comment = recvData.ReadString(length);
TC_LOG_DEBUG("lfg", "CMSG_LFG_SET_COMMENT %s comment: %s",
GetPlayerInfo().c_str(), comment.c_str());
diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp
index 99cab39c241..81c08b4c35b 100644
--- a/src/server/game/Handlers/MiscHandler.cpp
+++ b/src/server/game/Handlers/MiscHandler.cpp
@@ -533,8 +533,8 @@ void WorldSession::HandleRequestCemeteryList(WorldPacket& /*recvPacket*/)
data.WriteBit(0); // Is MicroDungeon (WorldMapFrame.lua)
data.WriteBits(graveyardIds.size(), 24);
- for (int i = 0; i < graveyardIds.size(); ++i)
- data << uint32(graveyardIds[i]);
+ for (uint32 id : graveyardIds)
+ data << id;
SendPacket(&data);
}
diff --git a/src/server/game/Handlers/QueryHandler.cpp b/src/server/game/Handlers/QueryHandler.cpp
index 78b2c4a3a2a..e6c94250262 100644
--- a/src/server/game/Handlers/QueryHandler.cpp
+++ b/src/server/game/Handlers/QueryHandler.cpp
@@ -424,7 +424,7 @@ void WorldSession::HandleQuestNPCQuery(WorldPacket& recvData)
uint32 count = recvData.ReadBits(24);
std::map<uint32, std::vector<uint32>> quests;
- for (int i = 0; i < count; ++i)
+ for (uint32 i = 0; i < count; ++i)
{
uint32 questId;
recvData >> questId;
diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp
index f5bd0ce9071..68e3227c339 100644
--- a/src/server/game/Server/Protocol/Opcodes.cpp
+++ b/src/server/game/Server/Protocol/Opcodes.cpp
@@ -275,7 +275,7 @@ void OpcodeTable::Initialize()
DEFINE_OPCODE_HANDLER(CMSG_GUILD_QUERY_RANKS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildQueryRanksOpcode );
DEFINE_OPCODE_HANDLER(CMSG_GUILD_REMOVE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildRemoveOpcode );
DEFINE_OPCODE_HANDLER(CMSG_GUILD_REPLACE_GUILD_MASTER, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
- DEFINE_OPCODE_HANDLER(CMSG_GUILD_REQUEST_CHALLENGE_UPDATE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
+ DEFINE_OPCODE_HANDLER(CMSG_GUILD_REQUEST_CHALLENGE_UPDATE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildRequestChallengeUpdate);
DEFINE_OPCODE_HANDLER(CMSG_GUILD_REQUEST_MAX_DAILY_XP, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildRequestMaxDailyXP );
DEFINE_OPCODE_HANDLER(CMSG_GUILD_REQUEST_PARTY_STATE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildRequestPartyState );
DEFINE_OPCODE_HANDLER(CMSG_GUILD_ROSTER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildRosterOpcode );
@@ -307,7 +307,7 @@ void OpcodeTable::Initialize()
DEFINE_OPCODE_HANDLER(CMSG_LFG_LOCK_INFO_REQUEST, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleLfgGetLockInfoOpcode );
DEFINE_OPCODE_HANDLER(CMSG_LFG_PROPOSAL_RESULT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleLfgProposalResultOpcode );
DEFINE_OPCODE_HANDLER(CMSG_LFG_SET_BOOT_VOTE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleLfgSetBootVoteOpcode );
- DEFINE_OPCODE_HANDLER(CMSG_LFG_SET_COMMENT, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
+ DEFINE_OPCODE_HANDLER(CMSG_LFG_SET_COMMENT, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleLfgSetCommentOpcode );
DEFINE_OPCODE_HANDLER(CMSG_LFG_SET_ROLES, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleLfgSetRolesOpcode );
DEFINE_OPCODE_HANDLER(CMSG_LFG_TELEPORT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleLfgTeleportOpcode );
DEFINE_OPCODE_HANDLER(CMSG_LF_GUILD_ADD_RECRUIT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildFinderAddRecruit );
@@ -855,7 +855,7 @@ void OpcodeTable::Initialize()
DEFINE_OPCODE_HANDLER(SMSG_GUILD_BANK_MONEY_WITHDRAWN, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
DEFINE_OPCODE_HANDLER(SMSG_GUILD_BANK_QUERY_TEXT_RESULT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
DEFINE_OPCODE_HANDLER(SMSG_GUILD_CHALLENGE_COMPLETED, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
- DEFINE_OPCODE_HANDLER(SMSG_GUILD_CHALLENGE_UPDATED, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
+ DEFINE_OPCODE_HANDLER(SMSG_GUILD_CHALLENGE_UPDATED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
DEFINE_OPCODE_HANDLER(SMSG_GUILD_CHANGE_NAME_RESULT, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
DEFINE_OPCODE_HANDLER(SMSG_GUILD_COMMAND_RESULT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
DEFINE_OPCODE_HANDLER(SMSG_GUILD_COMMAND_RESULT_2, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
@@ -1137,7 +1137,7 @@ void OpcodeTable::Initialize()
DEFINE_OPCODE_HANDLER(SMSG_REFORGE_RESULT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
DEFINE_OPCODE_HANDLER(SMSG_REMOVED_SPELL, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
DEFINE_OPCODE_HANDLER(SMSG_REPORT_PVP_AFK_RESULT, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
- DEFINE_OPCODE_HANDLER(SMSG_REQUEST_CEMETERY_LIST_RESPONSE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
+ DEFINE_OPCODE_HANDLER(SMSG_REQUEST_CEMETERY_LIST_RESPONSE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
DEFINE_OPCODE_HANDLER(SMSG_REQUEST_PVP_REWARDS_RESPONSE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
DEFINE_OPCODE_HANDLER(SMSG_RESEARCH_COMPLETE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
DEFINE_OPCODE_HANDLER(SMSG_RESEARCH_SETUP_HISTORY, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
@@ -1280,9 +1280,9 @@ void OpcodeTable::Initialize()
DEFINE_OPCODE_HANDLER(SMSG_UPDATE_OBJECT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
DEFINE_OPCODE_HANDLER(SMSG_UPDATE_SERVER_PLAYER_POSITION, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
DEFINE_OPCODE_HANDLER(SMSG_UPDATE_WORLD_STATE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
- DEFINE_OPCODE_HANDLER(SMSG_USERLIST_ADD, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
- DEFINE_OPCODE_HANDLER(SMSG_USERLIST_REMOVE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
- DEFINE_OPCODE_HANDLER(SMSG_USERLIST_UPDATE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
+ DEFINE_OPCODE_HANDLER(SMSG_USERLIST_ADD, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
+ DEFINE_OPCODE_HANDLER(SMSG_USERLIST_REMOVE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
+ DEFINE_OPCODE_HANDLER(SMSG_USERLIST_UPDATE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
DEFINE_OPCODE_HANDLER(SMSG_VOICESESSION_FULL, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
DEFINE_OPCODE_HANDLER(SMSG_VOICE_CHAT_STATUS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
DEFINE_OPCODE_HANDLER(SMSG_VOICE_PARENTAL_CONTROLS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h
index b5eb168cbbd..3a8c1eaec2f 100644
--- a/src/server/game/Server/WorldSession.h
+++ b/src/server/game/Server/WorldSession.h
@@ -595,6 +595,7 @@ class WorldSession
void HandleGuildChangeInfoTextOpcode(WorldPacket& recvPacket);
void HandleSaveGuildEmblemOpcode(WorldPacket& recvPacket);
void HandleGuildRequestPartyState(WorldPacket& recvPacket);
+ void HandleGuildRequestChallengeUpdate(WorldPacket& recvPacket);
void HandleGuildRequestMaxDailyXP(WorldPacket& recvPacket);
void HandleAutoDeclineGuildInvites(WorldPacket& recvPacket);
diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp
index 18c529d0515..7423fd08d88 100644
--- a/src/server/game/Spells/SpellMgr.cpp
+++ b/src/server/game/Spells/SpellMgr.cpp
@@ -85,6 +85,9 @@ DiminishingGroup GetDiminishingReturnsGroupForSpell(SpellInfo const* spellproto,
// Black Plague
else if (spellproto->Id == 64155)
return DIMINISHING_NONE;
+ // Screams of the Dead (King Ymiron)
+ else if (spellproto->Id == 51750)
+ return DIMINISHING_NONE;
break;
}
// Event spells