Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
        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);
        }
Exemplo n.º 7
0
        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);
        }