private static void UpdateCastleNobleRecruit(Settlement settlement)
        {
            bool isUnderSiege = settlement.IsUnderSiege;

            if (!isUnderSiege)
            {
                int dailyCastleNobleRecruitCount = UpdateVolunteersOfNotablesPatch.GetDailyCastleNobleRecruitCount(settlement);
                if (dailyCastleNobleRecruitCount > 0)
                {
                    CharacterObject eliteBasicTroop = settlement.Culture.EliteBasicTroop;
                    if (settlement.Town.GarrisonParty == null)
                    {
                        settlement.AddGarrisonParty(false);
                    }
                    if (settlement.Town.GarrisonParty is not null)
                    {
                        int val = settlement.Town.GarrisonParty.Party.PartySizeLimit - settlement.Town.GarrisonParty.Party.NumberOfAllMembers;
                        int num = Math.Min(dailyCastleNobleRecruitCount, val);
                        if (num > 0)
                        {
                            settlement.Town.GarrisonParty.MemberRoster.AddToCounts(eliteBasicTroop, num, false, 0, 0, true, -1);
                            settlement.Prosperity -= SubModule.Settings.CastleRecruitProsperityCost * (float)num;
                        }
                    }
                }
            }
        }
Ejemplo n.º 2
0
        private static void UpdateCastleNobleRecruit(Settlement settlement)
        {
            if (settlement.IsUnderSiege)
            {
                return;
            }

            int num = GetDailyCastleNobleRecruitCount(settlement);

            if (num > 0)
            {
                CharacterObject troop = settlement.Culture.EliteBasicTroop;
                if (settlement.Town.GarrisonParty == null)
                {
                    settlement.AddGarrisonParty(false);
                }
                int max_num = settlement.Town.GarrisonParty.Party.PartySizeLimit - settlement.Town.GarrisonParty.Party.NumberOfAllMembers;
                int count   = Math.Min(num, max_num);
                if (count > 0)
                {
                    settlement.Town.GarrisonParty.MemberRoster.AddToCounts(troop, count, false, 0, 0, true, -1);
                    settlement.Prosperity -= SubModule.Settings.castleRecruitProsperityCost * count;
                }
            }
        }
Ejemplo n.º 3
0
        private void RevoltMapEventEnd(MapEvent mapEvent)
        {
            PartyBase      revs        = null;
            SettlementInfo currentInfo = null;
            Settlement     settlement  = null;

            foreach (Tuple <PartyBase, SettlementInfo> pair in Revolutionaries)
            {
                if (mapEvent.InvolvedParties.Contains(pair.Item1))
                {
                    revs        = pair.Item1;
                    currentInfo = pair.Item2;
                    settlement  = currentInfo.Settlement;
                    break;
                }
            }

            if (revs == null)
            {
                return;
            }

            var winnerSide = mapEvent.BattleState == BattleState.AttackerVictory ? mapEvent.AttackerSide : mapEvent.DefenderSide;
            var loserSide  = winnerSide.MissionSide.GetOppositeSide();

            bool revVictory = false;

            foreach (var party in winnerSide.PartiesOnThisSide)
            {
                if (party.MobileParty.Id == revs.MobileParty.Id)
                {
                    revVictory = true;
                    break;
                }
            }

            if (!revVictory)
            {
                GetFactionInformation(settlement.MapFaction).CityRevoltedFailure(settlement);
                RemoveRevolutionaryPartyFromList(revs);
                return;
            }

            Hero selectedHero = null;

            selectedHero = GetNobleWithLeastFiefs(revs.Owner.MapFaction);
            RemoveRevolutionaryPartyFromList(revs);

            if (revs.Owner.MapFaction.StringId == currentInfo.OriginalFaction.StringId)
            {
                revs.MobileParty.RemoveParty();
                ChangeOwnerOfSettlementAction.ApplyByDefault(selectedHero, currentInfo.Settlement);
            }
            else
            {
                revs.MobileParty.IsLordParty = true;
                revs.MobileParty.Ai.EnableAi();;
                revs.MobileParty.Ai.SetDoNotMakeNewDecisions(false);
                revs.MobileParty.Name = revs.Owner.Name;
                Clan ownerClan = revs.Owner.Clan;
                ownerClan.AddParty(revs);

                if (!ModOptions.OptionsData.AllowMinorFactions)
                {
                    selectedHero = GetNobleWithLeastFiefs(currentInfo.OriginalFaction.MapFaction);
                    revs.MobileParty.RemoveParty();
                    DestroyKingdomAction.Apply(ownerClan.Kingdom);
                    Common.Instance.ModifyKingdomList(kingdoms => kingdoms.Remove(ownerClan.Kingdom));
                }
                else
                {
                    if (!selectedHero.Clan.IsKingdomFaction)
                    {
                        revs.MobileParty.RemoveParty();
                    }
                }

                ChangeOwnerOfSettlementAction.ApplyByDefault(selectedHero, currentInfo.Settlement);
            }

            GetFactionInformation(settlement.MapFaction).CityRevoltedSuccess(settlement);
            settlement.AddGarrisonParty(true);
        }