// 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); }
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); }