Bleeding edgy refresh (#303)

* not code stuff

* other things

* global vars, defines, helpers

* onclick hud stuff, orphans, world.dm

* controllers and datums

* game folder

* everything not client/mobs in modules

* client folder

* stage 1 mob stuff

* simple animal things

* silicons

* carbon things

* ayylmaos and monkeys

* hyoomahn

* icons n shit

* sprite fixes

* compile fixes

* some fixes I cherrypicked.

* qdel fixes

* forgot brain refractors
This commit is contained in:
Poojawa
2017-03-21 11:44:10 -05:00
committed by GitHub
parent 099a6c8764
commit f67e9f6d87
1476 changed files with 344416 additions and 40694 deletions
+3 -1
View File
@@ -7,6 +7,8 @@
var/mob/living/carbon/human/patient = null
var/obj/structure/table/optable/table = null
light_color = LIGHT_COLOR_BLUE
/obj/machinery/computer/operating/Initialize()
find_table()
@@ -60,4 +62,4 @@
var/datum/surgery_step/surgery_step = procedure.get_surgery_step()
dat += "Next step: [capitalize(surgery_step.name)]<BR>"
dat += "</div>"
return dat
return dat
+11 -10
View File
@@ -7,13 +7,14 @@
circuit = /obj/item/weapon/circuitboard/computer/aifixer
icon_keyboard = "tech_key"
icon_screen = "ai-fixer"
light_color = LIGHT_COLOR_PINK
/obj/machinery/computer/aifixer/attackby(obj/I, mob/user, params)
if(occupier && istype(I, /obj/item/weapon/screwdriver))
if(stat & (NOPOWER|BROKEN))
user << "<span class='warning'>The screws on [name]'s screen won't budge.</span>"
to_chat(user, "<span class='warning'>The screws on [name]'s screen won't budge.</span>")
else
user << "<span class='warning'>The screws on [name]'s screen won't budge and it emits a warning beep.</span>"
to_chat(user, "<span class='warning'>The screws on [name]'s screen won't budge and it emits a warning beep.</span>")
else
return ..()
@@ -93,7 +94,7 @@
if(..())
return
if(href_list["fix"])
usr << "<span class='notice'>Reconstruction in progress. This will take several minutes.</span>"
to_chat(usr, "<span class='notice'>Reconstruction in progress. This will take several minutes.</span>")
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 25, 0)
active = TRUE
add_fingerprint(usr)
@@ -120,26 +121,26 @@
//Downloading AI from card to terminal.
if(interaction == AI_TRANS_FROM_CARD)
if(stat & (NOPOWER|BROKEN))
user << "[src] is offline and cannot take an AI at this time!"
to_chat(user, "[src] is offline and cannot take an AI at this time!")
return
AI.forceMove(src)
occupier = AI
AI.control_disabled = 1
AI.radio_enabled = 0
AI << "You have been uploaded to a stationary terminal. Sadly, there is no remote access from here."
user << "<span class='boldnotice'>Transfer successful</span>: [AI.name] ([rand(1000,9999)].exe) installed and executed successfully. Local copy has been removed."
to_chat(AI, "You have been uploaded to a stationary terminal. Sadly, there is no remote access from here.")
to_chat(user, "<span class='boldnotice'>Transfer successful</span>: [AI.name] ([rand(1000,9999)].exe) installed and executed successfully. Local copy has been removed.")
card.AI = null
update_icon()
else //Uploading AI from terminal to card
if(occupier && !active)
occupier << "You have been downloaded to a mobile storage device. Still no remote access."
user << "<span class='boldnotice'>Transfer successful</span>: [occupier.name] ([rand(1000,9999)].exe) removed from host terminal and stored within local memory."
to_chat(occupier, "You have been downloaded to a mobile storage device. Still no remote access.")
to_chat(user, "<span class='boldnotice'>Transfer successful</span>: [occupier.name] ([rand(1000,9999)].exe) removed from host terminal and stored within local memory.")
occupier.loc = card
card.AI = occupier
occupier = null
update_icon()
else if (active)
user << "<span class='boldannounce'>ERROR</span>: Reconstruction in progress."
to_chat(user, "<span class='boldannounce'>ERROR</span>: Reconstruction in progress.")
else if (!occupier)
user << "<span class='boldannounce'>ERROR</span>: Unable to locate artificial intelligence."
to_chat(user, "<span class='boldannounce'>ERROR</span>: Unable to locate artificial intelligence.")
+210
View File
@@ -0,0 +1,210 @@
/obj/machinery/computer/apc_control
name = "power flow control console"
desc = "Used to remotely control the flow of power to different parts of the station."
icon_screen = "solar"
icon_keyboard = "power_key"
req_access = list(access_engine)
circuit = /obj/item/weapon/circuitboard/computer/apc_control
light_color = LIGHT_COLOR_YELLOW
var/list/apcs //APCs the computer has access to
var/mob/living/operator //Who's operating the computer right now
var/obj/machinery/power/apc/active_apc //The APC we're using right now
var/list/filters //For sorting the results
var/checking_logs = 0
var/list/logs
var/authenticated = 0
var/auth_id = "\[NULL\]"
/obj/machinery/computer/apc_control/Initialize()
apcs = list() //To avoid BYOND making the list run through a ton of procs
filters = list("Name" = null, "Charge Above" = null, "Charge Below" = null, "Responsive" = null)
..()
/obj/machinery/computer/apc_control/process()
apcs = list() //Clear the list every tick
for(var/V in apcs_list)
var/obj/machinery/power/apc/APC = V
if(check_apc(APC))
apcs[APC.name] = APC
if(operator && (!operator.Adjacent(src) || stat))
operator = null
if(active_apc)
if(!active_apc.locked)
active_apc.say("Remote access canceled. Interface locked.")
playsound(active_apc, 'sound/machines/BoltsDown.ogg', 25, 0)
playsound(active_apc, 'sound/machines/terminal_alert.ogg', 50, 0)
active_apc.locked = TRUE
active_apc.update_icon()
active_apc = null
/obj/machinery/computer/apc_control/attack_ai(mob/living/AI) //You already have APC access, cheater!
AI << "<span class='warning'>[src] does not support AI control.</span>"
return
/obj/machinery/computer/apc_control/proc/check_apc(obj/machinery/power/apc/APC)
return APC.z == z && !APC.malfhack && !APC.aidisabled && !APC.emagged && !APC.stat && !istype(APC.area, /area/ai_monitored) && !APC.area.outdoors
/obj/machinery/computer/apc_control/interact(mob/living/user)
var/dat
if(authenticated)
if(!checking_logs)
dat += "Logged in as [auth_id].<br><br>"
dat += "<i>Filters</i><br>"
dat += "<b>Name:</b> <a href='?src=\ref[src];name_filter=1'>[filters["Name"] ? filters["Name"] : "None set"]</a><br>"
dat += "<b>Charge:</b> <a href='?src=\ref[src];above_filter=1'>\>[filters["Charge Above"] ? filters["Charge Above"] : "NaN"]%</a> and <a href='?src=\ref[src];below_filter=1'>\<[filters["Charge Below"] ? filters["Charge Below"] : "NaN"]%</a><br>"
dat += "<b>Accessible:</b> <a href='?src=\ref[src];access_filter=1'>[filters["Responsive"] ? "Non-Responsive Only" : "All"]</a><br><br>"
for(var/A in apcs)
var/obj/machinery/power/apc/APC = apcs[A]
if(filters["Name"] && !findtext(APC.name, filters["Name"]) && !findtext(APC.area.name, filters["Name"]))
continue
if(filters["Charge Above"] && (APC.cell.charge / APC.cell.maxcharge) < filters["Charge Above"] / 100)
continue
if(filters["Charge Below"] && (APC.cell.charge / APC.cell.maxcharge) > filters["Charge Below"] / 100)
continue
if(filters["Responsive"] && !APC.aidisabled)
continue
dat += "<a href='?src=\ref[src];access_apc=\ref[APC]'>[A]</a><br>\
<b>Charge:</b> [APC.cell.charge] / [APC.cell.maxcharge] W ([round((APC.cell.charge / APC.cell.maxcharge) * 100)]%)<br>\
<b>Area:</b> [APC.area]<br>\
[APC.aidisabled || APC.panel_open ? "<font color='#FF0000'>APC does not respond to interface query.</font>" : "<font color='#00FF00'>APC responds to interface query.</font>"]<br><br>"
dat += "<a href='?src=\ref[src];check_logs=1'>Check Logs</a><br>"
dat += "<a href='?src=\ref[src];log_out=1'>Log Out</a><br>"
if(emagged)
dat += "<font color='#FF0000'>WARNING: Logging functionality partially disabled from outside source.</font><br>"
dat += "<a href='?src=\ref[src];restore_logging=1'>Restore logging functionality?</a><br>"
else
if(logs.len)
for(var/entry in logs)
dat += "[entry]<br>"
else
dat += "<i>No activity has been recorded at this time.</i><br>"
if(emagged)
dat += "<a href='?src=\ref[src];clear_logs=1'><font color='#FF0000'>@#%! CLEAR LOGS</a>"
dat += "<a href='?src=\ref[src];check_apcs=1'>Return</a>"
operator = user
else
dat = "<a href='?src=\ref[src];authenticate=1'>Please swipe a valid ID to log in...</a>"
var/datum/browser/popup = new(user, "apc_control", name, 600, 400)
popup.set_content(dat)
popup.set_title_image(user.browse_rsc_icon(icon, icon_state))
popup.open()
/obj/machinery/computer/apc_control/Topic(href, href_list)
if(..())
return
if(!usr || !usr.canUseTopic(src) || usr.incapacitated() || stat || QDELETED(src))
return
var/image/I = image(src) //For feedback message flavor
if(href_list["authenticate"])
var/obj/item/weapon/card/id/ID = usr.get_active_held_item()
if(!istype(ID))
ID = usr.get_idcard()
if(ID && istype(ID))
if(check_access(ID))
authenticated = TRUE
auth_id = "[ID.registered_name] ([ID.assignment])"
log_activity("logged in")
if(!authenticated) //Check for emags
var/obj/item/weapon/card/emag/E = usr.get_active_held_item()
if(E && istype(E) && usr.Adjacent(src))
usr << "<span class='warning'>You bypass [src]'s access requirements using your emag.</span>"
authenticated = TRUE
log_activity("logged in") //Auth ID doesn't change, hinting that it was illicit
if(href_list["log_out"])
log_activity("logged out")
authenticated = FALSE
auth_id = "\[NULL\]"
if(href_list["restore_logging"])
to_chat(usr, "<span class='robot notice'>\icon[I] Logging functionality restored from backup data.</span>")
emagged = FALSE
LAZYADD(logs, "<b>-=- Logging restored to full functionality at this point -=-</b>")
if(href_list["access_apc"])
playsound(src, "terminal_type", 50, 0)
var/obj/machinery/power/apc/APC = locate(href_list["access_apc"]) in apcs_list
if(!APC || APC.aidisabled || APC.panel_open || QDELETED(APC))
to_chat(usr, "<span class='robot danger'>\icon[I] APC does not return interface request. Remote access may be disabled.</span>")
return
if(active_apc)
to_chat(usr, "<span class='robot danger'>\icon[I] Disconnected from [active_apc].</span>")
active_apc.say("Remote access canceled. Interface locked.")
playsound(active_apc, 'sound/machines/BoltsDown.ogg', 25, 0)
playsound(active_apc, 'sound/machines/terminal_alert.ogg', 50, 0)
active_apc.locked = TRUE
active_apc.update_icon()
active_apc = null
to_chat(usr, "<span class='robot notice'>\icon[I] Connected to APC in [get_area(APC)]. Interface request sent.</span>")
log_activity("remotely accessed APC in [get_area(APC)]")
APC.interact(usr, not_incapacitated_state)
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
message_admins("[key_name_admin(usr)] remotely accessed [APC] from [src] at [get_area(src)].")
log_game("[key_name_admin(usr)] remotely accessed [APC] from [src] at [get_area(src)].")
if(APC.locked)
APC.say("Remote access detected. Interface unlocked.")
playsound(APC, 'sound/machines/BoltsUp.ogg', 25, 0)
playsound(APC, 'sound/machines/terminal_alert.ogg', 50, 0)
APC.locked = FALSE
APC.update_icon()
active_apc = APC
if(href_list["name_filter"])
playsound(src, 'sound/machines/terminal_prompt.ogg', 50, 0)
var/new_filter = stripped_input(usr, "What name are you looking for?", name) as null|text
if(!src || !usr || !usr.canUseTopic(src) || stat || QDELETED(src))
return
log_activity("changed name filter to \"[new_filter]\"")
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
filters["Name"] = new_filter
if(href_list["above_filter"])
playsound(src, 'sound/machines/terminal_prompt.ogg', 50, 0)
var/new_filter = input(usr, "Enter a percentage from 1-100 to sort by (greater than).", name) as null|num
if(!src || !usr || !usr.canUseTopic(src) || stat || QDELETED(src))
return
log_activity("changed greater than charge filter to \"[new_filter]\"")
if(new_filter)
new_filter = Clamp(new_filter, 0, 100)
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
filters["Charge Above"] = new_filter
if(href_list["below_filter"])
playsound(src, 'sound/machines/terminal_prompt.ogg', 50, 0)
var/new_filter = input(usr, "Enter a percentage from 1-100 to sort by (lesser than).", name) as null|num
if(!src || !usr || !usr.canUseTopic(src) || stat || QDELETED(src))
return
log_activity("changed lesser than charge filter to \"[new_filter]\"")
if(new_filter)
new_filter = Clamp(new_filter, 0, 100)
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
filters["Charge Below"] = new_filter
if(href_list["access_filter"])
if(isnull(filters["Responsive"]))
filters["Responsive"] = 1
log_activity("sorted by non-responsive APCs only")
else
filters["Responsive"] = !filters["Responsive"]
log_activity("sorted by all APCs")
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
if(href_list["check_logs"])
checking_logs = TRUE
log_activity("checked logs")
if(href_list["check_apcs"])
checking_logs = FALSE
log_activity("checked APCs")
if(href_list["clear_logs"])
logs = list()
interact(usr) //Refresh the UI after a filter changes
/obj/machinery/computer/apc_control/emag_act(mob/living/user)
if(emagged)
return
user.visible_message("<span class='warning'>You emag [src], disabling precise logging and allowing you to clear logs.</span>")
log_game("[key_name_admin(user)] emagged [src] at [get_area(src)], disabling operator tracking.")
playsound(src, "sparks", 50, 1)
emagged = 1
/obj/machinery/computer/apc_control/proc/log_activity(log_text)
var/op_string = operator && !emagged ? operator : "\[NULL OPERATOR\]"
LAZYADD(logs, "<b>([worldtime2text()])</b> [op_string] [log_text]")
/mob/proc/using_power_flow_console()
for(var/obj/machinery/computer/apc_control/A in range(1, src))
if(A.operator && A.operator == src && !A.stat)
return TRUE
return
+20 -15
View File
@@ -37,11 +37,16 @@
/obj/item/toy/talking/skeleton = 2,
/obj/item/weapon/coin/antagtoken = 2,
/obj/item/stack/tile/fakespace/loaded = 2,
/obj/item/stack/tile/fakepit/loaded = 2,
/obj/item/toy/toy_xeno = 2,
/obj/item/weapon/storage/box/actionfigure = 1,
/obj/item/weapon/restraints/handcuffs/fake = 2,
/obj/item/weapon/gun/energy/megabuster = 2,
/obj/item/weapon/gun/energy/megabuster/proto = 2)
/obj/item/weapon/grenade/chem_grenade/glitter/pink = 1,
/obj/item/weapon/grenade/chem_grenade/glitter/blue = 1,
/obj/item/weapon/grenade/chem_grenade/glitter/white = 1,
/obj/item/toy/eightball = 2)
light_color = LIGHT_COLOR_GREEN
/obj/machinery/computer/arcade/New()
..()
@@ -415,18 +420,18 @@
dat += "<br>You ran out of food and starved."
if(emagged)
user.nutrition = 0 //yeah you pretty hongry
user << "<span class='userdanger'><font size=3>Your body instantly contracts to that of one who has not eaten in months. Agonizing cramps seize you as you fall to the floor.</span>"
to_chat(user, "<span class='userdanger'><font size=3>Your body instantly contracts to that of one who has not eaten in months. Agonizing cramps seize you as you fall to the floor.</span>")
if(fuel <= 0)
dat += "<br>You ran out of fuel, and drift, slowly, into a star."
if(emagged)
var/mob/living/M = user
M.adjust_fire_stacks(5)
M.IgniteMob() //flew into a star, so you're on fire
user << "<span class='userdanger'><font size=3>You feel an immense wave of heat emanate from the arcade machine. Your skin bursts into flames.</span>"
to_chat(user, "<span class='userdanger'><font size=3>You feel an immense wave of heat emanate from the arcade machine. Your skin bursts into flames.</span>")
dat += "<br><P ALIGN=Right><a href='byond://?src=\ref[src];menu=1'>OK...</a></P>"
if(emagged)
user << "<span class='userdanger'><font size=3>You're never going to make it to Orion...</span></font>"
to_chat(user, "<span class='userdanger'><font size=3>You're never going to make it to Orion...</span></font>")
user.death()
emagged = 0 //removes the emagged status after you lose
gameStatus = ORION_STATUS_START
@@ -494,21 +499,21 @@
switch(event)
if(ORION_TRAIL_RAIDERS)
if(prob(50))
usr << "<span class='userdanger'>You hear battle shouts. The tramping of boots on cold metal. Screams of agony. The rush of venting air. Are you going insane?</span>"
to_chat(usr, "<span class='userdanger'>You hear battle shouts. The tramping of boots on cold metal. Screams of agony. The rush of venting air. Are you going insane?</span>")
M.hallucination += 30
else
usr << "<span class='userdanger'>Something strikes you from behind! It hurts like hell and feel like a blunt weapon, but nothing is there...</span>"
to_chat(usr, "<span class='userdanger'>Something strikes you from behind! It hurts like hell and feel like a blunt weapon, but nothing is there...</span>")
M.take_bodypart_damage(30)
playsound(loc, 'sound/weapons/genhit2.ogg', 100, 1)
if(ORION_TRAIL_ILLNESS)
var/severity = rand(1,3) //pray to RNGesus. PRAY, PIGS
if(severity == 1)
M << "<span class='userdanger'>You suddenly feel slightly nauseous.</span>" //got off lucky
to_chat(M, "<span class='userdanger'>You suddenly feel slightly nauseous.</span>" )
if(severity == 2)
usr << "<span class='userdanger'>You suddenly feel extremely nauseous and hunch over until it passes.</span>"
to_chat(usr, "<span class='userdanger'>You suddenly feel extremely nauseous and hunch over until it passes.</span>")
M.Stun(3)
if(severity >= 3) //you didn't pray hard enough
M << "<span class='warning'>An overpowering wave of nausea consumes over you. You hunch over, your stomach's contents preparing for a spectacular exit.</span>"
to_chat(M, "<span class='warning'>An overpowering wave of nausea consumes over you. You hunch over, your stomach's contents preparing for a spectacular exit.</span>")
M.Stun(5)
sleep(30)
M.vomit(50)
@@ -519,7 +524,7 @@
M.take_bodypart_damage(25)
playsound(src.loc, 'sound/weapons/Genhit.ogg', 100, 1)
else
M << "<span class='userdanger'>A violent gale blows past you, and you barely manage to stay standing!</span>"
to_chat(M, "<span class='userdanger'>A violent gale blows past you, and you barely manage to stay standing!</span>")
if(ORION_TRAIL_COLLISION) //by far the most damaging event
if(prob(90))
playsound(src.loc, 'sound/effects/bang.ogg', 100, 1)
@@ -1028,7 +1033,7 @@
/obj/machinery/computer/arcade/orion_trail/emag_act(mob/user)
if(!emagged)
user << "<span class='notice'>You override the cheat code menu and skip to Cheat #[rand(1, 50)]: Realism Mode.</span>"
to_chat(user, "<span class='notice'>You override the cheat code menu and skip to Cheat #[rand(1, 50)]: Realism Mode.</span>")
name = "The Orion Trail: Realism Edition"
desc = "Learn how our ancestors got to Orion, and try not to die in the process!"
newgame()
@@ -1069,9 +1074,9 @@
if(!(in_range(user, src)))
return
if(!active)
user << "<span class='notice'>There's a little switch on the bottom. It's flipped down.</span>"
to_chat(user, "<span class='notice'>There's a little switch on the bottom. It's flipped down.</span>")
else
user << "<span class='notice'>There's a little switch on the bottom. It's flipped up.</span>"
to_chat(user, "<span class='notice'>There's a little switch on the bottom. It's flipped up.</span>")
/obj/item/weapon/orion_ship/attack_self(mob/user) //Minibomb-level explosion. Should probably be more because of how hard it is to survive the machine! Also, just over a 5-second fuse
if(active)
@@ -1080,7 +1085,7 @@
message_admins("[key_name_admin(usr)] primed an explosive Orion ship for detonation.")
log_game("[key_name(usr)] primed an explosive Orion ship for detonation.")
user << "<span class='warning'>You flip the switch on the underside of [src].</span>"
to_chat(user, "<span class='warning'>You flip the switch on the underside of [src].</span>")
active = 1
src.visible_message("<span class='notice'>[src] softly beeps and whirs to life!</span>")
playsound(src.loc, 'sound/machines/defib_SaftyOn.ogg', 25, 1)
+5 -3
View File
@@ -9,6 +9,8 @@
var/receive_frequency = 1437
var/datum/radio_frequency/radio_connection
light_color = LIGHT_COLOR_CYAN
/obj/machinery/computer/atmos_alert/Initialize()
..()
set_frequency(receive_frequency)
@@ -44,11 +46,11 @@
if("clear")
var/zone = params["zone"]
if(zone in priority_alarms)
usr << "Priority alarm for [zone] cleared."
to_chat(usr, "Priority alarm for [zone] cleared.")
priority_alarms -= zone
. = TRUE
if(zone in minor_alarms)
usr << "Minor alarm for [zone] cleared."
to_chat(usr, "Minor alarm for [zone] cleared.")
minor_alarms -= zone
. = TRUE
update_icon()
@@ -82,4 +84,4 @@
if(priority_alarms.len)
add_overlay("alert:2")
else if(minor_alarms.len)
add_overlay("alert:1")
add_overlay("alert:1")
@@ -82,6 +82,8 @@
var/list/sensor_information = list()
var/datum/radio_frequency/radio_connection
light_color = LIGHT_COLOR_CYAN
/obj/machinery/computer/atmos_control/Initialize()
..()
set_frequency(frequency)
@@ -156,7 +158,7 @@
var/list/text = splittext(U.id, "_")
IO |= text[1]
if(!IO.len)
user << "<span class='alert'>No machinery detected.</span>"
to_chat(user, "<span class='alert'>No machinery detected.</span>")
var/S = input("Select the device set: ", "Selection", IO[1]) as anything in IO
if(src)
src.input_tag = "[S]_in"
+35 -30
View File
@@ -9,9 +9,9 @@
if(0)
if(istype(P, /obj/item/weapon/wrench))
playsound(src.loc, P.usesound, 50, 1)
user << "<span class='notice'>You start wrenching the frame into place...</span>"
to_chat(user, "<span class='notice'>You start wrenching the frame into place...</span>")
if(do_after(user, 20*P.toolspeed, target = src))
user << "<span class='notice'>You wrench the frame into place.</span>"
to_chat(user, "<span class='notice'>You wrench the frame into place.</span>")
anchored = 1
state = 1
return
@@ -19,13 +19,13 @@
var/obj/item/weapon/weldingtool/WT = P
if(!WT.remove_fuel(0, user))
if(!WT.isOn())
user << "<span class='warning'>The welding tool must be on to complete this task!</span>"
to_chat(user, "<span class='warning'>The welding tool must be on to complete this task!</span>")
return
playsound(src.loc, P.usesound, 50, 1)
user << "<span class='notice'>You start deconstructing the frame...</span>"
to_chat(user, "<span class='notice'>You start deconstructing the frame...</span>")
if(do_after(user, 20*P.toolspeed, target = src))
if(!src || !WT.isOn()) return
user << "<span class='notice'>You deconstruct the frame.</span>"
to_chat(user, "<span class='notice'>You deconstruct the frame.</span>")
var/obj/item/stack/sheet/metal/M = new (loc, 5)
M.add_fingerprint(user)
qdel(src)
@@ -33,9 +33,9 @@
if(1)
if(istype(P, /obj/item/weapon/wrench))
playsound(src.loc, P.usesound, 50, 1)
user << "<span class='notice'>You start to unfasten the frame...</span>"
to_chat(user, "<span class='notice'>You start to unfasten the frame...</span>")
if(do_after(user, 20*P.toolspeed, target = src))
user << "<span class='notice'>You unfasten the frame.</span>"
to_chat(user, "<span class='notice'>You unfasten the frame.</span>")
anchored = 0
state = 0
return
@@ -43,7 +43,7 @@
if(!user.drop_item())
return
playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
user << "<span class='notice'>You place the circuit board inside the frame.</span>"
to_chat(user, "<span class='notice'>You place the circuit board inside the frame.</span>")
icon_state = "1"
circuit = P
circuit.add_fingerprint(user)
@@ -51,17 +51,17 @@
return
else if(istype(P, /obj/item/weapon/circuitboard) && !circuit)
user << "<span class='warning'>This frame does not accept circuit boards of this type!</span>"
to_chat(user, "<span class='warning'>This frame does not accept circuit boards of this type!</span>")
return
if(istype(P, /obj/item/weapon/screwdriver) && circuit)
playsound(src.loc, P.usesound, 50, 1)
user << "<span class='notice'>You screw the circuit board into place.</span>"
to_chat(user, "<span class='notice'>You screw the circuit board into place.</span>")
state = 2
icon_state = "2"
return
if(istype(P, /obj/item/weapon/crowbar) && circuit)
playsound(src.loc, P.usesound, 50, 1)
user << "<span class='notice'>You remove the circuit board.</span>"
to_chat(user, "<span class='notice'>You remove the circuit board.</span>")
state = 1
icon_state = "0"
circuit.loc = src.loc
@@ -71,7 +71,7 @@
if(2)
if(istype(P, /obj/item/weapon/screwdriver) && circuit)
playsound(src.loc, P.usesound, 50, 1)
user << "<span class='notice'>You unfasten the circuit board.</span>"
to_chat(user, "<span class='notice'>You unfasten the circuit board.</span>")
state = 1
icon_state = "1"
return
@@ -79,20 +79,20 @@
var/obj/item/stack/cable_coil/C = P
if(C.get_amount() >= 5)
playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
user << "<span class='notice'>You start adding cables to the frame...</span>"
to_chat(user, "<span class='notice'>You start adding cables to the frame...</span>")
if(do_after(user, 20*P.toolspeed, target = src))
if(C.get_amount() >= 5 && state == 2)
C.use(5)
user << "<span class='notice'>You add cables to the frame.</span>"
to_chat(user, "<span class='notice'>You add cables to the frame.</span>")
state = 3
icon_state = "3"
else
user << "<span class='warning'>You need five lengths of cable to wire the frame!</span>"
to_chat(user, "<span class='warning'>You need five lengths of cable to wire the frame!</span>")
return
if(3)
if(istype(P, /obj/item/weapon/wirecutters))
playsound(src.loc, P.usesound, 50, 1)
user << "<span class='notice'>You remove the cables.</span>"
to_chat(user, "<span class='notice'>You remove the cables.</span>")
state = 2
icon_state = "2"
var/obj/item/stack/cable_coil/A = new (loc)
@@ -103,22 +103,22 @@
if(istype(P, /obj/item/stack/sheet/glass))
var/obj/item/stack/sheet/glass/G = P
if(G.get_amount() < 2)
user << "<span class='warning'>You need two glass sheets to continue construction!</span>"
to_chat(user, "<span class='warning'>You need two glass sheets to continue construction!</span>")
return
else
playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
user << "<span class='notice'>You start to put in the glass panel...</span>"
to_chat(user, "<span class='notice'>You start to put in the glass panel...</span>")
if(do_after(user, 20, target = src))
if(G.get_amount() >= 2 && state == 3)
G.use(2)
user << "<span class='notice'>You put in the glass panel.</span>"
to_chat(user, "<span class='notice'>You put in the glass panel.</span>")
state = 4
src.icon_state = "4"
return
if(4)
if(istype(P, /obj/item/weapon/crowbar))
playsound(src.loc, P.usesound, 50, 1)
user << "<span class='notice'>You remove the glass panel.</span>"
to_chat(user, "<span class='notice'>You remove the glass panel.</span>")
state = 3
icon_state = "3"
var/obj/item/stack/sheet/glass/G = new (loc, 2)
@@ -126,7 +126,7 @@
return
if(istype(P, /obj/item/weapon/screwdriver))
playsound(src.loc, P.usesound, 50, 1)
user << "<span class='notice'>You connect the monitor.</span>"
to_chat(user, "<span class='notice'>You connect the monitor.</span>")
var/obj/B = new src.circuit.build_path (src.loc, circuit)
transfer_fingerprints_to(B)
qdel(src)
@@ -222,13 +222,13 @@
/obj/item/weapon/circuitboard/computer/card/minor/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/weapon/screwdriver))
target_dept = (target_dept == dept_list.len) ? 1 : (target_dept + 1)
user << "<span class='notice'>You set the board to \"[dept_list[target_dept]]\".</span>"
to_chat(user, "<span class='notice'>You set the board to \"[dept_list[target_dept]]\".</span>")
else
return ..()
/obj/item/weapon/circuitboard/computer/card/minor/examine(user)
..()
user << "Currently set to \"[dept_list[target_dept]]\"."
to_chat(user, "Currently set to \"[dept_list[target_dept]]\".")
//obj/item/weapon/circuitboard/computer/shield
// name = "Shield Control (Computer Board)"
@@ -312,11 +312,11 @@
if(build_path == /obj/machinery/computer/rdconsole/core)
name = "RD Console - Robotics (Computer Board)"
build_path = /obj/machinery/computer/rdconsole/robotics
user << "<span class='notice'>Access protocols successfully updated.</span>"
to_chat(user, "<span class='notice'>Access protocols successfully updated.</span>")
else
name = "RD Console (Computer Board)"
build_path = /obj/machinery/computer/rdconsole/core
user << "<span class='notice'>Defaulting access protocols.</span>"
to_chat(user, "<span class='notice'>Defaulting access protocols.</span>")
else
return ..()
@@ -346,14 +346,14 @@
if(istype(I,/obj/item/device/multitool))
if(!emagged)
contraband = !contraband
user << "<span class='notice'>Receiver spectrum set to [contraband ? "Broad" : "Standard"].</span>"
to_chat(user, "<span class='notice'>Receiver spectrum set to [contraband ? "Broad" : "Standard"].</span>")
else
user << "<span class='notice'>The spectrum chip is unresponsive.</span>"
to_chat(user, "<span class='notice'>The spectrum chip is unresponsive.</span>")
else if(istype(I,/obj/item/weapon/card/emag))
if(!emagged)
contraband = TRUE
emagged = TRUE
user << "<span class='notice'>You adjust [src]'s routing and receiver spectrum, unlocking special supplies and contraband.</span>"
to_chat(user, "<span class='notice'>You adjust [src]'s routing and receiver spectrum, unlocking special supplies and contraband.</span>")
else
return ..()
@@ -445,10 +445,15 @@
if(build_path == /obj/machinery/computer/libraryconsole/bookmanagement)
name = "Library Visitor Console (Computer Board)"
build_path = /obj/machinery/computer/libraryconsole
user << "<span class='notice'>Defaulting access protocols.</span>"
to_chat(user, "<span class='notice'>Defaulting access protocols.</span>")
else
name = "Book Inventory Management Console (Computer Board)"
build_path = /obj/machinery/computer/libraryconsole/bookmanagement
user << "<span class='notice'>Access protocols successfully updated.</span>"
to_chat(user, "<span class='notice'>Access protocols successfully updated.</span>")
else
return ..()
/obj/item/weapon/circuitboard/computer/apc_control
name = "\improper Power Flow Control Console (Computer Board)"
build_path = /obj/machinery/computer/apc_control
origin_tech = "programming=3;engineering=3;powerstorage=2"
+4
View File
@@ -9,6 +9,8 @@
var/mapping = 0//For the overview file, interesting bit of code.
var/list/watchers = list() //who's using the console, associated with the camera they're on.
light_color = LIGHT_COLOR_RED
/obj/machinery/computer/security/check_eye(mob/user)
if( (stat & (NOPOWER|BROKEN)) || user.incapacitated() || user.eye_blind )
user.unset_machine()
@@ -154,6 +156,8 @@
circuit = null
clockwork = TRUE //it'd look very weird
light_power = 0
/obj/machinery/computer/security/telescreen/update_icon()
icon_state = initial(icon_state)
if(stat & BROKEN)
+17 -12
View File
@@ -4,23 +4,25 @@
icon_screen = "cameras"
icon_keyboard = "security_key"
var/mob/camera/aiEye/remote/eyeobj
var/mob/living/carbon/human/current_user = null
var/mob/living/current_user = null
var/list/networks = list("SS13")
var/datum/action/innate/camera_off/off_action = new
var/datum/action/innate/camera_jump/jump_action = new
light_color = LIGHT_COLOR_RED
/obj/machinery/computer/camera_advanced/proc/CreateEye()
eyeobj = new()
eyeobj.origin = src
/obj/machinery/computer/camera_advanced/proc/GrantActions(mob/living/carbon/user)
/obj/machinery/computer/camera_advanced/proc/GrantActions(mob/living/user)
off_action.target = user
off_action.Grant(user)
jump_action.target = user
jump_action.Grant(user)
/obj/machinery/computer/camera_advanced/check_eye(mob/user)
if( (stat & (NOPOWER|BROKEN)) || !Adjacent(user) || user.eye_blind || user.incapacitated() )
if( (stat & (NOPOWER|BROKEN)) || (!Adjacent(user) && !user.has_unlimited_silicon_privilege) || user.eye_blind || user.incapacitated() )
user.unset_machine()
/obj/machinery/computer/camera_advanced/Destroy()
@@ -36,13 +38,11 @@
/obj/machinery/computer/camera_advanced/attack_hand(mob/user)
if(current_user)
user << "The console is already in use!"
return
if(!iscarbon(user))
to_chat(user, "The console is already in use!")
return
if(..())
return
var/mob/living/carbon/L = user
var/mob/living/L = user
if(!eyeobj)
CreateEye()
@@ -65,6 +65,11 @@
give_eye_control(L)
eyeobj.setLoc(eyeobj.loc)
/obj/machinery/computer/camera_advanced/attack_robot(mob/user)
return attack_hand(user)
obj/machinery/computer/camera_advanced/attack_ai(mob/user)
return //AIs would need to disable their own camera procs to use the console safely. Bugs happen otherwise.
/obj/machinery/computer/camera_advanced/proc/give_eye_control(mob/user)
@@ -80,7 +85,7 @@
var/sprint = 10
var/cooldown = 0
var/acceleration = 1
var/mob/living/carbon/human/eye_user = null
var/mob/living/eye_user = null
var/obj/machinery/computer/camera_advanced/origin
var/eye_initialized = 0
var/visible_icon = 0
@@ -132,9 +137,9 @@
button_icon_state = "camera_off"
/datum/action/innate/camera_off/Activate()
if(!target || !iscarbon(target))
if(!target || !isliving(target))
return
var/mob/living/carbon/C = target
var/mob/living/C = target
var/mob/camera/aiEye/remote/remote_eye = C.remote_control
remote_eye.origin.current_user = null
remote_eye.origin.jump_action.Remove(C)
@@ -155,9 +160,9 @@
button_icon_state = "camera_jump"
/datum/action/innate/camera_jump/Activate()
if(!target || !iscarbon(target))
if(!target || !isliving(target))
return
var/mob/living/carbon/C = target
var/mob/living/C = target
var/mob/camera/aiEye/remote/remote_eye = C.remote_control
var/obj/machinery/computer/camera_advanced/origin = remote_eye.origin
+50 -6
View File
@@ -19,6 +19,7 @@ var/time_last_changed_position = 0
var/list/region_access = null
var/list/head_subordinates = null
var/target_dept = 0 //Which department this computer has access to. 0=all departments
var/prioritycount = 0 // we don't want 500 prioritized jobs
//Cooldown for closing positions in seconds
//if set to -1: No cooldown... probably a bad idea
@@ -43,6 +44,8 @@ var/time_last_changed_position = 0
//Assoc array: "JobName" = (int)<Opened Positions>
var/list/opened_positions = list();
light_color = LIGHT_COLOR_BLUE
/obj/machinery/computer/card/attackby(obj/O, mob/user, params)//TODO:SANITY
if(istype(O, /obj/item/weapon/card/id))
var/obj/item/weapon/card/id/idcard = O
@@ -149,7 +152,7 @@ var/time_last_changed_position = 0
S = "--------"
dat += "<a href='?src=\ref[src];choice=scan'>[S]</a>"
dat += "<table>"
dat += "<tr><td style='width:25%'><b>Job</b></td><td style='width:25%'><b>Slots</b></td><td style='width:25%'><b>Open job</b></td><td style='width:25%'><b>Close job</b></td></tr>"
dat += "<tr><td style='width:25%'><b>Job</b></td><td style='width:25%'><b>Slots</b></td><td style='width:25%'><b>Open job</b></td><td style='width:25%'><b>Close job</b><td style='width:25%'><b>Prioritize</b></td></td></tr>"
var/ID
if(scan && (access_change_ids in scan.access) && !target_dept)
ID = 1
@@ -193,6 +196,22 @@ var/time_last_changed_position = 0
dat += "Cooldown ongoing: [mins]:[(seconds < 10) ? "0[seconds]" : "[seconds]"]"
if(0)
dat += "Denied"
dat += "</td><td>"
switch(job.total_positions)
if(0)
dat += "Denied"
else
if(ID)
if(job in SSjob.prioritized_jobs)
dat += "<a href='?src=\ref[src];choice=prioritize_job;job=[job.title]'>Deprioritize</a>"
else
if(prioritycount < 5)
dat += "<a href='?src=\ref[src];choice=prioritize_job;job=[job.title]'>Prioritize</a>"
else
dat += "Denied"
else
dat += "Prioritize"
dat += "</td></tr>"
dat += "</table>"
else
@@ -228,7 +247,7 @@ var/time_last_changed_position = 0
header += "<div align='center'><br>"
header += "<a href='?src=\ref[src];choice=modify'>Remove [target_name]</a> || "
header += "<a href='?src=\ref[src];choice=scan'>Remove [scan_name]</a> <br> "
header += "<a href='?src=\ref[src];choice=mode;mode_target=1'>Access Crew Manifest</a> || "
header += "<a href='?src=\ref[src];choice=mode;mode_target=1'>Access Crew Manifest</a> <br> "
header += "<a href='?src=\ref[src];choice=logout'>Log Out</a></div>"
header += "<hr>"
@@ -398,12 +417,13 @@ var/time_last_changed_position = 0
if(region_access)
authenticated = 1
else if ((!( authenticated ) && issilicon(usr)) && (!modify))
usr << "<span class='warning'>You can't modify an ID without an ID inserted to modify! Once one is in the modify slot on the computer, you can log in.</span>"
to_chat(usr, "<span class='warning'>You can't modify an ID without an ID inserted to modify! Once one is in the modify slot on the computer, you can log in.</span>")
if ("logout")
region_access = null
head_subordinates = null
authenticated = 0
playsound(src, 'sound/machines/terminal_off.ogg', 50, 0)
if("access")
if(href_list["allowed"])
if(authenticated)
@@ -433,7 +453,7 @@ var/time_last_changed_position = 0
jobdatum = J
break
if(!jobdatum)
usr << "<span class='error'>No log exists for this job.</span>"
to_chat(usr, "<span class='error'>No log exists for this job.</span>")
return
modify.access = ( istype(src,/obj/machinery/computer/card/centcom) ? get_centcom_access(t1) : jobdatum.get_access() )
@@ -445,7 +465,7 @@ var/time_last_changed_position = 0
modify.assignment = "Unassigned"
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
else
usr << "<span class='error'>You are not authorized to demote this position.</span>"
to_chat(usr, "<span class='error'>You are not authorized to demote this position.</span>")
if ("reg")
if (authenticated)
var/t2 = modify
@@ -456,7 +476,7 @@ var/time_last_changed_position = 0
modify.registered_name = newName
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
else
usr << "<span class='error'>Invalid name entered.</span>"
to_chat(usr, "<span class='error'>Invalid name entered.</span>")
return
if ("mode")
mode = text2num(href_list["mode_target"])
@@ -497,6 +517,24 @@ var/time_last_changed_position = 0
opened_positions[edit_job_target]--
playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
if ("prioritize_job")
// TOGGLE WHETHER JOB APPEARS AS PRIORITIZED IN THE LOBBY
if(scan && (access_change_ids in scan.access) && !target_dept)
var/priority_target = href_list["job"]
var/datum/job/j = SSjob.GetJob(priority_target)
if(!j)
return 0
var/priority = TRUE
if(j in SSjob.prioritized_jobs)
SSjob.prioritized_jobs -= j
prioritycount--
priority = FALSE
else
SSjob.prioritized_jobs += j
prioritycount++
usr << "<span class='notice'>[j.title] has been successfully [priority ? "prioritized" : "unprioritized"]. Potential employees will notice your request.</span>"
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
if ("print")
if (!( printing ))
printing = 1
@@ -544,6 +582,8 @@ var/time_last_changed_position = 0
target_dept = 2
icon_screen = "idhos"
light_color = LIGHT_COLOR_RED
/obj/machinery/computer/card/minor/cmo
target_dept = 3
icon_screen = "idcmo"
@@ -552,6 +592,10 @@ var/time_last_changed_position = 0
target_dept = 4
icon_screen = "idrd"
light_color = LIGHT_COLOR_PINK
/obj/machinery/computer/card/minor/ce
target_dept = 5
icon_screen = "idce"
light_color = LIGHT_COLOR_YELLOW
+9 -7
View File
@@ -18,6 +18,8 @@
var/loading = 0 // Nice loading text
var/autoprocess = 0
light_color = LIGHT_COLOR_BLUE
/obj/machinery/computer/cloning/Initialize()
..()
updatemodules(TRUE)
@@ -63,7 +65,7 @@
for(var/datum/data/record/R in records)
var/obj/machinery/clonepod/pod = GetAvailableEfficientPod(R.fields["mind"])
if(!pod)
return
@@ -120,25 +122,25 @@
return
W.loc = src
src.diskette = W
user << "<span class='notice'>You insert [W].</span>"
to_chat(user, "<span class='notice'>You insert [W].</span>")
playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, 0)
src.updateUsrDialog()
else if(istype(W,/obj/item/device/multitool))
var/obj/item/device/multitool/P = W
if(istype(P.buffer, /obj/machinery/clonepod))
if(get_area(P.buffer) != get_area(src))
user << "<font color = #666633>-% Cannot link machines across power zones. Buffer cleared %-</font color>"
to_chat(user, "<font color = #666633>-% Cannot link machines across power zones. Buffer cleared %-</font color>")
P.buffer = null
return
user << "<font color = #666633>-% Successfully linked [P.buffer] with [src] %-</font color>"
to_chat(user, "<font color = #666633>-% Successfully linked [P.buffer] with [src] %-</font color>")
var/obj/machinery/clonepod/pod = P.buffer
if(pod.connected)
pod.connected.DetachCloner(pod)
AttachCloner(pod)
else
P.buffer = src
user << "<font color = #666633>-% Successfully stored \ref[P.buffer] [P.buffer.name] in buffer %-</font color>"
to_chat(user, "<font color = #666633>-% Successfully stored \ref[P.buffer] [P.buffer.name] in buffer %-</font color>")
return
else
return ..()
@@ -159,7 +161,7 @@
var/dat = ""
dat += "<a href='byond://?src=\ref[src];refresh=1'>Refresh</a>"
if(scanner && HasEfficientPod() && scanner.scan_level > 2)
if(!autoprocess)
dat += "<a href='byond://?src=\ref[src];task=autoprocess'>Autoprocess</a>"
+25 -23
View File
@@ -35,6 +35,8 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12
var/stat_msg1
var/stat_msg2
light_color = LIGHT_COLOR_BLUE
/obj/machinery/computer/communications/proc/checkCCcooldown()
var/obj/item/weapon/circuitboard/computer/communications/CM = circuit
if(CM.lastTimeUsed + 600 > world.time)
@@ -55,7 +57,7 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12
if(..())
return
if (src.z > ZLEVEL_CENTCOM) //Can only use on centcom and SS13
usr << "<span class='boldannounce'>Unable to establish a connection</span>: \black You're too far away from the station!"
to_chat(usr, "<span class='boldannounce'>Unable to establish a connection</span>: \black You're too far away from the station!")
return
usr.set_machine(src)
@@ -84,7 +86,7 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12
if(src.emagged)
authenticated = 2
auth_id = "Unknown"
M << "<span class='warning'>[src] lets out a quiet alarm as its login is overriden.</span>"
to_chat(M, "<span class='warning'>[src] lets out a quiet alarm as its login is overriden.</span>")
playsound(src, 'sound/machines/terminal_on.ogg', 50, 0)
playsound(src, 'sound/machines/terminal_alert.ogg', 25, 0)
if(prob(25))
@@ -108,7 +110,7 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12
if(tmp_alertlevel > SEC_LEVEL_BLUE) tmp_alertlevel = SEC_LEVEL_BLUE //Cannot engage delta with this
set_security_level(tmp_alertlevel)
if(security_level != old_level)
usr << "<span class='notice'>Authorization confirmed. Modifying security level.</span>"
to_chat(usr, "<span class='notice'>Authorization confirmed. Modifying security level.</span>")
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
//Only notify the admins if an actual change happened
log_game("[key_name(usr)] has changed the security level to [get_security_level()].")
@@ -120,12 +122,12 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12
feedback_inc("alert_comms_blue",1)
tmp_alertlevel = 0
else
usr << "<span class='warning'>You are not authorized to do this!</span>"
to_chat(usr, "<span class='warning'>You are not authorized to do this!</span>")
playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
tmp_alertlevel = 0
state = STATE_DEFAULT
else
usr << "<span class='warning'>You need to swipe your ID!</span>"
to_chat(usr, "<span class='warning'>You need to swipe your ID!</span>")
playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
if("announce")
@@ -136,7 +138,7 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12
if("crossserver")
if(authenticated==2)
if(CM.lastTimeUsed + 600 > world.time)
usr << "<span class='warning'>Arrays recycling. Please stand by.</span>"
to_chat(usr, "<span class='warning'>Arrays recycling. Please stand by.</span>")
playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
return
var/input = stripped_multiline_input(usr, "Please choose a message to transmit to an allied station. Please be aware that this process is very expensive, and abuse will lead to... termination.", "Send a message to an allied station.", "")
@@ -158,12 +160,12 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12
var/datum/map_template/shuttle/S = locate(href_list["chosen_shuttle"]) in shuttles
if(S && istype(S))
if(SSshuttle.emergency.mode != SHUTTLE_RECALL && SSshuttle.emergency.mode != SHUTTLE_IDLE)
usr << "It's a bit late to buy a new shuttle, don't you think?"
to_chat(usr, "It's a bit late to buy a new shuttle, don't you think?")
return
if(SSshuttle.shuttle_purchased)
usr << "A replacement shuttle has already been purchased."
to_chat(usr, "A replacement shuttle has already been purchased.")
else if(!S.prerequisites_met())
usr << "You have not met the requirements for purchasing this shuttle."
to_chat(usr, "You have not met the requirements for purchasing this shuttle.")
else
if(SSshuttle.points >= S.credit_cost)
var/obj/machinery/shuttle_manipulator/M = locate() in machines
@@ -178,9 +180,9 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12
message_admins("[key_name_admin(usr)] purchased [S.name].")
feedback_add_details("shuttle_purchase", S.name)
else
usr << "Something went wrong! The shuttle exchange system seems to be down."
to_chat(usr, "Something went wrong! The shuttle exchange system seems to be down.")
else
usr << "Not enough credits."
to_chat(usr, "Not enough credits.")
if("callshuttle")
src.state = STATE_DEFAULT
@@ -270,14 +272,14 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12
if("MessageCentcomm")
if(src.authenticated==2)
if(!checkCCcooldown())
usr << "<span class='warning'>Arrays recycling. Please stand by.</span>"
to_chat(usr, "<span class='warning'>Arrays recycling. Please stand by.</span>")
return
var/input = stripped_input(usr, "Please choose a message to transmit to Centcom via quantum entanglement. Please be aware that this process is very expensive, and abuse will lead to... termination. Transmission does not guarantee a response.", "Send a message to Centcomm.", "")
if(!input || !(usr in view(1,src)) || !checkCCcooldown())
return
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
Centcomm_announce(input, usr)
usr << "<span class='notice'>Message transmitted to Central Command.</span>"
to_chat(usr, "<span class='notice'>Message transmitted to Central Command.</span>")
log_say("[key_name(usr)] has made a Centcom announcement: [input]")
CM.lastTimeUsed = world.time
@@ -286,7 +288,7 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12
if("MessageSyndicate")
if((src.authenticated==2) && (src.emagged))
if(!checkCCcooldown())
usr << "<span class='warning'>Arrays recycling. Please stand by.</span>"
to_chat(usr, "<span class='warning'>Arrays recycling. Please stand by.</span>")
playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
return
var/input = stripped_input(usr, "Please choose a message to transmit to \[ABNORMAL ROUTING COORDINATES\] via quantum entanglement. Please be aware that this process is very expensive, and abuse will lead to... termination. Transmission does not guarantee a response.", "Send a message to /??????/.", "")
@@ -294,12 +296,12 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12
return
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
Syndicate_announce(input, usr)
usr << "<span class='danger'>SYSERR @l(19833)of(transmit.dm): !@$ MESSAGE TRANSMITTED TO SYNDICATE COMMAND.</span>"
to_chat(usr, "<span class='danger'>SYSERR @l(19833)of(transmit.dm): !@$ MESSAGE TRANSMITTED TO SYNDICATE COMMAND.</span>")
log_say("[key_name(usr)] has made a Syndicate announcement: [input]")
CM.lastTimeUsed = world.time
if("RestoreBackup")
usr << "<span class='notice'>Backup routing data restored!</span>"
to_chat(usr, "<span class='notice'>Backup routing data restored!</span>")
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
src.emagged = 0
src.updateDialog()
@@ -307,13 +309,13 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12
if("nukerequest") //When there's no other way
if(src.authenticated==2)
if(!checkCCcooldown())
usr << "<span class='warning'>Arrays recycling. Please stand by.</span>"
to_chat(usr, "<span class='warning'>Arrays recycling. Please stand by.</span>")
return
var/input = stripped_input(usr, "Please enter the reason for requesting the nuclear self-destruct codes. Misuse of the nuclear request system will not be tolerated under any circumstances. Transmission does not guarantee a response.", "Self Destruct Code Request.","")
if(!input || !(usr in view(1,src)) || !checkCCcooldown())
return
Nuke_request(input, usr)
usr << "<span class='notice'>Request sent.</span>"
to_chat(usr, "<span class='notice'>Request sent.</span>")
log_say("[key_name(usr)] has requested the nuclear codes from Centcomm")
priority_announce("The codes for the on-station nuclear self-destruct have been requested by [usr]. Confirmation or denial of this request will be sent shortly.", "Nuclear Self Destruct Codes Requested",'sound/AI/commandreport.ogg')
CM.lastTimeUsed = world.time
@@ -402,14 +404,14 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12
src.emagged = 1
if(authenticated == 1)
authenticated = 2
user << "<span class='danger'>You scramble the communication routing circuits!</span>"
to_chat(user, "<span class='danger'>You scramble the communication routing circuits!</span>")
playsound(src, 'sound/machines/terminal_alert.ogg', 50, 0)
/obj/machinery/computer/communications/attack_hand(mob/user)
if(..())
return
if (src.z > 6)
user << "<span class='boldannounce'>Unable to establish a connection</span>: \black You're too far away from the station!"
to_chat(user, "<span class='boldannounce'>Unable to establish a connection</span>: \black You're too far away from the station!")
return
user.set_machine(src)
@@ -453,7 +455,7 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12
if (src.authenticated==2)
dat += "<BR><BR><B>Captain Functions</B>"
dat += "<BR>\[ <A HREF='?src=\ref[src];operation=announce'>Make a Captain's Announcement</A> \]"
if(cross_allowed)
if(config.cross_allowed)
dat += "<BR>\[ <A HREF='?src=\ref[src];operation=crossserver'>Send a message to an allied station</A> \]"
dat += "<BR>\[ <A HREF='?src=\ref[src];operation=purchase_menu'>Purchase Shuttle</A> \]"
dat += "<BR>\[ <A HREF='?src=\ref[src];operation=changeseclevel'>Change Alert Level</A> \]"
@@ -657,7 +659,7 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12
/obj/machinery/computer/communications/proc/make_announcement(mob/living/user, is_silicon)
if(!SScommunications.can_announce(user, is_silicon))
user << "Intercomms recharging. Please stand by."
to_chat(user, "Intercomms recharging. Please stand by.")
return
var/input = stripped_input(user, "Please choose a message to announce to the station crew.", "What?")
if(!input || !user.canUseTopic(src))
@@ -692,4 +694,4 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12
/obj/machinery/computer/communications/proc/overrideCooldown()
var/obj/item/weapon/circuitboard/computer/communications/CM = circuit
CM.lastTimeUsed = 0
CM.lastTimeUsed = 0
+5 -5
View File
@@ -73,16 +73,16 @@
/obj/machinery/computer/power_change()
..()
if(stat & NOPOWER)
SetLuminosity(0)
set_light(0)
else
SetLuminosity(brightness_on)
set_light(brightness_on)
update_icon()
return
/obj/machinery/computer/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/weapon/screwdriver) && circuit && !(flags&NODECONSTRUCT))
playsound(src.loc, I.usesound, 50, 1)
user << "<span class='notice'> You start to disconnect the monitor...</span>"
to_chat(user, "<span class='notice'> You start to disconnect the monitor...</span>")
if(do_after(user, 20*I.toolspeed, target = src))
deconstruct(TRUE, user)
else
@@ -124,7 +124,7 @@
A.anchored = 1
if(stat & BROKEN)
if(user)
user << "<span class='notice'>The broken glass falls out.</span>"
to_chat(user, "<span class='notice'>The broken glass falls out.</span>")
else
playsound(src.loc, 'sound/effects/hit_on_shattered_glass.ogg', 70, 1)
new /obj/item/weapon/shard(src.loc)
@@ -133,7 +133,7 @@
A.icon_state = "3"
else
if(user)
user << "<span class='notice'>You disconnect the monitor.</span>"
to_chat(user, "<span class='notice'>You disconnect the monitor.</span>")
A.state = 4
A.icon_state = "4"
circuit = null
+7 -5
View File
@@ -9,6 +9,8 @@
circuit = /obj/item/weapon/circuitboard/computer/crew
var/monitor = null //For VV debugging purposes
light_color = LIGHT_COLOR_BLUE
/obj/machinery/computer/crew/New()
monitor = crewmonitor
return ..()
@@ -242,11 +244,11 @@ var/global/datum/crewmonitor/crewmonitor = new
if (!C) C = locate(/obj/machinery/camera) in urange(15, tile)
if (C)
var/turf/current_loc = AI.eyeobj.loc
addtimer(CALLBACK(src, .proc/update_ai, AI, C, AI.eyeobj.loc), min(30, get_dist(get_turf(C), AI.eyeobj) / 4))
spawn(min(30, get_dist(get_turf(C), AI.eyeobj) / 4))
if (AI && AI.eyeobj && current_loc == AI.eyeobj.loc)
AI.switchCamera(C)
/datum/crewmonitor/proc/update_ai(mob/living/silicon/ai/AI, obj/machinery/camera/C, turf/current_loc)
if (AI && AI.eyeobj && current_loc == AI.eyeobj.loc)
AI.switchCamera(C)
/mob/living/carbon/human/Move()
if (src.w_uniform)
@@ -265,4 +267,4 @@ var/global/datum/crewmonitor/crewmonitor = new
/datum/crewmonitor/proc/sendResources(var/client/client)
send_asset(client, "crewmonitor.js")
send_asset(client, "crewmonitor.css")
SSminimap.send(client)
SSminimap.send(client)
+4 -2
View File
@@ -38,6 +38,8 @@
idle_power_usage = 10
active_power_usage = 400
light_color = LIGHT_COLOR_BLUE
/obj/machinery/computer/scan_consolenew/attackby(obj/item/I, mob/user, params)
if (istype(I, /obj/item/weapon/disk/data)) //INSERT SOME DISKETTES
if (!src.diskette)
@@ -45,7 +47,7 @@
return
I.loc = src
src.diskette = I
user << "<span class='notice'>You insert [I].</span>"
to_chat(user, "<span class='notice'>You insert [I].</span>")
src.updateUsrDialog()
return
else
@@ -572,7 +574,7 @@
viable_occupant.dna.blood_type = buffer_slot["blood_type"]
/obj/machinery/computer/scan_consolenew/proc/on_scanner_close()
connected.occupant << "<span class='notice'>[src] activates!</span>"
to_chat(connected.occupant, "<span class='notice'>[src] activates!</span>")
if(delayed_action)
apply_buffer(delayed_action["action"],delayed_action["buffer"])
delayed_action = null //or make it stick + reset button ?
@@ -13,6 +13,8 @@
var/mob/living/carbon/human/prisoner = null
var/datum/data/record/temporary_record = null
light_color = LIGHT_COLOR_RED
/obj/machinery/computer/gulag_teleporter_computer/New()
..()
addtimer(CALLBACK(src, .proc/scan_machinery), 5)
@@ -29,10 +31,10 @@
return
W.forceMove(src)
id = W
user << "<span class='notice'>You insert [W].</span>"
to_chat(user, "<span class='notice'>You insert [W].</span>")
return
else
user << "<span class='notice'>There's an ID inserted already.</span>"
to_chat(user, "<span class='notice'>There's an ID inserted already.</span>")
return ..()
/obj/machinery/computer/gulag_teleporter_computer/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \
@@ -82,7 +84,7 @@
if(..())
return
if(!allowed(usr))
usr << "<span class='warning'>Access denied.</span>"
to_chat(usr, "<span class='warning'>Access denied.</span>")
return
switch(action)
if("scan_teleporter")
@@ -113,12 +115,12 @@
id.goal = Clamp(new_goal, 0, 1000) //maximum 1000 points
if("toggle_open")
if(teleporter.locked)
usr << "The teleporter is locked"
to_chat(usr, "The teleporter is locked")
return
teleporter.toggle_open()
if("teleporter_lock")
if(teleporter.state_open)
usr << "Close the teleporter before locking!"
to_chat(usr, "Close the teleporter before locking!")
return
teleporter.locked = !teleporter.locked
if("teleport")
@@ -147,7 +149,7 @@
playsound(loc, 'sound/weapons/emitter.ogg', 50, 1)
prisoner.forceMove(get_turf(beacon))
prisoner.Weaken(2) // small travel dizziness
prisoner << "<span class='warning'>The teleportation makes you a little dizzy.</span>"
to_chat(prisoner, "<span class='warning'>The teleportation makes you a little dizzy.</span>")
new /obj/effect/particle_effect/sparks(prisoner.loc)
playsound(src.loc, "sparks", 50, 1)
if(teleporter.locked)
@@ -155,10 +157,3 @@
teleporter.toggle_open()
id = null
temporary_record = null
+7 -7
View File
@@ -10,15 +10,15 @@
if(src.stat & (NOPOWER|BROKEN|MAINT))
return
if(!current)
user << "<span class='caution'>You haven't selected anything to transmit laws to!</span>"
to_chat(user, "<span class='caution'>You haven't selected anything to transmit laws to!</span>")
return
if(!can_upload_to(current))
user << "<span class='caution'>Upload failed!</span> Check to make sure [current.name] is functioning properly."
to_chat(user, "<span class='caution'>Upload failed!</span> Check to make sure [current.name] is functioning properly.")
current = null
return
var/turf/currentloc = get_turf(current)
if(currentloc && user.z != currentloc.z)
user << "<span class='caution'>Upload failed!</span> Unable to establish a connection to [current.name]. You're too far away!"
to_chat(user, "<span class='caution'>Upload failed!</span> Unable to establish a connection to [current.name]. You're too far away!")
current = null
return
M.install(current.laws, user)
@@ -42,9 +42,9 @@
src.current = select_active_ai(user)
if (!src.current)
user << "<span class='caution'>No active AIs detected!</span>"
to_chat(user, "<span class='caution'>No active AIs detected!</span>")
else
user << "[src.current.name] selected for law changes."
to_chat(user, "[src.current.name] selected for law changes.")
/obj/machinery/computer/upload/ai/can_upload_to(mob/living/silicon/ai/A)
if(!A || !isAI(A))
@@ -66,9 +66,9 @@
src.current = select_active_free_borg(user)
if(!src.current)
user << "<span class='caution'>No active unslaved cyborgs detected!</span>"
to_chat(user, "<span class='caution'>No active unslaved cyborgs detected!</span>")
else
user << "[src.current.name] selected for law changes."
to_chat(user, "[src.current.name] selected for law changes.")
/obj/machinery/computer/upload/borg/can_upload_to(mob/living/silicon/robot/B)
if(!B || !iscyborg(B))
+4 -2
View File
@@ -20,13 +20,15 @@
var/sortBy = "name"
var/order = 1 // -1 = Descending - 1 = Ascending
light_color = LIGHT_COLOR_BLUE
/obj/machinery/computer/med_data/attackby(obj/item/O, mob/user, params)
if(istype(O, /obj/item/weapon/card/id) && !scan)
if(!user.drop_item())
return
O.loc = src
scan = O
user << "<span class='notice'>You insert [O].</span>"
to_chat(user, "<span class='notice'>You insert [O].</span>")
else
return ..()
@@ -458,7 +460,7 @@
else if(href_list["del_r2"])
investigate_log("[usr.name] ([usr.key]) has deleted the medical records for [active1.fields["name"]].", "records")
if(active2)
data_core.medical -= active2
qdel(active2)
active2 = null
else if(href_list["d_rec"])
+10 -8
View File
@@ -17,7 +17,7 @@
var/noserver = "<span class='alert'>ALERT: No server detected.</span>"
var/incorrectkey = "<span class='warning'>ALERT: Incorrect decryption key!</span>"
var/defaultmsg = "<span class='notice'>Welcome. Please select an option.</span>"
var/rebootmsg = "<span class='warning'>%$&(£: Critical %$$@ Error // !RestArting! <lOadiNg backUp iNput ouTput> - ?pLeaSe wAit!</span>"
var/rebootmsg = "<span class='warning'>%$&(: Critical %$$@ Error // !RestArting! <lOadiNg backUp iNput ouTput> - ?pLeaSe wAit!</span>"
//Computer properties
var/screen = 0 // 0 = Main menu, 1 = Message Logs, 2 = Hacked screen, 3 = Custom Message
var/hacking = 0 // Is it being hacked into by the AI/Cyborg
@@ -30,10 +30,12 @@
var/customjob = "Admin"
var/custommessage = "This is a test, please ignore."
light_color = LIGHT_COLOR_GREEN
/obj/machinery/computer/message_monitor/attackby(obj/item/weapon/O, mob/living/user, params)
if(istype(O, /obj/item/weapon/screwdriver) && emagged)
//Stops people from just unscrewing the monitor and putting it back to get the console working again.
user << "<span class='warning'>It is too hot to mess with!</span>"
to_chat(user, "<span class='warning'>It is too hot to mess with!</span>")
else
return ..()
@@ -47,12 +49,12 @@
var/obj/item/weapon/paper/monitorkey/MK = new/obj/item/weapon/paper/monitorkey
MK.loc = src.loc
// Will help make emagging the console not so easy to get away with.
MK.info += "<br><br><font color='red'>£%@%(*$%&(£&?*(%&£/{}</font>"
MK.info += "<br><br><font color='red'>%@%(*$%&(&?*(%&/{}</font>"
var/time = 100 * length(src.linkedServer.decryptkey)
addtimer(CALLBACK(src, .proc/UnmagConsole), time)
message = rebootmsg
else
user << "<span class='notice'>A no server error appears on the screen.</span>"
to_chat(user, "<span class='notice'>A no server error appears on the screen.</span>")
/obj/machinery/computer/message_monitor/Initialize()
..()
@@ -225,10 +227,10 @@
/obj/machinery/computer/message_monitor/proc/BruteForce(mob/user)
if(isnull(linkedServer))
user << "<span class='warning'>Could not complete brute-force: Linked Server Disconnected!</span>"
to_chat(user, "<span class='warning'>Could not complete brute-force: Linked Server Disconnected!</span>")
else
var/currentKey = src.linkedServer.decryptkey
user << "<span class='warning'>Brute-force completed! The key is '[currentKey]'.</span>"
to_chat(user, "<span class='warning'>Brute-force completed! The key is '[currentKey]'.</span>")
src.hacking = 0
src.screen = 0 // Return the screen back to normal
@@ -414,7 +416,7 @@
customrecepient.audible_message("\icon[customrecepient] *[customrecepient.ttone]*", null, 3)
if( customrecepient.loc && ishuman(customrecepient.loc) )
var/mob/living/carbon/human/H = customrecepient.loc
H << "\icon[customrecepient] <b>Message from [customsender] ([customjob]), </b>\"[custommessage]\" (<a href='byond://?src=\ref[src];choice=Message;skiprefresh=1;target=\ref[src]'>Reply</a>)"
to_chat(H, "\icon[customrecepient] <b>Message from [customsender] ([customjob]), </b>\"[custommessage]\" (<a href='byond://?src=\ref[src];choice=Message;skiprefresh=1;target=\ref[src]'>Reply</a>)")
log_pda("[usr]/([usr.ckey]) (PDA: [customsender]) sent \"[custommessage]\" to [customrecepient.owner]")
customrecepient.cut_overlays()
customrecepient.add_overlay(image('icons/obj/pda.dmi', "pda-r"))
@@ -427,7 +429,7 @@
customrecepient.audible_message("\icon[customrecepient] *[customrecepient.ttone]*", null, 3)
if( customrecepient.loc && ishuman(customrecepient.loc) )
var/mob/living/carbon/human/H = customrecepient.loc
H << "\icon[customrecepient] <b>Message from [PDARec.owner] ([customjob]), </b>\"[custommessage]\" (<a href='byond://?src=\ref[customrecepient];choice=Message;skiprefresh=1;target=\ref[PDARec]'>Reply</a>)"
to_chat(H, "\icon[customrecepient] <b>Message from [PDARec.owner] ([customjob]), </b>\"[custommessage]\" (<a href='byond://?src=\ref[customrecepient];choice=Message;skiprefresh=1;target=\ref[PDARec]'>Reply</a>)")
log_pda("[usr]/([usr.ckey]) (PDA: [PDARec.owner]) sent \"[custommessage]\" to [customrecepient.owner]")
customrecepient.cut_overlays()
customrecepient.add_overlay(image('icons/obj/pda.dmi', "pda-r"))
@@ -0,0 +1,11 @@
/obj/machinery/computer/shuttle/monastery_shuttle
name = "monastery shuttle console"
desc = "Used to control the monastery shuttle."
circuit = /obj/item/weapon/circuitboard/computer/shuttle/monastery_shuttle
shuttleId = "pod1"
possible_destinations = "monastery_shuttle_asteroid;monastery_shuttle_station"
no_destination_swap = TRUE
/obj/item/weapon/circuitboard/computer/shuttle/monastery_shuttle
name = "Monastery Shuttle (Computer Board)"
build_path = /obj/machinery/computer/shuttle/monastery_shuttle
+1 -1
View File
@@ -134,7 +134,7 @@
/obj/machinery/computer/pod/old/syndicate/attack_hand(mob/user)
if(!allowed(user))
user << "<span class='notice'>Access denied.</span>"
to_chat(user, "<span class='notice'>Access denied.</span>")
return
else
..()
+5 -5
View File
@@ -13,6 +13,8 @@
var/obj/item/weapon/card/id/prisoner/inserted_id
circuit = /obj/item/weapon/circuitboard/computer/prisoner
light_color = LIGHT_COLOR_RED
/obj/machinery/computer/prisoner/attack_hand(mob/user)
if(..())
return
@@ -94,7 +96,7 @@
return
I.loc = src
inserted_id = I
else usr << "<span class='danger'>No valid ID.</span>"
else to_chat(usr, "<span class='danger'>No valid ID.</span>")
else if(inserted_id)
switch(href_list["id"])
if("eject")
@@ -126,7 +128,7 @@
if(src.allowed(usr))
screen = !screen
else
usr << "Unauthorized Access."
to_chat(usr, "Unauthorized Access.")
else if(href_list["warn"])
var/warning = copytext(sanitize(input(usr,"Message:","Enter your message here!","")),1,MAX_MESSAGE_LEN)
@@ -134,11 +136,9 @@
var/obj/item/weapon/implant/I = locate(href_list["warn"]) in tracked_chem_implants
if(I && istype(I) && I.imp_in)
var/mob/living/R = I.imp_in
R << "<span class='italics'>You hear a voice in your head saying: '[warning]'</span>"
to_chat(R, "<span class='italics'>You hear a voice in your head saying: '[warning]'</span>")
log_say("[usr]/[usr.ckey] sent an implant message to [R]/[R.ckey]: '[warning]'")
src.add_fingerprint(usr)
src.updateUsrDialog()
return
+11 -9
View File
@@ -10,6 +10,8 @@
circuit = /obj/item/weapon/circuitboard/computer/robotics
var/temp = null
light_color = LIGHT_COLOR_PINK
/obj/machinery/computer/robotics/proc/can_control(mob/user, mob/living/silicon/robot/R)
if(!istype(R))
return 0
@@ -30,7 +32,7 @@
/obj/machinery/computer/robotics/interact(mob/user)
if (src.z > 6)
user << "<span class='boldannounce'>Unable to establish a connection</span>: \black You're too far away from the station!"
to_chat(user, "<span class='boldannounce'>Unable to establish a connection</span>: \black You're too far away from the station!")
return
user.set_machine(src)
var/dat
@@ -106,18 +108,18 @@
var/choice = input("Are you certain you wish to detonate [R.name]?") in list("Confirm", "Abort")
if(choice == "Confirm" && can_control(usr, R) && !..())
if(R.syndicate && R.emagged)
R << "Extreme danger. Termination codes detected. Scrambling security codes and automatic AI unlink triggered."
to_chat(R, "Extreme danger. Termination codes detected. Scrambling security codes and automatic AI unlink triggered.")
if(R.connected_ai)
R.connected_ai << "<br><br><span class='alert'>ALERT - Cyborg detonation detected: [R.name]</span><br>"
to_chat(R.connected_ai, "<br><br><span class='alert'>ALERT - Cyborg detonation detected: [R.name]</span><br>")
R.ResetSecurityCodes()
else
message_admins("<span class='notice'>[key_name_admin(usr)] (<A HREF='?_src_=holder;adminplayerobservefollow=\ref[usr]'>FLW</A>) detonated [key_name(R, R.client)](<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[R.x];Y=[R.y];Z=[R.z]'>JMP</a>)!</span>")
log_game("\<span class='notice'>[key_name(usr)] detonated [key_name(R)]!</span>")
if(R.connected_ai)
R.connected_ai << "<br><br><span class='alert'>ALERT - Cyborg detonation detected: [R.name]</span><br>"
to_chat(R.connected_ai, "<br><br><span class='alert'>ALERT - Cyborg detonation detected: [R.name]</span><br>")
R.self_destruct()
else
usr << "<span class='danger'>Access Denied.</span>"
to_chat(usr, "<span class='danger'>Access Denied.</span>")
else if (href_list["stopbot"])
if(src.allowed(usr))
@@ -128,12 +130,12 @@
message_admins("<span class='notice'>[key_name_admin(usr)] (<A HREF='?_src_=holder;adminplayerobservefollow=\ref[usr]'>FLW</A>) [R.canmove ? "locked down" : "released"] [key_name(R, R.client)](<A HREF='?_src_=holder;adminplayerobservefollow=\ref[R]'>FLW</A>)!</span>")
log_game("[key_name(usr)] [R.canmove ? "locked down" : "released"] [key_name(R)]!")
R.SetLockdown(!R.lockcharge)
R << "[!R.lockcharge ? "<span class='notice'>Your lockdown has been lifted!" : "<span class='alert'>You have been locked down!"]</span>"
to_chat(R, "[!R.lockcharge ? "<span class='notice'>Your lockdown has been lifted!" : "<span class='alert'>You have been locked down!"]</span>")
if(R.connected_ai)
R.connected_ai << "[!R.lockcharge ? "<span class='notice'>NOTICE - Cyborg lockdown lifted" : "<span class='alert'>ALERT - Cyborg lockdown detected"]: <a href='?src=\ref[R.connected_ai];track=[html_encode(R.name)]'>[R.name]</a></span><br>"
to_chat(R.connected_ai, "[!R.lockcharge ? "<span class='notice'>NOTICE - Cyborg lockdown lifted" : "<span class='alert'>ALERT - Cyborg lockdown detected"]: <a href='?src=\ref[R.connected_ai];track=[html_encode(R.name)]'>[R.name]</a></span><br>")
else
usr << "<span class='danger'>Access Denied.</span>"
to_chat(usr, "<span class='danger'>Access Denied.</span>")
else if (href_list["magbot"])
if((issilicon(usr) && is_special_character(usr)) || IsAdminGhost(usr))
@@ -157,7 +159,7 @@
if(src.allowed(usr))
var/mob/living/simple_animal/drone/D = locate(href_list["killdrone"])
if(D.hacked)
usr << "<span class='danger'>ERROR: [D] is not responding to external commands.</span>"
to_chat(usr, "<span class='danger'>ERROR: [D] is not responding to external commands.</span>")
else
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(3, 1, D)
+5 -10
View File
@@ -1,5 +1,3 @@
/obj/machinery/computer/secure_data//TODO:SANITY
name = "security records console"
desc = "Used to view and edit personnel's security records"
@@ -23,6 +21,7 @@
var/sortBy = "name"
var/order = 1 // -1 = Descending - 1 = Ascending
light_color = LIGHT_COLOR_RED
/obj/machinery/computer/secure_data/attackby(obj/item/O, mob/user, params)
if(istype(O, /obj/item/weapon/card/id))
@@ -31,9 +30,9 @@
return
O.loc = src
scan = O
user << "<span class='notice'>You insert [O].</span>"
to_chat(user, "<span class='notice'>You insert [O].</span>")
else
user << "<span class='warning'>There's already an ID card in the console.</span>"
to_chat(user, "<span class='warning'>There's already an ID card in the console.</span>")
else
return ..()
@@ -42,7 +41,7 @@
if(..())
return
if(src.z > 6)
user << "<span class='boldannounce'>Unable to establish a connection</span>: \black You're too far away from the station!"
to_chat(user, "<span class='boldannounce'>Unable to establish a connection</span>: \black You're too far away from the station!")
return
var/dat
@@ -442,7 +441,7 @@ What a mess.*/
sleep(30)
if((istype(active1, /datum/data/record) && data_core.general.Find(active1)))//make sure the record still exists.
var/obj/item/weapon/photo/photo = active1.fields["photo_front"]
new /obj/item/weapon/poster/legit/wanted(src.loc, photo.img, wanted_name, info)
new /obj/item/weapon/poster/wanted(src.loc, photo.img, wanted_name, info)
printing = 0
//RECORD DELETE
@@ -703,7 +702,6 @@ What a mess.*/
if("Delete Record (Security) Execute")
investigate_log("[usr.name] ([usr.key]) has deleted the security records for [active1.fields["name"]].", "records")
if(active2)
data_core.security -= active2
qdel(active2)
active2 = null
@@ -712,15 +710,12 @@ What a mess.*/
investigate_log("[usr.name] ([usr.key]) has deleted all records for [active1.fields["name"]].", "records")
for(var/datum/data/record/R in data_core.medical)
if((R.fields["name"] == active1.fields["name"] || R.fields["id"] == active1.fields["id"]))
data_core.medical -= R
qdel(R)
break
data_core.general -= active1
qdel(active1)
active1 = null
if(active2)
data_core.security -= active2
qdel(active2)
active2 = null
else
@@ -6,6 +6,8 @@
circuit = /obj/item/weapon/circuitboard/computer/stationalert
var/alarms = list("Fire" = list(), "Atmosphere" = list(), "Power" = list())
light_color = LIGHT_COLOR_CYAN
/obj/machinery/computer/station_alert/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \
datum/tgui/master_ui = null, datum/ui_state/state = default_state)
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
@@ -80,4 +82,4 @@
if(L.len)
active_alarms = TRUE
if(active_alarms)
add_overlay("alert:2")
add_overlay("alert:2")
@@ -11,6 +11,8 @@ var/list/possible_uplinker_IDs = list("Alfa","Bravo","Charlie","Delta","Echo","F
clockwork = TRUE //it'd look weird, at least if ratvar ever got there
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF
light_color = LIGHT_COLOR_RED
/////////////////////////////////////////////
/obj/machinery/computer/telecrystals/uplinker
name = "\improper Telecrystal upload/receive station"
@@ -32,7 +34,7 @@ var/list/possible_uplinker_IDs = list("Alfa","Bravo","Charlie","Delta","Echo","F
/obj/machinery/computer/telecrystals/uplinker/attackby(obj/item/O, mob/user, params)
if(uplinkholder)
user << "<span class='notice'>The [src] already has an uplink in it.</span>"
to_chat(user, "<span class='notice'>The [src] already has an uplink in it.</span>")
return
if(O.hidden_uplink)
var/obj/item/I = user.get_active_held_item()
@@ -44,7 +46,7 @@ var/list/possible_uplinker_IDs = list("Alfa","Bravo","Charlie","Delta","Echo","F
update_icon()
updateUsrDialog()
else
user << "<span class='notice'>The [O] doesn't appear to be an uplink...</span>"
to_chat(user, "<span class='notice'>The [O] doesn't appear to be an uplink...</span>")
/obj/machinery/computer/telecrystals/uplinker/update_icon()
..()