diff --git a/code/datums/components/ai_retaliate_advanced.dm b/code/datums/components/ai_retaliate_advanced.dm index c06617b938f..b9492f8bc54 100644 --- a/code/datums/components/ai_retaliate_advanced.dm +++ b/code/datums/components/ai_retaliate_advanced.dm @@ -33,5 +33,10 @@ if(!victim.ai_controller) return + if(isanimal_or_basicmob(attacker)) // Don't retaliate on nuzzles + var/mob/living/M = attacker + if(M.a_intent == INTENT_HELP) + return + victim.ai_controller.insert_blackboard_key_lazylist(BB_BASIC_MOB_RETALIATE_LIST, attacker) post_retaliate_callback?.InvokeAsync(attacker) diff --git a/code/datums/elements/ai_retaliate.dm b/code/datums/elements/ai_retaliate.dm index 837b9747ebc..627d489bb81 100644 --- a/code/datums/elements/ai_retaliate.dm +++ b/code/datums/elements/ai_retaliate.dm @@ -24,4 +24,8 @@ if(victim == attacker) return + if(isanimal_or_basicmob(attacker)) // Don't retaliate on nuzzles + var/mob/living/M = attacker + if(M.a_intent == INTENT_HELP) + return victim.ai_controller?.insert_blackboard_key_lazylist(BB_BASIC_MOB_RETALIATE_LIST, attacker) diff --git a/code/modules/mob/living/basic/retaliate/clown.dm b/code/modules/mob/living/basic/retaliate/clown.dm index 1b36f039188..949817e1003 100644 --- a/code/modules/mob/living/basic/retaliate/clown.dm +++ b/code/modules/mob/living/basic/retaliate/clown.dm @@ -41,7 +41,13 @@ /mob/living/basic/clown/proc/retaliate_callback(mob/living/attacker) if(!istype(attacker)) return + if(attacker.ai_controller) // Don't chain retaliates. + var/list/shitlist = attacker.ai_controller.blackboard[BB_BASIC_MOB_RETALIATE_LIST] + if(src in shitlist) + return for(var/mob/living/basic/clown/harbringer in oview(src, 7)) + if(harbringer == attacker) // Do not commit suicide attacking yourself + continue harbringer.ai_controller.insert_blackboard_key_lazylist(BB_BASIC_MOB_RETALIATE_LIST, attacker) /mob/living/basic/clown/goblin