/obj/machinery/computer/robotics
name = "Robotics Control"
icon = 'icons/obj/computer.dmi'
icon_state = "robotics"
req_access = list(access_robotics)
req_access_txt = "29"
desc = "A computer that allows an authorized user to have an overview of the cyborgs on the station."
power_usage = 500
var/id = 0.0
var/perma = 0
/obj/machinery/computer/robotics/attackby(I as obj, user as mob)
if(istype(I, /obj/item/screwdriver))
if (perma)
boutput(user, "The screws are all weird safety-bit types! You can't turn them!")
return
playsound(src.loc, "sound/items/Screwdriver.ogg", 50, 1)
if(do_after(user, 20))
if (src.stat & BROKEN)
boutput(user, "The broken glass falls out.")
var/obj/computerframe/A = new /obj/computerframe( src.loc )
if(src.material) A.setMaterial(src.material)
new /obj/item/raw_material/shard/glass( src.loc )
var/obj/item/circuitboard/robotics/M = new /obj/item/circuitboard/robotics( A )
for (var/obj/C in src)
C.set_loc(src.loc)
M.id = src.id
A.circuit = M
A.state = 3
A.icon_state = "3"
A.anchored = 1
qdel(src)
else
boutput(user, "You disconnect the monitor.")
var/obj/computerframe/A = new /obj/computerframe( src.loc )
if(src.material) A.setMaterial(src.material)
var/obj/item/circuitboard/robotics/M = new /obj/item/circuitboard/robotics( A )
for (var/obj/C in src)
C.set_loc(src.loc)
M.id = src.id
A.circuit = M
A.state = 4
A.icon_state = "4"
A.anchored = 1
qdel(src)
else
src.attack_hand(user)
return
/obj/machinery/computer/robotics/attack_ai(var/mob/user as mob)
return src.attack_hand(user)
/obj/machinery/computer/robotics/process()
..()
if(stat & (NOPOWER|BROKEN))
return
use_power(250)
src.updateDialog()
return
/obj/machinery/computer/robotics/attack_hand(var/mob/user as mob)
if(..())
return
user.machine = src
var/dat = "Located AI Units
"
for(var/mob/living/silicon/ai/A in mobs)
dat += "[A.name] |"
if(A.stat)
dat += "ERROR: Not Responding!
"
else
dat += "Operating Normally
"
if(!isrobot(user)&&!ishivebot(user))
//if(!A.weapon_lock)
//dat += "Emergency Lockout AI *Swipe ID*
"
//else
//dat += "Time left:[A.weaponlock_time] | "
//dat += "Cancel Lockout
"
if(!A.killswitch)
dat += "Kill Switch AI *Swipe ID*
"
else
dat += "Time left:[A.killswitch_time]"
if (!isAI(user))
dat += " | Cancel"
dat += "
"
dat += "
Connected Cyborgs
"
dat += " *------------------------------------------------*
"
for(var/mob/living/silicon/robot/R in A:connected_robots)
dat += "[R.name] |"
if(R.stat)
dat += " Not Responding |"
else
dat += " Operating Normally |"
if(R.cell)
dat += " Battery Installed ([R.cell.charge]/[R.cell.maxcharge]) |"
else
dat += " No Cell Installed |"
if(R.module)
dat += " Module Installed ([R.module.name]) |"
else
dat += " No Module Installed |"
dat += "
"
if(istype(user,/mob/living/silicon/ai))
if(user == A)
if(!R.weapon_lock)
dat += "Lockdown Bot
"
else
dat += "Time left:[R.weaponlock_time] | "
dat += "Cancel Lockdown
"
else if(!isrobot(user)&&!ishivebot(user))
if(!R.killswitch)
dat += "Kill Switch *Swipe ID*
"
else
dat += "Time left:[R.killswitch_time] | "
dat += "Cancel
"
dat += "*----------*
"
user << browse(dat, "window=computer;size=400x500")
onclose(user, "computer")
return
/obj/machinery/computer/robotics/Topic(href, href_list)
if(..())
return
if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon)))
usr.machine = src
var/mob/living/silicon/robot/R = locate(href_list["bot"])
var/mob/living/silicon/ai/A = locate(href_list["ai"])
if (href_list["gib"])
switch(href_list["gib"])
if("1")
var/obj/item/card/id/I = usr.equipped()
if (istype(I))
if(src.check_access(I))
if(istype(R))
if(R.client)
message_admins("[key_name(usr)] has activated the robot self destruct on [key_name(R)].")
logTheThing("combat", usr, R, "has activated the robot self destruct on %target%")
boutput(R, "Killswitch process activated.")
R.killswitch = 1
R.killswitch_time = 60
else if(istype(A))
if(A.client)
message_admins("[key_name(usr)] has activated the AI self destruct on [key_name(A)].")
logTheThing("combat", usr, A, "has activated the AI self destruct on %target%")
boutput(A, "AI Killswitch process activated.")
boutput(A, "Killswitch will engage in 60 seconds.") // more like 180 really but whatever
A.killswitch = 1
A.killswitch_time = 60
else
boutput(usr, "Access Denied.")
if("2")
if(istype(R))
R.killswitch_time = 60
R.killswitch = 0
if(R.client)
message_admins("[key_name(usr)] has stopped the robot self destruct on [key_name(R, 1, 1)].")
logTheThing("combat", usr, R, "has stopped the robot self destruct on %target%.")
boutput(R, "Killswitch process deactivated.")
else if(istype(A))
A.killswitch_time = 60
A.killswitch = 0
if(A.client)
message_admins("[key_name(usr)] has stopped the AI self destruct on [key_name(A, 1, 1)].")
logTheThing("combat", usr, A, "has stopped the AI self destruct on %target%.")
boutput(A, "Killswitch process deactivated.")
if (href_list["lock"])
switch(href_list["lock"])
if("1")
if(istype(R))
if(R.client)
if (R.emagged)
boutput(R, "Weapon Lock signal blocked!")
return
boutput(R, "Weapon Lock activated!")
R.weapon_lock = 1
R.weaponlock_time = 120
R.uneq_active()
logTheThing("combat", usr, R, "has activated %target%'s weapon lock (120 seconds).")
for (var/obj/item/roboupgrade/X in R.contents)
if (X.activated)
X.activated = 0
boutput(R, "[X] was shut down by the Weapon Lock!")
if (istype(X, /obj/item/roboupgrade/jetpack))
R.jetpack = 0
R.ion_trail = null
else if(istype(A))
var/obj/item/card/id/I = usr.equipped()
if (istype(I))
if(src.check_access(I))
if(A.client)
boutput(A, "Emergency lockout activated!")
A.weapon_lock = 1
A.weaponlock_time = 120
logTheThing("combat", usr, A, "has activated %target%'s weapon lock (120 seconds).")
else
boutput(usr, "Access Denied.")
if("2")
if(istype(R))
if(R.emagged) return
if(R.client)
boutput(R, "Weapon Lock deactivated.")
R.weapon_lock = 0
R.weaponlock_time = 120
logTheThing("combat", usr, R, "has deactivated %target%'s weapon lock.")
else if(istype(A))
if(A.client)
boutput(A, "Emergency lockout deactivated.")
A.weapon_lock = 0
A.weaponlock_time = 120
logTheThing("combat", usr, A, "has deactivated %target%'s weapon lock.")
src.updateUsrDialog()
return