diff --git a/aurorastation.dme b/aurorastation.dme index 66c0947d184..e625857c634 100644 --- a/aurorastation.dme +++ b/aurorastation.dme @@ -2522,6 +2522,7 @@ #include "code\modules\mob\living\silicon\pai\emote.dm" #include "code\modules\mob\living\silicon\pai\examine.dm" #include "code\modules\mob\living\silicon\pai\life.dm" +#include "code\modules\mob\living\silicon\pai\logout.dm" #include "code\modules\mob\living\silicon\pai\pai.dm" #include "code\modules\mob\living\silicon\pai\personality.dm" #include "code\modules\mob\living\silicon\pai\say.dm" diff --git a/code/controllers/subsystems/pai.dm b/code/controllers/subsystems/pai.dm index d3ec8ae57d0..add006fd254 100644 --- a/code/controllers/subsystems/pai.dm +++ b/code/controllers/subsystems/pai.dm @@ -101,6 +101,7 @@ SUBSYSTEM_DEF(pai) if(pai.mind) update_antag_icons(pai.mind) + pai.mind.current.client.init_verbs() pai_candidates -= candidate usr << browse(null, "window=findPai") diff --git a/code/game/objects/items/devices/paicard.dm b/code/game/objects/items/devices/paicard.dm index 79dafd6b067..abf77c81540 100644 --- a/code/game/objects/items/devices/paicard.dm +++ b/code/game/objects/items/devices/paicard.dm @@ -130,7 +130,7 @@ return 1 /obj/item/device/paicard/proc/ID_readout() - if (pai.id_card.registered_name) + if (pai.id_card && pai.id_card.registered_name) return SPAN_NOTICE("Identity of owner: [pai.id_card.registered_name] registered.") else return SPAN_WARNING("No ID card registered! Please scan your ID to share access.") diff --git a/code/modules/mob/living/silicon/computer.dm b/code/modules/mob/living/silicon/computer.dm index d7d477d95d9..bfdfa4feb98 100644 --- a/code/modules/mob/living/silicon/computer.dm +++ b/code/modules/mob/living/silicon/computer.dm @@ -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" diff --git a/code/modules/mob/living/silicon/pai/admin.dm b/code/modules/mob/living/silicon/pai/admin.dm index 018be5cd7a4..5b9bedb7634 100644 --- a/code/modules/mob/living/silicon/pai/admin.dm +++ b/code/modules/mob/living/silicon/pai/admin.dm @@ -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) diff --git a/code/modules/mob/living/silicon/pai/logout.dm b/code/modules/mob/living/silicon/pai/logout.dm new file mode 100644 index 00000000000..689aa76c9c6 --- /dev/null +++ b/code/modules/mob/living/silicon/pai/logout.dm @@ -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) + ..() diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index 255da19053c..fe69e14c8e0 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -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" diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index f8ab3cd9cf5..55781588b0b 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -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 diff --git a/code/modules/mob/living/silicon/silicon_procs.dm b/code/modules/mob/living/silicon/silicon_procs.dm index 356b2b0fcbc..4615a30c152 100644 --- a/code/modules/mob/living/silicon/silicon_procs.dm +++ b/code/modules/mob/living/silicon/silicon_procs.dm @@ -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" diff --git a/code/modules/modular_computers/computers/modular_computer/ui.dm b/code/modules/modular_computers/computers/modular_computer/ui.dm index 1a4537a754f..00ae66d284d 100644 --- a/code/modules/modular_computers/computers/modular_computer/ui.dm +++ b/code/modules/modular_computers/computers/modular_computer/ui.dm @@ -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() diff --git a/code/modules/modular_computers/file_system/programs/system/ntdownloader.dm b/code/modules/modular_computers/file_system/programs/system/ntdownloader.dm index 58149607fba..976976ccddf 100644 --- a/code/modules/modular_computers/file_system/programs/system/ntdownloader.dm +++ b/code/modules/modular_computers/file_system/programs/system/ntdownloader.dm @@ -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) diff --git a/code/modules/tgui/states/default.dm b/code/modules/tgui/states/default.dm index 67065df225b..45209cb3e6a 100644 --- a/code/modules/tgui/states/default.dm +++ b/code/modules/tgui/states/default.dm @@ -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) diff --git a/html/changelogs/AlaunusLux-pAI-fixes.yml b/html/changelogs/AlaunusLux-pAI-fixes.yml new file mode 100644 index 00000000000..5b9cf96810e --- /dev/null +++ b/html/changelogs/AlaunusLux-pAI-fixes.yml @@ -0,0 +1,45 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +# balance +# admin +# backend +# security +# refactor +################################# + +# Your name. +author: AlaunusLux + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - bugfix: "pAI now have the ghost tab removed, and proper verbs added upon spawning, without having to relog." + - bugfix: "pAI can now access PDA and Computers they are inserted into." + - bugfix: "Programs that would softlock the pAI computer interface are removed from the Programs list." + - bugfix: "pAI UI windows that were open when closing the client are now possible to re-open." + - bugfix: "Adds error message when trying to download incompatible software."