// Returns display data from siege parameter, combines castle and town into one method determined by isCastle parameter. private string GetDisplayFromSiege(SiegeEvent e, bool isCastle) { if (isCastle) { TextObject text = GameTexts.FindText("str_sta_alarm_castle_attack_message", null); text.SetTextVariable("CASTLE", e.BesiegedSettlement.Name.ToString()); TextObject attacker = new TextObject("", null); attacker.SetTextVariable("PARTY", e.BesiegedSettlement.LastAttackerParty.Name); attacker.SetTextVariable("NAME", e.BesiegedSettlement.LastAttackerParty.LeaderHero.Name); attacker.SetTextVariable("GENDER", e.BesiegedSettlement.LastAttackerParty.LeaderHero.IsFemale ? 1 : 0); attacker.SetTextVariable("FACTION", e.BesiegedSettlement.LastAttackerParty.LeaderHero.MapFaction.Name); text.SetTextVariable("ATTACKER", attacker); return(text.ToString()); } else { TextObject text = GameTexts.FindText("str_sta_alarm_town_attack_message", null); text.SetTextVariable("TOWN", e.BesiegedSettlement.Name.ToString()); TextObject attacker = new TextObject("", null); attacker.SetTextVariable("PARTY", e.BesiegedSettlement.LastAttackerParty.Name); attacker.SetTextVariable("NAME", e.BesiegedSettlement.LastAttackerParty.LeaderHero.Name); attacker.SetTextVariable("GENDER", e.BesiegedSettlement.LastAttackerParty.LeaderHero.IsFemale ? 1 : 0); attacker.SetTextVariable("FACTION", e.BesiegedSettlement.LastAttackerParty.LeaderHero.MapFaction.Name); text.SetTextVariable("ATTACKER", attacker); return(text.ToString()); } }
public static void GetConstructionProgressPerHour(SiegeEngineType type, SiegeEvent siegeEvent, ISiegeEventSide side, StatExplainer explanation, ref float __result) { BattleSideEnum otherSide; switch (side.BattleSide) { case BattleSideEnum.Attacker: otherSide = BattleSideEnum.Defender; break; case BattleSideEnum.Defender: otherSide = BattleSideEnum.Attacker; break; default: return; } if ((siegeEvent.GetSiegeEventSide(otherSide)?.SiegeParties.Any(x => x.Leader?.IsPlayerCharacter ?? false) ?? false) && BannerlordCheatsSettings.Instance.EnemySiegeBuildingSpeedPercentage < 100) { var factor = BannerlordCheatsSettings.Instance.EnemySiegeBuildingSpeedPercentage / 100f; var newValue = factor * __result; __result = newValue; } }
public static void GetConstructionProgressPerHour(ref SiegeEngineType type, ref SiegeEvent siegeEvent, ref ISiegeEventSide side, ref float __result) { try { BattleSideEnum otherSide; switch (side.BattleSide) { case BattleSideEnum.Attacker: otherSide = BattleSideEnum.Defender; break; case BattleSideEnum.Defender: otherSide = BattleSideEnum.Attacker; break; default: return; } if ((siegeEvent.GetSiegeEventSide(otherSide)?.SiegeParties.Any(x => x.IsPlayerParty()) ?? false) && BannerlordCheatsSettings.Instance?.EnemySiegeBuildingSpeedPercentage < 100f) { var factor = BannerlordCheatsSettings.Instance.EnemySiegeBuildingSpeedPercentage / 100f; var newValue = factor * __result; __result = newValue; } } catch (Exception e) { SubModule.LogError(e, typeof(EnemySiegeBuildingSpeedPercentage)); } }
public static void GetConstructionProgressPerHour(SiegeEngineType type, SiegeEvent siegeEvent, ISiegeEventSide side, StatExplainer explanation, ref float __result) { if (side?.SiegeParties?.Any(x => x.Leader?.IsPlayerCharacter ?? false) ?? false) { __result *= BannerlordCheatsSettings.Instance.SiegeBuildingSpeedMultiplier; } }
public override float GetConstructionProgressPerHour(SiegeEngineType type, SiegeEvent siegeEvent, ISiegeEventSide side, StatExplainer explanation = null) { if (Settings.Instance.SiegeConstructionProgressPerDayMultiplierEnabled) { return(base.GetConstructionProgressPerHour(type, siegeEvent, side, explanation) * Settings.Instance.SiegeConstructionProgressPerDayMultiplier); } else { return(base.GetConstructionProgressPerHour(type, siegeEvent, side, explanation)); } }
// Action method fired once the OnSiegeEventEndedEvent event fires public void FinalizeSiege(SiegeEvent e) { if (managedSettlements.ContainsKey(e.BesiegedSettlement.Name.ToString())) { managedSettlements.Remove(e.BesiegedSettlement.Name.ToString()); if (STASettings.Instance.EnableDebugMessages) { InformationManager.DisplayMessage(new InformationMessage("STALibrary: Removed " + e.BesiegedSettlement.Name.ToString() + " from managed settlements list", new Color(1.0f, 0.0f, 0.0f))); } } }
// Action method fired once the OnSiegeEventStartedEvent event fires public void DisplaySiege(SiegeEvent e) { if (Hero.MainHero != null) { if (Hero.MainHero.IsAlive) { if (ShouldAlertForSettlement(e.BesiegedSettlement)) { if (e.BesiegedSettlement.IsCastle && STALibrary.Instance.STAConfiguration.EnableCastlePopup) { if (!managedSettlements.ContainsKey(e.BesiegedSettlement.Name.ToString())) { managedSettlements.Add(e.BesiegedSettlement.Name.ToString(), 0.0f); string display = "The castle of " + e.BesiegedSettlement.Name.ToString() + " is under attack by " + e.BesiegedSettlement.LastAttackerParty.Name.ToString() + " of the " + e.BesiegedSettlement.LastAttackerParty.LeaderHero.MapFaction.Name.ToString() + "!" ; settlementToTrack = e.BesiegedSettlement; InformationManager.ShowInquiry(new InquiryData("Castle Under Siege", display, true, true, "Track", "Close", new Action(Track), null, ""), STALibrary.Instance.STAConfiguration.PauseGameOnPopup); if (STALibrary.Instance.STAConfiguration.EnableDebugMessages) { InformationManager.DisplayMessage(new InformationMessage("STALibrary: " + display, new Color(1.0f, 0.0f, 0.0f))); } } } else if (e.BesiegedSettlement.IsTown && STALibrary.Instance.STAConfiguration.EnableTownPopup) { managedSettlements.Add(e.BesiegedSettlement.Name.ToString(), 0.0f); string display = "The town of " + e.BesiegedSettlement.Name.ToString() + " is under attack by " + e.BesiegedSettlement.LastAttackerParty.Name.ToString() + " of the " + e.BesiegedSettlement.LastAttackerParty.LeaderHero.MapFaction.Name.ToString() + "!" ; settlementToTrack = e.BesiegedSettlement; InformationManager.ShowInquiry(new InquiryData("Town Under Siege", display, true, true, "Track", "Close", new Action(Track), null, ""), STALibrary.Instance.STAConfiguration.PauseGameOnPopup); if (STALibrary.Instance.STAConfiguration.EnableDebugMessages) { InformationManager.DisplayMessage(new InformationMessage("STALibrary: " + display, new Color(1.0f, 0.0f, 0.0f))); } } } } } }
public static void GetConstructionProgressPerHour(ref SiegeEngineType type, ref SiegeEvent siegeEvent, ref ISiegeEventSide side, ref float __result) { try { if (side.IsPlayerSide() && BannerlordCheatsSettings.Instance?.SiegeBuildingSpeedMultiplier > 1f) { __result *= BannerlordCheatsSettings.Instance.SiegeBuildingSpeedMultiplier; } } catch (Exception e) { SubModule.LogError(e, typeof(SiegeBuildingSpeedMultiplier)); } }
// Returns title data from siege parameter, combines castle and town into one method determined by isCastle parameter, also applies icon to text header. private string GetTitleFromSiege(SiegeEvent e, bool isCastle) { if (isCastle) { TextObject header = GameTexts.FindText("str_sta_alarm_castle_attack_title", null); header.SetTextVariable("ICON", "{=!}<img src=\"MapOverlay\\Settlement\\icon_wall\">"); return(header.ToString()); } else { TextObject header = GameTexts.FindText("str_sta_alarm_town_attack_title", null); header.SetTextVariable("ICON", "{=!}<img src=\"MapOverlay\\Settlement\\icon_walls_lvl1\">"); return(header.ToString()); } }
public static void AiPostfix(ref SiegeEvent __instance, SiegeEvent.SiegeEnginesContainer siegeEngines, SiegeStrategyActionModel.SiegeAction siegeAction) { if (siegeAction != SiegeStrategyActionModel.SiegeAction.ConstructNewSiegeEngine) { return; } var deployedSiegeEngines = siegeEngines.DeployedSiegeEngines; var justDeployedEngine = deployedSiegeEngines.LastOrDefault(); if (justDeployedEngine == null) { return; } var sideSiegeEvent = GetSiegeContainerSide(__instance, siegeEngines); ApplyPerkToSiegeEngine(justDeployedEngine, sideSiegeEvent); }
// Action method fired once the OnSiegeEventStartedEvent event fires public void DisplaySiege(SiegeEvent e) { if (Hero.MainHero != null) { if (Hero.MainHero.IsAlive) { if (ShouldAlertForSettlement(e.BesiegedSettlement)) { if (e.BesiegedSettlement.IsCastle && STASettings.Instance.EnableCastlePopup) { if (!managedSettlements.ContainsKey(e.BesiegedSettlement.Name.ToString())) { managedSettlements.Add(e.BesiegedSettlement.Name.ToString(), 0.0f); string title = GetTitleFromSiege(e, true); string display = GetDisplayFromSiege(e, true); settlementToTrack = e.BesiegedSettlement; InformationManager.ShowInquiry(new InquiryData(title, display, true, true, GT_TRACK, GT_CLOSE, new Action(Track), null, ""), STASettings.Instance.PauseGameOnPopup); if (STASettings.Instance.EnableDebugMessages) { InformationManager.DisplayMessage(new InformationMessage("STALibrary: " + display, new Color(1.0f, 0.0f, 0.0f))); } } } else if (e.BesiegedSettlement.IsTown && STASettings.Instance.EnableTownPopup) { managedSettlements.Add(e.BesiegedSettlement.Name.ToString(), 0.0f); string title = GetTitleFromSiege(e, false); string display = GetDisplayFromSiege(e, false); settlementToTrack = e.BesiegedSettlement; InformationManager.ShowInquiry(new InquiryData(title, display, true, true, GT_TRACK, GT_CLOSE, new Action(Track), null, ""), STASettings.Instance.PauseGameOnPopup); if (STASettings.Instance.EnableDebugMessages) { InformationManager.DisplayMessage(new InformationMessage("STALibrary: " + display, new Color(1.0f, 0.0f, 0.0f))); } } } } } }
public override float GetConstructionProgressPerHour(SiegeEngineType type, SiegeEvent siegeEvent, ISiegeEventSide side) { if (BannerlordTweaksSettings.Instance is { } settings) { return(base.GetConstructionProgressPerHour(type, siegeEvent, side) * settings.SiegeConstructionProgressPerDayMultiplier); }
private static ISiegeEventSide GetSiegeContainerSide(SiegeEvent siegeEvent, SiegeEvent.SiegeEnginesContainer siegeEngines) => siegeEvent.GetSiegeEventSide(siegeEvent.BesiegerCamp.SiegeEngines == siegeEngines ? BattleSideEnum.Attacker : BattleSideEnum.Defender);
public static void GetLostTroopCountForBreakingOutOfBesiegedSettlement(MobileParty party, SiegeEvent siegeEvent, ref int __result) { if (BannerlordCheatsSettings.Instance.NoTroopSacrifice && (party?.IsMainParty ?? false)) { __result = 0; } }
public override int GetLostTroopCountForBreakingInBesiegedSettlement(MobileParty party, SiegeEvent siegeEvent) { // return this.GetLostTroopCount(party, siegeEvent); return(0); }
public override int GetLostTroopCountForBreakingInBesiegedSettlement(MobileParty party, SiegeEvent siegeEvent) { return(base.GetLostTroopCountForBreakingInBesiegedSettlement(party, siegeEvent) / 5); }
public static void GetLostTroopCountForBreakingInBesiegedSettlement(MobileParty party, SiegeEvent siegeEvent, ref int __result) { try { if (party.IsPlayerParty() && BannerlordCheatsSettings.Instance?.NoTroopSacrifice == true) { __result = 0; } } catch (Exception e) { SubModule.LogError(e, typeof(NoTroopSacrificeBreakIn)); } }