aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Server
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Server')
-rw-r--r--src/server/game/Server/Packets/AllPackets.h1
-rw-r--r--src/server/game/Server/Packets/ItemPackets.cpp30
-rw-r--r--src/server/game/Server/Packets/ItemPackets.h24
-rw-r--r--src/server/game/Server/Packets/TransmogrificationPackets.cpp54
-rw-r--r--src/server/game/Server/Packets/TransmogrificationPackets.h78
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp6
-rw-r--r--src/server/game/Server/WorldSession.cpp11
-rw-r--r--src/server/game/Server/WorldSession.h10
8 files changed, 155 insertions, 59 deletions
diff --git a/src/server/game/Server/Packets/AllPackets.h b/src/server/game/Server/Packets/AllPackets.h
index 2c2aa528bb1..932b38bbd5e 100644
--- a/src/server/game/Server/Packets/AllPackets.h
+++ b/src/server/game/Server/Packets/AllPackets.h
@@ -70,6 +70,7 @@
#include "TotemPackets.h"
#include "ToyPackets.h"
#include "TradePackets.h"
+#include "TransmogrificationPackets.h"
#include "VehiclePackets.h"
#include "VoicePackets.h"
#include "VoidStoragePackets.h"
diff --git a/src/server/game/Server/Packets/ItemPackets.cpp b/src/server/game/Server/Packets/ItemPackets.cpp
index ffaa7f0a88b..3ae94dfb84a 100644
--- a/src/server/game/Server/Packets/ItemPackets.cpp
+++ b/src/server/game/Server/Packets/ItemPackets.cpp
@@ -503,36 +503,6 @@ WorldPacket const* WorldPackets::Item::ItemEnchantTimeUpdate::Write()
return &_worldPacket;
}
-ByteBuffer& operator>>(ByteBuffer& data, WorldPackets::Item::TransmogrifyItem& transmogItem)
-{
- if (data.ReadBit())
- transmogItem.SrcItemGUID = boost::in_place();
-
- if (data.ReadBit())
- transmogItem.SrcVoidItemGUID = boost::in_place();
-
- data >> transmogItem.Item;
- data >> transmogItem.Slot;
-
- if (transmogItem.SrcItemGUID.is_initialized())
- data >> *transmogItem.SrcItemGUID;
-
- if (transmogItem.SrcVoidItemGUID.is_initialized())
- data >> *transmogItem.SrcVoidItemGUID;
-
- return data;
-}
-
-void WorldPackets::Item::TransmogrifyItems::Read()
-{
- Items.resize(_worldPacket.read<uint32>());
- _worldPacket >> Npc;
- for (TransmogrifyItem& item : Items)
- _worldPacket >> item;
-
- CurrentSpecOnly = _worldPacket.ReadBit();
-}
-
void WorldPackets::Item::UseCritterItem::Read()
{
_worldPacket >> ItemGuid;
diff --git a/src/server/game/Server/Packets/ItemPackets.h b/src/server/game/Server/Packets/ItemPackets.h
index df2e5c9e1d0..384ba7eea5b 100644
--- a/src/server/game/Server/Packets/ItemPackets.h
+++ b/src/server/game/Server/Packets/ItemPackets.h
@@ -474,30 +474,6 @@ namespace WorldPackets
uint32 Slot = 0;
};
- struct TransmogrifyItem
- {
- Optional<ObjectGuid> SrcItemGUID;
- Optional<ObjectGuid> SrcVoidItemGUID;
- ItemInstance Item;
- uint32 Slot = 0;
- };
-
- class TransmogrifyItems final : public ClientPacket
- {
- public:
- enum
- {
- MAX_TRANSMOGRIFY_ITEMS = 11
- };
-
- TransmogrifyItems(WorldPacket&& packet) : ClientPacket(CMSG_TRANSMOGRIFY_ITEMS, std::move(packet)) { }
-
- void Read() override;
-
- ObjectGuid Npc;
- Array<TransmogrifyItem, MAX_TRANSMOGRIFY_ITEMS> Items;
- };
-
class UseCritterItem final : public ClientPacket
{
public:
diff --git a/src/server/game/Server/Packets/TransmogrificationPackets.cpp b/src/server/game/Server/Packets/TransmogrificationPackets.cpp
new file mode 100644
index 00000000000..55d4cec7c98
--- /dev/null
+++ b/src/server/game/Server/Packets/TransmogrificationPackets.cpp
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2008-2016 TrinityCore <http://www.trinitycore.org/>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "TransmogrificationPackets.h"
+
+ByteBuffer& operator>>(ByteBuffer& data, WorldPackets::Transmogrification::TransmogrifyItem& transmogItem)
+{
+ data >> transmogItem.ItemModifiedAppearanceID;
+ data >> transmogItem.Slot;
+ data >> transmogItem.SpellItemEnchantmentID;
+
+ return data;
+}
+
+void WorldPackets::Transmogrification::TransmogrifyItems::Read()
+{
+ Items.resize(_worldPacket.read<uint32>());
+ _worldPacket >> Npc;
+ for (TransmogrifyItem& item : Items)
+ _worldPacket >> item;
+
+ CurrentSpecOnly = _worldPacket.ReadBit();
+}
+
+void WorldPackets::Transmogrification::TransmogAppearanceSetFavorite::Read()
+{
+ _worldPacket >> ItemModifiedAppearanceID;
+ IsFavorite = _worldPacket.ReadBit();
+}
+
+WorldPacket const* WorldPackets::Transmogrification::TransmogCollectionUpdate::Write()
+{
+ _worldPacket.WriteBit(IsFullUpdate);
+ _worldPacket.WriteBit(IsSetFavorite);
+ _worldPacket << uint32(FavoriteAppearances.size());
+ for (uint32 itemModifiedAppearanceId : FavoriteAppearances)
+ _worldPacket << uint32(itemModifiedAppearanceId);
+
+ return &_worldPacket;
+}
diff --git a/src/server/game/Server/Packets/TransmogrificationPackets.h b/src/server/game/Server/Packets/TransmogrificationPackets.h
new file mode 100644
index 00000000000..93305b1e0bf
--- /dev/null
+++ b/src/server/game/Server/Packets/TransmogrificationPackets.h
@@ -0,0 +1,78 @@
+/*
+ * Copyright (C) 2008-2016 TrinityCore <http://www.trinitycore.org/>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef TransmogrificationPackets_h__
+#define TransmogrificationPackets_h__
+
+#include "Packet.h"
+#include "ObjectGuid.h"
+#include "PacketUtilities.h"
+
+namespace WorldPackets
+{
+ namespace Transmogrification
+ {
+ struct TransmogrifyItem
+ {
+ int32 ItemModifiedAppearanceID = 0;
+ uint32 Slot = 0;
+ int32 SpellItemEnchantmentID = 0;
+ };
+
+ class TransmogrifyItems final : public ClientPacket
+ {
+ public:
+ enum
+ {
+ MAX_TRANSMOGRIFY_ITEMS = 13
+ };
+
+ TransmogrifyItems(WorldPacket&& packet) : ClientPacket(CMSG_TRANSMOGRIFY_ITEMS, std::move(packet)) { }
+
+ void Read() override;
+
+ ObjectGuid Npc;
+ Array<TransmogrifyItem, MAX_TRANSMOGRIFY_ITEMS> Items;
+ bool CurrentSpecOnly = false;
+ };
+
+ class TransmogAppearanceSetFavorite final : public ClientPacket
+ {
+ public:
+ TransmogAppearanceSetFavorite(WorldPacket&& packet) : ClientPacket(CMSG_TRANSMOG_APPEARANCE_SET_FAVORITE, std::move(packet)) { }
+
+ void Read() override;
+
+ uint32 ItemModifiedAppearanceID = 0;
+ bool IsFavorite = false;
+ };
+
+ class TransmogCollectionUpdate final : public ServerPacket
+ {
+ public:
+ TransmogCollectionUpdate() : ServerPacket(SMSG_TRANSMOG_COLLECTION_UPDATE) { }
+
+ WorldPacket const* Write() override;
+
+ bool IsFullUpdate = false;
+ bool IsSetFavorite = false;
+ std::vector<uint32> FavoriteAppearances;
+ };
+ }
+}
+
+#endif // TransmogrificationPackets_h__
diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp
index ac47130dcee..777f69c1c17 100644
--- a/src/server/game/Server/Protocol/Opcodes.cpp
+++ b/src/server/game/Server/Protocol/Opcodes.cpp
@@ -774,8 +774,8 @@ void OpcodeTable::Initialize()
DEFINE_HANDLER(CMSG_TRADE_SKILL_SET_FAVORITE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, WorldPackets::Null, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_TRAINER_BUY_SPELL, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::NPC::TrainerBuySpell, &WorldSession::HandleTrainerBuySpellOpcode);
DEFINE_HANDLER(CMSG_TRAINER_LIST, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::NPC::Hello, &WorldSession::HandleTrainerListOpcode);
- DEFINE_HANDLER(CMSG_TRANSMOGRIFY_ITEMS, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, WorldPackets::Item::TransmogrifyItems, &WorldSession::HandleTransmogrifyItems);
- DEFINE_HANDLER(CMSG_TRANSMOG_APPEARANCE_SET_FAVORITE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, WorldPackets::Null, &WorldSession::Handle_NULL);
+ DEFINE_HANDLER(CMSG_TRANSMOGRIFY_ITEMS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Transmogrification::TransmogrifyItems, &WorldSession::HandleTransmogrifyItems);
+ DEFINE_HANDLER(CMSG_TRANSMOG_APPEARANCE_SET_FAVORITE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Transmogrification::TransmogAppearanceSetFavorite, &WorldSession::HandleTransmogAppearanceSetFavorite);
DEFINE_HANDLER(CMSG_TURN_IN_PETITION, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Petition::TurnInPetition, &WorldSession::HandleTurnInPetition);
DEFINE_HANDLER(CMSG_TUTORIAL, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Misc::TutorialSetFlag, &WorldSession::HandleTutorialFlag);
DEFINE_HANDLER(CMSG_TWITTER_CHECK_STATUS, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
@@ -1710,7 +1710,7 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_TRAINER_LIST, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_TRANSFER_ABORTED, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_TRANSFER_PENDING, STATUS_NEVER, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_TRANSMOG_COLLECTION_UPDATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_TRANSMOG_COLLECTION_UPDATE, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_TRIGGER_CINEMATIC, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_TRIGGER_MOVIE, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_TURN_IN_PETITION_RESULT, STATUS_NEVER, CONNECTION_TYPE_REALM);
diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp
index 937961ad571..a013d8bd662 100644
--- a/src/server/game/Server/WorldSession.cpp
+++ b/src/server/game/Server/WorldSession.cpp
@@ -1079,6 +1079,8 @@ public:
BATTLE_PET_SLOTS,
GLOBAL_ACCOUNT_HEIRLOOMS,
GLOBAL_REALM_CHARACTER_COUNTS,
+ ITEM_APPEARANCES,
+ ITEM_FAVORITE_APPEARANCES,
MAX_QUERIES
};
@@ -1109,6 +1111,14 @@ public:
stmt->setUInt32(0, accountId);
ok = SetPreparedQuery(GLOBAL_REALM_CHARACTER_COUNTS, stmt) && ok;
+ stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_BNET_ITEM_APPEARANCES);
+ stmt->setUInt32(0, battlenetAccountId);
+ ok = SetPreparedQuery(ITEM_APPEARANCES, stmt) && ok;
+
+ stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_BNET_ITEM_FAVORITE_APPEARANCES);
+ stmt->setUInt32(0, battlenetAccountId);
+ ok = SetPreparedQuery(ITEM_FAVORITE_APPEARANCES, stmt) && ok;
+
return ok;
}
};
@@ -1142,6 +1152,7 @@ void WorldSession::InitializeSessionCallback(SQLQueryHolder* realmHolder, SQLQue
LoadTutorialsData(realmHolder->GetPreparedResult(AccountInfoQueryHolderPerRealm::TUTORIALS));
_collectionMgr->LoadAccountToys(holder->GetPreparedResult(AccountInfoQueryHolder::GLOBAL_ACCOUNT_TOYS));
_collectionMgr->LoadAccountHeirlooms(holder->GetPreparedResult(AccountInfoQueryHolder::GLOBAL_ACCOUNT_HEIRLOOMS));
+ _collectionMgr->LoadAccountItemAppearances(holder->GetPreparedResult(AccountInfoQueryHolder::ITEM_APPEARANCES), holder->GetPreparedResult(AccountInfoQueryHolder::ITEM_FAVORITE_APPEARANCES));
if (!m_inQueue)
SendAuthResponse(ERROR_OK, false);
diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h
index 5f155420ff4..02ba3d182ec 100644
--- a/src/server/game/Server/WorldSession.h
+++ b/src/server/game/Server/WorldSession.h
@@ -366,7 +366,6 @@ namespace WorldPackets
class SwapItem;
class WrapItem;
class CancelTempEnchantment;
- class TransmogrifyItems;
class UseCritterItem;
class SocketGems;
struct ItemInstance;
@@ -666,6 +665,12 @@ namespace WorldPackets
class TradeStatus;
}
+ namespace Transmogrification
+ {
+ class TransmogrifyItems;
+ class TransmogAppearanceSetFavorite;
+ }
+
namespace Vehicle
{
class MoveDismissVehicle;
@@ -1642,7 +1647,8 @@ class TC_GAME_API WorldSession
void SendVoidStorageTransferResult(VoidTransferError result);
// Transmogrification
- void HandleTransmogrifyItems(WorldPackets::Item::TransmogrifyItems& transmogrifyItems);
+ void HandleTransmogrifyItems(WorldPackets::Transmogrification::TransmogrifyItems& transmogrifyItems);
+ void HandleTransmogAppearanceSetFavorite(WorldPackets::Transmogrification::TransmogAppearanceSetFavorite& transmogAppearanceSetFavorite);
// Miscellaneous
void HandleSpellClick(WorldPackets::Spells::SpellClick& spellClick);