diff --git a/code/_onclick/ai.dm b/code/_onclick/ai.dm index a907a5dfc45..b023aaa4dd0 100644 --- a/code/_onclick/ai.dm +++ b/code/_onclick/ai.dm @@ -215,11 +215,3 @@ if(!ai_control_check(user)) return toggle_light(user) - -// AI-CONTROLLED SLIP GENERATOR IN AI CORE - -/obj/machinery/ai_slipper/AICtrlClick(mob/living/silicon/ai/user) //Turns liquid dispenser on or off - ToggleOn() - -/obj/machinery/ai_slipper/AIAltClick() //Dispenses liquid if on - Activate() diff --git a/code/_onclick/cyborg.dm b/code/_onclick/cyborg.dm index 2bf62cdc5c7..e9e27a53387 100644 --- a/code/_onclick/cyborg.dm +++ b/code/_onclick/cyborg.dm @@ -169,16 +169,6 @@ /obj/machinery/power/apc/BorgCtrlClick(mob/living/silicon/robot/user) // turns off/on APCs. Forwards to AI code. AICtrlClick(user) - -// AI SLIPPER - -/obj/machinery/ai_slipper/BorgCtrlClick(mob/living/silicon/robot/user) //Turns liquid dispenser on or off - ToggleOn() - -/obj/machinery/ai_slipper/BorgAltClick(mob/living/silicon/robot/user) //Dispenses liquid if on - Activate() - - // TURRETCONTROL /obj/machinery/turretid/BorgCtrlClick(mob/living/silicon/robot/user) //turret control on/off. Forwards to AI code. diff --git a/code/game/machinery/ai_slipper.dm b/code/game/machinery/ai_slipper.dm index 45cd917c39b..a9cc35874bb 100644 --- a/code/game/machinery/ai_slipper.dm +++ b/code/game/machinery/ai_slipper.dm @@ -4,133 +4,66 @@ icon_state = "liquid_dispenser" layer = 3 plane = FLOOR_PLANE - anchored = 1.0 + anchored = TRUE 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 = TRUE - var/lethal = 0 - var/locked = TRUE - var/cooldown_time = 0 - var/cooldown_timeleft = 0 + var/cooldown_time = 10 SECONDS var/cooldown_on = FALSE req_access = list(ACCESS_AI_UPLOAD) +/obj/machinery/ai_slipper/examine(mob/user) + . = ..() + . += "A small counter shows it has: [uses] use\s remaining." + /obj/machinery/ai_slipper/power_change() - if(stat & BROKEN) - update_icon() + if(powered()) + stat &= ~NOPOWER else - if( powered() ) - stat &= ~NOPOWER - else - stat |= NOPOWER - disabled = TRUE - update_icon() - -/obj/machinery/ai_slipper/proc/setState(enabled, uses) - disabled = disabled - uses = uses - power_change() - -/obj/machinery/ai_slipper/attackby(obj/item/W, mob/user, params) - if(stat & (NOPOWER|BROKEN)) - return - if(istype(user, /mob/living/silicon)) - return attack_hand(user) - if(allowed(usr)) // trying to unlock the interface - 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) - attack_hand(usr) - return - return ..() - -/obj/machinery/ai_slipper/proc/ToggleOn() - if(stat & (NOPOWER|BROKEN)) - return - disabled = !disabled + stat |= NOPOWER update_icon() -/obj/machinery/ai_slipper/proc/Activate() +/obj/machinery/ai_slipper/attack_ai(mob/user) + add_hiddenprint(user) + return attack_hand(user) + +/obj/machinery/ai_slipper/attack_ghost(mob/user) + if(user.can_advanced_admin_interact()) + Activate(user) + +/obj/machinery/ai_slipper/attack_hand(mob/user) + if(stat & (NOPOWER|BROKEN)) + to_chat(user, "[src] has no power or is broken!") + return + if(!allowed(user)) + to_chat(user, "Access denied.") + return + Activate(user) + +/obj/machinery/ai_slipper/proc/Activate(mob/user) if(stat & (NOPOWER|BROKEN)) return - if(cooldown_on || disabled) + if(!uses) + to_chat(user, "[src] is empty!") + return + if(cooldown_on) + to_chat(user, "[src] is still recharging!") return else new /obj/effect/particle_effect/foam(loc) uses-- cooldown_on = TRUE - cooldown_time = world.timeofday + 100 - slip_process() + power_change() + addtimer(CALLBACK(src, .proc/recharge), cooldown_time) /obj/machinery/ai_slipper/update_icon() - if(stat & (NOPOWER|BROKEN) || disabled) + if(stat & (NOPOWER|BROKEN) || cooldown_on || !uses) icon_state = "liquid_dispenser" else icon_state = "liquid_dispenser_on" -/obj/machinery/ai_slipper/attack_ai(mob/user) - return attack_hand(user) - -/obj/machinery/ai_slipper/attack_ghost(mob/user) - return attack_hand(user) - -/obj/machinery/ai_slipper/attack_hand(mob/user) - if(stat & (NOPOWER|BROKEN)) +/obj/machinery/ai_slipper/proc/recharge() + if(!uses) return - - if(get_dist(src, user) > 1 && (!issilicon(user) && !user.can_admin_interact())) - to_chat(user, "Too far away.") - user.unset_machine() - user << browse(null, "window=ai_slipper") - return - - user.set_machine(src) - var/area/myarea = get_area(src) - var/t = "AI Liquid Dispenser ([myarea.name])
" - - if(locked && (!issilicon(user) && !user.can_admin_interact())) - t += "(Swipe ID card to unlock control panel.)
" - else - t += text("Dispenser [] - []?
\n", disabled ? "deactivated" : "activated", disabled ? "Enable" : "Disable") - t += text("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(..()) - return 1 - - if(locked && (!issilicon(usr) && !usr.can_admin_interact())) - to_chat(usr, "Control panel is locked!") - return 1 - - if(href_list["toggleOn"]) - ToggleOn() - - if(href_list["toggleUse"]) - Activate() - - 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) - return - if(uses >= 0) - cooldown_on = FALSE + cooldown_on = FALSE power_change()