Пример #1
0
        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();
        }
Пример #2
0
    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.");
    }
Пример #3
0
    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.");
    }
Пример #4
0
        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.");
        }
Пример #5
0
    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);
    }