mirror of
https://github.com/araxiaonline/TrinityCore.git
synced 2026-06-17 13:39:46 -04:00
Core/Items: Implemented CreateTime item field and changed refund/soulbound trade timers to also count time offline
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user