Ejemplo n.º 1
0
        public static ISiegeEventSide GetConstructionSiegeEventSide(SiegeEvent.SiegeEngineConstructionProgress construction)
        {
            if (construction?.SiegeEngine == null)
            {
                return(null);
            }

            var siegeEvent = GetHeroSiegeEvent();

            if (siegeEvent == null)
            {
                return(null);
            }

            var attackerSide = siegeEvent.GetSiegeEventSide(BattleSideEnum.Attacker);

            if (attackerSide.SiegeEngines.DeployedSiegeEngines.Contains(construction))
            {
                return(attackerSide);
            }

            var defenderSide = siegeEvent.GetSiegeEventSide(BattleSideEnum.Defender);

            return(defenderSide);
        }
Ejemplo n.º 2
0
        private static SiegeEngineConstructionData CreateEmptyData(SiegeEvent.SiegeEngineConstructionProgress construction)
        {
            var data = new SiegeEngineConstructionData {
                MaxHitPoints = construction.SiegeEngine.MaxHitPoints
            };

            Links.Add(construction, data);
            return(data);
        }
        public static void TooltipPostfix(ref List <TooltipProperty> __result, SiegeEvent.SiegeEngineConstructionProgress engineInProgress = null)
        {
            var siegeEventSide = SiegeTooltipHelper.GetConstructionSiegeEventSide(engineInProgress);

            if (siegeEventSide == null)
            {
                return;
            }

            CalculateBonusFlatHpAndRateFromPerk(engineInProgress, siegeEventSide, out var bonusFlatHp, out var bonusHpRate);
            SiegeTooltipHelper.AddPerkTooltip(__result, ActivePatch._perk, bonusHpRate);
            SiegeTooltipHelper.UpdateMaxHpTooltip(__result, bonusFlatHp);
        }
Ejemplo n.º 4
0
        public static void TooltipPostfix(ref List <TooltipProperty> __result, SiegeEvent.SiegeEngineConstructionProgress engineInProgress = null)
        {
            var siegeEventSide = SiegeTooltipHelper.GetConstructionSiegeEventSide(engineInProgress);

            if (siegeEventSide == null)
            {
                return;
            }

            CalculateBonusDamageAndRates(engineInProgress.SiegeEngine, siegeEventSide, out var bonusRateOnly, out var bonusDamageOnly);
            SiegeTooltipHelper.AddPerkTooltip(__result, ActivePatch._perk, bonusRateOnly);
            SiegeTooltipHelper.UpdateRangedDamageTooltip(__result, bonusDamageOnly);
        }
        private static void CalculateBonusFlatHpAndRateFromPerk(SiegeEvent.SiegeEngineConstructionProgress justDeployedEngine,
                                                                ISiegeEventSide sideSiegeEvent, out float bonusFlatHp, out float bonusHpRate)
        {
            var perk = ActivePatch._perk;
            var partyMemberHealth = new ExplainedNumber(justDeployedEngine.SiegeEngine.MaxHitPoints);
            var partyMemberRate   = new ExplainedNumber(100);

            foreach (var siegeParty in sideSiegeEvent.SiegeParties.Where(x => x.MobileParty != null))
            {
                PerkHelper.AddPerkBonusForParty(perk, siegeParty.MobileParty, ref partyMemberHealth);
                PerkHelper.AddPerkBonusForParty(perk, siegeParty.MobileParty, ref partyMemberRate);
            }

            bonusFlatHp = partyMemberHealth.ResultNumber - partyMemberHealth.BaseNumber;
            bonusHpRate = partyMemberRate.ResultNumber - partyMemberRate.BaseNumber;
        }
 private static void ApplyPerkToSiegeEngine(SiegeEvent.SiegeEngineConstructionProgress justDeployedEngine, ISiegeEventSide sideSiegeEvent)
 {
     CalculateBonusFlatHpAndRateFromPerk(justDeployedEngine, sideSiegeEvent, out var bonusFlatHp, out _);
     justDeployedEngine.SetHitpoints(justDeployedEngine.Hitpoints + bonusFlatHp);
     SiegeEngineConstructionExtraDataManager.SetMaxHitPoints(justDeployedEngine, justDeployedEngine.Hitpoints);
 }
 // ReSharper disable once RedundantAssignment
 public static void MaxHitPointsPostfix(ref float __result, ref SiegeEvent.SiegeEngineConstructionProgress __instance)
 => __result = SiegeEngineConstructionExtraDataManager.GetMaxHitPoints(__instance);
Ejemplo n.º 8
0
 public static void Prefix(ISiegeEventSide siegeEventSide, SiegeEngineType attackerEngineType, SiegeEvent.SiegeEngineConstructionProgress damagedEngine)
 {
     CalculateBonusDamageAndRates(attackerEngineType, siegeEventSide, out _, out var bonusDamageOnly);
     damagedEngine.SetHitpoints(damagedEngine.Hitpoints - bonusDamageOnly);
 }
Ejemplo n.º 9
0
 public static void SetMaxHitPoints(SiegeEvent.SiegeEngineConstructionProgress construction, float maxHp)
 => GetDataOrCreate(construction).MaxHitPoints = maxHp;
Ejemplo n.º 10
0
 private static SiegeEngineConstructionData GetDataOrCreate(SiegeEvent.SiegeEngineConstructionProgress construction)
 {
     Links.TryGetValue(construction, out var data);
     return(data ?? CreateEmptyData(construction));
 }
Ejemplo n.º 11
0
 public static float GetMaxHitPoints(SiegeEvent.SiegeEngineConstructionProgress construction)
 => GetDataOrCreate(construction).MaxHitPoints;
Ejemplo n.º 12
0
 public static void BombardPrefix(ISiegeEventSide siegeEventSide, SiegeEngineType attackerEngineType, SiegeEvent.SiegeEngineConstructionProgress damagedEngine)
 {
     if (!IsCatapult(attackerEngineType))
     {
         return;
     }
     CalculateBonusDamageAndRates(attackerEngineType, siegeEventSide, out _, out var bonusDamage);
     damagedEngine.SetHitpoints(damagedEngine.Hitpoints - bonusDamage);
 }