internal static void EndSucceededRevolt(Revolt revolt) { var textObject = new TextObject(GameTexts.RevoltsRevoltEnd); textObject.SetTextVariable("SETTLEMENT", revolt.Settlement.Name); InformationManager.AddQuickInformation(textObject); revolt.SettlementInfo.CurrentFactionInfo.CityRevoltionSucceeded(revolt.Settlement); if (RevolutionsSettings.Instance.RevoltsImperialLoyaltyMechanic && revolt.SettlementInfo.IsCurrentFactionOfImperialCulture && !revolt.SettlementInfo.IsLoyalFactionOfImperialCulture) { revolt.Settlement.OwnerClan.AddRenown(-RevolutionsSettings.Instance.RevoltsImperialRenownLoss); } if (RevolutionsSettings.Instance.RevoltsMinorFactionsMechanic && revolt.IsMinorFaction) { ChangeOwnerOfSettlementAction.ApplyByLeaveFaction(revolt.Party.LeaderHero, revolt.Settlement); revolt.Party.LeaderHero.Clan.AddRenown(RevolutionsSettings.Instance.RevoltsMinorFactionsRenownGainOnWin); foreach (var notable in revolt.Settlement.Notables.Concat(revolt.Settlement.BoundVillages.SelectMany(s => s.Settlement.Notables))) { notable.SetPersonalRelation(revolt.Party.Leader.HeroObject, new Random().Next(5, 25)); } var amountOTroops = (RevolutionsSettings.Instance.RevoltsGeneralBaseSize + (int)(revolt.Settlement.Prosperity * RevolutionsSettings.Instance.RevoltsGeneralProsperityMulitplier)) / 3; var eliteUnits = new TroopRoster(revolt.Party); eliteUnits.AddToCounts(revolt.Party.Leader.Culture.RangedEliteMilitiaTroop, amountOTroops); eliteUnits.AddToCounts(revolt.Party.Leader.Culture.MeleeEliteMilitiaTroop, amountOTroops * 2); revolt.Party.MobileParty.MemberRoster.Add(eliteUnits); SetPartyAiAction.GetActionForPatrollingAroundSettlement(revolt.Party.MobileParty, revolt.Settlement); revolt.Party.MobileParty.Ai.SetDoNotMakeNewDecisions(false); Managers.Revolt.Revolts.Remove(revolt); } if (!RevolutionsSettings.Instance.RevoltsMinorFactionsMechanic || revolt.IsMinorFaction) { return; } revolt.Party.MobileParty.Ai.SetDoNotMakeNewDecisions(false); Managers.Revolt.Revolts.Remove(revolt); }
internal static void EndFailedRevolt(Revolt revolt) { var textObject = new TextObject(Localization.GameTexts.RevoltsRevoltEnd); textObject.SetTextVariable("SETTLEMENT", revolt.Settlement.Name); InformationManager.AddQuickInformation(textObject); revolt.SettlementInfo.CurrentFactionInfo.CityRevoltionFailed(revolt.Settlement); if (revolt.IsMinorFaction) { Managers.Kingdom.DestroyKingdom(revolt.Party.Owner.Clan.Kingdom); KillCharacterAction.ApplyByExecution(revolt.Party.Owner, revolt.Settlement.OwnerClan?.Kingdom?.Leader ?? revolt.Settlement.OwnerClan.Leader, true); if (revolt.Party?.MobileParty != null) { DestroyPartyAction.Apply(revolt.SettlementInfo.Garrision, revolt.Party.MobileParty); } } Managers.Revolt.Revolts.Remove(revolt); }
internal static void StartRevolt(Settlement settlement) { var textObject = new TextObject(Localization.GameTexts.RevoltsRevoltStart); textObject.SetTextVariable("SETTLEMENT", settlement.Name); InformationManager.AddNotice(new SettlementRebellionMapNotification(settlement, textObject)); InformationManager.AddQuickInformation(textObject); var settlementInfo = Managers.Settlement.Get(settlement); var atWarWithLoyalFaction = settlementInfo.CurrentFaction.IsAtWarWith(settlementInfo.LoyalFaction); Hero leader; if (atWarWithLoyalFaction) { leader = Managers.Faction.GetLordWithLeastFiefs(settlementInfo.LoyalFaction).HeroObject; } else { leader = Managers.Character.CreateRandomLeader(settlementInfo.LoyalFaction?.Leader?.Clan ?? settlement.OwnerClan, settlementInfo); Managers.Character.Get(leader.CharacterObject).IsRevoltKingdomLeader = true; var bannerInfo = Managers.Banner.GetBanner(settlementInfo); var banner = bannerInfo != null ? new Banner(bannerInfo.BannerId) : null; var clan = Managers.Clan.CreateClan(leader, null, null, banner); Managers.Clan.Get(leader.Clan).IsRevoltClan = true; textObject = new TextObject(Localization.GameTexts.RevoltsMinorFactionKingdom); textObject.SetTextVariable("SETTLEMENT", settlement.Name); Managers.Kingdom.CreateKingdom(leader, textObject, textObject, banner ?? clan.Banner, false); Managers.Kingdom.Get(leader.Clan.Kingdom).IsRevoltKingdom = true; } var mobileParty = Managers.Party.CreateMobileParty(leader, null, settlement.GatePosition, settlement, !atWarWithLoyalFaction, true); var amountOfTroops = (RevolutionsSettings.Instance.RevoltsGeneralBaseSize + (int)(settlement.Prosperity * RevolutionsSettings.Instance.RevoltsGeneralProsperityMulitplier)) / 3; var basicUnits = new TroopRoster(); basicUnits.AddToCounts(leader.Culture.RangedMilitiaTroop, amountOfTroops); basicUnits.AddToCounts(leader.Culture.MeleeMilitiaTroop, amountOfTroops * 2); mobileParty.MemberRoster.Add(basicUnits); if (settlement.MilitaParty != null && settlement.MilitaParty.CurrentSettlement == settlement && settlement.MilitaParty.MapEvent == null) { foreach (var troopRosterElement in settlement.MilitaParty.MemberRoster) { mobileParty.AddElementToMemberRoster(troopRosterElement.Character, troopRosterElement.Number, false); } settlement.MilitaParty.RemoveParty(); } mobileParty.ChangePartyLeader(mobileParty.Party.Owner.CharacterObject, false); if (!FactionManager.IsAtWarAgainstFaction(leader.MapFaction, settlement.MapFaction)) { DeclareWarAction.Apply(leader.MapFaction, settlement.MapFaction); } var revolt = new Revolt(mobileParty.Party.Id, settlement, !atWarWithLoyalFaction); Managers.Revolt.Revolts.Add(revolt); settlementInfo.HasRebellionEvent = true; if (settlementInfo.Garrision == null || settlementInfo.Garrision.TotalStrength == 0) { RevoltBehavior.EndSucceededRevolt(revolt); return; } mobileParty.Ai.SetDoNotMakeNewDecisions(true); StartBattleAction.Apply(mobileParty.Party, settlementInfo.Garrision); }