From 9fe29de260b704603f40a8912c66dccf76fd0db8 Mon Sep 17 00:00:00 2001 From: MitchesD Date: Fri, 16 Oct 2015 22:54:46 +0200 Subject: Core/Player: implemented Heirloom Collection * implemented all things related to that collection * you can create heirloom by click on item in collection * also you can upgrade heirlooms by using specific kits * old heirlooms are converted to new ones --- src/server/game/Server/Packets/MiscPackets.cpp | 20 ++++++++++++++++++++ src/server/game/Server/Packets/MiscPackets.h | 13 +++++++++++++ src/server/game/Server/Protocol/Opcodes.cpp | 2 +- src/server/game/Server/WorldSession.cpp | 6 ++++++ 4 files changed, 40 insertions(+), 1 deletion(-) (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 8617e56a841..142530464f3 100644 --- a/src/server/game/Server/Packets/MiscPackets.cpp +++ b/src/server/game/Server/Packets/MiscPackets.cpp @@ -569,3 +569,23 @@ void WorldPackets::Misc::WorldTeleport::Read() _worldPacket >> Pos; _worldPacket >> Facing; } + +WorldPacket const* WorldPackets::Misc::AccountHeirloomUpdate::Write() +{ + _worldPacket.WriteBit(IsFullUpdate); + _worldPacket.FlushBits(); + + _worldPacket << int32(Unk); + + // both lists have to have the same size + _worldPacket << int32(Heirlooms->size()); + _worldPacket << int32(Heirlooms->size()); + + for (auto const& item : *Heirlooms) + _worldPacket << uint32(item.first); + + for (auto const& flags : *Heirlooms) + _worldPacket << uint32(flags.second.flags); + + return &_worldPacket; +} diff --git a/src/server/game/Server/Packets/MiscPackets.h b/src/server/game/Server/Packets/MiscPackets.h index 423a6ccbc8d..b3c8955dba9 100644 --- a/src/server/game/Server/Packets/MiscPackets.h +++ b/src/server/game/Server/Packets/MiscPackets.h @@ -26,6 +26,7 @@ #include "Unit.h" #include "Player.h" #include "Weather.h" +#include "CollectionMgr.h" namespace WorldPackets { @@ -747,6 +748,18 @@ namespace WorldPackets G3D::Vector3 Pos; float Facing = 0.0f; }; + + class AccountHeirloomUpdate final : public ServerPacket + { + public: + AccountHeirloomUpdate() : ServerPacket(SMSG_ACCOUNT_HEIRLOOM_UPDATE) { } + + WorldPacket const* Write() override; + + bool IsFullUpdate = false; + HeirloomContainer const* Heirlooms = nullptr; + int32 Unk = 0; + }; } } diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index 4637093c8a9..c59a4bb3175 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -841,7 +841,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_ABORT_NEW_WORLD, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ACCOUNT_CRITERIA_UPDATE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ACCOUNT_DATA_TIMES, STATUS_NEVER, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_ACCOUNT_HEIRLOOM_UPDATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_ACCOUNT_HEIRLOOM_UPDATE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ACCOUNT_MOUNT_UPDATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ACCOUNT_TOYS_UPDATE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ACHIEVEMENT_DELETED, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp index 1874403eb19..2189fbffeff 100644 --- a/src/server/game/Server/WorldSession.cpp +++ b/src/server/game/Server/WorldSession.cpp @@ -1160,6 +1160,7 @@ public: GLOBAL_ACCOUNT_TOYS = 0, BATTLE_PETS, BATTLE_PET_SLOTS, + GLOBAL_ACCOUNT_HEIRLOOMS, MAX_QUERIES }; @@ -1182,6 +1183,10 @@ public: stmt->setUInt32(0, battlenetAccountId); ok = SetPreparedQuery(BATTLE_PET_SLOTS, stmt) && ok; + stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_ACCOUNT_HEIRLOOMS); + stmt->setUInt32(0, battlenetAccountId); + ok = SetPreparedQuery(GLOBAL_ACCOUNT_HEIRLOOMS, stmt) && ok; + return ok; } }; @@ -1214,6 +1219,7 @@ void WorldSession::InitializeSessionCallback(SQLQueryHolder* realmHolder, SQLQue LoadAccountData(realmHolder->GetPreparedResult(AccountInfoQueryHolderPerRealm::GLOBAL_ACCOUNT_DATA), GLOBAL_CACHE_MASK); LoadTutorialsData(realmHolder->GetPreparedResult(AccountInfoQueryHolderPerRealm::TUTORIALS)); _collectionMgr->LoadAccountToys(holder->GetPreparedResult(AccountInfoQueryHolder::GLOBAL_ACCOUNT_TOYS)); + _collectionMgr->LoadAccountHeirlooms(holder->GetPreparedResult(AccountInfoQueryHolder::GLOBAL_ACCOUNT_HEIRLOOMS)); if (!m_inQueue) SendAuthResponse(AUTH_OK, false); -- cgit v1.2.3