public void RequestTrade(RealmTime time, RequestTradePacket pkt) { if (!NameChosen) { SendInfo("Unique name is required to trade with others!"); return; } Player target = Owner.GetUniqueNamedPlayer(pkt.Name); //if (intake) //{ // SendError(target.Name + " is already trading!"); // return; //} if (tradeTarget != null) { SendError("You're already trading!"); tradeTarget = null; return; } if (client.Player == target) { SendError("Trading with yourself would be pointless."); tradeTarget = null; return; } if (target == null) { SendError("Player not found!"); return; } if (target.tradeTarget != null && target.tradeTarget != this) { SendError(target.Name + " is already trading!"); return; } if (potentialTrader.ContainsKey(target)) { tradeTarget = target; trade = new bool[12]; tradeAccepted = false; target.tradeTarget = this; target.trade = new bool[12]; target.tradeAccepted = false; potentialTrader.Clear(); target.potentialTrader.Clear(); taking = false; TradeItem[] my = new TradeItem[Inventory.Length]; for (int i = 0; i < Inventory.Length; i++) my[i] = new TradeItem { Item = Inventory[i] == null ? -1 : Inventory[i].ObjectType, Data = Inventory.Data[i] ?? new ItemData(), SlotType = SlotTypes[i], Included = false, Tradeable = (Inventory[i] != null && i >= 4) && (!Inventory[i].Soulbound) && (!Inventory[i].AdminOnly) && (Inventory.Data[i] == null || !Inventory.Data[i].Soulbound) }; TradeItem[] your = new TradeItem[target.Inventory.Length]; for (int i = 0; i < target.Inventory.Length; i++) your[i] = new TradeItem { Item = target.Inventory[i] == null ? -1 : target.Inventory[i].ObjectType, Data = target.Inventory.Data[i] ?? new ItemData(), SlotType = target.SlotTypes[i], Included = false, Tradeable = (target.Inventory[i] != null && i >= 4) && (!target.Inventory[i].Soulbound) && (!target.Inventory[i].AdminOnly) && (target.Inventory.Data[i] == null || !target.Inventory.Data[i].Soulbound) }; client.SendPacket(new TradeStartPacket { MyItems = my, YourName = target.Name, YourItems = your }); target.client.SendPacket(new TradeStartPacket { MyItems = your, YourName = Name, YourItems = my }); } else { target.potentialTrader[this] = 1000 * 20; target.client.SendPacket(new TradeRequestedPacket { Name = Name }); SendInfo("Sent trade request to " + target.Name); } }
public void RequestTrade(RealmTime time, RequestTradePacket pkt) { if (!NameChosen) { SendError("Unique name is required to trade with other!"); return; } if (tradeTarget != null) { SendError("You're already trading!"); return; } Player target = Owner.GetUniqueNamedPlayer(pkt.Name); if (target == null) { SendError("Player not found!"); return; } if (target.tradeTarget != null && target.tradeTarget != this) { SendError(target.Name + " is already trading!"); return; } if (this.potentialTrader.ContainsKey(target)) { this.tradeTarget = target; this.trade = new bool[12]; this.tradeAccepted = false; target.tradeTarget = this; target.trade = new bool[12]; target.tradeAccepted = false; this.potentialTrader.Clear(); target.potentialTrader.Clear(); TradeItem[] my = new TradeItem[this.Inventory.Length]; for (int i = 0; i < this.Inventory.Length; i++) my[i] = new TradeItem() { Item = this.Inventory[i] == null ? -1 : this.Inventory[i].ObjectType, SlotType = this.SlotTypes[i], Included = false, Tradeable = (this.Inventory[i] == null || i < 4) ? false : !this.Inventory[i].Soulbound }; TradeItem[] your = new TradeItem[target.Inventory.Length]; for (int i = 0; i < target.Inventory.Length; i++) your[i] = new TradeItem() { Item = target.Inventory[i] == null ? -1 : target.Inventory[i].ObjectType, SlotType = target.SlotTypes[i], Included = false, Tradeable = (target.Inventory[i] == null || i < 4) ? false : !target.Inventory[i].Soulbound }; this.client.SendPacket(new TradeStartPacket() { MyItems = my, YourName = target.Name, YourItems = your }); target.client.SendPacket(new TradeStartPacket() { MyItems = your, YourName = this.Name, YourItems = my }); } else { target.potentialTrader[this] = 1000 * 20; target.client.SendPacket(new TradeRequestedPacket() { Name = Name }); SendInfo("You have sent a trade request to " + target.Name + "!"); return; } }
public void RequestTrade(RealmTime time, RequestTradePacket pkt) { var target = Owner.GetPlayerByName(pkt.Name); if (target == null) { SendInfo("{\"key\":\"server.player_not_found\",\"tokens\":{\"player\":\"" + pkt.Name + "\"}}"); return; } if (!NameChosen || !target.NameChosen) { SendInfo("{\"key\":\"server.trade_needs_their_name\"}"); return; } if (Client.Player == target) { SendInfo("{\"key\":\"server.self_trade\"}"); return; } if (TradeManager.TradingPlayers.Count(_ => _.AccountId == target.AccountId) > 0) { SendInfo("{\"key\":\"server.they_already_trading\",\"tokens\":{\"player\":\"" + target.Name + "\"}}"); return; } if (TradeManager.CurrentRequests.Count(_ => _.Value.AccountId == AccountId && _.Key.AccountId == target.AccountId) > 0) { var myItems = new TradeItem[12]; var yourItems = new TradeItem[12]; for (var i = 0; i < myItems.Length; i++) { myItems[i] = new TradeItem { Item = Inventory[i] == null ? -1 : Inventory[i].ObjectType, SlotType = SlotTypes[i], Tradeable = (Inventory[i] != null && i >= 4) && (!Inventory[i].Soulbound), Included = false }; } for (var i = 0; i < yourItems.Length; i++) { yourItems[i] = new TradeItem { Item = target.Inventory[i] == null ? -1 : target.Inventory[i].ObjectType, SlotType = SlotTypes[i], Tradeable = (target.Inventory[i] != null && i >= 4) && (!target.Inventory[i].Soulbound), Included = false }; } Client.SendPacket(new TradeStartPacket { MyItems = myItems, YourItems = yourItems, YourName = target.Name }); target.Client.SendPacket(new TradeStartPacket { MyItems = yourItems, YourItems = myItems, YourName = Name }); var t = new TradeManager(this, target); target.TradeHandler = t; TradeHandler = t; } else { SendInfo("{\"key\":\"server.trade_requested\",\"tokens\":{\"player\":\"" + target.Name + "\"}}"); if (target.Ignored.Contains(Client.Account.AccountId)) return; target.Client.SendPacket(new TradeRequestedPacket { Name = Name }); var format = new KeyValuePair<Player, Player>(this, target); TradeManager.CurrentRequests.Add(format); Owner.Timers.Add(new WorldTimer(60 * 1000, (w, t) => { if (!TradeManager.CurrentRequests.Contains(format)) return; TradeManager.CurrentRequests.Remove(format); SendInfo("{\"key\":\"server.trade_timeout\"}"); })); } }