Merge pull request #9077 from Sishen1542/id-boingo

No ID insertion for everything except the hop console
This commit is contained in:
kevinz000
2019-09-10 22:04:48 -07:00
committed by GitHub
25 changed files with 728 additions and 615 deletions
+3 -3
View File
@@ -3004,7 +3004,7 @@
/turf/open/floor/plasteel/showroomfloor, /turf/open/floor/plasteel/showroomfloor,
/area/security/warden) /area/security/warden)
"agp" = ( "agp" = (
/obj/machinery/computer/prisoner, /obj/machinery/computer/prisoner/management,
/turf/open/floor/plasteel/showroomfloor, /turf/open/floor/plasteel/showroomfloor,
/area/security/warden) /area/security/warden)
"agq" = ( "agq" = (
@@ -4591,7 +4591,7 @@
/turf/open/space, /turf/open/space,
/area/solar/port/fore) /area/solar/port/fore)
"ajr" = ( "ajr" = (
/obj/machinery/computer/gulag_teleporter_computer, /obj/machinery/computer/prisoner/gulag_teleporter_computer,
/turf/open/floor/plasteel, /turf/open/floor/plasteel,
/area/security/processing) /area/security/processing)
"ajs" = ( "ajs" = (
@@ -19602,7 +19602,7 @@
/turf/closed/wall, /turf/closed/wall,
/area/bridge) /area/bridge)
"aTR" = ( "aTR" = (
/obj/machinery/computer/prisoner, /obj/machinery/computer/prisoner/management,
/obj/effect/turf_decal/tile/red{ /obj/effect/turf_decal/tile/red{
dir = 1 dir = 1
}, },
@@ -4503,7 +4503,7 @@
/turf/open/floor/plasteel, /turf/open/floor/plasteel,
/area/security/checkpoint) /area/security/checkpoint)
"anx" = ( "anx" = (
/obj/machinery/computer/prisoner{ /obj/machinery/computer/prisoner/management{
dir = 8 dir = 8
}, },
/obj/machinery/status_display{ /obj/machinery/status_display{
@@ -36400,7 +36400,7 @@
/turf/open/floor/plasteel/grimy, /turf/open/floor/plasteel/grimy,
/area/crew_quarters/heads/hos) /area/crew_quarters/heads/hos)
"boc" = ( "boc" = (
/obj/machinery/computer/prisoner{ /obj/machinery/computer/prisoner/management{
dir = 8 dir = 8
}, },
/turf/open/floor/plasteel/grimy, /turf/open/floor/plasteel/grimy,
@@ -38706,7 +38706,7 @@
/turf/open/floor/plasteel/grimy, /turf/open/floor/plasteel/grimy,
/area/crew_quarters/heads/hos) /area/crew_quarters/heads/hos)
"brE" = ( "brE" = (
/obj/machinery/computer/prisoner{ /obj/machinery/computer/prisoner/management{
dir = 8 dir = 8
}, },
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
@@ -39610,7 +39610,7 @@
/turf/open/floor/plasteel/dark, /turf/open/floor/plasteel/dark,
/area/security/execution/transfer) /area/security/execution/transfer)
"bth" = ( "bth" = (
/obj/machinery/computer/gulag_teleporter_computer{ /obj/machinery/computer/prisoner/gulag_teleporter_computer{
dir = 1 dir = 1
}, },
/obj/structure/disposalpipe/segment{ /obj/structure/disposalpipe/segment{
@@ -42723,7 +42723,7 @@
/turf/open/floor/plasteel/dark, /turf/open/floor/plasteel/dark,
/area/bridge) /area/bridge)
"byk" = ( "byk" = (
/obj/machinery/computer/prisoner, /obj/machinery/computer/prisoner/management,
/obj/effect/turf_decal/tile/red{ /obj/effect/turf_decal/tile/red{
dir = 1 dir = 1
}, },
@@ -56938,7 +56938,7 @@
/turf/open/floor/plasteel, /turf/open/floor/plasteel,
/area/security/warden) /area/security/warden)
"bTh" = ( "bTh" = (
/obj/machinery/computer/prisoner{ /obj/machinery/computer/prisoner/management{
dir = 8 dir = 8
}, },
/obj/structure/cable/white{ /obj/structure/cable/white{
@@ -125917,7 +125917,7 @@
/turf/open/floor/plasteel, /turf/open/floor/plasteel,
/area/security/checkpoint/escape) /area/security/checkpoint/escape)
"egj" = ( "egj" = (
/obj/machinery/computer/prisoner{ /obj/machinery/computer/prisoner/management{
dir = 1 dir = 1
}, },
/obj/structure/cable/white{ /obj/structure/cable/white{
+4 -4
View File
@@ -2017,7 +2017,7 @@
/turf/open/floor/plasteel/dark, /turf/open/floor/plasteel/dark,
/area/crew_quarters/heads/hos) /area/crew_quarters/heads/hos)
"aeu" = ( "aeu" = (
/obj/machinery/computer/prisoner, /obj/machinery/computer/prisoner/management,
/turf/open/floor/plasteel/dark, /turf/open/floor/plasteel/dark,
/area/crew_quarters/heads/hos) /area/crew_quarters/heads/hos)
"aev" = ( "aev" = (
@@ -8416,7 +8416,7 @@
/turf/open/floor/plating, /turf/open/floor/plating,
/area/security/warden) /area/security/warden)
"apI" = ( "apI" = (
/obj/machinery/computer/prisoner{ /obj/machinery/computer/prisoner/management{
dir = 4 dir = 4
}, },
/obj/structure/cable/yellow{ /obj/structure/cable/yellow{
@@ -10514,7 +10514,7 @@
/turf/open/floor/plating, /turf/open/floor/plating,
/area/maintenance/port/fore) /area/maintenance/port/fore)
"atK" = ( "atK" = (
/obj/machinery/computer/gulag_teleporter_computer{ /obj/machinery/computer/prisoner/gulag_teleporter_computer{
dir = 1 dir = 1
}, },
/turf/open/floor/plasteel/dark, /turf/open/floor/plasteel/dark,
@@ -30781,7 +30781,7 @@
/obj/structure/cable/yellow{ /obj/structure/cable/yellow{
icon_state = "2-4" icon_state = "2-4"
}, },
/obj/machinery/computer/prisoner, /obj/machinery/computer/prisoner/management,
/obj/effect/turf_decal/tile/red{ /obj/effect/turf_decal/tile/red{
dir = 1 dir = 1
}, },
@@ -4897,7 +4897,7 @@
/turf/open/floor/plasteel/showroomfloor, /turf/open/floor/plasteel/showroomfloor,
/area/security/warden) /area/security/warden)
"amT" = ( "amT" = (
/obj/machinery/computer/prisoner, /obj/machinery/computer/prisoner/management,
/obj/machinery/airalarm{ /obj/machinery/airalarm{
pixel_y = 22 pixel_y = 22
}, },
@@ -6072,7 +6072,7 @@
/turf/open/floor/plating, /turf/open/floor/plating,
/area/security/brig) /area/security/brig)
"apF" = ( "apF" = (
/obj/machinery/computer/gulag_teleporter_computer{ /obj/machinery/computer/prisoner/gulag_teleporter_computer{
dir = 1 dir = 1
}, },
/turf/open/floor/plasteel/dark, /turf/open/floor/plasteel/dark,
@@ -7048,7 +7048,7 @@
/turf/open/floor/plasteel/dark, /turf/open/floor/plasteel/dark,
/area/bridge) /area/bridge)
"arR" = ( "arR" = (
/obj/machinery/computer/prisoner, /obj/machinery/computer/prisoner/management,
/obj/effect/turf_decal/tile/red{ /obj/effect/turf_decal/tile/red{
dir = 1 dir = 1
}, },
+1 -1
View File
@@ -523,7 +523,7 @@
/turf/open/floor/plasteel, /turf/open/floor/plasteel,
/area/science) /area/science)
"bC" = ( "bC" = (
/obj/machinery/computer/gulag_teleporter_computer{ /obj/machinery/computer/prisoner/gulag_teleporter_computer{
dir = 4 dir = 4
}, },
/turf/open/floor/plasteel, /turf/open/floor/plasteel,
+3 -3
View File
@@ -3864,7 +3864,7 @@
/turf/open/floor/plasteel, /turf/open/floor/plasteel,
/area/centcom/control) /area/centcom/control)
"jS" = ( "jS" = (
/obj/machinery/computer/prisoner, /obj/machinery/computer/prisoner/management,
/obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel, /turf/open/floor/plasteel,
/area/centcom/control) /area/centcom/control)
@@ -5857,7 +5857,7 @@
/turf/open/floor/plasteel, /turf/open/floor/plasteel,
/area/centcom/control) /area/centcom/control)
"nY" = ( "nY" = (
/obj/machinery/computer/prisoner{ /obj/machinery/computer/prisoner/management{
dir = 1 dir = 1
}, },
/obj/effect/turf_decal/stripes/line{ /obj/effect/turf_decal/stripes/line{
@@ -10495,7 +10495,7 @@
/turf/open/floor/plasteel/dark, /turf/open/floor/plasteel/dark,
/area/centcom/control) /area/centcom/control)
"yv" = ( "yv" = (
/obj/machinery/computer/prisoner{ /obj/machinery/computer/prisoner/management{
dir = 1 dir = 1
}, },
/obj/machinery/light, /obj/machinery/light,
+101 -15
View File
@@ -113,6 +113,11 @@ Class Procs:
var/atom/movable/occupant = null var/atom/movable/occupant = null
var/speed_process = FALSE // Process as fast as possible? 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/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 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 else
START_PROCESSING(SSfastprocess, src) START_PROCESSING(SSfastprocess, src)
power_change() 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) if (occupant_typecache)
occupant_typecache = typecacheof(occupant_typecache) occupant_typecache = typecacheof(occupant_typecache)
@@ -143,6 +148,10 @@ Class Procs:
else else
STOP_PROCESSING(SSfastprocess, src) STOP_PROCESSING(SSfastprocess, src)
dropContents() dropContents()
if(length(component_parts))
for(var/atom/A in component_parts)
qdel(A)
component_parts.Cut()
return ..() return ..()
/obj/machinery/proc/locate_machinery() /obj/machinery/proc/locate_machinery()
@@ -179,12 +188,15 @@ Class Procs:
L.update_canmove() L.update_canmove()
occupant = null 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) /obj/machinery/proc/close_machine(atom/movable/target = null)
state_open = FALSE state_open = FALSE
density = TRUE density = TRUE
if(!target) if(!target)
for(var/am in loc) for(var/am in loc)
if (!(occupant_typecache ? is_type_in_typecache(am, occupant_typecache) : isliving(am))) if (!(can_be_occupant(am)))
continue continue
var/atom/movable/AM = am var/atom/movable/AM = am
if(AM.has_buckled_mobs()) if(AM.has_buckled_mobs())
@@ -311,6 +323,7 @@ Class Procs:
spawn_frame(disassembled) spawn_frame(disassembled)
for(var/obj/item/I in component_parts) for(var/obj/item/I in component_parts)
I.forceMove(loc) I.forceMove(loc)
component_parts.Cut()
qdel(src) qdel(src)
/obj/machinery/proc/spawn_frame(disassembled) /obj/machinery/proc/spawn_frame(disassembled)
@@ -348,8 +361,8 @@ Class Procs:
panel_open = FALSE panel_open = FALSE
icon_state = icon_state_closed icon_state = icon_state_closed
to_chat(user, "<span class='notice'>You close the maintenance hatch of [src].</span>") to_chat(user, "<span class='notice'>You close the maintenance hatch of [src].</span>")
return 1 return TRUE
return 0 return FALSE
/obj/machinery/proc/default_change_direction_wrench(mob/user, obj/item/I) /obj/machinery/proc/default_change_direction_wrench(mob/user, obj/item/I)
if(panel_open && I.tool_behaviour == TOOL_WRENCH) 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/obj/item/circuitboard/machine/CB = locate(/obj/item/circuitboard/machine) in component_parts
var/P var/P
if(W.works_from_distance) if(W.works_from_distance)
display_parts(user) to_chat(user, display_parts(user))
for(var/obj/item/A in component_parts) for(var/obj/item/A in component_parts)
for(var/D in CB.req_components) for(var/D in CB.req_components)
if(ispath(A.type, D)) if(ispath(A.type, D))
@@ -429,34 +442,38 @@ Class Procs:
break break
RefreshParts() RefreshParts()
else else
display_parts(user) to_chat(user, display_parts(user))
if(shouldplaysound) if(shouldplaysound)
W.play_rped_sound() W.play_rped_sound()
return TRUE return TRUE
return FALSE return FALSE
/obj/machinery/proc/display_parts(mob/user) /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) 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) /obj/machinery/examine(mob/user)
..() . = ..()
if(stat & BROKEN) 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 & INDESTRUCTIBLE))
if(resistance_flags & ON_FIRE) 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 var/healthpercent = (obj_integrity/max_integrity) * 100
switch(healthpercent) switch(healthpercent)
if(50 to 99) if(50 to 99)
to_chat(user, "It looks slightly damaged.") . += "It looks slightly damaged."
if(25 to 50) if(25 to 50)
to_chat(user, "It appears heavily damaged.") . += "It appears heavily damaged."
if(0 to 25) 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) 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 //called on machinery construction (i.e from frame to machinery) but not on initialization
/obj/machinery/proc/on_construction() /obj/machinery/proc/on_construction()
@@ -490,3 +507,72 @@ Class Procs:
. = . % 9 . = . % 9
AM.pixel_x = -8 + ((.%3)*8) AM.pixel_x = -8 + ((.%3)*8)
AM.pixel_y = -8 + (round( . / 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/list/result_filters //For sorting the results
var/checking_logs = 0 var/checking_logs = 0
var/list/logs var/list/logs
var/authenticated = 0
var/auth_id = "\[NULL\]" var/auth_id = "\[NULL\]"
/obj/machinery/computer/apc_control/Initialize() /obj/machinery/computer/apc_control/Initialize()
-3
View File
@@ -13,11 +13,8 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
circuit = /obj/item/circuitboard/computer/card circuit = /obj/item/circuitboard/computer/card
var/obj/item/card/id/scan = null var/obj/item/card/id/scan = null
var/obj/item/card/id/modify = null var/obj/item/card/id/modify = null
var/authenticated = 0
var/mode = 0 var/mode = 0
var/printing = null 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 var/target_dept = 0 //Which department this computer has access to. 0=all departments
//Cooldown for closing positions in seconds //Cooldown for closing positions in seconds
@@ -6,7 +6,6 @@
icon_keyboard = "tech_key" icon_keyboard = "tech_key"
req_access = list(ACCESS_HEADS) req_access = list(ACCESS_HEADS)
circuit = /obj/item/circuitboard/computer/communications circuit = /obj/item/circuitboard/computer/communications
var/authenticated = 0
var/auth_id = "Unknown" //Who is currently logged in? var/auth_id = "Unknown" //Who is currently logged in?
var/list/datum/comm_message/messages = list() var/list/datum/comm_message/messages = list()
var/datum/comm_message/currmsg var/datum/comm_message/currmsg
+139 -147
View File
@@ -7,13 +7,10 @@
icon_keyboard = "med_key" icon_keyboard = "med_key"
req_one_access = list(ACCESS_MEDICAL, ACCESS_FORENSICS_LOCKERS) req_one_access = list(ACCESS_MEDICAL, ACCESS_FORENSICS_LOCKERS)
circuit = /obj/item/circuitboard/computer/med_data circuit = /obj/item/circuitboard/computer/med_data
var/obj/item/card/id/scan = null
var/authenticated = null
var/rank = null var/rank = null
var/screen = null var/screen = null
var/datum/data/record/active1 var/datum/data/record/active1
var/datum/data/record/active2 var/datum/data/record/active2
var/a_id = null
var/temp = null var/temp = null
var/printing = null var/printing = null
//Sorting Variables //Sorting Variables
@@ -25,24 +22,22 @@
/obj/machinery/computer/med_data/syndie /obj/machinery/computer/med_data/syndie
icon_keyboard = "syndie_key" icon_keyboard = "syndie_key"
/obj/machinery/computer/med_data/attackby(obj/item/O, mob/user, params) /obj/machinery/computer/med_data/attackby(obj/item/I, mob/user, params)
if(istype(O, /obj/item/card/id) && !scan) if(istype(I, /obj/item/card/id))
if(!user.transferItemToLoc(O, src)) id_insert_scan(user)
return
scan = O
to_chat(user, "<span class='notice'>You insert [O].</span>")
else else
return ..() return ..()
/obj/machinery/computer/med_data/ui_interact(mob/user) /obj/machinery/computer/med_data/ui_interact(mob/user)
. = ..() . = ..()
if(isliving(user))
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, FALSE)
var/dat var/dat
if(temp) if(temp)
dat = text("<TT>[temp]</TT><BR><BR><A href='?src=[REF(src)];temp=1'>Clear Screen</A>") dat = text("<TT>[temp]</TT><BR><BR><A href='?src=[REF(src)];temp=1'>Clear Screen</A>")
else else
dat = text("Confirm Identity: <A href='?src=[REF(src)];scan=1'>[]</A><HR>", (src.scan ? text("[]", src.scan.name) : "----------")) if(authenticated)
if(src.authenticated) switch(screen)
switch(src.screen)
if(1) if(1)
dat += {" dat += {"
<A href='?src=[REF(src)];search=1'>Search Records</A> <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_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 += "<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>ID:</td><td>[active1.fields["id"]]</td></tr>"
dat += "<tr><td>Sex:</td><td><A href='?src=[REF(src)];field=sex'>&nbsp;[active1.fields["sex"]]&nbsp;</A></td></tr>" dat += "<tr><td>Gender:</td><td><A href='?src=[REF(src)];field=gender'>&nbsp;[active1.fields["gender"]]&nbsp;</A></td></tr>"
dat += "<tr><td>Age:</td><td><A href='?src=[REF(src)];field=age'>&nbsp;[active1.fields["age"]]&nbsp;</A></td></tr>" dat += "<tr><td>Age:</td><td><A href='?src=[REF(src)];field=age'>&nbsp;[active1.fields["age"]]&nbsp;</A></td></tr>"
dat += "<tr><td>Species:</td><td><A href='?src=[REF(src)];field=species'>&nbsp;[active1.fields["species"]]&nbsp;</A></td></tr>" dat += "<tr><td>Species:</td><td><A href='?src=[REF(src)];field=species'>&nbsp;[active1.fields["species"]]&nbsp;</A></td></tr>"
dat += "<tr><td>Fingerprint:</td><td><A href='?src=[REF(src)];field=fingerprint'>&nbsp;[active1.fields["fingerprint"]]&nbsp;</A></td></tr>" dat += "<tr><td>Fingerprint:</td><td><A href='?src=[REF(src)];field=fingerprint'>&nbsp;[active1.fields["fingerprint"]]&nbsp;</A></td></tr>"
@@ -141,7 +136,7 @@
dat += "<tr><td><br><b><font size='4'>Comments/Log</font></b></td></tr>" dat += "<tr><td><br><b><font size='4'>Comments/Log</font></b></td></tr>"
var/counter = 1 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>" 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++ counter++
dat += "<tr><td><A href='?src=[REF(src)];add_c=1'>Add Entry</A></td></tr>" 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>" dat += "<br><b>Medical Robots:</b>"
var/bdat = null var/bdat = null
for(var/mob/living/simple_animal/bot/medbot/M in GLOB.alive_mob_list) 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 continue //only find medibots on the same z-level as the computer
var/turf/bl = get_turf(M) 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 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>" dat += "<A href='?src=[REF(src)];login=1'>{Log In}</A>"
var/datum/browser/popup = new(user, "med_rec", "Medical Records Console", 600, 400) var/datum/browser/popup = new(user, "med_rec", "Medical Records Console", 600, 400)
popup.set_content(dat) 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() popup.open()
/obj/machinery/computer/med_data/Topic(href, href_list) /obj/machinery/computer/med_data/Topic(href, href_list)
@@ -197,29 +192,20 @@
if(.) if(.)
return . return .
if(!(active1 in GLOB.data_core.general)) if(!(active1 in GLOB.data_core.general))
src.active1 = null active1 = null
if(!(active2 in GLOB.data_core.medical)) 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)) if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc)) || issilicon(usr) || IsAdminGhost(usr))
usr.set_machine(src) usr.set_machine(src)
if(href_list["temp"]) if(href_list["temp"])
src.temp = null 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
else if(href_list["logout"]) else if(href_list["logout"])
src.authenticated = null authenticated = null
src.screen = null screen = null
src.active1 = null active1 = null
src.active2 = null active2 = null
playsound(src, 'sound/machines/terminal_off.ogg', 50, FALSE)
else if(href_list["choice"]) else if(href_list["choice"])
// SORTING! // SORTING!
if(href_list["choice"] == "Sorting") if(href_list["choice"] == "Sorting")
@@ -234,34 +220,37 @@
sortBy = href_list["sort"] sortBy = href_list["sort"]
order = initial(order) order = initial(order)
else if(href_list["login"]) else if(href_list["login"])
if(issilicon(usr)) var/mob/M = usr
src.active1 = null var/obj/item/card/id/I = M.get_idcard(TRUE)
src.active2 = null if(issilicon(M))
src.authenticated = 1 active1 = null
src.rank = "AI" active2 = null
src.screen = 1 authenticated = 1
else if(IsAdminGhost(usr)) rank = "AI"
src.active1 = null screen = 1
src.active2 = null else if(IsAdminGhost(M))
src.authenticated = 1 active1 = null
src.rank = "Central Command" active2 = null
src.screen = 1 authenticated = 1
else if(istype(src.scan, /obj/item/card/id)) rank = "Central Command"
src.active1 = null screen = 1
src.active2 = null else if(istype(I) && check_access(I))
if(src.check_access(src.scan)) active1 = null
src.authenticated = src.scan.registered_name active2 = null
src.rank = src.scan.assignment authenticated = I.registered_name
src.screen = 1 rank = I.assignment
if(src.authenticated) 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"]) if(href_list["screen"])
src.screen = text2num(href_list["screen"]) screen = text2num(href_list["screen"])
if(src.screen < 1) if(screen < 1)
src.screen = 1 screen = 1
src.active1 = null active1 = null
src.active2 = null active2 = null
else if(href_list["vir"]) else if(href_list["vir"])
var/type = href_list["vir"] var/type = href_list["vir"]
@@ -269,7 +258,7 @@
var/AfS = "" var/AfS = ""
for(var/mob/M in Dis.viable_mobtypes) for(var/mob/M in Dis.viable_mobtypes)
AfS += " [initial(M.name)];" 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>Number of stages:</b> [Dis.max_stages]
<BR><b>Spread:</b> [Dis.spread_text] Transmission <BR><b>Spread:</b> [Dis.spread_text] Transmission
<BR><b>Possible Cure:</b> [(Dis.cure_text||"none")] <BR><b>Possible Cure:</b> [(Dis.cure_text||"none")]
@@ -280,110 +269,112 @@
<BR><b>Severity:</b> [Dis.severity]"} <BR><b>Severity:</b> [Dis.severity]"}
else if(href_list["del_all"]) 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"]) else if(href_list["del_all2"])
investigate_log("[key_name(usr)] has deleted all medical records.", INVESTIGATE_RECORDS) investigate_log("[key_name(usr)] has deleted all medical records.", INVESTIGATE_RECORDS)
GLOB.data_core.medical.Cut() GLOB.data_core.medical.Cut()
src.temp = "All records deleted." temp = "All records deleted."
else if(href_list["field"]) else if(href_list["field"])
var/a1 = src.active1 var/a1 = active1
var/a2 = src.active2 var/a2 = active2
switch(href_list["field"]) switch(href_list["field"])
if("fingerprint") if("fingerprint")
if(active1) 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)) if(!canUseMedicalRecordsConsole(usr, t1, a1))
return return
src.active1.fields["fingerprint"] = t1 active1.fields["fingerprint"] = t1
if("sex") if("gender")
if(active1) if(active1)
if(src.active1.fields["sex"] == "Male") if(active1.fields["gender"] == "Male")
src.active1.fields["sex"] = "Female" active1.fields["gender"] = "Female"
else if(active1.fields["gender"] == "Female")
active1.fields["gender"] = "Other"
else else
src.active1.fields["sex"] = "Male" active1.fields["gender"] = "Male"
if("age") if("age")
if(active1) 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)) if(!canUseMedicalRecordsConsole(usr, t1, a1))
return return
src.active1.fields["age"] = t1 active1.fields["age"] = t1
if("species") if("species")
if(active1) 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)) if(!canUseMedicalRecordsConsole(usr, t1, a1))
return return
active1.fields["species"] = t1 active1.fields["species"] = t1
if("mi_dis") if("mi_dis")
if(active2) 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)) if(!canUseMedicalRecordsConsole(usr, t1, null, a2))
return return
src.active2.fields["mi_dis"] = t1 active2.fields["mi_dis"] = t1
if("mi_dis_d") if("mi_dis_d")
if(active2) 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)) if(!canUseMedicalRecordsConsole(usr, t1, null, a2))
return return
src.active2.fields["mi_dis_d"] = t1 active2.fields["mi_dis_d"] = t1
if("ma_dis") if("ma_dis")
if(active2) 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)) if(!canUseMedicalRecordsConsole(usr, t1, null, a2))
return return
src.active2.fields["ma_dis"] = t1 active2.fields["ma_dis"] = t1
if("ma_dis_d") if("ma_dis_d")
if(active2) 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)) if(!canUseMedicalRecordsConsole(usr, t1, null, a2))
return return
src.active2.fields["ma_dis_d"] = t1 active2.fields["ma_dis_d"] = t1
if("alg") if("alg")
if(active2) 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)) if(!canUseMedicalRecordsConsole(usr, t1, null, a2))
return return
src.active2.fields["alg"] = t1 active2.fields["alg"] = t1
if("alg_d") if("alg_d")
if(active2) 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)) if(!canUseMedicalRecordsConsole(usr, t1, null, a2))
return return
src.active2.fields["alg_d"] = t1 active2.fields["alg_d"] = t1
if("cdi") if("cdi")
if(active2) 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)) if(!canUseMedicalRecordsConsole(usr, t1, null, a2))
return return
src.active2.fields["cdi"] = t1 active2.fields["cdi"] = t1
if("cdi_d") if("cdi_d")
if(active2) 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)) if(!canUseMedicalRecordsConsole(usr, t1, null, a2))
return return
src.active2.fields["cdi_d"] = t1 active2.fields["cdi_d"] = t1
if("notes") if("notes")
if(active2) 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)) if(!canUseMedicalRecordsConsole(usr, t1, null, a2))
return return
src.active2.fields["notes"] = t1 active2.fields["notes"] = t1
if("p_stat") if("p_stat")
if(active1) 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("m_stat")
if(active1) 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("blood_type")
if(active2) 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("b_dna")
if(active2) 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)) if(!canUseMedicalRecordsConsole(usr, t1, null, a2))
return return
src.active2.fields["b_dna"] = t1 active2.fields["b_dna"] = t1
if("show_photo_front") if("show_photo_front")
if(active1) if(active1)
if(active1.fields["photo_front"]) if(active1.fields["photo_front"])
@@ -402,51 +393,51 @@
if(active1) if(active1)
switch(href_list["p_stat"]) switch(href_list["p_stat"])
if("deceased") if("deceased")
src.active1.fields["p_stat"] = "*Deceased*" active1.fields["p_stat"] = "*Deceased*"
if("unconscious") if("unconscious")
src.active1.fields["p_stat"] = "*Unconscious*" active1.fields["p_stat"] = "*Unconscious*"
if("active") if("active")
src.active1.fields["p_stat"] = "Active" active1.fields["p_stat"] = "Active"
if("unfit") if("unfit")
src.active1.fields["p_stat"] = "Physically Unfit" active1.fields["p_stat"] = "Physically Unfit"
else if(href_list["m_stat"]) else if(href_list["m_stat"])
if(active1) if(active1)
switch(href_list["m_stat"]) switch(href_list["m_stat"])
if("insane") if("insane")
src.active1.fields["m_stat"] = "*Insane*" active1.fields["m_stat"] = "*Insane*"
if("unstable") if("unstable")
src.active1.fields["m_stat"] = "*Unstable*" active1.fields["m_stat"] = "*Unstable*"
if("watch") if("watch")
src.active1.fields["m_stat"] = "*Watch*" active1.fields["m_stat"] = "*Watch*"
if("stable") if("stable")
src.active1.fields["m_stat"] = "Stable" active1.fields["m_stat"] = "Stable"
else if(href_list["blood_type"]) else if(href_list["blood_type"])
if(active2) if(active2)
switch(href_list["blood_type"]) switch(href_list["blood_type"])
if("an") if("an")
src.active2.fields["blood_type"] = "A-" active2.fields["blood_type"] = "A-"
if("bn") if("bn")
src.active2.fields["blood_type"] = "B-" active2.fields["blood_type"] = "B-"
if("abn") if("abn")
src.active2.fields["blood_type"] = "AB-" active2.fields["blood_type"] = "AB-"
if("on") if("on")
src.active2.fields["blood_type"] = "O-" active2.fields["blood_type"] = "O-"
if("ap") if("ap")
src.active2.fields["blood_type"] = "A+" active2.fields["blood_type"] = "A+"
if("bp") if("bp")
src.active2.fields["blood_type"] = "B+" active2.fields["blood_type"] = "B+"
if("abp") if("abp")
src.active2.fields["blood_type"] = "AB+" active2.fields["blood_type"] = "AB+"
if("op") if("op")
src.active2.fields["blood_type"] = "O+" active2.fields["blood_type"] = "O+"
else if(href_list["del_r"]) else if(href_list["del_r"])
if(active2) 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"]) else if(href_list["del_r2"])
investigate_log("[key_name(usr)] has deleted the medical records for [active1.fields["name"]].", INVESTIGATE_RECORDS) investigate_log("[key_name(usr)] has deleted the medical records for [active1.fields["name"]].", INVESTIGATE_RECORDS)
@@ -463,10 +454,10 @@
screen = 4 screen = 4
else if(href_list["new"]) 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( ) var/datum/data/record/R = new /datum/data/record( )
R.fields["name"] = src.active1.fields["name"] R.fields["name"] = active1.fields["name"]
R.fields["id"] = src.active1.fields["id"] R.fields["id"] = active1.fields["id"]
R.name = text("Medical Record #[]", R.fields["id"]) R.name = text("Medical Record #[]", R.fields["id"])
R.fields["blood_type"] = "Unknown" R.fields["blood_type"] = "Unknown"
R.fields["b_dna"] = "Unknown" R.fields["b_dna"] = "Unknown"
@@ -480,76 +471,77 @@
R.fields["cdi_d"] = "No diseases have been diagnosed at the moment." R.fields["cdi_d"] = "No diseases have been diagnosed at the moment."
R.fields["notes"] = "No notes." R.fields["notes"] = "No notes."
GLOB.data_core.medical += R GLOB.data_core.medical += R
src.active2 = R active2 = R
src.screen = 4 screen = 4
else if(href_list["add_c"]) else if(href_list["add_c"])
if(!(active2 in GLOB.data_core.medical)) if(!(active2 in GLOB.data_core.medical))
return return
var/a2 = src.active2 var/a2 = active2
var/t1 = stripped_multiline_input("Add Comment:", "Med. records", null, null) var/t1 = stripped_multiline_input("Add Comment:", "Med. records", null, null)
if(!canUseMedicalRecordsConsole(usr, t1, null, a2)) if(!canUseMedicalRecordsConsole(usr, t1, null, a2))
return return
var/counter = 1 var/counter = 1
while(src.active2.fields[text("com_[]", counter)]) while(active2.fields[text("com_[]", counter)])
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"]) else if(href_list["del_c"])
if((istype(src.active2, /datum/data/record) && src.active2.fields[text("com_[]", href_list["del_c"])])) if((istype(active2, /datum/data/record) && active2.fields[text("com_[]", href_list["del_c"])]))
src.active2.fields[text("com_[]", href_list["del_c"])] = "<B>Deleted</B>" active2.fields[text("com_[]", href_list["del_c"])] = "<B>Deleted</B>"
else if(href_list["search"]) else if(href_list["search"])
var/t1 = stripped_input(usr, "Search String: (Name, DNA, or ID)", "Med. records") var/t1 = stripped_input(usr, "Search String: (Name, DNA, or ID)", "Med. records")
if(!canUseMedicalRecordsConsole(usr, t1)) if(!canUseMedicalRecordsConsole(usr, t1))
return return
src.active1 = null active1 = null
src.active2 = null active2 = null
t1 = lowertext(t1) t1 = lowertext(t1)
for(var/datum/data/record/R in GLOB.data_core.medical) 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"]))) if((lowertext(R.fields["name"]) == t1 || t1 == lowertext(R.fields["id"]) || t1 == lowertext(R.fields["b_dna"])))
src.active2 = R active2 = R
else else
//Foreach continue //goto(3229) //Foreach continue //goto(3229)
if(!( src.active2 )) if(!( active2 ))
src.temp = text("Could not locate record [].", sanitize(t1)) temp = text("Could not locate record [].", sanitize(t1))
else else
for(var/datum/data/record/E in GLOB.data_core.general) 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"])) if((E.fields["name"] == active2.fields["name"] || E.fields["id"] == active2.fields["id"]))
src.active1 = E active1 = E
else else
//Foreach continue //goto(3334) //Foreach continue //goto(3334)
src.screen = 4 screen = 4
else if(href_list["print_p"]) else if(href_list["print_p"])
if(!( src.printing )) if(!( printing ))
src.printing = 1 printing = 1
GLOB.data_core.medicalPrintCount++ GLOB.data_core.medicalPrintCount++
playsound(loc, 'sound/items/poster_being_created.ogg', 100, 1) playsound(loc, 'sound/items/poster_being_created.ogg', 100, 1)
sleep(30) 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>" P.info = "<CENTER><B>Medical Record - (MR-[GLOB.data_core.medicalPrintCount])</B></CENTER><BR>"
if(active1 in GLOB.data_core.general) 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 += "\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 else
P.info += "<B>General Record Lost!</B><BR>" P.info += "<B>General Record Lost!</B><BR>"
if(active2 in GLOB.data_core.medical) 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 var/counter = 1
while(src.active2.fields[text("com_[]", counter)]) while(active2.fields[text("com_[]", counter)])
P.info += text("[]<BR>", src.active2.fields[text("com_[]", counter)]) P.info += text("[]<BR>", active2.fields[text("com_[]", counter)])
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 else
P.info += "<B>Medical Record Lost!</B><BR>" P.info += "<B>Medical Record Lost!</B><BR>"
P.name = text("MR-[] '[]'", GLOB.data_core.medicalPrintCount, "Record Lost") P.name = text("MR-[] '[]'", GLOB.data_core.medicalPrintCount, "Record Lost")
P.info += "</TT>" P.info += "</TT>"
src.printing = null P.update_icon()
printing = null
src.add_fingerprint(usr) add_fingerprint(usr)
src.updateUsrDialog() updateUsrDialog()
return return
/obj/machinery/computer/med_data/emp_act(severity) /obj/machinery/computer/med_data/emp_act(severity)
@@ -560,11 +552,11 @@
switch(rand(1,6)) switch(rand(1,6))
if(1) if(1)
if(prob(10)) 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 else
R.fields["name"] = random_unique_name(R.fields["sex"],1) R.fields["name"] = random_unique_name(R.fields["gender"],1)
if(2) if(2)
R.fields["sex"] = pick("Male", "Female") R.fields["gender"] = pick("Male", "Female", "Other")
if(3) if(3)
R.fields["age"] = rand(AGE_MIN, AGE_MAX) R.fields["age"] = rand(AGE_MIN, AGE_MAX)
if(4) if(4)
@@ -583,7 +575,7 @@
if(user) if(user)
if(message) if(message)
if(authenticated) if(authenticated)
if(user.canUseTopic(src)) if(user.canUseTopic(src, BE_CLOSE))
if(!record1 || record1 == active1) if(!record1 || record1 == active1)
if(!record2 || record2 == active2) if(!record2 || record2 == active2)
return 1 return 1
-142
View File
@@ -1,143 +1 @@
/obj/machinery/computer/prisoner /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
+37 -78
View File
@@ -5,13 +5,10 @@
icon_keyboard = "security_key" icon_keyboard = "security_key"
req_one_access = list(ACCESS_SECURITY, ACCESS_FORENSICS_LOCKERS) req_one_access = list(ACCESS_SECURITY, ACCESS_FORENSICS_LOCKERS)
circuit = /obj/item/circuitboard/computer/secure_data circuit = /obj/item/circuitboard/computer/secure_data
var/obj/item/card/id/scan = null
var/authenticated = null
var/rank = null var/rank = null
var/screen = null var/screen = null
var/datum/data/record/active1 = null var/datum/data/record/active1 = null
var/datum/data/record/active2 = null var/datum/data/record/active2 = null
var/a_id = null
var/temp = null var/temp = null
var/printing = null var/printing = null
var/can_change_id = 0 var/can_change_id = 0
@@ -23,11 +20,6 @@
light_color = LIGHT_COLOR_RED 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 /obj/machinery/computer/secure_data/syndie
icon_keyboard = "syndie_key" icon_keyboard = "syndie_key"
@@ -40,32 +32,19 @@
clockwork = TRUE //it'd look weird clockwork = TRUE //it'd look weird
pass_flags = PASSTABLE 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. //Someone needs to break down the dat += into chunks instead of long ass lines.
/obj/machinery/computer/secure_data/ui_interact(mob/user) /obj/machinery/computer/secure_data/ui_interact(mob/user)
. = ..() . = ..()
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, FALSE)
if(src.z > 6) 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!") to_chat(user, "<span class='boldannounce'>Unable to establish a connection</span>: \black You're too far away from the station!")
return return
var/dat var/dat
if(temp) 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 else
dat = text("Confirm Identity: <A href='?src=[REF(src)];choice=Confirm Identity'>[]</A><HR>", (scan ? text("[]", scan.name) : "----------")) dat = ""
if(authenticated) if(authenticated)
switch(screen) switch(screen)
if(1) if(1)
@@ -190,7 +169,7 @@
dat += {"<table><tr><td><table> dat += {"<table><tr><td><table>
<tr><td>Name:</td><td><A href='?src=[REF(src)];choice=Edit Field;field=name'>&nbsp;[active1.fields["name"]]&nbsp;</A></td></tr> <tr><td>Name:</td><td><A href='?src=[REF(src)];choice=Edit Field;field=name'>&nbsp;[active1.fields["name"]]&nbsp;</A></td></tr>
<tr><td>ID:</td><td><A href='?src=[REF(src)];choice=Edit Field;field=id'>&nbsp;[active1.fields["id"]]&nbsp;</A></td></tr> <tr><td>ID:</td><td><A href='?src=[REF(src)];choice=Edit Field;field=id'>&nbsp;[active1.fields["id"]]&nbsp;</A></td></tr>
<tr><td>Sex:</td><td><A href='?src=[REF(src)];choice=Edit Field;field=sex'>&nbsp;[active1.fields["sex"]]&nbsp;</A></td></tr> <tr><td>Gender:</td><td><A href='?src=[REF(src)];choice=Edit Field;field=gender'>&nbsp;[active1.fields["gender"]]&nbsp;</A></td></tr>
<tr><td>Age:</td><td><A href='?src=[REF(src)];choice=Edit Field;field=age'>&nbsp;[active1.fields["age"]]&nbsp;</A></td></tr>"} <tr><td>Age:</td><td><A href='?src=[REF(src)];choice=Edit Field;field=age'>&nbsp;[active1.fields["age"]]&nbsp;</A></td></tr>"}
dat += "<tr><td>Species:</td><td><A href ='?src=[REF(src)];choice=Edit Field;field=species'>&nbsp;[active1.fields["species"]]&nbsp;</A></td></tr>" dat += "<tr><td>Species:</td><td><A href ='?src=[REF(src)];choice=Edit Field;field=species'>&nbsp;[active1.fields["species"]]&nbsp;</A></td></tr>"
dat += {"<tr><td>Rank:</td><td><A href='?src=[REF(src)];choice=Edit Field;field=rank'>&nbsp;[active1.fields["rank"]]&nbsp;</A></td></tr> dat += {"<tr><td>Rank:</td><td><A href='?src=[REF(src)];choice=Edit Field;field=rank'>&nbsp;[active1.fields["rank"]]&nbsp;</A></td></tr>
@@ -309,36 +288,39 @@ What a mess.*/
active1 = null active1 = null
active2 = null active2 = null
if("Confirm Identity")
eject_id(usr)
if("Log Out") if("Log Out")
authenticated = null authenticated = null
screen = null screen = null
active1 = null active1 = null
active2 = null active2 = null
playsound(src, 'sound/machines/terminal_off.ogg', 50, FALSE)
if("Log In") if("Log In")
if(issilicon(usr)) var/mob/M = usr
var/mob/living/silicon/borg = usr var/obj/item/card/id/I = M.get_idcard(TRUE)
if(issilicon(M))
var/mob/living/silicon/borg = M
active1 = null active1 = null
active2 = null active2 = null
authenticated = borg.name authenticated = borg.name
rank = "AI" rank = "AI"
screen = 1 screen = 1
else if(IsAdminGhost(usr)) else if(IsAdminGhost(M))
active1 = null active1 = null
active2 = null active2 = null
authenticated = usr.client.holder.admin_signature authenticated = M.client.holder.admin_signature
rank = "Central Command" rank = "Central Command"
screen = 1 screen = 1
else if(istype(scan, /obj/item/card/id)) else if(I && check_access(I))
active1 = null active1 = null
active2 = null active2 = null
if(check_access(scan)) authenticated = I.registered_name
authenticated = scan.registered_name rank = I.assignment
rank = scan.assignment screen = 1
screen = 1 else
to_chat(usr, "<span class='danger'>Unauthorized Access.</span>")
playsound(src, 'sound/machines/terminal_on.ogg', 50, FALSE)
//RECORD FUNCTIONS //RECORD FUNCTIONS
if("Record Maintenance") if("Record Maintenance")
screen = 2 screen = 2
@@ -346,16 +328,14 @@ What a mess.*/
active2 = null active2 = null
if("Browse Record") if("Browse Record")
var/datum/data/record/R = locate(href_list["d_rec"]) var/datum/data/record/R = locate(href_list["d_rec"]) in GLOB.data_core.general
var/S = locate(href_list["d_rec"]) if(!R)
if(!( GLOB.data_core.general.Find(R) ))
temp = "Record Not Found!" temp = "Record Not Found!"
else else
active1 = active2 = R
for(var/datum/data/record/E in GLOB.data_core.security) for(var/datum/data/record/E in GLOB.data_core.security)
if((E.fields["name"] == R.fields["name"] || E.fields["id"] == R.fields["id"])) if((E.fields["name"] == R.fields["name"] || E.fields["id"] == R.fields["id"]))
S = E active2 = E
active1 = R
active2 = S
screen = 3 screen = 3
@@ -368,7 +348,7 @@ What a mess.*/
var/obj/item/paper/P = new /obj/item/paper( loc ) var/obj/item/paper/P = new /obj/item/paper( loc )
P.info = "<CENTER><B>Security Record - (SR-[GLOB.data_core.securityPrintCount])</B></CENTER><BR>" 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))) 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 += "\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"]) P.info += text("\nFingerprint: []<BR>\nPhysical Status: []<BR>\nMental Status: []<BR>", active1.fields["fingerprint"], active1.fields["p_stat"], active1.fields["m_stat"])
else else
@@ -419,6 +399,7 @@ What a mess.*/
P.info += "<B>Security Record Lost!</B><BR>" P.info += "<B>Security Record Lost!</B><BR>"
P.name = text("SR-[] '[]'", GLOB.data_core.securityPrintCount, "Record Lost") P.name = text("SR-[] '[]'", GLOB.data_core.securityPrintCount, "Record Lost")
P.info += "</TT>" P.info += "</TT>"
P.update_icon()
printing = null printing = null
if("Print Poster") if("Print Poster")
if(!( printing )) if(!( printing ))
@@ -512,7 +493,7 @@ What a mess.*/
G.fields["name"] = "New Record" G.fields["name"] = "New Record"
G.fields["id"] = "[num2hex(rand(1, 1.6777215E7), 6)]" G.fields["id"] = "[num2hex(rand(1, 1.6777215E7), 6)]"
G.fields["rank"] = "Unassigned" G.fields["rank"] = "Unassigned"
G.fields["sex"] = "Male" G.fields["gender"] = "Male"
G.fields["age"] = "Unknown" G.fields["age"] = "Unknown"
G.fields["species"] = "Human" G.fields["species"] = "Human"
G.fields["photo_front"] = new /icon() G.fields["photo_front"] = new /icon()
@@ -584,12 +565,14 @@ What a mess.*/
if(!canUseSecurityRecordsConsole(usr, t1, a1)) if(!canUseSecurityRecordsConsole(usr, t1, a1))
return return
active1.fields["fingerprint"] = t1 active1.fields["fingerprint"] = t1
if("sex") if("gender")
if(istype(active1, /datum/data/record)) if(istype(active1, /datum/data/record))
if(active1.fields["sex"] == "Male") if(active1.fields["gender"] == "Male")
active1.fields["sex"] = "Female" active1.fields["gender"] = "Female"
else if(active1.fields["gender"] == "Female")
active1.fields["gender"] = "Other"
else else
active1.fields["sex"] = "Male" active1.fields["gender"] = "Male"
if("age") if("age")
if(istype(active1, /datum/data/record)) if(istype(active1, /datum/data/record))
var/t1 = input("Please input age:", "Secure. records", active1.fields["age"], null) as num 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() P = user.get_active_held_item()
return P 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) if (printing)
return return
printing = TRUE printing = TRUE
sleep(20) sleep(20)
var/obj/item/photo/P = new/obj/item/photo(drop_location()) var/obj/item/photo/P = new/obj/item/photo(drop_location())
var/icon/small_img = icon(temp) var/datum/picture/toEmbed = new(name = person_name, desc = "The photo on file for [person_name].", image = temp)
var/icon/ic = icon('icons/obj/items_and_weapons.dmi',"photo") P.set_picture(toEmbed, TRUE, TRUE)
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]."
P.pixel_x = rand(-10, 10) P.pixel_x = rand(-10, 10)
P.pixel_y = rand(-10, 10) P.pixel_y = rand(-10, 10)
printing = FALSE printing = FALSE
@@ -799,7 +777,7 @@ What a mess.*/
else else
R.fields["name"] = "[pick(pick(GLOB.first_names_male), pick(GLOB.first_names_female))] [pick(GLOB.last_names)]" R.fields["name"] = "[pick(pick(GLOB.first_names_male), pick(GLOB.first_names_female))] [pick(GLOB.last_names)]"
if(2) if(2)
R.fields["sex"] = pick("Male", "Female") R.fields["gender"] = pick("Male", "Female", "Other")
if(3) if(3)
R.fields["age"] = rand(5, 85) R.fields["age"] = rand(5, 85)
if(4) if(4)
@@ -823,7 +801,7 @@ What a mess.*/
/obj/machinery/computer/secure_data/proc/canUseSecurityRecordsConsole(mob/user, message1 = 0, record1, record2) /obj/machinery/computer/secure_data/proc/canUseSecurityRecordsConsole(mob/user, message1 = 0, record1, record2)
if(user) if(user)
if(authenticated) if(authenticated)
if(user.canUseTopic(src)) if(user.canUseTopic(src, BE_CLOSE))
if(!trim(message1)) if(!trim(message1))
return 0 return 0
if(!record1 || record1 == active1) if(!record1 || record1 == active1)
@@ -831,22 +809,3 @@ What a mess.*/
return 1 return 1
return 0 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)
+10 -31
View File
@@ -9,7 +9,6 @@
idle_power_usage = 100 idle_power_usage = 100
active_power_usage = 2500 active_power_usage = 2500
var/list/stored_items = list() var/list/stored_items = list()
var/obj/item/card/id/prisoner/inserted_id = null
var/obj/machinery/gulag_teleporter/linked_teleporter = null var/obj/machinery/gulag_teleporter/linked_teleporter = null
/obj/machinery/gulag_item_reclaimer/Destroy() /obj/machinery/gulag_item_reclaimer/Destroy()
@@ -18,9 +17,6 @@
I.forceMove(get_turf(src)) I.forceMove(get_turf(src))
if(linked_teleporter) if(linked_teleporter)
linked_teleporter.linked_reclaimer = null linked_teleporter.linked_reclaimer = null
if(inserted_id)
inserted_id.forceMove(get_turf(src))
inserted_id = null
return ..() return ..()
/obj/machinery/gulag_item_reclaimer/emag_act(mob/user) /obj/machinery/gulag_item_reclaimer/emag_act(mob/user)
@@ -31,18 +27,6 @@
obj_flags |= EMAGGED obj_flags |= EMAGGED
return TRUE 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, \ /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) datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
@@ -57,15 +41,19 @@
if(allowed(user)) if(allowed(user))
can_reclaim = TRUE can_reclaim = TRUE
if(inserted_id) var/obj/item/card/id/I = user.get_idcard(TRUE)
data["id"] = inserted_id if(istype(I, /obj/item/card/id/prisoner))
data["id_name"] = inserted_id.registered_name var/obj/item/card/id/prisoner/P = I
if(inserted_id.points >= inserted_id.goal) if(P.points >= P.goal)
can_reclaim = TRUE can_reclaim = TRUE
var/list/mobs = list() var/list/mobs = list()
for(var/i in stored_items) for(var/i in stored_items)
var/mob/thismob = i 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() var/list/mob_info = list()
mob_info["name"] = thismob.real_name mob_info["name"] = thismob.real_name
mob_info["mob"] = "[REF(thismob)]" mob_info["mob"] = "[REF(thismob)]"
@@ -80,16 +68,6 @@
/obj/machinery/gulag_item_reclaimer/ui_act(action, list/params) /obj/machinery/gulag_item_reclaimer/ui_act(action, list/params)
switch(action) 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") if("release_items")
var/mob/M = locate(params["mobref"]) var/mob/M = locate(params["mobref"])
if(M == usr || allowed(usr)) if(M == usr || allowed(usr))
@@ -100,8 +78,9 @@
/obj/machinery/gulag_item_reclaimer/proc/drop_items(mob/user) /obj/machinery/gulag_item_reclaimer/proc/drop_items(mob/user)
if(!stored_items[user]) if(!stored_items[user])
return return
var/drop_location = drop_location()
for(var/i in stored_items[user]) for(var/i in stored_items[user])
var/obj/item/W = i var/obj/item/W = i
stored_items[user] -= W stored_items[user] -= W
W.forceMove(get_turf(src)) W.forceMove(drop_location)
stored_items -= user stored_items -= user
@@ -162,10 +162,11 @@
/obj/item/circuitboard/computer/prisoner /obj/item/circuitboard/computer/prisoner
name = "Prisoner Management Console (Computer Board)" 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 /obj/item/circuitboard/computer/gulag_teleporter_console
name = "Labor Camp teleporter console (Computer Board)" 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 /obj/item/circuitboard/computer/rdconsole/production
name = "R&D Console Production Only (Computer Board)" name = "R&D Console Production Only (Computer Board)"
@@ -373,4 +374,4 @@
/obj/item/circuitboard/computer/nanite_cloud_controller /obj/item/circuitboard/computer/nanite_cloud_controller
name = "Nanite Cloud Control (Computer Board)" name = "Nanite Cloud Control (Computer Board)"
build_path = /obj/machinery/computer/nanite_cloud_controller build_path = /obj/machinery/computer/nanite_cloud_controller
+23 -47
View File
@@ -10,12 +10,10 @@ GLOBAL_LIST(labor_sheet_values)
density = FALSE density = FALSE
var/obj/machinery/mineral/stacking_machine/laborstacker/stacking_machine = null var/obj/machinery/mineral/stacking_machine/laborstacker/stacking_machine = null
var/machinedir = SOUTH var/machinedir = SOUTH
var/obj/item/card/id/prisoner/inserted_id
var/obj/machinery/door/airlock/release_door var/obj/machinery/door/airlock/release_door
var/door_tag = "prisonshuttle" var/door_tag = "prisonshuttle"
var/obj/item/radio/Radio //needed to send messages to sec radio var/obj/item/radio/Radio //needed to send messages to sec radio
/obj/machinery/mineral/labor_claim_console/Initialize() /obj/machinery/mineral/labor_claim_console/Initialize()
. = ..() . = ..()
Radio = new/obj/item/radio(src) Radio = new/obj/item/radio(src)
@@ -34,18 +32,6 @@ GLOBAL_LIST(labor_sheet_values)
/proc/cmp_sheet_list(list/a, list/b) /proc/cmp_sheet_list(list/a, list/b)
return a["value"] - b["value"] 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, \ /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) datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) 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 var/can_go_home = FALSE
data["emagged"] = (obj_flags & EMAGGED) ? 1 : 0 data["emagged"] = (obj_flags & EMAGGED) ? 1 : 0
if(inserted_id) if(obj_flags & EMAGGED)
data["id"] = inserted_id
data["id_name"] = inserted_id.registered_name
data["points"] = inserted_id.points
data["goal"] = inserted_id.goal
if(check_auth())
can_go_home = TRUE 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) if(stacking_machine)
data["unclaimed_points"] = stacking_machine.points data["unclaimed_points"] = stacking_machine.points
@@ -78,29 +70,19 @@ GLOBAL_LIST(labor_sheet_values)
if(..()) if(..())
return return
switch(action) 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") if("claim_points")
inserted_id.points += stacking_machine.points var/mob/M = usr
stacking_machine.points = 0 var/obj/item/card/id/I = M.get_idcard(TRUE)
to_chat(usr, "Points transferred.") 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("move_shuttle")
if(!alone_in_area(get_area(src), usr)) if(!alone_in_area(get_area(src), usr))
to_chat(usr, "<span class='warning'>Prisoners are only allowed to be released while alone.</span>") 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 else
switch(SSshuttle.moveShuttle("laborcamp", "laborcamp_home", TRUE)) switch(SSshuttle.moveShuttle("laborcamp", "laborcamp_home", TRUE))
if(1) if(1)
@@ -112,14 +94,9 @@ GLOBAL_LIST(labor_sheet_values)
else else
if(!(obj_flags & EMAGGED)) if(!(obj_flags & EMAGGED))
Radio.set_frequency(FREQ_SECURITY) 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>") 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() /obj/machinery/mineral/labor_claim_console/proc/locate_stacking_machine()
stacking_machine = locate(/obj/machinery/mineral/stacking_machine, get_step(src, machinedir)) stacking_machine = locate(/obj/machinery/mineral/stacking_machine, get_step(src, machinedir))
if(stacking_machine) if(stacking_machine)
@@ -135,10 +112,8 @@ GLOBAL_LIST(labor_sheet_values)
to_chat(user, "<span class='warning'>PZZTTPFFFT</span>") to_chat(user, "<span class='warning'>PZZTTPFFFT</span>")
return TRUE return TRUE
/**********************Prisoner Collection Unit**************************/ /**********************Prisoner Collection Unit**************************/
/obj/machinery/mineral/stacking_machine/laborstacker /obj/machinery/mineral/stacking_machine/laborstacker
force_connect = TRUE force_connect = TRUE
var/points = 0 //The unclaimed value of ore stacked. var/points = 0 //The unclaimed value of ore stacked.
@@ -154,6 +129,7 @@ GLOBAL_LIST(labor_sheet_values)
return ..() return ..()
/**********************Point Lookup Console**************************/ /**********************Point Lookup Console**************************/
/obj/machinery/mineral/labor_points_checker /obj/machinery/mineral/labor_points_checker
name = "points checking console" name = "points checking console"
desc = "A console used by prisoners to check the progress on their quotas. Simply swipe a prisoner ID." desc = "A console used by prisoners to check the progress on their quotas. Simply swipe a prisoner ID."
+22 -39
View File
@@ -13,7 +13,6 @@
speed_process = TRUE speed_process = TRUE
circuit = /obj/item/circuitboard/machine/ore_redemption circuit = /obj/item/circuitboard/machine/ore_redemption
layer = BELOW_OBJ_LAYER layer = BELOW_OBJ_LAYER
var/obj/item/card/id/inserted_id
var/points = 0 var/points = 0
var/ore_pickup_rate = 15 var/ore_pickup_rate = 15
var/sheet_per_ore = 1 var/sheet_per_ore = 1
@@ -48,18 +47,23 @@
point_upgrade = point_upgrade_temp point_upgrade = point_upgrade_temp
sheet_per_ore = sheet_per_ore_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) /obj/machinery/mineral/ore_redemption/proc/smelt_ore(obj/item/stack/ore/O)
var/datum/component/material_container/mat_container = materials.mat_container var/datum/component/material_container/mat_container = materials.mat_container
if (!mat_container) if (!mat_container)
return return
if(istype(O, /obj/item/stack/ore/bluespace_crystal/refined)) if(O.refined_type == null)
return return
ore_buffer -= O ore_buffer -= O
if(O && O.refined_type) 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) var/material_amount = mat_container.get_item_material_amount(O)
@@ -72,11 +76,8 @@
else else
var/mats = O.materials & mat_container.materials var/mats = O.materials & mat_container.materials
var/amount = O.amount 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 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) qdel(O)
/obj/machinery/mineral/ore_redemption/proc/can_smelt_alloy(datum/design/D) /obj/machinery/mineral/ore_redemption/proc/can_smelt_alloy(datum/design/D)
@@ -168,15 +169,7 @@
return return
if(!powered()) if(!powered())
return 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
if(istype(W, /obj/item/disk/design_disk)) if(istype(W, /obj/item/disk/design_disk))
if(user.transferItemToLoc(W, src)) if(user.transferItemToLoc(W, src))
@@ -205,9 +198,6 @@
/obj/machinery/mineral/ore_redemption/ui_data(mob/user) /obj/machinery/mineral/ore_redemption/ui_data(mob/user)
var/list/data = list() var/list/data = list()
data["unclaimedPoints"] = points data["unclaimedPoints"] = points
if(inserted_id)
data["hasID"] = TRUE
data["claimedPoints"] = inserted_id.mining_points
data["materials"] = list() data["materials"] = list()
var/datum/component/material_container/mat_container = materials.mat_container var/datum/component/material_container/mat_container = materials.mat_container
@@ -245,32 +235,24 @@
return return
var/datum/component/material_container/mat_container = materials.mat_container var/datum/component/material_container/mat_container = materials.mat_container
switch(action) 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("Claim")
if(inserted_id) var/mob/M = usr
inserted_id.mining_points += points var/obj/item/card/id/I = M.get_idcard(TRUE)
points = 0 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 return TRUE
if("Release") if("Release")
if(!mat_container) if(!mat_container)
return return
if(materials.on_hold()) if(materials.on_hold())
to_chat(usr, "<span class='warning'>Mineral access is on hold, please contact the quartermaster.</span>") 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>") to_chat(usr, "<span class='warning'>Required access not found.</span>")
else else
var/mat_id = params["id"] var/mat_id = params["id"]
@@ -293,6 +275,7 @@
var/list/mats = list() var/list/mats = list()
mats[mat_id] = MINERAL_MATERIAL_AMOUNT mats[mat_id] = MINERAL_MATERIAL_AMOUNT
materials.silo_log(src, "released", -count, "sheets", mats) materials.silo_log(src, "released", -count, "sheets", mats)
//Logging deleted for quick coding
return TRUE return TRUE
if("diskInsert") if("diskInsert")
var/obj/item/disk/design_disk/disk = usr.get_active_held_item() var/obj/item/disk/design_disk/disk = usr.get_active_held_item()
@@ -321,7 +304,7 @@
return return
var/alloy_id = params["id"] var/alloy_id = params["id"]
var/datum/design/alloy = stored_research.isDesignResearchedID(alloy_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/smelt_amount = can_smelt_alloy(alloy)
var/desired = 0 var/desired = 0
if (params["sheets"]) if (params["sheets"])
+24 -50
View File
@@ -20,6 +20,7 @@
new /datum/data/mining_equipment("Soap", /obj/item/soap/nanotrasen, 200), 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("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("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("Fulton Beacon", /obj/item/fulton_core, 400),
new /datum/data/mining_equipment("Shelter Capsule", /obj/item/survivalcapsule, 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), 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("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("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("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("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 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("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("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("Burn First-Aid Kit", /obj/item/storage/firstaid/fire, 800),
new /datum/data/mining_equipment("First-Aid Kit", /obj/item/storage/firstaid/regular, 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("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("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("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("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 Melee Upgrade", /obj/item/mine_bot_upgrade, 400),
new /datum/data/mining_equipment("Minebot Armor Upgrade", /obj/item/mine_bot_upgrade/health, 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 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 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("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) new /datum/data/mining_equipment("Premium Accelerator", /obj/item/gun/energy/kinetic_accelerator/premiumka, 8000)
) )
/datum/data/mining_equipment /datum/data/mining_equipment
@@ -95,60 +94,42 @@
/obj/machinery/mineral/equipment_vendor/ui_interact(mob/user) /obj/machinery/mineral/equipment_vendor/ui_interact(mob/user)
. = ..() . = ..()
var/dat var/list/dat = list()
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>"
dat += "<br><b>Equipment point cost list:</b><BR><table border='0' width='300'>" dat += "<br><b>Equipment point cost list:</b><BR><table border='0' width='300'>"
for(var/datum/data/mining_equipment/prize in prize_list) 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 += "<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>" dat += "</table>"
var/datum/browser/popup = new(user, "miningvendor", "Mining Equipment Vendor", 400, 350) var/datum/browser/popup = new(user, "miningvendor", "Mining Equipment Vendor", 400, 350)
popup.set_content(dat) popup.set_content(dat.Join())
popup.open() popup.open()
return return
/obj/machinery/mineral/equipment_vendor/Topic(href, href_list) /obj/machinery/mineral/equipment_vendor/Topic(href, href_list)
if(..()) if(..())
return 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(href_list["purchase"])
if(istype(inserted_id)) var/mob/M = usr
var/datum/data/mining_equipment/prize = locate(href_list["purchase"]) 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)) if (!prize || !(prize in prize_list))
to_chat(usr, "<span class='warning'>Error: Invalid choice!</span>") to_chat(usr, "<span class='warning'>Error: Invalid choice!</span>")
flick(icon_deny, src) flick(icon_deny, src)
return return
if(prize.cost > inserted_id.mining_points) if(prize.cost > I.mining_points)
to_chat(usr, "<span class='warning'>Error: Insufficient points for [prize.equipment_name]!</span>") to_chat(usr, "<span class='warning'>Error: Insufficient credits for [prize.equipment_name] on [I]!</span>")
flick(icon_deny, src) flick(icon_deny, src)
else else
inserted_id.mining_points -= prize.cost if (I.mining_points -= prize.cost)
to_chat(usr, "<span class='notice'>[src] clanks to life briefly before vending [prize.equipment_name]!</span>") to_chat(usr, "<span class='notice'>[src] clanks to life briefly before vending [prize.equipment_name]!</span>")
new prize.equipment_path(src.loc) new prize.equipment_path(src.loc)
SSblackbox.record_feedback("nested tally", "mining_equipment_bought", 1, list("[type]", "[prize.equipment_path]")) 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 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) flick(icon_deny, src)
updateUsrDialog() updateUsrDialog()
return return
@@ -160,15 +141,6 @@
if(istype(I, /obj/item/suit_voucher)) if(istype(I, /obj/item/suit_voucher))
RedeemSVoucher(I, user) RedeemSVoucher(I, user)
return 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)) if(default_deconstruction_screwdriver(user, "mining-open", "mining", I))
updateUsrDialog() updateUsrDialog()
return return
@@ -212,7 +184,6 @@
if(prob(50 / severity) && severity < 3) if(prob(50 / severity) && severity < 3)
qdel(src) qdel(src)
/****************Golem Point Vendor**************************/ /****************Golem Point Vendor**************************/
/obj/machinery/mineral/equipment_vendor/golem /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("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("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("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("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("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) 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/encryptionkey/headset_cargo(src)
new /obj/item/clothing/mask/gas/explorer(src) new /obj/item/clothing/mask/gas/explorer(src)
new /obj/item/card/mining_access_card(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 /obj/item/storage/backpack/duffelbag/mining_cloned
name = "mining replacement kit" name = "mining replacement kit"
@@ -336,6 +309,7 @@
new /obj/item/clothing/shoes/workboots/mining(src) new /obj/item/clothing/shoes/workboots/mining(src)
new /obj/item/clothing/gloves/color/black(src) new /obj/item/clothing/gloves/color/black(src)
new /obj/item/implanter/tracking/gps(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/kitchen/knife/combat/survival(src)
new /obj/item/storage/firstaid/regular(src) new /obj/item/storage/firstaid/regular(src)
new /obj/item/reagent_containers/hypospray/medipen/survival(src) new /obj/item/reagent_containers/hypospray/medipen/survival(src)
+3
View File
@@ -652,6 +652,9 @@
#include "code\game\machinery\computer\arcade\minesweeper.dm" #include "code\game\machinery\computer\arcade\minesweeper.dm"
#include "code\game\machinery\computer\arcade\misc_arcade.dm" #include "code\game\machinery\computer\arcade\misc_arcade.dm"
#include "code\game\machinery\computer\arcade\orion_trail.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.dm"
#include "code\game\machinery\doors\airlock_electronics.dm" #include "code\game\machinery\doors\airlock_electronics.dm"
#include "code\game\machinery\doors\airlock_types.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'> <ui-display title='Stored Items'>
{{#each data.mobs}} {{#each data.mobs}}
<ui-section label='{{name}}'> <ui-section label='{{name}}'>
<ui-button action="release_items" params='{"mobref":{{mob}}}' state={{data.can_reclaim ? null : 'disabled'}}>Drop Items</ui-button> <ui-button action="release_items" params='{"mobref":{{mob}}}' state={{data.can_reclaim ? null : 'disabled'}}>Drop Items</ui-button>
</ui-section> </ui-section>
{{/each}} {{/each}}
</ui-display> </ui-display>
+8 -17
View File
@@ -6,24 +6,15 @@
{{/each}} {{/each}}
</ui-display> </ui-display>
<ui-display title='Points'> <ui-display title='Points'>
<ui-section label='ID'> <ui-section label='Unclaimed points'>
<ui-button action="handle_id">{{data.id ? data.id_name : "-------------"}}</ui-button> <span>{{data.unclaimed_points}}</span>
<ui-button action="claim_points" state={{data.unclaimed_points ? null : 'disabled'}}>Claim points</ui-button>
</ui-section> </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>
<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> <ui-button action="move_shuttle" state={{data.can_go_home ? null : 'disabled'}}>Move shuttle</ui-button>
</center> </ui-section>
</ui-display> </ui-display>
@@ -3,24 +3,10 @@
This machine only accepts ore. Gibtonite and Slag are not accepted. This machine only accepts ore. Gibtonite and Slag are not accepted.
</ui-section> </ui-section>
<ui-section> <ui-section>
Current unclaimed points: {{data.unclaimedPoints}} Current unclaimed credits: {{data.unclaimedPoints}}
{{#if data.unclaimedPoints}}
<ui-button action='Claim'> <ui-button action='Claim'>
Claim Points Claim
</ui-button> </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-section>
</ui-display> </ui-display>
<ui-display> <ui-display>