diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index 7c8bed1c894..27a759dfc2b 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -370,8 +370,10 @@ var/busy = 0 //Something's being washed at the moment -/obj/structure/sink/attack_hand(mob/user) - if(isrobot(user) || isAI(user)) +/obj/structure/sink/attack_hand(mob/living/user) + if(!user || !istype(user)) + return + if(!iscarbon(user)) return if(!Adjacent(user)) return @@ -379,17 +381,32 @@ if(busy) user << "Someone's already washing here." return - - user << "You start washing your hands..." - + var/selected_area = parse_zone(user.zone_sel.selecting) + var/washing_face = 0 + if(selected_area in list("head", "mouth", "eyes")) + washing_face = 1 + user.visible_message("[user] start washing their [washing_face ? "face" : "hands"]...", \ + "You start washing your [washing_face ? "face" : "hands"]...") busy = 1 - sleep(40) + + if(!do_after(user, 40, target = src)) + busy = 0 + return + busy = 0 - if(!Adjacent(user)) return //Person has moved away from the sink - - user.clean_blood() - user.visible_message("[user] washes their hands in [src].", "You wash your hands in [src].") + user.visible_message("[user] washes their [washing_face ? "face" : "hands"] using [src].", \ + "You wash your [washing_face ? "face" : "hands"] using [src].") + if(washing_face) + if(ishuman(user)) + var/mob/living/carbon/human/H = user + H.lip_style = null //Washes off lipstick + H.lip_color = initial(H.lip_color) + H.regenerate_icons() + user.drowsyness -= rand(2,3) //Washing your face wakes you up if you're falling asleep + user.drowsyness = Clamp(user.drowsyness, 0, INFINITY) + else + user.clean_blood() /obj/structure/sink/attackby(obj/item/O, mob/user, params) @@ -399,26 +416,24 @@ if(istype(O, /obj/item/weapon/reagent_containers)) var/obj/item/weapon/reagent_containers/RG = O - RG.reagents.add_reagent("water", min(RG.volume - RG.reagents.total_volume, RG.amount_per_transfer_from_this)) - user << "You fill [RG] from [src]." - return + if(RG.flags & OPENCONTAINER) + RG.reagents.add_reagent("water", min(RG.volume - RG.reagents.total_volume, RG.amount_per_transfer_from_this)) + user << "You fill [RG] from [src]." + return if(istype(O, /obj/item/weapon/melee/baton)) var/obj/item/weapon/melee/baton/B = O if(B.bcell) if(B.bcell.charge > 0 && B.status == 1) flick("baton_active", src) - user.Stun(10) - user.stuttering = 10 - user.Weaken(10) - if(isrobot(user)) - var/mob/living/silicon/robot/R = user - R.cell.charge -= 20 - else - B.deductcharge(B.hitcost) - user.visible_message( \ - "[user] was stunned by \his wet [O]!", \ - "[user] was stunned by \his wet [O]!") + var/stunforce = B.stunforce + user.Stun(stunforce) + user.Weaken(stunforce) + user.stuttering = stunforce + B.deductcharge(B.hitcost) + user.visible_message("[user] shocks themself while attempting to wash the active [B.name]!", \ + "You unwisely attempt to wash [B] while it's still on.") + playsound(src, "sparks", 50, 1) return if(istype(O, /obj/item/weapon/mop)) @@ -426,26 +441,21 @@ user << "You wet [O] in [src]." playsound(loc, 'sound/effects/slosh.ogg', 25, 1) - var/turf/location = user.loc - if(!isturf(location)) return - var/obj/item/I = O - if(!I || !istype(I,/obj/item)) return - - usr << "You start washing [I]..." + if(!I || !istype(I)) + return + if(I.flags & ABSTRACT) //Abstract items like grabs won't wash. No-drop items will though because it's still technically an item in your hand. + return + user << "You start washing [I]..." busy = 1 - sleep(40) + if(!do_after(user, 40, target = src)) + busy = 0 + return busy = 0 - - if(user.loc != location) return //User has moved - if(!I) return //Item's been destroyed while washing - if(user.get_active_hand() != I) return //Person has switched hands or the item in their hands - O.clean_blood() - user.visible_message( \ - "[user] washes [I] using [src].", \ - "You wash [I] using [src].") + user.visible_message("[user] washes [I] using [src].", \ + "You wash [I] using [src].") /obj/structure/sink/kitchen