From edf026a41d7e17ad770a4b9171546fa5dc0ca535 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 11 Jun 2017 20:51:02 -0500 Subject: [PATCH] AI liquid dispensers are now more usable --- code/game/machinery/ai_slipper.dm | 115 +++++++----------------------- 1 file changed, 26 insertions(+), 89 deletions(-) diff --git a/code/game/machinery/ai_slipper.dm b/code/game/machinery/ai_slipper.dm index 95600d5cff..fea450e20f 100644 --- a/code/game/machinery/ai_slipper.dm +++ b/code/game/machinery/ai_slipper.dm @@ -1,56 +1,35 @@ /obj/machinery/ai_slipper - name = "\improper AI liquid dispenser" + name = "foam dispenser" + desc = "A remotely-activatable dispenser for crowd-controlling foam." icon = 'icons/obj/device.dmi' icon_state = "ai-slipper0" layer = PROJECTILE_HIT_THRESHHOLD_LAYER - anchored = 1 + anchored = TRUE obj_integrity = 200 max_integrity = 200 armor = list(melee = 50, bullet = 20, laser = 20, energy = 20, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 30) var/uses = 20 - var/disabled = 1 - var/lethal = 0 - var/locked = 1 - var/cooldown_time = 0 - var/cooldown_timeleft = 0 - var/cooldown_on = 0 + var/cooldown = 0 + var/cooldown_time = 100 req_access = list(GLOB.access_ai_upload) +/obj/machinery/ai_slipper/examine(mob/user) + ..() + to_chat(user, "It has [uses] uses of foam remaining.") + /obj/machinery/ai_slipper/power_change() if(stat & BROKEN) return else - if( powered() ) + if(powered()) stat &= ~NOPOWER else - icon_state = "ai-slipper0" stat |= NOPOWER - -/obj/machinery/ai_slipper/proc/setState(enabled, uses) - src.disabled = disabled - src.uses = uses - src.power_change() - -/obj/machinery/ai_slipper/attackby(obj/item/weapon/W, mob/user, params) - if(stat & (NOPOWER|BROKEN)) - return - if (issilicon(user)) - return src.attack_hand(user) - else // trying to unlock the interface - if (src.allowed(user)) - locked = !locked - to_chat(user, "You [ locked ? "lock" : "unlock"] the device.") - if (locked) - if (user.machine==src) - user.unset_machine() - user << browse(null, "window=ai_slipper") - else - if (user.machine==src) - src.attack_hand(user) + if((stat & (NOPOWER|BROKEN)) || cooldown_time > world.time || !uses) + icon_state = "ai-slipper0" else - to_chat(user, "Access denied.") - + icon_state = "ai-slipper1" /obj/machinery/ai_slipper/attack_ai(mob/user) return attack_hand(user) @@ -58,60 +37,18 @@ /obj/machinery/ai_slipper/attack_hand(mob/user) if(stat & (NOPOWER|BROKEN)) return - if ( (get_dist(src, user) > 1 )) - if (!(issilicon(user) || IsAdminGhost(user))) - to_chat(user, text("Too far away.")) - user.unset_machine() - user << browse(null, "window=ai_slipper") - return - - user.set_machine(src) - var/area/A = get_area(src) - var/t = "AI Liquid Dispenser ([format_text(A.name)])
" - - if(locked && (!(issilicon(user) || IsAdminGhost(user)))) - t += "(Swipe ID card to unlock control panel.)
" - else - t += "Dispenser [disabled?"deactivated":"activated"] - [disabled?"Enable":"Disable"]?
\n" - t += "Uses Left: [uses]. Activate the dispenser?
\n" - user << browse(t, "window=computer;size=575x450") - onclose(user, "computer") - -/obj/machinery/ai_slipper/Topic(href, href_list) - if(..()) + if(!allowed(user)) + to_chat(user, "Access denied.") return - if (src.locked) - if(!(issilicon(usr)|| IsAdminGhost(usr))) - to_chat(usr, "Control panel is locked!") - return - if (href_list["toggleOn"]) - src.disabled = !src.disabled - icon_state = src.disabled? "ai-slipper0":"ai-slipper1" - if (href_list["toggleUse"]) - if(cooldown_on || disabled) - return - else - new /obj/effect/particle_effect/foam(loc) - src.uses-- - cooldown_on = 1 - cooldown_time = world.timeofday + 100 - slip_process() - return - - src.attack_hand(usr) - -/obj/machinery/ai_slipper/proc/slip_process() - while(cooldown_time - world.timeofday > 0) - var/ticksleft = cooldown_time - world.timeofday - - if(ticksleft > 1e5) - cooldown_time = world.timeofday + 10 // midnight rollover - - - cooldown_timeleft = (ticksleft / 10) - sleep(5) - if (uses <= 0) + if(!uses) + to_chat(user, "[src] is out of foam and cannot be activated.") + return + if(cooldown_time > world.time) + to_chat(user, "[src] cannot be activated for another [round((world.time - cooldown_time) * 0.1)] second\s.") return - if (uses >= 0) - cooldown_on = 0 - src.power_change() + new /obj/effect/particle_effect/foam(loc) + uses-- + to_chat(user, "You activate [src]. It now has [uses] uses of foam remaining.") + cooldown = world.time + cooldown_time + power_change() + addtimer(CALLBACK(src, .proc/power_change), cooldown_time)