示例#1
0
        private static void MeleeHitCallbackPostfix(
            ref AttackCollisionData collisionData,
            Agent attacker,
            Agent victim,
            GameEntity realHitEntity,
            float momentumRemainingToComputeDamage,
            ref float inOutMomentumRemaining,
            ref MeleeCollisionReaction colReaction,
            CrushThroughState cts,
            Vec3 blowDir,
            Vec3 swingDir,
            bool crushedThroughWithoutAgentCollision
            )
        {
            var totalDamage = collisionData.InflictedDamage + collisionData.AbsorbedByArmor;

            if (totalDamage >= 1 && SliceLogic.ShouldSliceThrough(collisionData, attacker, victim))
            {
                var normalizedDamageInflicted = (float)collisionData.InflictedDamage / totalDamage;
                inOutMomentumRemaining =
                    momentumRemainingToComputeDamage *
                    normalizedDamageInflicted *
                    SubModule.Config.DamageRetainedPerCut;
            }
        }
示例#2
0
 static void Postfix(ref AttackCollisionData collisionData, Agent attacker, Agent victim,
                     GameEntity realHitEntity, ref float inOutMomentumRemaining,
                     ref MeleeCollisionReaction colReaction, CrushThroughState crushThroughState, Vec3 blowDir, Vec3 swingDir,
                     ref object hitParticleResultData, bool crushedThroughWithoutAgentCollision)
 {
     if (InvulnerableSettings.Instance.Enabled == false)
     {
         return;
     }
     if (victim == Agent.Main)
     {
         // DecideWeaponCollisionReaction
         colReaction = MeleeCollisionReaction.Bounced;
     }
 }
示例#3
0
 private static void DecideWeaponCollisionReactionPostfix(
     Mission __instance,
     Blow registeredBlow,
     ref AttackCollisionData collisionData,
     Agent attacker,
     Agent defender,
     bool isFatalHit,
     bool isShruggedOff,
     ref MeleeCollisionReaction colReaction
     )
 {
     if (SliceLogic.ShouldSliceThrough(collisionData, attacker, defender))
     {
         colReaction = MeleeCollisionReaction.SlicedThrough;
     }
 }
示例#4
0
 public static void DecidePassiveAttackCollisionReaction(
     ref Agent attacker,
     ref Agent defender,
     ref bool isFatalHit,
     ref MeleeCollisionReaction __result)
 {
     try
     {
         if (attacker.IsPlayer() &&
             BannerlordCheatsSettings.Instance?.SliceThroughEveryone == true)
         {
             __result = MeleeCollisionReaction.SlicedThrough;
         }
     }
     catch (Exception e)
     {
         SubModule.LogError(e, typeof(SliceThroughEveryonePassive));
     }
 }
 public static void DecideWeaponCollisionReaction(
     ref Blow registeredBlow,
     ref AttackCollisionData collisionData,
     ref Agent attacker,
     ref Agent defender,
     ref MissionWeapon attackerWeapon,
     ref bool isFatalHit,
     ref bool isShruggedOff,
     ref MeleeCollisionReaction colReaction)
 {
     try
     {
         if (attacker.IsPlayer() &&
             BannerlordCheatsSettings.Instance?.SliceThroughEveryone == true)
         {
             colReaction = MeleeCollisionReaction.SlicedThrough;
         }
     }
     catch (Exception e)
     {
         SubModule.LogError(e, typeof(SliceThroughEveryoneWeapon));
     }
 }
 internal static void MeleeHitCallbackPostfix(ref Mission __instance, ref AttackCollisionData collisionData, Agent attacker, Agent victim, GameEntity realHitEntity, float momentumRemainingToComputeDamage, ref float inOutMomentumRemaining, ref MeleeCollisionReaction colReaction, CrushThroughState cts, Vec3 blowDir, Vec3 swingDir, bool crushedThroughWithoutAgentCollision)
 {
     if (!Config.CompatibilitySettings.XorbarexCleaveExists)
     {
         if (GCOToolbox.GCOToolbox.MeleeBalance.CheckApplyCleave(__instance, attacker, victim, colReaction))
         {
             if (attacker.HasMount)
             {
                 inOutMomentumRemaining = momentumRemainingToComputeDamage * 0.25f;
             }
             else if (GCOToolbox.GCOToolbox.MeleeBalance.IsDefenderAFriendlyInShieldFormation(attacker, victim))
             {
                 inOutMomentumRemaining = momentumRemainingToComputeDamage * (Config.ConfigSettings.AdditionalCleaveForTroopsInShieldWallMomentumLoss * 0.01f);
             }
             else
             {
                 inOutMomentumRemaining = momentumRemainingToComputeDamage * 0.5f;
             }
         }
     }
 }
 internal static void DecideWeaponCollisionReactionPostfix(Mission __instance, Blow registeredBlow, ref AttackCollisionData collisionData, Agent attacker, Agent defender, bool isFatalHit, bool isShruggedOff, ref MeleeCollisionReaction colReaction)
 {
     if (!Config.CompatibilitySettings.XorbarexCleaveExists)
     {
         if (GCOToolbox.GCOToolbox.MeleeBalance.CheckApplyCleave(__instance, attacker, defender, registeredBlow, isShruggedOff))
         {
             colReaction = MeleeCollisionReaction.SlicedThrough;
         }
     }
 }
示例#8
0
        private static void Prefix(ref AttackCollisionData collisionData, Agent attacker, Agent victim, GameEntity realHitEntity, float momentumRemainingToComputeDamage, ref float inOutMomentumRemaining, ref MeleeCollisionReaction colReaction, CrushThroughState cts, Vec3 blowDir, Vec3 swingDir, ref object hprd, bool crushedThroughWithoutAgentCollision)
        {
            bool flag = collisionData.VictimHitBodyPart == BoneBodyPartType.Head && collisionData.StrikeType == 0 && collisionData.DamageType == 0 && (attacker.AttackDirection == Agent.UsageDirection.AttackLeft || attacker.AttackDirection == Agent.UsageDirection.AttackRight);

            if (flag)
            {
                //DismembermentSubModule.AddPDV(victim, attacker);
                DismembermentSettings.Instance().GetDismembermentMissionBusiness().AddPDV(victim, attacker);
            }
        }
示例#9
0
            internal static bool CheckApplyCleave(Mission __instance, Agent attacker, Agent victim, MeleeCollisionReaction colReaction)
            {
                bool shouldCleave = false;

                if (attacker != null && victim != null)
                {
                    if (attacker.IsHero || Config.ConfigSettings.CleaveEnabledForAllUnits)
                    {
                        if (!CancelsDamageAndBlocksAttackBecauseOfNonEnemyCase(__instance, attacker, victim))
                        {
                            shouldCleave = true;
                        }
                    }
                    if (IsDefenderAFriendlyInShieldFormation(attacker, victim))
                    {
                        shouldCleave = true;
                    }
                }

                return(shouldCleave);
            }
        //private void GetAttackCollisionResults(Agent attackerAgent, Agent victimAgent, GameEntity hitObject, float momentumRemaining, ref AttackCollisionData attackCollisionData, in MissionWeapon attackerWeapon, bool crushedThrough, bool cancelDamage, bool crushedThroughWithoutAgentCollision, out WeaponComponentData shieldOnBack)
        public static bool Prefix(ref AttackCollisionData collisionData, Agent attacker, Agent victim, GameEntity realHitEntity, ref float inOutMomentumRemaining, ref MeleeCollisionReaction colReaction, CrushThroughState crushThroughState, Vec3 blowDir, Vec3 swingDir, ref object hitParticleResultData, bool crushedThroughWithoutAgentCollision)
        {
            if (victim == null)
            {
                return(true);
            }

            if (!victim.IsMainAgent)
            {
                return(true);
            }

            _RegisterBlow(attacker);

            colReaction = MeleeCollisionReaction.Bounced;

            /*if (attacker.MountAgent != null)
             * {
             *  _RegisterBlow(attacker.MountAgent);
             *
             * }*/

            return(false);
        }