void Player_BuyItem(byte selected_tab, byte selected_line, short buy_amount, int selected_npc_id)
{
#region Buy item
try
{
//Create new object
obj npc_details = GetObject(selected_npc_id);
//Get shop line information
string s = Data.ObjectBase[npc_details.ID].Tab[selected_tab];
//Get shop index content
Global.shop_data shopitem = Global.shop_data.GetShopIndex(s);
//Get items
short items = (short)Data.ItemBase[Global.item_database.GetItem(shopitem.Item[selected_line])].ID;
//Set item price
int gold = Data.ItemBase[items].Shop_price;
//Check slot information
byte slot = GetFreeSlot();
if (slot <= 12) return;
//Check the max amount of the item.
if (buy_amount <= Data.ItemBase[Global.item_database.GetItem(shopitem.Item[selected_line])].Max_Stack)
{
//Get item id
int Itemidinfo = Data.ItemBase[Global.item_database.GetItem(shopitem.Item[selected_line])].ID;
//Check if what the player is buying is a wearable type and not ETC so max stack is 1
if (Data.ItemBase[Itemidinfo].Itemtype == Global.item_database.ItemType.SPEAR ||
Data.ItemBase[Itemidinfo].Itemtype == Global.item_database.ItemType.GLAVIE ||
Data.ItemBase[Itemidinfo].Itemtype == Global.item_database.ItemType.SWORD ||
Data.ItemBase[Itemidinfo].Itemtype == Global.item_database.ItemType.BLADE ||
Data.ItemBase[Itemidinfo].Itemtype == Global.item_database.ItemType.EU_AXE ||
Data.ItemBase[Itemidinfo].Itemtype == Global.item_database.ItemType.EU_DAGGER ||
Data.ItemBase[Itemidinfo].Itemtype == Global.item_database.ItemType.EU_DARKSTAFF ||
Data.ItemBase[Itemidinfo].Itemtype == Global.item_database.ItemType.EU_HARP ||
Data.ItemBase[Itemidinfo].Itemtype == Global.item_database.ItemType.EU_STAFF ||
Data.ItemBase[Itemidinfo].Itemtype == Global.item_database.ItemType.EU_SWORD ||
Data.ItemBase[Itemidinfo].Itemtype == Global.item_database.ItemType.EU_TSTAFF ||
Data.ItemBase[Itemidinfo].Itemtype == Global.item_database.ItemType.EU_TSWORD ||
Data.ItemBase[Itemidinfo].Itemtype == Global.item_database.ItemType.CH_SHIELD ||
Data.ItemBase[Itemidinfo].Itemtype == Global.item_database.ItemType.EU_SHIELD ||
Data.ItemBase[Itemidinfo].Itemtype == Global.item_database.ItemType.BOW ||
Data.ItemBase[Itemidinfo].Itemtype == Global.item_database.ItemType.EU_CROSSBOW ||
Data.ItemBase[Itemidinfo].Itemtype == Global.item_database.ItemType.HUNTERSUIT ||
Data.ItemBase[Itemidinfo].Itemtype == Global.item_database.ItemType.THIEFSUIT ||
Data.ItemBase[Itemidinfo].Itemtype == Global.item_database.ItemType.TRADERSUIT ||
Data.ItemBase[Itemidinfo].Type == Global.item_database.ArmorType.ARMOR||
Data.ItemBase[Itemidinfo].Type == Global.item_database.ArmorType.GARMENT ||
Data.ItemBase[Itemidinfo].Type == Global.item_database.ArmorType.HEAVY ||
Data.ItemBase[Itemidinfo].Type == Global.item_database.ArmorType.LIGHT ||
Data.ItemBase[Itemidinfo].Type == Global.item_database.ArmorType.PROTECTOR ||
Data.ItemBase[Itemidinfo].Type == Global.item_database.ArmorType.ROBE ||
Data.ItemBase[Itemidinfo].Itemtype == Global.item_database.ItemType.EARRING ||
Data.ItemBase[Itemidinfo].Itemtype == Global.item_database.ItemType.RING ||
Data.ItemBase[Itemidinfo].Itemtype == Global.item_database.ItemType.NECKLACE
)
buy_amount = 1;
//Multiply the amount / price.
gold *= buy_amount;
//Reduct the gold from the player
//If the character gold equals or is higher then the price , continue
if (Character.Information.Gold >= gold)
{
Character.Information.Gold -= gold;
//Send packet to update gold visual
client.Send(Packet.UpdateGold(Character.Information.Gold));
//Save player gold
SaveGold();
//Add new item to user
client.Send(Packet.MoveItemBuy(8, selected_tab, selected_line, (byte)buy_amount, slot, buy_amount));
//Amount information
if (buy_amount > 1)
AddItem(items, buy_amount, slot, Character.Information.CharacterID, 0);
else if (buy_amount == 1)
AddItem(items, 0, slot, Character.Information.CharacterID, 0);
}
else
{
client.Send(Packet.IngameMessages(SERVER_ITEM_MOVE, IngameMessages.UIIT_MSG_STRGERR_NOT_ENOUGH_GOLD));
}
}
else
{
client.Send(Packet.IngameMessages(SERVER_ITEM_MOVE, IngameMessages.UIIT_MSG_STRGERR_POSSESSION_LIMIT_EXCEEDED));
}
}
catch (Exception ex)
{
Print.Format("Player_BuyItem({0},{1},{2},{3})::Error..", selected_tab, selected_line, buy_amount, selected_npc_id);
Console.WriteLine("Buy item error {0}", ex);
Systems.Debugger.Write(ex);
}
SavePlayerInfo();
#endregion
}