public TsCityItem(TsSector sector, int startOffset) : base(sector, startOffset) { Valid = true; var fileOffset = startOffset + 0x34; // Set position at start of flags Hidden = (MemoryHelper.ReadUint8(Sector.Stream, fileOffset) & 0x01) != 0; var cityId = MemoryHelper.ReadUInt64(Sector.Stream, fileOffset += 0x05); City = Sector.Mapper.LookupCity(cityId); if (City == null) { Valid = false; Log.Msg($"Could not find City with id: {cityId:X}, " + $"in {Path.GetFileName(Sector.FilePath)} @ {fileOffset}"); } fileOffset += 0x08 + 0x10; BlockSize = fileOffset - startOffset; }
private void ParseCityFiles() { var defDirectory = Rfs.GetDirectory("def"); if (defDirectory == null) { Log.Msg("Could not read 'def' dir"); return; } var cityFiles = defDirectory.GetFiles("city"); if (cityFiles == null) { Log.Msg("Could not read city files"); return; } foreach (var cityFile in cityFiles) { var data = cityFile.Entry.Read(); var lines = Encoding.UTF8.GetString(data).Split('\n'); foreach (var line in lines) { if (line.TrimStart().StartsWith("#")) { continue; } if (line.Contains("@include")) { var path = Helper.GetFilePath(line.Split('"')[1], "def"); var city = new TsCity(this, path); if (city.Token != 0 && !_citiesLookup.ContainsKey(city.Token)) { _citiesLookup.Add(city.Token, city); } } } } }