diff options
author | Shauren <shauren.trinity@gmail.com> | 2016-06-18 23:03:16 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2016-06-18 23:03:16 +0200 |
commit | 0de1adf2812a4fa896dc5cd21314e596b44457b9 (patch) | |
tree | c414e3a08e01293edad3993b760604d7a1399b3e /src/server/game/Handlers/CharacterHandler.cpp | |
parent | 49d0823b7062fba05725d27c406dbbe1a88a40f3 (diff) |
Core/PacketIO: Updated equipment set packets and implemented saving transmog outfits (even if transmog itself isnt updated)
Diffstat (limited to 'src/server/game/Handlers/CharacterHandler.cpp')
-rw-r--r-- | src/server/game/Handlers/CharacterHandler.cpp | 46 |
1 files changed, 37 insertions, 9 deletions
diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp index b8c6072f60e..63a37b42efd 100644 --- a/src/server/game/Handlers/CharacterHandler.cpp +++ b/src/server/game/Handlers/CharacterHandler.cpp @@ -192,6 +192,10 @@ bool LoginQueryHolder::Initialize() stmt->setUInt64(0, lowGuid); res &= SetPreparedQuery(PLAYER_LOGIN_QUERY_LOAD_EQUIPMENT_SETS, stmt); + stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER_TRANSMOG_OUTFITS); + stmt->setUInt64(0, lowGuid); + res &= SetPreparedQuery(PLAYER_LOGIN_QUERY_LOAD_TRANSMOG_OUTFITS, stmt); + stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHAR_CUF_PROFILES); stmt->setUInt64(0, lowGuid); res &= SetPreparedQuery(PLAYER_LOGIN_QUERY_LOAD_CUF_PROFILES, stmt); @@ -1623,29 +1627,53 @@ void WorldSession::HandleEquipmentSetSave(WorldPackets::EquipmentSet::SaveEquipm if (saveEquipmentSet.Set.SetID >= MAX_EQUIPMENT_SET_INDEX) // client set slots amount return; + if (saveEquipmentSet.Set.Type > EquipmentSetInfo::TRANSMOG) + return; + for (uint8 i = 0; i < EQUIPMENT_SLOT_END; ++i) { if (!(saveEquipmentSet.Set.IgnoreMask & (1 << i))) { - ObjectGuid const& itemGuid = saveEquipmentSet.Set.Pieces[i]; + if (saveEquipmentSet.Set.Type == EquipmentSetInfo::EQUIPMENT) + { + saveEquipmentSet.Set.Appearances[i] = 0; - Item* item = _player->GetItemByPos(INVENTORY_SLOT_BAG_0, i); + ObjectGuid const& itemGuid = saveEquipmentSet.Set.Pieces[i]; - /// cheating check 1 (item equipped but sent empty guid) - if (!item && !itemGuid.IsEmpty()) - return; + Item* item = _player->GetItemByPos(INVENTORY_SLOT_BAG_0, i); - /// cheating check 2 (sent guid does not match equipped item) - if (item && item->GetGUID() != itemGuid) - return; + /// cheating check 1 (item equipped but sent empty guid) + if (!item && !itemGuid.IsEmpty()) + return; + + /// cheating check 2 (sent guid does not match equipped item) + if (item && item->GetGUID() != itemGuid) + return; + } + else + { + saveEquipmentSet.Set.Pieces[i].Clear(); + if (saveEquipmentSet.Set.Appearances[i] && !sItemModifiedAppearanceStore.LookupEntry(saveEquipmentSet.Set.Appearances[i])) + return; + + // TODO: validata whether appearance is known + } } else + { saveEquipmentSet.Set.Pieces[i].Clear(); + saveEquipmentSet.Set.Appearances[i] = 0; + } } saveEquipmentSet.Set.IgnoreMask &= 0x7FFFF; /// clear invalid bits (i > EQUIPMENT_SLOT_END) + if (saveEquipmentSet.Set.Type == EquipmentSetInfo::EQUIPMENT) + { + saveEquipmentSet.Set.Enchants[0] = 0; + saveEquipmentSet.Set.Enchants[1] = 0; + } - _player->SetEquipmentSet(std::move(saveEquipmentSet.Set)); + _player->SetEquipmentSet(saveEquipmentSet.Set); } void WorldSession::HandleDeleteEquipmentSet(WorldPackets::EquipmentSet::DeleteEquipmentSet& deleteEquipmentSet) |