aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Server
diff options
context:
space:
mode:
authorMitchesD <majklprofik@seznam.cz>2015-10-16 22:54:46 +0200
committerMitchesD <majklprofik@seznam.cz>2015-10-16 23:09:42 +0200
commit9fe29de260b704603f40a8912c66dccf76fd0db8 (patch)
tree9043feef93fbf09a17bc83f3db687494a6da737d /src/server/game/Server
parent43f4e32cabc2d9329affda2cdabe0fc735cd849b (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.cpp20
-rw-r--r--src/server/game/Server/Packets/MiscPackets.h13
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp2
-rw-r--r--src/server/game/Server/WorldSession.cpp6
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);