public static bool Handle(Models.Entities.Player player, Models.Packets.Trade.TradePacket packet) { if (!player.Trade.Trading) { return(true); } if (!player.Trade.WindowOpen) { return(true); } uint money = packet.TargetClientId; if (money > player.Money) { player.SendSystemMessage("LOW_MONEY_TRADE"); return(true); } player.Trade.Money = money; packet.Action = Enums.TradeAction.ShowMoney; player.Trade.Partner.ClientSocket.Send(packet); return(true); }
public static bool Handle(Models.Entities.Player player, Models.Packets.Trade.TradePacket packet) { if (!player.Trade.Trading) { return(true); } if (!player.Trade.WindowOpen) { return(true); } Models.Items.Item item; if (player.Inventory.TryGetItem(packet.TargetClientId, out item)) { if (!item.Discardable) { player.SendSystemMessage("NO_PERMISSION_ITEM"); return(true); } if ((player.Trade.Partner.Inventory.Count + player.Trade.Items.Count) >= 40) { player.SendSystemMessage("TARGET_FULL_INVENTORY"); return(true); } player.Trade.Items.Add(item); item.UpdateClient(player.Trade.Partner, Enums.ItemUpdateAction.Trade); } return(true); }
public static bool Handle(Models.Entities.Player player, Models.Packets.Trade.TradePacket packet) { if (!player.Trade.Trading) { return(true); } if (!player.Trade.WindowOpen) { return(true); } uint cps = packet.TargetClientId; if (cps > player.CPs) { player.SendSystemMessage("LOW_CPS_TRADE"); return(true); } player.Trade.CPs = cps; packet.Action = Enums.TradeAction.ShowConquerPoints; player.Trade.Partner.ClientSocket.Send(packet); return(true); }
public static bool Handle(Models.Entities.Player player, Models.Packets.Trade.TradePacket packet) { if (player.Trade.Partner != null) { player.Trade.Partner.Trade.Reset(); } player.Trade.Reset(); return(true); }
public static bool Handle(Models.Entities.Player player, Models.Packets.Trade.TradePacket packet) { if (player.Trade.Trading && player.Trade.Partner == null) { player.SendSystemMessage("SELF_ALREADY_TRADE"); return(true); } else if (player.Trade.Trading) { if (!player.Trade.Requesting) { packet.Action = Enums.TradeAction.ShowTable; packet.TargetClientId = player.Trade.Partner.ClientId; player.ClientSocket.Send(packet); packet.TargetClientId = player.ClientId; player.Trade.Partner.ClientSocket.Send(packet); player.Trade.WindowOpen = true; player.Trade.Partner.Trade.WindowOpen = true; } return(true); } Models.Maps.IMapObject obj; if (player.GetFromScreen(packet.TargetClientId, out obj)) { var target = obj as Models.Entities.Player; if (!target.Trade.Trading) { player.Trade.Begin(target); target.Trade.Begin(player); target.Trade.Requesting = false; player.Trade.Requesting = true; packet.TargetClientId = player.ClientId; target.ClientSocket.Send(packet); } else { player.SendSystemMessage("TARGET_ALREADY_TRADE"); } } else { player.ClientSocket.Disconnect(Drivers.Messages.Errors.INVALID_TRADE_TARGET); } return(true); }
public static bool Handle(Models.Entities.Player player, Models.Packets.Trade.TradePacket packet) { if (player.Trade.Partner != null) { var partner = player.Trade.Partner; partner.Trade.Reset(); player.Trade.Reset(); packet.Action = Enums.TradeAction.HideTable; packet.TargetClientId = partner.ClientId; player.ClientSocket.Send(packet); packet.TargetClientId = player.ClientId; partner.ClientSocket.Send(packet); } return(true); }
public static bool Handle(Models.Entities.Player player, Models.Packets.Trade.TradePacket packet) { if (!player.Trade.Trading) { return(true); } if (!player.Trade.WindowOpen) { return(true); } if (!player.Trade.Accepted && !player.Trade.PartnerAccepted) { player.Trade.Accepted = true; player.Trade.Partner.Trade.Accepted = true; packet.TargetClientId = player.ClientId; player.Trade.Partner.ClientSocket.Send(packet); } else if (player.Trade.Accepted && player.Trade.Partner.Trade.Accepted) { bool tradeSuccess = true; foreach (var item in player.Trade.Items) { if (!player.Inventory.Contains(item.ClientId)) { tradeSuccess = false; } } foreach (var item in player.Trade.PartnerItems) { if (!player.Trade.Partner.Inventory.Contains(item.ClientId)) { tradeSuccess = false; } } if (player.Money < player.Trade.Money) { tradeSuccess = false; } if (player.Trade.Partner.Money < player.Trade.PartnerMoney) { tradeSuccess = false; } if (player.CPs < player.Trade.CPs) { tradeSuccess = false; } if (player.Trade.Partner.CPs < player.Trade.PartnerCPs) { tradeSuccess = false; } if (tradeSuccess) { foreach (var item in player.Trade.Items) { player.AddActionLog("TradeItem", string.Format("{0} -> {1} : {2}", player.DbPlayer.Id, player.Trade.Partner.DbPlayer.Id, item.DbItem.Id)); var removedItem = player.Inventory.Pop(item.ClientId); if (removedItem != null) { player.Trade.Partner.Inventory.Add(removedItem); } } foreach (var item in player.Trade.PartnerItems) { player.AddActionLog("TradeItem", string.Format("{0} -> {1} : {2}", player.Trade.Partner.DbPlayer.Id, player.DbPlayer.Id, item.DbItem.Id)); var removedItem = player.Trade.Partner.Inventory.Pop(item.ClientId); if (removedItem != null) { player.Inventory.Add(item); } } if (player.Money >= player.Trade.Money) { player.AddActionLog("TradeMoney", player.Trade.Money); player.Money -= player.Trade.Money; player.Trade.Partner.Money += player.Trade.Money; } if (player.Trade.Partner.Money >= player.Trade.PartnerMoney) { player.AddActionLog("TradePartnerMoney", player.Trade.PartnerMoney); player.Trade.Partner.Money -= player.Trade.PartnerMoney; player.Money += player.Trade.PartnerMoney; } if (player.CPs >= player.Trade.CPs) { player.AddActionLog("TradeCPs", player.Trade.CPs); player.CPs -= player.Trade.CPs; player.Trade.Partner.CPs += player.Trade.CPs; } if (player.Trade.Partner.CPs >= player.Trade.PartnerCPs) { player.AddActionLog("TradePartnerCPs", player.Trade.PartnerCPs); player.Trade.Partner.CPs -= player.Trade.PartnerCPs; player.CPs += player.Trade.PartnerCPs; } var partner = player.Trade.Partner; partner.Trade.Reset(); player.Trade.Reset(); packet.Action = Enums.TradeAction.HideTable; packet.TargetClientId = partner.ClientId; player.ClientSocket.Send(packet); packet.TargetClientId = player.ClientId; partner.ClientSocket.Send(packet); player.SendSystemMessage("TRADE_SUCCESS"); partner.SendSystemMessage("TRADE_SUCCESS"); } else { var partner = player.Trade.Partner; partner.Trade.Reset(); player.Trade.Reset(); packet.Action = Enums.TradeAction.HideTable; packet.TargetClientId = partner.ClientId; player.ClientSocket.Send(packet); packet.TargetClientId = player.ClientId; partner.ClientSocket.Send(packet); player.SendSystemMessage("TRADE_FAIL"); partner.SendSystemMessage("TRADE_FAIL"); } } return(true); }