aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2012-08-22 19:50:42 +0200
committerShauren <shauren.trinity@gmail.com>2012-08-22 19:50:42 +0200
commit28a81b3d2376694760b0add783389f6584f429c6 (patch)
tree23b7a86c090ba9ca069c415e68be6fe1a5dbd790 /src
parente4648b745caf33b2afea24f9cb75de6cf58eecff (diff)
Core/Guilds: Corrected guild packet login sequence and removed unused opcode
Diffstat (limited to 'src')
-rw-r--r--src/server/game/DataStores/DBCStores.cpp2
-rwxr-xr-xsrc/server/game/DataStores/DBCStores.h5
-rw-r--r--src/server/game/DataStores/DBCStructure.h8
-rwxr-xr-xsrc/server/game/DataStores/DBCfmt.h1
-rw-r--r--src/server/game/Guilds/Guild.cpp67
-rwxr-xr-xsrc/server/game/Guilds/Guild.h10
-rwxr-xr-xsrc/server/game/Handlers/GuildHandler.cpp8
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp4
-rwxr-xr-xsrc/server/game/Server/Protocol/Opcodes.h1
-rwxr-xr-xsrc/server/game/Server/WorldSession.h1
10 files changed, 71 insertions, 36 deletions
diff --git a/src/server/game/DataStores/DBCStores.cpp b/src/server/game/DataStores/DBCStores.cpp
index 3a0f48c1991..ffceb4e60aa 100644
--- a/src/server/game/DataStores/DBCStores.cpp
+++ b/src/server/game/DataStores/DBCStores.cpp
@@ -109,6 +109,7 @@ DBCStorage <GtRegenMPPerSptEntry> sGtRegenMPPerSptStore(GtRegenMPPerSptf
DBCStorage <GtSpellScalingEntry> sGtSpellScalingStore(GtSpellScalingfmt);
DBCStorage <GtOCTBaseHPByClassEntry> sGtOCTBaseHPByClassStore(GtOCTBaseHPByClassfmt);
DBCStorage <GtOCTBaseMPByClassEntry> sGtOCTBaseMPByClassStore(GtOCTBaseMPByClassfmt);
+DBCStorage <GuildPerkSpellsEntry> sGuildPerkSpellsStore(GuildPerkSpellsfmt);
DBCStorage <HolidaysEntry> sHolidaysStore(Holidaysfmt);
@@ -400,6 +401,7 @@ void LoadDBCStores(const std::string& dataPath)
LoadDBC(availableDbcLocales, bad_dbc_files, sGtSpellScalingStore, dbcPath, "gtSpellScaling.dbc");//15595
LoadDBC(availableDbcLocales, bad_dbc_files, sGtOCTBaseHPByClassStore, dbcPath, "gtOCTBaseHPByClass.dbc");//15595
LoadDBC(availableDbcLocales, bad_dbc_files, sGtOCTBaseMPByClassStore, dbcPath, "gtOCTBaseMPByClass.dbc");//15595
+ LoadDBC(availableDbcLocales, bad_dbc_files, sGuildPerkSpellsStore, dbcPath, "GuildPerkSpells.dbc");//15595
LoadDBC(availableDbcLocales, bad_dbc_files, sHolidaysStore, dbcPath, "Holidays.dbc");//14545
LoadDBC(availableDbcLocales, bad_dbc_files, sImportPriceArmorStore, dbcPath, "ImportPriceArmor.dbc"); // 15595
diff --git a/src/server/game/DataStores/DBCStores.h b/src/server/game/DataStores/DBCStores.h
index 0c19a64f12c..f669049be5c 100755
--- a/src/server/game/DataStores/DBCStores.h
+++ b/src/server/game/DataStores/DBCStores.h
@@ -121,8 +121,9 @@ extern DBCStorage <GtOCTClassCombatRatingScalarEntry> sGtOCTClassCombatRatingSca
extern DBCStorage <gtOCTHpPerStaminaEntry> sGtOCTHpPerStaminaStore;
extern DBCStorage <GtRegenMPPerSptEntry> sGtRegenMPPerSptStore;
extern DBCStorage <GtSpellScalingEntry> sGtSpellScalingStore;
-extern DBCStorage <GtOCTBaseHPByClassEntry> sGtOCTBaseHPByClassStore;
-extern DBCStorage <GtOCTBaseMPByClassEntry> sGtOCTBaseMPByClassStore;
+extern DBCStorage <GtOCTBaseHPByClassEntry> sGtOCTBaseHPByClassStore;
+extern DBCStorage <GtOCTBaseMPByClassEntry> sGtOCTBaseMPByClassStore;
+extern DBCStorage <GuildPerkSpellsEntry> sGuildPerkSpellsStore;
extern DBCStorage <HolidaysEntry> sHolidaysStore;
extern DBCStorage <ImportPriceArmorEntry> sImportPriceArmorStore;
extern DBCStorage <ImportPriceQualityEntry> sImportPriceQualityStore;
diff --git a/src/server/game/DataStores/DBCStructure.h b/src/server/game/DataStores/DBCStructure.h
index 4e688d39c75..b12aee36fc1 100644
--- a/src/server/game/DataStores/DBCStructure.h
+++ b/src/server/game/DataStores/DBCStructure.h
@@ -1131,6 +1131,14 @@ struct GtOCTBaseMPByClassEntry
{
float ratio;
};
+
+struct GuildPerkSpellsEntry
+{
+ //uint32 Id;
+ uint32 Level;
+ uint32 SpellId;
+};
+
/* no used
struct HolidayDescriptionsEntry
{
diff --git a/src/server/game/DataStores/DBCfmt.h b/src/server/game/DataStores/DBCfmt.h
index 4999a10a9de..8dfc40d9b4e 100755
--- a/src/server/game/DataStores/DBCfmt.h
+++ b/src/server/game/DataStores/DBCfmt.h
@@ -79,6 +79,7 @@ const char GtRegenMPPerSptfmt[]="xf";
const char GtSpellScalingfmt[]="df";
const char GtOCTBaseHPByClassfmt[]="df";
const char GtOCTBaseMPByClassfmt[]="df";
+const char GuildPerkSpellsfmt[]="dii";
const char Holidaysfmt[]="niiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiixxsiix";
const char ImportPriceArmorfmt[]="nffff";
const char ImportPriceQualityfmt[]="nf";
diff --git a/src/server/game/Guilds/Guild.cpp b/src/server/game/Guilds/Guild.cpp
index f66e6ff8a03..24cf5147522 100644
--- a/src/server/game/Guilds/Guild.cpp
+++ b/src/server/game/Guilds/Guild.cpp
@@ -1219,7 +1219,7 @@ void Guild::HandleRoster(WorldSession* session /*= NULL*/)
memberData << uint32(player ? player->GetZoneId() : member->GetZone());
memberData << uint64(0); // Total activity
memberData.WriteByteSeq(guid[7]);
- memberData << uint32(0); // Remaining guild week Rep
+ memberData << uint32(member->GetRemainingWeeklyReputation());// Remaining guild week Rep
if (pubNoteLength)
memberData.WriteString(member->GetPublicNote());
@@ -1250,9 +1250,9 @@ void Guild::HandleRoster(WorldSession* session /*= NULL*/)
data.WriteString(m_info);
data.WriteString(m_motd);
- data << uint32(0);
- data << uint32(0);
- data << uint32(0);
+ data << uint32(m_accountsNumber);
+ data << uint32(GUILD_REPUATATION_WEEKLY_CAP);
+ data << uint32(secsToTimeBitFields(m_createdDate));
data << uint32(0);
if (session)
@@ -1305,7 +1305,7 @@ void Guild::HandleQuery(WorldSession* session)
sLog->outDebug(LOG_FILTER_GUILD, "WORLD: Sent (SMSG_GUILD_QUERY_RESPONSE)");
}
-void Guild::HandleGuildRanks(WorldSession* session)
+void Guild::HandleGuildRanks(WorldSession* session) const
{
// perhaps move to guild.cpp.....
ByteBuffer rankData(100);
@@ -1315,7 +1315,7 @@ void Guild::HandleGuildRanks(WorldSession* session)
for (uint8 i = 0; i < _GetRanksSize(); i++)
{
- RankInfo* rankInfo = GetRankInfo(i);
+ RankInfo const* rankInfo = GetRankInfo(i);
if (!rankInfo)
continue;
@@ -1918,18 +1918,6 @@ void Guild::HandleGuildPartyRequest(WorldSession* session)
///////////////////////////////////////////////////////////////////////////////
// Send data to client
-void Guild::SendInfo(WorldSession* session) const
-{
- WorldPacket data(SMSG_GUILD_INFO, m_name.size() + 4 + 4 + 4);
- data << m_name;
- data << secsToTimeBitFields(m_createdDate); // 3.x (prev. year + month + day)
- data << uint32(m_members.size()); // Number of members
- data << m_accountsNumber; // Number of accounts
-
- session->SendPacket(&data);
- sLog->outDebug(LOG_FILTER_GUILD, "WORLD: Sent (SMSG_GUILD_INFO)");
-}
-
void Guild::SendEventLog(WorldSession* session) const
{
WorldPacket data(MSG_GUILD_EVENT_LOG_QUERY, 1 + m_eventLog->GetSize() * (1 + 8 + 4));
@@ -2016,6 +2004,17 @@ void Guild::SendMoneyInfo(WorldSession* session) const
void Guild::SendLoginInfo(WorldSession* session) const
{
+ /*
+ Login sequence:
+ SMSG_GUILD_EVENT - GE_MOTD
+ SMSG_GUILD_RANK
+ SMSG_GUILD_EVENT - GE_SIGNED_ON
+ -- learn perks
+ SMSG_GUILD_REPUTATION_WEEKLY_CAP
+ SMSG_GUILD_ACHIEVEMENT_DATA
+ SMSG_GUILD_MEMBER_DAILY_RESET // bank withdrawal reset
+ */
+
WorldPacket data(SMSG_GUILD_EVENT, 1 + 1 + m_motd.size() + 1);
data << uint8(GE_MOTD);
data << uint8(1);
@@ -2023,9 +2022,39 @@ void Guild::SendLoginInfo(WorldSession* session) const
session->SendPacket(&data);
sLog->outDebug(LOG_FILTER_GUILD, "WORLD: Sent guild MOTD (SMSG_GUILD_EVENT)");
- SendBankTabsInfo(session);
+ HandleGuildRanks(session);
_BroadcastEvent(GE_SIGNED_ON, session->GetPlayer()->GetGUID(), session->GetPlayer()->GetName());
+
+ // Send to self separately, player is not in world yet and is not found by _BroadcastEvent
+ data.Initialize(SMSG_GUILD_EVENT, 1 + 1 + strlen(session->GetPlayer()->GetName()) + 8);
+ data << uint8(GE_SIGNED_ON);
+ data << uint8(1);
+ data << session->GetPlayer()->GetName();
+ data << uint64(session->GetPlayer()->GetGUID());
+ session->SendPacket(&data);
+
+ for (uint32 i = 0; i < sGuildPerkSpellsStore.GetNumRows(); ++i)
+ if (GuildPerkSpellsEntry const* entry = sGuildPerkSpellsStore.LookupEntry(i))
+ if (entry->Level >= GetLevel())
+ session->GetPlayer()->learnSpell(entry->SpellId, false);
+
+ SendGuildReputationWeeklyCap(session);
+
+ GetAchievementMgr().SendAllAchievementData(session->GetPlayer());
+
+ data.Initialize(SMSG_GUILD_MEMBER_DAILY_RESET, 0); // tells the client to request bank withdrawal limit
+ session->SendPacket(&data);
+}
+
+void Guild::SendGuildReputationWeeklyCap(WorldSession* session) const
+{
+ if (Member const* member = GetMember(session->GetPlayer()->GetGUID()))
+ {
+ WorldPacket data(SMSG_GUILD_REPUTATION_WEEKLY_CAP, 4);
+ data << uint32(member->GetRemainingWeeklyReputation());
+ session->SendPacket(&data);
+ }
}
///////////////////////////////////////////////////////////////////////////////
diff --git a/src/server/game/Guilds/Guild.h b/src/server/game/Guilds/Guild.h
index 94d161cd34f..27c87c6853c 100755
--- a/src/server/game/Guilds/Guild.h
+++ b/src/server/game/Guilds/Guild.h
@@ -72,7 +72,7 @@ enum GuildRankRights
GR_RIGHT_WITHDRAW_REPAIR = 0x00040000, // withdraw for repair
GR_RIGHT_WITHDRAW_GOLD = 0x00080000, // withdraw gold
GR_RIGHT_CREATE_GUILD_EVENT = 0x00100000, // wotlk
- GR_RIGHT_ALL = 0x001DF1FF
+ GR_RIGHT_ALL = 0x00DDFFBF
};
enum GuildCommandType
@@ -224,6 +224,8 @@ enum GuildMemberFlags
GUILDMEMBER_STATUS_MOBILE = 0x0008, // remote chat from mobile app
};
+#define GUILD_REPUATATION_WEEKLY_CAP 4375
+
////////////////////////////////////////////////////////////////////////////////////////////
// Emblem info
class EmblemInfo
@@ -324,6 +326,8 @@ private:
inline Player* FindPlayer() const { return ObjectAccessor::FindPlayer(m_guid); }
+ uint32 GetRemainingWeeklyReputation() const { return 0; }
+
private:
uint32 m_guildId;
// Fields from characters table
@@ -634,7 +638,7 @@ public:
// Handle client commands
void HandleRoster(WorldSession* session = NULL); // NULL = broadcast
void HandleQuery(WorldSession* session);
- void HandleGuildRanks(WorldSession* session);
+ void HandleGuildRanks(WorldSession* session) const;
void HandleSetMOTD(WorldSession* session, const std::string& motd);
void HandleSetInfo(WorldSession* session, const std::string& info);
void HandleSetEmblem(WorldSession* session, const EmblemInfo& emblemInfo);
@@ -658,7 +662,6 @@ public:
void HandleGuildPartyRequest(WorldSession* session);
// Send info to client
- void SendInfo(WorldSession* session) const;
void SendEventLog(WorldSession* session) const;
void SendBankLog(WorldSession* session, uint8 tabId) const;
void SendBankTabsInfo(WorldSession* session) const;
@@ -667,6 +670,7 @@ public:
void SendPermissions(WorldSession* session) const;
void SendMoneyInfo(WorldSession* session) const;
void SendLoginInfo(WorldSession* session) const;
+ void SendGuildReputationWeeklyCap(WorldSession* session) const;
// Load from DB
bool LoadFromDB(Field* fields);
diff --git a/src/server/game/Handlers/GuildHandler.cpp b/src/server/game/Handlers/GuildHandler.cpp
index 6ace7782de6..05e9d0d2691 100755
--- a/src/server/game/Handlers/GuildHandler.cpp
+++ b/src/server/game/Handlers/GuildHandler.cpp
@@ -116,14 +116,6 @@ void WorldSession::HandleGuildDeclineOpcode(WorldPacket& /*recvPacket*/)
GetPlayer()->SetInGuild(0);
}
-void WorldSession::HandleGuildInfoOpcode(WorldPacket& /*recvPacket*/)
-{
- sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_GUILD_INFO");
-
- if (Guild* guild = _GetPlayerGuild(this, true))
- guild->SendInfo(this);
-}
-
void WorldSession::HandleGuildRosterOpcode(WorldPacket& recvPacket)
{
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_GUILD_ROSTER");
diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp
index 95e38ffcb0d..3426a8ceb54 100644
--- a/src/server/game/Server/Protocol/Opcodes.cpp
+++ b/src/server/game/Server/Protocol/Opcodes.cpp
@@ -851,7 +851,7 @@ void InitOpcodes()
DEFINE_OPCODE_HANDLER(SMSG_GUILD_INVITE_CANCEL, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
DEFINE_OPCODE_HANDLER(SMSG_GUILD_MAX_DAILY_XP, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
DEFINE_OPCODE_HANDLER(SMSG_GUILD_MEMBERS_FOR_RECIPE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
- DEFINE_OPCODE_HANDLER(SMSG_GUILD_MEMBER_DAILY_RESET, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
+ DEFINE_OPCODE_HANDLER(SMSG_GUILD_MEMBER_DAILY_RESET, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
DEFINE_OPCODE_HANDLER(SMSG_GUILD_MEMBER_RECIPES, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
DEFINE_OPCODE_HANDLER(SMSG_GUILD_MEMBER_UPDATE_NOTE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
DEFINE_OPCODE_HANDLER(SMSG_GUILD_MOVE_COMPLETE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
@@ -866,7 +866,7 @@ void InitOpcodes()
DEFINE_OPCODE_HANDLER(SMSG_GUILD_RECIPES, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
DEFINE_OPCODE_HANDLER(SMSG_GUILD_RENAMED, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
DEFINE_OPCODE_HANDLER(SMSG_GUILD_REPUTATION_REACTION_CHANGED, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
- DEFINE_OPCODE_HANDLER(SMSG_GUILD_REPUTATION_WEEKLY_CAP, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
+ DEFINE_OPCODE_HANDLER(SMSG_GUILD_REPUTATION_WEEKLY_CAP, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
DEFINE_OPCODE_HANDLER(SMSG_GUILD_RESET, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
DEFINE_OPCODE_HANDLER(SMSG_GUILD_REWARDS_LIST, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
DEFINE_OPCODE_HANDLER(SMSG_GUILD_ROSTER, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
diff --git a/src/server/game/Server/Protocol/Opcodes.h b/src/server/game/Server/Protocol/Opcodes.h
index 8ca134b8862..9e290128996 100755
--- a/src/server/game/Server/Protocol/Opcodes.h
+++ b/src/server/game/Server/Protocol/Opcodes.h
@@ -939,7 +939,6 @@ enum Opcodes
SMSG_GUILD_EVENT = 0x0705,
SMSG_GUILD_EVENT_LOG_QUERY = 0x10B2,
SMSG_GUILD_FLAGGED_FOR_RENAME = 0x30B6,
- SMSG_GUILD_INFO = 0x0000,
SMSG_GUILD_INVITE = 0x14A2,
SMSG_GUILD_INVITE_CANCEL = 0x0606,
SMSG_GUILD_KNOWN_RECIPES = 0x0000,
diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h
index 2427ede716a..444c79de95d 100755
--- a/src/server/game/Server/WorldSession.h
+++ b/src/server/game/Server/WorldSession.h
@@ -571,7 +571,6 @@ class WorldSession
void HandleGuildRemoveOpcode(WorldPacket& recvPacket);
void HandleGuildAcceptOpcode(WorldPacket& recvPacket);
void HandleGuildDeclineOpcode(WorldPacket& recvPacket);
- void HandleGuildInfoOpcode(WorldPacket& recvPacket);
void HandleGuildEventLogQueryOpcode(WorldPacket& recvPacket);
void HandleGuildRosterOpcode(WorldPacket& recvPacket);
void HandleGuildPromoteOpcode(WorldPacket& recvPacket);