/// <summary> /// Load regions from the RGN file. /// </summary> private void LoadRgn(string mapPath, MapInstance map) { var regions = new List <IMapRegion>(); string rgn = Path.Combine(mapPath, $"{map.Name}.rgn"); using (var rgnFile = new RgnFile(rgn)) { IEnumerable <IMapRespawnRegion> respawnersRgn = rgnFile.GetElements <RgnRespawn7>() .Select(x => MapRespawnRegion.FromRgnElement(x)); regions.AddRange(respawnersRgn); foreach (RgnRegion3 region in rgnFile.GetElements <RgnRegion3>()) { switch (region.Index) { case RegionInfo.RI_REVIVAL: int revivalMapId = map.MapInformation.RevivalMapId == 0 ? map.Id : map.MapInformation.RevivalMapId; var newRevivalRegion = MapRevivalRegion.FromRgnElement(region, revivalMapId); regions.Add(newRevivalRegion); break; case RegionInfo.RI_TRIGGER: regions.Add(MapTriggerRegion.FromRgnElement(region)); break; // TODO: load collector regions } } } map.SetRegions(regions); }
/// <summary> /// Load a map. /// </summary> public void Load() { string mapPath = Path.Combine(Global.DataPath, "maps", this.Name); string wldMapPath = Path.Combine(mapPath, this.Name + ".wld"); string dyoMapPath = Path.Combine(mapPath, this.Name + ".dyo"); string rgnMapPath = Path.Combine(mapPath, this.Name + ".rgn"); // Load .wld byte[] wldFileData = File.ReadAllBytes(wldMapPath); var wld = new WldFile(wldFileData); wld.Read(); this.Width = wld.Width; this.Length = wld.Length; // Load .dyo byte[] dyoFileData = File.ReadAllBytes(dyoMapPath); var dyo = new DyoFile(dyoFileData); dyo.Read(); foreach (NpcDyoElement dyoElement in dyo.Elements.Where(d => d is NpcDyoElement)) { this.npcs.Add(Npc.CreateFromDyo(dyoElement, this.Id)); } // Load .rgn byte[] rgnFileData = File.ReadAllBytes(rgnMapPath); var rgn = new RgnFile(rgnFileData); rgn.Read(); foreach (RgnRespawn7 rgnElement in rgn.Elements.Where(r => r is RgnRespawn7)) { var respawner = new RespawnerRegion(rgnElement.Position, rgnElement.StartPosition, rgnElement.EndPosition, rgnElement.Time); if (rgnElement.Type == 5) { for (int i = 0; i < rgnElement.Count; ++i) { var monster = new Monster(rgnElement.Model, this.Id, respawner); this.monsters.Add(monster); monster.IsSpawned = true; } } this.regions.Add(respawner); } // Load .lnd }
/// <inheritdoc /> public void LoadRgn() { string rgn = Path.Combine(this._mapPath, this.Name + ".rgn"); using (var rgnFile = new RgnFile(rgn)) { IEnumerable <IMapRespawnRegion> respawnersRgn = rgnFile.GetElements <RgnRespawn7>() .Select(x => MapRespawnRegion.FromRgnElement(x)); // TODO: load wrapzones // TODO: load collector regions this._regions.AddRange(respawnersRgn); } }
/// <summary> /// Load regions from the RGN file. /// </summary> private void LoadRgn() { string rgn = Path.Combine(this._mapPath, $"{this.Name}.rgn"); using (var rgnFile = new RgnFile(rgn)) { IEnumerable <IMapRespawnRegion> respawnersRgn = rgnFile.GetElements <RgnRespawn7>() .Select(x => MapRespawnRegion.FromRgnElement(x)); this._regions.AddRange(respawnersRgn); foreach (RgnRegion3 region in rgnFile.GetElements <RgnRegion3>()) { switch (region.Index) { case RegionInfo.RI_REVIVAL: int revivalMapId = this._worldInformations.RevivalMapId == 0 ? this.Id : this._worldInformations.RevivalMapId; var newRevivalRegion = MapRevivalRegion.FromRgnElement(region, revivalMapId); this._regions.Add(newRevivalRegion); break; case RegionInfo.RI_TRIGGER: this._regions.Add(MapTriggerRegion.FromRgnElement(region)); break; // TODO: load collector regions } } if (!this._regions.Any(x => x is IMapRevivalRegion)) { // Loads the default revival region if no revival region is loaded. this.DefaultRevivalRegion = new MapRevivalRegion(0, 0, 0, 0, this._worldInformations.RevivalMapId, this._worldInformations.RevivalKey, null, false, false); } } }