diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/DataStores/DBCStores.cpp | 2 | ||||
-rwxr-xr-x | src/server/game/DataStores/DBCStores.h | 5 | ||||
-rw-r--r-- | src/server/game/DataStores/DBCStructure.h | 8 | ||||
-rwxr-xr-x | src/server/game/DataStores/DBCfmt.h | 1 | ||||
-rw-r--r-- | src/server/game/Guilds/Guild.cpp | 67 | ||||
-rwxr-xr-x | src/server/game/Guilds/Guild.h | 10 | ||||
-rwxr-xr-x | src/server/game/Handlers/GuildHandler.cpp | 8 | ||||
-rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 4 | ||||
-rwxr-xr-x | src/server/game/Server/Protocol/Opcodes.h | 1 | ||||
-rwxr-xr-x | src/server/game/Server/WorldSession.h | 1 |
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); |