diff options
| author | joschiwald <joschiwald.trinity@gmail.com> | 2015-01-02 03:46:32 +0100 |
|---|---|---|
| committer | joschiwald <joschiwald.trinity@gmail.com> | 2015-01-02 03:46:32 +0100 |
| commit | 3e9d7e83eb302c6ff4b1108a58505b608049edf9 (patch) | |
| tree | ab70fa56d5c75ee041506deb7e1672753e6f5aad /src/server/game/Server | |
| parent | a4afd80479a3cdb7938dd7dc091205118518b390 (diff) | |
| parent | 895e50be7a3a132482774d3b4fb817f5e501ac0f (diff) | |
Merge pull request #13809 from AriDEV/6.x
Server/PacketIO: Currency Updates
Diffstat (limited to 'src/server/game/Server')
| -rw-r--r-- | src/server/game/Server/Packets/MiscPackets.cpp | 48 | ||||
| -rw-r--r-- | src/server/game/Server/Packets/MiscPackets.h | 35 | ||||
| -rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 5 | ||||
| -rw-r--r-- | src/server/game/Server/Protocol/Opcodes.h | 3 |
4 files changed, 86 insertions, 5 deletions
diff --git a/src/server/game/Server/Packets/MiscPackets.cpp b/src/server/game/Server/Packets/MiscPackets.cpp index 455d077f684..31d8d2d54a1 100644 --- a/src/server/game/Server/Packets/MiscPackets.cpp +++ b/src/server/game/Server/Packets/MiscPackets.cpp @@ -46,11 +46,59 @@ WorldPacket const* WorldPackets::Misc::LoginSetTimeSpeed::Write() return &_worldPacket; } +WorldPacket const* WorldPackets::Misc::SetCurrency::Write() +{ + _worldPacket << uint32(Type); + _worldPacket << uint32(Quantity); + _worldPacket << uint32(Flags); + _worldPacket.WriteBit(WeeklyQuantity.HasValue); + _worldPacket.WriteBit(TrackedQuantity.HasValue); + _worldPacket.WriteBit(SuppressChatLog); + + if (WeeklyQuantity.HasValue) + _worldPacket << uint32(WeeklyQuantity.Value); + + if (TrackedQuantity.HasValue) + _worldPacket << uint32(TrackedQuantity.Value); + + _worldPacket.FlushBits(); + + return &_worldPacket; +} + void WorldPackets::Misc::SetSelection::Read() { _worldPacket >> Selection; } +WorldPacket const* WorldPackets::Misc::SetupCurrency::Write() +{ + _worldPacket << uint32(Data.size()); + + for (Record const& data : Data) + { + _worldPacket << uint32(data.Type); + _worldPacket << uint32(data.Quantity); + + _worldPacket.WriteBit(data.WeeklyQuantity.HasValue); + _worldPacket.WriteBit(data.MaxWeeklyQuantity.HasValue); + _worldPacket.WriteBit(data.TrackedQuantity.HasValue); + + _worldPacket.WriteBits(data.Flags, 5); + + if (data.WeeklyQuantity.HasValue) + _worldPacket << uint32(data.WeeklyQuantity.Value); + if (data.MaxWeeklyQuantity.HasValue) + _worldPacket << uint32(data.MaxWeeklyQuantity.Value); + if (data.TrackedQuantity.HasValue) + _worldPacket << uint32(data.TrackedQuantity.Value); + } + + _worldPacket.FlushBits(); + + return &_worldPacket; +} + void WorldPackets::Misc::ViolenceLevel::Read() { _worldPacket >> ViolenceLvl; diff --git a/src/server/game/Server/Packets/MiscPackets.h b/src/server/game/Server/Packets/MiscPackets.h index a2e587186f1..706cdb491a2 100644 --- a/src/server/game/Server/Packets/MiscPackets.h +++ b/src/server/game/Server/Packets/MiscPackets.h @@ -64,6 +64,21 @@ namespace WorldPackets int32 GameTimeHolidayOffset = 0; }; + class SetCurrency final : public ServerPacket + { + public: + SetCurrency() : ServerPacket(SMSG_SET_CURRENCY, 12) { } + + WorldPacket const* Write() override; + + bool SuppressChatLog = false; + Optional<int32> TrackedQuantity; + int32 Quantity = 0; + uint32 Flags = 0; + int32 Type = 0; + Optional<int32> WeeklyQuantity; + }; + class SetSelection final : public ClientPacket { public: @@ -74,6 +89,26 @@ namespace WorldPackets ObjectGuid Selection; ///< Target }; + class SetupCurrency final : public ServerPacket + { + public: + struct Record + { + int32 Type = 0; // ID from CurrencyTypes.dbc + int32 Quantity = 0; + Optional<int32> WeeklyQuantity; // Currency count obtained this Week. + Optional<int32> MaxWeeklyQuantity; // Weekly Currency cap. + Optional<int32> TrackedQuantity; + uint8 Flags = 0; // 0 = none, + }; + + SetupCurrency() : ServerPacket(SMSG_SETUP_CURRENCY, 22) { } + + WorldPacket const* Write() override; + + std::vector<Record> Data; + }; + class ViolenceLevel final : public ClientPacket { public: diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index 228847ed62f..bf0b9eec068 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -1026,7 +1026,6 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_INITIALIZE_FACTIONS, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_INITIAL_SETUP, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_INITIAL_SPELLS, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_INIT_CURRENCY, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_INIT_WORLD_STATES, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_INSPECT_HONOR_STATS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_INSPECT_RATED_BG_STATS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); @@ -1305,7 +1304,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_SERVER_PERF, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_AI_ANIM_KIT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_ALL_TASK_PROGRESS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_CURRENCY, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_CURRENCY, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_DF_FAST_LAUNCH_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_FACTION_ATWAR, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_FACTION_NOT_VISIBLE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); @@ -1323,6 +1322,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_PROFICIENCY, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_PROJECTILE_POSITION, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_TIME_ZONE_INFORMATION, STATUS_NEVER, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_SETUP_CURRENCY, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SHOWTAXINODES, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SHOW_BANK, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SHOW_MAILBOX, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); @@ -1424,7 +1424,6 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_UNIT_SPELLCAST_START, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_UPDATE_ACCOUNT_DATA, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_UPDATE_COMBO_POINTS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_UPDATE_CURRENCY, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_UPDATE_CURRENCY_WEEK_LIMIT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_UPDATE_DUNGEON_ENCOUNTER_FOR_LOOT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_UPDATE_INSTANCE_ENCOUNTER_UNIT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); diff --git a/src/server/game/Server/Protocol/Opcodes.h b/src/server/game/Server/Protocol/Opcodes.h index 1c250f54291..3177cb77d2a 100644 --- a/src/server/game/Server/Protocol/Opcodes.h +++ b/src/server/game/Server/Protocol/Opcodes.h @@ -1016,7 +1016,6 @@ enum OpcodeServer : uint32 SMSG_INITIALIZE_FACTIONS = 0x0B10, SMSG_INITIAL_SETUP = 0x0B07, SMSG_INITIAL_SPELLS = 0x0A81, - SMSG_INIT_CURRENCY = 0x0B06, SMSG_INIT_WORLD_STATES = 0x0B04, SMSG_INSPECT = 0xBADD, SMSG_INSPECT_HONOR_STATS = 0xBADD, @@ -1327,6 +1326,7 @@ enum OpcodeServer : uint32 SMSG_SET_PROJECTILE_POSITION = 0xBADD, SMSG_SET_TIME_ZONE_INFORMATION = 0x153E, SMSG_SET_VIGNETTE = 0x09AC, + SMSG_SETUP_CURRENCY = 0x0B06, SMSG_SHOWTAXINODES = 0x12A1, SMSG_SHOW_BANK = 0x0204, SMSG_SHOW_MAILBOX = 0xBADD, @@ -1429,7 +1429,6 @@ enum OpcodeServer : uint32 SMSG_UNIT_SPELLCAST_START = 0xBADD, SMSG_UPDATE_ACCOUNT_DATA = 0x1520, SMSG_UPDATE_COMBO_POINTS = 0xBADD, - SMSG_UPDATE_CURRENCY = 0xBADD, SMSG_UPDATE_CURRENCY_WEEK_LIMIT = 0xBADD, SMSG_UPDATE_DUNGEON_ENCOUNTER_FOR_LOOT = 0xBADD, SMSG_UPDATE_INSTANCE_ENCOUNTER_UNIT = 0xBADD, |
