diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index e18b78f271e..3b892e2f3b9 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -244,38 +244,46 @@ return var/dir_to_target = get_dir(src, target) - if(dir_to_target && !(dir_to_target & dir))//wrong direction + if(dir_to_target && !(dir_to_target & dir)) // Wrong direction + to_chat(user, SPAN_WARNING("You're facing the wrong way!")) return if(hasInternalDamage(MECHA_INT_CONTROL_LOST)) - target = safepick(view(3,target)) + target = safepick(view(3, target)) if(!target) return var/mob/living/L = user - if(!target.Adjacent(src)) - if(selected && selected.is_ranged()) - if(HAS_TRAIT(L, TRAIT_PACIFISM) && selected.harmful) - to_chat(L, SPAN_WARNING("You don't want to harm other living beings!")) - return + if(isliving(target) && selected.harmful && HAS_TRAIT(L, TRAIT_PACIFISM)) + to_chat(user, SPAN_WARNING("You don't want to harm other living beings!")) + return + + if(selected?.is_ranged()) + if(!target.Adjacent(src) || (target.Adjacent(src) && (occupant.a_intent == INTENT_HELP || occupant.a_intent == INTENT_GRAB))) if(user.mind?.martial_art?.no_guns) to_chat(L, SPAN_WARNING("[L.mind.martial_art.no_guns_message]")) return selected.action(target, params) - else if(selected && selected.is_melee()) - if(isliving(target) && selected.harmful && HAS_TRAIT(L, TRAIT_PACIFISM)) - to_chat(user, SPAN_WARNING("You don't want to harm other living beings!")) return + + do_melee_attack(target) + + else if(selected && selected.is_melee()) selected.action(target, params) else - if(internal_damage & MECHA_INT_CONTROL_LOST) - target = safepick(oview(1, src)) - if(mecha_melee_cooldown || !isatom(target)) - return - if(iswallturf(target) || isliving(target) || isobj(target)) - target.mech_melee_attack(src) - mecha_melee_cooldown = TRUE - addtimer(VARSET_CALLBACK(src, mecha_melee_cooldown, FALSE), melee_cooldown) + do_melee_attack(target) + +/obj/mecha/proc/do_melee_attack(atom/target) + if(internal_damage & MECHA_INT_CONTROL_LOST) + target = safepick(oview(1, src)) + + if(mecha_melee_cooldown || !isatom(target) || !target.Adjacent(src)) + return + if(!iswallturf(target) && !isliving(target) && !isobj(target)) + return + target.mech_melee_attack(src) + mecha_melee_cooldown = TRUE + addtimer(VARSET_CALLBACK(src, mecha_melee_cooldown, FALSE), melee_cooldown) /obj/mecha/proc/mech_toxin_damage(mob/living/target) playsound(src, 'sound/effects/spray2.ogg', 50, 1) diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 79abae08761..76a0dbec094 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -186,7 +186,7 @@ M.occupant_message(SPAN_DANGER("You hit [src].")) visible_message(SPAN_DANGER("[M.name] hits [src]!"), SPAN_USERDANGER("[M.name] hits you!")) add_attack_logs(M.occupant, src, "Mecha-meleed with [M]") - else + else if(M.occupant.a_intent == INTENT_DISARM) step_away(src,M) add_attack_logs(M.occupant, src, "Mecha-pushed with [M]", ATKLOG_ALL) M.occupant_message(SPAN_WARNING("You push [src] out of the way."))