mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-29 06:57:42 +01:00
Refactors AI slipping machines (#16265)
* refactors AI slipping machines * spans * Update code/game/machinery/ai_slipper.dm Co-authored-by: dearmochi <1496804+dearmochi@users.noreply.github.com> Co-authored-by: dearmochi <1496804+dearmochi@users.noreply.github.com>
This commit is contained in:
@@ -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()
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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)
|
||||
. = ..()
|
||||
. += "<span class='notice'>A small counter shows it has: [uses] use\s remaining.</span>"
|
||||
|
||||
/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, "<span class='warning'>[src] has no power or is broken!</span>")
|
||||
return
|
||||
if(!allowed(user))
|
||||
to_chat(user, "<span class='warning'>Access denied.</span>")
|
||||
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, "<span class='warning'>[src] is empty!</span>")
|
||||
return
|
||||
if(cooldown_on)
|
||||
to_chat(user, "<span class='warning'>[src] is still recharging!</span>")
|
||||
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, "<span class='warning'>Too far away.</span>")
|
||||
user.unset_machine()
|
||||
user << browse(null, "window=ai_slipper")
|
||||
return
|
||||
|
||||
user.set_machine(src)
|
||||
var/area/myarea = get_area(src)
|
||||
var/t = "<TT><B>AI Liquid Dispenser</B> ([myarea.name])<HR>"
|
||||
|
||||
if(locked && (!issilicon(user) && !user.can_admin_interact()))
|
||||
t += "<I>(Swipe ID card to unlock control panel.)</I><BR>"
|
||||
else
|
||||
t += text("Dispenser [] - <A href='?src=[UID()];toggleOn=1'>[]?</a><br>\n", disabled ? "deactivated" : "activated", disabled ? "Enable" : "Disable")
|
||||
t += text("Uses Left: [uses]. <A href='?src=[UID()];toggleUse=1'>Activate the dispenser?</A><br>\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()
|
||||
|
||||
Reference in New Issue
Block a user