Exemplo n.º 1
0
        // 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;
            }
        }
Exemplo n.º 3
0
        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));
            }
        }
Exemplo n.º 4
0
 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;
     }
 }
Exemplo n.º 5
0
 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));
     }
 }
Exemplo n.º 6
0
 // 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)));
         }
     }
 }
Exemplo n.º 7
0
 // 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)));
                     }
                 }
             }
         }
     }
 }
Exemplo n.º 8
0
 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));
     }
 }
Exemplo n.º 9
0
        // 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);
        }
Exemplo n.º 11
0
        // 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;
     }
 }
Exemplo n.º 15
0
        public override int GetLostTroopCountForBreakingInBesiegedSettlement(MobileParty party, SiegeEvent siegeEvent)
        {
            // return this.GetLostTroopCount(party, siegeEvent);

            return(0);
        }
Exemplo n.º 16
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));
     }
 }