Core/Items: Fix item sell price not scaling with item level
Port From (https://github.com/TrinityCore/TrinityCore/commit/500301b96256792357b13ef78d7e1836028cff26)
This commit is contained in:
@@ -1754,7 +1754,7 @@ namespace Game.Entities
|
|||||||
typeFactor = weaponPrice.Data;
|
typeFactor = weaponPrice.Data;
|
||||||
}
|
}
|
||||||
|
|
||||||
standardPrice = false;
|
standardPrice = true;
|
||||||
return (uint)(proto.GetPriceVariance() * typeFactor * baseFactor * qualityFactor * proto.GetPriceRandomValue());
|
return (uint)(proto.GetPriceVariance() * typeFactor * baseFactor * qualityFactor * proto.GetPriceRandomValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3039,11 +3039,7 @@ namespace Game.Entities
|
|||||||
uint eslot = slot - InventorySlots.BuyBackStart;
|
uint eslot = slot - InventorySlots.BuyBackStart;
|
||||||
|
|
||||||
SetInvSlot(slot, pItem.GetGUID());
|
SetInvSlot(slot, pItem.GetGUID());
|
||||||
ItemTemplate proto = pItem.GetTemplate();
|
SetBuybackPrice(eslot, pItem.GetSellPrice(this) * pItem.GetCount());
|
||||||
if (proto != null)
|
|
||||||
SetBuybackPrice(eslot, proto.GetSellPrice() * pItem.GetCount());
|
|
||||||
else
|
|
||||||
SetBuybackPrice(eslot, 0);
|
|
||||||
|
|
||||||
SetBuybackTimestamp(eslot, etime);
|
SetBuybackTimestamp(eslot, etime);
|
||||||
|
|
||||||
|
|||||||
@@ -429,56 +429,59 @@ namespace Game
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ItemTemplate pProto = pItem.GetTemplate();
|
uint sellPrice = pItem.GetSellPrice(_player);
|
||||||
if (pProto != null)
|
if (sellPrice > 0)
|
||||||
{
|
{
|
||||||
if (pProto.GetSellPrice() > 0)
|
ulong money = sellPrice * packet.Amount;
|
||||||
{
|
|
||||||
ulong money = pProto.GetSellPrice() * packet.Amount;
|
|
||||||
|
|
||||||
if (!_player.ModifyMoney((long)money)) // ensure player doesn't exceed gold limit
|
if (money > uint.MaxValue) // ensure sell price * amount doesn't overflow buyback price
|
||||||
|
{
|
||||||
|
_player.SendSellError(SellResult.CantSellItem, creature, packet.ItemGUID);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!_player.ModifyMoney((long)money)) // ensure player doesn't exceed gold limit
|
||||||
|
{
|
||||||
|
_player.SendSellError(SellResult.CantSellItem, creature, packet.ItemGUID);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
_player.UpdateCriteria(CriteriaType.MoneyEarnedFromSales, money);
|
||||||
|
_player.UpdateCriteria(CriteriaType.SellItemsToVendors, 1);
|
||||||
|
|
||||||
|
if (packet.Amount < pItem.GetCount()) // need split items
|
||||||
|
{
|
||||||
|
Item pNewItem = pItem.CloneItem(packet.Amount, pl);
|
||||||
|
if (pNewItem == null)
|
||||||
{
|
{
|
||||||
_player.SendSellError(SellResult.CantSellItem, creature, packet.ItemGUID);
|
Log.outError(LogFilter.Network, "WORLD: HandleSellItemOpcode - could not create clone of item {0}; count = {1}", pItem.GetEntry(), packet.Amount);
|
||||||
|
pl.SendSellError(SellResult.CantSellItem, creature, packet.ItemGUID);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
_player.UpdateCriteria(CriteriaType.MoneyEarnedFromSales, money);
|
pItem.SetCount(pItem.GetCount() - packet.Amount);
|
||||||
_player.UpdateCriteria(CriteriaType.SellItemsToVendors, 1);
|
pl.ItemRemovedQuestCheck(pItem.GetEntry(), packet.Amount);
|
||||||
|
if (pl.IsInWorld)
|
||||||
|
pItem.SendUpdateToPlayer(pl);
|
||||||
|
pItem.SetState(ItemUpdateState.Changed, pl);
|
||||||
|
|
||||||
if (packet.Amount < pItem.GetCount()) // need split items
|
pl.AddItemToBuyBackSlot(pNewItem);
|
||||||
{
|
if (pl.IsInWorld)
|
||||||
Item pNewItem = pItem.CloneItem(packet.Amount, pl);
|
pNewItem.SendUpdateToPlayer(pl);
|
||||||
if (pNewItem == null)
|
|
||||||
{
|
|
||||||
Log.outError(LogFilter.Network, "WORLD: HandleSellItemOpcode - could not create clone of item {0}; count = {1}", pItem.GetEntry(), packet.Amount);
|
|
||||||
pl.SendSellError(SellResult.CantSellItem, creature, packet.ItemGUID);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
pItem.SetCount(pItem.GetCount() - packet.Amount);
|
|
||||||
pl.ItemRemovedQuestCheck(pItem.GetEntry(), packet.Amount);
|
|
||||||
if (pl.IsInWorld)
|
|
||||||
pItem.SendUpdateToPlayer(pl);
|
|
||||||
pItem.SetState(ItemUpdateState.Changed, pl);
|
|
||||||
|
|
||||||
pl.AddItemToBuyBackSlot(pNewItem);
|
|
||||||
if (pl.IsInWorld)
|
|
||||||
pNewItem.SendUpdateToPlayer(pl);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
pl.RemoveItem(pItem.GetBagSlot(), pItem.GetSlot(), true);
|
|
||||||
pl.ItemRemovedQuestCheck(pItem.GetEntry(), pItem.GetCount());
|
|
||||||
Item.RemoveItemFromUpdateQueueOf(pItem, pl);
|
|
||||||
pl.AddItemToBuyBackSlot(pItem);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
pl.SendSellError(SellResult.CantSellItem, creature, packet.ItemGUID);
|
{
|
||||||
return;
|
pl.RemoveItem(pItem.GetBagSlot(), pItem.GetSlot(), true);
|
||||||
|
pl.ItemRemovedQuestCheck(pItem.GetEntry(), pItem.GetCount());
|
||||||
|
Item.RemoveItemFromUpdateQueueOf(pItem, pl);
|
||||||
|
pl.AddItemToBuyBackSlot(pItem);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
pl.SendSellError(SellResult.CantSellItem, creature, packet.ItemGUID);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
pl.SendSellError(SellResult.CantSellItem, creature, packet.ItemGUID);
|
pl.SendSellError(SellResult.CantFindItem, creature, packet.ItemGUID);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1130,7 +1133,7 @@ namespace Game
|
|||||||
_player.SetBackpackAutoSortDisabled(setBackpackAutosortDisabled.Disable);
|
_player.SetBackpackAutoSortDisabled(setBackpackAutosortDisabled.Disable);
|
||||||
}
|
}
|
||||||
|
|
||||||
[WorldPacketHandler(ClientOpcodes.SetBackpackSellJunkDisabled, Processing = PacketProcessing.Inplace)]
|
[WorldPacketHandler(ClientOpcodes.SetBackpackSellJunkDisabled, Processing = PacketProcessing.Inplace)]
|
||||||
void HandleSetBackpackSellJunkDisabled(SetBackpackSellJunkDisabled setBackpackSellJunkDisabled)
|
void HandleSetBackpackSellJunkDisabled(SetBackpackSellJunkDisabled setBackpackSellJunkDisabled)
|
||||||
{
|
{
|
||||||
_player.SetBackpackSellJunkDisabled(setBackpackSellJunkDisabled.Disable);
|
_player.SetBackpackSellJunkDisabled(setBackpackSellJunkDisabled.Disable);
|
||||||
|
|||||||
Reference in New Issue
Block a user