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; } } } } }
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; } } }
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); }