Exemple #1
0
        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));
            }
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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;
            });
        }
Exemple #4
0
        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));
                });
            });
        }
Exemple #6
0
        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));
            }
        }
Exemple #7
0
        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)
            {
            }
        }
Exemple #8
0
        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));
            }
        }