gonga
ogogga
This commit is contained in:
@@ -3004,7 +3004,7 @@
|
||||
/turf/open/floor/plasteel/showroomfloor,
|
||||
/area/security/warden)
|
||||
"agp" = (
|
||||
/obj/machinery/computer/prisoner,
|
||||
/obj/machinery/computer/prisoner/management,
|
||||
/turf/open/floor/plasteel/showroomfloor,
|
||||
/area/security/warden)
|
||||
"agq" = (
|
||||
@@ -4591,7 +4591,7 @@
|
||||
/turf/open/space,
|
||||
/area/solar/port/fore)
|
||||
"ajr" = (
|
||||
/obj/machinery/computer/gulag_teleporter_computer,
|
||||
/obj/machinery/computer/prisoner/gulag_teleporter_computer,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/security/processing)
|
||||
"ajs" = (
|
||||
@@ -19602,7 +19602,7 @@
|
||||
/turf/closed/wall,
|
||||
/area/bridge)
|
||||
"aTR" = (
|
||||
/obj/machinery/computer/prisoner,
|
||||
/obj/machinery/computer/prisoner/management,
|
||||
/obj/effect/turf_decal/tile/red{
|
||||
dir = 1
|
||||
},
|
||||
|
||||
@@ -4503,7 +4503,7 @@
|
||||
/turf/open/floor/plasteel,
|
||||
/area/security/checkpoint)
|
||||
"anx" = (
|
||||
/obj/machinery/computer/prisoner{
|
||||
/obj/machinery/computer/prisoner/management{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/status_display{
|
||||
@@ -36400,7 +36400,7 @@
|
||||
/turf/open/floor/plasteel/grimy,
|
||||
/area/crew_quarters/heads/hos)
|
||||
"boc" = (
|
||||
/obj/machinery/computer/prisoner{
|
||||
/obj/machinery/computer/prisoner/management{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/plasteel/grimy,
|
||||
@@ -38706,7 +38706,7 @@
|
||||
/turf/open/floor/plasteel/grimy,
|
||||
/area/crew_quarters/heads/hos)
|
||||
"brE" = (
|
||||
/obj/machinery/computer/prisoner{
|
||||
/obj/machinery/computer/prisoner/management{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
||||
@@ -39610,7 +39610,7 @@
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/security/execution/transfer)
|
||||
"bth" = (
|
||||
/obj/machinery/computer/gulag_teleporter_computer{
|
||||
/obj/machinery/computer/prisoner/gulag_teleporter_computer{
|
||||
dir = 1
|
||||
},
|
||||
/obj/structure/disposalpipe/segment{
|
||||
@@ -42723,7 +42723,7 @@
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/bridge)
|
||||
"byk" = (
|
||||
/obj/machinery/computer/prisoner,
|
||||
/obj/machinery/computer/prisoner/management,
|
||||
/obj/effect/turf_decal/tile/red{
|
||||
dir = 1
|
||||
},
|
||||
@@ -56938,7 +56938,7 @@
|
||||
/turf/open/floor/plasteel,
|
||||
/area/security/warden)
|
||||
"bTh" = (
|
||||
/obj/machinery/computer/prisoner{
|
||||
/obj/machinery/computer/prisoner/management{
|
||||
dir = 8
|
||||
},
|
||||
/obj/structure/cable/white{
|
||||
@@ -125917,7 +125917,7 @@
|
||||
/turf/open/floor/plasteel,
|
||||
/area/security/checkpoint/escape)
|
||||
"egj" = (
|
||||
/obj/machinery/computer/prisoner{
|
||||
/obj/machinery/computer/prisoner/management{
|
||||
dir = 1
|
||||
},
|
||||
/obj/structure/cable/white{
|
||||
|
||||
@@ -2017,7 +2017,7 @@
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/crew_quarters/heads/hos)
|
||||
"aeu" = (
|
||||
/obj/machinery/computer/prisoner,
|
||||
/obj/machinery/computer/prisoner/management,
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/crew_quarters/heads/hos)
|
||||
"aev" = (
|
||||
@@ -8416,7 +8416,7 @@
|
||||
/turf/open/floor/plating,
|
||||
/area/security/warden)
|
||||
"apI" = (
|
||||
/obj/machinery/computer/prisoner{
|
||||
/obj/machinery/computer/prisoner/management{
|
||||
dir = 4
|
||||
},
|
||||
/obj/structure/cable/yellow{
|
||||
@@ -10514,7 +10514,7 @@
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/port/fore)
|
||||
"atK" = (
|
||||
/obj/machinery/computer/gulag_teleporter_computer{
|
||||
/obj/machinery/computer/prisoner/gulag_teleporter_computer{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
@@ -30781,7 +30781,7 @@
|
||||
/obj/structure/cable/yellow{
|
||||
icon_state = "2-4"
|
||||
},
|
||||
/obj/machinery/computer/prisoner,
|
||||
/obj/machinery/computer/prisoner/management,
|
||||
/obj/effect/turf_decal/tile/red{
|
||||
dir = 1
|
||||
},
|
||||
|
||||
@@ -4897,7 +4897,7 @@
|
||||
/turf/open/floor/plasteel/showroomfloor,
|
||||
/area/security/warden)
|
||||
"amT" = (
|
||||
/obj/machinery/computer/prisoner,
|
||||
/obj/machinery/computer/prisoner/management,
|
||||
/obj/machinery/airalarm{
|
||||
pixel_y = 22
|
||||
},
|
||||
@@ -6072,7 +6072,7 @@
|
||||
/turf/open/floor/plating,
|
||||
/area/security/brig)
|
||||
"apF" = (
|
||||
/obj/machinery/computer/gulag_teleporter_computer{
|
||||
/obj/machinery/computer/prisoner/gulag_teleporter_computer{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
@@ -7048,7 +7048,7 @@
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/bridge)
|
||||
"arR" = (
|
||||
/obj/machinery/computer/prisoner,
|
||||
/obj/machinery/computer/prisoner/management,
|
||||
/obj/effect/turf_decal/tile/red{
|
||||
dir = 1
|
||||
},
|
||||
|
||||
@@ -523,7 +523,7 @@
|
||||
/turf/open/floor/plasteel,
|
||||
/area/science)
|
||||
"bC" = (
|
||||
/obj/machinery/computer/gulag_teleporter_computer{
|
||||
/obj/machinery/computer/prisoner/gulag_teleporter_computer{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
|
||||
@@ -3864,7 +3864,7 @@
|
||||
/turf/open/floor/plasteel,
|
||||
/area/centcom/control)
|
||||
"jS" = (
|
||||
/obj/machinery/computer/prisoner,
|
||||
/obj/machinery/computer/prisoner/management,
|
||||
/obj/effect/turf_decal/stripes/line,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/centcom/control)
|
||||
@@ -5857,7 +5857,7 @@
|
||||
/turf/open/floor/plasteel,
|
||||
/area/centcom/control)
|
||||
"nY" = (
|
||||
/obj/machinery/computer/prisoner{
|
||||
/obj/machinery/computer/prisoner/management{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
@@ -10495,7 +10495,7 @@
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/centcom/control)
|
||||
"yv" = (
|
||||
/obj/machinery/computer/prisoner{
|
||||
/obj/machinery/computer/prisoner/management{
|
||||
dir = 1
|
||||
},
|
||||
/obj/machinery/light,
|
||||
|
||||
@@ -118,6 +118,7 @@
|
||||
#define TRAIT_LAW_ENFORCEMENT_METABOLISM "law-enforcement-metabolism"
|
||||
#define TRAIT_STRONG_GRABBER "strong_grabber"
|
||||
#define TRAIT_CALCIUM_HEALER "calcium_healer"
|
||||
#define TRAIT_CAPTAIN_METABOLISM "captain-metabolism"
|
||||
|
||||
//non-mob traits
|
||||
#define TRAIT_PARALYSIS "paralysis" //Used for limb-based paralysis, where replacing the limb will fix it
|
||||
@@ -203,4 +204,4 @@
|
||||
#define FLIGHTSUIT_TRAIT "flightsuit"
|
||||
#define LOCKED_HELMET_TRAIT "locked-helmet"
|
||||
#define NINJA_SUIT_TRAIT "ninja-suit"
|
||||
#define ANTI_DROP_IMPLANT_TRAIT "anti-drop-implant"
|
||||
#define ANTI_DROP_IMPLANT_TRAIT "anti-drop-implant"
|
||||
|
||||
@@ -113,6 +113,11 @@ Class Procs:
|
||||
var/atom/movable/occupant = null
|
||||
var/speed_process = FALSE // Process as fast as possible?
|
||||
var/obj/item/circuitboard/circuit // Circuit to be created and inserted when the machinery is created
|
||||
var/obj/item/card/id/inserted_scan_id
|
||||
var/obj/item/card/id/inserted_modify_id
|
||||
var/list/region_access = null // For the identification console (card.dm)
|
||||
var/list/head_subordinates = null // For the identification console (card.dm)
|
||||
var/authenticated = 0 // For the identification console (card.dm)
|
||||
|
||||
var/interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN | INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OPEN_SILICON | INTERACT_MACHINE_SET_MACHINE
|
||||
|
||||
@@ -131,7 +136,7 @@ Class Procs:
|
||||
else
|
||||
START_PROCESSING(SSfastprocess, src)
|
||||
power_change()
|
||||
AddComponent(/datum/component/redirect, list(COMSIG_ENTER_AREA = CALLBACK(src, .proc/power_change)))
|
||||
RegisterSignal(src, COMSIG_ENTER_AREA, .proc/power_change)
|
||||
|
||||
if (occupant_typecache)
|
||||
occupant_typecache = typecacheof(occupant_typecache)
|
||||
@@ -143,6 +148,10 @@ Class Procs:
|
||||
else
|
||||
STOP_PROCESSING(SSfastprocess, src)
|
||||
dropContents()
|
||||
if(length(component_parts))
|
||||
for(var/atom/A in component_parts)
|
||||
qdel(A)
|
||||
component_parts.Cut()
|
||||
return ..()
|
||||
|
||||
/obj/machinery/proc/locate_machinery()
|
||||
@@ -179,12 +188,15 @@ Class Procs:
|
||||
L.update_canmove()
|
||||
occupant = null
|
||||
|
||||
/obj/machinery/proc/can_be_occupant(atom/movable/am)
|
||||
return occupant_typecache ? is_type_in_typecache(am, occupant_typecache) : isliving(am)
|
||||
|
||||
/obj/machinery/proc/close_machine(atom/movable/target = null)
|
||||
state_open = FALSE
|
||||
density = TRUE
|
||||
if(!target)
|
||||
for(var/am in loc)
|
||||
if (!(occupant_typecache ? is_type_in_typecache(am, occupant_typecache) : isliving(am)))
|
||||
if (!(can_be_occupant(am)))
|
||||
continue
|
||||
var/atom/movable/AM = am
|
||||
if(AM.has_buckled_mobs())
|
||||
@@ -311,6 +323,7 @@ Class Procs:
|
||||
spawn_frame(disassembled)
|
||||
for(var/obj/item/I in component_parts)
|
||||
I.forceMove(loc)
|
||||
component_parts.Cut()
|
||||
qdel(src)
|
||||
|
||||
/obj/machinery/proc/spawn_frame(disassembled)
|
||||
@@ -348,8 +361,8 @@ Class Procs:
|
||||
panel_open = FALSE
|
||||
icon_state = icon_state_closed
|
||||
to_chat(user, "<span class='notice'>You close the maintenance hatch of [src].</span>")
|
||||
return 1
|
||||
return 0
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/obj/machinery/proc/default_change_direction_wrench(mob/user, obj/item/I)
|
||||
if(panel_open && I.tool_behaviour == TOOL_WRENCH)
|
||||
@@ -401,7 +414,7 @@ Class Procs:
|
||||
var/obj/item/circuitboard/machine/CB = locate(/obj/item/circuitboard/machine) in component_parts
|
||||
var/P
|
||||
if(W.works_from_distance)
|
||||
display_parts(user)
|
||||
to_chat(user, display_parts(user))
|
||||
for(var/obj/item/A in component_parts)
|
||||
for(var/D in CB.req_components)
|
||||
if(ispath(A.type, D))
|
||||
@@ -429,34 +442,38 @@ Class Procs:
|
||||
break
|
||||
RefreshParts()
|
||||
else
|
||||
display_parts(user)
|
||||
to_chat(user, display_parts(user))
|
||||
if(shouldplaysound)
|
||||
W.play_rped_sound()
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/obj/machinery/proc/display_parts(mob/user)
|
||||
to_chat(user, "<span class='notice'>It contains the following parts:</span>")
|
||||
. = list()
|
||||
. += "<span class='notice'>It contains the following parts:</span>"
|
||||
for(var/obj/item/C in component_parts)
|
||||
to_chat(user, "<span class='notice'>[icon2html(C, user)] \A [C].</span>")
|
||||
. += "<span class='notice'>[icon2html(C, user)] \A [C].</span>"
|
||||
. = jointext(., "")
|
||||
|
||||
/obj/machinery/examine(mob/user)
|
||||
..()
|
||||
. = ..()
|
||||
if(stat & BROKEN)
|
||||
to_chat(user, "<span class='notice'>It looks broken and non-functional.</span>")
|
||||
. += "<span class='notice'>It looks broken and non-functional.</span>"
|
||||
if(!(resistance_flags & INDESTRUCTIBLE))
|
||||
if(resistance_flags & ON_FIRE)
|
||||
to_chat(user, "<span class='warning'>It's on fire!</span>")
|
||||
. += "<span class='warning'>It's on fire!</span>"
|
||||
var/healthpercent = (obj_integrity/max_integrity) * 100
|
||||
switch(healthpercent)
|
||||
if(50 to 99)
|
||||
to_chat(user, "It looks slightly damaged.")
|
||||
. += "It looks slightly damaged."
|
||||
if(25 to 50)
|
||||
to_chat(user, "It appears heavily damaged.")
|
||||
. += "It appears heavily damaged."
|
||||
if(0 to 25)
|
||||
to_chat(user, "<span class='warning'>It's falling apart!</span>")
|
||||
. += "<span class='warning'>It's falling apart!</span>"
|
||||
if(user.research_scanner && component_parts)
|
||||
display_parts(user)
|
||||
. += display_parts(user, TRUE)
|
||||
if(inserted_scan_id || inserted_modify_id)
|
||||
. += "<span class='notice'>Alt-click to eject the ID card.</span>"
|
||||
|
||||
//called on machinery construction (i.e from frame to machinery) but not on initialization
|
||||
/obj/machinery/proc/on_construction()
|
||||
@@ -490,3 +507,72 @@ Class Procs:
|
||||
. = . % 9
|
||||
AM.pixel_x = -8 + ((.%3)*8)
|
||||
AM.pixel_y = -8 + (round( . / 3)*8)
|
||||
|
||||
/obj/machinery/proc/id_insert_scan(mob/user, obj/item/card/id/I)
|
||||
I = user.get_active_held_item()
|
||||
if(istype(I))
|
||||
if(inserted_scan_id)
|
||||
to_chat(user, "<span class='warning'>There's already an ID card in the console!</span>")
|
||||
return
|
||||
if(!user.transferItemToLoc(I, src))
|
||||
return
|
||||
inserted_scan_id = I
|
||||
user.visible_message("<span class='notice'>[user] inserts an ID card into the console.</span>", \
|
||||
"<span class='notice'>You insert the ID card into the console.</span>")
|
||||
playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, FALSE)
|
||||
updateUsrDialog()
|
||||
|
||||
/obj/machinery/proc/id_eject_scan(mob/user)
|
||||
if(!inserted_scan_id)
|
||||
to_chat(user, "<span class='warning'>There's no ID card in the console!</span>")
|
||||
return
|
||||
if(inserted_scan_id)
|
||||
inserted_scan_id.forceMove(drop_location())
|
||||
if(!issilicon(user) && Adjacent(user))
|
||||
user.put_in_hands(inserted_scan_id)
|
||||
inserted_scan_id = null
|
||||
user.visible_message("<span class='notice'>[user] gets an ID card from the console.</span>", \
|
||||
"<span class='notice'>You get the ID card from the console.</span>")
|
||||
playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, FALSE)
|
||||
updateUsrDialog()
|
||||
|
||||
/obj/machinery/proc/id_eject_modify(mob/user)
|
||||
if(inserted_modify_id)
|
||||
GLOB.data_core.manifest_modify(inserted_modify_id.registered_name, inserted_modify_id.assignment)
|
||||
inserted_modify_id.update_label()
|
||||
inserted_modify_id.forceMove(drop_location())
|
||||
if(!issilicon(user) && Adjacent(user))
|
||||
user.put_in_hands(inserted_modify_id)
|
||||
user.visible_message("<span class='notice'>[user] gets an ID card from the console.</span>", \
|
||||
"<span class='notice'>You get the ID card from the console.</span>")
|
||||
playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, FALSE)
|
||||
inserted_modify_id = null
|
||||
region_access = null
|
||||
head_subordinates = null
|
||||
updateUsrDialog()
|
||||
|
||||
/obj/machinery/proc/id_insert_modify(mob/user)
|
||||
var/obj/item/card/id/I = user.get_active_held_item()
|
||||
if(istype(I))
|
||||
if(inserted_modify_id)
|
||||
to_chat(user, "<span class='warning'>There's already an ID card in the console!</span>")
|
||||
return
|
||||
if(!user.transferItemToLoc(I, src))
|
||||
return
|
||||
inserted_modify_id = I
|
||||
user.visible_message("<span class='notice'>[user] inserts an ID card into the console.</span>", \
|
||||
"<span class='notice'>You insert the ID card into the console.</span>")
|
||||
playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, FALSE)
|
||||
updateUsrDialog()
|
||||
|
||||
/obj/machinery/AltClick(mob/user)
|
||||
if(!user.canUseTopic(src, !issilicon(user)) || !is_operational())
|
||||
return
|
||||
if(inserted_modify_id)
|
||||
id_eject_modify(user)
|
||||
authenticated = FALSE
|
||||
return
|
||||
if(inserted_scan_id)
|
||||
id_eject_scan(user)
|
||||
authenticated = FALSE
|
||||
return
|
||||
|
||||
@@ -11,7 +11,6 @@
|
||||
var/list/result_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()
|
||||
|
||||
@@ -13,11 +13,8 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
|
||||
circuit = /obj/item/circuitboard/computer/card
|
||||
var/obj/item/card/id/scan = null
|
||||
var/obj/item/card/id/modify = null
|
||||
var/authenticated = 0
|
||||
var/mode = 0
|
||||
var/printing = null
|
||||
var/list/region_access = null
|
||||
var/list/head_subordinates = null
|
||||
var/target_dept = 0 //Which department this computer has access to. 0=all departments
|
||||
|
||||
//Cooldown for closing positions in seconds
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
icon_keyboard = "tech_key"
|
||||
req_access = list(ACCESS_HEADS)
|
||||
circuit = /obj/item/circuitboard/computer/communications
|
||||
var/authenticated = 0
|
||||
var/auth_id = "Unknown" //Who is currently logged in?
|
||||
var/list/datum/comm_message/messages = list()
|
||||
var/datum/comm_message/currmsg
|
||||
|
||||
@@ -7,13 +7,10 @@
|
||||
icon_keyboard = "med_key"
|
||||
req_one_access = list(ACCESS_MEDICAL, ACCESS_FORENSICS_LOCKERS)
|
||||
circuit = /obj/item/circuitboard/computer/med_data
|
||||
var/obj/item/card/id/scan = null
|
||||
var/authenticated = null
|
||||
var/rank = null
|
||||
var/screen = null
|
||||
var/datum/data/record/active1
|
||||
var/datum/data/record/active2
|
||||
var/a_id = null
|
||||
var/temp = null
|
||||
var/printing = null
|
||||
//Sorting Variables
|
||||
@@ -25,24 +22,22 @@
|
||||
/obj/machinery/computer/med_data/syndie
|
||||
icon_keyboard = "syndie_key"
|
||||
|
||||
/obj/machinery/computer/med_data/attackby(obj/item/O, mob/user, params)
|
||||
if(istype(O, /obj/item/card/id) && !scan)
|
||||
if(!user.transferItemToLoc(O, src))
|
||||
return
|
||||
scan = O
|
||||
to_chat(user, "<span class='notice'>You insert [O].</span>")
|
||||
/obj/machinery/computer/med_data/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/card/id))
|
||||
id_insert_scan(user)
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/machinery/computer/med_data/ui_interact(mob/user)
|
||||
. = ..()
|
||||
if(isliving(user))
|
||||
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, FALSE)
|
||||
var/dat
|
||||
if(temp)
|
||||
dat = text("<TT>[temp]</TT><BR><BR><A href='?src=[REF(src)];temp=1'>Clear Screen</A>")
|
||||
else
|
||||
dat = text("Confirm Identity: <A href='?src=[REF(src)];scan=1'>[]</A><HR>", (src.scan ? text("[]", src.scan.name) : "----------"))
|
||||
if(src.authenticated)
|
||||
switch(src.screen)
|
||||
if(authenticated)
|
||||
switch(screen)
|
||||
if(1)
|
||||
dat += {"
|
||||
<A href='?src=[REF(src)];search=1'>Search Records</A>
|
||||
@@ -116,7 +111,7 @@
|
||||
dat += "<td><a href='?src=[REF(src)];field=show_photo_front'><img src=photo_front height=80 width=80 border=4></a></td>"
|
||||
dat += "<td><a href='?src=[REF(src)];field=show_photo_side'><img src=photo_side height=80 width=80 border=4></a></td></tr>"
|
||||
dat += "<tr><td>ID:</td><td>[active1.fields["id"]]</td></tr>"
|
||||
dat += "<tr><td>Sex:</td><td><A href='?src=[REF(src)];field=sex'> [active1.fields["sex"]] </A></td></tr>"
|
||||
dat += "<tr><td>Gender:</td><td><A href='?src=[REF(src)];field=gender'> [active1.fields["gender"]] </A></td></tr>"
|
||||
dat += "<tr><td>Age:</td><td><A href='?src=[REF(src)];field=age'> [active1.fields["age"]] </A></td></tr>"
|
||||
dat += "<tr><td>Species:</td><td><A href='?src=[REF(src)];field=species'> [active1.fields["species"]] </A></td></tr>"
|
||||
dat += "<tr><td>Fingerprint:</td><td><A href='?src=[REF(src)];field=fingerprint'> [active1.fields["fingerprint"]] </A></td></tr>"
|
||||
@@ -141,7 +136,7 @@
|
||||
|
||||
dat += "<tr><td><br><b><font size='4'>Comments/Log</font></b></td></tr>"
|
||||
var/counter = 1
|
||||
while(src.active2.fields[text("com_[]", counter)])
|
||||
while(active2.fields[text("com_[]", counter)])
|
||||
dat += "<tr><td>[active2.fields[text("com_[]", counter)]]</td></tr><tr><td><A href='?src=[REF(src)];del_c=[counter]'>Delete Entry</A></td></tr>"
|
||||
counter++
|
||||
dat += "<tr><td><A href='?src=[REF(src)];add_c=1'>Add Entry</A></td></tr>"
|
||||
@@ -169,7 +164,7 @@
|
||||
dat += "<br><b>Medical Robots:</b>"
|
||||
var/bdat = null
|
||||
for(var/mob/living/simple_animal/bot/medbot/M in GLOB.alive_mob_list)
|
||||
if(M.z != src.z)
|
||||
if(M.z != z)
|
||||
continue //only find medibots on the same z-level as the computer
|
||||
var/turf/bl = get_turf(M)
|
||||
if(bl) //if it can't find a turf for the medibot, then it probably shouldn't be showing up
|
||||
@@ -189,7 +184,7 @@
|
||||
dat += "<A href='?src=[REF(src)];login=1'>{Log In}</A>"
|
||||
var/datum/browser/popup = new(user, "med_rec", "Medical Records Console", 600, 400)
|
||||
popup.set_content(dat)
|
||||
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
|
||||
popup.set_title_image(user.browse_rsc_icon(icon, icon_state))
|
||||
popup.open()
|
||||
|
||||
/obj/machinery/computer/med_data/Topic(href, href_list)
|
||||
@@ -197,29 +192,20 @@
|
||||
if(.)
|
||||
return .
|
||||
if(!(active1 in GLOB.data_core.general))
|
||||
src.active1 = null
|
||||
active1 = null
|
||||
if(!(active2 in GLOB.data_core.medical))
|
||||
src.active2 = null
|
||||
active2 = null
|
||||
|
||||
if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc)) || issilicon(usr) || IsAdminGhost(usr))
|
||||
usr.set_machine(src)
|
||||
if(href_list["temp"])
|
||||
src.temp = null
|
||||
if(href_list["scan"])
|
||||
if(src.scan)
|
||||
usr.put_in_hands(scan)
|
||||
scan = null
|
||||
else
|
||||
var/obj/item/I = usr.is_holding_item_of_type(/obj/item/card/id)
|
||||
if(I)
|
||||
if(!usr.transferItemToLoc(I, src))
|
||||
return
|
||||
src.scan = I
|
||||
temp = null
|
||||
else if(href_list["logout"])
|
||||
src.authenticated = null
|
||||
src.screen = null
|
||||
src.active1 = null
|
||||
src.active2 = null
|
||||
authenticated = null
|
||||
screen = null
|
||||
active1 = null
|
||||
active2 = null
|
||||
playsound(src, 'sound/machines/terminal_off.ogg', 50, FALSE)
|
||||
else if(href_list["choice"])
|
||||
// SORTING!
|
||||
if(href_list["choice"] == "Sorting")
|
||||
@@ -234,34 +220,37 @@
|
||||
sortBy = href_list["sort"]
|
||||
order = initial(order)
|
||||
else if(href_list["login"])
|
||||
if(issilicon(usr))
|
||||
src.active1 = null
|
||||
src.active2 = null
|
||||
src.authenticated = 1
|
||||
src.rank = "AI"
|
||||
src.screen = 1
|
||||
else if(IsAdminGhost(usr))
|
||||
src.active1 = null
|
||||
src.active2 = null
|
||||
src.authenticated = 1
|
||||
src.rank = "Central Command"
|
||||
src.screen = 1
|
||||
else if(istype(src.scan, /obj/item/card/id))
|
||||
src.active1 = null
|
||||
src.active2 = null
|
||||
if(src.check_access(src.scan))
|
||||
src.authenticated = src.scan.registered_name
|
||||
src.rank = src.scan.assignment
|
||||
src.screen = 1
|
||||
if(src.authenticated)
|
||||
|
||||
var/mob/M = usr
|
||||
var/obj/item/card/id/I = M.get_idcard(TRUE)
|
||||
if(issilicon(M))
|
||||
active1 = null
|
||||
active2 = null
|
||||
authenticated = 1
|
||||
rank = "AI"
|
||||
screen = 1
|
||||
else if(IsAdminGhost(M))
|
||||
active1 = null
|
||||
active2 = null
|
||||
authenticated = 1
|
||||
rank = "Central Command"
|
||||
screen = 1
|
||||
else if(istype(I) && check_access(I))
|
||||
active1 = null
|
||||
active2 = null
|
||||
authenticated = I.registered_name
|
||||
rank = I.assignment
|
||||
screen = 1
|
||||
else
|
||||
to_chat(usr, "<span class='danger'>Unauthorized access.</span>")
|
||||
playsound(src, 'sound/machines/terminal_on.ogg', 50, FALSE)
|
||||
if(authenticated)
|
||||
if(href_list["screen"])
|
||||
src.screen = text2num(href_list["screen"])
|
||||
if(src.screen < 1)
|
||||
src.screen = 1
|
||||
screen = text2num(href_list["screen"])
|
||||
if(screen < 1)
|
||||
screen = 1
|
||||
|
||||
src.active1 = null
|
||||
src.active2 = null
|
||||
active1 = null
|
||||
active2 = null
|
||||
|
||||
else if(href_list["vir"])
|
||||
var/type = href_list["vir"]
|
||||
@@ -269,7 +258,7 @@
|
||||
var/AfS = ""
|
||||
for(var/mob/M in Dis.viable_mobtypes)
|
||||
AfS += " [initial(M.name)];"
|
||||
src.temp = {"<b>Name:</b> [Dis.name]
|
||||
temp = {"<b>Name:</b> [Dis.name]
|
||||
<BR><b>Number of stages:</b> [Dis.max_stages]
|
||||
<BR><b>Spread:</b> [Dis.spread_text] Transmission
|
||||
<BR><b>Possible Cure:</b> [(Dis.cure_text||"none")]
|
||||
@@ -280,110 +269,112 @@
|
||||
<BR><b>Severity:</b> [Dis.severity]"}
|
||||
|
||||
else if(href_list["del_all"])
|
||||
src.temp = "Are you sure you wish to delete all records?<br>\n\t<A href='?src=[REF(src)];temp=1;del_all2=1'>Yes</A><br>\n\t<A href='?src=[REF(src)];temp=1'>No</A><br>"
|
||||
temp = "Are you sure you wish to delete all records?<br>\n\t<A href='?src=[REF(src)];temp=1;del_all2=1'>Yes</A><br>\n\t<A href='?src=[REF(src)];temp=1'>No</A><br>"
|
||||
|
||||
else if(href_list["del_all2"])
|
||||
investigate_log("[key_name(usr)] has deleted all medical records.", INVESTIGATE_RECORDS)
|
||||
GLOB.data_core.medical.Cut()
|
||||
src.temp = "All records deleted."
|
||||
temp = "All records deleted."
|
||||
|
||||
else if(href_list["field"])
|
||||
var/a1 = src.active1
|
||||
var/a2 = src.active2
|
||||
var/a1 = active1
|
||||
var/a2 = active2
|
||||
switch(href_list["field"])
|
||||
if("fingerprint")
|
||||
if(active1)
|
||||
var/t1 = stripped_input("Please input fingerprint hash:", "Med. records", src.active1.fields["fingerprint"], null)
|
||||
var/t1 = stripped_input("Please input fingerprint hash:", "Med. records", active1.fields["fingerprint"], null)
|
||||
if(!canUseMedicalRecordsConsole(usr, t1, a1))
|
||||
return
|
||||
src.active1.fields["fingerprint"] = t1
|
||||
if("sex")
|
||||
active1.fields["fingerprint"] = t1
|
||||
if("gender")
|
||||
if(active1)
|
||||
if(src.active1.fields["sex"] == "Male")
|
||||
src.active1.fields["sex"] = "Female"
|
||||
if(active1.fields["gender"] == "Male")
|
||||
active1.fields["gender"] = "Female"
|
||||
else if(active1.fields["gender"] == "Female")
|
||||
active1.fields["gender"] = "Other"
|
||||
else
|
||||
src.active1.fields["sex"] = "Male"
|
||||
active1.fields["gender"] = "Male"
|
||||
if("age")
|
||||
if(active1)
|
||||
var/t1 = input("Please input age:", "Med. records", src.active1.fields["age"], null) as num
|
||||
var/t1 = input("Please input age:", "Med. records", active1.fields["age"], null) as num
|
||||
if(!canUseMedicalRecordsConsole(usr, t1, a1))
|
||||
return
|
||||
src.active1.fields["age"] = t1
|
||||
active1.fields["age"] = t1
|
||||
if("species")
|
||||
if(active1)
|
||||
var/t1 = stripped_input("Please input species name", "Med. records", src.active1.fields["species"], null)
|
||||
var/t1 = stripped_input("Please input species name", "Med. records", active1.fields["species"], null)
|
||||
if(!canUseMedicalRecordsConsole(usr, t1, a1))
|
||||
return
|
||||
active1.fields["species"] = t1
|
||||
if("mi_dis")
|
||||
if(active2)
|
||||
var/t1 = stripped_input("Please input minor disabilities list:", "Med. records", src.active2.fields["mi_dis"], null)
|
||||
var/t1 = stripped_input("Please input minor disabilities list:", "Med. records", active2.fields["mi_dis"], null)
|
||||
if(!canUseMedicalRecordsConsole(usr, t1, null, a2))
|
||||
return
|
||||
src.active2.fields["mi_dis"] = t1
|
||||
active2.fields["mi_dis"] = t1
|
||||
if("mi_dis_d")
|
||||
if(active2)
|
||||
var/t1 = stripped_input("Please summarize minor dis.:", "Med. records", src.active2.fields["mi_dis_d"], null)
|
||||
var/t1 = stripped_input("Please summarize minor dis.:", "Med. records", active2.fields["mi_dis_d"], null)
|
||||
if(!canUseMedicalRecordsConsole(usr, t1, null, a2))
|
||||
return
|
||||
src.active2.fields["mi_dis_d"] = t1
|
||||
active2.fields["mi_dis_d"] = t1
|
||||
if("ma_dis")
|
||||
if(active2)
|
||||
var/t1 = stripped_input("Please input major disabilities list:", "Med. records", src.active2.fields["ma_dis"], null)
|
||||
var/t1 = stripped_input("Please input major disabilities list:", "Med. records", active2.fields["ma_dis"], null)
|
||||
if(!canUseMedicalRecordsConsole(usr, t1, null, a2))
|
||||
return
|
||||
src.active2.fields["ma_dis"] = t1
|
||||
active2.fields["ma_dis"] = t1
|
||||
if("ma_dis_d")
|
||||
if(active2)
|
||||
var/t1 = stripped_input("Please summarize major dis.:", "Med. records", src.active2.fields["ma_dis_d"], null)
|
||||
var/t1 = stripped_input("Please summarize major dis.:", "Med. records", active2.fields["ma_dis_d"], null)
|
||||
if(!canUseMedicalRecordsConsole(usr, t1, null, a2))
|
||||
return
|
||||
src.active2.fields["ma_dis_d"] = t1
|
||||
active2.fields["ma_dis_d"] = t1
|
||||
if("alg")
|
||||
if(active2)
|
||||
var/t1 = stripped_input("Please state allergies:", "Med. records", src.active2.fields["alg"], null)
|
||||
var/t1 = stripped_input("Please state allergies:", "Med. records", active2.fields["alg"], null)
|
||||
if(!canUseMedicalRecordsConsole(usr, t1, null, a2))
|
||||
return
|
||||
src.active2.fields["alg"] = t1
|
||||
active2.fields["alg"] = t1
|
||||
if("alg_d")
|
||||
if(active2)
|
||||
var/t1 = stripped_input("Please summarize allergies:", "Med. records", src.active2.fields["alg_d"], null)
|
||||
var/t1 = stripped_input("Please summarize allergies:", "Med. records", active2.fields["alg_d"], null)
|
||||
if(!canUseMedicalRecordsConsole(usr, t1, null, a2))
|
||||
return
|
||||
src.active2.fields["alg_d"] = t1
|
||||
active2.fields["alg_d"] = t1
|
||||
if("cdi")
|
||||
if(active2)
|
||||
var/t1 = stripped_input("Please state diseases:", "Med. records", src.active2.fields["cdi"], null)
|
||||
var/t1 = stripped_input("Please state diseases:", "Med. records", active2.fields["cdi"], null)
|
||||
if(!canUseMedicalRecordsConsole(usr, t1, null, a2))
|
||||
return
|
||||
src.active2.fields["cdi"] = t1
|
||||
active2.fields["cdi"] = t1
|
||||
if("cdi_d")
|
||||
if(active2)
|
||||
var/t1 = stripped_input("Please summarize diseases:", "Med. records", src.active2.fields["cdi_d"], null)
|
||||
var/t1 = stripped_input("Please summarize diseases:", "Med. records", active2.fields["cdi_d"], null)
|
||||
if(!canUseMedicalRecordsConsole(usr, t1, null, a2))
|
||||
return
|
||||
src.active2.fields["cdi_d"] = t1
|
||||
active2.fields["cdi_d"] = t1
|
||||
if("notes")
|
||||
if(active2)
|
||||
var/t1 = stripped_input("Please summarize notes:", "Med. records", src.active2.fields["notes"], null)
|
||||
var/t1 = stripped_input("Please summarize notes:", "Med. records", active2.fields["notes"], null)
|
||||
if(!canUseMedicalRecordsConsole(usr, t1, null, a2))
|
||||
return
|
||||
src.active2.fields["notes"] = t1
|
||||
active2.fields["notes"] = t1
|
||||
if("p_stat")
|
||||
if(active1)
|
||||
src.temp = "<B>Physical Condition:</B><BR>\n\t<A href='?src=[REF(src)];temp=1;p_stat=deceased'>*Deceased*</A><BR>\n\t<A href='?src=[REF(src)];temp=1;p_stat=unconscious'>*Unconscious*</A><BR>\n\t<A href='?src=[REF(src)];temp=1;p_stat=active'>Active</A><BR>\n\t<A href='?src=[REF(src)];temp=1;p_stat=unfit'>Physically Unfit</A><BR>"
|
||||
temp = "<B>Physical Condition:</B><BR>\n\t<A href='?src=[REF(src)];temp=1;p_stat=deceased'>*Deceased*</A><BR>\n\t<A href='?src=[REF(src)];temp=1;p_stat=unconscious'>*Unconscious*</A><BR>\n\t<A href='?src=[REF(src)];temp=1;p_stat=active'>Active</A><BR>\n\t<A href='?src=[REF(src)];temp=1;p_stat=unfit'>Physically Unfit</A><BR>"
|
||||
if("m_stat")
|
||||
if(active1)
|
||||
src.temp = "<B>Mental Condition:</B><BR>\n\t<A href='?src=[REF(src)];temp=1;m_stat=insane'>*Insane*</A><BR>\n\t<A href='?src=[REF(src)];temp=1;m_stat=unstable'>*Unstable*</A><BR>\n\t<A href='?src=[REF(src)];temp=1;m_stat=watch'>*Watch*</A><BR>\n\t<A href='?src=[REF(src)];temp=1;m_stat=stable'>Stable</A><BR>"
|
||||
temp = "<B>Mental Condition:</B><BR>\n\t<A href='?src=[REF(src)];temp=1;m_stat=insane'>*Insane*</A><BR>\n\t<A href='?src=[REF(src)];temp=1;m_stat=unstable'>*Unstable*</A><BR>\n\t<A href='?src=[REF(src)];temp=1;m_stat=watch'>*Watch*</A><BR>\n\t<A href='?src=[REF(src)];temp=1;m_stat=stable'>Stable</A><BR>"
|
||||
if("blood_type")
|
||||
if(active2)
|
||||
src.temp = "<B>Blood Type:</B><BR>\n\t<A href='?src=[REF(src)];temp=1;blood_type=an'>A-</A> <A href='?src=[REF(src)];temp=1;blood_type=ap'>A+</A><BR>\n\t<A href='?src=[REF(src)];temp=1;blood_type=bn'>B-</A> <A href='?src=[REF(src)];temp=1;blood_type=bp'>B+</A><BR>\n\t<A href='?src=[REF(src)];temp=1;blood_type=abn'>AB-</A> <A href='?src=[REF(src)];temp=1;blood_type=abp'>AB+</A><BR>\n\t<A href='?src=[REF(src)];temp=1;blood_type=on'>O-</A> <A href='?src=[REF(src)];temp=1;blood_type=op'>O+</A><BR>"
|
||||
temp = "<B>Blood Type:</B><BR>\n\t<A href='?src=[REF(src)];temp=1;blood_type=an'>A-</A> <A href='?src=[REF(src)];temp=1;blood_type=ap'>A+</A><BR>\n\t<A href='?src=[REF(src)];temp=1;blood_type=bn'>B-</A> <A href='?src=[REF(src)];temp=1;blood_type=bp'>B+</A><BR>\n\t<A href='?src=[REF(src)];temp=1;blood_type=abn'>AB-</A> <A href='?src=[REF(src)];temp=1;blood_type=abp'>AB+</A><BR>\n\t<A href='?src=[REF(src)];temp=1;blood_type=on'>O-</A> <A href='?src=[REF(src)];temp=1;blood_type=op'>O+</A><BR>"
|
||||
if("b_dna")
|
||||
if(active2)
|
||||
var/t1 = stripped_input("Please input DNA hash:", "Med. records", src.active2.fields["b_dna"], null)
|
||||
var/t1 = stripped_input("Please input DNA hash:", "Med. records", active2.fields["b_dna"], null)
|
||||
if(!canUseMedicalRecordsConsole(usr, t1, null, a2))
|
||||
return
|
||||
src.active2.fields["b_dna"] = t1
|
||||
active2.fields["b_dna"] = t1
|
||||
if("show_photo_front")
|
||||
if(active1)
|
||||
if(active1.fields["photo_front"])
|
||||
@@ -402,51 +393,51 @@
|
||||
if(active1)
|
||||
switch(href_list["p_stat"])
|
||||
if("deceased")
|
||||
src.active1.fields["p_stat"] = "*Deceased*"
|
||||
active1.fields["p_stat"] = "*Deceased*"
|
||||
if("unconscious")
|
||||
src.active1.fields["p_stat"] = "*Unconscious*"
|
||||
active1.fields["p_stat"] = "*Unconscious*"
|
||||
if("active")
|
||||
src.active1.fields["p_stat"] = "Active"
|
||||
active1.fields["p_stat"] = "Active"
|
||||
if("unfit")
|
||||
src.active1.fields["p_stat"] = "Physically Unfit"
|
||||
active1.fields["p_stat"] = "Physically Unfit"
|
||||
|
||||
else if(href_list["m_stat"])
|
||||
if(active1)
|
||||
switch(href_list["m_stat"])
|
||||
if("insane")
|
||||
src.active1.fields["m_stat"] = "*Insane*"
|
||||
active1.fields["m_stat"] = "*Insane*"
|
||||
if("unstable")
|
||||
src.active1.fields["m_stat"] = "*Unstable*"
|
||||
active1.fields["m_stat"] = "*Unstable*"
|
||||
if("watch")
|
||||
src.active1.fields["m_stat"] = "*Watch*"
|
||||
active1.fields["m_stat"] = "*Watch*"
|
||||
if("stable")
|
||||
src.active1.fields["m_stat"] = "Stable"
|
||||
active1.fields["m_stat"] = "Stable"
|
||||
|
||||
|
||||
else if(href_list["blood_type"])
|
||||
if(active2)
|
||||
switch(href_list["blood_type"])
|
||||
if("an")
|
||||
src.active2.fields["blood_type"] = "A-"
|
||||
active2.fields["blood_type"] = "A-"
|
||||
if("bn")
|
||||
src.active2.fields["blood_type"] = "B-"
|
||||
active2.fields["blood_type"] = "B-"
|
||||
if("abn")
|
||||
src.active2.fields["blood_type"] = "AB-"
|
||||
active2.fields["blood_type"] = "AB-"
|
||||
if("on")
|
||||
src.active2.fields["blood_type"] = "O-"
|
||||
active2.fields["blood_type"] = "O-"
|
||||
if("ap")
|
||||
src.active2.fields["blood_type"] = "A+"
|
||||
active2.fields["blood_type"] = "A+"
|
||||
if("bp")
|
||||
src.active2.fields["blood_type"] = "B+"
|
||||
active2.fields["blood_type"] = "B+"
|
||||
if("abp")
|
||||
src.active2.fields["blood_type"] = "AB+"
|
||||
active2.fields["blood_type"] = "AB+"
|
||||
if("op")
|
||||
src.active2.fields["blood_type"] = "O+"
|
||||
active2.fields["blood_type"] = "O+"
|
||||
|
||||
|
||||
else if(href_list["del_r"])
|
||||
if(active2)
|
||||
src.temp = "Are you sure you wish to delete the record (Medical Portion Only)?<br>\n\t<A href='?src=[REF(src)];temp=1;del_r2=1'>Yes</A><br>\n\t<A href='?src=[REF(src)];temp=1'>No</A><br>"
|
||||
temp = "Are you sure you wish to delete the record (Medical Portion Only)?<br>\n\t<A href='?src=[REF(src)];temp=1;del_r2=1'>Yes</A><br>\n\t<A href='?src=[REF(src)];temp=1'>No</A><br>"
|
||||
|
||||
else if(href_list["del_r2"])
|
||||
investigate_log("[key_name(usr)] has deleted the medical records for [active1.fields["name"]].", INVESTIGATE_RECORDS)
|
||||
@@ -463,10 +454,10 @@
|
||||
screen = 4
|
||||
|
||||
else if(href_list["new"])
|
||||
if((istype(src.active1, /datum/data/record) && !( istype(src.active2, /datum/data/record) )))
|
||||
if((istype(active1, /datum/data/record) && !( istype(active2, /datum/data/record) )))
|
||||
var/datum/data/record/R = new /datum/data/record( )
|
||||
R.fields["name"] = src.active1.fields["name"]
|
||||
R.fields["id"] = src.active1.fields["id"]
|
||||
R.fields["name"] = active1.fields["name"]
|
||||
R.fields["id"] = active1.fields["id"]
|
||||
R.name = text("Medical Record #[]", R.fields["id"])
|
||||
R.fields["blood_type"] = "Unknown"
|
||||
R.fields["b_dna"] = "Unknown"
|
||||
@@ -480,76 +471,77 @@
|
||||
R.fields["cdi_d"] = "No diseases have been diagnosed at the moment."
|
||||
R.fields["notes"] = "No notes."
|
||||
GLOB.data_core.medical += R
|
||||
src.active2 = R
|
||||
src.screen = 4
|
||||
active2 = R
|
||||
screen = 4
|
||||
|
||||
else if(href_list["add_c"])
|
||||
if(!(active2 in GLOB.data_core.medical))
|
||||
return
|
||||
var/a2 = src.active2
|
||||
var/a2 = active2
|
||||
var/t1 = stripped_multiline_input("Add Comment:", "Med. records", null, null)
|
||||
if(!canUseMedicalRecordsConsole(usr, t1, null, a2))
|
||||
return
|
||||
var/counter = 1
|
||||
while(src.active2.fields[text("com_[]", counter)])
|
||||
while(active2.fields[text("com_[]", counter)])
|
||||
counter++
|
||||
src.active2.fields[text("com_[]", counter)] = text("Made by [] ([]) on [] [], []<BR>[]", src.authenticated, src.rank, STATION_TIME_TIMESTAMP("hh:mm:ss"), time2text(world.realtime, "MMM DD"), GLOB.year_integer+540, t1)
|
||||
active2.fields[text("com_[]", counter)] = text("Made by [] ([]) on [] [], []<BR>[]", authenticated, rank, STATION_TIME_TIMESTAMP("hh:mm:ss"), time2text(world.realtime, "MMM DD"), GLOB.year_integer+540, t1)
|
||||
|
||||
else if(href_list["del_c"])
|
||||
if((istype(src.active2, /datum/data/record) && src.active2.fields[text("com_[]", href_list["del_c"])]))
|
||||
src.active2.fields[text("com_[]", href_list["del_c"])] = "<B>Deleted</B>"
|
||||
if((istype(active2, /datum/data/record) && active2.fields[text("com_[]", href_list["del_c"])]))
|
||||
active2.fields[text("com_[]", href_list["del_c"])] = "<B>Deleted</B>"
|
||||
|
||||
else if(href_list["search"])
|
||||
var/t1 = stripped_input(usr, "Search String: (Name, DNA, or ID)", "Med. records")
|
||||
if(!canUseMedicalRecordsConsole(usr, t1))
|
||||
return
|
||||
src.active1 = null
|
||||
src.active2 = null
|
||||
active1 = null
|
||||
active2 = null
|
||||
t1 = lowertext(t1)
|
||||
for(var/datum/data/record/R in GLOB.data_core.medical)
|
||||
if((lowertext(R.fields["name"]) == t1 || t1 == lowertext(R.fields["id"]) || t1 == lowertext(R.fields["b_dna"])))
|
||||
src.active2 = R
|
||||
active2 = R
|
||||
else
|
||||
//Foreach continue //goto(3229)
|
||||
if(!( src.active2 ))
|
||||
src.temp = text("Could not locate record [].", sanitize(t1))
|
||||
if(!( active2 ))
|
||||
temp = text("Could not locate record [].", sanitize(t1))
|
||||
else
|
||||
for(var/datum/data/record/E in GLOB.data_core.general)
|
||||
if((E.fields["name"] == src.active2.fields["name"] || E.fields["id"] == src.active2.fields["id"]))
|
||||
src.active1 = E
|
||||
if((E.fields["name"] == active2.fields["name"] || E.fields["id"] == active2.fields["id"]))
|
||||
active1 = E
|
||||
else
|
||||
//Foreach continue //goto(3334)
|
||||
src.screen = 4
|
||||
screen = 4
|
||||
|
||||
else if(href_list["print_p"])
|
||||
if(!( src.printing ))
|
||||
src.printing = 1
|
||||
if(!( printing ))
|
||||
printing = 1
|
||||
GLOB.data_core.medicalPrintCount++
|
||||
playsound(loc, 'sound/items/poster_being_created.ogg', 100, 1)
|
||||
sleep(30)
|
||||
var/obj/item/paper/P = new /obj/item/paper( src.loc )
|
||||
var/obj/item/paper/P = new /obj/item/paper( loc )
|
||||
P.info = "<CENTER><B>Medical Record - (MR-[GLOB.data_core.medicalPrintCount])</B></CENTER><BR>"
|
||||
if(active1 in GLOB.data_core.general)
|
||||
P.info += text("Name: [] ID: []<BR>\nSex: []<BR>\nAge: []<BR>", src.active1.fields["name"], src.active1.fields["id"], src.active1.fields["sex"], src.active1.fields["age"])
|
||||
P.info += text("Name: [] ID: []<BR>\nGender: []<BR>\nAge: []<BR>", active1.fields["name"], active1.fields["id"], active1.fields["gender"], active1.fields["age"])
|
||||
P.info += "\nSpecies: [active1.fields["species"]]<BR>"
|
||||
P.info += text("\nFingerprint: []<BR>\nPhysical Status: []<BR>\nMental Status: []<BR>", src.active1.fields["fingerprint"], src.active1.fields["p_stat"], src.active1.fields["m_stat"])
|
||||
P.info += text("\nFingerprint: []<BR>\nPhysical Status: []<BR>\nMental Status: []<BR>", active1.fields["fingerprint"], active1.fields["p_stat"], active1.fields["m_stat"])
|
||||
else
|
||||
P.info += "<B>General Record Lost!</B><BR>"
|
||||
if(active2 in GLOB.data_core.medical)
|
||||
P.info += text("<BR>\n<CENTER><B>Medical Data</B></CENTER><BR>\nBlood Type: []<BR>\nDNA: []<BR>\n<BR>\nMinor Disabilities: []<BR>\nDetails: []<BR>\n<BR>\nMajor Disabilities: []<BR>\nDetails: []<BR>\n<BR>\nAllergies: []<BR>\nDetails: []<BR>\n<BR>\nCurrent Diseases: [] (per disease info placed in log/comment section)<BR>\nDetails: []<BR>\n<BR>\nImportant Notes:<BR>\n\t[]<BR>\n<BR>\n<CENTER><B>Comments/Log</B></CENTER><BR>", src.active2.fields["blood_type"], src.active2.fields["b_dna"], src.active2.fields["mi_dis"], src.active2.fields["mi_dis_d"], src.active2.fields["ma_dis"], src.active2.fields["ma_dis_d"], src.active2.fields["alg"], src.active2.fields["alg_d"], src.active2.fields["cdi"], src.active2.fields["cdi_d"], src.active2.fields["notes"])
|
||||
P.info += text("<BR>\n<CENTER><B>Medical Data</B></CENTER><BR>\nBlood Type: []<BR>\nDNA: []<BR>\n<BR>\nMinor Disabilities: []<BR>\nDetails: []<BR>\n<BR>\nMajor Disabilities: []<BR>\nDetails: []<BR>\n<BR>\nAllergies: []<BR>\nDetails: []<BR>\n<BR>\nCurrent Diseases: [] (per disease info placed in log/comment section)<BR>\nDetails: []<BR>\n<BR>\nImportant Notes:<BR>\n\t[]<BR>\n<BR>\n<CENTER><B>Comments/Log</B></CENTER><BR>", active2.fields["blood_type"], active2.fields["b_dna"], active2.fields["mi_dis"], active2.fields["mi_dis_d"], active2.fields["ma_dis"], active2.fields["ma_dis_d"], active2.fields["alg"], active2.fields["alg_d"], active2.fields["cdi"], active2.fields["cdi_d"], active2.fields["notes"])
|
||||
var/counter = 1
|
||||
while(src.active2.fields[text("com_[]", counter)])
|
||||
P.info += text("[]<BR>", src.active2.fields[text("com_[]", counter)])
|
||||
while(active2.fields[text("com_[]", counter)])
|
||||
P.info += text("[]<BR>", active2.fields[text("com_[]", counter)])
|
||||
counter++
|
||||
P.name = text("MR-[] '[]'", GLOB.data_core.medicalPrintCount, src.active1.fields["name"])
|
||||
P.name = text("MR-[] '[]'", GLOB.data_core.medicalPrintCount, active1.fields["name"])
|
||||
else
|
||||
P.info += "<B>Medical Record Lost!</B><BR>"
|
||||
P.name = text("MR-[] '[]'", GLOB.data_core.medicalPrintCount, "Record Lost")
|
||||
P.info += "</TT>"
|
||||
src.printing = null
|
||||
P.update_icon()
|
||||
printing = null
|
||||
|
||||
src.add_fingerprint(usr)
|
||||
src.updateUsrDialog()
|
||||
add_fingerprint(usr)
|
||||
updateUsrDialog()
|
||||
return
|
||||
|
||||
/obj/machinery/computer/med_data/emp_act(severity)
|
||||
@@ -560,11 +552,11 @@
|
||||
switch(rand(1,6))
|
||||
if(1)
|
||||
if(prob(10))
|
||||
R.fields["name"] = random_unique_lizard_name(R.fields["sex"],1)
|
||||
R.fields["name"] = random_unique_lizard_name(R.fields["gender"],1)
|
||||
else
|
||||
R.fields["name"] = random_unique_name(R.fields["sex"],1)
|
||||
R.fields["name"] = random_unique_name(R.fields["gender"],1)
|
||||
if(2)
|
||||
R.fields["sex"] = pick("Male", "Female")
|
||||
R.fields["gender"] = pick("Male", "Female", "Other")
|
||||
if(3)
|
||||
R.fields["age"] = rand(AGE_MIN, AGE_MAX)
|
||||
if(4)
|
||||
@@ -583,7 +575,7 @@
|
||||
if(user)
|
||||
if(message)
|
||||
if(authenticated)
|
||||
if(user.canUseTopic(src))
|
||||
if(user.canUseTopic(src, BE_CLOSE))
|
||||
if(!record1 || record1 == active1)
|
||||
if(!record2 || record2 == active2)
|
||||
return 1
|
||||
|
||||
@@ -1,143 +1 @@
|
||||
/obj/machinery/computer/prisoner
|
||||
name = "prisoner management console"
|
||||
desc = "Used to manage tracking implants placed inside criminals."
|
||||
icon_screen = "explosive"
|
||||
icon_keyboard = "security_key"
|
||||
req_access = list(ACCESS_BRIG)
|
||||
var/id = 0
|
||||
var/temp = null
|
||||
var/status = 0
|
||||
var/timeleft = 60
|
||||
var/stop = 0
|
||||
var/screen = 0 // 0 - No Access Denied, 1 - Access allowed
|
||||
var/obj/item/card/id/prisoner/inserted_id
|
||||
circuit = /obj/item/circuitboard/computer/prisoner
|
||||
|
||||
light_color = LIGHT_COLOR_RED
|
||||
|
||||
/obj/machinery/computer/prisoner/ui_interact(mob/user)
|
||||
. = ..()
|
||||
var/dat = ""
|
||||
if(screen == 0)
|
||||
dat += "<HR><A href='?src=[REF(src)];lock=1'>Unlock Console</A>"
|
||||
else if(screen == 1)
|
||||
dat += "<H3>Prisoner ID Management</H3>"
|
||||
if(inserted_id)
|
||||
dat += text("<A href='?src=[REF(src)];id=eject'>[inserted_id]</A><br>")
|
||||
dat += text("Collected Points: [inserted_id.points]. <A href='?src=[REF(src)];id=reset'>Reset.</A><br>")
|
||||
dat += text("Card goal: [inserted_id.goal]. <A href='?src=[REF(src)];id=setgoal'>Set </A><br>")
|
||||
dat += text("Space Law recommends quotas of 100 points per minute they would normally serve in the brig.<BR>")
|
||||
else
|
||||
dat += text("<A href='?src=[REF(src)];id=insert'>Insert Prisoner ID.</A><br>")
|
||||
dat += "<H3>Prisoner Implant Management</H3>"
|
||||
dat += "<HR>Chemical Implants<BR>"
|
||||
var/turf/Tr = null
|
||||
for(var/obj/item/implant/chem/C in GLOB.tracked_chem_implants)
|
||||
Tr = get_turf(C)
|
||||
if((Tr) && (Tr.z != src.z))
|
||||
continue//Out of range
|
||||
if(!C.imp_in)
|
||||
continue
|
||||
dat += "ID: [C.imp_in.name] | Remaining Units: [C.reagents.total_volume] <BR>"
|
||||
dat += "| Inject: "
|
||||
dat += "<A href='?src=[REF(src)];inject1=[REF(C)]'>(<font class='bad'>(1)</font>)</A>"
|
||||
dat += "<A href='?src=[REF(src)];inject5=[REF(C)]'>(<font class='bad'>(5)</font>)</A>"
|
||||
dat += "<A href='?src=[REF(src)];inject10=[REF(C)]'>(<font class='bad'>(10)</font>)</A><BR>"
|
||||
dat += "********************************<BR>"
|
||||
dat += "<HR>Tracking Implants<BR>"
|
||||
for(var/obj/item/implant/tracking/T in GLOB.tracked_implants)
|
||||
if(!isliving(T.imp_in))
|
||||
continue
|
||||
Tr = get_turf(T)
|
||||
if((Tr) && (Tr.z != src.z))
|
||||
continue//Out of range
|
||||
|
||||
var/loc_display = "Unknown"
|
||||
var/mob/living/M = T.imp_in
|
||||
if(is_station_level(Tr.z) && !isspaceturf(M.loc))
|
||||
var/turf/mob_loc = get_turf(M)
|
||||
loc_display = mob_loc.loc
|
||||
|
||||
dat += "ID: [T.imp_in.name] | Location: [loc_display]<BR>"
|
||||
dat += "<A href='?src=[REF(src)];warn=[REF(T)]'>(<font class='bad'><i>Message Holder</i></font>)</A> |<BR>"
|
||||
dat += "********************************<BR>"
|
||||
dat += "<HR><A href='?src=[REF(src)];lock=1'>Lock Console</A>"
|
||||
var/datum/browser/popup = new(user, "computer", "Prisoner Management Console", 400, 500)
|
||||
popup.set_content(dat)
|
||||
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
|
||||
popup.open()
|
||||
return
|
||||
|
||||
/obj/machinery/computer/prisoner/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/card/id))
|
||||
return attack_hand(user)
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/machinery/computer/prisoner/process()
|
||||
if(!..())
|
||||
src.updateDialog()
|
||||
return
|
||||
|
||||
|
||||
/obj/machinery/computer/prisoner/Topic(href, href_list)
|
||||
if(..())
|
||||
return
|
||||
if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc)) || issilicon(usr))
|
||||
usr.set_machine(src)
|
||||
|
||||
if(href_list["id"])
|
||||
if(href_list["id"] =="insert" && !inserted_id)
|
||||
var/obj/item/card/id/prisoner/I = usr.is_holding_item_of_type(/obj/item/card/id/prisoner)
|
||||
if(I)
|
||||
if(!usr.transferItemToLoc(I, src))
|
||||
return
|
||||
inserted_id = I
|
||||
else
|
||||
to_chat(usr, "<span class='danger'>No valid ID.</span>")
|
||||
else if(inserted_id)
|
||||
switch(href_list["id"])
|
||||
if("eject")
|
||||
inserted_id.forceMove(drop_location())
|
||||
inserted_id.verb_pickup()
|
||||
inserted_id = null
|
||||
if("reset")
|
||||
inserted_id.points = 0
|
||||
if("setgoal")
|
||||
var/num = round(input(usr, "Choose prisoner's goal:", "Input an Integer", null) as num|null)
|
||||
if(num >= 0)
|
||||
num = min(num,1000) //Cap the quota to the equivilent of 10 minutes.
|
||||
inserted_id.goal = num
|
||||
else if(href_list["inject1"])
|
||||
var/obj/item/implant/I = locate(href_list["inject1"]) in GLOB.tracked_chem_implants
|
||||
if(I && istype(I))
|
||||
I.activate(1)
|
||||
else if(href_list["inject5"])
|
||||
var/obj/item/implant/I = locate(href_list["inject5"]) in GLOB.tracked_chem_implants
|
||||
if(I && istype(I))
|
||||
I.activate(5)
|
||||
|
||||
else if(href_list["inject10"])
|
||||
var/obj/item/implant/I = locate(href_list["inject10"]) in GLOB.tracked_chem_implants
|
||||
if(I && istype(I))
|
||||
I.activate(10)
|
||||
|
||||
else if(href_list["lock"])
|
||||
if(src.allowed(usr))
|
||||
screen = !screen
|
||||
else
|
||||
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)
|
||||
if(!warning)
|
||||
return
|
||||
var/obj/item/implant/I = locate(href_list["warn"]) in GLOB.tracked_implants
|
||||
if(I && istype(I) && I.imp_in)
|
||||
var/mob/living/R = I.imp_in
|
||||
to_chat(R, "<span class='italics'>You hear a voice in your head saying: '[warning]'</span>")
|
||||
log_directed_talk(usr, R, warning, LOG_SAY, "implant message")
|
||||
|
||||
src.add_fingerprint(usr)
|
||||
src.updateUsrDialog()
|
||||
return
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
/obj/machinery/computer/prisoner
|
||||
var/obj/item/card/id/prisoner/contained_id
|
||||
|
||||
/obj/machinery/computer/prisoner/Destroy()
|
||||
if(contained_id)
|
||||
contained_id.forceMove(get_turf(src))
|
||||
return ..()
|
||||
|
||||
|
||||
/obj/machinery/computer/prisoner/examine(mob/user)
|
||||
. = ..()
|
||||
if(contained_id)
|
||||
. += "<span class='notice'><b>Alt-click</b> to eject the ID card.</span>"
|
||||
|
||||
|
||||
|
||||
/obj/machinery/computer/prisoner/AltClick(mob/user)
|
||||
id_eject(user)
|
||||
return ..()
|
||||
|
||||
/obj/machinery/computer/prisoner/proc/id_insert(mob/user, obj/item/card/id/prisoner/P)
|
||||
if(istype(P))
|
||||
if(contained_id)
|
||||
to_chat(user, "<span class='warning'>There's already an ID card in the console!</span>")
|
||||
return
|
||||
if(!user.transferItemToLoc(P, src))
|
||||
return
|
||||
contained_id = P
|
||||
user.visible_message("<span class='notice'>[user] inserts an ID card into the console.</span>", \
|
||||
"<span class='notice'>You insert the ID card into the console.</span>")
|
||||
playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, FALSE)
|
||||
updateUsrDialog()
|
||||
|
||||
/obj/machinery/computer/prisoner/proc/id_eject(mob/user)
|
||||
if(!contained_id)
|
||||
to_chat(user, "<span class='warning'>There's no ID card in the console!</span>")
|
||||
return
|
||||
else
|
||||
contained_id.forceMove(drop_location())
|
||||
if(!issilicon(user) && Adjacent(user))
|
||||
user.put_in_hands(contained_id)
|
||||
contained_id = null
|
||||
user.visible_message("<span class='notice'>[user] gets an ID card from the console.</span>", \
|
||||
"<span class='notice'>You get the ID card from the console.</span>")
|
||||
playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, FALSE)
|
||||
updateUsrDialog()
|
||||
|
||||
/obj/machinery/computer/prisoner/attackby(obj/item/I, mob/user)
|
||||
if(istype(I, /obj/item/card/id/prisoner))
|
||||
id_insert(user, I)
|
||||
else
|
||||
return ..()
|
||||
@@ -0,0 +1,142 @@
|
||||
//computer that handle the points and teleports the prisoner
|
||||
/obj/machinery/computer/prisoner/gulag_teleporter_computer
|
||||
name = "labor camp teleporter console"
|
||||
desc = "Used to send criminals to the Labor Camp."
|
||||
icon_screen = "explosive"
|
||||
icon_keyboard = "security_key"
|
||||
req_access = list(ACCESS_ARMORY)
|
||||
circuit = /obj/item/circuitboard/computer/gulag_teleporter_console
|
||||
var/default_goal = 200
|
||||
var/obj/machinery/gulag_teleporter/teleporter = null
|
||||
var/obj/structure/gulag_beacon/beacon = null
|
||||
var/mob/living/carbon/human/prisoner = null
|
||||
var/datum/data/record/temporary_record = null
|
||||
|
||||
light_color = LIGHT_COLOR_RED
|
||||
|
||||
/obj/machinery/computer/prisoner/gulag_teleporter_computer/Initialize()
|
||||
. = ..()
|
||||
scan_machinery()
|
||||
|
||||
/obj/machinery/computer/prisoner/gulag_teleporter_computer/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "gulag_console", name, 455, 440, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
/obj/machinery/computer/prisoner/gulag_teleporter_computer/ui_data(mob/user)
|
||||
var/list/data = list()
|
||||
|
||||
var/list/prisoner_list = list()
|
||||
var/can_teleport = FALSE
|
||||
|
||||
if(teleporter && (teleporter.occupant && ishuman(teleporter.occupant)))
|
||||
prisoner = teleporter.occupant
|
||||
prisoner_list["name"] = prisoner.real_name
|
||||
if(contained_id)
|
||||
can_teleport = TRUE
|
||||
if(!isnull(GLOB.data_core.general))
|
||||
for(var/r in GLOB.data_core.security)
|
||||
var/datum/data/record/R = r
|
||||
if(R.fields["name"] == prisoner_list["name"])
|
||||
temporary_record = R
|
||||
prisoner_list["crimstat"] = temporary_record.fields["criminal"]
|
||||
|
||||
data["prisoner"] = prisoner_list
|
||||
|
||||
if(teleporter)
|
||||
data["teleporter"] = teleporter
|
||||
data["teleporter_location"] = "([teleporter.x], [teleporter.y], [teleporter.z])"
|
||||
data["teleporter_lock"] = teleporter.locked
|
||||
data["teleporter_state_open"] = teleporter.state_open
|
||||
if(beacon)
|
||||
data["beacon"] = beacon
|
||||
data["beacon_location"] = "([beacon.x], [beacon.y], [beacon.z])"
|
||||
if(contained_id)
|
||||
data["id"] = contained_id
|
||||
data["id_name"] = contained_id.registered_name
|
||||
data["goal"] = contained_id.goal
|
||||
data["can_teleport"] = can_teleport
|
||||
|
||||
return data
|
||||
|
||||
/obj/machinery/computer/prisoner/gulag_teleporter_computer/ui_act(action, list/params)
|
||||
if(isliving(usr))
|
||||
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, FALSE)
|
||||
if(..())
|
||||
return
|
||||
if(!allowed(usr))
|
||||
to_chat(usr, "<span class='warning'>Access denied.</span>")
|
||||
return
|
||||
switch(action)
|
||||
if("scan_teleporter")
|
||||
teleporter = findteleporter()
|
||||
if("scan_beacon")
|
||||
beacon = findbeacon()
|
||||
if("handle_id")
|
||||
if(contained_id)
|
||||
id_eject(usr)
|
||||
else
|
||||
id_insert(usr)
|
||||
if("set_goal")
|
||||
var/new_goal = input("Set the amount of points:", "Points", contained_id.goal) as num|null
|
||||
if(!isnum(new_goal))
|
||||
return
|
||||
if(!new_goal)
|
||||
new_goal = default_goal
|
||||
if (new_goal > 1000)
|
||||
to_chat(usr, "The entered amount of points is too large. Points have instead been set to the maximum allowed amount.")
|
||||
contained_id.goal = CLAMP(new_goal, 0, 1000) //maximum 1000 points
|
||||
if("toggle_open")
|
||||
if(teleporter.locked)
|
||||
to_chat(usr, "The teleporter is locked")
|
||||
return
|
||||
teleporter.toggle_open()
|
||||
if("teleporter_lock")
|
||||
if(teleporter.state_open)
|
||||
to_chat(usr, "Close the teleporter before locking!")
|
||||
return
|
||||
teleporter.locked = !teleporter.locked
|
||||
if("teleport")
|
||||
if(!teleporter || !beacon)
|
||||
return
|
||||
addtimer(CALLBACK(src, .proc/teleport, usr), 5)
|
||||
|
||||
/obj/machinery/computer/prisoner/gulag_teleporter_computer/proc/scan_machinery()
|
||||
teleporter = findteleporter()
|
||||
beacon = findbeacon()
|
||||
|
||||
/obj/machinery/computer/prisoner/gulag_teleporter_computer/proc/findteleporter()
|
||||
var/obj/machinery/gulag_teleporter/teleporterf = null
|
||||
|
||||
for(var/direction in GLOB.cardinals)
|
||||
teleporterf = locate(/obj/machinery/gulag_teleporter, get_step(src, direction))
|
||||
if(teleporterf && teleporterf.is_operational())
|
||||
return teleporterf
|
||||
|
||||
/obj/machinery/computer/prisoner/gulag_teleporter_computer/proc/findbeacon()
|
||||
return locate(/obj/structure/gulag_beacon)
|
||||
|
||||
/obj/machinery/computer/prisoner/gulag_teleporter_computer/proc/teleport(mob/user)
|
||||
if(!contained_id) //incase the ID was removed after the transfer timer was set.
|
||||
say("Warning: Unable to transfer prisoner without a valid Prisoner ID inserted!")
|
||||
return
|
||||
var/id_goal_not_set
|
||||
if(!contained_id.goal)
|
||||
id_goal_not_set = TRUE
|
||||
contained_id.goal = default_goal
|
||||
say("[contained_id]'s ID card goal defaulting to [contained_id.goal] points.")
|
||||
log_game("[key_name(user)] teleported [key_name(prisoner)] to the Labor Camp [COORD(beacon)] for [id_goal_not_set ? "default goal of ":""][contained_id.goal] points.")
|
||||
teleporter.handle_prisoner(contained_id, temporary_record)
|
||||
playsound(src, 'sound/weapons/emitter.ogg', 50, 1)
|
||||
prisoner.forceMove(get_turf(beacon))
|
||||
prisoner.Stun(40) // small travel dizziness
|
||||
to_chat(prisoner, "<span class='warning'>The teleportation makes you a little dizzy.</span>")
|
||||
new /obj/effect/particle_effect/sparks(get_turf(prisoner))
|
||||
playsound(src, "sparks", 50, 1)
|
||||
if(teleporter.locked)
|
||||
teleporter.locked = FALSE
|
||||
teleporter.toggle_open()
|
||||
contained_id = null
|
||||
temporary_record = null
|
||||
@@ -0,0 +1,139 @@
|
||||
|
||||
/obj/machinery/computer/prisoner/management
|
||||
name = "prisoner management console"
|
||||
desc = "Used to manage tracking implants placed inside criminals."
|
||||
icon_screen = "explosive"
|
||||
icon_keyboard = "security_key"
|
||||
req_access = list(ACCESS_BRIG)
|
||||
var/id = 0
|
||||
var/temp = null
|
||||
var/status = 0
|
||||
var/timeleft = 60
|
||||
var/stop = 0
|
||||
var/screen = 0 // 0 - No Access Denied, 1 - Access allowed
|
||||
circuit = /obj/item/circuitboard/computer/prisoner
|
||||
|
||||
light_color = LIGHT_COLOR_RED
|
||||
|
||||
/obj/machinery/computer/prisoner/management/ui_interact(mob/user)
|
||||
. = ..()
|
||||
if(isliving(user))
|
||||
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, FALSE)
|
||||
var/dat = ""
|
||||
if(screen == 0)
|
||||
dat += "<HR><A href='?src=[REF(src)];lock=1'>{Log In}</A>"
|
||||
else if(screen == 1)
|
||||
dat += "<H3>Prisoner ID Management</H3>"
|
||||
if(contained_id)
|
||||
dat += text("<A href='?src=[REF(src)];id=eject'>[contained_id]</A><br>")
|
||||
dat += text("Collected Points: [contained_id.points]. <A href='?src=[REF(src)];id=reset'>Reset.</A><br>")
|
||||
dat += text("Card goal: [contained_id.goal]. <A href='?src=[REF(src)];id=setgoal'>Set </A><br>")
|
||||
dat += text("Space Law recommends quotas of 100 points per minute they would normally serve in the brig.<BR>")
|
||||
else
|
||||
dat += text("<A href='?src=[REF(src)];id=insert'>Insert Prisoner ID.</A><br>")
|
||||
dat += "<H3>Prisoner Implant Management</H3>"
|
||||
dat += "<HR>Chemical Implants<BR>"
|
||||
var/turf/Tr = null
|
||||
for(var/obj/item/implant/chem/C in GLOB.tracked_chem_implants)
|
||||
Tr = get_turf(C)
|
||||
if((Tr) && (Tr.z != src.z))
|
||||
continue//Out of range
|
||||
if(!C.imp_in)
|
||||
continue
|
||||
dat += "ID: [C.imp_in.name] | Remaining Units: [C.reagents.total_volume] <BR>"
|
||||
dat += "| Inject: "
|
||||
dat += "<A href='?src=[REF(src)];inject1=[REF(C)]'>(<font class='bad'>(1)</font>)</A>"
|
||||
dat += "<A href='?src=[REF(src)];inject5=[REF(C)]'>(<font class='bad'>(5)</font>)</A>"
|
||||
dat += "<A href='?src=[REF(src)];inject10=[REF(C)]'>(<font class='bad'>(10)</font>)</A><BR>"
|
||||
dat += "********************************<BR>"
|
||||
dat += "<HR>Tracking Implants<BR>"
|
||||
for(var/obj/item/implant/tracking/T in GLOB.tracked_implants)
|
||||
if(!isliving(T.imp_in))
|
||||
continue
|
||||
Tr = get_turf(T)
|
||||
if((Tr) && (Tr.z != src.z))
|
||||
continue//Out of range
|
||||
|
||||
var/loc_display = "Unknown"
|
||||
var/mob/living/M = T.imp_in
|
||||
if(is_station_level(Tr.z) && !isspaceturf(M.loc))
|
||||
var/turf/mob_loc = get_turf(M)
|
||||
loc_display = mob_loc.loc
|
||||
|
||||
dat += "ID: [T.imp_in.name] | Location: [loc_display]<BR>"
|
||||
dat += "<A href='?src=[REF(src)];warn=[REF(T)]'>(<font class='bad'><i>Message Holder</i></font>)</A> |<BR>"
|
||||
dat += "********************************<BR>"
|
||||
dat += "<HR><A href='?src=[REF(src)];lock=1'>{Log Out}</A>"
|
||||
var/datum/browser/popup = new(user, "computer", "Prisoner Management Console", 400, 500)
|
||||
popup.set_content(dat)
|
||||
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
|
||||
popup.open()
|
||||
return
|
||||
|
||||
/obj/machinery/computer/prisoner/management/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/card/id))
|
||||
if(screen)
|
||||
id_insert(user)
|
||||
else
|
||||
to_chat(user, "<span class='danger'>Unauthorized access.</span>")
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/machinery/computer/prisoner/management/process()
|
||||
if(!..())
|
||||
src.updateDialog()
|
||||
return
|
||||
|
||||
/obj/machinery/computer/prisoner/management/Topic(href, href_list)
|
||||
if(..())
|
||||
return
|
||||
if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc)) || issilicon(usr))
|
||||
usr.set_machine(src)
|
||||
|
||||
if(href_list["id"])
|
||||
if(href_list["id"] =="insert" && !contained_id)
|
||||
id_insert(usr)
|
||||
else if(contained_id)
|
||||
switch(href_list["id"])
|
||||
if("eject")
|
||||
id_eject(usr)
|
||||
if("reset")
|
||||
contained_id.points = 0
|
||||
if("setgoal")
|
||||
var/num = round(input(usr, "Choose prisoner's goal:", "Input an Integer", null) as num|null)
|
||||
if(num >= 0)
|
||||
num = min(num,1000) //Cap the quota to the equivilent of 10 minutes.
|
||||
contained_id.goal = num
|
||||
else if(href_list["inject1"])
|
||||
var/obj/item/implant/I = locate(href_list["inject1"]) in GLOB.tracked_chem_implants
|
||||
if(I && istype(I))
|
||||
I.activate(1)
|
||||
else if(href_list["inject5"])
|
||||
var/obj/item/implant/I = locate(href_list["inject5"]) in GLOB.tracked_chem_implants
|
||||
if(I && istype(I))
|
||||
I.activate(5)
|
||||
else if(href_list["inject10"])
|
||||
var/obj/item/implant/I = locate(href_list["inject10"]) in GLOB.tracked_chem_implants
|
||||
if(I && istype(I))
|
||||
I.activate(10)
|
||||
|
||||
else if(href_list["lock"])
|
||||
if(allowed(usr))
|
||||
screen = !screen
|
||||
playsound(src, 'sound/machines/terminal_on.ogg', 50, FALSE)
|
||||
else
|
||||
to_chat(usr, "<span class='danger'>Unauthorized access.</span>")
|
||||
|
||||
else if(href_list["warn"])
|
||||
var/warning = copytext(sanitize(input(usr,"Message:","Enter your message here!","")),1,MAX_MESSAGE_LEN)
|
||||
if(!warning)
|
||||
return
|
||||
var/obj/item/implant/I = locate(href_list["warn"]) in GLOB.tracked_implants
|
||||
if(I && istype(I) && I.imp_in)
|
||||
var/mob/living/R = I.imp_in
|
||||
to_chat(R, "<span class='italics'>You hear a voice in your head saying: '[warning]'</span>")
|
||||
log_directed_talk(usr, R, warning, LOG_SAY, "implant message")
|
||||
|
||||
src.add_fingerprint(usr)
|
||||
src.updateUsrDialog()
|
||||
return
|
||||
@@ -5,13 +5,10 @@
|
||||
icon_keyboard = "security_key"
|
||||
req_one_access = list(ACCESS_SECURITY, ACCESS_FORENSICS_LOCKERS)
|
||||
circuit = /obj/item/circuitboard/computer/secure_data
|
||||
var/obj/item/card/id/scan = null
|
||||
var/authenticated = null
|
||||
var/rank = null
|
||||
var/screen = null
|
||||
var/datum/data/record/active1 = null
|
||||
var/datum/data/record/active2 = null
|
||||
var/a_id = null
|
||||
var/temp = null
|
||||
var/printing = null
|
||||
var/can_change_id = 0
|
||||
@@ -23,11 +20,6 @@
|
||||
|
||||
light_color = LIGHT_COLOR_RED
|
||||
|
||||
/obj/machinery/computer/secure_data/examine(mob/user)
|
||||
..()
|
||||
if(scan)
|
||||
to_chat(user, "<span class='notice'>Alt-click to eject the ID card.</span>")
|
||||
|
||||
/obj/machinery/computer/secure_data/syndie
|
||||
icon_keyboard = "syndie_key"
|
||||
|
||||
@@ -40,32 +32,19 @@
|
||||
clockwork = TRUE //it'd look weird
|
||||
pass_flags = PASSTABLE
|
||||
|
||||
/obj/machinery/computer/secure_data/attackby(obj/item/O, mob/user, params)
|
||||
if(istype(O, /obj/item/card/id))
|
||||
if(!scan)
|
||||
if(!user.transferItemToLoc(O, src))
|
||||
return
|
||||
scan = O
|
||||
to_chat(user, "<span class='notice'>You insert [O].</span>")
|
||||
playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, 0)
|
||||
updateUsrDialog()
|
||||
else
|
||||
to_chat(user, "<span class='warning'>There's already an ID card in the console.</span>")
|
||||
else
|
||||
return ..()
|
||||
|
||||
//Someone needs to break down the dat += into chunks instead of long ass lines.
|
||||
/obj/machinery/computer/secure_data/ui_interact(mob/user)
|
||||
. = ..()
|
||||
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, FALSE)
|
||||
if(src.z > 6)
|
||||
to_chat(user, "<span class='boldannounce'>Unable to establish a connection</span>: \black You're too far away from the station!")
|
||||
return
|
||||
var/dat
|
||||
|
||||
if(temp)
|
||||
dat = text("<TT>[]</TT><BR><BR><A href='?src=[REF(src)];choice=Clear Screen'>Clear Screen</A>", temp)
|
||||
dat = "<TT>[temp]</TT><BR><BR><A href='?src=[REF(src)];choice=Clear Screen'>Clear Screen</A>"
|
||||
else
|
||||
dat = text("Confirm Identity: <A href='?src=[REF(src)];choice=Confirm Identity'>[]</A><HR>", (scan ? text("[]", scan.name) : "----------"))
|
||||
dat = ""
|
||||
if(authenticated)
|
||||
switch(screen)
|
||||
if(1)
|
||||
@@ -190,7 +169,7 @@
|
||||
dat += {"<table><tr><td><table>
|
||||
<tr><td>Name:</td><td><A href='?src=[REF(src)];choice=Edit Field;field=name'> [active1.fields["name"]] </A></td></tr>
|
||||
<tr><td>ID:</td><td><A href='?src=[REF(src)];choice=Edit Field;field=id'> [active1.fields["id"]] </A></td></tr>
|
||||
<tr><td>Sex:</td><td><A href='?src=[REF(src)];choice=Edit Field;field=sex'> [active1.fields["sex"]] </A></td></tr>
|
||||
<tr><td>Gender:</td><td><A href='?src=[REF(src)];choice=Edit Field;field=gender'> [active1.fields["gender"]] </A></td></tr>
|
||||
<tr><td>Age:</td><td><A href='?src=[REF(src)];choice=Edit Field;field=age'> [active1.fields["age"]] </A></td></tr>"}
|
||||
dat += "<tr><td>Species:</td><td><A href ='?src=[REF(src)];choice=Edit Field;field=species'> [active1.fields["species"]] </A></td></tr>"
|
||||
dat += {"<tr><td>Rank:</td><td><A href='?src=[REF(src)];choice=Edit Field;field=rank'> [active1.fields["rank"]] </A></td></tr>
|
||||
@@ -309,36 +288,39 @@ What a mess.*/
|
||||
active1 = null
|
||||
active2 = null
|
||||
|
||||
if("Confirm Identity")
|
||||
eject_id(usr)
|
||||
|
||||
if("Log Out")
|
||||
authenticated = null
|
||||
screen = null
|
||||
active1 = null
|
||||
active2 = null
|
||||
playsound(src, 'sound/machines/terminal_off.ogg', 50, FALSE)
|
||||
|
||||
if("Log In")
|
||||
if(issilicon(usr))
|
||||
var/mob/living/silicon/borg = usr
|
||||
var/mob/M = usr
|
||||
var/obj/item/card/id/I = M.get_idcard(TRUE)
|
||||
if(issilicon(M))
|
||||
var/mob/living/silicon/borg = M
|
||||
active1 = null
|
||||
active2 = null
|
||||
authenticated = borg.name
|
||||
rank = "AI"
|
||||
screen = 1
|
||||
else if(IsAdminGhost(usr))
|
||||
else if(IsAdminGhost(M))
|
||||
active1 = null
|
||||
active2 = null
|
||||
authenticated = usr.client.holder.admin_signature
|
||||
authenticated = M.client.holder.admin_signature
|
||||
rank = "Central Command"
|
||||
screen = 1
|
||||
else if(istype(scan, /obj/item/card/id))
|
||||
else if(I && check_access(I))
|
||||
active1 = null
|
||||
active2 = null
|
||||
if(check_access(scan))
|
||||
authenticated = scan.registered_name
|
||||
rank = scan.assignment
|
||||
screen = 1
|
||||
authenticated = I.registered_name
|
||||
rank = I.assignment
|
||||
screen = 1
|
||||
else
|
||||
to_chat(usr, "<span class='danger'>Unauthorized Access.</span>")
|
||||
playsound(src, 'sound/machines/terminal_on.ogg', 50, FALSE)
|
||||
|
||||
//RECORD FUNCTIONS
|
||||
if("Record Maintenance")
|
||||
screen = 2
|
||||
@@ -346,16 +328,14 @@ What a mess.*/
|
||||
active2 = null
|
||||
|
||||
if("Browse Record")
|
||||
var/datum/data/record/R = locate(href_list["d_rec"])
|
||||
var/S = locate(href_list["d_rec"])
|
||||
if(!( GLOB.data_core.general.Find(R) ))
|
||||
var/datum/data/record/R = locate(href_list["d_rec"]) in GLOB.data_core.general
|
||||
if(!R)
|
||||
temp = "Record Not Found!"
|
||||
else
|
||||
active1 = active2 = R
|
||||
for(var/datum/data/record/E in GLOB.data_core.security)
|
||||
if((E.fields["name"] == R.fields["name"] || E.fields["id"] == R.fields["id"]))
|
||||
S = E
|
||||
active1 = R
|
||||
active2 = S
|
||||
active2 = E
|
||||
screen = 3
|
||||
|
||||
|
||||
@@ -368,7 +348,7 @@ What a mess.*/
|
||||
var/obj/item/paper/P = new /obj/item/paper( loc )
|
||||
P.info = "<CENTER><B>Security Record - (SR-[GLOB.data_core.securityPrintCount])</B></CENTER><BR>"
|
||||
if((istype(active1, /datum/data/record) && GLOB.data_core.general.Find(active1)))
|
||||
P.info += text("Name: [] ID: []<BR>\nSex: []<BR>\nAge: []<BR>", active1.fields["name"], active1.fields["id"], active1.fields["sex"], active1.fields["age"])
|
||||
P.info += text("Name: [] ID: []<BR>\nGender: []<BR>\nAge: []<BR>", active1.fields["name"], active1.fields["id"], active1.fields["gender"], active1.fields["age"])
|
||||
P.info += "\nSpecies: [active1.fields["species"]]<BR>"
|
||||
P.info += text("\nFingerprint: []<BR>\nPhysical Status: []<BR>\nMental Status: []<BR>", active1.fields["fingerprint"], active1.fields["p_stat"], active1.fields["m_stat"])
|
||||
else
|
||||
@@ -419,6 +399,7 @@ What a mess.*/
|
||||
P.info += "<B>Security Record Lost!</B><BR>"
|
||||
P.name = text("SR-[] '[]'", GLOB.data_core.securityPrintCount, "Record Lost")
|
||||
P.info += "</TT>"
|
||||
P.update_icon()
|
||||
printing = null
|
||||
if("Print Poster")
|
||||
if(!( printing ))
|
||||
@@ -512,7 +493,7 @@ What a mess.*/
|
||||
G.fields["name"] = "New Record"
|
||||
G.fields["id"] = "[num2hex(rand(1, 1.6777215E7), 6)]"
|
||||
G.fields["rank"] = "Unassigned"
|
||||
G.fields["sex"] = "Male"
|
||||
G.fields["gender"] = "Male"
|
||||
G.fields["age"] = "Unknown"
|
||||
G.fields["species"] = "Human"
|
||||
G.fields["photo_front"] = new /icon()
|
||||
@@ -584,12 +565,14 @@ What a mess.*/
|
||||
if(!canUseSecurityRecordsConsole(usr, t1, a1))
|
||||
return
|
||||
active1.fields["fingerprint"] = t1
|
||||
if("sex")
|
||||
if("gender")
|
||||
if(istype(active1, /datum/data/record))
|
||||
if(active1.fields["sex"] == "Male")
|
||||
active1.fields["sex"] = "Female"
|
||||
if(active1.fields["gender"] == "Male")
|
||||
active1.fields["gender"] = "Female"
|
||||
else if(active1.fields["gender"] == "Female")
|
||||
active1.fields["gender"] = "Other"
|
||||
else
|
||||
active1.fields["sex"] = "Male"
|
||||
active1.fields["gender"] = "Male"
|
||||
if("age")
|
||||
if(istype(active1, /datum/data/record))
|
||||
var/t1 = input("Please input age:", "Secure. records", active1.fields["age"], null) as num
|
||||
@@ -767,19 +750,14 @@ What a mess.*/
|
||||
P = user.get_active_held_item()
|
||||
return P
|
||||
|
||||
/obj/machinery/computer/secure_data/proc/print_photo(icon/temp, name)
|
||||
/obj/machinery/computer/secure_data/proc/print_photo(icon/temp, person_name)
|
||||
if (printing)
|
||||
return
|
||||
printing = TRUE
|
||||
sleep(20)
|
||||
var/obj/item/photo/P = new/obj/item/photo(drop_location())
|
||||
var/icon/small_img = icon(temp)
|
||||
var/icon/ic = icon('icons/obj/items_and_weapons.dmi',"photo")
|
||||
small_img.Scale(8, 8)
|
||||
ic.Blend(small_img,ICON_OVERLAY, 13, 13)
|
||||
P.icon = ic
|
||||
P.picture.picture_image = temp
|
||||
P.desc = "The photo on file for [name]."
|
||||
var/datum/picture/toEmbed = new(name = person_name, desc = "The photo on file for [person_name].", image = temp)
|
||||
P.set_picture(toEmbed, TRUE, TRUE)
|
||||
P.pixel_x = rand(-10, 10)
|
||||
P.pixel_y = rand(-10, 10)
|
||||
printing = FALSE
|
||||
@@ -799,7 +777,7 @@ What a mess.*/
|
||||
else
|
||||
R.fields["name"] = "[pick(pick(GLOB.first_names_male), pick(GLOB.first_names_female))] [pick(GLOB.last_names)]"
|
||||
if(2)
|
||||
R.fields["sex"] = pick("Male", "Female")
|
||||
R.fields["gender"] = pick("Male", "Female", "Other")
|
||||
if(3)
|
||||
R.fields["age"] = rand(5, 85)
|
||||
if(4)
|
||||
@@ -823,7 +801,7 @@ What a mess.*/
|
||||
/obj/machinery/computer/secure_data/proc/canUseSecurityRecordsConsole(mob/user, message1 = 0, record1, record2)
|
||||
if(user)
|
||||
if(authenticated)
|
||||
if(user.canUseTopic(src))
|
||||
if(user.canUseTopic(src, BE_CLOSE))
|
||||
if(!trim(message1))
|
||||
return 0
|
||||
if(!record1 || record1 == active1)
|
||||
@@ -831,22 +809,3 @@ What a mess.*/
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/obj/machinery/computer/secure_data/AltClick(mob/user)
|
||||
if(user.canUseTopic(src))
|
||||
eject_id(user)
|
||||
|
||||
/obj/machinery/computer/secure_data/proc/eject_id(mob/user)
|
||||
if(scan)
|
||||
scan.forceMove(drop_location())
|
||||
if(!issilicon(user) && Adjacent(user))
|
||||
user.put_in_hands(scan)
|
||||
scan = null
|
||||
playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, 0)
|
||||
else //switching the ID with the one you're holding
|
||||
if(issilicon(user) || !Adjacent(user))
|
||||
return
|
||||
var/obj/item/card/id/held_id = user.is_holding_item_of_type(/obj/item/card/id)
|
||||
if(QDELETED(held_id) || !user.transferItemToLoc(held_id, src))
|
||||
return
|
||||
scan = held_id
|
||||
playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, 0)
|
||||
|
||||
@@ -9,7 +9,6 @@
|
||||
idle_power_usage = 100
|
||||
active_power_usage = 2500
|
||||
var/list/stored_items = list()
|
||||
var/obj/item/card/id/prisoner/inserted_id = null
|
||||
var/obj/machinery/gulag_teleporter/linked_teleporter = null
|
||||
|
||||
/obj/machinery/gulag_item_reclaimer/Destroy()
|
||||
@@ -18,9 +17,6 @@
|
||||
I.forceMove(get_turf(src))
|
||||
if(linked_teleporter)
|
||||
linked_teleporter.linked_reclaimer = null
|
||||
if(inserted_id)
|
||||
inserted_id.forceMove(get_turf(src))
|
||||
inserted_id = null
|
||||
return ..()
|
||||
|
||||
/obj/machinery/gulag_item_reclaimer/emag_act(mob/user)
|
||||
@@ -31,18 +27,6 @@
|
||||
obj_flags |= EMAGGED
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/gulag_item_reclaimer/attackby(obj/item/I, mob/user)
|
||||
if(istype(I, /obj/item/card/id))
|
||||
if(!inserted_id)
|
||||
if(!user.transferItemToLoc(I, src))
|
||||
return
|
||||
inserted_id = I
|
||||
to_chat(user, "<span class='notice'>You insert [I].</span>")
|
||||
return
|
||||
else
|
||||
to_chat(user, "<span class='notice'>There's an ID inserted already.</span>")
|
||||
return ..()
|
||||
|
||||
/obj/machinery/gulag_item_reclaimer/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
@@ -57,15 +41,19 @@
|
||||
if(allowed(user))
|
||||
can_reclaim = TRUE
|
||||
|
||||
if(inserted_id)
|
||||
data["id"] = inserted_id
|
||||
data["id_name"] = inserted_id.registered_name
|
||||
if(inserted_id.points >= inserted_id.goal)
|
||||
var/obj/item/card/id/I = user.get_idcard(TRUE)
|
||||
if(istype(I, /obj/item/card/id/prisoner))
|
||||
var/obj/item/card/id/prisoner/P = I
|
||||
if(P.points >= P.goal)
|
||||
can_reclaim = TRUE
|
||||
|
||||
var/list/mobs = list()
|
||||
for(var/i in stored_items)
|
||||
var/mob/thismob = i
|
||||
if(QDELETED(thismob))
|
||||
say("Alert! Unable to locate vital signals of a previously processed prisoner. Ejecting equipment!")
|
||||
drop_items(thismob)
|
||||
continue
|
||||
var/list/mob_info = list()
|
||||
mob_info["name"] = thismob.real_name
|
||||
mob_info["mob"] = "[REF(thismob)]"
|
||||
@@ -80,16 +68,6 @@
|
||||
|
||||
/obj/machinery/gulag_item_reclaimer/ui_act(action, list/params)
|
||||
switch(action)
|
||||
if("handle_id")
|
||||
if(inserted_id)
|
||||
usr.put_in_hands(inserted_id)
|
||||
inserted_id = null
|
||||
else
|
||||
var/obj/item/I = usr.is_holding_item_of_type(/obj/item/card/id)
|
||||
if(I)
|
||||
if(!usr.transferItemToLoc(I, src))
|
||||
return
|
||||
inserted_id = I
|
||||
if("release_items")
|
||||
var/mob/M = locate(params["mobref"])
|
||||
if(M == usr || allowed(usr))
|
||||
@@ -100,8 +78,9 @@
|
||||
/obj/machinery/gulag_item_reclaimer/proc/drop_items(mob/user)
|
||||
if(!stored_items[user])
|
||||
return
|
||||
var/drop_location = drop_location()
|
||||
for(var/i in stored_items[user])
|
||||
var/obj/item/W = i
|
||||
stored_items[user] -= W
|
||||
W.forceMove(get_turf(src))
|
||||
W.forceMove(drop_location)
|
||||
stored_items -= user
|
||||
|
||||
@@ -36,4 +36,203 @@
|
||||
/obj/effect/turf_decal/tile/neutral
|
||||
name = "neutral corner"
|
||||
color = "#D4D4D4"
|
||||
alpha = 50
|
||||
alpha = 50
|
||||
|
||||
/obj/effect/turf_decal/trimline
|
||||
layer = TURF_PLATING_DECAL_LAYER
|
||||
alpha = 110
|
||||
icon_state = "trimline_box"
|
||||
|
||||
/obj/effect/turf_decal/trimline/white
|
||||
color = "#FFFFFF"
|
||||
|
||||
/obj/effect/turf_decal/trimline/white/line
|
||||
name = "trim decal"
|
||||
icon_state = "trimline"
|
||||
|
||||
/obj/effect/turf_decal/trimline/white/corner
|
||||
icon_state = "trimline_corner"
|
||||
|
||||
/obj/effect/turf_decal/trimline/white/end
|
||||
icon_state = "trimline_end"
|
||||
|
||||
/obj/effect/turf_decal/trimline/white/filled
|
||||
icon_state = "trimline_box_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/white/filled/line
|
||||
icon_state = "trimline_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/white/filled/corner
|
||||
icon_state = "trimline_corner_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/white/filled/end
|
||||
icon_state = "trimline_end_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/red
|
||||
color = "#DE3A3A"
|
||||
|
||||
/obj/effect/turf_decal/trimline/red/line
|
||||
icon_state = "trimline"
|
||||
|
||||
/obj/effect/turf_decal/trimline/red/corner
|
||||
icon_state = "trimline_corner"
|
||||
|
||||
/obj/effect/turf_decal/trimline/red/end
|
||||
icon_state = "trimline_end"
|
||||
|
||||
/obj/effect/turf_decal/trimline/red/filled
|
||||
icon_state = "trimline_box_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/red/filled/line
|
||||
icon_state = "trimline_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/red/filled/corner
|
||||
icon_state = "trimline_corner_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/red/filled/end
|
||||
icon_state = "trimline_end_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/green
|
||||
color = "#9FED58"
|
||||
|
||||
/obj/effect/turf_decal/trimline/green/line
|
||||
icon_state = "trimline"
|
||||
|
||||
/obj/effect/turf_decal/trimline/green/corner
|
||||
icon_state = "trimline_corner"
|
||||
|
||||
/obj/effect/turf_decal/trimline/green/end
|
||||
icon_state = "trimline_end"
|
||||
|
||||
/obj/effect/turf_decal/trimline/green/filled
|
||||
icon_state = "trimline_box_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/green/filled/line
|
||||
icon_state = "trimline_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/green/filled/corner
|
||||
icon_state = "trimline_corner_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/green/filled/end
|
||||
icon_state = "trimline_end_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/blue
|
||||
color = "#52B4E9"
|
||||
|
||||
/obj/effect/turf_decal/trimline/blue/line
|
||||
icon_state = "trimline"
|
||||
|
||||
/obj/effect/turf_decal/trimline/blue/corner
|
||||
icon_state = "trimline_corner"
|
||||
|
||||
/obj/effect/turf_decal/trimline/blue/end
|
||||
icon_state = "trimline_end"
|
||||
|
||||
/obj/effect/turf_decal/trimline/blue/filled
|
||||
icon_state = "trimline_box_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/blue/filled/line
|
||||
icon_state = "trimline_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/blue/filled/corner
|
||||
icon_state = "trimline_corner_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/blue/filled/end
|
||||
icon_state = "trimline_end_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/yellow
|
||||
color = "#EFB341"
|
||||
|
||||
/obj/effect/turf_decal/trimline/yellow/line
|
||||
icon_state = "trimline"
|
||||
|
||||
/obj/effect/turf_decal/trimline/yellow/corner
|
||||
icon_state = "trimline_corner"
|
||||
|
||||
/obj/effect/turf_decal/trimline/yellow/end
|
||||
icon_state = "trimline_end"
|
||||
|
||||
/obj/effect/turf_decal/trimline/yellow/filled
|
||||
icon_state = "trimline_box_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/yellow/filled/line
|
||||
icon_state = "trimline_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/yellow/filled/corner
|
||||
icon_state = "trimline_corner_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/yellow/filled/end
|
||||
icon_state = "trimline_end_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/purple
|
||||
color = "#D381C9"
|
||||
|
||||
/obj/effect/turf_decal/trimline/purple/line
|
||||
icon_state = "trimline"
|
||||
|
||||
/obj/effect/turf_decal/trimline/purple/corner
|
||||
icon_state = "trimline_corner"
|
||||
|
||||
/obj/effect/turf_decal/trimline/purple/end
|
||||
icon_state = "trimline_end"
|
||||
|
||||
/obj/effect/turf_decal/trimline/purple/filled
|
||||
icon_state = "trimline_box_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/purple/filled/line
|
||||
icon_state = "trimline_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/purple/filled/corner
|
||||
icon_state = "trimline_corner_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/purple/filled/end
|
||||
icon_state = "trimline_end_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/brown
|
||||
color = "#A46106"
|
||||
|
||||
/obj/effect/turf_decal/trimline/brown/line
|
||||
icon_state = "trimline"
|
||||
|
||||
/obj/effect/turf_decal/trimline/brown/corner
|
||||
icon_state = "trimline_corner"
|
||||
|
||||
/obj/effect/turf_decal/trimline/brown/end
|
||||
icon_state = "trimline_end"
|
||||
|
||||
/obj/effect/turf_decal/trimline/brown/filled
|
||||
icon_state = "trimline_box_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/brown/filled/line
|
||||
icon_state = "trimline_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/brown/filled/corner
|
||||
icon_state = "trimline_corner_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/brown/filled/end
|
||||
icon_state = "trimline_end_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/neutral
|
||||
color = "#D4D4D4"
|
||||
alpha = 50
|
||||
|
||||
/obj/effect/turf_decal/trimline/neutral/line
|
||||
icon_state = "trimline"
|
||||
|
||||
/obj/effect/turf_decal/trimline/neutral/corner
|
||||
icon_state = "trimline_corner"
|
||||
|
||||
/obj/effect/turf_decal/trimline/neutral/end
|
||||
icon_state = "trimline_end"
|
||||
|
||||
/obj/effect/turf_decal/trimline/neutral/filled
|
||||
icon_state = "trimline_box_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/neutral/filled/line
|
||||
icon_state = "trimline_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/neutral/filled/corner
|
||||
icon_state = "trimline_corner_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/brown/filled/end
|
||||
icon_state = "trimline_end_fill"
|
||||
@@ -162,10 +162,11 @@
|
||||
|
||||
/obj/item/circuitboard/computer/prisoner
|
||||
name = "Prisoner Management Console (Computer Board)"
|
||||
build_path = /obj/machinery/computer/prisoner
|
||||
build_path = /obj/machinery/computer/prisoner/management
|
||||
|
||||
/obj/item/circuitboard/computer/gulag_teleporter_console
|
||||
name = "Labor Camp teleporter console (Computer Board)"
|
||||
build_path = /obj/machinery/computer/gulag_teleporter_computer
|
||||
build_path = /obj/machinery/computer/prisoner/gulag_teleporter_computer
|
||||
|
||||
/obj/item/circuitboard/computer/rdconsole/production
|
||||
name = "R&D Console Production Only (Computer Board)"
|
||||
@@ -373,4 +374,4 @@
|
||||
|
||||
/obj/item/circuitboard/computer/nanite_cloud_controller
|
||||
name = "Nanite Cloud Control (Computer Board)"
|
||||
build_path = /obj/machinery/computer/nanite_cloud_controller
|
||||
build_path = /obj/machinery/computer/nanite_cloud_controller
|
||||
|
||||
@@ -794,4 +794,11 @@
|
||||
name = "Red Queen"
|
||||
id = "red_queen"
|
||||
results = list("red_queen" = 10)
|
||||
required_reagents = list("tea" = 6, "mercury" = 2, "blackpepper" = 1, "growthserum" = 1)
|
||||
required_reagents = list("tea" = 6, "mercury" = 2, "blackpepper" = 1, "growthserum" = 1)
|
||||
|
||||
/datum/chemical_reaction/commander_and_chief
|
||||
name = "Commander and Chief"
|
||||
id = "commander_and_chief"
|
||||
results = list("commander_and_chief" = 50)
|
||||
required_reagents = list("alliescocktail" = 50, "champagne" = 20, "doctorsdelight" = 10, "quintuple_sec" = 10, "screwdrivercocktail" = 10)
|
||||
mix_message = "When your powers combine, I am Captain Pl-..."
|
||||
|
||||
@@ -1,114 +1,116 @@
|
||||
/*
|
||||
Captain
|
||||
*/
|
||||
/datum/job/captain
|
||||
title = "Captain"
|
||||
flag = CAPTAIN
|
||||
department_head = list("CentCom")
|
||||
department_flag = ENGSEC
|
||||
faction = "Station"
|
||||
total_positions = 1
|
||||
spawn_positions = 1
|
||||
supervisors = "Nanotrasen officials and Space law"
|
||||
selection_color = "#ccccff"
|
||||
req_admin_notify = 1
|
||||
minimal_player_age = 14
|
||||
exp_requirements = 180
|
||||
exp_type = EXP_TYPE_CREW
|
||||
|
||||
outfit = /datum/outfit/job/captain
|
||||
|
||||
access = list() //See get_access()
|
||||
minimal_access = list() //See get_access()
|
||||
|
||||
blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/insanity)
|
||||
|
||||
/datum/job/captain/get_access()
|
||||
return get_all_accesses()
|
||||
|
||||
/datum/job/captain/announce(mob/living/carbon/human/H)
|
||||
..()
|
||||
SSticker.OnRoundstart(CALLBACK(GLOBAL_PROC, .proc/minor_announce, "Captain [H.nameless ? "" : "[H.real_name] "]on deck!"))
|
||||
|
||||
/datum/outfit/job/captain
|
||||
name = "Captain"
|
||||
jobtype = /datum/job/captain
|
||||
|
||||
id = /obj/item/card/id/gold
|
||||
belt = /obj/item/pda/captain
|
||||
glasses = /obj/item/clothing/glasses/sunglasses
|
||||
ears = /obj/item/radio/headset/heads/captain/alt
|
||||
gloves = /obj/item/clothing/gloves/color/captain
|
||||
uniform = /obj/item/clothing/under/rank/captain
|
||||
suit = /obj/item/clothing/suit/armor/vest/capcarapace
|
||||
shoes = /obj/item/clothing/shoes/sneakers/brown
|
||||
head = /obj/item/clothing/head/caphat
|
||||
backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1, /obj/item/station_charter=1)
|
||||
|
||||
backpack = /obj/item/storage/backpack/captain
|
||||
satchel = /obj/item/storage/backpack/satchel/cap
|
||||
duffelbag = /obj/item/storage/backpack/duffelbag/captain
|
||||
|
||||
implants = list(/obj/item/implant/mindshield)
|
||||
accessory = /obj/item/clothing/accessory/medal/gold/captain
|
||||
|
||||
chameleon_extras = list(/obj/item/gun/energy/e_gun, /obj/item/stamp/captain)
|
||||
|
||||
/datum/outfit/job/captain/hardsuit
|
||||
name = "Captain (Hardsuit)"
|
||||
|
||||
mask = /obj/item/clothing/mask/gas/sechailer
|
||||
suit = /obj/item/clothing/suit/space/hardsuit/captain
|
||||
suit_store = /obj/item/tank/internals/oxygen
|
||||
|
||||
/*
|
||||
Head of Personnel
|
||||
*/
|
||||
/datum/job/hop
|
||||
title = "Head of Personnel"
|
||||
flag = HOP
|
||||
department_head = list("Captain")
|
||||
department_flag = CIVILIAN
|
||||
head_announce = list(RADIO_CHANNEL_SERVICE)
|
||||
faction = "Station"
|
||||
total_positions = 1
|
||||
spawn_positions = 1
|
||||
supervisors = "the captain"
|
||||
selection_color = "#ddddff"
|
||||
req_admin_notify = 1
|
||||
minimal_player_age = 10
|
||||
exp_requirements = 180
|
||||
exp_type = EXP_TYPE_CREW
|
||||
exp_type_department = EXP_TYPE_SUPPLY
|
||||
|
||||
outfit = /datum/outfit/job/hop
|
||||
|
||||
access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_COURT, ACCESS_WEAPONS,
|
||||
ACCESS_MEDICAL, ACCESS_ENGINE, ACCESS_CHANGE_IDS, ACCESS_AI_UPLOAD, ACCESS_EVA, ACCESS_HEADS,
|
||||
ACCESS_ALL_PERSONAL_LOCKERS, ACCESS_MAINT_TUNNELS, ACCESS_BAR, ACCESS_JANITOR, ACCESS_CONSTRUCTION, ACCESS_MORGUE,
|
||||
ACCESS_CREMATORIUM, ACCESS_KITCHEN, ACCESS_CARGO, ACCESS_CARGO_BOT, ACCESS_MAILSORTING, ACCESS_QM, ACCESS_HYDROPONICS, ACCESS_LAWYER,
|
||||
ACCESS_THEATRE, ACCESS_CHAPEL_OFFICE, ACCESS_LIBRARY, ACCESS_RESEARCH, ACCESS_MINING, ACCESS_VAULT, ACCESS_MINING_STATION,
|
||||
ACCESS_HOP, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_MINERAL_STOREROOM)
|
||||
minimal_access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_COURT, ACCESS_WEAPONS,
|
||||
ACCESS_MEDICAL, ACCESS_ENGINE, ACCESS_CHANGE_IDS, ACCESS_AI_UPLOAD, ACCESS_EVA, ACCESS_HEADS,
|
||||
ACCESS_ALL_PERSONAL_LOCKERS, ACCESS_MAINT_TUNNELS, ACCESS_BAR, ACCESS_JANITOR, ACCESS_CONSTRUCTION, ACCESS_MORGUE,
|
||||
ACCESS_CREMATORIUM, ACCESS_KITCHEN, ACCESS_CARGO, ACCESS_CARGO_BOT, ACCESS_MAILSORTING, ACCESS_QM, ACCESS_HYDROPONICS, ACCESS_LAWYER,
|
||||
ACCESS_THEATRE, ACCESS_CHAPEL_OFFICE, ACCESS_LIBRARY, ACCESS_RESEARCH, ACCESS_MINING, ACCESS_VAULT, ACCESS_MINING_STATION,
|
||||
ACCESS_HOP, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_MINERAL_STOREROOM)
|
||||
|
||||
blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/prosopagnosia, /datum/quirk/insanity)
|
||||
|
||||
/datum/outfit/job/hop
|
||||
name = "Head of Personnel"
|
||||
jobtype = /datum/job/hop
|
||||
|
||||
id = /obj/item/card/id/silver
|
||||
belt = /obj/item/pda/heads/hop
|
||||
ears = /obj/item/radio/headset/heads/hop
|
||||
uniform = /obj/item/clothing/under/rank/head_of_personnel
|
||||
shoes = /obj/item/clothing/shoes/sneakers/brown
|
||||
head = /obj/item/clothing/head/hopcap
|
||||
backpack_contents = list(/obj/item/storage/box/ids=1,\
|
||||
/obj/item/melee/classic_baton/telescopic=1, /obj/item/modular_computer/tablet/preset/advanced = 1)
|
||||
|
||||
chameleon_extras = list(/obj/item/gun/energy/e_gun, /obj/item/stamp/hop)
|
||||
/*
|
||||
Captain
|
||||
*/
|
||||
/datum/job/captain
|
||||
title = "Captain"
|
||||
flag = CAPTAIN
|
||||
department_head = list("CentCom")
|
||||
department_flag = ENGSEC
|
||||
faction = "Station"
|
||||
total_positions = 1
|
||||
spawn_positions = 1
|
||||
supervisors = "Nanotrasen officials and Space law"
|
||||
selection_color = "#ccccff"
|
||||
req_admin_notify = 1
|
||||
minimal_player_age = 14
|
||||
exp_requirements = 180
|
||||
exp_type = EXP_TYPE_CREW
|
||||
|
||||
outfit = /datum/outfit/job/captain
|
||||
|
||||
access = list() //See get_access()
|
||||
minimal_access = list() //See get_access()
|
||||
|
||||
mind_traits = list(TRAIT_CAPTAIN_METABOLISM)
|
||||
|
||||
blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/insanity)
|
||||
|
||||
/datum/job/captain/get_access()
|
||||
return get_all_accesses()
|
||||
|
||||
/datum/job/captain/announce(mob/living/carbon/human/H)
|
||||
..()
|
||||
SSticker.OnRoundstart(CALLBACK(GLOBAL_PROC, .proc/minor_announce, "Captain [H.nameless ? "" : "[H.real_name] "]on deck!"))
|
||||
|
||||
/datum/outfit/job/captain
|
||||
name = "Captain"
|
||||
jobtype = /datum/job/captain
|
||||
|
||||
id = /obj/item/card/id/gold
|
||||
belt = /obj/item/pda/captain
|
||||
glasses = /obj/item/clothing/glasses/sunglasses
|
||||
ears = /obj/item/radio/headset/heads/captain/alt
|
||||
gloves = /obj/item/clothing/gloves/color/captain
|
||||
uniform = /obj/item/clothing/under/rank/captain
|
||||
suit = /obj/item/clothing/suit/armor/vest/capcarapace
|
||||
shoes = /obj/item/clothing/shoes/sneakers/brown
|
||||
head = /obj/item/clothing/head/caphat
|
||||
backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1, /obj/item/station_charter=1)
|
||||
|
||||
backpack = /obj/item/storage/backpack/captain
|
||||
satchel = /obj/item/storage/backpack/satchel/cap
|
||||
duffelbag = /obj/item/storage/backpack/duffelbag/captain
|
||||
|
||||
implants = list(/obj/item/implant/mindshield)
|
||||
accessory = /obj/item/clothing/accessory/medal/gold/captain
|
||||
|
||||
chameleon_extras = list(/obj/item/gun/energy/e_gun, /obj/item/stamp/captain)
|
||||
|
||||
/datum/outfit/job/captain/hardsuit
|
||||
name = "Captain (Hardsuit)"
|
||||
|
||||
mask = /obj/item/clothing/mask/gas/sechailer
|
||||
suit = /obj/item/clothing/suit/space/hardsuit/captain
|
||||
suit_store = /obj/item/tank/internals/oxygen
|
||||
|
||||
/*
|
||||
Head of Personnel
|
||||
*/
|
||||
/datum/job/hop
|
||||
title = "Head of Personnel"
|
||||
flag = HOP
|
||||
department_head = list("Captain")
|
||||
department_flag = CIVILIAN
|
||||
head_announce = list(RADIO_CHANNEL_SERVICE)
|
||||
faction = "Station"
|
||||
total_positions = 1
|
||||
spawn_positions = 1
|
||||
supervisors = "the captain"
|
||||
selection_color = "#ddddff"
|
||||
req_admin_notify = 1
|
||||
minimal_player_age = 10
|
||||
exp_requirements = 180
|
||||
exp_type = EXP_TYPE_CREW
|
||||
exp_type_department = EXP_TYPE_SUPPLY
|
||||
|
||||
outfit = /datum/outfit/job/hop
|
||||
|
||||
access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_COURT, ACCESS_WEAPONS,
|
||||
ACCESS_MEDICAL, ACCESS_ENGINE, ACCESS_CHANGE_IDS, ACCESS_AI_UPLOAD, ACCESS_EVA, ACCESS_HEADS,
|
||||
ACCESS_ALL_PERSONAL_LOCKERS, ACCESS_MAINT_TUNNELS, ACCESS_BAR, ACCESS_JANITOR, ACCESS_CONSTRUCTION, ACCESS_MORGUE,
|
||||
ACCESS_CREMATORIUM, ACCESS_KITCHEN, ACCESS_CARGO, ACCESS_CARGO_BOT, ACCESS_MAILSORTING, ACCESS_QM, ACCESS_HYDROPONICS, ACCESS_LAWYER,
|
||||
ACCESS_THEATRE, ACCESS_CHAPEL_OFFICE, ACCESS_LIBRARY, ACCESS_RESEARCH, ACCESS_MINING, ACCESS_VAULT, ACCESS_MINING_STATION,
|
||||
ACCESS_HOP, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_MINERAL_STOREROOM)
|
||||
minimal_access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_COURT, ACCESS_WEAPONS,
|
||||
ACCESS_MEDICAL, ACCESS_ENGINE, ACCESS_CHANGE_IDS, ACCESS_AI_UPLOAD, ACCESS_EVA, ACCESS_HEADS,
|
||||
ACCESS_ALL_PERSONAL_LOCKERS, ACCESS_MAINT_TUNNELS, ACCESS_BAR, ACCESS_JANITOR, ACCESS_CONSTRUCTION, ACCESS_MORGUE,
|
||||
ACCESS_CREMATORIUM, ACCESS_KITCHEN, ACCESS_CARGO, ACCESS_CARGO_BOT, ACCESS_MAILSORTING, ACCESS_QM, ACCESS_HYDROPONICS, ACCESS_LAWYER,
|
||||
ACCESS_THEATRE, ACCESS_CHAPEL_OFFICE, ACCESS_LIBRARY, ACCESS_RESEARCH, ACCESS_MINING, ACCESS_VAULT, ACCESS_MINING_STATION,
|
||||
ACCESS_HOP, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_MINERAL_STOREROOM)
|
||||
|
||||
blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/prosopagnosia, /datum/quirk/insanity)
|
||||
|
||||
/datum/outfit/job/hop
|
||||
name = "Head of Personnel"
|
||||
jobtype = /datum/job/hop
|
||||
|
||||
id = /obj/item/card/id/silver
|
||||
belt = /obj/item/pda/heads/hop
|
||||
ears = /obj/item/radio/headset/heads/hop
|
||||
uniform = /obj/item/clothing/under/rank/head_of_personnel
|
||||
shoes = /obj/item/clothing/shoes/sneakers/brown
|
||||
head = /obj/item/clothing/head/hopcap
|
||||
backpack_contents = list(/obj/item/storage/box/ids=1,\
|
||||
/obj/item/melee/classic_baton/telescopic=1, /obj/item/modular_computer/tablet/preset/advanced = 1)
|
||||
|
||||
chameleon_extras = list(/obj/item/gun/energy/e_gun, /obj/item/stamp/hop)
|
||||
|
||||
@@ -10,12 +10,10 @@ GLOBAL_LIST(labor_sheet_values)
|
||||
density = FALSE
|
||||
var/obj/machinery/mineral/stacking_machine/laborstacker/stacking_machine = null
|
||||
var/machinedir = SOUTH
|
||||
var/obj/item/card/id/prisoner/inserted_id
|
||||
var/obj/machinery/door/airlock/release_door
|
||||
var/door_tag = "prisonshuttle"
|
||||
var/obj/item/radio/Radio //needed to send messages to sec radio
|
||||
|
||||
|
||||
/obj/machinery/mineral/labor_claim_console/Initialize()
|
||||
. = ..()
|
||||
Radio = new/obj/item/radio(src)
|
||||
@@ -34,18 +32,6 @@ GLOBAL_LIST(labor_sheet_values)
|
||||
/proc/cmp_sheet_list(list/a, list/b)
|
||||
return a["value"] - b["value"]
|
||||
|
||||
/obj/machinery/mineral/labor_claim_console/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/card/id/prisoner))
|
||||
if(!inserted_id)
|
||||
if(!user.transferItemToLoc(I, src))
|
||||
return
|
||||
inserted_id = I
|
||||
to_chat(user, "<span class='notice'>You insert [I].</span>")
|
||||
return
|
||||
else
|
||||
to_chat(user, "<span class='notice'>There's an ID inserted already.</span>")
|
||||
return ..()
|
||||
|
||||
/obj/machinery/mineral/labor_claim_console/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
@@ -58,14 +44,20 @@ GLOBAL_LIST(labor_sheet_values)
|
||||
var/can_go_home = FALSE
|
||||
|
||||
data["emagged"] = (obj_flags & EMAGGED) ? 1 : 0
|
||||
if(inserted_id)
|
||||
data["id"] = inserted_id
|
||||
data["id_name"] = inserted_id.registered_name
|
||||
data["points"] = inserted_id.points
|
||||
data["goal"] = inserted_id.goal
|
||||
if(check_auth())
|
||||
if(obj_flags & EMAGGED)
|
||||
can_go_home = TRUE
|
||||
|
||||
data["status_info"] = "No Prisoner ID detected."
|
||||
var/obj/item/card/id/I = user.get_idcard(TRUE)
|
||||
if(istype(I, /obj/item/card/id/prisoner))
|
||||
var/obj/item/card/id/prisoner/P = I
|
||||
data["id_points"] = P.points
|
||||
if(P.points >= P.goal)
|
||||
can_go_home = TRUE
|
||||
data["status_info"] = "Goal met!"
|
||||
else
|
||||
data["status_info"] = "You are [(P.goal - P.points)] points away."
|
||||
|
||||
if(stacking_machine)
|
||||
data["unclaimed_points"] = stacking_machine.points
|
||||
|
||||
@@ -78,29 +70,19 @@ GLOBAL_LIST(labor_sheet_values)
|
||||
if(..())
|
||||
return
|
||||
switch(action)
|
||||
if("handle_id")
|
||||
if(inserted_id)
|
||||
if(!usr.get_active_held_item())
|
||||
usr.put_in_hands(inserted_id)
|
||||
inserted_id = null
|
||||
else
|
||||
inserted_id.forceMove(get_turf(src))
|
||||
inserted_id = null
|
||||
else
|
||||
var/obj/item/I = usr.get_active_held_item()
|
||||
if(istype(I, /obj/item/card/id/prisoner))
|
||||
if(!usr.transferItemToLoc(I, src))
|
||||
return
|
||||
inserted_id = I
|
||||
if("claim_points")
|
||||
inserted_id.points += stacking_machine.points
|
||||
stacking_machine.points = 0
|
||||
to_chat(usr, "Points transferred.")
|
||||
var/mob/M = usr
|
||||
var/obj/item/card/id/I = M.get_idcard(TRUE)
|
||||
if(istype(I, /obj/item/card/id/prisoner))
|
||||
var/obj/item/card/id/prisoner/P = I
|
||||
P.points += stacking_machine.points
|
||||
stacking_machine.points = 0
|
||||
to_chat(usr, "<span class='notice'>Points transferred.</span>")
|
||||
else
|
||||
to_chat(usr, "<span class='notice'>No valid id for point transfer detected.</span>")
|
||||
if("move_shuttle")
|
||||
if(!alone_in_area(get_area(src), usr))
|
||||
to_chat(usr, "<span class='warning'>Prisoners are only allowed to be released while alone.</span>")
|
||||
else if(!check_auth())
|
||||
to_chat(usr, "<span class='warning'>Prisoners are only allowed to be released when they reach their point goal.</span>")
|
||||
else
|
||||
switch(SSshuttle.moveShuttle("laborcamp", "laborcamp_home", TRUE))
|
||||
if(1)
|
||||
@@ -112,14 +94,9 @@ GLOBAL_LIST(labor_sheet_values)
|
||||
else
|
||||
if(!(obj_flags & EMAGGED))
|
||||
Radio.set_frequency(FREQ_SECURITY)
|
||||
Radio.talk_into(src, "[inserted_id.registered_name] has returned to the station. Minerals and Prisoner ID card ready for retrieval.", FREQ_SECURITY)
|
||||
Radio.talk_into(src, "A prisoner has returned to the station. Minerals and Prisoner ID card ready for retrieval.", FREQ_SECURITY)
|
||||
to_chat(usr, "<span class='notice'>Shuttle received message and will be sent shortly.</span>")
|
||||
|
||||
/obj/machinery/mineral/labor_claim_console/proc/check_auth()
|
||||
if(obj_flags & EMAGGED)
|
||||
return 1 //Shuttle is emagged, let any ol' person through
|
||||
return (istype(inserted_id) && inserted_id.points >= inserted_id.goal) //Otherwise, only let them out if the prisoner's reached his quota.
|
||||
|
||||
/obj/machinery/mineral/labor_claim_console/proc/locate_stacking_machine()
|
||||
stacking_machine = locate(/obj/machinery/mineral/stacking_machine, get_step(src, machinedir))
|
||||
if(stacking_machine)
|
||||
@@ -135,10 +112,8 @@ GLOBAL_LIST(labor_sheet_values)
|
||||
to_chat(user, "<span class='warning'>PZZTTPFFFT</span>")
|
||||
return TRUE
|
||||
|
||||
|
||||
/**********************Prisoner Collection Unit**************************/
|
||||
|
||||
|
||||
/obj/machinery/mineral/stacking_machine/laborstacker
|
||||
force_connect = TRUE
|
||||
var/points = 0 //The unclaimed value of ore stacked.
|
||||
@@ -154,6 +129,7 @@ GLOBAL_LIST(labor_sheet_values)
|
||||
return ..()
|
||||
|
||||
/**********************Point Lookup Console**************************/
|
||||
|
||||
/obj/machinery/mineral/labor_points_checker
|
||||
name = "points checking console"
|
||||
desc = "A console used by prisoners to check the progress on their quotas. Simply swipe a prisoner ID."
|
||||
|
||||
@@ -13,7 +13,6 @@
|
||||
speed_process = TRUE
|
||||
circuit = /obj/item/circuitboard/machine/ore_redemption
|
||||
layer = BELOW_OBJ_LAYER
|
||||
var/obj/item/card/id/inserted_id
|
||||
var/points = 0
|
||||
var/ore_pickup_rate = 15
|
||||
var/sheet_per_ore = 1
|
||||
@@ -48,18 +47,23 @@
|
||||
point_upgrade = point_upgrade_temp
|
||||
sheet_per_ore = sheet_per_ore_temp
|
||||
|
||||
/obj/machinery/mineral/ore_redemption/examine(mob/user)
|
||||
. = ..()
|
||||
if(in_range(user, src) || isobserver(user))
|
||||
. += "<span class='notice'>The status display reads: Smelting <b>[sheet_per_ore]</b> sheet(s) per piece of ore.<br>Ore pickup speed at <b>[ore_pickup_rate]</b>.</span>"
|
||||
|
||||
/obj/machinery/mineral/ore_redemption/proc/smelt_ore(obj/item/stack/ore/O)
|
||||
var/datum/component/material_container/mat_container = materials.mat_container
|
||||
if (!mat_container)
|
||||
return
|
||||
|
||||
if(istype(O, /obj/item/stack/ore/bluespace_crystal/refined))
|
||||
if(O.refined_type == null)
|
||||
return
|
||||
|
||||
ore_buffer -= O
|
||||
|
||||
if(O && O.refined_type)
|
||||
points += O.points * point_upgrade * O.amount
|
||||
points += O.points * O.amount
|
||||
|
||||
var/material_amount = mat_container.get_item_material_amount(O)
|
||||
|
||||
@@ -72,11 +76,8 @@
|
||||
else
|
||||
var/mats = O.materials & mat_container.materials
|
||||
var/amount = O.amount
|
||||
var/id = inserted_id && inserted_id.registered_name
|
||||
if (id)
|
||||
id = " (ID: [id])"
|
||||
mat_container.insert_item(O, sheet_per_ore) //insert it
|
||||
materials.silo_log(src, "smelted", amount, "ores[id]", mats)
|
||||
materials.silo_log(src, "smelted", amount, "ores", mats)
|
||||
qdel(O)
|
||||
|
||||
/obj/machinery/mineral/ore_redemption/proc/can_smelt_alloy(datum/design/D)
|
||||
@@ -168,15 +169,7 @@
|
||||
return
|
||||
|
||||
if(!powered())
|
||||
return
|
||||
if(istype(W, /obj/item/card/id))
|
||||
var/obj/item/card/id/I = user.get_active_held_item()
|
||||
if(istype(I) && !istype(inserted_id))
|
||||
if(!user.transferItemToLoc(I, src))
|
||||
return
|
||||
inserted_id = I
|
||||
interact(user)
|
||||
return
|
||||
return ..()
|
||||
|
||||
if(istype(W, /obj/item/disk/design_disk))
|
||||
if(user.transferItemToLoc(W, src))
|
||||
@@ -205,9 +198,6 @@
|
||||
/obj/machinery/mineral/ore_redemption/ui_data(mob/user)
|
||||
var/list/data = list()
|
||||
data["unclaimedPoints"] = points
|
||||
if(inserted_id)
|
||||
data["hasID"] = TRUE
|
||||
data["claimedPoints"] = inserted_id.mining_points
|
||||
|
||||
data["materials"] = list()
|
||||
var/datum/component/material_container/mat_container = materials.mat_container
|
||||
@@ -245,32 +235,24 @@
|
||||
return
|
||||
var/datum/component/material_container/mat_container = materials.mat_container
|
||||
switch(action)
|
||||
if("Eject")
|
||||
if(!inserted_id)
|
||||
return
|
||||
usr.put_in_hands(inserted_id)
|
||||
inserted_id = null
|
||||
return TRUE
|
||||
if("Insert")
|
||||
var/obj/item/card/id/I = usr.get_active_held_item()
|
||||
if(istype(I))
|
||||
if(!usr.transferItemToLoc(I,src))
|
||||
return
|
||||
inserted_id = I
|
||||
else
|
||||
to_chat(usr, "<span class='warning'>Not a valid ID!</span>")
|
||||
return TRUE
|
||||
if("Claim")
|
||||
if(inserted_id)
|
||||
inserted_id.mining_points += points
|
||||
points = 0
|
||||
var/mob/M = usr
|
||||
var/obj/item/card/id/I = M.get_idcard(TRUE)
|
||||
if(points)
|
||||
if(I)
|
||||
I.mining_points += points
|
||||
points = 0
|
||||
else
|
||||
to_chat(usr, "<span class='warning'>No ID detected.</span>")
|
||||
else
|
||||
to_chat(usr, "<span class='warning'>No points to claim.</span>")
|
||||
return TRUE
|
||||
if("Release")
|
||||
if(!mat_container)
|
||||
return
|
||||
if(materials.on_hold())
|
||||
to_chat(usr, "<span class='warning'>Mineral access is on hold, please contact the quartermaster.</span>")
|
||||
else if(!check_access(inserted_id) && !allowed(usr)) //Check the ID inside, otherwise check the user
|
||||
else if(!allowed(usr)) //Check the ID inside, otherwise check the user
|
||||
to_chat(usr, "<span class='warning'>Required access not found.</span>")
|
||||
else
|
||||
var/mat_id = params["id"]
|
||||
@@ -293,6 +275,7 @@
|
||||
var/list/mats = list()
|
||||
mats[mat_id] = MINERAL_MATERIAL_AMOUNT
|
||||
materials.silo_log(src, "released", -count, "sheets", mats)
|
||||
//Logging deleted for quick coding
|
||||
return TRUE
|
||||
if("diskInsert")
|
||||
var/obj/item/disk/design_disk/disk = usr.get_active_held_item()
|
||||
@@ -321,7 +304,7 @@
|
||||
return
|
||||
var/alloy_id = params["id"]
|
||||
var/datum/design/alloy = stored_research.isDesignResearchedID(alloy_id)
|
||||
if((check_access(inserted_id) || allowed(usr)) && alloy)
|
||||
if((check_access(inserted_scan_id) || allowed(usr)) && alloy)
|
||||
var/smelt_amount = can_smelt_alloy(alloy)
|
||||
var/desired = 0
|
||||
if (params["sheets"])
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
new /datum/data/mining_equipment("Soap", /obj/item/soap/nanotrasen, 200),
|
||||
new /datum/data/mining_equipment("Laser Pointer", /obj/item/laser_pointer, 300),
|
||||
new /datum/data/mining_equipment("Alien Toy", /obj/item/clothing/mask/facehugger/toy, 300),
|
||||
new /datum/data/mining_equipment("Stabilizing Serum", /obj/item/hivelordstabilizer, 400),
|
||||
new /datum/data/mining_equipment("Fulton Beacon", /obj/item/fulton_core, 400),
|
||||
new /datum/data/mining_equipment("Shelter Capsule", /obj/item/survivalcapsule, 400),
|
||||
new /datum/data/mining_equipment("Survival Knife", /obj/item/kitchen/knife/combat/survival, 450),
|
||||
@@ -28,11 +29,10 @@
|
||||
new /datum/data/mining_equipment("Larger Ore Bag", /obj/item/storage/bag/ore/large, 500),
|
||||
new /datum/data/mining_equipment("500 Point Transfer Card", /obj/item/card/mining_point_card/mp500, 500),
|
||||
new /datum/data/mining_equipment("Tracking Implant Kit", /obj/item/storage/box/minertracker, 600),
|
||||
new /datum/data/mining_equipment("Survival Medipen", /obj/item/reagent_containers/hypospray/medipen/survival, 750),
|
||||
new /datum/data/mining_equipment("Stabilizing Serum", /obj/item/hivelordstabilizer, 750),
|
||||
new /datum/data/mining_equipment("Jaunter", /obj/item/wormhole_jaunter, 750),
|
||||
new /datum/data/mining_equipment("Kinetic Crusher", /obj/item/twohanded/required/kinetic_crusher, 750),
|
||||
new /datum/data/mining_equipment("Kinetic Accelerator", /obj/item/gun/energy/kinetic_accelerator, 750),
|
||||
new /datum/data/mining_equipment("Survival Medipen", /obj/item/reagent_containers/hypospray/medipen/survival, 750),
|
||||
new /datum/data/mining_equipment("Brute First-Aid Kit", /obj/item/storage/firstaid/brute, 800),
|
||||
new /datum/data/mining_equipment("Burn First-Aid Kit", /obj/item/storage/firstaid/fire, 800),
|
||||
new /datum/data/mining_equipment("First-Aid Kit", /obj/item/storage/firstaid/regular, 800),
|
||||
@@ -54,7 +54,6 @@
|
||||
new /datum/data/mining_equipment("Super Resonator", /obj/item/resonator/upgraded, 2500),
|
||||
new /datum/data/mining_equipment("Jump Boots", /obj/item/clothing/shoes/bhop, 2500),
|
||||
new /datum/data/mining_equipment("Luxury Shelter Capsule", /obj/item/survivalcapsule/luxury, 3000),
|
||||
new /datum/data/mining_equipment("Miner Full Replacement", /obj/item/storage/backpack/duffelbag/mining_cloned, 3000),
|
||||
new /datum/data/mining_equipment("Nanotrasen Minebot", /mob/living/simple_animal/hostile/mining_drone, 800),
|
||||
new /datum/data/mining_equipment("Minebot Melee Upgrade", /obj/item/mine_bot_upgrade, 400),
|
||||
new /datum/data/mining_equipment("Minebot Armor Upgrade", /obj/item/mine_bot_upgrade/health, 400),
|
||||
@@ -69,8 +68,8 @@
|
||||
new /datum/data/mining_equipment("KA Damage Increase", /obj/item/borg/upgrade/modkit/damage, 1000),
|
||||
new /datum/data/mining_equipment("KA Cooldown Decrease", /obj/item/borg/upgrade/modkit/cooldown, 1000),
|
||||
new /datum/data/mining_equipment("KA AoE Damage", /obj/item/borg/upgrade/modkit/aoe/mobs, 2000),
|
||||
new /datum/data/mining_equipment("Miner Full Replacement", /obj/item/storage/backpack/duffelbag/mining_cloned, 3000),
|
||||
new /datum/data/mining_equipment("Premium Accelerator", /obj/item/gun/energy/kinetic_accelerator/premiumka, 8000)
|
||||
|
||||
)
|
||||
|
||||
/datum/data/mining_equipment
|
||||
@@ -95,60 +94,42 @@
|
||||
|
||||
/obj/machinery/mineral/equipment_vendor/ui_interact(mob/user)
|
||||
. = ..()
|
||||
var/dat
|
||||
dat +="<div class='statusDisplay'>"
|
||||
if(istype(inserted_id))
|
||||
dat += "You have [inserted_id.mining_points] mining points collected. <A href='?src=[REF(src)];choice=eject'>Eject ID.</A><br>"
|
||||
else
|
||||
dat += "No ID inserted. <A href='?src=[REF(src)];choice=insert'>Insert ID.</A><br>"
|
||||
dat += "</div>"
|
||||
var/list/dat = list()
|
||||
dat += "<br><b>Equipment point cost list:</b><BR><table border='0' width='300'>"
|
||||
for(var/datum/data/mining_equipment/prize in prize_list)
|
||||
dat += "<tr><td>[prize.equipment_name]</td><td>[prize.cost]</td><td><A href='?src=[REF(src)];purchase=[REF(prize)]'>Purchase</A></td></tr>"
|
||||
dat += "</table>"
|
||||
|
||||
var/datum/browser/popup = new(user, "miningvendor", "Mining Equipment Vendor", 400, 350)
|
||||
popup.set_content(dat)
|
||||
popup.set_content(dat.Join())
|
||||
popup.open()
|
||||
return
|
||||
|
||||
/obj/machinery/mineral/equipment_vendor/Topic(href, href_list)
|
||||
if(..())
|
||||
return
|
||||
if(href_list["choice"])
|
||||
if(istype(inserted_id))
|
||||
if(href_list["choice"] == "eject")
|
||||
to_chat(usr, "<span class='notice'>You eject the ID from [src]'s card slot.</span>")
|
||||
inserted_id.forceMove(loc)
|
||||
inserted_id.verb_pickup()
|
||||
inserted_id = null
|
||||
else if(href_list["choice"] == "insert")
|
||||
var/obj/item/card/id/I = usr.get_active_held_item()
|
||||
if(istype(I))
|
||||
if(!usr.transferItemToLoc(I, src))
|
||||
return
|
||||
inserted_id = I
|
||||
to_chat(usr, "<span class='notice'>You insert the ID into [src]'s card slot.</span>")
|
||||
else
|
||||
to_chat(usr, "<span class='warning'>Error: No valid ID!</span>")
|
||||
flick(icon_deny, src)
|
||||
if(href_list["purchase"])
|
||||
if(istype(inserted_id))
|
||||
var/datum/data/mining_equipment/prize = locate(href_list["purchase"])
|
||||
var/mob/M = usr
|
||||
var/obj/item/card/id/I = M.get_idcard(TRUE)
|
||||
if(istype(I))
|
||||
var/datum/data/mining_equipment/prize = locate(href_list["purchase"]) in prize_list
|
||||
if (!prize || !(prize in prize_list))
|
||||
to_chat(usr, "<span class='warning'>Error: Invalid choice!</span>")
|
||||
flick(icon_deny, src)
|
||||
return
|
||||
if(prize.cost > inserted_id.mining_points)
|
||||
to_chat(usr, "<span class='warning'>Error: Insufficient points for [prize.equipment_name]!</span>")
|
||||
if(prize.cost > I.mining_points)
|
||||
to_chat(usr, "<span class='warning'>Error: Insufficient credits for [prize.equipment_name] on [I]!</span>")
|
||||
flick(icon_deny, src)
|
||||
else
|
||||
inserted_id.mining_points -= prize.cost
|
||||
to_chat(usr, "<span class='notice'>[src] clanks to life briefly before vending [prize.equipment_name]!</span>")
|
||||
new prize.equipment_path(src.loc)
|
||||
SSblackbox.record_feedback("nested tally", "mining_equipment_bought", 1, list("[type]", "[prize.equipment_path]"))
|
||||
if (I.mining_points -= prize.cost)
|
||||
to_chat(usr, "<span class='notice'>[src] clanks to life briefly before vending [prize.equipment_name]!</span>")
|
||||
new prize.equipment_path(src.loc)
|
||||
SSblackbox.record_feedback("nested tally", "mining_equipment_bought", 1, list("[type]", "[prize.equipment_path]"))
|
||||
else
|
||||
to_chat(usr, "<span class='warning'>Error: Transaction failure, please try again later!</span>")
|
||||
flick(icon_deny, src)
|
||||
else
|
||||
to_chat(usr, "<span class='warning'>Error: Please insert a valid ID!</span>")
|
||||
to_chat(usr, "<span class='warning'>Error: An ID with a registered account is required!</span>")
|
||||
flick(icon_deny, src)
|
||||
updateUsrDialog()
|
||||
return
|
||||
@@ -160,15 +141,6 @@
|
||||
if(istype(I, /obj/item/suit_voucher))
|
||||
RedeemSVoucher(I, user)
|
||||
return
|
||||
if(istype(I, /obj/item/card/id))
|
||||
var/obj/item/card/id/C = usr.get_active_held_item()
|
||||
if(istype(C) && !istype(inserted_id))
|
||||
if(!usr.transferItemToLoc(C, src))
|
||||
return
|
||||
inserted_id = C
|
||||
to_chat(usr, "<span class='notice'>You insert the ID into [src]'s card slot.</span>")
|
||||
interact(user)
|
||||
return
|
||||
if(default_deconstruction_screwdriver(user, "mining-open", "mining", I))
|
||||
updateUsrDialog()
|
||||
return
|
||||
@@ -212,7 +184,6 @@
|
||||
if(prob(50 / severity) && severity < 3)
|
||||
qdel(src)
|
||||
|
||||
|
||||
/****************Golem Point Vendor**************************/
|
||||
|
||||
/obj/machinery/mineral/equipment_vendor/golem
|
||||
@@ -228,7 +199,6 @@
|
||||
new /datum/data/mining_equipment("Monkey Cube", /obj/item/reagent_containers/food/snacks/monkeycube, 300),
|
||||
new /datum/data/mining_equipment("Toolbelt", /obj/item/storage/belt/utility, 350),
|
||||
new /datum/data/mining_equipment("Royal Cape of the Liberator", /obj/item/bedsheet/rd/royal_cape, 500),
|
||||
new /datum/data/mining_equipment("Sulphuric Acid", /obj/item/reagent_containers/glass/beaker/sulphuric, 500),
|
||||
new /datum/data/mining_equipment("Grey Slime Extract", /obj/item/slime_extract/grey, 1000),
|
||||
new /datum/data/mining_equipment("Modification Kit", /obj/item/borg/upgrade/modkit/trigger_guard, 1700),
|
||||
new /datum/data/mining_equipment("The Liberator's Legacy", /obj/item/storage/box/rndboards, 2000)
|
||||
@@ -323,8 +293,11 @@
|
||||
new /obj/item/encryptionkey/headset_cargo(src)
|
||||
new /obj/item/clothing/mask/gas/explorer(src)
|
||||
new /obj/item/card/mining_access_card(src)
|
||||
new /obj/item/gun/energy/kinetic_accelerator(src)
|
||||
new /obj/item/kitchen/knife/combat/survival(src)
|
||||
new /obj/item/flashlight/seclite(src)
|
||||
|
||||
//CITADEL ADDITIONS BELOW
|
||||
//CITADEL ADDITIONS BELOW
|
||||
|
||||
/obj/item/storage/backpack/duffelbag/mining_cloned
|
||||
name = "mining replacement kit"
|
||||
@@ -336,6 +309,7 @@
|
||||
new /obj/item/clothing/shoes/workboots/mining(src)
|
||||
new /obj/item/clothing/gloves/color/black(src)
|
||||
new /obj/item/implanter/tracking/gps(src)
|
||||
new /obj/item/gun/energy/kinetic_accelerator(src)
|
||||
new /obj/item/kitchen/knife/combat/survival(src)
|
||||
new /obj/item/storage/firstaid/regular(src)
|
||||
new /obj/item/reagent_containers/hypospray/medipen/survival(src)
|
||||
|
||||
@@ -2122,6 +2122,29 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_name = "Planet Cracker"
|
||||
glass_desc = "Although historians believe the drink was originally created to commemorate the end of an important conflict in man's past, its origins have largely been forgotten and it is today seen more as a general symbol of human supremacy."
|
||||
|
||||
/datum/reagent/consumable/ethanol/commander_and_chief
|
||||
name = "Commander and Chief"
|
||||
id = "commander_and_chief"
|
||||
description = "A cocktail for the captain on the go."
|
||||
color = "#ffffc9"
|
||||
boozepwr = 50
|
||||
quality = DRINK_FANTASTIC
|
||||
taste_description = "Tastes like...duty and responsibility?"
|
||||
glass_icon_state = "commander_and_chief"
|
||||
glass_name = "Commander and Chief"
|
||||
glass_desc = "The gems of this majestic chalice represent the departments and their Heads."
|
||||
|
||||
/datum/reagent/consumable/ethanol/commander_and_chief/on_mob_life(mob/living/carbon/M)
|
||||
if(M.mind && HAS_TRAIT(M.mind, TRAIT_CAPTAIN_METABOLISM))
|
||||
M.heal_bodypart_damage(2,2,2)
|
||||
M.adjustBruteLoss(-3.5,0)
|
||||
M.adjustOxyLoss(-3.5,0)
|
||||
M.adjustFireLoss(-3.5,0)
|
||||
M.adjustToxLoss(-3.5,0)
|
||||
M.radiation = max(M.radiation - 25, 0)
|
||||
. = 1
|
||||
return ..()
|
||||
|
||||
/datum/reagent/consumable/ethanol/fruit_wine
|
||||
name = "Fruit Wine"
|
||||
id = "fruit_wine"
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
author: "original by actioninja, port by sishen1542"
|
||||
delete-after: True
|
||||
changes:
|
||||
- tweak: "Medical and Security consoles now check access on worn or inhand ID instead of requiring an inserted ID"
|
||||
- tweak: "mining vendor now reads from ID in hand or on person instead of requiring an inserted ID"
|
||||
- bugfix: "ORM is functional again (for real this time)"
|
||||
- tweak: "ORM claim points button transfers points to worn/inhand ID instead of to an inserted ID, no longer accepts insertions"
|
||||
- tweak: "Same for gulag consoles"
|
||||
@@ -0,0 +1,5 @@
|
||||
author: "Code-Cygnet"
|
||||
delete-after: True
|
||||
changes:
|
||||
- rscadd: "Added new things - Mind trait, alcohol reagent, chemical reagent, drink sprite and recipe."
|
||||
- imageadd: "added commander_and_chief sprite to drinks.dmi"
|
||||
@@ -0,0 +1,4 @@
|
||||
author: "dapnee"
|
||||
delete-after: True
|
||||
changes:
|
||||
- rscadd: "Trim lines!"
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 83 KiB After Width: | Height: | Size: 84 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 51 KiB After Width: | Height: | Size: 54 KiB |
@@ -652,6 +652,9 @@
|
||||
#include "code\game\machinery\computer\arcade\minesweeper.dm"
|
||||
#include "code\game\machinery\computer\arcade\misc_arcade.dm"
|
||||
#include "code\game\machinery\computer\arcade\orion_trail.dm"
|
||||
#include "code\game\machinery\computer\prisoner\_prisoner.dm"
|
||||
#include "code\game\machinery\computer\prisoner\gulag_teleporter.dm"
|
||||
#include "code\game\machinery\computer\prisoner\management.dm"
|
||||
#include "code\game\machinery\doors\airlock.dm"
|
||||
#include "code\game\machinery\doors\airlock_electronics.dm"
|
||||
#include "code\game\machinery\doors\airlock_types.dm"
|
||||
|
||||
@@ -1,10 +1,7 @@
|
||||
<ui-display>
|
||||
<center><ui-button action="handle_id">{{data.id ? data.id_name : "-------------"}}</ui-button></center>
|
||||
</ui-display>
|
||||
<ui-display title='Stored Items'>
|
||||
{{#each data.mobs}}
|
||||
<ui-section label='{{name}}'>
|
||||
<ui-button action="release_items" params='{"mobref":{{mob}}}' state={{data.can_reclaim ? null : 'disabled'}}>Drop Items</ui-button>
|
||||
</ui-section>
|
||||
{{/each}}
|
||||
</ui-display>
|
||||
</ui-display>
|
||||
|
||||
@@ -6,24 +6,15 @@
|
||||
{{/each}}
|
||||
</ui-display>
|
||||
<ui-display title='Points'>
|
||||
<ui-section label='ID'>
|
||||
<ui-button action="handle_id">{{data.id ? data.id_name : "-------------"}}</ui-button>
|
||||
<ui-section label='Unclaimed points'>
|
||||
<span>{{data.unclaimed_points}}</span>
|
||||
<ui-button action="claim_points" state={{data.unclaimed_points ? null : 'disabled'}}>Claim points</ui-button>
|
||||
</ui-section>
|
||||
{{#if data.id}}
|
||||
<ui-section label='Points collected'>
|
||||
<span>{{data.points}}</span>
|
||||
</ui-section>
|
||||
<ui-section label='Goal'>
|
||||
<span>{{data.goal}}</span>
|
||||
</ui-section>
|
||||
<ui-section label='Unclaimed points'>
|
||||
<span>{{data.unclaimed_points}}</span>
|
||||
<ui-button action="claim_points" state={{data.unclaimed_points ? null : 'disabled'}}>Claim points</ui-button>
|
||||
</ui-section>
|
||||
{{/if}}
|
||||
</ui-display>
|
||||
<ui-display>
|
||||
<center>
|
||||
<span>Points: {{data.id_points}}</span>
|
||||
<ui-section label='Status'>
|
||||
<span>{{data.status_info}}</span>
|
||||
<ui-button action="move_shuttle" state={{data.can_go_home ? null : 'disabled'}}>Move shuttle</ui-button>
|
||||
</center>
|
||||
</ui-display>
|
||||
</ui-section>
|
||||
</ui-display>
|
||||
|
||||
@@ -3,24 +3,10 @@
|
||||
This machine only accepts ore. Gibtonite and Slag are not accepted.
|
||||
</ui-section>
|
||||
<ui-section>
|
||||
Current unclaimed points: {{data.unclaimedPoints}}
|
||||
{{#if data.unclaimedPoints}}
|
||||
Current unclaimed credits: {{data.unclaimedPoints}}
|
||||
<ui-button action='Claim'>
|
||||
Claim Points
|
||||
Claim
|
||||
</ui-button>
|
||||
{{/if}}
|
||||
</ui-section>
|
||||
<ui-section>
|
||||
{{#if data.hasID}}
|
||||
<ui-button action='Eject'>
|
||||
Eject ID
|
||||
</ui-button>
|
||||
You have {{data.claimedPoints}} mining points collected.
|
||||
{{else}}
|
||||
<ui-button action='Insert'>
|
||||
Insert ID
|
||||
</ui-button>
|
||||
{{/if}}
|
||||
</ui-section>
|
||||
</ui-display>
|
||||
<ui-display>
|
||||
|
||||
Reference in New Issue
Block a user