mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-01-03 05:51:56 +00:00
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:
@@ -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)
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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)
|
||||
@@ -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
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user