Exemplo n.º 1
0
        // AI //
        private static void BaseAI_RetaliateSpecial(On.RoR2.CharacterAI.BaseAI.orig_OnBodyDamaged orig, BaseAI self, DamageReport damageReport)
        {
            DamageInfo damageInfo = damageReport.damageInfo;

            var isCharmed = self.body?.gameObject.GetComponent <IsCharmed>();

            if (isCharmed && isCharmed.enabled)
            {
                bool attackerIsCharmerTeam = damageReport.attackerTeamIndex == isCharmed.GetOppositeTeamIndex(isCharmed.GetOldTeam());
                if (attackerIsCharmerTeam)
                {
                    if (damageInfo.attacker)
                    {
                        bool noTarget          = (!self.currentEnemy.gameObject || self.enemyAttention <= 0f); // no current enemy or they're ready to retarget
                        bool attackerNotSelf   = damageInfo.attacker != self.body.gameObject;                  // if their target isnt themselves
                        bool enemyIsNotCharmed = !damageInfo.attacker.GetComponent <IsCharmed>();
                        if (noTarget && attackerNotSelf && enemyIsNotCharmed)
                        {
                            return;
                        }
                    }
                }
            }
            var attacker = damageInfo.attacker;

            if (attacker) // prevents retaliating against a charmed enemy if they were on the prior team
            {
                var attackerIsCharmed = attacker.GetComponent <IsCharmed>();
                if (attackerIsCharmed && attackerIsCharmed.enabled && damageReport.attackerTeamIndex == attackerIsCharmed.GetOldTeam())
                {
                    return;
                }
            }
            orig(self, damageReport);
        }
Exemplo n.º 2
0
 private void BaseAI_OnBodyDamaged(On.RoR2.CharacterAI.BaseAI.orig_OnBodyDamaged orig, BaseAI self, DamageReport damageReport)
 {
     if (self.currentEnemy.gameObject && self.currentEnemy.gameObject.GetComponent <PriorityAggroTargetForEnemy>())
     {
         Debug.Log(self.body.GetDisplayName() + " retaliate ignored b/c their target is someone else.");
         return;
     }
     orig(self, damageReport);
 }