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 void Process(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 (ScriptEngine.Scripts.TryGetValue(ScriptType.NpcDialog, out var sc) && !sc.Execute(Player, id, Control)) { Message.SendTo(Player, $"[{Player.CurrentNpcId}] Npc has no script.", MsgTextType.Talk); } break; } } }