/// <summary> /// Adds an item to the tradewindow /// </summary> /// <param name="itemForTrade">InventoryItem to add</param> /// <returns>true if added</returns> public bool AddItemToTrade(InventoryItem itemForTrade) { lock (Sync) { // allow admin and gm account opened windows to trade any item if (this.m_owner.Client.Account.PrivLevel == 1) { if (!itemForTrade.IsDropable || !itemForTrade.IsPickable || itemForTrade.IsNotLosingDur || !itemForTrade.IsTradable) { return(false); } } if (TradeItems.Contains(itemForTrade)) { return(false); } if (TradeItems.Count >= MAX_ITEMS) { TradeUpdate(); return(false); } TradeItems.Add(itemForTrade); TradeUpdate(); return(true); } }
/// <summary> /// Adds an item to the tradewindow /// </summary> /// <param name="itemForTrade">InventoryItem to add</param> /// <returns>true if added</returns> public bool AddItemToTrade(InventoryItem itemForTrade) { lock (Sync) { if (!itemForTrade.IsDropable || !itemForTrade.IsPickable || itemForTrade.IsNotLosingDur) { return(false); } if (TradeItems.Contains(itemForTrade)) { return(false); } if (TradeItems.Count >= MAX_ITEMS) { TradeUpdate(); return(false); } TradeItems.Add(itemForTrade); TradeUpdate(); return(true); } }
// 08 03 public void OnTradeItem(SagaMap.Packets.Client.GetTradeItem p) { if (this.state != SESSION_STATE.MAP_LOADED) { return; } if (this.Char.trading != Trading.TRADING) { return; } byte Tradeslot = p.GetSlot(); byte ItemIndex = p.GetItem(); byte quantity = p.GetQuantity(); byte status; //Lookup trade items information from character's inventory Item TradeItem = this.Char.inv.GetItem(CONTAINER_TYPE.INVENTORY, ItemIndex); if (quantity > TradeItem.stack) { quantity = TradeItem.stack; } TradeItem = new Item(TradeItem.id, TradeItem.creatorName, TradeItem.durability, TradeItem.stack);// make sure it's a different instance than the old one if (this.Char.trading == Trading.TRADING) { if (!TradeItem.tradeAble) { this.SendTradeResult(TradeResults.NOT_TRADEABLE); status = 9; } else { status = 0; // Add item to chars list of items to trade try { TradeItems.Add(TradeItem, quantity); } catch { } Logger.ShowInfo("Trade item added", null); //Send info about item to clients Packets.Server.TradeItem sendPacket = new SagaMap.Packets.Server.TradeItem(); sendPacket.SetTradeSlot(Tradeslot); sendPacket.SetItemIndex(ItemIndex); sendPacket.SetQuantity(quantity); sendPacket.SetStatus(status); netIO.SendPacket(sendPacket, this.SessionID); ActorPC target = (ActorPC)map.GetActor(this.Char.TradeTarget); if (target == null) { return; } target.e.OnTradeItem(Tradeslot, TradeItem); } } }