private static void DeleteChar(Player player, ref MsgAction packet) { if (player.UniqueId != packet.UniqueId) { return; } SelectorSystem.RemoveCharacter(player); player.Disconnect(); }
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); }
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(); } }
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); } }
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(); } }
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)); } }
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; } } }