pAI Computer Piloting (#8842)

pAI can now be put into modular computers to control them. When a pAI is inserted, a new service will be unlocked, which can disable their access to the computer.

The VueUI change wasn't tested, but finding and replacing should leave the functionality unchanged.
This commit is contained in:
Geeves
2020-06-05 21:28:52 +03:00
committed by GitHub
parent d880e89342
commit e7194e7893
15 changed files with 131 additions and 18 deletions
@@ -126,6 +126,10 @@
else // Should never happen - So fail silently
return FALSE
// Override to set when a program shouldn't appear in the program list
/datum/computer_file/program/proc/program_hidden()
return FALSE
// Check if the user can run program. Only humans can operate computer. Automatically called in run_program()
// User has to wear their ID or have it inhand for ID Scan to work.
// Can also be called manually, with optional parameter being access_to_check to scan the user's ID
@@ -0,0 +1,27 @@
/datum/computer_file/program/pai_access_lock
filename = "pai_access_lock"
filedesc = "pAI Access Lock"
extended_desc = "This service toggles whether a pAI can interface with this device."
size = 0
program_type = PROGRAM_SERVICE
available_on_ntnet = FALSE
unsendable = TRUE
undeletable = TRUE
usage_flags = PROGRAM_ALL
/datum/computer_file/program/pai_access_lock/service_activate()
. = ..()
if(computer.personal_ai)
to_chat(computer.personal_ai.pai, SPAN_WARNING("pAI Access Lock systems engaged."))
computer.pAI_lock = TRUE
/datum/computer_file/program/pai_access_lock/service_deactivate()
. = ..()
if(computer.personal_ai)
to_chat(computer.personal_ai.pai, SPAN_NOTICE("pAI Access Lock systems disabled."))
computer.pAI_lock = FALSE
/datum/computer_file/program/pai_access_lock/program_hidden()
if(!computer.personal_ai)
return TRUE
return FALSE
@@ -50,28 +50,28 @@
VUEUI_SET_CHECK(data["installed"][I.filename]["name"], I.filedesc, ., data)
VUEUI_SET_CHECK(data["installed"][I.filename]["size"], I.size, ., data)
// Now lets send all avaivable programs with there status.
// Now lets send all available programs with their status.
// Statuses (rest): 0 - ALL OK, 1 - can't download due to access, 2 - unsuported hardware, 3 - sindies only
LAZYINITLIST(data["avaivable"])
LAZYINITLIST(data["available"])
for(var/datum/computer_file/program/P in ntnet_global.available_software)
LAZYINITLIST(data["avaivable"][P.filename])
VUEUI_SET_CHECK(data["avaivable"][P.filename]["name"], P.filedesc, ., data)
VUEUI_SET_CHECK(data["avaivable"][P.filename]["desc"], P.extended_desc, ., data)
VUEUI_SET_CHECK(data["avaivable"][P.filename]["size"], P.size, ., data)
LAZYINITLIST(data["available"][P.filename])
VUEUI_SET_CHECK(data["available"][P.filename]["name"], P.filedesc, ., data)
VUEUI_SET_CHECK(data["available"][P.filename]["desc"], P.extended_desc, ., data)
VUEUI_SET_CHECK(data["available"][P.filename]["size"], P.size, ., data)
if(computer_emagged)
if(!P.is_supported_by_hardware(computer.hardware_flag))
VUEUI_SET_CHECK(data["avaivable"][P.filename]["rest"], 2, ., data)
VUEUI_SET_CHECK(data["available"][P.filename]["rest"], 2, ., data)
else
VUEUI_SET_CHECK(data["avaivable"][P.filename]["rest"], 0, ., data)
VUEUI_SET_CHECK(data["available"][P.filename]["rest"], 0, ., data)
else
if(!P.available_on_ntnet)
VUEUI_SET_CHECK(data["avaivable"][P.filename]["rest"], 3, ., data)
VUEUI_SET_CHECK(data["available"][P.filename]["rest"], 3, ., data)
else if(!P.can_download(user) && P.requires_access_to_download)
VUEUI_SET_CHECK(data["avaivable"][P.filename]["rest"], 1, ., data)
VUEUI_SET_CHECK(data["available"][P.filename]["rest"], 1, ., data)
else if(!P.is_supported_by_hardware(computer.hardware_flag))
VUEUI_SET_CHECK(data["avaivable"][P.filename]["rest"], 2, ., data)
VUEUI_SET_CHECK(data["available"][P.filename]["rest"], 2, ., data)
else
VUEUI_SET_CHECK(data["avaivable"][P.filename]["rest"], 0, ., data)
VUEUI_SET_CHECK(data["available"][P.filename]["rest"], 0, ., data)
VUEUI_SET_CHECK(data["disk_size"], hard_drive.max_capacity, ., data)
VUEUI_SET_CHECK(data["disk_used"], hard_drive.used_capacity, ., data)