diff --git a/Source/Framework/Database/Databases/CharacterDatabase.cs b/Source/Framework/Database/Databases/CharacterDatabase.cs index 628aef484..449920737 100644 --- a/Source/Framework/Database/Databases/CharacterDatabase.cs +++ b/Source/Framework/Database/Databases/CharacterDatabase.cs @@ -8,7 +8,7 @@ namespace Framework.Database public override void PreparedStatements() { const string SelectItemInstanceContent = "ii.guid, ii.itemEntry, ii.creatorGuid, ii.giftCreatorGuid, ii.count, ii.duration, ii.charges, ii.flags, ii.enchantments, ii.randomBonusListId, " + - "ii.durability, ii.playedTime, ii.text, ii.battlePetSpeciesId, ii.battlePetBreedData, ii.battlePetLevel, ii.battlePetDisplayId, ii.context, ii.bonusListIDs, " + + "ii.durability, ii.playedTime, ii.createTime, ii.text, ii.battlePetSpeciesId, ii.battlePetBreedData, ii.battlePetLevel, ii.battlePetDisplayId, ii.context, ii.bonusListIDs, " + "iit.itemModifiedAppearanceAllSpecs, iit.itemModifiedAppearanceSpec1, iit.itemModifiedAppearanceSpec2, iit.itemModifiedAppearanceSpec3, iit.itemModifiedAppearanceSpec4, iit.itemModifiedAppearanceSpec5, " + "iit.spellItemEnchantmentAllSpecs, iit.spellItemEnchantmentSpec1, iit.spellItemEnchantmentSpec2, iit.spellItemEnchantmentSpec3, iit.spellItemEnchantmentSpec4, iit.spellItemEnchantmentSpec5, " + "iit.secondaryItemModifiedAppearanceAllSpecs, iit.secondaryItemModifiedAppearanceSpec1, iit.secondaryItemModifiedAppearanceSpec2, iit.secondaryItemModifiedAppearanceSpec3, iit.secondaryItemModifiedAppearanceSpec4, iit.secondaryItemModifiedAppearanceSpec5, " + @@ -182,8 +182,8 @@ namespace Framework.Database PrepareStatement(CharStatements.DEL_ITEM_BOP_TRADE, "DELETE FROM item_soulbound_trade_data WHERE itemGuid = ? LIMIT 1"); PrepareStatement(CharStatements.INS_ITEM_BOP_TRADE, "INSERT INTO item_soulbound_trade_data VALUES (?, ?)"); PrepareStatement(CharStatements.REP_INVENTORY_ITEM, "REPLACE INTO character_inventory (guid, bag, slot, item) VALUES (?, ?, ?, ?)"); - PrepareStatement(CharStatements.REP_ITEM_INSTANCE, "REPLACE INTO item_instance (itemEntry, owner_guid, creatorGuid, giftCreatorGuid, count, duration, charges, flags, enchantments, randomBonusListId, durability, playedTime, text, battlePetSpeciesId, battlePetBreedData, battlePetLevel, battlePetDisplayId, context, bonusListIDs, guid) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); - PrepareStatement(CharStatements.UPD_ITEM_INSTANCE, "UPDATE item_instance SET itemEntry = ?, owner_guid = ?, creatorGuid = ?, giftCreatorGuid = ?, count = ?, duration = ?, charges = ?, flags = ?, enchantments = ?, randomBonusListId = ?, durability = ?, playedTime = ?, text = ?, battlePetSpeciesId = ?, battlePetBreedData = ?, battlePetLevel = ?, battlePetDisplayId = ?, context = ?, bonusListIDs = ? WHERE guid = ?"); + PrepareStatement(CharStatements.REP_ITEM_INSTANCE, "REPLACE INTO item_instance (itemEntry, owner_guid, creatorGuid, giftCreatorGuid, count, duration, charges, flags, enchantments, randomBonusListId, durability, playedTime, createTime, text, battlePetSpeciesId, battlePetBreedData, battlePetLevel, battlePetDisplayId, context, bonusListIDs, guid) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); + PrepareStatement(CharStatements.UPD_ITEM_INSTANCE, "UPDATE item_instance SET itemEntry = ?, owner_guid = ?, creatorGuid = ?, giftCreatorGuid = ?, count = ?, duration = ?, charges = ?, flags = ?, enchantments = ?, randomBonusListId = ?, durability = ?, playedTime = ?, createTime = ?, text = ?, battlePetSpeciesId = ?, battlePetBreedData = ?, battlePetLevel = ?, battlePetDisplayId = ?, context = ?, bonusListIDs = ? WHERE guid = ?"); PrepareStatement(CharStatements.UPD_ITEM_INSTANCE_ON_LOAD, "UPDATE item_instance SET duration = ?, flags = ?, durability = ? WHERE guid = ?"); PrepareStatement(CharStatements.DEL_ITEM_INSTANCE, "DELETE FROM item_instance WHERE guid = ?"); PrepareStatement(CharStatements.DEL_ITEM_INSTANCE_BY_OWNER, "DELETE FROM item_instance WHERE owner_guid = ?"); diff --git a/Source/Game/AuctionHouse/AuctionManager.cs b/Source/Game/AuctionHouse/AuctionManager.cs index 96c72892f..ae8d63e91 100644 --- a/Source/Game/AuctionHouse/AuctionManager.cs +++ b/Source/Game/AuctionHouse/AuctionManager.cs @@ -164,13 +164,13 @@ namespace Game } Item item = Item.NewItemOrBag(proto); - if (!item.LoadFromDB(itemGuid, ObjectGuid.Create(HighGuid.Player, result.Read(51)), result.GetFields(), itemEntry)) + if (!item.LoadFromDB(itemGuid, ObjectGuid.Create(HighGuid.Player, result.Read(52)), result.GetFields(), itemEntry)) { item.Dispose(); continue; } - uint auctionId = result.Read(52); + uint auctionId = result.Read(53); itemsByAuction.Add(auctionId, item); ++count; diff --git a/Source/Game/Entities/Item/Item.cs b/Source/Game/Entities/Item/Item.cs index 909530f2d..65a25628a 100644 --- a/Source/Game/Entities/Item/Item.cs +++ b/Source/Game/Entities/Item/Item.cs @@ -28,7 +28,6 @@ namespace Game.Entities uState = ItemUpdateState.New; uQueuePos = -1; - m_lastPlayedTimeUpdate = GameTime.GetGameTime(); } public virtual bool Create(ulong guidlow, uint itemId, ItemContext context, Player owner) @@ -59,6 +58,7 @@ namespace Game.Entities SetExpiration(itemProto.GetDuration()); SetCreatePlayedTime(0); + SetCreateTime(GameTime.GetGameTime()); SetContext(context); if (itemProto.GetArtifactID() != 0) @@ -162,6 +162,7 @@ namespace Game.Entities stmt.AddValue(++index, m_randomBonusListId); stmt.AddValue(++index, (uint)m_itemData.Durability); stmt.AddValue(++index, (uint)m_itemData.CreatePlayedTime); + stmt.AddValue(++index, m_itemData.CreateTime); stmt.AddValue(++index, m_text); stmt.AddValue(++index, GetModifier(ItemModifier.BattlePetSpeciesId)); stmt.AddValue(++index, GetModifier(ItemModifier.BattlePetBreedData)); @@ -441,16 +442,17 @@ namespace Game.Entities } SetCreatePlayedTime(fields.Read(11)); - SetText(fields.Read(12)); + SetCreateTime(fields.Read(12)); + SetText(fields.Read(13)); - SetModifier(ItemModifier.BattlePetSpeciesId, fields.Read(13)); - SetModifier(ItemModifier.BattlePetBreedData, fields.Read(14)); - SetModifier(ItemModifier.BattlePetLevel, fields.Read(14)); - SetModifier(ItemModifier.BattlePetDisplayId, fields.Read(16)); + SetModifier(ItemModifier.BattlePetSpeciesId, fields.Read(14)); + SetModifier(ItemModifier.BattlePetBreedData, fields.Read(15)); + SetModifier(ItemModifier.BattlePetLevel, fields.Read(16)); + SetModifier(ItemModifier.BattlePetDisplayId, fields.Read(17)); - SetContext((ItemContext)fields.Read(17)); + SetContext((ItemContext)fields.Read(18)); - var bonusListString = new StringArray(fields.Read(18), ' '); + var bonusListString = new StringArray(fields.Read(19), ' '); List bonusListIDs = new(); for (var i = 0; i < bonusListString.Length; ++i) { @@ -467,34 +469,34 @@ namespace Game.Entities SetSpellCharges(i, value); } - SetModifier(ItemModifier.TransmogAppearanceAllSpecs, fields.Read(19)); - SetModifier(ItemModifier.TransmogAppearanceSpec1, fields.Read(20)); - SetModifier(ItemModifier.TransmogAppearanceSpec2, fields.Read(21)); - SetModifier(ItemModifier.TransmogAppearanceSpec3, fields.Read(22)); - SetModifier(ItemModifier.TransmogAppearanceSpec4, fields.Read(23)); - SetModifier(ItemModifier.TransmogAppearanceSpec5, fields.Read(24)); + SetModifier(ItemModifier.TransmogAppearanceAllSpecs, fields.Read(20)); + SetModifier(ItemModifier.TransmogAppearanceSpec1, fields.Read(21)); + SetModifier(ItemModifier.TransmogAppearanceSpec2, fields.Read(22)); + SetModifier(ItemModifier.TransmogAppearanceSpec3, fields.Read(23)); + SetModifier(ItemModifier.TransmogAppearanceSpec4, fields.Read(24)); + SetModifier(ItemModifier.TransmogAppearanceSpec5, fields.Read(25)); - SetModifier(ItemModifier.EnchantIllusionAllSpecs, fields.Read(25)); - SetModifier(ItemModifier.EnchantIllusionSpec1, fields.Read(26)); - SetModifier(ItemModifier.EnchantIllusionSpec2, fields.Read(27)); - SetModifier(ItemModifier.EnchantIllusionSpec3, fields.Read(28)); - SetModifier(ItemModifier.EnchantIllusionSpec4, fields.Read(29)); + SetModifier(ItemModifier.EnchantIllusionAllSpecs, fields.Read(26)); + SetModifier(ItemModifier.EnchantIllusionSpec1, fields.Read(27)); + SetModifier(ItemModifier.EnchantIllusionSpec2, fields.Read(28)); + SetModifier(ItemModifier.EnchantIllusionSpec3, fields.Read(29)); SetModifier(ItemModifier.EnchantIllusionSpec4, fields.Read(30)); + SetModifier(ItemModifier.EnchantIllusionSpec4, fields.Read(31)); - SetModifier(ItemModifier.TransmogSecondaryAppearanceAllSpecs, fields.Read(31)); - SetModifier(ItemModifier.TransmogSecondaryAppearanceSpec1, fields.Read(32)); - SetModifier(ItemModifier.TransmogSecondaryAppearanceSpec2, fields.Read(33)); - SetModifier(ItemModifier.TransmogSecondaryAppearanceSpec3, fields.Read(34)); - SetModifier(ItemModifier.TransmogSecondaryAppearanceSpec4, fields.Read(35)); - SetModifier(ItemModifier.TransmogSecondaryAppearanceSpec5, fields.Read(36)); + SetModifier(ItemModifier.TransmogSecondaryAppearanceAllSpecs, fields.Read(32)); + SetModifier(ItemModifier.TransmogSecondaryAppearanceSpec1, fields.Read(33)); + SetModifier(ItemModifier.TransmogSecondaryAppearanceSpec2, fields.Read(34)); + SetModifier(ItemModifier.TransmogSecondaryAppearanceSpec3, fields.Read(35)); + SetModifier(ItemModifier.TransmogSecondaryAppearanceSpec4, fields.Read(36)); + SetModifier(ItemModifier.TransmogSecondaryAppearanceSpec5, fields.Read(37)); int gemFields = 4; ItemDynamicFieldGems[] gemData = new ItemDynamicFieldGems[ItemConst.MaxGemSockets]; for (int i = 0; i < ItemConst.MaxGemSockets; ++i) { gemData[i] = new ItemDynamicFieldGems(); - gemData[i].ItemId = fields.Read(37 + i * gemFields); - var gemBonusListIDs = new StringArray(fields.Read(38 + i * gemFields), ' '); + gemData[i].ItemId = fields.Read(38 + i * gemFields); + var gemBonusListIDs = new StringArray(fields.Read(39 + i * gemFields), ' '); if (!gemBonusListIDs.IsEmpty()) { uint b = 0; @@ -505,13 +507,13 @@ namespace Game.Entities } } - gemData[i].Context = fields.Read(39 + i * gemFields); + gemData[i].Context = fields.Read(40 + i * gemFields); if (gemData[i].ItemId != 0) - SetGem((ushort)i, gemData[i], fields.Read(40 + i * gemFields)); + SetGem((ushort)i, gemData[i], fields.Read(41 + i * gemFields)); } - SetModifier(ItemModifier.TimewalkerLevel, fields.Read(49)); - SetModifier(ItemModifier.ArtifactKnowledgeLevel, fields.Read(50)); + SetModifier(ItemModifier.TimewalkerLevel, fields.Read(50)); + SetModifier(ItemModifier.ArtifactKnowledgeLevel, fields.Read(51)); // Enchants must be loaded after all other bonus/scaling data var enchantmentTokens = new StringArray(fields.Read(8), ' '); @@ -1224,6 +1226,7 @@ namespace Game.Entities newItem.ReplaceAllItemFlags((ItemFieldFlags)(m_itemData.DynamicFlags & ~(uint)(ItemFieldFlags.Refundable | ItemFieldFlags.BopTradeable))); newItem.SetExpiration(m_itemData.Expiration); newItem.SetBonuses(m_itemData.ItemBonusKey.GetValue().BonusListIDs); + newItem.SetFixedLevel(GetModifier(ItemModifier.TimewalkerLevel)); // player CAN be NULL in which case we must not update random properties because that accesses player's item update queue if (player != null) newItem.SetItemRandomBonusList(m_randomBonusListId); @@ -1413,40 +1416,14 @@ namespace Game.Entities owner.GetSession().GetCollectionMgr().AddItemAppearance(this); } - public void UpdatePlayedTime(Player owner) - { - // Get current played time - uint current_playtime = m_itemData.CreatePlayedTime; - // Calculate time elapsed since last played time update - long curtime = GameTime.GetGameTime(); - uint elapsed = (uint)(curtime - m_lastPlayedTimeUpdate); - uint new_playtime = current_playtime + elapsed; - // Check if the refund timer has expired yet - if (new_playtime <= 2 * Time.Hour) - { - // No? Proceed. - // Update the data field - SetCreatePlayedTime(new_playtime); - // Flag as changed to get saved to DB - SetState(ItemUpdateState.Changed, owner); - // Speaks for itself - m_lastPlayedTimeUpdate = curtime; - return; - } - // Yes - SetNotRefundable(owner); - } - public uint GetPlayedTime() { - long curtime = GameTime.GetGameTime(); - uint elapsed = (uint)(curtime - m_lastPlayedTimeUpdate); - return m_itemData.CreatePlayedTime + elapsed; + return m_itemData.CreatePlayedTime; } public bool IsRefundExpired() { - return (GetPlayedTime() > 2 * Time.Hour); + return m_itemData.CreateTime + 2 * Time.Hour <= GameTime.GetGameTime(); } public void SetSoulboundTradeable(List allowedLooters) @@ -1472,7 +1449,7 @@ namespace Game.Entities public bool CheckSoulboundTradeExpire() { // called from owner's update - GetOwner() MUST be valid - if (m_itemData.CreatePlayedTime + 2 * Time.Hour < GetOwner().GetTotalPlayedTime()) + if (m_itemData.CreatePlayedTime + 4 * Time.Hour < GetOwner().GetTotalPlayedTime()) { ClearSoulboundTradeable(GetOwner()); return true; // remove from tradeable list @@ -2626,6 +2603,7 @@ namespace Game.Entities public int GetEnchantmentCharges(EnchantmentSlot slot) { return m_itemData.Enchantment[(int)slot].Charges; } public void SetCreatePlayedTime(uint createPlayedTime) { SetUpdateFieldValue(m_values.ModifyValue(m_itemData).ModifyValue(m_itemData.CreatePlayedTime), createPlayedTime); } + public void SetCreateTime(long createTime) { SetUpdateFieldValue(m_values.ModifyValue(m_itemData).ModifyValue(m_itemData.CreateTime), createTime); } public string GetText() { return m_text; } public void SetText(string text) { m_text = text; } @@ -2784,7 +2762,6 @@ namespace Game.Entities int uQueuePos; string m_text; bool mb_in_trade; - long m_lastPlayedTimeUpdate; List allowedGUIDs = new(); uint m_randomBonusListId; // store separately to easily find which bonus list is the one randomly given for stat rerolling ObjectGuid m_childItem; diff --git a/Source/Game/Entities/Object/Update/UpdateFields.cs b/Source/Game/Entities/Object/Update/UpdateFields.cs index 8252f4f60..5bf00eed9 100644 --- a/Source/Game/Entities/Object/Update/UpdateFields.cs +++ b/Source/Game/Entities/Object/Update/UpdateFields.cs @@ -397,7 +397,7 @@ namespace Game.Entities public UpdateField MaxDurability = new(0, 11); public UpdateField CreatePlayedTime = new(0, 12); public UpdateField Context = new(0, 13); - public UpdateField CreateTime = new(0, 14); + public UpdateField CreateTime = new(0, 14); public UpdateField ArtifactXP = new(0, 15); public UpdateField ItemAppearanceModID = new(0, 16); public UpdateField Modifiers = new(0, 17); @@ -436,7 +436,7 @@ namespace Game.Entities } data.WriteUInt32(CreatePlayedTime); data.WriteInt32(Context); - data.WriteUInt64(CreateTime); + data.WriteInt64(CreateTime); if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag.Owner)) { data.WriteUInt64(ArtifactXP); @@ -577,7 +577,7 @@ namespace Game.Entities } if (changesMask[14]) { - data.WriteUInt64(CreateTime); + data.WriteInt64(CreateTime); } if (changesMask[15]) { diff --git a/Source/Game/Entities/Player/Player.DB.cs b/Source/Game/Entities/Player/Player.DB.cs index 2fa399ddd..51d284510 100644 --- a/Source/Game/Entities/Player/Player.DB.cs +++ b/Source/Game/Entities/Player/Player.DB.cs @@ -66,9 +66,9 @@ namespace Game.Entities } - ulong counter = result.Read(51); - ObjectGuid bagGuid = counter != 0 ? ObjectGuid.Create(HighGuid.Item, counter) : ObjectGuid.Empty; - byte slot = result.Read(52); + ulong dbId = result.Read(52); + ObjectGuid bagGuid = dbId != 0 ? ObjectGuid.Create(HighGuid.Item, dbId) : ObjectGuid.Empty; + byte slot = result.Read(53); GetSession().GetCollectionMgr().CheckHeirloomUpgrades(item); GetSession().GetCollectionMgr().AddItemAppearance(item); @@ -226,10 +226,10 @@ namespace Game.Entities } if (item.IsRefundable()) { - if (item.GetPlayedTime() > (2 * Time.Hour)) + if (item.IsRefundExpired()) { Log.outDebug(LogFilter.Player, "LoadInventory: player (GUID: {0}, name: {1}) has item (GUID: {2}, entry: {3}) with expired refund time ({4}). Deleting refund data and removing " + - "efundable flag.", GetGUID().ToString(), GetName(), item.GetGUID().ToString(), item.GetEntry(), item.GetPlayedTime()); + "efundable flag.", GetGUID().ToString(), GetName(), item.GetGUID().ToString(), item.GetEntry(), GetTotalPlayedTime() - item.GetPlayedTime()); stmt = CharacterDatabase.GetPreparedStatement(CharStatements.DEL_ITEM_REFUND_INSTANCE); stmt.AddValue(0, item.GetGUID().ToString()); @@ -1332,7 +1332,7 @@ namespace Game.Entities do { - ulong mailId = mailItemsResult.Read(52); + ulong mailId = mailItemsResult.Read(53); _LoadMailedItem(GetGUID(), this, mailId, mailById[mailId], mailItemsResult.GetFields(), additionalData.LookupByKey(mailItemsResult.Read(0))); } while (mailItemsResult.NextRow()); @@ -1366,7 +1366,7 @@ namespace Game.Entities } Item item = Bag.NewItemOrBag(proto); - ObjectGuid ownerGuid = fields.Read(51) != 0 ? ObjectGuid.Create(HighGuid.Player, fields.Read(51)) : ObjectGuid.Empty; + ObjectGuid ownerGuid = fields.Read(52) != 0 ? ObjectGuid.Create(HighGuid.Player, fields.Read(52)) : ObjectGuid.Empty; if (!item.LoadFromDB(itemGuid, ownerGuid, fields, itemEntry)) { Log.outError(LogFilter.Player, $"Player._LoadMailedItems: Item (GUID: {itemGuid}) in mail ({mailId}) doesn't exist, deleted from mail."); @@ -1735,7 +1735,8 @@ namespace Game.Entities Item item = GetItemByGuid(guid); if (item != null) { - item.UpdatePlayedTime(this); + if (item.IsRefundable() && item.IsRefundExpired()) + item.SetNotRefundable(this); continue; } else @@ -4161,7 +4162,7 @@ namespace Game.Entities do { - ulong mailId = resultItems.Read(52); + ulong mailId = resultItems.Read(53); Item mailItem = _LoadMailedItem(playerGuid, null, mailId, null, resultItems.GetFields(), additionalData.LookupByKey(resultItems.Read(0))); if (mailItem != null) itemsByMail.Add(mailId, mailItem); diff --git a/Source/Game/Entities/Player/Player.Items.cs b/Source/Game/Entities/Player/Player.Items.cs index 949f7050d..7f7b00c20 100644 --- a/Source/Game/Entities/Player/Player.Items.cs +++ b/Source/Game/Entities/Player/Player.Items.cs @@ -135,8 +135,8 @@ namespace Game.Entities } public void SendRefundInfo(Item item) { - // This function call unsets ITEM_FLAGS_REFUNDABLE if played time is over 2 hours. - item.UpdatePlayedTime(this); + if (item.IsRefundable() && item.IsRefundExpired()) + item.SetNotRefundable(this); if (!item.IsRefundable()) { @@ -159,7 +159,7 @@ namespace Game.Entities } SetItemPurchaseData setItemPurchaseData = new(); setItemPurchaseData.ItemGUID = item.GetGUID(); - setItemPurchaseData.PurchaseTime = GetTotalPlayedTime() - item.GetPlayedTime(); + setItemPurchaseData.PurchaseTime = item.m_itemData.CreatePlayedTime; setItemPurchaseData.Contents.Money = item.GetPaidMoney(); for (byte i = 0; i < ItemConst.MaxItemExtCostItems; ++i) // item cost data @@ -1259,19 +1259,19 @@ namespace Game.Entities if (bonusListIDs != null) 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 != null && allowedLooters.Count > 1 && item.GetTemplate().GetMaxStackSize() == 1 && item.IsSoulBound()) { item.SetSoulboundTradeable(allowedLooters); - item.SetCreatePlayedTime(GetTotalPlayedTime()); AddTradeableItem(item); // save data diff --git a/Source/Game/Guilds/Guild.cs b/Source/Game/Guilds/Guild.cs index e9d60ebc0..ccaaa1312 100644 --- a/Source/Game/Guilds/Guild.cs +++ b/Source/Game/Guilds/Guild.cs @@ -1403,7 +1403,7 @@ namespace Game.Guilds public bool LoadBankItemFromDB(SQLFields field) { - byte tabId = field.Read(52); + byte tabId = field.Read(53); if (tabId >= _GetPurchasedTabsSize()) { Log.outError(LogFilter.Guild, "Invalid tab for item (GUID: {0}, id: {1}) in guild bank, skipped.", @@ -3371,7 +3371,7 @@ namespace Game.Guilds public bool LoadItemFromDB(SQLFields field) { - byte slotId = field.Read(53); + byte slotId = field.Read(54); uint itemGuid = field.Read(0); uint itemEntry = field.Read(1); if (slotId >= GuildConst.MaxBankSlots) diff --git a/Source/Game/Guilds/GuildManager.cs b/Source/Game/Guilds/GuildManager.cs index de79edb7b..650095c32 100644 --- a/Source/Game/Guilds/GuildManager.cs +++ b/Source/Game/Guilds/GuildManager.cs @@ -368,7 +368,7 @@ namespace Game uint count = 0; do { - ulong guildId = result.Read(51); + ulong guildId = result.Read(52); Guild guild = GetGuildById(guildId); if (guild != null) guild.LoadBankItemFromDB(result.GetFields()); diff --git a/Source/Game/Handlers/TradeHandler.cs b/Source/Game/Handlers/TradeHandler.cs index e3f4132fd..c815d0739 100644 --- a/Source/Game/Handlers/TradeHandler.cs +++ b/Source/Game/Handlers/TradeHandler.cs @@ -111,7 +111,7 @@ namespace Game } // adjust time (depends on /played) - if (myItems[i].IsBOPTradeable()) + if (myItems[i].m_itemData.CreatePlayedTime != 0) myItems[i].SetCreatePlayedTime(trader.GetTotalPlayedTime() - (GetPlayer().GetTotalPlayedTime() - myItems[i].m_itemData.CreatePlayedTime)); // store trader.MoveItemToInventory(traderDst, myItems[i], true, true); @@ -130,7 +130,7 @@ namespace Game // adjust time (depends on /played) - if (hisItems[i].IsBOPTradeable()) + if (hisItems[i].m_itemData.CreatePlayedTime != 0) hisItems[i].SetCreatePlayedTime(GetPlayer().GetTotalPlayedTime() - (trader.GetTotalPlayedTime() - hisItems[i].m_itemData.CreatePlayedTime)); // store GetPlayer().MoveItemToInventory(playerDst, hisItems[i], true, true);