Beispiel #1
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;
            }
        }
Beispiel #2
0
        public static void Game_Log_Req(InPacket lea, Client gc)
        {
            //int re = SearchBytes(lea.Content, new byte[] { 0x0 });
            string[]  data            = lea.ReadString(0x100 /*re*/).Split(new[] { (char)0x20 }, StringSplitOptions.None);
            int       encryptKey      = int.Parse(data[1]);
            string    username        = data[2];
            string    password        = data[4];
            int       selectCharacter = lea.ReadByte();
            IPAddress hostid          = lea.ReadIPAddress();

            gc.SetAccount(new Account(gc));

            try
            {
                gc.Account.Load(username);
                //var pe = new PasswordEncrypt(encryptKey);
                //string encryptPassword = pe.encrypt(gc.Account.Password, gc.RetryLoginCount > 0 ? password.ToCharArray() : null);

                if (password.Equals(gc.Account.Password))
                {
                    gc.Dispose();
                    Log.Error("Login Fail!");
                }
                else
                {
                    gc.Account.Characters = new List <Character>();
                    foreach (dynamic datum in new Datums("Characters").PopulateWith("id", "accountId = '{0}' ORDER BY position ASC", gc.Account.ID))
                    {
                        Character character = new Character(datum.id, gc);
                        character.Load(false);
                        character.IP = hostid;
                        gc.Account.Characters.Add(character);
                    }
                    gc.SetCharacter(gc.Account.Characters[selectCharacter]);
                }
                Log.Inform("Password = {0}", password);
                //Log.Inform("encryptKey = {0}", encryptKey);
                //Log.Inform("encryptPassword = {0}", encryptPassword);
            }
            catch (NoAccountException)
            {
                gc.Dispose();
                Log.Error("Login Fail!");
            }

            Character chr = gc.Character;

            chr.CharacterID = gc.CharacterID;
            MapFactory.AllCharacters.Add(chr);

            StatusPacket.UpdateHpMp(gc, 0, 0, 0, 0);
            GamePacket.FW_DISCOUNTFACTION(gc);
            StatusPacket.getStatusInfo(gc);
            InventoryPacket.getCharacterEquip(gc);
            SkillPacket.getSkillInfo(gc, chr.Skills.getSkills());
            QuestPacket.getQuestInfo(gc, chr.Quests.getQuests());
            GamePacket.getQuickSlot(gc, chr.Keymap);
            StoragePacket.getStoreInfo(gc);
            StoragePacket.getStoreMoney(gc);
            MapPacket.enterMapStart(gc);
            InventoryPacket.getInvenCash(gc);
            CashShopPacket.MgameCash(gc);
            CashShopPacket.GuiHonCash(gc);
            InventoryPacket.getInvenEquip(gc);
            InventoryPacket.getInvenEquip1(gc);
            InventoryPacket.getInvenEquip2(gc);
            InventoryPacket.getInvenSpend3(gc);
            InventoryPacket.getInvenOther4(gc);
            InventoryPacket.getInvenPet5(gc);
        }