aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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/GuildHandler.cpp6
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp4
-rw-r--r--src/server/game/Server/WorldSession.h1
5 files changed, 40 insertions, 2 deletions
diff --git a/src/server/game/Guilds/Guild.cpp b/src/server/game/Guilds/Guild.cpp
index 8cfa6a4e681..31ba9ca2809 100644
--- a/src/server/game/Guilds/Guild.cpp
+++ b/src/server/game/Guilds/Guild.cpp
@@ -2156,6 +2156,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 c8ee4d7b0a8..47f1d65757d 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
{
@@ -798,6 +806,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/GuildHandler.cpp b/src/server/game/Handlers/GuildHandler.cpp
index a6e63d196c2..86e0984f406 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/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp
index 572074ae6fc..8b4535ff22f 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 );
@@ -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 );
diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h
index 646a76bcbe5..4f19049a7fa 100644
--- a/src/server/game/Server/WorldSession.h
+++ b/src/server/game/Server/WorldSession.h
@@ -594,6 +594,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);