Exemple #1
0
        public void GenerateInPacketIsNotCorruptedForNpc()
        {
            var mapNpcTest = new MapNpc();

            var packet = PacketFactory.Serialize(new[] { mapNpcTest.GenerateIn() });

            Assert.AreEqual("in 2 - 0 0 0 0 0 0 0 0 0 -1 1 0 -1 - 2 -1 0 0 0 0 0 0 0 0", packet);
        }
        public void GenerateInPacketIsNotCorruptedForNpc()
        {
            var mapNpcTest = new MapNpc(null, new GenericDao <Database.Entities.Shop, ShopDto>(_logger),
                                        new GenericDao <Database.Entities.ShopItem, ShopItemDto>(_logger), new List <NpcMonsterDto>(), _logger);

            var packet = PacketFactory.Serialize(new[] { mapNpcTest.GenerateIn() });

            Assert.AreEqual("in 2 - 0 0 0 0 0 0 0 0 0 -1 1 0 -1 - 2 -1 0 0 0 0 0 0 0 0", packet);
        }
Exemple #3
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 #4
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));
            }
        }