コード例 #1
0
        public static void TradeSuccessful(InPacket lea, Client c)
        {
            var chr = c.Character;

            TradePacket.TradeSuccessful(c);
            TradePacket.TradeSuccessful(chr.Trader.Client);
        }
コード例 #2
0
        public static void TradeConfirm(InPacket lea, Client c)
        {
            var chr = c.Character;
            int j   = 0;
            int k   = 0;
            int m   = 0;
            int l   = 0;

            try
            {
                // 交易成功

                // Item

                // 個人接收
                foreach (Item Item in chr.Trader.Trade.Item)
                {
                    byte Type = Item.Type;
                    byte Slot = chr.Items.GetNextFreeSlot((InventoryType.ItemType)Type);
                    chr.Items.Add(new Item(Item.ItemID, chr.Trader.Trade.TargetQuantity[m], Item.Spirit, Item.Level1,
                                           Item.Level2, Item.Level3, Item.Level4, Item.Level5, Item.Level6, Item.Level7, Item.Level8,
                                           Item.Level9, Item.Level10, Item.Fusion, Item.IsLocked, Item.Icon, Item.Term, Type, Slot));
                    InventoryHandler.UpdateInventory(c, Item.Type);
                    m++;
                }

                // 對方接收
                foreach (Item Item in chr.Trade.Item)
                {
                    byte Type = Item.Type;
                    byte Slot = chr.Trader.Items.GetNextFreeSlot((InventoryType.ItemType)Type);
                    chr.Trader.Items.Add(new Item(Item.ItemID, chr.Trade.TargetQuantity[l], Item.Spirit, Item.Level1,
                                                  Item.Level2, Item.Level3, Item.Level4, Item.Level5, Item.Level6, Item.Level7, Item.Level8,
                                                  Item.Level9, Item.Level10, Item.Fusion, Item.IsLocked, Item.Icon, Item.Term, Type, Slot));
                    InventoryHandler.UpdateInventory(chr.Trader.Client, Item.Type);
                    l++;
                }

                // Money

                // 個人
                chr.Money += chr.Trader.Trade.Money;
                // 對方
                chr.Trader.Money += chr.Trade.Money;
                // 個人
                if (chr.Trader.Trade.Money > 0)
                {
                    InventoryPacket.getInvenMoney(c, chr.Money, chr.Trader.Trade.Money);
                }
                // 對方
                if (chr.Trade.Money > 0)
                {
                    InventoryPacket.getInvenMoney(chr.Trader.Client, chr.Trader.Money, chr.Trade.Money);
                }
            }
            catch
            {
                // 交易失敗

                // Item

                // 個人
                foreach (Item Item in chr.Trade.Item)
                {
                    Item i = chr.Items.getItem(Item.Type, Item.Slot);
                    if (i != null)
                    {
                        // 合併消費物品、其他物品
                        if (chr.Trade.SourceQuantity[j] + chr.Trade.TargetQuantity[j] <= 100)
                        {
                            chr.Items.Remove(Item.Type, Item.Slot);
                            chr.Items.Add(new Item(Item.ItemID, chr.Trade.SourceQuantity[j], Item.Spirit, Item.Level1,
                                                   Item.Level2, Item.Level3, Item.Level4, Item.Level5, Item.Level6, Item.Level7,
                                                   Item.Level8, Item.Level9, Item.Level10, Item.Fusion, Item.IsLocked, Item.Icon,
                                                   Item.Term, Item.Type, Item.Slot));
                        }
                        else
                        {
                            chr.Items.Add(Item);
                        }
                    }
                    else
                    {
                        chr.Items.Add(Item);
                    }

                    InventoryHandler.UpdateInventory(c, Item.Type);
                    j++;
                }

                // 對方
                foreach (Item Item in chr.Trader.Trade.Item)
                {
                    Item i = chr.Trader.Items.getItem(Item.Type, Item.Slot);
                    if (i != null)
                    {
                        // 合併消費物品、其他物品
                        if (chr.Trader.Trade.SourceQuantity[k] + chr.Trader.Trade.TargetQuantity[k] <= 100)
                        {
                            chr.Trader.Items.Remove(Item.Type, Item.Slot);
                            chr.Trader.Items.Add(new Item(Item.ItemID, chr.Trader.Trade.SourceQuantity[k], Item.Spirit,
                                                          Item.Level1, Item.Level2, Item.Level3, Item.Level4, Item.Level5, Item.Level6,
                                                          Item.Level7, Item.Level8, Item.Level9, Item.Level10, Item.Fusion, Item.IsLocked,
                                                          Item.Icon, Item.Term, Item.Type, Item.Slot));
                        }
                        else
                        {
                            chr.Trader.Items.Add(Item);
                        }
                    }
                    else
                    {
                        chr.Trader.Items.Add(Item);
                    }

                    InventoryHandler.UpdateInventory(chr.Trader.Client, Item.Type);
                    k++;
                }

                // Money

                // 個人
                chr.Money += chr.Trade.Money;
                // 對方
                chr.Trader.Money += chr.Trader.Trade.Money;
                // 個人
                if (chr.Trade.Money > 0)
                {
                    InventoryPacket.getInvenMoney(c, chr.Money, chr.Trade.Money);
                }
                // 對方
                if (chr.Trader.Trade.Money > 0)
                {
                    InventoryPacket.getInvenMoney(chr.Trader.Client, chr.Trader.Money, chr.Trader.Trade.Money);
                }

                TradePacket.TradeFail(c);
                TradePacket.TradeFail(chr.Trader.Client);
                return;
            }

            TradePacket.TradeSuccessful(c);
            TradePacket.TradeSuccessful(chr.Trader.Client);
        }