/obj/machinery/computer/telecomms/server name = "telecommunications server monitoring console" icon_screen = "comm_logs" desc = "Has full access to all details and record of the telecommunications network it's monitoring." var/screen = 0 // the screen number: var/list/servers = list() // the servers located by the computer var/obj/machinery/telecomms/server/SelectedServer var/network = "NULL" // the network to probe var/temp = "" // temporary feedback messages var/universal_translate = 0 // set to 1 if it can translate nonhuman speech req_access = list(ACCESS_TCOMSAT) circuit = /obj/item/circuitboard/computer/comm_server /obj/machinery/computer/telecomms/server/attack_hand(mob/user) if(..()) return user.set_machine(src) var/dat = "Telecommunication Server Monitor
Telecommunications Server Monitor
" switch(screen) // --- Main Menu --- if(0) dat += "
[temp]
" dat += "
Current Network: [network]
" if(servers.len) dat += "
Detected Telecommunication Servers:" dat += "
\[Flush Buffer\]" else dat += "
No servers detected. Scan for servers: \[Scan\]" // --- Viewing Server --- if(1) dat += "
[temp]
" dat += "
\[Main Menu\] \[Refresh\]
" dat += "
Current Network: [network]" dat += "
Selected Server: [SelectedServer.id]" if(SelectedServer.totaltraffic >= 1024) dat += "
Total recorded traffic: [round(SelectedServer.totaltraffic / 1024)] Terrabytes

" else dat += "
Total recorded traffic: [SelectedServer.totaltraffic] Gigabytes

" dat += "Stored Logs:
    " var/i = 0 for(var/datum/comm_log_entry/C in SelectedServer.log_entries) i++ // If the log is a speech file if(C.input_type == "Speech File") dat += "
  1. [C.name] \[X\]
    " // -- Determine race of orator -- var/race // The actual race of the mob var/language = "Human" // MMIs, pAIs, Cyborgs and humans all speak Human var/mobtype = C.parameters["mobtype"] var/list/humans = typesof(/mob/living/carbon/human, /mob/living/brain) var/list/monkeys = typesof(/mob/living/carbon/monkey) var/list/silicons = typesof(/mob/living/silicon) var/list/slimes = typesof(/mob/living/simple_animal/slime) var/list/animals = typesof(/mob/living/simple_animal) if(mobtype in humans) race = "Humanoid" language = race else if(mobtype in slimes) // NT knows a lot about slimes, but not aliens. Can identify slimes race = "Slime" language = race else if(mobtype in monkeys) race = "Monkey" language = race else if(mobtype in silicons || C.parameters["job"] == "AI") // sometimes M gets deleted prematurely for AIs... just check the job race = "Artificial Life" language = "Humanoid" //Ais and borgs speak human, and binary isnt picked up. else if(isobj(mobtype)) race = "Machinery" language = race else if(mobtype in animals) race = "Domestic Animal" language = race else race = "Unidentifiable" language = race // -- If the orator is a human, or universal translate is active, OR mob has universal speech on -- if(language == "Humanoid" || universal_translate || C.parameters["uspeech"]) dat += "Data type: [C.input_type]
    " dat += "Source: [C.parameters["name"]] (Job: [C.parameters["job"]])
    " dat += "Class: [race]
    " dat += "Contents: \"[C.parameters["message"]]\"
    " // -- Orator is not human and universal translate not active -- else dat += "Data type: Audio File
    " dat += "Source: Unidentifiable
    " dat += "Class: [race]
    " dat += "Contents: Unintelligble
    " dat += "

  2. " else if(C.input_type == "Execution Error") dat += "
  3. [C.name] \[X\]
    " dat += "Output: \"[C.parameters["message"]]\"
    " dat += "

  4. " dat += "
" user << browse(dat, "window=comm_monitor;size=575x400") onclose(user, "server_control") temp = "" return /obj/machinery/computer/telecomms/server/Topic(href, href_list) if(..()) return add_fingerprint(usr) usr.set_machine(src) if(href_list["viewserver"]) screen = 1 for(var/obj/machinery/telecomms/T in servers) if(T.id == href_list["viewserver"]) SelectedServer = T break if(href_list["operation"]) switch(href_list["operation"]) if("release") servers = list() screen = 0 if("mainmenu") screen = 0 if("scan") if(servers.len > 0) temp = "- FAILED: CANNOT PROBE WHEN BUFFER FULL -" else for(var/obj/machinery/telecomms/server/T in urange(25, src)) if(T.network == network) servers.Add(T) if(!servers.len) temp = "- FAILED: UNABLE TO LOCATE SERVERS IN \[[network]\] -" else temp = "- [servers.len] SERVERS PROBED & BUFFERED -" screen = 0 if(href_list["delete"]) if(!src.allowed(usr) && !(obj_flags & EMAGGED)) to_chat(usr, "ACCESS DENIED.") return if(SelectedServer) var/datum/comm_log_entry/D = SelectedServer.log_entries[text2num(href_list["delete"])] temp = "- DELETED ENTRY: [D.name] -" SelectedServer.log_entries.Remove(D) qdel(D) else temp = "- FAILED: NO SELECTED MACHINE -" if(href_list["network"]) var/newnet = stripped_input(usr, "Which network do you want to view?", "Comm Monitor", network) if(newnet && ((usr in range(1, src)) || issilicon(usr))) if(length(newnet) > 15) temp = "- FAILED: NETWORK TAG STRING TOO LENGHTLY -" else network = newnet screen = 0 servers = list() temp = "- NEW NETWORK TAG SET IN ADDRESS \[[network]\] -" updateUsrDialog() return /obj/machinery/computer/telecomms/server/attackby() . = ..() updateUsrDialog()