aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Server
diff options
context:
space:
mode:
authorjoschiwald <joschiwald.trinity@gmail.com>2015-01-02 03:46:32 +0100
committerjoschiwald <joschiwald.trinity@gmail.com>2015-01-02 03:46:32 +0100
commit3e9d7e83eb302c6ff4b1108a58505b608049edf9 (patch)
treeab70fa56d5c75ee041506deb7e1672753e6f5aad /src/server/game/Server
parenta4afd80479a3cdb7938dd7dc091205118518b390 (diff)
parent895e50be7a3a132482774d3b4fb817f5e501ac0f (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.cpp48
-rw-r--r--src/server/game/Server/Packets/MiscPackets.h35
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp5
-rw-r--r--src/server/game/Server/Protocol/Opcodes.h3
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,