Various Tweaks to modular computers (#1320)

Added different run and download access levels
Added the possibility to check for one access, one in a list, all in a list
Tweaked the access levels required to download software.
Generally speaking, only departmental heads can now download departmental software
Locked down the software of the preset consoles. (No downloading games on them)
Fixed being unable to eject portable storage devices
Locked down work consoles dont accept portable storage devices
Added a software backup crate to secure storage
This commit is contained in:
Werner
2016-12-31 12:44:13 +01:00
committed by skull132
parent 14a0c7bf92
commit 386699bf53
26 changed files with 283 additions and 89 deletions
@@ -14,6 +14,7 @@
var/last_world_time = "00:00"
var/list/last_header_icons
var/computer_emagged = 0 // Whether the computer is emagged.
var/software_locked = 0 // Weather the software on the computer is locked TODO-IT: Look over when implementing IT properly
var/base_active_power_usage = 50 // Power usage when the computer is open (screen is active) and can be interacted with. Remember hardware can use power too.
var/base_idle_power_usage = 5 // Power usage when the computer is idle and screen is off (currently only applies to laptops)
@@ -82,7 +83,7 @@
proc_eject_usb(usr)
/obj/item/modular_computer/verb/eject_ai()
set name = "Eject Portable Storage"
set name = "Eject AI Storage"
set category = "Object"
set src in view(1)
@@ -96,6 +97,22 @@
proc_eject_ai(usr)
// Reset Computer
/obj/item/modular_computer/verb/reset_computer()
set name = "Reset Computer"
set category = "Object"
set src in view(1)
if(usr.incapacitated() || !istype(usr, /mob/living))
usr << "<span class='warning'>You can't do that.</span>"
return
if(!Adjacent(usr))
usr << "<span class='warning'>You can't reach it.</span>"
return
proc_reset_computer()
/obj/item/modular_computer/proc/proc_eject_id(mob/user)
if(!user)
user = usr
@@ -144,6 +161,10 @@
ai_slot.update_power_usage()
update_uis()
/obj/item/modular_computer/proc/proc_reset_computer(mob/user)
kill_program(1)
//shutdown_computer(1) // Killing the current program should be enough
/obj/item/modular_computer/attack_ghost(var/mob/dead/observer/user)
if(enabled)
ui_interact(user)
@@ -611,6 +632,9 @@
/obj/item/modular_computer/proc/try_install_component(var/mob/living/user, var/obj/item/weapon/computer_hardware/H, var/found = 0)
// "USB" flash drive.
if(istype(H, /obj/item/weapon/computer_hardware/hard_drive/portable))
if(software_locked)
user << "This computer is locked down by the Central Command IT IQ department. You can not connect \the [H]."
return
if(portable_drive)
user << "This computer's portable drive slot is already occupied by \the [portable_drive]."
return
@@ -4,6 +4,7 @@
var/_has_printer = 0
var/_has_battery = 0
var/_has_aislot = 0
var/_software_locked = 0
/obj/machinery/modular_computer/console/preset/New()
. = ..()
@@ -18,30 +19,48 @@
cpu.battery_module = new/obj/item/weapon/computer_hardware/battery_module/super(cpu)
if(_has_aislot)
cpu.ai_slot = new/obj/item/weapon/computer_hardware/ai_slot(cpu)
if(_software_locked)
cpu.software_locked = 1
install_programs()
// Override in child types to install preset-specific programs.
/obj/machinery/modular_computer/console/preset/proc/install_programs()
return
// ===== ADMIN CONSOLE =====
/obj/machinery/modular_computer/console/preset/admin
console_department = "CC ITIQ"
desc = "A computer from the CC ITIQ Department. Only available on the odin"
/obj/machinery/modular_computer/console/preset/admin/install_programs()
for(var/F in typesof(/datum/computer_file/program))
var/datum/computer_file/program/prog = new F
cpu.hard_drive.store_file(prog)
cpu.battery_module = new/obj/item/weapon/computer_hardware/battery_module/lambda(cpu)
// ===== ENGINEERING CONSOLE =====
/obj/machinery/modular_computer/console/preset/engineering
console_department = "Engineering"
desc = "A stationary computer. This one comes preloaded with engineering programs."
_software_locked = 1
/obj/machinery/modular_computer/console/preset/engineering/install_programs()
cpu.hard_drive.store_file(new/datum/computer_file/program/power_monitor())
cpu.hard_drive.store_file(new/datum/computer_file/program/alarm_monitor())
cpu.hard_drive.store_file(new/datum/computer_file/program/atmos_control())
cpu.hard_drive.store_file(new/datum/computer_file/program/rcon_console())
cpu.hard_drive.store_file(new/datum/computer_file/program/chatclient())
// ===== MEDICAL CONSOLE =====
/obj/machinery/modular_computer/console/preset/medical
console_department = "Medbay"
desc = "A stationary computer. This one comes preloaded with medical programs."
_software_locked = 1
/obj/machinery/modular_computer/console/preset/medical/install_programs()
cpu.hard_drive.store_file(new/datum/computer_file/program/chatclient())
cpu.hard_drive.store_file(new/datum/computer_file/program/suit_sensors())
@@ -50,10 +69,10 @@
console_department = "Research"
desc = "A stationary computer. This one comes preloaded with research programs."
_has_aislot = 1
_software_locked = 1
/obj/machinery/modular_computer/console/preset/research/install_programs()
cpu.hard_drive.store_file(new/datum/computer_file/program/ntnetmonitor())
cpu.hard_drive.store_file(new/datum/computer_file/program/nttransfer())
cpu.hard_drive.store_file(new/datum/computer_file/program/chatclient())
cpu.hard_drive.store_file(new/datum/computer_file/program/aidiag())
@@ -64,6 +83,7 @@
desc = "A stationary computer. This one comes preloaded with command programs."
_has_id_slot = 1
_has_printer = 1
_software_locked = 1
/obj/machinery/modular_computer/console/preset/command/install_programs()
cpu.hard_drive.store_file(new/datum/computer_file/program/chatclient())
@@ -78,8 +98,10 @@
/obj/machinery/modular_computer/console/preset/security
console_department = "Security"
desc = "A stationary computer. This one comes preloaded with security programs."
_software_locked = 1
/obj/machinery/modular_computer/console/preset/security/install_programs()
cpu.hard_drive.store_file(new/datum/computer_file/program/chatclient())
cpu.hard_drive.store_file(new/datum/computer_file/program/camera_monitor())
// ===== CIVILIAN CONSOLE =====
@@ -83,6 +83,15 @@ var/list/global_modular_computers = list()
if(cpu)
cpu.eject_ai()
// Reset Computer
/obj/machinery/modular_computer/verb/reset_computer()
set name = "Reset Computer"
set category = "Object"
set src in view(1)
if(cpu)
cpu.proc_reset_computer()
/obj/machinery/modular_computer/New()
..()
cpu = new(src)