aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Server
diff options
context:
space:
mode:
authorfrozen4 <frozen4@163.com>2016-06-21 20:33:51 +0200
committerShauren <shauren.trinity@gmail.com>2016-06-21 20:33:51 +0200
commited00534e7c311530e5fbb1ffb567d9459ff4c1f0 (patch)
tree5a234b348c9eaff312b80fd3bf2a4fed5a6ee309 /src/server/game/Server
parent5f2c62392cadc3b87816a5330bbd573e95c9326c (diff)
Core/Items: Implemented item upgrades
Closes #17432
Diffstat (limited to 'src/server/game/Server')
-rw-r--r--src/server/game/Server/Packets/ItemPackets.cpp17
-rw-r--r--src/server/game/Server/Packets/ItemPackets.h24
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp3
-rw-r--r--src/server/game/Server/Protocol/Opcodes.h1
-rw-r--r--src/server/game/Server/WorldSession.h2
5 files changed, 46 insertions, 1 deletions
diff --git a/src/server/game/Server/Packets/ItemPackets.cpp b/src/server/game/Server/Packets/ItemPackets.cpp
index e627d80fdea..8ac3e947135 100644
--- a/src/server/game/Server/Packets/ItemPackets.cpp
+++ b/src/server/game/Server/Packets/ItemPackets.cpp
@@ -529,6 +529,15 @@ void WorldPackets::Item::UseCritterItem::Read()
_worldPacket >> ItemGuid;
}
+void WorldPackets::Item::UpgradeItem::Read()
+{
+ _worldPacket >> ItemMaster;
+ _worldPacket >> ItemGUID;
+ _worldPacket >> UpgradeID;
+ _worldPacket >> ContainerSlot;
+ _worldPacket >> Slot;
+}
+
void WorldPackets::Item::SocketGems::Read()
{
_worldPacket >> ItemGuid;
@@ -544,3 +553,11 @@ WorldPacket const* WorldPackets::Item::SocketGemsResult::Write()
return &_worldPacket;
}
+
+WorldPacket const* WorldPackets::Item::ItemUpgradeResult::Write()
+{
+ _worldPacket.WriteBit(Success);
+ _worldPacket.FlushBits();
+
+ return &_worldPacket;
+}
diff --git a/src/server/game/Server/Packets/ItemPackets.h b/src/server/game/Server/Packets/ItemPackets.h
index 833d1bd9261..ad821682f9c 100644
--- a/src/server/game/Server/Packets/ItemPackets.h
+++ b/src/server/game/Server/Packets/ItemPackets.h
@@ -502,6 +502,30 @@ namespace WorldPackets
ObjectGuid ItemGuid;
};
+ class UpgradeItem final : public ClientPacket
+ {
+ public:
+ UpgradeItem(WorldPacket&& packet) : ClientPacket(CMSG_UPGRADE_ITEM, std::move(packet)) { }
+
+ void Read() override;
+
+ ObjectGuid ItemMaster;
+ ObjectGuid ItemGUID;
+ int32 ContainerSlot = 0;
+ int32 UpgradeID = 0;
+ int32 Slot = 0;
+ };
+
+ class ItemUpgradeResult final : public ServerPacket
+ {
+ public:
+ ItemUpgradeResult() : ServerPacket(SMSG_ITEM_UPGRADE_RESULT, 1) { }
+
+ WorldPacket const* Write() override;
+
+ bool Success = false;
+ };
+
class SocketGems final : public ClientPacket
{
public:
diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp
index a284d874191..fc1501b6894 100644
--- a/src/server/game/Server/Protocol/Opcodes.cpp
+++ b/src/server/game/Server/Protocol/Opcodes.cpp
@@ -774,7 +774,7 @@ void OpcodeTable::Initialize()
DEFINE_HANDLER(CMSG_UPDATE_WOW_TOKEN_AUCTIONABLE_LIST, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, WorldPackets::Token::UpdateListedAuctionableTokens, &WorldSession::HandleUpdateListedAuctionableTokens);
DEFINE_HANDLER(CMSG_UPDATE_WOW_TOKEN_COUNT, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_UPGRADE_GARRISON, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
- DEFINE_HANDLER(CMSG_UPGRADE_ITEM, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
+ DEFINE_HANDLER(CMSG_UPGRADE_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Item::UpgradeItem, &WorldSession::HandleUpgradeItem);
DEFINE_HANDLER(CMSG_USED_FOLLOW, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_USE_CRITTER_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Item::UseCritterItem, &WorldSession::HandleUseCritterItem);
DEFINE_HANDLER(CMSG_USE_EQUIPMENT_SET, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::EquipmentSet::UseEquipmentSet, &WorldSession::HandleUseEquipmentSet);
@@ -1228,6 +1228,7 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_ITEM_PURCHASE_REFUND_RESULT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_ITEM_PUSH_RESULT, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_ITEM_TIME_UPDATE, STATUS_NEVER, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_ITEM_UPGRADE_RESULT, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_KICK_REASON, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_LEARNED_SPELLS, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_LEARN_TALENT_FAILED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
diff --git a/src/server/game/Server/Protocol/Opcodes.h b/src/server/game/Server/Protocol/Opcodes.h
index 37f8500fe84..5e428ec9a4d 100644
--- a/src/server/game/Server/Protocol/Opcodes.h
+++ b/src/server/game/Server/Protocol/Opcodes.h
@@ -1644,6 +1644,7 @@ enum OpcodeServer : uint32
// Opcodes that are not generated automatically
SMSG_ACCOUNT_HEIRLOOM_UPDATE = 0x254B, // no client handler
+ SMSG_ITEM_UPGRADE_RESULT = 0x25DB, // no client handler
SMSG_COMPRESSED_PACKET = 0x2FCF,
SMSG_MULTIPLE_PACKETS = 0x2FCE,
diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h
index 26e8329ee9c..0e2ecee911f 100644
--- a/src/server/game/Server/WorldSession.h
+++ b/src/server/game/Server/WorldSession.h
@@ -371,6 +371,7 @@ namespace WorldPackets
class CancelTempEnchantment;
class TransmogrifyItems;
class UseCritterItem;
+ class UpgradeItem;
class SocketGems;
struct ItemInstance;
}
@@ -1426,6 +1427,7 @@ class TC_GAME_API WorldSession
void HandleBuybackItem(WorldPackets::Item::BuyBackItem& packet);
void HandleWrapItem(WorldPackets::Item::WrapItem& packet);
void HandleUseCritterItem(WorldPackets::Item::UseCritterItem& packet);
+ void HandleUpgradeItem(WorldPackets::Item::UpgradeItem& packet);
void HandleAttackSwingOpcode(WorldPackets::Combat::AttackSwing& packet);
void HandleAttackStopOpcode(WorldPackets::Combat::AttackStop& packet);