Skip to content

Commit 7f32047

Browse files
joschiwaldShauren
authored andcommitted
Core/Packets: updated EquipmentSet save packets
(cherry picked from commit abff9de)
1 parent 430f15f commit 7f32047

8 files changed

Lines changed: 71 additions & 48 deletions

File tree

src/server/game/Entities/Creature/Creature.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2306,7 +2306,7 @@ void Creature::SendAIReaction(AiReaction reactionType)
23062306
packet.UnitGUID = GetGUID();
23072307
packet.Reaction = reactionType;
23082308

2309-
((WorldObject*)this)->SendMessageToSet(packet.Write(), true);
2309+
SendMessageToSet(packet.Write(), true);
23102310

23112311
TC_LOG_DEBUG("network", "WORLD: Sent SMSG_AI_REACTION, type {}.", reactionType);
23122312
}

src/server/game/Entities/Player/Player.cpp

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5985,7 +5985,7 @@ void Player::SendActionButtons(uint32 state) const
59855985

59865986
packet.Reason = state;
59875987

5988-
GetSession()->SendPacket(packet.Write());
5988+
SendDirectMessage(packet.Write());
59895989
}
59905990

59915991
bool Player::IsActionButtonDataValid(uint8 button, uint32 action, uint8 type) const
@@ -25373,33 +25373,33 @@ void Player::SendEquipmentSetList()
2537325373
SendDirectMessage(data.Write());
2537425374
}
2537525375

25376-
void Player::SetEquipmentSet(EquipmentSetInfo::EquipmentSetData const& eqSet)
25376+
void Player::SetEquipmentSet(EquipmentSetInfo::EquipmentSetData const& newEqSet)
2537725377
{
25378-
if (eqSet.Guid != 0)
25378+
if (newEqSet.Guid != 0)
2537925379
{
2538025380
// something wrong...
25381-
auto itr = _equipmentSets.find(eqSet.Guid);
25382-
if (itr == _equipmentSets.end() || itr->second.Data.Guid != eqSet.Guid)
25381+
auto itr = _equipmentSets.find(newEqSet.Guid);
25382+
if (itr == _equipmentSets.end() || itr->second.Data.Guid != newEqSet.Guid)
2538325383
{
2538425384
TC_LOG_ERROR("entities.player", "Player::SetEquipmentSet: Player '{}' ({}) tried to save nonexistent equipment set {} (index: {})",
25385-
GetName(), GetGUID().ToString(), eqSet.Guid, eqSet.SetID);
25385+
GetName(), GetGUID().ToString(), newEqSet.Guid, newEqSet.SetID);
2538625386
return;
2538725387
}
2538825388
}
2538925389

25390-
uint64 setGuid = (eqSet.Guid != 0) ? eqSet.Guid : sObjectMgr->GenerateEquipmentSetGuid();
25390+
uint64 setGuid = (newEqSet.Guid != 0) ? newEqSet.Guid : sObjectMgr->GenerateEquipmentSetGuid();
2539125391

2539225392
EquipmentSetInfo& eqSlot = _equipmentSets[setGuid];
25393-
eqSlot.Data = eqSet;
25393+
eqSlot.Data = newEqSet;
2539425394

25395-
if (eqSet.Guid == 0)
25395+
if (eqSlot.Data.Guid == 0)
2539625396
{
2539725397
eqSlot.Data.Guid = setGuid;
2539825398

25399-
WorldPacket data(SMSG_EQUIPMENT_SET_SAVED, 4 + 1);
25400-
data << uint32(eqSlot.Data.SetID);
25401-
data.appendPackGUID(eqSlot.Data.Guid);
25402-
SendDirectMessage(&data);
25399+
WorldPackets::EquipmentSet::EquipmentSetID data;
25400+
data.GUID = eqSlot.Data.Guid;
25401+
data.SetID = eqSlot.Data.SetID;
25402+
SendDirectMessage(data.Write());
2540325403
}
2540425404

2540525405
eqSlot.State = (eqSlot.State == EQUIPMENT_SET_NEW ? EQUIPMENT_SET_NEW : EQUIPMENT_SET_CHANGED);
@@ -25476,11 +25476,11 @@ void Player::_SaveBGData(CharacterDatabaseTransaction trans)
2547625476
trans->Append(stmt);
2547725477
}
2547825478

25479-
void Player::DeleteEquipmentSet(uint64 setGuid)
25479+
void Player::DeleteEquipmentSet(uint64 id)
2548025480
{
2548125481
for (EquipmentSetContainer::iterator itr = _equipmentSets.begin(); itr != _equipmentSets.end();)
2548225482
{
25483-
if (itr->second.Data.Guid == setGuid)
25483+
if (itr->second.Data.Guid == id)
2548425484
{
2548525485
if (itr->second.State == EQUIPMENT_SET_NEW)
2548625486
itr = _equipmentSets.erase(itr);

src/server/game/Entities/Player/Player.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1952,7 +1952,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player>
19521952

19531953
void SendEquipmentSetList();
19541954
void SetEquipmentSet(EquipmentSetInfo::EquipmentSetData const& eqset);
1955-
void DeleteEquipmentSet(uint64 setGuid);
1955+
void DeleteEquipmentSet(uint64 id);
19561956

19571957
void SendInitWorldStates(uint32 zoneId, uint32 areaId);
19581958
void SendUpdateWorldState(uint32 variable, uint32 value) const;

src/server/game/Handlers/CharacterHandler.cpp

Lines changed: 7 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
#include "Chat.h"
2424
#include "DatabaseEnv.h"
2525
#include "DBCStores.h"
26+
#include "EquipmentSetPackets.h"
2627
#include "GameObject.h"
2728
#include "GameTime.h"
2829
#include "GitRevision.h"
@@ -1475,34 +1476,14 @@ void WorldSession::HandleCharCustomizeCallback(std::shared_ptr<WorldPackets::Cha
14751476
GetAccountId(), GetRemoteAddress(), oldName, customizeInfo->CharGUID.ToString(), customizeInfo->CharName);
14761477
}
14771478

1478-
void WorldSession::HandleEquipmentSetSave(WorldPacket& recvData)
1479+
void WorldSession::HandleEquipmentSetSave(WorldPackets::EquipmentSet::SaveEquipmentSet& saveEquipmentSet)
14791480
{
1480-
TC_LOG_DEBUG("network", "CMSG_EQUIPMENT_SET_SAVE");
1481-
1482-
uint64 setGuid;
1483-
recvData.readPackGUID(setGuid);
1484-
1485-
uint32 index;
1486-
recvData >> index;
1487-
if (index >= MAX_EQUIPMENT_SET_INDEX) // client set slots amount
1481+
if (saveEquipmentSet.Set.SetID >= MAX_EQUIPMENT_SET_INDEX) // client set slots amount
14881482
return;
14891483

1490-
std::string name;
1491-
recvData >> name;
1492-
1493-
std::string iconName;
1494-
recvData >> iconName;
1495-
1496-
EquipmentSetInfo::EquipmentSetData eqData;
1497-
eqData.Guid = setGuid;
1498-
eqData.SetID = index;
1499-
eqData.SetName = name;
1500-
eqData.SetIcon = iconName;
1501-
15021484
for (uint32 i = 0; i < EQUIPMENT_SLOT_END; ++i)
15031485
{
1504-
ObjectGuid itemGuid;
1505-
recvData >> itemGuid.ReadAsPacked();
1486+
ObjectGuid const& itemGuid = saveEquipmentSet.Set.Pieces[i];
15061487

15071488
// if client sends 0, it means empty slot
15081489
if (itemGuid.IsEmpty())
@@ -1512,19 +1493,17 @@ void WorldSession::HandleEquipmentSetSave(WorldPacket& recvData)
15121493
if (itemGuid == EquipmentSetInfo::IgnoredSlot)
15131494
{
15141495
// ignored slots saved as bit mask because we have no free special values for Items[i]
1515-
eqData.IgnoreMask |= 1 << i;
1496+
saveEquipmentSet.Set.IgnoreMask |= 1 << i;
15161497
continue;
15171498
}
15181499

15191500
// some cheating checks
15201501
Item* item = _player->GetItemByPos(INVENTORY_SLOT_BAG_0, i);
15211502
if (!item || item->GetGUID() != itemGuid)
1522-
continue;
1523-
1524-
eqData.Pieces[i] = itemGuid;
1503+
saveEquipmentSet.Set.Pieces[i].Clear();
15251504
}
15261505

1527-
_player->SetEquipmentSet(eqData);
1506+
_player->SetEquipmentSet(saveEquipmentSet.Set);
15281507
}
15291508

15301509
void WorldSession::HandleEquipmentSetDelete(WorldPacket& recvData)

src/server/game/Server/Packets/EquipmentSetPackets.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,14 @@
1717

1818
#include "EquipmentSetPackets.h"
1919

20+
WorldPacket const* WorldPackets::EquipmentSet::EquipmentSetID::Write()
21+
{
22+
_worldPacket << uint32(SetID);
23+
_worldPacket.appendPackGUID(GUID);
24+
25+
return &_worldPacket;
26+
}
27+
2028
WorldPacket const* WorldPackets::EquipmentSet::LoadEquipmentSet::Write()
2129
{
2230
_worldPacket << uint32(SetData.size());
@@ -40,3 +48,14 @@ WorldPacket const* WorldPackets::EquipmentSet::LoadEquipmentSet::Write()
4048

4149
return &_worldPacket;
4250
}
51+
52+
void WorldPackets::EquipmentSet::SaveEquipmentSet::Read()
53+
{
54+
_worldPacket.readPackGUID(Set.Guid);
55+
_worldPacket >> Set.SetID;
56+
_worldPacket >> Set.SetName;
57+
_worldPacket >> Set.SetIcon;
58+
59+
for (uint8 i = 0; i < EQUIPMENT_SET_SLOTS; ++i)
60+
_worldPacket >> Set.Pieces[i].ReadAsPacked();
61+
}

src/server/game/Server/Packets/EquipmentSetPackets.h

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,17 @@ namespace WorldPackets
2525
{
2626
namespace EquipmentSet
2727
{
28+
class EquipmentSetID final : public ServerPacket
29+
{
30+
public:
31+
explicit EquipmentSetID() : ServerPacket(SMSG_EQUIPMENT_SET_SAVED, 8 + 4) { }
32+
33+
WorldPacket const* Write() override;
34+
35+
uint64 GUID = 0; ///< Set Identifier
36+
uint32 SetID = 0; ///< Index
37+
};
38+
2839
class LoadEquipmentSet final : public ServerPacket
2940
{
3041
public:
@@ -34,6 +45,16 @@ namespace WorldPackets
3445

3546
std::vector<EquipmentSetInfo::EquipmentSetData const*> SetData;
3647
};
48+
49+
class SaveEquipmentSet final : public ClientPacket
50+
{
51+
public:
52+
SaveEquipmentSet(WorldPacket&& packet) : ClientPacket(CMSG_EQUIPMENT_SET_SAVE, std::move(packet)) { }
53+
54+
void Read() override;
55+
56+
EquipmentSetInfo::EquipmentSetData Set;
57+
};
3758
}
3859
}
3960

src/server/game/Server/Packets/QuestPackets.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,7 @@ namespace WorldPackets
4949
{
5050
QuestGiverInfo() { }
5151
QuestGiverInfo(ObjectGuid const& guid, ::QuestGiverStatus status)
52-
: Guid(guid), Status(status)
53-
{ }
52+
: Guid(guid), Status(status) { }
5453

5554
ObjectGuid Guid;
5655
::QuestGiverStatus Status = DIALOG_STATUS_NONE;

src/server/game/Server/WorldSession.h

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,11 @@ namespace WorldPackets
164164
class SetSheathed;
165165
}
166166

167+
namespace EquipmentSet
168+
{
169+
class SaveEquipmentSet;
170+
}
171+
167172
namespace Guild
168173
{
169174
class QueryGuildInfo;
@@ -1179,7 +1184,7 @@ class TC_GAME_API WorldSession
11791184
void HandleMirrorImageDataRequest(WorldPacket& recvData);
11801185
void HandleRemoveGlyph(WorldPacket& recvData);
11811186
void HandleQueryInspectAchievements(WorldPacket& recvData);
1182-
void HandleEquipmentSetSave(WorldPacket& recvData);
1187+
void HandleEquipmentSetSave(WorldPackets::EquipmentSet::SaveEquipmentSet& saveEquipmentSet);
11831188
void HandleEquipmentSetDelete(WorldPacket& recvData);
11841189
void HandleEquipmentSetUse(WorldPacket& recvData);
11851190
void HandleWorldStateUITimerUpdate(WorldPackets::Misc::UITimeRequest& recvData);

0 commit comments

Comments
 (0)