pAIs, Computers and ntIRC (#8757)

#8005 just revived.

Tasks to acomplish while here:

Fix merge conflicts

    Add ntIRC direct messaging

Things I migth consider adding in future PR:

    Porting IRC to VueUI
    Porting File Manager to VueUI.
This commit is contained in:
Karolis
2020-05-08 13:58:34 +03:00
committed by GitHub
parent 691a11cf00
commit 1c00ae02d3
72 changed files with 6149 additions and 4768 deletions

View File

@@ -0,0 +1,59 @@
/datum/computer_file/program/pai_atmos
filename = "pai_atmos"
filedesc = "Atmosphere Sensor"
program_icon_state = "generic"
extended_desc = "This program is for viewing local atmospheric data."
size = 0
usage_flags = PROGRAM_SILICON_PAI
/datum/computer_file/program/pai_atmos/ui_interact(mob/user)
var/datum/vueui/ui = SSvueui.get_open_ui(user, src)
if (!ui)
ui = new /datum/vueui/modularcomputer(user, src, "mcomputer-pai-atmosphere", 400, 200, "pAI Atmosphere Sensor")
ui.open()
/datum/computer_file/program/pai_atmos/vueui_transfer(oldobj)
SSvueui.transfer_uis(oldobj, src, "mcomputer-pai-atmosphere", 400, 200, "pAI Atmosphere Sensor")
return TRUE
// Gaters data for ui
/datum/computer_file/program/pai_atmos/vueui_data_change(var/list/data, var/mob/user, var/datum/vueui/ui)
. = ..()
data = . || data || list()
// Gather data for computer header
var/headerdata = get_header_data(data["_PC"])
if(headerdata)
data["_PC"] = headerdata
. = data
if(!istype(computer, /obj/item/modular_computer/silicon))
return
var/obj/item/modular_computer/silicon/true_computer = computer
if(!istype(true_computer.computer_host, /mob/living/silicon/pai))
return
var/mob/living/silicon/pai/host = true_computer.computer_host
var/turf/T = get_turf_or_move(host.loc)
if(T)
var/datum/gas_mixture/env = T.return_air()
VUEUI_SET_CHECK(data["read"], TRUE, ., data)
VUEUI_SET_CHECK(data["press"], env.return_pressure(), ., data)
VUEUI_SET_CHECK(data["temp"], env.temperature, ., data)
VUEUI_SET_CHECK(data["tempC"], env.temperature-T0C, ., data)
VUEUI_SET_CHECK_IFNOTSET(data["gas"], list("_" = "_"), ., data)
for(var/g in gas_data.gases)
if(!(g in env.gas))
VUEUI_SET_CHECK(data["gas"][g], null, ., data)
else
VUEUI_SET_CHECK(data["gas"][g], env.gas[g], ., data)
else
VUEUI_SET_CHECK(data["read"], FALSE, ., data)
VUEUI_SET_CHECK(data["press"], 0, ., data)
VUEUI_SET_CHECK(data["temp"], T0C, ., data)
VUEUI_SET_CHECK(data["tempC"], 0, ., data)
VUEUI_SET_CHECK_IFNOTSET(data["gas"], list("_" = "_"), ., data)
for(var/g in gas_data.gases)
VUEUI_SET_CHECK(data["gas"][g], null, ., data)

View File

@@ -0,0 +1,79 @@
/datum/computer_file/program/pai_directives
filename = "pai_directives"
filedesc = "pAI Directives"
program_icon_state = "generic"
extended_desc = "This program is for viewing currently assigned directives."
size = 0
usage_flags = PROGRAM_SILICON_PAI
/datum/computer_file/program/pai_directives/ui_interact(mob/user)
var/datum/vueui/ui = SSvueui.get_open_ui(user, src)
if (!ui)
ui = new /datum/vueui/modularcomputer(user, src, "mcomputer-pai-directives", 450, 500, "pAI directives")
ui.open()
/datum/computer_file/program/pai_directives/vueui_transfer(oldobj)
SSvueui.transfer_uis(oldobj, src, "mcomputer-pai-directives", 450, 500, "pAI directives")
return TRUE
// Gaters data for ui
/datum/computer_file/program/pai_directives/vueui_data_change(var/list/data, var/mob/user, var/datum/vueui/ui)
. = ..()
data = . || data || list()
// Gather data for computer header
var/headerdata = get_header_data(data["_PC"])
if(headerdata)
data["_PC"] = headerdata
. = data
if(!istype(computer, /obj/item/modular_computer/silicon))
return
var/obj/item/modular_computer/silicon/true_computer = computer
if(!istype(true_computer.computer_host, /mob/living/silicon/pai))
return
var/mob/living/silicon/pai/host = true_computer.computer_host
VUEUI_SET_CHECK(data["master"], host.master, ., data)
VUEUI_SET_CHECK(data["dna"], host.master_dna, ., data)
VUEUI_SET_CHECK(data["prime"], host.pai_law0, ., data)
VUEUI_SET_CHECK(data["supplemental"], host.pai_laws, ., data)
/datum/computer_file/program/pai_directives/Topic(href, href_list)
. = ..()
if(!istype(computer, /obj/item/modular_computer/silicon))
return
var/obj/item/modular_computer/silicon/true_computer = computer
if(!istype(true_computer.computer_host, /mob/living/silicon/pai))
return
var/mob/living/silicon/pai/host = true_computer.computer_host
if(href_list["getdna"])
var/mob/living/M = host.loc
var/count = 0
// Find the carrier
while(!istype(M, /mob/living))
if(!M || !M.loc || count > 6)
//For a runtime where M ends up in nullspace (similar to bluespace but less colourful)
to_chat(src, SPAN_WARNING("You are not being carried by anyone!"))
return 0
M = M.loc
count++
// Check the carrier
var/answer = input(M, "[host] is requesting a DNA sample from you. Will you allow it to confirm your identity?", "[host] Check DNA", "No") in list("Yes", "No")
if(answer == "Yes")
var/turf/T = get_turf_or_move(host.loc)
for (var/mob/v in viewers(T))
v.show_message(SPAN_NOTICE("[M] presses \his thumb against [host]."), 3, SPAN_NOTICE("[host] makes a sharp clicking sound as it extracts DNA material from [M]."), 2)
var/datum/dna/dna = M.dna
to_chat(host, "<font color = red><h3>[M]'s UE string : [dna.unique_enzymes]</h3></font>")
if(dna.unique_enzymes == host.master_dna)
to_chat(host, SPAN_NOTICE("<b>Provided DNA is a match to stored Master DNA.</b>"))
else
to_chat(host, SPAN_WARNING("<b>Provided DNA does not match stored Master DNA.</b>"))
else
to_chat(host, SPAN_WARNING("[M] does not seem like \he [gender_datums[M.gender].is] going to provide a DNA sample willingly."))
return 1

View File

@@ -0,0 +1,106 @@
/datum/computer_file/program/pai_doorjack
filename = "doorjack"
filedesc = "Door Jack"
program_icon_state = "generic"
extended_desc = "This program is used to access standard-issue pAI door jack systems."
size = 12
available_on_ntnet = 1
usage_flags = PROGRAM_SILICON_PAI
/datum/computer_file/program/pai_doorjack/ui_interact(mob/user)
var/datum/vueui/ui = SSvueui.get_open_ui(user, src)
if (!ui)
ui = new /datum/vueui/modularcomputer(user, src, "mcomputer-pai-doorjack", 400, 150, "Door Jack")
ui.auto_update_content = TRUE
ui.open()
/datum/computer_file/program/pai_doorjack/vueui_transfer(oldobj)
var/uis = SSvueui.transfer_uis(oldobj, src, "mcomputer-pai-doorjack", 400, 150, "Door Jack")
for(var/i in uis)
var/datum/vueui/ui = i
ui.auto_update_content = TRUE
return TRUE
/datum/computer_file/program/pai_doorjack/vueui_on_transfer(datum/vueui/ui)
. = ..()
ui.auto_update_content = FALSE
// Gaters data for ui
/datum/computer_file/program/pai_doorjack/vueui_data_change(var/list/data, var/mob/user, var/datum/vueui/ui)
. = ..()
data = . || data || list()
// Gather data for computer header
var/headerdata = get_header_data(data["_PC"])
if(headerdata)
data["_PC"] = headerdata
. = data
if(!istype(computer, /obj/item/modular_computer/silicon))
return
var/obj/item/modular_computer/silicon/true_computer = computer
if(!istype(true_computer.computer_host, /mob/living/silicon/pai))
return
var/mob/living/silicon/pai/host = true_computer.computer_host
VUEUI_SET_CHECK(data["extended"], !!host.cable, ., data)
VUEUI_SET_CHECK(data["connected"], !!host.cable?.machine , ., data)
VUEUI_SET_CHECK(data["ishacking"], !!host.hackdoor, ., data)
VUEUI_SET_CHECK(data["progress"], host.hackprogress, ., data)
VUEUI_SET_CHECK(data["aborted"], host.hack_aborted, ., data)
/datum/computer_file/program/pai_doorjack/Topic(href, href_list)
. = ..()
if(!istype(computer, /obj/item/modular_computer/silicon))
return
var/obj/item/modular_computer/silicon/true_computer = computer
if(!istype(true_computer.computer_host, /mob/living/silicon/pai))
return
var/mob/living/silicon/pai/host = true_computer.computer_host
if(href_list["hack"])
if(host.cable && host.cable.machine)
host.hackdoor = host.cable.machine
host.hackloop()
return 1
if(href_list["cancel"])
host.hackdoor = null
return 1
if(href_list["extend"])
var/turf/T = get_turf_or_move(host.loc)
host.hack_aborted = 0
host.cable = new /obj/item/pai_cable(T)
T.visible_message(SPAN_WARNING("A port on [host] opens to reveal [host.cable], which promptly falls to the floor."),
SPAN_WARNING("You hear the soft click of something light and hard falling to the ground."))
return 1
/mob/living/silicon/pai/proc/hackloop()
var/turf/T = get_turf_or_move(src.loc)
for(var/mob/living/silicon/ai/AI in player_list)
if(T.loc)
to_chat(AI, "<font color = red><b>Network Alert: Brute-force encryption crack in progress in [T.loc].</b></font>")
else
to_chat(AI, "<font color = red><b>Network Alert: Brute-force encryption crack in progress. Unable to pinpoint location.</b></font>")
var/obj/machinery/door/airlock/D = cable.machine
if(!istype(D))
hack_aborted = 1
hackprogress = 0
cable.machine = null
hackdoor = null
return
while(hackprogress < 1000)
if(cable && cable.machine == D && cable.machine == hackdoor && get_dist(src, hackdoor) <= 1)
hackprogress = min(hackprogress+rand(1, 20), 1000)
else
hack_aborted = 1
hackprogress = 0
hackdoor = null
return
if(hackprogress >= 1000)
hackprogress = 0
D.unlock() //unbolts door as long as bolt wires aren't cut
D.open()
cable.machine = null
return
sleep(10) // Update every second

View File

@@ -0,0 +1,57 @@
/datum/computer_file/program/pai_sechud
filename = "sechud"
filedesc = "pAI Security HUD"
extended_desc = "This service enables the integrated security HUD."
size = 10
program_type = PROGRAM_SERVICE
available_on_ntnet = 1
usage_flags = PROGRAM_SILICON_PAI
/datum/computer_file/program/pai_sechud/service_activate()
. = ..()
if(!istype(computer, /obj/item/modular_computer/silicon))
return
var/obj/item/modular_computer/silicon/true_computer = computer
if(!istype(true_computer.computer_host, /mob/living/silicon/pai))
return
var/mob/living/silicon/pai/host = true_computer.computer_host
host.secHUD = TRUE
/datum/computer_file/program/pai_sechud/service_deactivate()
. = ..()
if(!istype(computer, /obj/item/modular_computer/silicon))
return
var/obj/item/modular_computer/silicon/true_computer = computer
if(!istype(true_computer.computer_host, /mob/living/silicon/pai))
return
var/mob/living/silicon/pai/host = true_computer.computer_host
host.secHUD = FALSE
/datum/computer_file/program/pai_medhud
filename = "medhud"
filedesc = "pAI Medical HUD"
extended_desc = "This service enables the integrated medical HUD."
size = 10
program_type = PROGRAM_SERVICE
available_on_ntnet = 1
usage_flags = PROGRAM_SILICON_PAI
/datum/computer_file/program/pai_medhud/service_activate()
. = ..()
if(!istype(computer, /obj/item/modular_computer/silicon))
return
var/obj/item/modular_computer/silicon/true_computer = computer
if(!istype(true_computer.computer_host, /mob/living/silicon/pai))
return
var/mob/living/silicon/pai/host = true_computer.computer_host
host.medHUD = TRUE
/datum/computer_file/program/pai_medhud/service_deactivate()
. = ..()
if(!istype(computer, /obj/item/modular_computer/silicon))
return
var/obj/item/modular_computer/silicon/true_computer = computer
if(!istype(true_computer.computer_host, /mob/living/silicon/pai))
return
var/mob/living/silicon/pai/host = true_computer.computer_host
host.medHUD = FALSE

View File

@@ -0,0 +1,56 @@
/datum/computer_file/program/pai_radio
filename = "pai_radio"
filedesc = "Radio Configuration"
program_icon_state = "generic"
extended_desc = "This program is used to configure the integrated pAI radio."
size = 0
usage_flags = PROGRAM_SILICON_PAI
/datum/computer_file/program/pai_radio/ui_interact(mob/user)
var/datum/vueui/ui = SSvueui.get_open_ui(user, src)
if (!ui)
ui = new /datum/vueui/modularcomputer(user, src, "mcomputer-pai-radio", 400, 150, "pAI Radio Configuration")
ui.open()
/datum/computer_file/program/pai_radio/vueui_transfer(oldobj)
SSvueui.transfer_uis(oldobj, src, "mcomputer-pai-radio", 400, 150, "pAI Radio Configuration")
return TRUE
// Gaters data for ui
/datum/computer_file/program/pai_radio/vueui_data_change(var/list/data, var/mob/user, var/datum/vueui/ui)
. = ..()
data = . || data || list()
// Gather data for computer header
var/headerdata = get_header_data(data["_PC"])
if(headerdata)
data["_PC"] = headerdata
. = data
if(!istype(computer, /obj/item/modular_computer/silicon))
return
var/obj/item/modular_computer/silicon/true_computer = computer
if(!istype(true_computer.computer_host, /mob/living/silicon/pai))
return
var/mob/living/silicon/pai/host = true_computer.computer_host
VUEUI_SET_CHECK(data["listening"], host.radio.broadcasting, ., data)
VUEUI_SET_CHECK(data["frequency"], format_frequency(host.radio.frequency), ., data)
LAZYINITLIST(data["channels"])
for(var/ch_name in host.radio.channels)
var/ch_stat = host.radio.channels[ch_name]
VUEUI_SET_CHECK(data["channels"][ch_name], !!(ch_stat & host.radio.FREQ_LISTENING), ., data)
/datum/computer_file/program/pai_radio/Topic(href, href_list)
. = ..()
if(!istype(computer, /obj/item/modular_computer/silicon))
return
var/obj/item/modular_computer/silicon/true_computer = computer
if(!istype(true_computer.computer_host, /mob/living/silicon/pai))
return
var/mob/living/silicon/pai/host = true_computer.computer_host
host.radio.Topic(href, href_list)
SSvueui.check_uis_for_change(src)

View File

@@ -0,0 +1,69 @@
/datum/computer_file/program/pai_signaler
filename = "signaler"
filedesc = "Remote Signaller"
program_icon_state = "generic"
extended_desc = "This program can be used to send wide-range signals of various frequencies."
size = 3
available_on_ntnet = 1
usage_flags = PROGRAM_SILICON_PAI
/datum/computer_file/program/pai_signaler/ui_interact(mob/user)
var/datum/vueui/ui = SSvueui.get_open_ui(user, src)
if (!ui)
ui = new /datum/vueui/modularcomputer(user, src, "mcomputer-pai-signaler", 400, 150, "pAI Signaller")
ui.open()
/datum/computer_file/program/pai_signaler/vueui_transfer(oldobj)
SSvueui.transfer_uis(oldobj, src, "mcomputer-pai-signaler", 400, 150, "pAI Signaller")
return TRUE
// Gaters data for ui
/datum/computer_file/program/pai_signaler/vueui_data_change(var/list/data, var/mob/user, var/datum/vueui/ui)
. = ..()
data = . || data || list()
// Gather data for computer header
var/headerdata = get_header_data(data["_PC"])
if(headerdata)
data["_PC"] = headerdata
. = data
if(!istype(computer, /obj/item/modular_computer/silicon))
return
var/obj/item/modular_computer/silicon/true_computer = computer
if(!istype(true_computer.computer_host, /mob/living/silicon/pai))
return
var/mob/living/silicon/pai/host = true_computer.computer_host
VUEUI_SET_CHECK(data["code"], host.sradio.code, ., data)
VUEUI_SET_CHECK(data["frequency"], format_frequency(host.sradio.frequency), ., data)
/datum/computer_file/program/pai_signaler/Topic(href, href_list)
. = ..()
if(!istype(computer, /obj/item/modular_computer/silicon))
return
var/obj/item/modular_computer/silicon/true_computer = computer
if(!istype(true_computer.computer_host, /mob/living/silicon/pai))
return
var/mob/living/silicon/pai/host = true_computer.computer_host
if(href_list["send"])
host.sradio.send_signal("ACTIVATE")
for(var/mob/O in hearers(1, host.loc))
O.show_message(text("\icon[] *beep* *beep*", host), 3, "*beep* *beep*", 2)
return 1
else if(href_list["freq"])
var/new_frequency = (host.sradio.frequency + href_list["freq"])
if(new_frequency < PUBLIC_LOW_FREQ || new_frequency > PUBLIC_HIGH_FREQ)
new_frequency = sanitize_frequency(new_frequency)
host.sradio.set_frequency(new_frequency)
return 1
else if(href_list["code"])
host.sradio.code += href_list["code"]
host.sradio.code = round(host.sradio.code)
host.sradio.code = min(100, host.sradio.code)
host.sradio.code = max(1, host.sradio.code)
return 1

View File

@@ -0,0 +1,40 @@
/datum/computer_file/program/pai_translator
filename = "translator"
filedesc = "pAI Universal Translator"
extended_desc = "This service enables the integrated universal translation systems."
size = 12
program_type = PROGRAM_SERVICE
available_on_ntnet = 1
usage_flags = PROGRAM_SILICON_PAI
/datum/computer_file/program/pai_translator/service_activate()
. = ..()
if(!istype(computer, /obj/item/modular_computer/silicon))
return
var/obj/item/modular_computer/silicon/true_computer = computer
if(!istype(true_computer.computer_host, /mob/living/silicon/pai))
return
var/mob/living/silicon/pai/host = true_computer.computer_host
if(!host.translator_on)
host.add_language(LANGUAGE_UNATHI)
host.add_language(LANGUAGE_SIIK_MAAS)
host.add_language(LANGUAGE_SKRELLIAN)
host.add_language(LANGUAGE_ROOTSONG)
host.translator_on = TRUE
/datum/computer_file/program/pai_translator/service_deactivate()
. = ..()
if(!istype(computer, /obj/item/modular_computer/silicon))
return
var/obj/item/modular_computer/silicon/true_computer = computer
if(!istype(true_computer.computer_host, /mob/living/silicon/pai))
return
var/mob/living/silicon/pai/host = true_computer.computer_host
if(host.translator_on)
host.remove_language(LANGUAGE_UNATHI)
host.remove_language(LANGUAGE_SIIK_MAAS)
host.remove_language(LANGUAGE_SKRELLIAN)
host.remove_language(LANGUAGE_ROOTSONG)
host.translator_on = FALSE