mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-01-06 07:32:15 +00:00
* CHIPS * microchip implanter * more chips to purge * bio-chip * catches more things * tgui * final merge changes * Update code/game/machinery/cloning.dm Co-authored-by: Farie82 <farie82@users.noreply.github.com> * oops Co-authored-by: Farie82 <farie82@users.noreply.github.com>
189 lines
5.6 KiB
Plaintext
189 lines
5.6 KiB
Plaintext
#define IMPLANT_WARN_COOLDOWN (30 SECONDS)
|
|
|
|
/obj/machinery/computer/prisoner
|
|
name = "labor camp points manager"
|
|
icon = 'icons/obj/computer.dmi'
|
|
icon_keyboard = "security_key"
|
|
icon_screen = "explosive"
|
|
req_access = list(ACCESS_BRIG)
|
|
circuit = /obj/item/circuitboard/prisoner
|
|
|
|
var/authenticated = FALSE // FALSE - No Access Denied, TRUE - Access allowed
|
|
var/inserted_id_uid
|
|
|
|
light_color = LIGHT_COLOR_DARKRED
|
|
|
|
/obj/machinery/computer/prisoner/Initialize(mapload)
|
|
. = ..()
|
|
GLOB.prisoncomputer_list += src
|
|
|
|
/obj/machinery/computer/prisoner/Destroy()
|
|
GLOB.prisoncomputer_list -= src
|
|
return ..()
|
|
|
|
/obj/machinery/computer/prisoner/attackby(obj/item/O, mob/user, params)
|
|
var/datum/ui_login/state = ui_login_get()
|
|
if(state.logged_in)
|
|
var/obj/item/card/id/prisoner/I = O
|
|
if(istype(I) && user.drop_item())
|
|
I.forceMove(src)
|
|
inserted_id_uid = I.UID()
|
|
return
|
|
if(ui_login_attackby(O, user))
|
|
return
|
|
return ..()
|
|
|
|
/obj/machinery/computer/prisoner/attack_ai(mob/user)
|
|
ui_interact(user)
|
|
|
|
/obj/machinery/computer/prisoner/attack_hand(mob/user)
|
|
if(..())
|
|
return TRUE
|
|
add_fingerprint(user)
|
|
ui_interact(user)
|
|
|
|
/obj/machinery/computer/prisoner/attackby(obj/item/O, mob/user)
|
|
if(ui_login_attackby(O, user))
|
|
return
|
|
return ..()
|
|
|
|
/obj/machinery/computer/prisoner/proc/check_implant(obj/item/implant/I)
|
|
var/turf/implant_location = get_turf(I)
|
|
if(!implant_location || implant_location.z != z)
|
|
return FALSE
|
|
if(!I.implanted)
|
|
return FALSE
|
|
return TRUE
|
|
|
|
/obj/machinery/computer/prisoner/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, 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, "PrisonerImplantManager", name, 500, 500, master_ui, state)
|
|
ui.open()
|
|
|
|
/obj/machinery/computer/prisoner/ui_data(mob/user)
|
|
var/list/data = list()
|
|
ui_login_data(data, user)
|
|
var/obj/item/card/id/prisoner/inserted_id = locateUID(inserted_id_uid)
|
|
data["prisonerInfo"] = list(
|
|
"name" = inserted_id?.name,
|
|
"points" = inserted_id?.mining_points,
|
|
"goal" = inserted_id?.goal,
|
|
)
|
|
|
|
data["chemicalInfo"] = list()
|
|
for(var/obj/item/implant/chem/C in GLOB.tracked_implants)
|
|
if(!check_implant(C))
|
|
continue
|
|
var/list/implant_info = list(
|
|
"name" = C.imp_in.name,
|
|
"volume" = C.reagents.total_volume,
|
|
"uid" = C.UID(),
|
|
)
|
|
data["chemicalInfo"] += list(implant_info)
|
|
|
|
data["trackingInfo"] = list()
|
|
for(var/obj/item/implant/tracking/T in GLOB.tracked_implants)
|
|
if(!check_implant(T))
|
|
continue
|
|
var/mob/living/carbon/M = T.imp_in
|
|
var/loc_display = "Unknown"
|
|
var/health_display = "OK"
|
|
var/total_loss = (M.maxHealth - M.health)
|
|
if(M.stat == DEAD)
|
|
health_display = "DEAD"
|
|
else if(total_loss)
|
|
health_display = "HURT ([total_loss])"
|
|
var/turf/implant_location = get_turf(T)
|
|
if(!istype(implant_location, /turf/space))
|
|
loc_display = "[get_area(implant_location)]"
|
|
|
|
var/list/implant_info = list(
|
|
"subject" = M.name,
|
|
"location" = loc_display,
|
|
"health" = health_display,
|
|
"uid" = T.UID()
|
|
)
|
|
data["trackingInfo"] += list(implant_info)
|
|
|
|
data["modal"] = ui_modal_data(src)
|
|
|
|
return data
|
|
|
|
/obj/machinery/computer/prisoner/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state)
|
|
if(..())
|
|
return
|
|
|
|
add_fingerprint(ui.user)
|
|
|
|
if(ui_act_modal(action, params, ui))
|
|
return
|
|
if(ui_login_act(action, params))
|
|
return
|
|
|
|
var/mob/living/user = ui.user
|
|
var/obj/item/card/id/prisoner/inserted_id = locateUID(inserted_id_uid)
|
|
switch(action)
|
|
if("id_card")
|
|
if(inserted_id)
|
|
if(!ui.user.put_in_hands(inserted_id))
|
|
inserted_id.forceMove(get_turf(src))
|
|
inserted_id_uid = null
|
|
return
|
|
var/obj/item/card/id/prisoner/I = user.get_active_hand()
|
|
if(istype(I) && user.drop_item())
|
|
I.forceMove(src)
|
|
inserted_id_uid = I.UID()
|
|
else
|
|
to_chat(user, "<span class='warning'>No valid ID.</span>")
|
|
if("inject")
|
|
var/obj/item/implant/chem/implant = locateUID(params["uid"])
|
|
if(!implant)
|
|
return
|
|
implant.activate(text2num(params["amount"]))
|
|
if("reset_points")
|
|
if(inserted_id)
|
|
inserted_id.mining_points = 0
|
|
|
|
/obj/machinery/computer/prisoner/proc/ui_act_modal(action, list/params, datum/tgui/ui)
|
|
if(!ui_login_get().logged_in)
|
|
return
|
|
. = TRUE
|
|
var/id = params["id"]
|
|
var/mob/living/user = ui.user
|
|
var/list/arguments = istext(params["arguments"]) ? json_decode(params["arguments"]) : params["arguments"]
|
|
|
|
switch(ui_modal_act(src, action, params))
|
|
if(UI_MODAL_OPEN)
|
|
switch(id)
|
|
if("warn")
|
|
ui_modal_input(src, id, "Please enter your message:", null, arguments = list(
|
|
"uid" = arguments["uid"],
|
|
))
|
|
if("set_points")
|
|
ui_modal_input(src, id, "Please enter the new point goal:", null, arguments)
|
|
|
|
if(UI_MODAL_ANSWER)
|
|
var/answer = params["answer"]
|
|
switch(id)
|
|
if("warn")
|
|
var/obj/item/implant/tracking/implant = locateUID(arguments["uid"])
|
|
if(!implant)
|
|
return
|
|
if(implant.warn_cooldown >= world.time)
|
|
to_chat(user, "<span class='warning'>The warning system for that bio-chip is still cooling down.</span>")
|
|
return
|
|
implant.warn_cooldown = world.time + IMPLANT_WARN_COOLDOWN
|
|
if(implant.imp_in)
|
|
var/mob/living/carbon/implantee = implant.imp_in
|
|
var/warning = copytext(sanitize(answer), 1, MAX_MESSAGE_LEN)
|
|
to_chat(implantee, "<span class='boldnotice'>Your skull vibrates violently as a loud announcement is broadcasted to you: '[warning]'</span>")
|
|
|
|
if("set_points")
|
|
if(isnull(text2num(answer)))
|
|
return
|
|
var/obj/item/card/id/prisoner/inserted_id = locateUID(inserted_id_uid)
|
|
inserted_id?.goal = max(text2num(answer), 0)
|
|
|
|
return FALSE
|