diff options
| author | joschiwald <joschiwald.trinity@gmail.com> | 2014-11-19 02:12:47 +0100 |
|---|---|---|
| committer | joschiwald <joschiwald.trinity@gmail.com> | 2014-11-19 02:12:47 +0100 |
| commit | b7baee390cefaad4226173edceb02073bd0dc150 (patch) | |
| tree | 0b4e2ba94fe32372092bc6a729078f79fb2e4df6 /src/server/game/Server | |
| parent | dbb102e6470dd51dbd277f4be9a3d20b977d7afe (diff) | |
Core/Packets: updated SMSG_BINDPOINTUPDATE, SMSG_INVALIDATE_PLAYER, SMSG_LOGIN_SETTIMESPEED, SMSG_WORLD_SERVER_INFO
Diffstat (limited to 'src/server/game/Server')
| -rw-r--r-- | src/server/game/Server/Packets/ChatPackets.h | 10 | ||||
| -rw-r--r-- | src/server/game/Server/Packets/MiscPackets.cpp | 59 | ||||
| -rw-r--r-- | src/server/game/Server/Packets/MiscPackets.h | 65 | ||||
| -rw-r--r-- | src/server/game/Server/Packets/ReputationPackets.h | 2 | ||||
| -rw-r--r-- | src/server/game/Server/Packets/SpellPackets.h | 5 | ||||
| -rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 8 | ||||
| -rw-r--r-- | src/server/game/Server/WorldSession.cpp | 26 | ||||
| -rw-r--r-- | src/server/game/Server/WorldSession.h | 24 |
8 files changed, 164 insertions, 35 deletions
diff --git a/src/server/game/Server/Packets/ChatPackets.h b/src/server/game/Server/Packets/ChatPackets.h index 47735177dd9..15764afe152 100644 --- a/src/server/game/Server/Packets/ChatPackets.h +++ b/src/server/game/Server/Packets/ChatPackets.h @@ -130,7 +130,7 @@ namespace WorldPackets class Chat final : public ServerPacket { public: - Chat() : ServerPacket(SMSG_MESSAGECHAT, 1+1+8+8+8+8+8+4+4+4+1+4+20) { } + Chat() : ServerPacket(SMSG_MESSAGECHAT, 100) { } WorldPacket const* Write() override; @@ -138,7 +138,7 @@ namespace WorldPackets uint8 Language = LANG_UNIVERSAL; ObjectGuid SenderGUID; ObjectGuid SenderGuildGUID; - ObjectGuid SenderAccountGUID; // Not in JAM messages but appears in packet? + ObjectGuid SenderAccountGUID; ObjectGuid TargetGUID; ObjectGuid PartyGUID; uint32 SenderVirtualAddress; @@ -158,7 +158,7 @@ namespace WorldPackets class Emote final : public ServerPacket { public: - Emote() : ServerPacket(SMSG_EMOTE, 8+4) { } + Emote() : ServerPacket(SMSG_EMOTE, 18 + 4) { } WorldPacket const* Write() override; @@ -181,12 +181,12 @@ namespace WorldPackets class STextEmote final : public ServerPacket { public: - STextEmote() : ServerPacket(SMSG_TEXT_EMOTE, 8+8+4+4) { } + STextEmote() : ServerPacket(SMSG_TEXT_EMOTE, 3 * 18 + 2 * 4) { } WorldPacket const* Write() override; ObjectGuid SourceGUID; - ObjectGuid SourceAccountGUID; // Not in JAM + ObjectGuid SourceAccountGUID; ObjectGuid TargetGUID; int32 SoundIndex; int32 EmoteID; diff --git a/src/server/game/Server/Packets/MiscPackets.cpp b/src/server/game/Server/Packets/MiscPackets.cpp index d223b73e310..967e60a1f49 100644 --- a/src/server/game/Server/Packets/MiscPackets.cpp +++ b/src/server/game/Server/Packets/MiscPackets.cpp @@ -17,6 +17,35 @@ #include "MiscPackets.h" +WorldPacket const* WorldPackets::Misc::BindPointUpdate::Write() +{ + _worldPacket << float(BindPosition.x); + _worldPacket << float(BindPosition.y); + _worldPacket << float(BindPosition.z); + _worldPacket << uint32(BindMapID); + _worldPacket << uint32(BindAreaID); + + return &_worldPacket; +} + +WorldPacket const* WorldPackets::Misc::InvalidatePlayer::Write() +{ + _worldPacket << Guid; + + return &_worldPacket; +} + +WorldPacket const* WorldPackets::Misc::LoginSetTimeSpeed::Write() +{ + _worldPacket.AppendPackedTime(ServerTime); + _worldPacket.AppendPackedTime(GameTime); + _worldPacket << float(NewSpeed); + _worldPacket << uint32(ServerTimeHolidayOffset); + _worldPacket << uint32(GameTimeHolidayOffset); + + return &_worldPacket; +} + void WorldPackets::Misc::ViolenceLevel::Read() { _worldPacket >> ViolenceLvl; @@ -44,8 +73,34 @@ WorldPacket const* WorldPackets::Misc::UITime::Write() WorldPacket const* WorldPackets::Misc::TutorialFlags::Write() { - for (uint8 i = 0; i < MAX_ACCOUNT_TUTORIAL_VALUES; ++i) - _worldPacket << TutorialData[i]; + _worldPacket.append(TutorialData, MAX_ACCOUNT_TUTORIAL_VALUES); + + return &_worldPacket; +} + +WorldPacket const* WorldPackets::Misc::WorldServerInfo::Write() +{ + _worldPacket << uint32(DifficultyID); + _worldPacket << uint8(IsTournamentRealm); + _worldPacket << uint32(WeeklyReset); + _worldPacket.WriteBit(IneligibleForLootMask.HasValue); + _worldPacket.WriteBit(InstanceGroupSize.HasValue); + _worldPacket.WriteBit(RestrictedAccountMaxLevel.HasValue); + _worldPacket.WriteBit(RestrictedAccountMaxMoney.HasValue); + + if (IneligibleForLootMask.HasValue) + _worldPacket << uint32(IneligibleForLootMask.value); + + if (InstanceGroupSize.HasValue) + _worldPacket << uint32(InstanceGroupSize.value); + + if (RestrictedAccountMaxLevel.HasValue) + _worldPacket << uint32(RestrictedAccountMaxLevel.value); + + if (RestrictedAccountMaxMoney.HasValue) + _worldPacket << uint32(RestrictedAccountMaxMoney.value); + + _worldPacket.FlushBits(); return &_worldPacket; } diff --git a/src/server/game/Server/Packets/MiscPackets.h b/src/server/game/Server/Packets/MiscPackets.h index 86f2f4c5eb4..7bb2cb3fb9b 100644 --- a/src/server/game/Server/Packets/MiscPackets.h +++ b/src/server/game/Server/Packets/MiscPackets.h @@ -19,11 +19,49 @@ #define MiscPackets_h__ #include "Packet.h" +#include "ObjectGuid.h" +#include "WorldSession.h" namespace WorldPackets { namespace Misc { + class BindPointUpdate final : public ServerPacket + { + public: + BindPointUpdate() : ServerPacket(SMSG_BINDPOINTUPDATE, 20) { } + + WorldPacket const* Write() override; + + uint32 BindMapID = MAPID_INVALID; + G3D::Vector3 BindPosition; + uint32 BindAreaID = 0; + }; + + class InvalidatePlayer final : public ServerPacket + { + public: + InvalidatePlayer() : ServerPacket(SMSG_INVALIDATE_PLAYER, 18) { } + + WorldPacket const* Write() override; + + ObjectGuid Guid; + }; + + class LoginSetTimeSpeed final : public ServerPacket + { + public: + LoginSetTimeSpeed() : ServerPacket(SMSG_LOGIN_SETTIMESPEED, 20) { } + + WorldPacket const* Write() override; + + float NewSpeed = 0.0f; + int32 ServerTimeHolidayOffset = 0; + uint32 GameTime = 0; + uint32 ServerTime = 0; + int32 GameTimeHolidayOffset = 0; + }; + class ViolenceLevel final : public ClientPacket { public: @@ -54,7 +92,7 @@ namespace WorldPackets uint32 ClientTime = 0; // Client ticks in ms uint32 SequenceIndex = 0; // Same index as in request }; - + class UITime final : public ServerPacket { public: @@ -64,15 +102,34 @@ namespace WorldPackets uint32 Time = 0; }; - + class TutorialFlags : public ServerPacket { public: - TutorialFlags() : ServerPacket(SMSG_TUTORIAL_FLAGS, 32) { } + TutorialFlags() : ServerPacket(SMSG_TUTORIAL_FLAGS, 32) + { + std::memset(TutorialData, 0, sizeof(TutorialData)); + } + + WorldPacket const* Write() override; + + uint32 TutorialData[MAX_ACCOUNT_TUTORIAL_VALUES]; + }; + + class WorldServerInfo final : public ServerPacket + { + public: + WorldServerInfo() : ServerPacket(SMSG_WORLD_SERVER_INFO, 26) { } WorldPacket const* Write() override; - uint32 TutorialData[8]; + Optional<uint32> IneligibleForLootMask; ///< Encountermask? + uint32 WeeklyReset = 0; ///< UnixTime of last Weekly Reset Time + Optional<uint32> InstanceGroupSize; + uint8 IsTournamentRealm = 0; + Optional<uint32> RestrictedAccountMaxLevel; + Optional<uint32> RestrictedAccountMaxMoney; + uint32 DifficultyID = 0; }; } } diff --git a/src/server/game/Server/Packets/ReputationPackets.h b/src/server/game/Server/Packets/ReputationPackets.h index b893d6b522f..387ae9b0318 100644 --- a/src/server/game/Server/Packets/ReputationPackets.h +++ b/src/server/game/Server/Packets/ReputationPackets.h @@ -28,7 +28,7 @@ namespace WorldPackets class InitializeFactions final : public ServerPacket { public: - InitializeFactions() : ServerPacket(SMSG_INITIALIZE_FACTIONS) + InitializeFactions() : ServerPacket(SMSG_INITIALIZE_FACTIONS, 1312) { for (uint16 i = 0; i < FactionCount; ++i) { diff --git a/src/server/game/Server/Packets/SpellPackets.h b/src/server/game/Server/Packets/SpellPackets.h index 2b4e4c3c146..c02f5cc2a5f 100644 --- a/src/server/game/Server/Packets/SpellPackets.h +++ b/src/server/game/Server/Packets/SpellPackets.h @@ -58,7 +58,10 @@ namespace WorldPackets class UpdateActionButtons final : public ServerPacket { public: - UpdateActionButtons() : ServerPacket(SMSG_ACTION_BUTTONS, MAX_ACTION_BUTTONS*8+1) { } + UpdateActionButtons() : ServerPacket(SMSG_ACTION_BUTTONS, MAX_ACTION_BUTTONS * 8 + 1) + { + std::memset(ActionButtons, 0, sizeof(ActionButtons)); + } WorldPacket const* Write() override; diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index 6e506e2544e..9f97e53df42 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -767,7 +767,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLE_PET_JOURNAL_LOCK_ACQUIRED, STATUS_UNHANDLED); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLE_PET_NAME_QUERY_RESPONSE, STATUS_UNHANDLED); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BINDER_CONFIRM, STATUS_UNHANDLED); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_BINDPOINTUPDATE, STATUS_UNHANDLED); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_BINDPOINTUPDATE, STATUS_NEVER); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BINDZONEREPLY, STATUS_UNHANDLED); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BREAK_TARGET, STATUS_UNHANDLED); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BUY_BANK_SLOT_RESULT, STATUS_UNHANDLED); @@ -1010,7 +1010,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_INSTANCE_RESET_FAILED, STATUS_UNHANDLED); DEFINE_SERVER_OPCODE_HANDLER(SMSG_INSTANCE_SAVE_CREATED, STATUS_UNHANDLED); DEFINE_SERVER_OPCODE_HANDLER(SMSG_INVALIDATE_DANCE, STATUS_UNHANDLED); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_INVALIDATE_PLAYER, STATUS_UNHANDLED); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_INVALIDATE_PLAYER, STATUS_NEVER); DEFINE_SERVER_OPCODE_HANDLER(SMSG_INVALID_PROMOTION_CODE, STATUS_UNHANDLED); DEFINE_SERVER_OPCODE_HANDLER(SMSG_INVENTORY_CHANGE_FAILURE, STATUS_UNHANDLED); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ITEM_ADD_PASSIVE, STATUS_UNHANDLED); @@ -1052,7 +1052,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_LF_GUILD_RECRUIT_LIST_UPDATED, STATUS_UNHANDLED); DEFINE_SERVER_OPCODE_HANDLER(SMSG_LIST_INVENTORY, STATUS_UNHANDLED); DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOAD_CUF_PROFILES, STATUS_UNHANDLED); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOGIN_SETTIMESPEED, STATUS_UNHANDLED); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOGIN_SETTIMESPEED, STATUS_NEVER); DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOGIN_VERIFY_WORLD, STATUS_NEVER); DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOGOUT_CANCEL_ACK, STATUS_NEVER); DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOGOUT_COMPLETE, STATUS_NEVER); @@ -1416,7 +1416,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_WEEKLY_SPELL_USAGE_UPDATE, STATUS_UNHANDLED); DEFINE_SERVER_OPCODE_HANDLER(SMSG_WHO, STATUS_UNHANDLED); DEFINE_SERVER_OPCODE_HANDLER(SMSG_WHOIS, STATUS_UNHANDLED); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_WORLD_SERVER_INFO, STATUS_UNHANDLED); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_WORLD_SERVER_INFO, STATUS_NEVER); DEFINE_SERVER_OPCODE_HANDLER(SMSG_WORLD_STATE_UI_TIMER_UPDATE, STATUS_NEVER); DEFINE_SERVER_OPCODE_HANDLER(SMSG_XP_GAIN_ABORTED, STATUS_UNHANDLED); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ZONE_UNDER_ATTACK, STATUS_UNHANDLED); diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp index 18fe28344b0..a8d19434cc3 100644 --- a/src/server/game/Server/WorldSession.cpp +++ b/src/server/game/Server/WorldSession.cpp @@ -695,7 +695,7 @@ void WorldSession::LoadAccountData(PreparedQueryResult result, uint32 mask) { for (uint32 i = 0; i < NUM_ACCOUNT_DATA_TYPES; ++i) if (mask & (1 << i)) - m_accountData[i] = AccountData(); + _accountData[i] = AccountData(); if (!result) return; @@ -718,20 +718,20 @@ void WorldSession::LoadAccountData(PreparedQueryResult result, uint32 mask) continue; } - m_accountData[type].Time = time_t(fields[1].GetUInt32()); - m_accountData[type].Data = fields[2].GetString(); + _accountData[type].Time = time_t(fields[1].GetUInt32()); + _accountData[type].Data = fields[2].GetString(); } while (result->NextRow()); } -void WorldSession::SetAccountData(AccountDataType type, time_t tm, std::string const& data) +void WorldSession::SetAccountData(AccountDataType type, uint32 time, std::string const& data) { if ((1 << type) & GLOBAL_CACHE_MASK) { PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_REP_ACCOUNT_DATA); stmt->setUInt32(0, GetAccountId()); stmt->setUInt8(1, type); - stmt->setUInt32(2, uint32(tm)); + stmt->setUInt32(2, time); stmt->setString(3, data); CharacterDatabase.Execute(stmt); } @@ -744,24 +744,24 @@ void WorldSession::SetAccountData(AccountDataType type, time_t tm, std::string c PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_REP_PLAYER_ACCOUNT_DATA); stmt->setUInt64(0, m_GUIDLow); stmt->setUInt8(1, type); - stmt->setUInt32(2, uint32(tm)); + stmt->setUInt32(2, time); stmt->setString(3, data); CharacterDatabase.Execute(stmt); } - m_accountData[type].Time = tm; - m_accountData[type].Data = data; + _accountData[type].Time = time_t(time); + _accountData[type].Data = data; } void WorldSession::LoadTutorialsData() { - memset(m_Tutorials, 0, sizeof(uint32) * MAX_ACCOUNT_TUTORIAL_VALUES); + memset(_tutorials, 0, sizeof(uint32) * MAX_ACCOUNT_TUTORIAL_VALUES); PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_TUTORIALS); stmt->setUInt32(0, GetAccountId()); if (PreparedQueryResult result = CharacterDatabase.Query(stmt)) for (uint8 i = 0; i < MAX_ACCOUNT_TUTORIAL_VALUES; ++i) - m_Tutorials[i] = (*result)[i].GetUInt32(); + _tutorials[i] = (*result)[i].GetUInt32(); m_TutorialsChanged = false; } @@ -769,11 +769,11 @@ void WorldSession::LoadTutorialsData() void WorldSession::SendTutorialsData() { WorldPackets::Misc::TutorialFlags packet; - memcpy(packet.TutorialData, m_Tutorials, sizeof(packet.TutorialData)); + memcpy(packet.TutorialData, _tutorials, sizeof(_tutorials)); SendPacket(packet.Write()); } -void WorldSession::SaveTutorialsData(SQLTransaction &trans) +void WorldSession::SaveTutorialsData(SQLTransaction& trans) { if (!m_TutorialsChanged) return; @@ -784,7 +784,7 @@ void WorldSession::SaveTutorialsData(SQLTransaction &trans) // Modify data in DB stmt = CharacterDatabase.GetPreparedStatement(hasTutorials ? CHAR_UPD_TUTORIALS : CHAR_INS_TUTORIALS); for (uint8 i = 0; i < MAX_ACCOUNT_TUTORIAL_VALUES; ++i) - stmt->setUInt32(i, m_Tutorials[i]); + stmt->setUInt32(i, _tutorials[i]); stmt->setUInt32(MAX_ACCOUNT_TUTORIAL_VALUES, GetAccountId()); trans->Append(stmt); diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index 14513730e84..652ce589eac 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -130,7 +130,7 @@ namespace WorldPackets { class QueryGuildInfo; } - + namespace Talent { class SetSpecialization; @@ -180,6 +180,20 @@ enum AccountDataType #define REGISTERED_ADDON_PREFIX_SOFTCAP 64 +enum Tutorials +{ + TUTORIAL_TALENT = 0, + TUTORIAL_SPEC = 1, + TUTORIAL_GLYPH = 2, + TUTORIAL_SPELLBOOK = 3, + TUTORIAL_PROFESSIONS = 4, + TUTORIAL_CORE_ABILITITES = 5, + TUTORIAL_PET_JOURNAL = 6, + TUTORIAL_WHAT_HAS_CHANGED = 7 +}; + +#define MAX_ACCOUNT_TUTORIAL_VALUES 8 + struct AccountData { time_t Time = 0; @@ -398,8 +412,8 @@ class WorldSession bool CheckStableMaster(ObjectGuid guid); // Account Data - AccountData const* GetAccountData(AccountDataType type) const { return &m_accountData[type]; } - void SetAccountData(AccountDataType type, time_t tm, std::string const& data); + AccountData const* GetAccountData(AccountDataType type) const { return &_accountData[type]; } + void SetAccountData(AccountDataType type, uint32 time, std::string const& data); void LoadGlobalAccountData(); void LoadAccountData(PreparedQueryResult result, uint32 mask); @@ -1194,8 +1208,8 @@ class WorldSession LocaleConstant m_sessionDbLocaleIndex; std::atomic<uint32> m_latency; std::atomic<uint32> m_clientTimeDelay; - AccountData m_accountData[NUM_ACCOUNT_DATA_TYPES]; - uint32 m_Tutorials[MAX_ACCOUNT_TUTORIAL_VALUES]; + AccountData _accountData[NUM_ACCOUNT_DATA_TYPES]; + uint32 _tutorials[MAX_ACCOUNT_TUTORIAL_VALUES]; bool m_TutorialsChanged; AddonsList m_addonsList; std::vector<std::string> _registeredAddonPrefixes; |
