mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-14 11:42:27 +00:00
## About The Pull Request <img width="491" height="301" alt="image" src="https://github.com/user-attachments/assets/a3b5b19f-edf5-4de9-9201-9cbfab9e8827" /> Mod computers with the access changing software installed have a secondary ID slot once again. This ID slot doesn't contribute to access. You can insert IDs into the slot with right click and remove them with alt-right click. Also removes the "New IDs and you" memo paper. Also tweaks PDA on_deconstruct so contents are dropped on when they're deconstructed with assembly. Fixes #92151 ## Why It's Good For The Game Changing IDs is very unnecessarily clunky with the one slot. Insert hop id, log in, remove hop id, insert crew id, change access, remove crew id, log out. We had it right back when we had two slots. Insert hop ID, insert crew id, log in. It just works. This also allows for mobile HoPs to change access without necessitating removing their ID from their PDA. Other changes: The "New IDs and you" memo is very old. They haven't been new for 4 years now. I don't think anyone reads it and they served their purpose. I found it odd that, if your PDA was melted or blown up, it would delete your ID. If this is a hold-over from old PDA behavior feel free to let me know but otherwise it seems sensible that it'd spit out the contents as you would expect. ## Changelog 🆑 Melbert qol: The access changing software (the HoP console) now has ID two slots again (one for the HoP's id and one for the ID being changed). You can insert IDs in the secondary slot via the UI or right click, and remove them via the UI or alt-right click. qol: If your PDA is destroyed via acid or bombs, your ID (and similar contents such as disks) are spit out instead of being deleted del: Deletes the "New IDs and you" memo in the HoP's office. They haven't been new for 4 years. fix: Engineering sub-tab in the access changing software no longer looks messed up fix: Fix reversed alt-click logic for mod pcs /🆑
245 lines
6.8 KiB
Plaintext
245 lines
6.8 KiB
Plaintext
/**
|
|
* update_tablet_open_uis
|
|
*
|
|
* Will search the user to see if they have the tablet open.
|
|
* If they don't, we'll open a new UI depending on the tab the tablet is meant to be on.
|
|
* If they do, we'll update the interface and title, then update all static data and re-send assets.
|
|
*
|
|
* This is best called when you're actually changing the app, as we don't check
|
|
* if we're swapping to the current UI repeatedly.
|
|
* Args:
|
|
* user - The person whose UI we're updating. Only necessary if we're opening the UI for the first time.
|
|
*/
|
|
/obj/item/modular_computer/proc/update_tablet_open_uis(mob/user)
|
|
if(user)
|
|
var/datum/tgui/active_ui = SStgui.get_open_ui(user, src)
|
|
if(!active_ui)
|
|
if(active_program)
|
|
active_ui = new(user, src, active_program.tgui_id, active_program.filedesc)
|
|
active_program.ui_interact(user, active_ui)
|
|
else
|
|
active_ui = new(user, src, "NtosMain")
|
|
return active_ui.open()
|
|
|
|
for (var/datum/tgui/window as anything in open_uis)
|
|
if(active_program)
|
|
window.interface = active_program.tgui_id
|
|
window.title = active_program.filedesc
|
|
active_program.ui_interact(window.user, window)
|
|
else
|
|
window.interface = "NtosMain"
|
|
window.send_assets()
|
|
update_static_data_for_all_viewers()
|
|
|
|
|
|
/obj/item/modular_computer/ui_state(mob/user)
|
|
if(inserted_pai && (user == inserted_pai.pai))
|
|
return GLOB.contained_state
|
|
return ..()
|
|
|
|
/obj/item/modular_computer/interact(mob/user)
|
|
if(enabled)
|
|
ui_interact(user)
|
|
else
|
|
turn_on(user)
|
|
|
|
// Operates TGUI
|
|
/obj/item/modular_computer/ui_interact(mob/user, datum/tgui/ui)
|
|
if(!enabled || !user.can_read(src, READING_CHECK_LITERACY))
|
|
ui?.close()
|
|
return
|
|
|
|
// Robots don't really need to see the screen, their wireless connection works as long as computer is on.
|
|
if(!screen_on && !issilicon(user))
|
|
ui?.close()
|
|
return
|
|
|
|
if(honkvirus_amount > 0) // EXTRA annoying, huh!
|
|
honkvirus_amount--
|
|
playsound(src, 'sound/items/bikehorn.ogg', 30, TRUE)
|
|
|
|
ui = SStgui.try_update_ui(user, src, ui)
|
|
if(!ui)
|
|
update_tablet_open_uis(user)
|
|
else if(active_program?.always_update_ui)
|
|
active_program.ui_interact(user, ui)
|
|
|
|
/obj/item/modular_computer/ui_assets(mob/user)
|
|
var/list/data = list()
|
|
data += get_asset_datum(/datum/asset/simple/headers)
|
|
if(active_program)
|
|
data += active_program.ui_assets(user)
|
|
return data
|
|
|
|
/obj/item/modular_computer/ui_static_data(mob/user)
|
|
var/list/data = list()
|
|
if(active_program)
|
|
data += active_program.ui_static_data(user)
|
|
return data
|
|
|
|
data["show_imprint"] = istype(src, /obj/item/modular_computer/pda)
|
|
return data
|
|
|
|
/obj/item/modular_computer/ui_data(mob/user)
|
|
var/list/data = get_header_data()
|
|
if(active_program)
|
|
data += active_program.ui_data(user)
|
|
return data
|
|
|
|
data["pai"] = inserted_pai
|
|
data["has_light"] = has_light
|
|
data["light_on"] = light_on
|
|
data["comp_light_color"] = comp_light_color
|
|
|
|
data["login"] = list(
|
|
IDName = saved_identification || "Unknown",
|
|
IDJob = saved_job || "Unknown",
|
|
)
|
|
|
|
data["proposed_login"] = list(
|
|
IDInserted = stored_id ? TRUE : FALSE,
|
|
IDName = stored_id?.registered_name,
|
|
IDJob = stored_id?.assignment,
|
|
)
|
|
|
|
data["removable_media"] = list()
|
|
if(inserted_disk)
|
|
data["removable_media"] += "Eject Disk"
|
|
var/datum/computer_file/program/ai_restorer/airestore_app = locate() in stored_files
|
|
if(airestore_app?.stored_card)
|
|
data["removable_media"] += "intelliCard"
|
|
|
|
data["programs"] = list()
|
|
for(var/datum/computer_file/program/program in stored_files)
|
|
data["programs"] += list(list(
|
|
"name" = program.filename,
|
|
"desc" = program.filedesc,
|
|
"header_program" = !!(program.program_flags & PROGRAM_HEADER),
|
|
"running" = !!(program in idle_threads),
|
|
"icon" = program.program_icon,
|
|
"alert" = program.alert_pending,
|
|
))
|
|
|
|
data["alert_style"] = get_security_level_relevancy()
|
|
data["alert_color"] = SSsecurity_level?.current_security_level?.announcement_color
|
|
data["alert_name"] = SSsecurity_level?.current_security_level?.name_shortform
|
|
|
|
return data
|
|
|
|
// Handles user's GUI input
|
|
/obj/item/modular_computer/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state)
|
|
. = ..()
|
|
if(.)
|
|
return
|
|
|
|
if(ishuman(usr) && !allow_chunky)
|
|
var/mob/living/carbon/human/human_user = usr
|
|
if(human_user.check_chunky_fingers())
|
|
balloon_alert(human_user, "fingers are too big!")
|
|
return TRUE
|
|
|
|
switch(action)
|
|
if("PC_exit")
|
|
//you can't close apps in emergency mode.
|
|
if(isnull(internal_cell) || internal_cell.charge)
|
|
active_program.kill_program(usr)
|
|
return TRUE
|
|
if("PC_shutdown")
|
|
shutdown_computer()
|
|
return TRUE
|
|
if("PC_minimize")
|
|
if(!active_program || (!isnull(internal_cell) && !internal_cell.charge))
|
|
return
|
|
active_program.background_program(usr)
|
|
return TRUE
|
|
|
|
if("PC_killprogram")
|
|
var/prog = params["name"]
|
|
var/datum/computer_file/program/killed_program = find_file_by_name(prog)
|
|
|
|
if(!istype(killed_program))
|
|
return
|
|
|
|
killed_program.kill_program(usr)
|
|
to_chat(usr, span_notice("Program [killed_program.filename].[killed_program.filetype] with PID [rand(100,999)] has been killed."))
|
|
return TRUE
|
|
|
|
if("PC_runprogram")
|
|
open_program(usr, find_file_by_name(params["name"]))
|
|
return TRUE
|
|
|
|
if("PC_toggle_light")
|
|
toggle_flashlight()
|
|
return TRUE
|
|
|
|
if("PC_light_color")
|
|
var/mob/user = usr
|
|
var/new_color
|
|
while(!new_color)
|
|
new_color = input(user, "Choose a new color for [src]'s flashlight.", "Light Color",light_color) as color|null
|
|
if(!new_color)
|
|
return
|
|
if(is_color_dark(new_color, 50) ) //Colors too dark are rejected
|
|
to_chat(user, span_warning("That color is too dark! Choose a lighter one."))
|
|
new_color = null
|
|
set_flashlight_color(new_color)
|
|
return TRUE
|
|
|
|
if("PC_Eject_Disk")
|
|
var/param = params["name"]
|
|
var/mob/user = usr
|
|
switch(param)
|
|
if("Eject Disk")
|
|
if(!inserted_disk)
|
|
return
|
|
|
|
if(!user || !Adjacent(user))
|
|
inserted_disk.forceMove(drop_location())
|
|
else
|
|
user.put_in_hands(inserted_disk)
|
|
inserted_disk = null
|
|
playsound(src, 'sound/machines/card_slide.ogg', 50)
|
|
return TRUE
|
|
|
|
if("intelliCard")
|
|
var/datum/computer_file/program/ai_restorer/airestore_app = locate() in stored_files
|
|
if(!airestore_app)
|
|
return
|
|
|
|
if(airestore_app.try_eject(user))
|
|
playsound(src, 'sound/machines/card_slide.ogg', 50)
|
|
return TRUE
|
|
|
|
if("ID")
|
|
if(remove_id(user))
|
|
playsound(src, 'sound/machines/card_slide.ogg', 50)
|
|
return TRUE
|
|
|
|
if("PC_Imprint_ID")
|
|
imprint_id()
|
|
UpdateDisplay()
|
|
playsound(src, 'sound/machines/terminal/terminal_processing.ogg', 15, TRUE)
|
|
|
|
if("PC_Pai_Interact")
|
|
switch(params["option"])
|
|
if("eject")
|
|
if(!ishuman(usr))
|
|
return
|
|
remove_pai(usr)
|
|
if("interact")
|
|
inserted_pai.attack_self(usr)
|
|
return TRUE
|
|
|
|
if(active_program)
|
|
return active_program.ui_act(action, params, ui, state)
|
|
|
|
/obj/item/modular_computer/ui_host()
|
|
if(physical)
|
|
return physical
|
|
return src
|
|
|
|
/obj/item/modular_computer/ui_close(mob/user)
|
|
. = ..()
|
|
if(active_program)
|
|
active_program.ui_close(user)
|