Example #1
0
        private static void DeleteChar(Player player, ref MsgAction packet)
        {
            if (player.UniqueId != packet.UniqueId)
            {
                return;
            }

            SelectorSystem.RemoveCharacter(player);
            player.Disconnect();
        }
Example #2
0
        public static void Handle(Player player, byte[] packet)
        {
            AccountId     = Encoding.Default.GetString(packet, 4, 16).Trim((char)0x0000);
            CharName      = Encoding.Default.GetString(packet, 20, 16).Trim((char)0x0000);
            Model         = BitConverter.ToUInt16(packet, 52);
            Job           = (byte)BitConverter.ToUInt16(packet, 54);
            NameAvailable = GameWorld.NameAvailable(CharName);

            Player            = SelectorSystem.GetOrCreatePlayer(AccountId, player.Password);
            Player.GameSocket = player.GameSocket;
            Process();
            BufferPool.RecycleBuffer(packet);
        }
Example #3
0
        public static void Process()
        {
            var player = SelectorSystem.GetOrCreatePlayer(AccountId, Password);

            player.IP             = Player.GameSocket.GetIP();
            player.GameSocket     = Player.GameSocket;
            player.GameSocket.Ref = Player;
            Player = player;

            if (Player.LoginType == LoginType.Create)
            {
                NewAccount();
            }
            else
            {
                Authenticate();
            }
        }
Example #4
0
 private static void Process()
 {
     if (VerifyJob(Job) && VerifyModel(Model) && VerifyName(CharName) && NameAvailable)
     {
         var character = CreateCharacter();
         character.GameSocket     = Player.GameSocket;
         character.GameSocket.Ref = character;
         character.AccountId      = Player.AccountId;
         character.Password       = Player.Password;
         Player           = character;
         Player.LoginType = LoginType.Login;
         SelectorSystem.AddCharacterTo(Player.AccountId, Player);
         Player.ForceSend(MsgText.Create(Constants.System, Constants.Allusers, Constants.AnswerOk, MsgTextType.Dialog), 29 + Constants.System.Length + Constants.Allusers.Length + Constants.AnswerOk.Length);
     }
     else
     {
         Player.ForceSend(MsgText.Create(Constants.System, Constants.Allusers, "Taken or invalid name. (A-Y | 0-9)", MsgTextType.Dialog), 29 + Constants.System.Length + Constants.Allusers.Length + "Taken or invalid name. (A-Y | 0-9)".Length);
     }
 }
Example #5
0
        public static void Handle(Player player, byte[] packet)
        {
            UniqueId       = BitConverter.ToUInt32(packet, 4);  //Works
            LoginToken     = BitConverter.ToUInt32(packet, 8);  //Works
            ClientLanguage = Encoding.GetEncoding(1252).GetString(packet, 14, 2);
            ClientVersion  = BitConverter.ToUInt32(packet, 24); // the number in the res.dat file
            BufferPool.RecycleBuffer(packet);

            if (ClientLanguage != "En")
            {
                player.Disconnect();
                return;
            }

            Player = SelectorSystem.GetPlayerByUniqueId(UniqueId); //Collections.Players.Values.First(a => a.UniqueId == UniqueId);

            if (Player.IP != player.GameSocket.GetIP())
            {
                Output.WriteLine("Disconnected! IP Mismatch - Tried to log in " + player.AccountId + " while that account was logged in from a different ip.");
                Output.WriteLine($"Requesting IP: {player.GameSocket.GetIP()} Active IP: {Player.IP}");
                //Message.SendTo(Constants.System,Constants.Allusers, $"ATTENTION! Someone logged in using your AccountID AND YOUR CURRENT PASSWORD from {player.GameSocket.GetIP()}",MsgTextType.LoginInformation);

                //player.Disconnect();
                //return;
            }

            if (Player != null)
            {
                Player.GameSocket     = player.GameSocket;
                Player.GameSocket.Ref = Player;
                Process();
            }
            else
            {
                player.Disconnect();
            }
        }
Example #6
0
        private static void Process()
        {
            Player.GameSocket.Crypto.SetKeys(UniqueId, UniqueId);
            var characters = SelectorSystem.GetPlayersFor(Player.AccountId).ToList();

            if (characters.Any(c => c.LoginType == LoginType.Create))
            {
                if (!Player.GameSocket.Socket.Connected)
                {
                    return;
                }
                Player.ForceSend(MsgText.Create(Constants.System, Constants.Allusers, "NEW_ROLE", MsgTextType.LoginInformation), 29 + Constants.System.Length + Constants.Allusers.Length + "NEW_ROLE".Length);
            }
            else
            {
                var availableChars = characters.Where(c => c.Online == false).ToList();

                if (availableChars.Count == 0)
                {
                    characters[0].Disconnect();
                    characters[0].GameSocket     = Player.GameSocket;
                    characters[0].GameSocket.Ref = characters[0];
                    Player = characters[0];
                }
                else
                {
                    availableChars[0].GameSocket     = Player.GameSocket;
                    availableChars[0].GameSocket.Ref = availableChars[0];
                    Player = availableChars[0];
                }

                Player.ForceSend(MsgText.Create(Constants.System, Constants.Allusers, Constants.AnswerOk, MsgTextType.LoginInformation), 29 + Constants.System.Length + Constants.Allusers.Length + Constants.AnswerOk.Length);
                var p = LegacyPackets.CharacterInformation(Player);
                Player.ForceSend(p, BitConverter.ToUInt16(p, 0));
            }
        }
Example #7
0
        private static async void Process(Player player, int npcIdoverride = 0)
        {
            if (Control == 255 && player.Online)
            {
                player.CurrentNpcId = 0;
            }

            if (player.CurrentNpcId == 0)
            {
                return;
            }

            var id = player.CurrentNpcId;

            if (npcIdoverride != 0)
            {
                id = npcIdoverride;
            }

            switch (id)
            {
            case 1337:
            {
                switch (Control)
                {
                case 255:
                    player.CurrentNpcId = 1337;
                    using (var packet = new NpcDialog(10))
                    {
                        packet

                        .Text("Select Char")
                        .Link("Next", 1)
                        .Link("Select", 10)
                        .Link("New", 100)
                        .Finish();

                        player.Send(packet);
                    }
                    break;

                case 1:
                    var players = SelectorSystem.GetPlayersFor(player.AccountId).ToList();

                    var index = players.IndexOf(player);
                    if (index + 1 > players.Count - 1)
                    {
                        index = 0;
                    }
                    else
                    {
                        index++;
                    }

                    player = SelectorSystem.SwapCharacter(player, players[index]);
                    player.Send(LegacyPackets.CharacterInformation(player));
                    player.Send(MsgAction.MapShowPacket(player));
                    player.AddStatusEffect(StatusEffect.Frozen);
                    ScreenSystem.Create(player);
                    ScreenSystem.Update(player);
                    break;

                case 10:
                    player.RemoveStatusEffect(StatusEffect.Frozen);
                    ScreenSystem.Create(player);
                    player.AddSpawnProtection();
                    player.IncrementXp();

                    foreach (var kvp in player.Skills)
                    {
                        player.Send(MsgSkill.Create(kvp.Value));
                    }
                    foreach (var prof in player.Profs)
                    {
                        player.Send(MsgProf.Create(prof.Value));
                    }

                    EntityLogic.Recalculate(player);
                    player.CurrentHp = player.MaximumHp;
                    player.CurrentMp = player.MaximumMp;
                    GameWorld.Maps[player.MapId].Enter(player);

                    player.Send(MsgAction.Create(player, (int)player.PkMode, MsgActionType.ChangePkMode));
                    player.Send(MsgUpdate.Create(player, player.Stamina, MsgUpdateType.Stamina));
                    player.Send(MsgUpdate.Create(player, player.Class, MsgUpdateType.Class));
                    player.Online = true;

                    if (player.HasFlag(StatusEffect.SuperMan))
                    {
                        BuffSystem.Create(player);
                        BuffSystem.AddBuff(player, new Buff(player, SkillId.Superman, TimeSpan.FromSeconds(10)));
                    }
                    if (player.HasFlag(StatusEffect.Cyclone))
                    {
                        BuffSystem.Create(player);
                        BuffSystem.AddBuff(player, new Buff(player, SkillId.Cyclone, TimeSpan.FromSeconds(10)));
                    }

                    if (player.PkPoints > 1)
                    {
                        player.PkPJob = new Job(TimeSpan.FromSeconds(15), () => player.PkPoints--);
                        YiScheduler.Instance.Do(player.PkPJob);
                    }
                    ScreenSystem.Send(player, MsgAction.Create(player, player.UniqueId, MsgActionType.EntityRemove));
                    ScreenSystem.Send(player, MsgSpawn.Create(player));
                    break;

                case 100:
                    SelectorSystem.CreateNewCharacterFor(player.AccountId);
                    player.Disconnect();
                    break;
                }
                break;
            }

            default:
            {
                if (!await ScriptEngine.ActivateNpc(player, NpcId, (byte)Control, Input))
                {
                    if (GameWorld.Find(NpcId, out Npc npc) && Control == 0)
                    {
                        ConquerActionProcessor.ExecuteAction(npc, player, Control);
                    }
                    //Message.SendTo(player, $"[{player.CurrentNpcId}] Npc has no script.", MsgTextType.Talk);
                }
                break;
            }
            }
        }