From 895e50be7a3a132482774d3b4fb817f5e501ac0f Mon Sep 17 00:00:00 2001 From: AriDEV Date: Mon, 29 Dec 2014 09:08:41 +0100 Subject: Server/PacketIO: Currency Updates * Update SMSG_SET_CURRENCY & SMSG_SETUP_CURRENCY Packets. * Update of Database Structure and SQLStatements for Currencies. Signed-off-by: AriDEV --- src/server/game/Server/Packets/MiscPackets.cpp | 48 ++++++++++++++++++++++++++ src/server/game/Server/Packets/MiscPackets.h | 35 +++++++++++++++++++ src/server/game/Server/Protocol/Opcodes.cpp | 5 ++- src/server/game/Server/Protocol/Opcodes.h | 3 +- 4 files changed, 86 insertions(+), 5 deletions(-) (limited to 'src/server/game/Server') diff --git a/src/server/game/Server/Packets/MiscPackets.cpp b/src/server/game/Server/Packets/MiscPackets.cpp index 154ff134a6a..03960aa4e4c 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 dfff0e331fc..8b0b010038b 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 TrackedQuantity; + int32 Quantity = 0; + uint32 Flags = 0; + int32 Type = 0; + Optional 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 WeeklyQuantity; // Currency count obtained this Week. + Optional MaxWeeklyQuantity; // Weekly Currency cap. + Optional TrackedQuantity; + uint8 Flags = 0; // 0 = none, + }; + + SetupCurrency() : ServerPacket(SMSG_SETUP_CURRENCY, 22) { } + + WorldPacket const* Write() override; + + std::vector 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 6919d457ecb..eb35eab8007 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -1020,7 +1020,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); @@ -1293,7 +1292,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); @@ -1311,6 +1310,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); @@ -1412,7 +1412,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 0c8f0569da8..d95ed8b0bc6 100644 --- a/src/server/game/Server/Protocol/Opcodes.h +++ b/src/server/game/Server/Protocol/Opcodes.h @@ -1013,7 +1013,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, @@ -1319,6 +1318,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, @@ -1421,7 +1421,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, -- cgit v1.2.3