private static void SpawnEntity(Player player, ref MsgAction packet) { if (!GameWorld.Find(packet.Param, out YiObj found)) { return; } player.Send(packet); switch (found) { case Monster monster: player.Send(MsgSpawn.Create(monster)); break; case Player playerFound: player.Send(MsgSpawn.Create(playerFound)); break; } }
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; } } }