Esempio n. 1
0
        public static void MoveItemToStorage(InPacket lea, Client gc)
        {
            int     SourceType = lea.ReadShort();
            int     SourceSlot = lea.ReadShort();
            int     TargetType = lea.ReadShort();
            int     TargetSlot = lea.ReadShort();
            int     Quantity   = lea.ReadInt();
            var     chr        = gc.Character;
            Storage Target     = chr.Storages.GetItem((byte)TargetType, (byte)TargetSlot);
            Item    Source     = chr.Items.getItem((byte)SourceType, (byte)SourceSlot);

            if (Target != null || Source.ItemID / 100000 == 86 || Source.ItemID / 100000 == 87 ||
                Source.ItemID / 100000 == 92 || Source.ItemID / 100000 == 94 || Source.ItemID / 100000 == 95)
            {
                return;
            }

            chr.Storages.Add(new Storage(Source.ItemID, Quantity, Source.Spirit, Source.Level1, Source.Level2,
                                         Source.Level3, Source.Level4, Source.Level5, Source.Level6, Source.Level7, Source.Level8, Source.Level9,
                                         Source.Level10, Source.Fusion, Source.IsLocked, Source.Icon, Source.Term, TargetType, TargetSlot, 0));
            chr.Items.Remove((byte)SourceType, (byte)SourceSlot, Quantity);
            chr.Save();
            StoragePacket.getStoreInfo(gc);
            InventoryHandler.UpdateInventory(gc, (byte)SourceType);
        }
Esempio n. 2
0
        public static void SpiritMove(InPacket lea, Client c)
        {
            byte SourceType = lea.ReadByte();
            byte SourceSlot = lea.ReadByte();
            byte TargetType = lea.ReadByte();
            byte TargetSlot = lea.ReadByte();
            var  chr        = c.Character;
            Item Source     = chr.Items.getItem(SourceType, SourceSlot);
            Item Target     = chr.Items.getItem(TargetType, TargetSlot);

            if (Source == null || Target == null)
            {
                return;
            }

            ItemData Data = ItemFactory.GetItemData(Source.ItemID);

            if (Data == null)
            {
                return;
            }

            if (Source.Spirit > Data.Spirit)
            {
                Source.Spirit = Data.Spirit;
            }

            Target.Spirit += Source.Spirit;
            chr.Items.Remove(SourceType, SourceSlot);
            InventoryHandler.UpdateInventory(c, SourceType);
        }
Esempio n. 3
0
        public static void TradePutItem(InPacket lea, Client c)
        {
            var chr        = c.Character;
            int SourceType = lea.ReadShort();
            int SourceSlot = lea.ReadShort();
            int Quantity   = lea.ReadInt();

            if (SourceType == 0x64 && SourceSlot == 0x64)
            {
                // Money欄位
                chr.Money      -= Quantity;
                chr.Trade.Money = Quantity;
                InventoryPacket.getInvenMoney(c, chr.Money, -Quantity);
                TradePacket.TradePutItem(c);
                TradePacket.TradePutItem(chr.Trader.Client);
                return;
            }

            Item Source = chr.Items.getItem((byte)SourceType, (byte)SourceSlot);

            chr.Trade.SourceQuantity.Add(Source.Quantity);

            if (Source != null)
            {
                chr.Trade.Item.Add(Source);
                chr.Trade.TargetQuantity.Add((short)Quantity);
                chr.Items.Remove((byte)SourceType, (byte)SourceSlot, Quantity);
                InventoryHandler.UpdateInventory(c, (byte)SourceType);
                TradePacket.TradePutItem(c);
                TradePacket.TradePutItem(chr.Trader.Client);
            }
        }
Esempio n. 4
0
        public static void Buy_Req(InPacket lea, Client c)
        {
            int CharacterID = lea.ReadInt();
            int ItemID      = lea.ReadInt();
            int Slot        = lea.ReadShort();
            int Quantity    = lea.ReadShort();
            var chr         = c.Character;

            try
            {
                Map       map    = MapFactory.GetMap(chr.MapX, chr.MapY);
                Character Seller = null;
                foreach (Character find in map.Characters)
                {
                    if (find.CharacterID == CharacterID)
                    {
                        Seller = find;
                    }
                }

                ShopData Item     = Seller.Shop.Find(i => ItemID == i.ItemID && Slot == i.TargetSlot);
                byte     Type     = InventoryType.getItemType(ItemID);
                byte     FreeSlot = chr.Items.GetNextFreeSlot((InventoryType.ItemType)Type);

                if (Item.Quantity < Quantity || Item == null)
                {
                    PlayerShopPacket.Buy(c, 0);
                    return;
                }

                chr.Money -= (Item.Price * Quantity);
                InventoryPacket.getInvenMoney(c, chr.Money, -(Item.Price * Quantity));
                chr.Items.Add(new Item(Item.ItemID, (short)Quantity, 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, FreeSlot));
                InventoryHandler.UpdateInventory(c, Type);
                //Seller.Shop.Remove(Item);
                Seller.Items.Remove((byte)Item.SourceType, (byte)Item.SourceSlot);
                Seller.Items.Add(new Item(Item.ItemID, (short)(Item.Quantity - Quantity), 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, (byte)Item.SourceType,
                                          (byte)Item.SourceSlot));
                Item.Quantity      = Item.Quantity - Quantity;
                Seller.Shop.Money += (Item.Price * Quantity);
                Seller.Money      += (Item.Price * Quantity);
                PlayerShopPacket.ShopInfo(c, Seller, CharacterID);
                InventoryHandler.UpdateInventory(Seller.Client, (byte)Item.SourceType);
                PlayerShopPacket.SellInfo(Seller.Client);
                InventoryPacket.getInvenMoney(Seller.Client, Seller.Money, Item.Price * Quantity);

                PlayerShopPacket.Buy(c, 1);
            }
            catch
            {
                PlayerShopPacket.Buy(c, 0);
                return;
            }
        }
Esempio n. 5
0
        public static void Dismantle_Req(InPacket lea, Client c)
        {
            int  Type = lea.ReadInt();
            int  Slot = lea.ReadInt();
            var  chr  = c.Character;
            Item Item = chr.Items.getItem((byte)Type, (byte)Slot);

            Item.IsLocked = 0;
            InventoryHandler.UpdateInventory(c, (byte)Type);
        }
Esempio n. 6
0
        public static void CommodityToInventory_Req(InPacket lea, Client c)
        {
            var  chr    = c.Character;
            int  Slot   = lea.ReadInt();
            Item Source = chr.Items.getItem((byte)InventoryType.ItemType.Cash, (byte)Slot);

            if (Source.ItemID / 100000 == 90)
            {
                // 頭髮
                chr.Hair = Source.ItemID;
                chr.Items.Remove(Source.Type, Source.Slot);
                chr.Items.Save();
                CashShopPacket.CommodityToInventory(c);
                InventoryPacket.getInvenCash(c);
                InventoryHandler.UpdateInventory(c, (byte)InventoryType.ItemType.Equip);
                return;
            }
            else if (Source.ItemID / 100000 == 91)
            {
                // 眼睛
                chr.Eyes = Source.ItemID;
                chr.Items.Remove(Source.Type, Source.Slot);
                chr.Items.Save();
                CashShopPacket.CommodityToInventory(c);
                InventoryPacket.getInvenCash(c);
                InventoryHandler.UpdateInventory(c, (byte)InventoryType.ItemType.Equip);
                return;
            }
            else if (Source.ItemID / 100000 == 92 || Source.ItemID == 7820501)
            {
                // 寵物
                chr.Pets.Add(new Pet(Source.ItemID, 0, "", 1, 100, 100, 0, (byte)InventoryType.ItemType.Pet5,
                                     chr.Pets.GetNextFreeSlot(InventoryType.ItemType.Pet5)));
                chr.Items.Remove(Source.Type, Source.Slot);
                chr.Pets.Save();
                chr.Items.Save();
                CashShopPacket.CommodityToInventory(c);
                InventoryPacket.getInvenCash(c);
                InventoryHandler.UpdateInventory(c, (byte)InventoryType.ItemType.Pet5);
                return;
            }

            byte TargetType = InventoryType.getItemType(Source.ItemID);
            byte TargetSlot =
                chr.Items.GetNextFreeSlot((InventoryType.ItemType)InventoryType.getItemType(Source.ItemID));

            Source.Type = TargetType;
            Source.Slot = TargetSlot;
            chr.Items.Save();
            CashShopPacket.CommodityToInventory(c);
            InventoryPacket.getInvenCash(c);
            InventoryHandler.UpdateInventory(c, TargetType);
        }
Esempio n. 7
0
        public static void AbilityRecover_Req(InPacket lea, Client c)
        {
            short Slot = lea.ReadShort();
            short Type = lea.ReadShort();
            var   chr  = c.Character;

            switch (Type)
            {
            case 0:                     // 力量還原本
                if (chr.Str < 4)
                {
                    return;
                }
                chr.Str--;
                chr.AbilityBonus++;
                chr.Items.Remove(3, (byte)Slot, 1);
                break;

            case 1:                     // 精力還原本
                if (chr.Dex < 4)
                {
                    return;
                }
                chr.Dex--;
                chr.AbilityBonus++;
                chr.Items.Remove(3, (byte)Slot, 1);
                break;

            case 2:                     // 氣力還原本
                if (chr.Vit < 4)
                {
                    return;
                }
                chr.Vit--;
                chr.AbilityBonus++;
                chr.Items.Remove(3, (byte)Slot, 1);
                break;

            case 3:                     // 智力還原本
                if (chr.Int < 4)
                {
                    return;
                }
                chr.Int--;
                chr.AbilityBonus++;
                chr.Items.Remove(3, (byte)Slot, 1);
                break;
            }

            InventoryHandler.UpdateInventory(c, 3);
            StatusPacket.getStatusInfo(c);
        }
Esempio n. 8
0
        public static void Pet_Name_Req(InPacket lea, Client c)
        {
            string Name = lea.ReadString(20);
            int    Slot = lea.ReadInt();
            var    chr  = c.Character;
            Pet    Pet  = chr.Pets.Pet((byte)InventoryType.ItemType.Equip, (byte)InventoryType.EquipType.Pet);
            Pet    Item = chr.Pets.Pet((byte)InventoryType.ItemType.Pet5, (byte)Slot);

            Pet.Name = Name;
            Pet.Save();
            chr.Pets.Remove((byte)InventoryType.ItemType.Pet5, (byte)Slot);
            //PetPacket.PetName(c, Name);
            MapPacket.warpToMap(c, chr, chr.CharacterID, chr.MapX, chr.MapY, chr.PlayerX, chr.PlayerY);             // 先以此代替
            InventoryHandler.UpdateInventory(c, (byte)InventoryType.ItemType.Pet5);
        }
Esempio n. 9
0
        public static void Use_Coupon_Req(InPacket lea, Client gc)
        {
            var    chr  = gc.Character;
            string Code = lea.ReadString(20);

            foreach (dynamic datum in new Datums("Coupon").Populate())
            {
                if (Code.Equals(datum.code) && datum.valid == 1)
                {
                    byte Type = InventoryType.getItemType(datum.itemID);
                    chr.Items.Add(new Item(datum.itemID, InventoryType.getItemType(datum.itemID), chr.Items.GetNextFreeSlot((InventoryType.ItemType)Type), (short)datum.quantity));
                    InventoryHandler.UpdateInventory(gc, Type);
                    InventoryPacket.ClearDropItem(gc, chr.CharacterID, -1, datum.itemID);
                    datum.valid = 0;
                    datum.Update("code = '{0}'", Code);
                    break;
                }
            }
        }
Esempio n. 10
0
        public static void MoveItemToBag(InPacket lea, Client gc)
        {
            int SourceType = lea.ReadShort();
            int SourceSlot = lea.ReadShort();
            int TargetSlot = lea.ReadShort();

            lea.ReadShort();
            int Quantity = lea.ReadInt();
            var chr      = gc.Character;

            Storage Source     = chr.Storages.GetItem((byte)SourceType, (byte)SourceSlot);
            int     TargetType = InventoryType.getItemType(Source.ItemID);
            Item    Item       = chr.Items.getItem((byte)TargetType, (byte)TargetSlot);

            if (Item == null)
            {
                chr.Items.Add(new Item(Source.ItemID, (short)Quantity, Source.Spirit, Source.Level1, Source.Level2,
                                       Source.Level3, Source.Level4, Source.Level5, Source.Level6, Source.Level7, Source.Level8,
                                       Source.Level9, Source.Level10, Source.Fusion, Source.IsLocked, Source.Icon, Source.Term,
                                       (byte)TargetType, (byte)TargetSlot));
            }
            else
            {
                if (Source.ItemID != Item.ItemID)
                {
                    return;
                }

                int QuantityTemp = Item.Quantity;
                chr.Items.Remove((byte)TargetType, (byte)TargetSlot);
                chr.Items.Add(new Item(Item.ItemID, (short)(QuantityTemp + Quantity), 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, (byte)TargetType,
                                       (byte)TargetSlot));
            }

            chr.Storages.Remove((byte)Source.Type, (byte)Source.Slot, Quantity);

            chr.Save();
            StoragePacket.getStoreInfo(gc);
            InventoryHandler.UpdateInventory(gc, (byte)TargetType);
        }
Esempio n. 11
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);
        }
Esempio n. 12
0
        public static void Fish_Req(InPacket lea, Client c)
        {
            var chr         = c.Character;
            int CharacterID = chr.CharacterID;
            Map map         = MapFactory.GetMap(chr.MapX, chr.MapY);
            int State       = 0;

            if (!chr.IsFishing)
            {
                chr.IsFishing = true;
            }
            else
            {
                chr.IsFishing = false;
            }

            State = CheckBait(c);

            foreach (Character All in map.Characters)
            {
                FishPacket.Fish(All.Client, CharacterID, State, chr.IsFishing);
            }

            int[] reward =
            {
                8810012, 8820012, 8820022, 8810022, 8820032, 8810032, 8820042, 8810042, 8820052, 8810052, 8820062,
                8810062, 8970001, 8970002, 8970003, 8970004, 8970005, 8970006, 8970007, 8970008, 8970009, 8970010,
                8970011, 8970012
            };

            System.Timers.Timer FishTimer = new System.Timers.Timer(50000);
            FishTimer.Elapsed += delegate
            {
                if (!chr.IsFishing)
                {
                    FishTimer.Stop();
                    return;
                }

                Random rnd = new Random();
                int    r   = rnd.Next(24);
                try
                {
                    byte Type = r < 12 ? (byte)InventoryType.ItemType.Spend3 : (byte)InventoryType.ItemType.Other4;
                    byte Slot = chr.Items.GetNextFreeSlot((InventoryType.ItemType)Type);
                    chr.Items.Add(new Item(reward[r], Type, Slot));
                    chr.Items.Remove((byte)InventoryType.ItemType.Spend3,
                                     (byte)chr.UseSlot.Slot(InventoryType.ItemType.Spend3), 1);
                    chr.Items[InventoryType.ItemType.Equip, (byte)InventoryType.EquipType.Weapon].Fusion++;
                    InventoryHandler.UpdateInventory(c, Type);
                    InventoryHandler.UpdateInventory(c, (byte)InventoryType.ItemType.Equip);
                    if (Type != 3)
                    {
                        InventoryHandler.UpdateInventory(c, (byte)InventoryType.ItemType.Spend3);
                    }
                    State = CheckBait(c);

                    if (chr.Items[InventoryType.ItemType.Equip, (byte)InventoryType.EquipType.Weapon].Fusion == 30)
                    {
                        chr.IsFishing = false;
                        State         = -1;
                    }

                    if (State != 0)
                    {
                        foreach (Character All in map.Characters)
                        {
                            FishPacket.Fish(All.Client, CharacterID, State, chr.IsFishing);
                        }

                        FishTimer.Stop();
                    }
                }
                catch
                {
                    State         = -3;
                    chr.IsFishing = false;
                    foreach (Character All in map.Characters)
                    {
                        FishPacket.Fish(All.Client, CharacterID, State, chr.IsFishing);
                    }

                    FishTimer.Stop();
                }
            };
            FishTimer.Start();
        }
Esempio n. 13
0
        public static void Sell_Req(InPacket lea, Client gc)
        {
            int   ItemID   = lea.ReadInt();
            byte  Type     = lea.ReadByte();
            byte  Slot     = lea.ReadByte();
            short Quantity = lea.ReadShort();

            if (Quantity > 100)
            {
                return;
            }

            int Money = 0;

            switch (ItemID / 100000)
            {
            case 75:     // 耳環
                Money  = ItemFactory.earringData[ItemID].Price;
                Money /= 5;
                break;

            case 79:     // 武器
            case 80:     // 武器
                Money  = ItemFactory.weaponData[ItemID].Price;
                Money /= 5;
                break;

            case 81:     // 衣服
                Money  = ItemFactory.topData[ItemID].Price;
                Money /= 5;
                break;

            case 84:     // 披風
                Money  = ItemFactory.capeData[ItemID].Price;
                Money /= 5;
                break;

            case 86:     // 帽子
                Money  = ItemFactory.hatData[ItemID].Price;
                Money /= 5;
                break;

            case 87:     // 面具
                Money  = ItemFactory.maskData[ItemID].Price;
                Money /= 5;
                break;

            case 93:     // 武器
                Money  = ItemFactory.weaponData[ItemID].Price;
                Money /= 5;
                break;

            case 94:     // 鬍子
                Money  = ItemFactory.beardData[ItemID].Price;
                Money /= 5;
                break;

            case 95:     // 服裝
                Money  = ItemFactory.clothingData[ItemID].Price;
                Money /= 5;
                break;

            case 82:     // 戒指
                Money  = ItemFactory.ringData[ItemID].Price;
                Money /= 5;
                break;

            case 83:     // 項鍊
                Money  = ItemFactory.necklaceData[ItemID].Price;
                Money /= 5;
                break;

            case 85:     // 封印箱
                Money  = ItemFactory.soulData[ItemID].Price;
                Money /= 5;
                break;

            case 11:     // 拼圖
                Money = ItemFactory.jigsawData[ItemID].Price;
                break;

            case 88:     // 消耗
                Money  = ItemFactory.useData[ItemID].Price;
                Money /= 5;
                break;

            case 89:     // 其他
                Money = ItemFactory.etcData[ItemID].Price;
                break;

            default:
                Log.Error("未知的物品型態:" + ItemID / 100000);
                break;
            }

            if (ItemID == 8880011 || ItemID == 8880021 || ItemID == 8880031 || ItemID == 8880041 || ItemID == 8880051 || ItemID == 8880061 || ItemID == 8880071 || ItemID == 8880081 || ItemID == 8880091 || ItemID == 8880101)
            {
                Money = 0;
            }

            Item Source = gc.Character.Items.getItem(Type, Slot);

            if (Source != null)
            {
                if (Source.Quantity > Quantity)
                {
                    if (Quantity <= 0)
                    {
                        return;
                    }
                    gc.Character.Items[(InventoryType.ItemType)Source.Type, Source.Slot].Quantity -= Quantity;
                }
                else
                {
                    if (Quantity > Source.Quantity)
                    {
                        return;
                    }
                    gc.Character.Items.Remove(Type, Slot);
                }
                gc.Character.Money += (Money * Quantity);
                InventoryPacket.getInvenMoney(gc, gc.Character.Money, Money);
                InventoryHandler.UpdateInventory(gc, Type);
            }
        }
Esempio n. 14
0
        public static void Buy_Req(InPacket lea, Client gc)
        {
            lea.ReadInt();
            int ItemID   = lea.ReadInt();
            int Quantity = lea.ReadInt();
            int money    = 0;

            switch (ItemID / 100000)
            {
            case 75:     // 耳環
                money = ItemFactory.earringData[ItemID].Price;
                break;

            case 79:     // 武器
            case 80:     // 武器
                money = ItemFactory.weaponData[ItemID].Price;
                break;

            case 81:     // 衣服
                money = ItemFactory.topData[ItemID].Price;
                break;

            case 84:     // 披風
                money = ItemFactory.capeData[ItemID].Price;
                break;

            case 86:     // 帽子
                money = ItemFactory.hatData[ItemID].Price;
                break;

            case 87:     // 面具
                money = ItemFactory.maskData[ItemID].Price;
                break;

            case 93:     // 武器
                money = ItemFactory.weaponData[ItemID].Price;
                break;

            case 94:     // 鬍子
                money = ItemFactory.beardData[ItemID].Price;
                break;

            case 95:     // 服裝
                money = ItemFactory.clothingData[ItemID].Price;
                break;

            case 82:     // 戒指
                money = ItemFactory.ringData[ItemID].Price;
                break;

            case 83:     // 項鍊
                money = ItemFactory.necklaceData[ItemID].Price;
                break;

            case 85:     // 封印箱
                money = ItemFactory.soulData[ItemID].Price;
                break;

            case 11:     // 拼圖
                money = ItemFactory.jigsawData[ItemID].Price;
                break;

            case 88:     // 消耗
                money = ItemFactory.useData[ItemID].Price;
                break;

            case 89:     // 其他
                money = ItemFactory.etcData[ItemID].Price;
                break;

            default:
                Log.Error("未知的物品型態:" + ItemID / 100000);
                break;
            }
            if (gc.Character.Money >= (money * Quantity))
            {
                byte Type = (byte)InventoryType.getItemType(ItemID);

                if (ItemID >= 8880011 && ItemID <= 8880101) // 飛鏢
                {
                    Quantity *= 100;
                }

                Item finditem = null;
                foreach (Item it in gc.Character.Items)
                {
                    if (it.ItemID == ItemID)
                    {
                        finditem = it;
                    }
                }
                if (((Type == (byte)InventoryType.ItemType.Spend3) || (Type == (byte)InventoryType.ItemType.Other4)) && (finditem != null))
                {
                    // 合併消費物品跟其他物品
                    if ((finditem.Quantity + Quantity) > 100)
                    {
                        int newqu = Quantity - (100 - finditem.Quantity);
                        gc.Character.Items[(InventoryType.ItemType)finditem.Type, finditem.Slot].Quantity = (short)100;
                        byte Slot  = gc.Character.Items.GetNextFreeSlot((InventoryType.ItemType)Type);
                        Item oItem = new Item(ItemID, Type, Slot, (short)newqu);
                        gc.Character.Items.Add(oItem);
                    }
                    else
                    {
                        gc.Character.Items[(InventoryType.ItemType)finditem.Type, finditem.Slot].Quantity += (short)Quantity;
                    }
                }
                else
                {
                    byte Slot  = gc.Character.Items.GetNextFreeSlot((InventoryType.ItemType)Type);
                    Item oItem = new Item(ItemID, Type, Slot, (short)Quantity);
                    gc.Character.Items.Add(oItem);
                }

                gc.Character.Money -= (money * Quantity);
                InventoryPacket.getInvenMoney(gc, gc.Character.Money, -(money * Quantity));
                InventoryHandler.UpdateInventory(gc, Type);
            }
        }
Esempio n. 15
0
        public static void Command_Req(InPacket lea, Client gc)
        {
            string[] cmd = lea.ReadString(60).Split(new[] { (char)0x20 }, StringSplitOptions.None);

            if (gc.Account.Master == 0 || cmd.Length < 1)
            {
                return;
            }
            var       chr    = gc.Character;
            Character victim = null;

            switch (cmd[0])
            {
            case "//1":
            case "//公告":
            case "//notice":
                if (cmd.Length != 2)
                {
                    break;
                }
                foreach (Character all in MapFactory.AllCharacters)
                {
                    GamePacket.getNotice(all.Client, 3, cmd[1]);
                }
                break;

            case "//item":
                if (cmd.Length != 2 && cmd.Length != 3)
                {
                    break;
                }

                short Quantity = 1;

                if (cmd.Length == 3)
                {
                    if (int.Parse(cmd[2]) > 100)
                    {
                        Quantity = 100;
                    }
                    else
                    {
                        Quantity = short.Parse(cmd[2]);
                    }
                }

                if (InventoryType.getItemType(int.Parse(cmd[1])) == 1 || InventoryType.getItemType(int.Parse(cmd[1])) == 2)
                {
                    Quantity = 1;
                }

                if (InventoryType.getItemType(int.Parse(cmd[1])) == 5)
                {
                    return;
                }

                chr.Items.Add(new Item(int.Parse(cmd[1]), InventoryType.getItemType(int.Parse(cmd[1])), chr.Items.GetNextFreeSlot((InventoryType.ItemType)InventoryType.getItemType(int.Parse(cmd[1]))), Quantity));
                InventoryHandler.UpdateInventory(gc, InventoryType.getItemType(int.Parse(cmd[1])));
                break;

            case "//money":
                if (cmd.Length != 2)
                {
                    break;
                }
                chr.Money = int.Parse(cmd[1]);
                InventoryPacket.getInvenMoney(gc, chr.Money, int.Parse(cmd[1]));
                break;

            case "//levelup":
                chr.LevelUp();
                break;

            case "//gogo":
                if (cmd.Length != 3)
                {
                    break;
                }
                MapPacket.warpToMapAuth(gc, true, short.Parse(cmd[1]), short.Parse(cmd[2]), -1, -1);
                break;

            case "//hp":
                if (cmd.Length != 2)
                {
                    break;
                }

                short Hp = short.Parse(cmd[1]);

                if (Hp > short.MaxValue)
                {
                    Hp = short.MaxValue;
                }

                chr.MaxHp = Hp;
                chr.Hp    = Hp;
                StatusPacket.getStatusInfo(gc);
                break;

            case "//mp":
                short Mp = short.Parse(cmd[1]);

                if (Mp > short.MaxValue)
                {
                    Mp = short.MaxValue;
                }

                chr.MaxMp = Mp;
                chr.Mp    = Mp;
                StatusPacket.getStatusInfo(gc);
                break;

            case "//heal":
                chr.Hp   = chr.MaxHp;
                chr.Mp   = chr.MaxMp;
                chr.Fury = chr.MaxFury;
                StatusPacket.UpdateHpMp(gc, chr.Hp, chr.Mp, chr.Fury, chr.MaxFury);
                break;

            case "//warp":
                if (cmd.Length != 2)
                {
                    break;
                }
                foreach (Character find in MapFactory.AllCharacters)
                {
                    if (find.Name.Equals(cmd[1]))
                    {
                        victim = find;
                    }
                }
                if (victim != null)
                {
                    chr.MapX    = victim.MapX;
                    chr.MapY    = victim.MapY;
                    chr.PlayerX = victim.PlayerX;
                    chr.PlayerY = victim.PlayerY;
                    MapPacket.warpToMapAuth(gc, true, chr.MapX, chr.MapY, chr.PlayerX, chr.PlayerY);
                }
                break;

            case "//ban":
                if (cmd.Length != 2)
                {
                    break;
                }
                foreach (Character find in MapFactory.AllCharacters)
                {
                    if (find.Name.Equals(cmd[1]))
                    {
                        victim = find;
                    }
                }
                if (victim != null)
                {
                    dynamic datum = new Datum("accounts");
                    victim.Client.Account.Banned = 1;
                    victim.Client.Dispose();
                }
                break;

            case "//save":
                for (int i = 0; i < MapFactory.AllCharacters.Count; i++)
                {
                    if (chr.CharacterID == MapFactory.AllCharacters[i].CharacterID)
                    {
                        continue;
                    }
                    MapFactory.AllCharacters[i].Client.Dispose();
                }
                //GameServer.IsAlive = false;
                break;

            case "//選擇正派":
                Quest Quest = new Quest(60);
                Quest.QuestState = 0x31;
                chr.Quests.Add(Quest);
                QuestPacket.getQuestInfo(gc, chr.Quests.getQuests());
                chr.Items.Add(new Item(8990019, 4, chr.Items.GetNextFreeSlot(InventoryType.ItemType.Other4)));
                break;

            case "//選擇邪派":
                Quest            = new Quest(64);
                Quest.QuestState = 0x31;
                chr.Quests.Add(Quest);
                QuestPacket.getQuestInfo(gc, chr.Quests.getQuests());
                chr.Items.Add(new Item(8990020, 4, chr.Items.GetNextFreeSlot(InventoryType.ItemType.Other4)));
                break;

            //case "//test":
            //    PartyPacket.PartyInvite(gc);
            //    break;
            //case "//test2":
            //    PartyPacket.PartyInvite(gc, 1, 1);
            //    break;
            //case "//test3":
            //    PartyPacket.PartyInvite(gc, 1 , 0);
            //    break;
            default:
                break;
            }
        }
Esempio n. 16
0
        public static void EquipmentCompound(InPacket lea, Client c)
        {
            byte     SourceType = lea.ReadByte();
            byte     SourceSlot = lea.ReadByte();
            byte     UseType    = lea.ReadByte();
            byte     UseSlot    = lea.ReadByte();
            byte     TargetType = lea.ReadByte();
            byte     TargetSlot = lea.ReadByte();
            var      chr        = c.Character;
            Item     Source     = chr.Items.getItem(SourceType, SourceSlot);
            Item     Use        = chr.Items.getItem(UseType, UseSlot);
            Item     Target     = chr.Items.getItem(TargetType, TargetSlot);
            ItemData Data       = ItemFactory.GetItemData(Source.ItemID);

            if (Source == null || Use == null || Target == null || Data == null)
            {
                return;
            }

            int rnd = Randomizer.Next(1, Data.Spirit);

            if (rnd < Source.Spirit || (Use.ItemID == 8844011 && (rnd < Source.Spirit * 2)) || (Use.ItemID == 8844012 && (rnd < Source.Spirit * 2)))
            {
                switch (Source.ItemID)
                {
                case 8510011:
                    Target.Level10++;
                    break;

                case 8510021:
                    Target.Level9++;
                    break;

                case 8510031:
                    Target.Level8++;
                    break;

                case 8510041:
                    Target.Level7++;
                    break;

                case 8510051:
                    Target.Level6++;
                    break;

                case 8510061:
                    Target.Level5++;
                    break;

                case 8510071:
                    Target.Level4++;
                    break;

                case 8510081:
                    Target.Level3++;
                    break;

                case 8510091:
                    Target.Level2++;
                    break;

                case 8510101:
                    Target.Level1++;
                    break;;
                }
            }
            Target.Fusion++;
            chr.Items.Remove(SourceType, SourceSlot);
            chr.Items.Remove(UseType, UseSlot, 1);
            InventoryHandler.UpdateInventory(c, SourceType);
            InventoryHandler.UpdateInventory(c, TargetType);
            InventoryHandler.UpdateInventory(c, UseType);
        }
Esempio n. 17
0
        public static void TradeCancel(InPacket lea, Client c)
        {
            var chr = c.Character;
            int j   = 0;

            // 個人
            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);
            }

            // 個人
            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++;
            }

            int k = 0;

            // 對方
            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++;
            }

            TradePacket.TradeCancel(chr.Trader.Client);
            chr.Trade  = null;
            chr.Trader = null;
        }
Esempio n. 18
0
        public static void Command_Req(InPacket lea, Client gc)
        {
            string[] cmd = lea.ReadString(60).Split(new[] { (char)0x20 }, StringSplitOptions.None);

            if (gc.Account.Master == 0 || cmd.Length < 1)
            {
                return;
            }
            var       chr    = gc.Character;
            Character victim = null;

            switch (cmd[0])
            {
            case "//notice":
                if (cmd.Length != 2)
                {
                    break;
                }
                foreach (Character all in MapFactory.AllCharacters)
                {
                    GamePacket.getNotice(all.Client, 3, cmd[1]);
                }
                break;

            case "//item":
                if (cmd.Length != 2 && cmd.Length != 3)
                {
                    break;
                }

                short Quantity = 1;

                if (cmd.Length == 3)
                {
                    if (int.Parse(cmd[2]) > 100)
                    {
                        Quantity = 100;
                    }
                    else
                    {
                        Quantity = short.Parse(cmd[2]);
                    }
                }

                if (InventoryType.getItemType(int.Parse(cmd[1])) == 1 || InventoryType.getItemType(int.Parse(cmd[1])) == 2)
                {
                    Quantity = 1;
                }

                if (InventoryType.getItemType(int.Parse(cmd[1])) == 5)
                {
                    return;
                }

                chr.Items.Add(new Item(int.Parse(cmd[1]), InventoryType.getItemType(int.Parse(cmd[1])), chr.Items.GetNextFreeSlot((InventoryType.ItemType)InventoryType.getItemType(int.Parse(cmd[1]))), Quantity));
                InventoryHandler.UpdateInventory(gc, InventoryType.getItemType(int.Parse(cmd[1])));
                break;

            case "//money":
                if (cmd.Length != 2)
                {
                    break;
                }
                chr.Money = int.Parse(cmd[1]);
                InventoryPacket.getInvenMoney(gc, chr.Money, int.Parse(cmd[1]));
                break;

            case "//levelup":
                chr.LevelUp();
                break;

            case "//gogo":
                if (cmd.Length != 3)
                {
                    break;
                }
                MapPacket.warpToMapAuth(gc, true, short.Parse(cmd[1]), short.Parse(cmd[2]), short.Parse(cmd[3]), short.Parse(cmd[4]));
                break;

            case "//hp":
                if (cmd.Length != 2)
                {
                    break;
                }

                short Hp = short.Parse(cmd[1]);

                if (Hp > short.MaxValue)
                {
                    Hp = short.MaxValue;
                }

                chr.MaxHp = Hp;
                chr.Hp    = Hp;
                StatusPacket.getStatusInfo(gc);
                break;

            case "//mp":
                short Mp = short.Parse(cmd[1]);

                if (Mp > short.MaxValue)
                {
                    Mp = short.MaxValue;
                }

                chr.MaxMp = Mp;
                chr.Mp    = Mp;
                StatusPacket.getStatusInfo(gc);
                break;

            case "//heal":
                chr.Hp   = chr.MaxHp;
                chr.Mp   = chr.MaxMp;
                chr.Fury = chr.MaxFury;
                StatusPacket.UpdateHpMp(gc, chr.Hp, chr.Mp, chr.Fury, chr.MaxFury);
                break;

            case "//warp":
                if (cmd.Length != 2)
                {
                    break;
                }
                foreach (Character find in MapFactory.AllCharacters)
                {
                    if (find.Name.Equals(cmd[1]))
                    {
                        victim = find;
                    }
                }
                if (victim != null)
                {
                    chr.MapX    = victim.MapX;
                    chr.MapY    = victim.MapY;
                    chr.PlayerX = victim.PlayerX;
                    chr.PlayerY = victim.PlayerY;
                    MapPacket.warpToMapAuth(gc, true, chr.MapX, chr.MapY, chr.PlayerX, chr.PlayerY);
                }
                break;

            case "//ban":
                if (cmd.Length != 2)
                {
                    break;
                }
                foreach (Character find in MapFactory.AllCharacters)
                {
                    if (find.Name.Equals(cmd[1]))
                    {
                        victim = find;
                    }
                }
                if (victim != null)
                {
                    dynamic datum = new Datum("accounts");
                    victim.Client.Account.Banned = 7;
                    victim.Client.Dispose();
                }
                break;

            case "//save":
                for (int i = 0; i < MapFactory.AllCharacters.Count; i++)
                {
                    if (chr.CharacterID == MapFactory.AllCharacters[i].CharacterID)
                    {
                        continue;
                    }
                    MapFactory.AllCharacters[i].Client.Dispose();
                }
                //GameServer.IsAlive = false;
                break;

            case "//skillhack":
                break;

            case "//serverinfo":
                GamePacket.NormalNotice(gc, 1, "I: P:15101 U:1 E:1.00 D:1.00 M:1.00 G:1.00");
                break;

            case "//come":

            case "//oxstate":
                break;

            case "//now":
                DateTime now     = DateTime.Now;
                string   nowtime = string.Format("Server Time Now : [{0}-{1}-{2} {3}:{4}:{5}]", now.Year, now.Month, now.Day.ToString("00.##"), now.Hour.ToString("00.##"), now.Minute.ToString("00.##"), now.Second.ToString("00.##"));
                GamePacket.NormalNotice(gc, 4, nowtime);
                break;

            case "//user":
                break;

            case "//serverdown":
                break;

            case "//test":
                GamePacket.getNotice(gc, 4, "Tes000t");
                break;

            case "//expbuff":
                GamePacket.getNotice(gc, 1, "!@ExpEvent2@!");
                break;

            case "//processlist":
                GamePacket.GmProcessList(gc);
                GamePacket.NormalNotice(gc, 4, "[GM] Process File has saved in game folder.");
                break;

            case "//gameinfo":
                GamePacket.GmGameInfo(gc);
                GamePacket.NormalNotice(gc, 4, "[GM] GAME_INFO has copied to your clipboard.");                         //[GM] Game Log has copied to your clipboard.
                break;

            default:
                break;
            }
        }
Esempio n. 19
0
        public static void TradeEventItem(InPacket lea, Client c)
        {
            lea.ReadShort();             // 活動ID ?
            byte Type     = lea.ReadByte();
            byte Slot     = lea.ReadByte();
            int  Quantity = lea.ReadInt();
            var  chr      = c.Character;

            Item Item = null;

            foreach (Item im in chr.Items.getItems())
            {
                if (im.Type == 4 && im.ItemID == 8990049 && im.Quantity >= Quantity)
                {
                    Item = im;
                    break;
                }
            }

            if (Item == null && Quantity <= 100)
            {
                return;
            }

            switch (Quantity)
            {
            case 5:
                chr.Rank += 1;
                StatusPacket.UpdateFame(c, 1);
                break;

            case 8:
                chr.Rank += 2;
                StatusPacket.UpdateFame(c, 2);
                break;

            case 12:
                chr.Rank += 3;
                StatusPacket.UpdateFame(c, 3);
                break;

            case 20:
                chr.Items.Add(new Item(8510071, (byte)InventoryType.ItemType.Equip2,
                                       chr.Items.GetNextFreeSlot(InventoryType.ItemType.Equip2)));
                InventoryHandler.UpdateInventory(c, 2);
                InventoryPacket.ClearDropItem(c, chr.CharacterID, -1, 8510071);
                break;

            case 30:
                chr.Items.Add(new Item(8510081, (byte)InventoryType.ItemType.Equip2,
                                       chr.Items.GetNextFreeSlot(InventoryType.ItemType.Equip2)));
                InventoryHandler.UpdateInventory(c, 2);
                InventoryPacket.ClearDropItem(c, chr.CharacterID, -1, 8510081);
                break;

            case 40:
                chr.Items.Add(new Item(8510091, (byte)InventoryType.ItemType.Equip2,
                                       chr.Items.GetNextFreeSlot(InventoryType.ItemType.Equip2)));
                InventoryHandler.UpdateInventory(c, 2);
                InventoryPacket.ClearDropItem(c, chr.CharacterID, -1, 8510091);
                break;

            case 50:
                chr.Items.Add(new Item(8510101, (byte)InventoryType.ItemType.Equip2,
                                       chr.Items.GetNextFreeSlot(InventoryType.ItemType.Equip2)));
                InventoryHandler.UpdateInventory(c, 2);
                InventoryPacket.ClearDropItem(c, chr.CharacterID, -1, 8510101);
                break;

            case 60:
                chr.Money += 2000000;
                InventoryPacket.getInvenMoney(c, chr.Money, 2000000);
                break;

            case 100:
                chr.Money += 4000000;
                InventoryPacket.getInvenMoney(c, chr.Money, 4000000);
                break;

            case 200:
                chr.Money += 8200000;
                InventoryPacket.getInvenMoney(c, chr.Money, 8200000);
                break;

            case 300:
                chr.Money += 13000000;
                InventoryPacket.getInvenMoney(c, chr.Money, 13000000);
                break;

            case 500:
                chr.Money += 24000000;
                InventoryPacket.getInvenMoney(c, chr.Money, 24000000);
                break;
            }

            if (Quantity > 100)
            {
                Item Target1 = null;
                Item Target2 = null;
                Item Target3 = null;
                Item Target4 = null;
                Item Target5 = null;
                int  i       = 0;
                foreach (Item Target in chr.Items.getItems())
                {
                    if (i == 0 && Target.ItemID == 8990049 && Target.Quantity == 100)
                    {
                        Target1 = Target;
                        i++;
                    }
                    else if (i == 1 && Target.ItemID == 8990049 && Target.Quantity == 100)
                    {
                        Target2 = Target;
                        i++;
                    }
                    else if (i == 2 && (Quantity == 300 || Quantity == 500) && Target.ItemID == 8990049 &&
                             Target.Quantity == 100)
                    {
                        Target3 = Target;
                        i++;
                    }
                    else if (i == 3 && Quantity == 500 && Target.ItemID == 8990049 && Target.Quantity == 100)
                    {
                        Target4 = Target;
                        i++;
                    }
                    else if (i == 4 && Quantity == 500 && Target.ItemID == 8990049 && Target.Quantity == 100)
                    {
                        Target5 = Target;
                        i++;
                    }
                    else if (i == 5)
                    {
                        break;
                    }
                }

                if (Target1 != null)
                {
                    chr.Items.Remove(Target1.Type, Target1.Slot, 100);
                }
                if (Target2 != null)
                {
                    chr.Items.Remove(Target2.Type, Target2.Slot, 100);
                }
                if (Target3 != null)
                {
                    chr.Items.Remove(Target3.Type, Target3.Slot, 100);
                }
                if (Target4 != null)
                {
                    chr.Items.Remove(Target4.Type, Target4.Slot, 100);
                }
                if (Target5 != null)
                {
                    chr.Items.Remove(Target5.Type, Target5.Slot, 100);
                }
            }
            else
            {
                chr.Items.Remove(Type, Slot, Quantity);
            }

            InventoryHandler.UpdateInventory(c, Type);
        }