public void Load(SegmentEntities entities, XElement element, Version version) { foreach (var spawnElement in element.Elements("spawn")) { var type = spawnElement.Attribute("type"); var spawner = default(Spawner); if (type != null) { switch ((string)type) { case "LocationSpawner": spawner = new LocationSpawner(spawnElement); break; case "RegionSpawner": spawner = new RegionSpawner(spawnElement); break; } } if (spawner != null) { foreach (var entryElement in spawnElement.Elements("entry")) { var entry = new SpawnEntry(entryElement); var entity = default(Entity); var entityName = (string)entryElement.Attribute("entity"); if (!String.IsNullOrEmpty(entityName)) { entity = entities.FirstOrDefault( e => String.Equals(e.Name, entityName, StringComparison.Ordinal)); } entry.Entity = entity; if (entry.Entity != null) { spawner.Entries.Add(entry); } else { throw new Exception($"Unable to load spawn entry '{entityName}'."); } } if (spawner is LocationSpawner locationSpawner) { Location.Add(locationSpawner); } else if (spawner is RegionSpawner regionSpawner) { Region.Add(regionSpawner); } } } }
public void Load(SegmentEntities entities, ZipFile archive, Version version) { var archiveEntry = archive["spawns"]; if (archiveEntry != null) { var spawnersElement = XDocument.Load(archiveEntry.OpenReader()).Root; if (spawnersElement != null) { Load(entities, spawnersElement, version); } } }