コード例 #1
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;
            }
        }
コード例 #2
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);
        }
コード例 #3
0
ファイル: CouponHandler.cs プロジェクト: york8817612/Ghost
        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;
                }
            }
        }
コード例 #4
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);
        }
コード例 #5
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);
            }
        }
コード例 #6
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;
            }
        }
コード例 #7
0
        public static void PickupItem(InPacket lea, Client gc)
        {
            int OriginalID = lea.ReadInt();
            int ItemID     = lea.ReadInt();

            lea.ReadInt();
            var chr = gc.Character;
            Map Map = MapFactory.GetMap(chr.MapX, chr.MapY);

            // 撿取靈魂
            if (ItemID >= 9900001 && ItemID <= 9900004)
            {
                if (Map.getDropByOriginalID(OriginalID) == null)
                {
                    return;
                }

                switch (ItemID)
                {
                case 9900001:     // Blue
                    chr.Mp += (short)(chr.MaxMp * 0.2);
                    if (chr.Mp > chr.MaxMp)
                    {
                        chr.Mp = chr.MaxMp;
                    }
                    break;

                case 9900002:     // Green
                    chr.Mp += (short)(chr.MaxMp * 0.4);
                    if (chr.Mp > chr.MaxMp)
                    {
                        chr.Mp = chr.MaxMp;
                    }
                    break;

                case 9900003:     // Red
                    int rnd = Randomizer.Next(3, 7);
                    chr.Fury += (short)(chr.MaxFury / 100 * rnd);
                    if (chr.Fury > chr.MaxFury)
                    {
                        chr.Fury = chr.MaxFury;
                    }
                    break;

                case 9900004:     // Purple
                    if (chr.Items[InventoryType.ItemType.Equip, (byte)InventoryType.EquipType.Seal] != null)
                    {
                        chr.Items[InventoryType.ItemType.Equip, (byte)InventoryType.EquipType.Seal].Spirit++;
                        InventoryPacket.getInvenEquip(gc);
                    }
                    break;
                }
                StatusPacket.UpdateHpMp(gc, chr.Hp, chr.Mp, chr.Fury, chr.MaxFury);
                foreach (Character All in Map.Characters)
                {
                    InventoryPacket.ClearDropItem(All.Client, chr.CharacterID, OriginalID, ItemID);
                }
                return;
            }

            // 撿取錢
            if (ItemID >= 9800001 && ItemID <= 9800005)
            {
                if (Map.getDropByOriginalID(OriginalID) == null)
                {
                    return;
                }
                chr.Money += Map.getDropByOriginalID(OriginalID).Quantity;
                InventoryPacket.getInvenMoney(gc, chr.Money, Map.getDropByOriginalID(OriginalID).Quantity);
                foreach (Character All in Map.Characters)
                {
                    InventoryPacket.ClearDropItem(All.Client, chr.CharacterID, OriginalID, ItemID);
                }
                return;
            }

            if (!Map.Item.ContainsKey(OriginalID))
            {
                return;
            }

            byte Type = InventoryType.getItemType(ItemID);

            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) &&
                (finditem.Quantity + Map.getDropByOriginalID(OriginalID).Quantity) <= 100)
            {
                // 合併消費物品跟其他物品
                chr.Items[(InventoryType.ItemType)finditem.Type, finditem.Slot].Quantity += Map.getDropByOriginalID(OriginalID).Quantity;
            }
            else
            {
                byte Slot  = gc.Character.Items.GetNextFreeSlot((InventoryType.ItemType)Type);
                Item oItem = new Item(ItemID, Type, Slot, Map.getDropByOriginalID(OriginalID).Quantity);
                chr.Items.Add(oItem);
            }
            foreach (Character All in Map.Characters)
            {
                InventoryPacket.ClearDropItem(All.Client, chr.CharacterID, OriginalID, ItemID);
            }
            Map.Item.Remove(OriginalID);
            UpdateInventory(gc, Type);
        }
コード例 #8
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;
            }
        }