static bool Prefix(VitalStrike __instance, RuleCalculateWeaponStats evt, ref int ___m_DamageMod)
        {
            //allow it to work with elemental damage (?)
            DamageDescription damageDescription = evt.DamageDescription.FirstItem <DamageDescription>();

            if (damageDescription == null)
            {
                return(false);
            }

            int bonus = evt.Initiator.Ensure <UnitPartVitalStrikeScalingDamageBonus>().getDamageBonus();

            bonus *= (___m_DamageMod - 1);
            damageDescription.Bonus += bonus;
            //make vital strike damage not multipliable on critical hit
            var vital_strike_damage = new DamageDescription();

            vital_strike_damage.TypeDescription = damageDescription.TypeDescription;
            vital_strike_damage.Dice            = new DiceFormula(damageDescription.Dice.Rolls * (___m_DamageMod - 1), damageDescription.Dice.Dice);
            if (evt.DamageDescription.Count() <= 1)
            {
                evt.DamageDescription.Add(vital_strike_damage);
            }
            else
            {
                evt.DamageDescription.Insert(1, vital_strike_damage);
            }
            //damageDescription.Dice = new DiceFormula(damageDescription.Dice.Rolls * ___m_DamageMod, damageDescription.Dice.Dice);
            return(false);
        }
 static void Postfix(VitalStrike __instance, RuleCalculateWeaponStats evt, ref int ___m_DamageMod)
 {
     if (evt.AttackWithWeapon != null)
     {
         evt.AttackWithWeapon.IsFirstAttack = true;
         evt.AttackWithWeapon.AttacksCount  = 1;
     }
 }
Exemplo n.º 3
0
 static void Postfix(VitalStrike __instance, RuleCalculateWeaponStats evt, ref int ___m_DamageMod)
 {
     if (!(evt.Initiator?.Get <UnitPartVitalStrikeTracker>()?.isEnabled()).GetValueOrDefault())
     {
         return;
     }
     if (evt.AttackWithWeapon != null)
     {
         evt.AttackWithWeapon.IsFirstAttack = true;
         evt.AttackWithWeapon.AttacksCount  = 1;
     }
 }
Exemplo n.º 4
0
        static bool Prefix(VitalStrike __instance, RuleCalculateWeaponStats evt, ref int ___m_DamageMod)
        {
            if (!(evt.Initiator?.Get <UnitPartVitalStrikeTracker>()?.isEnabled()).GetValueOrDefault())
            {
                return(false);
            }

            evt.Initiator?.Get <UnitPartVitalStrikeTracker>()?.disable();

            int dmg_mod = ___m_DamageMod;

            if (Main.settings.balance_fixes)
            {
                var bab = evt.Initiator.Stats.BaseAttackBonus.ModifiedValue;
                dmg_mod = 2 + Math.Min(2, (Math.Max(bab - 6, 0) / 5));
            }

            //allow it to work with elemental damage (?)
            DamageDescription damageDescription = evt.DamageDescription.FirstItem <DamageDescription>();

            if (damageDescription == null)
            {
                return(false);
            }

            int bonus = evt.Initiator.Ensure <UnitPartVitalStrikeScalingDamageBonus>().getDamageBonus();

            bonus *= (dmg_mod - 1);
            damageDescription.Bonus += bonus;
            //make vital strike damage not multipliable on critical hit
            var vital_strike_damage = new DamageDescription();

            vital_strike_damage.TypeDescription = damageDescription.TypeDescription;
            vital_strike_damage.Dice            = new DiceFormula(damageDescription.Dice.Rolls * (dmg_mod - 1), damageDescription.Dice.Dice);
            if (evt.DamageDescription.Count() <= 1)
            {
                evt.DamageDescription.Add(vital_strike_damage);
            }
            else
            {
                evt.DamageDescription.Insert(1, vital_strike_damage);
            }
            //damageDescription.Dice = new DiceFormula(damageDescription.Dice.Rolls * ___m_DamageMod, damageDescription.Dice.Dice);
            return(false);
        }