diff options
Diffstat (limited to 'src/server/game/Entities/Player')
| -rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 58 |
1 files changed, 31 insertions, 27 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 50e5c2bcc71..77dea9acdf8 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -3924,7 +3924,7 @@ void Player::DeleteFromDB(ObjectGuid playerguid, uint32 accountId, bool updateRe do { Field* fields = resultItems->Fetch(); - uint64 mailId = fields[44].GetUInt64(); + uint64 mailId = fields[53].GetUInt64(); if (Item* mailItem = _LoadMailedItem(playerguid, nullptr, mailId, nullptr, fields, Trinity::Containers::MapGetValuePtr(additionalData, fields[0].GetUInt64()))) itemsByMail[mailId].push_back(mailItem); @@ -11545,19 +11545,19 @@ Item* Player::StoreNewItem(ItemPosCountVec const& pos, uint32 itemId, bool updat if (bonusListIDs) item->SetBonuses(*bonusListIDs); + item->SetFixedLevel(GetLevel()); + item->SetItemRandomBonusList(randomBonusListId); + item->SetCreatePlayedTime(GetTotalPlayedTime()); + item = StoreItem(pos, item, update); ItemAddedQuestCheck(itemId, count, false); UpdateCriteria(CriteriaType::ObtainAnyItem, itemId, count); UpdateCriteria(CriteriaType::AcquireItem, itemId, count); - item->SetFixedLevel(GetLevel()); - item->SetItemRandomBonusList(randomBonusListId); - if (allowedLooters.size() > 1 && item->GetTemplate()->GetMaxStackSize() == 1 && item->IsSoulBound()) { item->SetSoulboundTradeable(allowedLooters); - item->SetCreatePlayedTime(GetTotalPlayedTime()); AddTradeableItem(item); // save data @@ -18804,19 +18804,23 @@ void Player::_LoadInventory(PreparedQueryResult result, PreparedQueryResult arti PreparedQueryResult azeriteItemMilestonePowersResult, PreparedQueryResult azeriteItemUnlockedEssencesResult, PreparedQueryResult azeriteEmpoweredItemResult, uint32 timeDiff) { - // 0 1 2 3 4 5 6 7 8 9 10 11 12 - // SELECT guid, itemEntry, creatorGuid, giftCreatorGuid, count, duration, charges, flags, enchantments, randomPropertyId, durability, playedTime, text, - // 13 14 15 16 17 18 + // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 + // SELECT guid, itemEntry, creatorGuid, giftCreatorGuid, count, duration, charges, flags, enchantments, randomBonusListId, durability, playedTime, createTime, text, + // 14 15 16 17 18 19 // battlePetSpeciesId, battlePetBreedData, battlePetLevel, battlePetDisplayId, context, bonusListIDs, - // 19 20 21 22 23 - // itemModifiedAppearanceAllSpecs, itemModifiedAppearanceSpec1, itemModifiedAppearanceSpec2, itemModifiedAppearanceSpec3, itemModifiedAppearanceSpec4, - // 24 25 26 27 28 - // spellItemEnchantmentAllSpecs, spellItemEnchantmentSpec1, spellItemEnchantmentSpec2, spellItemEnchantmentSpec3, spellItemEnchantmentSpec4, - // 29 30 31 32 33 34 35 36 37 38 39 40 + // 20 21 22 23 24 25 + // itemModifiedAppearanceAllSpecs, itemModifiedAppearanceSpec1, itemModifiedAppearanceSpec2, itemModifiedAppearanceSpec3, itemModifiedAppearanceSpec4, itemModifiedAppearanceSpec5, + // 26 27 28 29 30 31 + // spellItemEnchantmentAllSpecs, spellItemEnchantmentSpec1, spellItemEnchantmentSpec2, spellItemEnchantmentSpec3, spellItemEnchantmentSpec4, spellItemEnchantmentSpec5, + // 32 33 34 + // secondaryItemModifiedAppearanceAllSpecs, secondaryItemModifiedAppearanceSpec1, secondaryItemModifiedAppearanceSpec2, + // 35 36 37 + // secondaryItemModifiedAppearanceSpec3, secondaryItemModifiedAppearanceSpec4, secondaryItemModifiedAppearanceSpec5, + // 38 39 40 41 42 43 44 45 46 47 48 49 // gemItemId1, gemBonuses1, gemContext1, gemScalingLevel1, gemItemId2, gemBonuses2, gemContext2, gemScalingLevel2, gemItemId3, gemBonuses3, gemContext3, gemScalingLevel3 - // 41 42 + // 50 51 // fixedScalingLevel, artifactKnowledgeLevel FROM item_instance - // 43 44 + // 52 53 // bag, slot // FROM character_inventory ci // JOIN item_instance ii ON ci.item = ii.guid @@ -18867,8 +18871,8 @@ void Player::_LoadInventory(PreparedQueryResult result, PreparedQueryResult arti azeriteEmpoweredItem->LoadAzeriteEmpoweredItemData(this, *addionalDataPtr->AzeriteEmpoweredItem); } - ObjectGuid bagGuid = fields[51].GetUInt64() ? ObjectGuid::Create<HighGuid::Item>(fields[51].GetUInt64()) : ObjectGuid::Empty; - uint8 slot = fields[52].GetUInt8(); + ObjectGuid bagGuid = fields[52].GetUInt64() ? ObjectGuid::Create<HighGuid::Item>(fields[52].GetUInt64()) : ObjectGuid::Empty; + uint8 slot = fields[53].GetUInt8(); GetSession()->GetCollectionMgr()->CheckHeirloomUpgrades(item); GetSession()->GetCollectionMgr()->AddItemAppearance(item); @@ -19082,10 +19086,10 @@ Item* Player::_LoadItem(CharacterDatabaseTransaction trans, uint32 zoneId, uint3 } else if (item->IsRefundable()) { - if (item->GetPlayedTime() > (2 * HOUR)) + if (item->IsRefundExpired()) { TC_LOG_DEBUG("entities.player.loading", "Player::_LoadInventory: player ({}, name: '{}') has item ({}) with expired refund time ({}). Deleting refund data and removing refundable flag.", - GetGUID().ToString(), GetName(), item->GetGUID().ToString(), item->GetPlayedTime()); + GetGUID().ToString(), GetName(), item->GetGUID().ToString(), GetTotalPlayedTime() - item->GetPlayedTime()); stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ITEM_REFUND_INSTANCE); stmt->setUInt64(0, item->GetGUID().GetCounter()); @@ -19208,7 +19212,7 @@ Item* Player::_LoadMailedItem(ObjectGuid const& playerGuid, Player* player, uint Item* item = NewItemOrBag(proto); - ObjectGuid ownerGuid = fields[51].GetUInt64() ? ObjectGuid::Create<HighGuid::Player>(fields[51].GetUInt64()) : ObjectGuid::Empty; + ObjectGuid ownerGuid = fields[52].GetUInt64() ? ObjectGuid::Create<HighGuid::Player>(fields[52].GetUInt64()) : ObjectGuid::Empty; if (!item->LoadFromDB(itemGuid, ownerGuid, fields, itemEntry)) { TC_LOG_ERROR("entities.player", "Player::_LoadMailedItems: Item (GUID: {}) in mail ({}) doesn't exist, deleted from mail.", itemGuid, mailId); @@ -19297,7 +19301,7 @@ void Player::_LoadMail(PreparedQueryResult mailsResult, PreparedQueryResult mail do { Field* fields = mailItemsResult->Fetch(); - uint64 mailId = fields[52].GetUInt64(); + uint64 mailId = fields[53].GetUInt64(); _LoadMailedItem(GetGUID(), this, mailId, mailById[mailId], fields, Trinity::Containers::MapGetValuePtr(additionalData, fields[0].GetUInt64())); } while (mailItemsResult->NextRow()); } @@ -20599,10 +20603,10 @@ void Player::_SaveInventory(CharacterDatabaseTransaction trans) i_next = itr; ++i_next; - Item* iPtr = GetItemByGuid(*itr); - if (iPtr) + if (Item* iPtr = GetItemByGuid(*itr)) { - iPtr->UpdatePlayedTime(this); + if (iPtr->IsRefundable() && iPtr->IsRefundExpired()) + iPtr->SetNotRefundable(this); continue; } else @@ -28609,8 +28613,8 @@ void Player::DeleteRefundReference(ObjectGuid it) void Player::SendRefundInfo(Item* item) { - // This function call unsets ITEM_FIELD_FLAG_REFUNDABLE if played time is over 2 hours. - item->UpdatePlayedTime(this); + if (item->IsRefundable() && item->IsRefundExpired()) + item->SetNotRefundable(this); if (!item->IsRefundable()) { @@ -28634,7 +28638,7 @@ void Player::SendRefundInfo(Item* item) WorldPackets::Item::SetItemPurchaseData setItemPurchaseData; setItemPurchaseData.ItemGUID = item->GetGUID(); - setItemPurchaseData.PurchaseTime = GetTotalPlayedTime() - item->GetPlayedTime(); + setItemPurchaseData.PurchaseTime = item->m_itemData->CreatePlayedTime; setItemPurchaseData.Contents.Money = item->GetPaidMoney(); for (uint8 i = 0; i < MAX_ITEM_EXT_COST_ITEMS; ++i) // item cost data |
