예제 #1
0
        public void Initialise()
        {
            if (Initialised)
            {
                return;
            }

            List <SpawnlistContract> spawnsList = _serverService.GetAllSpawns();

            spawnsList.ForEach((spawn) =>
            {
                L2Spawn l2Spawn =
                    new L2Spawn(NpcTable.Instance.GetTemplate(spawn.TemplateId), _idFactory, this)
                {
                    Location = new SpawnLocation(spawn.LocX, spawn.LocY, spawn.LocZ, spawn.Heading, spawn.RespawnDelay)
                };
                l2Spawn.Spawn(false);
                Spawns.Add(l2Spawn);
            });

            Log.Info($"Spawned {spawnsList.Count} npcs.");

            if (_config.GameplayConfig.NpcConfig.Misc.AutoMobRespawn)
            {
                RespawnTimerTask          = new Timer();
                RespawnTimerTask.Elapsed += new ElapsedEventHandler(RespawnTimerTick);
                RespawnTimerTask.Interval = 2000;
                RespawnTimerTask.Start();

                Log.Info($"Started RespawnTimerTask.");
            }

            Initialised = true;
        }
예제 #2
0
        public override void Read(BinaryReaderExt r)
        {
            base.Read(r);

            r.Skip(0x2); //x01 01
            int spawnCount = r.ReadInt32();

            for (int i = 0; i < spawnCount; i++)
            {
                r.Skip(1);
                var shape = new LVDShape();
                shape.Read(r);
                Spawns.Add(shape);
            }

            r.Skip(0x2); //x01 01
            int zoneCount = r.ReadInt32();

            for (int i = 0; i < zoneCount; i++)
            {
                r.Skip(1);
                var shape = new LVDShape();
                shape.Read(r);
                Zones.Add(shape);
            }

            r.Skip(0x2);              //x01 01
            Unknown1 = r.ReadInt32(); //Only seen as 0

            r.Skip(1);                //x01
            ID = r.ReadInt32();

            r.Skip(1); //x01
            int spawnIdCount = r.ReadInt32();

            for (int i = 0; i < spawnIdCount; i++)
            {
                r.Skip(1);
                SpawnIDs.Add(r.ReadInt32());
            }

            r.Skip(1);                //x01
            Unknown2 = r.ReadInt32(); //Only seen as 0

            r.Skip(1);                //x01
            int zoneIdCount = r.ReadInt32();

            for (int i = 0; i < zoneIdCount; i++)
            {
                r.Skip(1);
                ZoneIDs.Add(r.ReadInt32());
            }
        }
예제 #3
0
        protected override void sv_TriggeredSpawn(Actor aTriggerer)
        {
            //added TODO find out how to really spawn an npc
            if (NPCType == null)
            {
                return;
            }
            var instance = Spawn(GameResources.Instance.NPCPrefab, Location, Rotation, InitializeSpawnedNPC, Level.GameMap);

            instance.sv_OnSpawn(NPCType.FameLevel, NPCType.PePRank, NPCType.TaxonomyFaction);
            Spawns.Add(instance);
        }
예제 #4
0
        protected virtual void OnGroupSpawned(MonsterGroup group)
        {
            lock (Spawns)
                Spawns.Add(group);

            var handler = Spawned;

            if (handler != null)
            {
                handler(this, group);
            }
        }
예제 #5
0
        public VMapTileLoader(string directory, int mapID, int tileX, int tileY)
        {
            X = tileX;
            Y = tileY;

            var refCounter = new Dictionary <int, int>();

            var filePath = Path.Combine(directory, "vmaps", $"{mapID:D3}_{tileX:D2}_{tileY:D2}.vmtile");

            if (!(FileExists = File.Exists(filePath)))
            {
                return;
            }

            using (var reader = new BinaryReader(File.OpenRead(filePath)))
            {
                reader.BaseStream.Position += 8; // Skip magic

                var numSpawns = reader.ReadInt32();
                for (var i = 0; i < numSpawns; ++i)
                {
                    var modelSpawn      = new ModelSpawn(directory, reader);
                    var referencedValue = reader.ReadInt32();

                    if (!Spawns.ContainsKey(modelSpawn.Name))
                    {
                        Spawns.Add(modelSpawn.Name, modelSpawn);
                    }
                    // else
                    //     // Instance already added in ModelSpawn constructor
                }
            }

            foreach (var modelInstance in Spawns.Values)
            {
                if (!modelInstance.Name.EndsWith(".m2"))
                {
                    continue;
                }

                foreach (var groupModel in modelInstance.Model.GroupModels)
                {
                    groupModel.InvertIndices();
                }
            }
        }
예제 #6
0
        public MapBase(MapBase mapBase) : base(mapBase?.Id ?? Guid.Empty)
        {
            if (mapBase == null)
            {
                return;
            }

            lock (MapLock ?? throw new ArgumentNullException(nameof(MapLock), @"this"))
            {
                lock (mapBase.MapLock ?? throw new ArgumentNullException(nameof(mapBase.MapLock), nameof(mapBase)))
                {
                    Name       = mapBase.Name;
                    Brightness = mapBase.Brightness;
                    IsIndoors  = mapBase.IsIndoors;
                    if (Layers != null && mapBase.Layers != null)
                    {
                        if (Layers.Length < Options.LayerCount)
                        {
                            Layers = new TileArray[Options.LayerCount];
                        }

                        for (var i = 0; i < Options.LayerCount; i++)
                        {
                            Layers[i].Tiles = new Tile[Options.MapWidth, Options.MapHeight];
                            for (var x = 0; x < Options.MapWidth; x++)
                            {
                                for (var y = 0; y < Options.MapHeight; y++)
                                {
                                    Layers[i].Tiles[x, y] = new Tile
                                    {
                                        TilesetId = mapBase.Layers[i].Tiles[x, y].TilesetId,
                                        X         = mapBase.Layers[i].Tiles[x, y].X,
                                        Y         = mapBase.Layers[i].Tiles[x, y].Y,
                                        Autotile  = mapBase.Layers[i].Tiles[x, y].Autotile
                                    };
                                }
                            }
                        }
                    }

                    for (var x = 0; x < Options.MapWidth; x++)
                    {
                        for (var y = 0; y < Options.MapHeight; y++)
                        {
                            if (Attributes == null)
                            {
                                continue;
                            }

                            if (mapBase.Attributes?[x, y] == null)
                            {
                                Attributes[x, y] = null;
                            }
                            else
                            {
                                Attributes[x, y] = mapBase.Attributes[x, y].Clone();
                            }
                        }
                    }

                    for (var i = 0; i < mapBase.Spawns?.Count; i++)
                    {
                        Spawns.Add(new NpcSpawn(mapBase.Spawns[i]));
                    }

                    for (var i = 0; i < mapBase.Lights?.Count; i++)
                    {
                        Lights.Add(new LightBase(mapBase.Lights[i]));
                    }

                    foreach (var record in mapBase.LocalEvents)
                    {
                        var evt = new EventBase(record.Key, record.Value?.JsonData);
                        LocalEvents?.Add(record.Key, evt);
                    }

                    EventIds?.Clear();
                    EventIds?.AddRange(mapBase.EventIds?.ToArray() ?? new Guid[] { });
                }
            }
        }
예제 #7
0
        public void AddNewSpawnEntry(SpawnObject spawner)
        {
            Spawns.Add(spawner);

            //RefreshUI();
        }