diff options
| author | MitchesD <majklprofik@seznam.cz> | 2015-10-16 22:54:46 +0200 |
|---|---|---|
| committer | MitchesD <majklprofik@seznam.cz> | 2015-10-16 23:09:42 +0200 |
| commit | 9fe29de260b704603f40a8912c66dccf76fd0db8 (patch) | |
| tree | 9043feef93fbf09a17bc83f3db687494a6da737d /src/server/game/Server | |
| parent | 43f4e32cabc2d9329affda2cdabe0fc735cd849b (diff) | |
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
Diffstat (limited to 'src/server/game/Server')
| -rw-r--r-- | src/server/game/Server/Packets/MiscPackets.cpp | 20 | ||||
| -rw-r--r-- | src/server/game/Server/Packets/MiscPackets.h | 13 | ||||
| -rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 2 | ||||
| -rw-r--r-- | src/server/game/Server/WorldSession.cpp | 6 |
4 files changed, 40 insertions, 1 deletions
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); |
