diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index ee9418148e9..77d15863443 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -423,7 +423,10 @@ Class Procs: printing = FALSE /obj/machinery/proc/do_hair_pull(mob/living/carbon/human/H) - if(!ishuman(H)) + if(stat & (NOPOWER|BROKEN)) + return + + if(!istype(H)) return //for whatever reason, skrell's tentacles have a really long length @@ -434,16 +437,16 @@ Class Procs: var/datum/sprite_accessory/hair/hair_style = hair_styles_list[H.h_style] for(var/obj/item/protection in list(H.head)) - if(protection && (protection.flags_inv & BLOCKHAIR)) + if(protection && (protection.flags_inv & BLOCKHAIR|BLOCKHEADHAIR)) return - if(hair_style.length >= 4) - if(prob(25)) - H.apply_damage(30, BRUTE, BP_HEAD) - H.visible_message("[H]'s hair catches in \the [src]!", "Your hair gets caught in \the [src]!") - if(H.can_feel_pain()) - H.emote("scream") - H.apply_damage(45, PAIN) + if(hair_style.length >= 4 && prob(25)) + H.apply_damage(30, BRUTE, BP_HEAD) + H.visible_message(SPAN_DANGER("\The [H]'s hair catches in \the [src]!"), + SPAN_DANGER("Your hair gets caught in \the [src]!")) + if(H.can_feel_pain()) + H.emote("scream") + H.apply_damage(45, PAIN) /obj/machinery/proc/do_signaler() // override this to customize effects return \ No newline at end of file diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm index 0f3ddd55414..7b080699362 100644 --- a/code/modules/reagents/Chemistry-Machinery.dm +++ b/code/modules/reagents/Chemistry-Machinery.dm @@ -395,8 +395,6 @@ var/beaker_contents = "" var/dat = "" - do_hair_pull(user) - if(!inuse) for (var/obj/item/O in holdingitems) processing_chamber += "\A [O.name]
" @@ -441,7 +439,7 @@ switch(href_list["action"]) if ("grind") - grind() + grind(usr) if("eject") eject() if ("detach") @@ -471,23 +469,24 @@ holdingitems -= O holdingitems.Cut() -/obj/machinery/reagentgrinder/proc/grind() +/obj/machinery/reagentgrinder/proc/grind(mob/user) power_change() if(stat & (NOPOWER|BROKEN)) return // Sanity check. - if (!beaker || (beaker && beaker.reagents.total_volume >= beaker.reagents.maximum_volume)) + if(!beaker || (beaker && beaker.reagents.total_volume >= beaker.reagents.maximum_volume)) return - playsound(src.loc, 'sound/machines/blender.ogg', 50, 1) - inuse = 1 + if(ishuman(user)) + do_hair_pull(user) + + playsound(get_turf(src), 'sound/machines/blender.ogg', 50, 1) + inuse = TRUE // Reset the machine. - spawn(60) - inuse = 0 - src.updateUsrDialog() + addtimer(CALLBACK(src, .proc/grind_reset), 60) // Process. for (var/obj/item/O in holdingitems) @@ -521,6 +520,11 @@ if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume) break +/obj/machinery/reagentgrinder/proc/grind_reset() + inuse = FALSE + updateUsrDialog() + + /obj/machinery/reagentgrinder/MouseDrop_T(mob/living/carbon/human/target as mob, mob/user as mob) if (!istype(target) || target.buckled || get_dist(user, src) > 1 || get_dist(user, target) > 1 || user.stat || istype(user, /mob/living/silicon/ai)) return diff --git a/html/changelogs/doxxmedearly - hairpullfixes.yml b/html/changelogs/doxxmedearly - hairpullfixes.yml new file mode 100644 index 00000000000..65104b9eada --- /dev/null +++ b/html/changelogs/doxxmedearly - hairpullfixes.yml @@ -0,0 +1,7 @@ +author: Doxxmedearly + +delete-after: True + +changes: + - bugfix: "Any hat that hides hair should now stop machinery from pulling hair." + - bugfix: "Hair no longer gets caught in grinders from simply interacting with it; it will only happen while grinding. It also will not pull hair if unpowered or broken."