Various pAI Fixes (#18222)

* Change various PAI abilities from proc to verb, init their verbs on creation

* Provide exit button on notFound and missingExport page

* Prevent programs with no ID from populating. Will still show in services. Things like pAI Flashlight

* allows pAIs to use PDAs they are inserted into

* prevent RTE for admin created pAIs

* adds error message when trying to download incompatible software

* fixes not being able to open pAI computer UIs if the client is closed with the UIs open

* changelog

* test fix?

* Revert "Provide exit button on notFound and missingExport page"

This reverts commit 77168da050.

* changelog change

* to_chat

* don't code 30s after waking up
This commit is contained in:
AlaunusLux
2024-01-19 11:33:21 +00:00
committed by GitHub
parent 7007c46389
commit 8336549284
13 changed files with 83 additions and 24 deletions
+4 -4
View File
@@ -15,13 +15,13 @@
/mob/living/silicon/ai
silicon_subsystems = list(
/mob/living/silicon/proc/silicon_mimic_accent
/mob/living/silicon/verb/silicon_mimic_accent
)
/mob/living/silicon/robot/combat
register_alarms = 0
silicon_subsystems = list(
/mob/living/silicon/proc/silicon_mimic_accent
/mob/living/silicon/verb/silicon_mimic_accent
)
/mob/living/silicon/proc/init_subsystems()
@@ -38,13 +38,13 @@
/****************
* Computer *
*****************/
/mob/living/silicon/proc/computer_interact()
/mob/living/silicon/verb/computer_interact()
set name = "Open Computer Interface"
set category = "Subsystems"
computer.attack_self(src)
/mob/living/silicon/pai/proc/personal_computer_interact()
/mob/living/silicon/pai/verb/personal_computer_interact()
set name = "Access Local Computer"
set category = "Subsystems"
@@ -25,6 +25,8 @@
var/mob/living/silicon/pai/pai = new(card)
pai.key = pai_key
card.setPersonality(pai)
if(pai.mind)
pai.mind.current.client.init_verbs()
if(name)
pai.SetName(name)
@@ -0,0 +1,5 @@
/mob/living/silicon/pai/Logout()
SStgui.close_uis(src.computer)
if(!isnull(src.parent_computer))
SStgui.close_uis(src.parent_computer)
..()
+4 -10
View File
@@ -183,12 +183,6 @@
add_language(LANGUAGE_SIGN, 0)
set_custom_sprite()
add_verb(src, /mob/living/silicon/pai/proc/choose_chassis)
add_verb(src, /mob/living/silicon/pai/proc/choose_verbs)
add_verb(src, /mob/living/silicon/proc/computer_interact)
add_verb(src, /mob/living/silicon/pai/proc/personal_computer_interact)
add_verb(src, /mob/living/silicon/proc/silicon_mimic_accent)
. = ..()
@@ -366,7 +360,7 @@
close_up()
/mob/living/silicon/pai/proc/choose_chassis()
/mob/living/silicon/pai/verb/choose_chassis()
set category = "pAI Commands"
set name = "Choose Chassis"
@@ -381,7 +375,7 @@
holder_type = pai_holder_types[choice]
chassis = icon_state
remove_verb(src, /mob/living/silicon/pai/proc/choose_chassis)
remove_verb(src, /mob/living/silicon/pai/verb/choose_chassis)
add_verb(src, /mob/living/proc/hide)
/mob/living/silicon/pai/verb/get_onmob_location()
@@ -395,7 +389,7 @@
card.report_onmob_location(0, card.get_equip_slot(), src)
/mob/living/silicon/pai/proc/choose_verbs()
/mob/living/silicon/pai/verb/choose_verbs()
set category = "pAI Commands"
set name = "Choose Speech Verbs"
@@ -407,7 +401,7 @@
speak_exclamation = sayverbs[(sayverbs.len>1 ? 2 : sayverbs.len)]
speak_query = sayverbs[(sayverbs.len>2 ? 3 : sayverbs.len)]
remove_verb(src, /mob/living/silicon/pai/proc/choose_verbs)
remove_verb(src, /mob/living/silicon/pai/verb/choose_verbs)
/mob/living/silicon/pai/lay_down()
set name = "Rest"
+2 -2
View File
@@ -33,8 +33,8 @@
// Internal Computer
var/obj/item/modular_computer/silicon/computer
var/list/silicon_subsystems = list(
/mob/living/silicon/proc/computer_interact,
/mob/living/silicon/proc/silicon_mimic_accent
/mob/living/silicon/verb/computer_interact,
/mob/living/silicon/verb/silicon_mimic_accent
)
// Utility
@@ -1,4 +1,4 @@
/mob/living/silicon/proc/silicon_mimic_accent()
/mob/living/silicon/verb/silicon_mimic_accent()
set name = "Mimic Accent"
set category = "Subsystems"
@@ -78,7 +78,7 @@
for(var/datum/computer_file/program/P in hard_drive.stored_files)
if(P.program_hidden())
continue
if(!istype(P, /datum/computer_file/program/scanner))
if(!istype(P, /datum/computer_file/program/scanner) && !isnull(P.tgui_id))
data["programs"] += list(list(
"filename" = P.filename,
"desc" = P.filedesc,
@@ -180,8 +180,11 @@
register_account()
. = TRUE
if(action == "PC_toggleservice")
toggle_service(params["service_to_toggle"], usr)
. = TRUE
if(params["service_to_toggle"] == "pai_access_lock" && istype(usr, /mob/living/silicon/pai))
to_chat(usr, SPAN_WARNING("Access denied."))
else
toggle_service(params["service_to_toggle"], usr)
. = TRUE
playsound(src, click_sound)
update_icon()
@@ -106,6 +106,7 @@
return TRUE
if(!PRG.is_supported_by_hardware(computer.hardware_flag))
to_chat(user, SPAN_WARNING("Hardware Error - Incompatible software."))
return FALSE
if(PRG.available_on_ntnet)
+10 -3
View File
@@ -47,8 +47,15 @@ var/global/datum/ui_state/default/default_state = new
return UI_CLOSE
/mob/living/silicon/pai/default_can_use_topic(src_object)
// pAIs can only use themselves and the owner's radio.
// pAIs can use themselves, the owner's radio, and any computer they're inserted into. Limited by synced ID for certain programs.
if((src_object == src || src_object == radio) && !stat)
return UI_INTERACTIVE
else
return min(..(), UI_UPDATE)
else if(src_object == src.parent_computer)
if(istype(src_object, /obj/item/modular_computer))
var/obj/item/modular_computer/PDA = src_object
if(PDA.pAI_lock == FALSE)
return UI_INTERACTIVE
else
to_chat(src, SPAN_WARNING("Access denied."))
return min(..(), UI_UPDATE)