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; }
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()); } }
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); }
protected virtual void OnGroupSpawned(MonsterGroup group) { lock (Spawns) Spawns.Add(group); var handler = Spawned; if (handler != null) { handler(this, group); } }
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(); } } }
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[] { }); } } }
public void AddNewSpawnEntry(SpawnObject spawner) { Spawns.Add(spawner); //RefreshUI(); }