public void ImportImperatorCharacters(Imperator.World impWorld, ReligionMapper religionMapper, CultureMapper cultureMapper, TraitMapper traitMapper, NicknameMapper nicknameMapper, LocDB locDB, ProvinceMapper provinceMapper, DeathReasonMapper deathReasonMapper, Date endDate, Date ck3BookmarkDate ) { Logger.Info("Importing Imperator Characters..."); foreach (var character in impWorld.Characters) { ImportImperatorCharacter( character, religionMapper, cultureMapper, traitMapper, nicknameMapper, locDB, provinceMapper, deathReasonMapper, endDate, ck3BookmarkDate ); } Logger.Info($"{Count} total characters recognized."); LinkMothersAndFathers(); LinkSpouses(); LinkPrisoners(); }
public void ImportImperatorProvinces(Imperator.World impWorld, Title.LandedTitles titles, CultureMapper cultureMapper, ReligionMapper religionMapper, ProvinceMapper provinceMapper) { Logger.Info("Importing Imperator Provinces..."); var counter = 0; // Imperator provinces map to a subset of CK3 provinces. We'll only rewrite those we are responsible for. foreach (var province in this) { var impProvinces = provinceMapper.GetImperatorProvinceNumbers(province.Id); // Provinces we're not affecting will not be in this list. if (impProvinces.Count == 0) { continue; } // Next, we find what province to use as its initializing source. var sourceProvince = DetermineProvinceSource(impProvinces, impWorld); if (sourceProvince is null) { Logger.Warn($"Could not determine source province for CK3 province {province.Id}!"); continue; // MISMAP, or simply have mod provinces loaded we're not using. } province.InitializeFromImperator(sourceProvince.Value.Value, titles, cultureMapper, religionMapper); // And finally, initialize it. ++counter; } Logger.Info($"{impWorld.Provinces.Count} Imperator provinces imported into {counter} CK3 provinces."); }
public void ImportImperatorFamilies(Imperator.World impWorld, LocDB locDB) { Logger.Info("Importing Imperator Families..."); // the collection only holds dynasties converted from Imperator families, as vanilla ones aren't modified foreach (var family in impWorld.Families) { if (family.Minor) { continue; } var newDynasty = new Dynasty(family, locDB); Add(newDynasty); } Logger.Info($"{Count} total families imported."); }
public void ImportImperatorGovernorships( Imperator.World impWorld, TagTitleMapper tagTitleMapper, LocDB locDB, ProvinceMapper provinceMapper, DefiniteFormMapper definiteFormMapper, ImperatorRegionMapper imperatorRegionMapper, CoaMapper coaMapper ) { Logger.Info("Importing Imperator Governorships..."); var governorships = impWorld.Jobs.Governorships; var imperatorCountries = impWorld.Countries; var governorshipsPerRegion = governorships.GroupBy(g => g.RegionName) .ToDictionary(g => g.Key, g => g.Count()); // landedTitles holds all titles imported from CK3. We'll now overwrite some and // add new ones from Imperator governorships. var counter = 0; foreach (var governorship in governorships) { ImportImperatorGovernorship( governorship, imperatorCountries, impWorld.Characters, governorshipsPerRegion[governorship.RegionName] > 1, tagTitleMapper, locDB, provinceMapper, definiteFormMapper, imperatorRegionMapper, coaMapper ); ++counter; } Logger.Info($"Imported {counter} governorships from I:R."); }
private static KeyValuePair <ulong, Imperator.Provinces.Province>?DetermineProvinceSource( List <ulong> impProvinceNumbers, Imperator.World impWorld ) { // determine ownership by province development. var theClaims = new Dictionary <ulong, List <Imperator.Provinces.Province> >(); // owner, offered province sources var theShares = new Dictionary <ulong, int>(); // owner, development ulong?winner = null; long maxDev = -1; foreach (var imperatorProvinceId in impProvinceNumbers) { if (!impWorld.Provinces.TryGetValue(imperatorProvinceId, out var impProvince)) { Logger.Warn($"Source province {imperatorProvinceId} is not on the list of known provinces!"); continue; // Broken mapping, or loaded a mod changing provinces without using it. } var ownerId = impProvince.OwnerCountry?.Id ?? 0; if (!theClaims.ContainsKey(ownerId)) { theClaims[ownerId] = new(); } theClaims[ownerId].Add(impProvince); var devValue = (int)impProvince.BuildingCount + impProvince.GetPopCount(); theShares[ownerId] = devValue; } // Let's see who the lucky winner is. foreach (var(owner, development) in theShares) { if (development > maxDev) { winner = owner; maxDev = development; } } if (winner is null) { return(null); } // Now that we have a winning owner, let's find its largest province to use as a source. maxDev = -1; // We can have winning provinces with weight = 0; var toReturn = new KeyValuePair <ulong, Imperator.Provinces.Province>(); foreach (var province in theClaims[(ulong)winner]) { long provinceWeight = province.BuildingCount + province.GetPopCount(); if (provinceWeight > maxDev) { toReturn = new(province.Id, province); maxDev = provinceWeight; } } if (toReturn.Key == 0 || toReturn.Value is null) { return(null); } return(toReturn); }