diff options
| author | Shauren <shauren.trinity@gmail.com> | 2015-08-12 23:05:36 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2015-08-12 23:05:36 +0200 |
| commit | 81abfe93bb96e5a769dc855f06fdc7578b352b39 (patch) | |
| tree | 66e5231c62ec9dfc180cceb80a714632afaf93a3 /src/server/game/Entities | |
| parent | f4724badb65a6471df37ef249929548861f86362 (diff) | |
Core/Void Storage: Implemented saving item upgrade and bonuses for items deposited in void storage
Diffstat (limited to 'src/server/game/Entities')
| -rw-r--r-- | src/server/game/Entities/Object/ObjectGuid.h | 4 | ||||
| -rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 40 | ||||
| -rw-r--r-- | src/server/game/Entities/Player/Player.h | 25 |
3 files changed, 28 insertions, 41 deletions
diff --git a/src/server/game/Entities/Object/ObjectGuid.h b/src/server/game/Entities/Object/ObjectGuid.h index 23d6b4f4dde..9b1c2516c18 100644 --- a/src/server/game/Entities/Object/ObjectGuid.h +++ b/src/server/game/Entities/Object/ObjectGuid.h @@ -205,6 +205,10 @@ class ObjectGuid ObjectGuid() : _low(0), _high(0) { } ObjectGuid(ObjectGuid const&) = default; + ObjectGuid(ObjectGuid&&) = default; + + ObjectGuid& operator=(ObjectGuid const&) = default; + ObjectGuid& operator=(ObjectGuid&&) = default; std::vector<uint8> GetRawValue() const; void SetRawValue(std::vector<uint8> const& guid); diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index bcf31957e5f..56e34d0382b 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -17787,7 +17787,7 @@ void Player::_LoadVoidStorage(PreparedQueryResult result) do { - // SELECT itemid, itemEntry, slot, creatorGuid FROM character_void_storage WHERE playerGuid = ? + // SELECT itemId, itemEntry, slot, creatorGuid, randomProperty, suffixFactor, upgradeId, bonusListIDs FROM character_void_storage WHERE playerGuid = ? Field* fields = result->Fetch(); uint64 itemId = fields[0].GetUInt64(); @@ -17796,6 +17796,11 @@ void Player::_LoadVoidStorage(PreparedQueryResult result) ObjectGuid creatorGuid = ObjectGuid::Create<HighGuid::Player>(fields[3].GetUInt64()); uint32 randomProperty = fields[4].GetUInt32(); uint32 suffixFactor = fields[5].GetUInt32(); + uint32 upgradeId = fields[6].GetUInt32(); + std::vector<uint32> bonusListIDs; + Tokenizer bonusListIdTokens(fields[7].GetString(), ' '); + for (char const* token : bonusListIdTokens) + bonusListIDs.push_back(atoul(token)); if (!itemId) { @@ -17822,7 +17827,7 @@ void Player::_LoadVoidStorage(PreparedQueryResult result) creatorGuid.Clear(); } - _voidStorageItems[slot] = new VoidStorageItem(itemId, itemEntry, creatorGuid, randomProperty, suffixFactor); + _voidStorageItems[slot] = new VoidStorageItem(itemId, itemEntry, creatorGuid, randomProperty, suffixFactor, upgradeId, bonusListIDs); } while (result->NextRow()); } @@ -19422,7 +19427,7 @@ void Player::_SaveVoidStorage(SQLTransaction& trans) } else { - // REPLACE INTO character_inventory (itemId, playerGuid, itemEntry, slot, creatorGuid) VALUES (?, ?, ?, ?, ?) + // REPLACE INTO character_inventory (itemId, playerGuid, itemEntry, slot, creatorGuid, randomProperty, suffixFactor, upgradeId, bonusListIDs) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?) stmt = CharacterDatabase.GetPreparedStatement(CHAR_REP_CHAR_VOID_STORAGE_ITEM); stmt->setUInt64(0, _voidStorageItems[i]->ItemId); stmt->setUInt64(1, GetGUID().GetCounter()); @@ -19431,6 +19436,11 @@ void Player::_SaveVoidStorage(SQLTransaction& trans) stmt->setUInt64(4, _voidStorageItems[i]->CreatorGuid.GetCounter()); stmt->setUInt32(5, _voidStorageItems[i]->ItemRandomPropertyId); stmt->setUInt32(6, _voidStorageItems[i]->ItemSuffixFactor); + stmt->setUInt32(7, _voidStorageItems[i]->ItemUpgradeId); + std::ostringstream bonusListIDs; + for (int32 bonusListID : _voidStorageItems[i]->BonusListIDs) + bonusListIDs << bonusListID << ' '; + stmt->setString(8, bonusListIDs.str()); } trans->Append(stmt); @@ -26113,7 +26123,7 @@ uint8 Player::GetNumOfVoidStorageFreeSlots() const return count; } -uint8 Player::AddVoidStorageItem(VoidStorageItem const& item) +uint8 Player::AddVoidStorageItem(VoidStorageItem&& item) { uint8 slot = GetNextVoidStorageFreeSlot(); @@ -26123,30 +26133,10 @@ uint8 Player::AddVoidStorageItem(VoidStorageItem const& item) return 255; } - _voidStorageItems[slot] = new VoidStorageItem(item.ItemId, item.ItemEntry, - item.CreatorGuid, item.ItemRandomPropertyId, item.ItemSuffixFactor); + _voidStorageItems[slot] = new VoidStorageItem(std::move(item)); return slot; } -void Player::AddVoidStorageItemAtSlot(uint8 slot, const VoidStorageItem& item) -{ - if (slot >= VOID_STORAGE_MAX_SLOT) - { - GetSession()->SendVoidStorageTransferResult(VOID_TRANSFER_ERROR_FULL); - return; - } - - if (_voidStorageItems[slot]) - { - TC_LOG_ERROR("misc", "Player::AddVoidStorageItemAtSlot - Player (%s, name: %s) tried to add an item to an used slot (item id: " UI64FMTD ", entry: %u, slot: %u).", GetGUID().ToString().c_str(), GetName().c_str(), _voidStorageItems[slot]->ItemId, _voidStorageItems[slot]->ItemEntry, slot); - GetSession()->SendVoidStorageTransferResult(VOID_TRANSFER_ERROR_INTERNAL_ERROR_1); - return; - } - - _voidStorageItems[slot] = new VoidStorageItem(item.ItemId, item.ItemId, - item.CreatorGuid, item.ItemRandomPropertyId, item.ItemSuffixFactor); -} - void Player::DeleteVoidStorageItem(uint8 slot) { if (slot >= VOID_STORAGE_MAX_SLOT) diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 4218a058798..4167c632668 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -1162,28 +1162,22 @@ struct BGData struct VoidStorageItem { - VoidStorageItem() + VoidStorageItem() : ItemId(0), ItemEntry(0), ItemRandomPropertyId(0), ItemSuffixFactor(0), ItemUpgradeId(0) { } + VoidStorageItem(uint64 id, uint32 entry, ObjectGuid const& creator, uint32 randomPropertyId, uint32 suffixFactor, uint32 upgradeId, std::vector<uint32> const& bonuses) + : ItemId(id), ItemEntry(entry), CreatorGuid(creator), ItemRandomPropertyId(randomPropertyId), + ItemSuffixFactor(suffixFactor), ItemUpgradeId(upgradeId) { - ItemId = 0; - ItemEntry = 0; - ItemRandomPropertyId = 0; - ItemSuffixFactor = 0; - } - - VoidStorageItem(uint64 id, uint32 entry, ObjectGuid creator, uint32 randomPropertyId, uint32 suffixFactor) - { - ItemId = id; - ItemEntry = entry; - CreatorGuid = creator; - ItemRandomPropertyId = randomPropertyId; - ItemSuffixFactor = suffixFactor; + BonusListIDs.insert(BonusListIDs.end(), bonuses.begin(), bonuses.end()); } + VoidStorageItem(VoidStorageItem&& vsi) = default; uint64 ItemId; uint32 ItemEntry; ObjectGuid CreatorGuid; uint32 ItemRandomPropertyId; uint32 ItemSuffixFactor; + uint32 ItemUpgradeId; + std::vector<int32> BonusListIDs; }; class TradeData @@ -2623,8 +2617,7 @@ class Player : public Unit, public GridObject<Player> void LockVoidStorage() { RemoveFlag(PLAYER_FLAGS, PLAYER_FLAGS_VOID_UNLOCKED); } uint8 GetNextVoidStorageFreeSlot() const; uint8 GetNumOfVoidStorageFreeSlots() const; - uint8 AddVoidStorageItem(VoidStorageItem const& item); - void AddVoidStorageItemAtSlot(uint8 slot, const VoidStorageItem& item); + uint8 AddVoidStorageItem(VoidStorageItem&& item); void DeleteVoidStorageItem(uint8 slot); bool SwapVoidStorageItem(uint8 oldSlot, uint8 newSlot); VoidStorageItem* GetVoidStorageItem(uint8 slot) const; |
