public void Run(byte faction) { MapInstance map = ServerManager.Instance.GenerateMapInstance(149, faction == 1 ? MapInstanceType.Act4ShipAngel : MapInstanceType.Act4ShipDemon, null); MapNpc mapNpc1 = new MapNpc() { NpcVNum = 613, MapNpcId = map.GetNextNpcId(), Dialog = 434, MapId = 149, MapX = 8, MapY = 28, IsMoving = false, Position = 1, IsSitting = false }; mapNpc1.Initialize(map); map.AddNPC(mapNpc1); MapNpc mapNpc2 = new MapNpc() { NpcVNum = 540, MapNpcId = map.GetNextNpcId(), Dialog = 433, MapId = 149, MapX = 31, MapY = 28, IsMoving = false, Position = 3, IsSitting = false }; mapNpc2.Initialize(map); map.AddNPC(mapNpc2); while (true) { openShip(); Thread.Sleep(60 * 1000); map.Broadcast(UserInterfaceHelper.Instance.GenerateMsg(Language.Instance.GetMessageFromKey("SHIP_MINUTE"), 0)); lockShip(); Thread.Sleep(30 * 1000); map.Broadcast(UserInterfaceHelper.Instance.GenerateMsg(string.Format(Language.Instance.GetMessageFromKey("SHIP_SECONDS"), 30), 0)); Thread.Sleep(20 * 1000); map.Broadcast(UserInterfaceHelper.Instance.GenerateMsg(string.Format(Language.Instance.GetMessageFromKey("SHIP_SECONDS"), 10), 0)); Thread.Sleep(10 * 1000); map.Broadcast(UserInterfaceHelper.Instance.GenerateMsg(Language.Instance.GetMessageFromKey("SHIP_SETOFF"), 0)); List <ClientSession> sessions = map.Sessions.Where(s => s?.Character != null).ToList(); Observable.Timer(TimeSpan.FromSeconds(0)).Subscribe(X => teleportPlayers(sessions)); } }
public static void AddNpc(FactionType faction) { var leikaNpc = new MapNpc { NpcVNum = 540, MapNpcId = faction == FactionType.Angel ? ServerManager.Instance.Act4ShipAngel.GetNextId() : ServerManager.Instance.Act4ShipDemon.GetNextId(), Dialog = 433, MapId = 149, MapX = 31, MapY = 28, IsMoving = false, Position = 3, IsSitting = false }; leikaNpc.Initialize(ServerManager.Instance.Act4ShipDemon); leikaNpc.Initialize(ServerManager.Instance.Act4ShipAngel); ServerManager.Instance.Act4ShipDemon.AddNpc(leikaNpc); ServerManager.Instance.Act4ShipAngel.AddNpc(leikaNpc); }
public void LoadNpcs() { var partitioner = Partitioner.Create(DaoFactory.MapNpcDao.Where(s => s.MapId == Map.MapId), EnumerablePartitionerOptions.None); Parallel.ForEach(partitioner, npc => { MapNpc mapNpc = npc.Adapt <MapNpc>(); mapNpc.Initialize(_npcMonsters.Find(s => s.NpcMonsterVNum == mapNpc.VNum)); mapNpc.MapInstance = this; mapNpc.MapInstanceId = MapInstanceId; _npcs[mapNpc.MapNpcId] = mapNpc; }); }
public ConcurrentDictionary <long, MapNpc> Create(MapInstance mapInstance) { var npcs = new ConcurrentDictionary <long, MapNpc>(); var partitioner = Partitioner.Create(_mapNpcs.Where(s => s.MapId == mapInstance.Map.MapId), EnumerablePartitionerOptions.None); Parallel.ForEach(partitioner, npc => { MapNpc mapNpc = npc.Adapt <MapNpc>(); mapNpc.Initialize(_npcMonsters.Find(s => s.NpcMonsterVNum == mapNpc.VNum)); mapNpc.MapInstance = mapInstance; mapNpc.MapInstanceId = mapInstance.MapInstanceId; mapNpc.Shop = LoadShop(mapNpc.MapNpcId); npcs[mapNpc.MapNpcId] = mapNpc; }); return(npcs); }
public static void Run(byte faction) { MapInstance map = ServerManager.GenerateMapInstance(148, faction == 1 ? MapInstanceType.Act4ShipAngel : MapInstanceType.Act4ShipDemon, new InstanceBag()); MapNpc mapNpc1 = new MapNpc { }; mapNpc1.Initialize(map); map.AddNpc(mapNpc1); MapNpc mapNpc2 = new MapNpc { }; mapNpc2.Initialize(map); map.AddNpc(mapNpc2); Observable.Interval(TimeSpan.FromMinutes(1)).Subscribe(obs => { OpenShip(); Observable.Timer(TimeSpan.FromMinutes(1)).Subscribe(observer => { map.Broadcast( UserInterfaceHelper.GenerateMsg(Language.Instance.GetMessageFromKey("SHIP_MINUTE"), 0)); LockShip(); }); Observable.Timer(TimeSpan.FromSeconds(30)).Subscribe(observer => { map.Broadcast(UserInterfaceHelper.GenerateMsg( string.Format(Language.Instance.GetMessageFromKey("SHIP_SECONDS"), 30), 0)); }); Observable.Timer(TimeSpan.FromSeconds(50)).Subscribe(observer => { map.Broadcast(UserInterfaceHelper.GenerateMsg( string.Format(Language.Instance.GetMessageFromKey("SHIP_SECONDS"), 10), 0)); }); Observable.Timer(TimeSpan.FromMinutes(1)).Subscribe(observer => { map.Broadcast( UserInterfaceHelper.GenerateMsg(Language.Instance.GetMessageFromKey("SHIP_SETOFF"), 0)); List <ClientSession> sessions = map.Sessions.Where(s => s?.Character != null).ToList(); Observable.Timer(TimeSpan.FromSeconds(0)).Subscribe(x => TeleportPlayers(sessions)); }); }); }
public static void Run() { MapInstance map = ServerManager.GenerateMapInstance(148, MapInstanceType.Act5Ship, new InstanceBag()); MapNpc mapNpc1 = new MapNpc { NpcVNum = 1350, MapNpcId = map.GetNextNpcId(), Dialog = 447, MapId = 148, MapX = 31, MapY = 28, IsMoving = false, Position = 3, IsSitting = false }; mapNpc1.Initialize(map); map.AddNPC(mapNpc1); while (true) { OpenShip(); Thread.Sleep(60 * 1000); map.Broadcast(UserInterfaceHelper.GenerateMsg(string.Format(Language.Instance.GetMessageFromKey("SHIP_MINUTES"), 4), 0)); Thread.Sleep(60 * 1000); map.Broadcast(UserInterfaceHelper.GenerateMsg(string.Format(Language.Instance.GetMessageFromKey("SHIP_MINUTES"), 3), 0)); Thread.Sleep(60 * 1000); map.Broadcast(UserInterfaceHelper.GenerateMsg(string.Format(Language.Instance.GetMessageFromKey("SHIP_MINUTES"), 2), 0)); Thread.Sleep(60 * 1000); map.Broadcast(UserInterfaceHelper.GenerateMsg(Language.Instance.GetMessageFromKey("SHIP_MINUTE"), 0)); LockShip(); Thread.Sleep(30 * 1000); map.Broadcast(UserInterfaceHelper.GenerateMsg(string.Format(Language.Instance.GetMessageFromKey("SHIP_SECONDS"), 30), 0)); Thread.Sleep(20 * 1000); map.Broadcast(UserInterfaceHelper.GenerateMsg(string.Format(Language.Instance.GetMessageFromKey("SHIP_SECONDS"), 10), 0)); Thread.Sleep(10 * 1000); map.Broadcast(UserInterfaceHelper.GenerateMsg(Language.Instance.GetMessageFromKey("SHIP_SETOFF"), 0)); List <ClientSession> sessions = map.Sessions.Where(s => s?.Character != null).ToList(); Observable.Timer(TimeSpan.FromSeconds(0)).Subscribe(X => TeleportPlayers(sessions)); } }
public void Run() { CommunicationServiceClient.Instance.SendMessageToCharacter(new SCSCharacterMessage { DestinationCharacterId = null, SourceCharacterId = 0, SourceWorldId = ServerManager.Instance.WorldId, Message = "The Mystic Traveler is here, look for him in Olorun Village!", Type = MessageType.Shout }); ShopShipev.ShopMapInstance = ServerManager.GenerateMapInstance(5404, MapInstanceType.ShopShip, new InstanceBag()); ShopShipev.UnknownLandMapInstance = ServerManager.GetMapInstance(ServerManager.GetBaseMapInstanceIdByMapId(2628)); MapNpc CaptainEnter = new MapNpc { NpcVNum = 2306, MapX = 73, MapY = 69, MapId = 2628, ShouldRespawn = false, IsMoving = false, MapNpcId = ShopShipev.UnknownLandMapInstance.GetNextNpcId(), Position = 1, Name = $"Mystic-Traveler" }; CaptainEnter.Initialize(ShopShipev.UnknownLandMapInstance); ShopShipev.UnknownLandMapInstance.AddNPC(CaptainEnter); ShopShipev.UnknownLandMapInstance.Broadcast(CaptainEnter.GenerateIn()); MapNpc CaptainExit = new MapNpc { NpcVNum = 2306, MapX = 15, MapY = 5, MapId = 5404, ShouldRespawn = false, IsMoving = false, MapNpcId = ShopShipev.ShopMapInstance.GetNextNpcId(), Position = 2, Name = $"Mystic-Traveler" }; CaptainExit.Initialize(ShopShipev.ShopMapInstance); ShopShipev.ShopMapInstance.AddNPC(CaptainExit); ShopShipev.ShopMapInstance.Broadcast(CaptainExit.GenerateIn()); void RemoveNpc() { ShopShipev.ShopMapInstance.RemoveNpc(CaptainExit); CaptainExit.MapInstance.Broadcast(StaticPacketHelper.Out(UserType.Npc, CaptainExit.MapNpcId)); ShopShipev.UnknownLandMapInstance.RemoveNpc(CaptainEnter); CaptainEnter.MapInstance.Broadcast(StaticPacketHelper.Out(UserType.Npc, CaptainEnter.MapNpcId)); } List <EventContainer> onDeathEvents = new List <EventContainer> { new EventContainer(ShopShipev.ShopMapInstance, EventActionType.SCRIPTEND, (byte)1) }; try { Observable.Timer(TimeSpan.FromMinutes(1)).Subscribe(X => FirstAnounce()); Observable.Timer(TimeSpan.FromMinutes(2)).Subscribe(X => FirstAnounce2()); Observable.Timer(TimeSpan.FromMinutes(3)).Subscribe(X => FirstAnounce3()); Observable.Timer(TimeSpan.FromMinutes(4)).Subscribe(X => FirstAnounce4()); Observable.Timer(TimeSpan.FromSeconds(270)).Subscribe(X => FirstAnounce5()); Observable.Timer(TimeSpan.FromMinutes(5)).Subscribe(X => EndRaid()); Observable.Timer(TimeSpan.FromSeconds(295)).Subscribe(X => RemoveNpc()); } catch (Exception ex) { } }
private void ExecuteHandler(ClientSession session) { if (_isParsed) { Logger.LogUserEvent("GMCOMMAND", session.GenerateIdentity(), $"[SummonNPC]NpcMonsterVNum: {NpcMonsterVNum} Amount: {Amount} IsMoving: {IsMoving}"); if (session.IsOnMap && session.HasCurrentMapInstance) { NpcMonster npcmonster = ServerManager.GetNpcMonster(NpcMonsterVNum); if (npcmonster == null) { return; } Random random = new Random(); for (int i = 0; i < Amount; i++) { List <MapCell> possibilities = new List <MapCell>(); for (short x = -4; x < 5; x++) { for (short y = -4; y < 5; y++) { possibilities.Add(new MapCell { X = x, Y = y }); } } foreach (MapCell possibilitie in possibilities.OrderBy(s => random.Next())) { short mapx = (short)(session.Character.PositionX + possibilitie.X); short mapy = (short)(session.Character.PositionY + possibilitie.Y); if (!session.CurrentMapInstance?.Map.IsBlockedZone(mapx, mapy) ?? false) { break; } } if (session.CurrentMapInstance != null) { MapNpc npc = new MapNpc { NpcVNum = NpcMonsterVNum, MapY = session.Character.PositionY, MapX = session.Character.PositionX, MapId = session.Character.MapInstance.Map.MapId, Position = session.Character.Direction, IsMoving = IsMoving, MapNpcId = session.CurrentMapInstance.GetNextNpcId() }; npc.Initialize(session.CurrentMapInstance); session.CurrentMapInstance.AddNpc(npc); session.CurrentMapInstance.Broadcast(npc.GenerateIn()); } } } } else { session.SendPacket(session.Character.GenerateSay(ReturnHelp(), 10)); } }