mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-10 10:12:45 +00:00
167 lines
6.0 KiB
Plaintext
167 lines
6.0 KiB
Plaintext
/obj/item/weapon/computer_hardware/hard_drive/
|
|
name = "basic hard drive"
|
|
desc = "A small power efficient solid state drive, with 128GQ of storage capacity for use in basic computers where power efficiency is desired."
|
|
power_usage = 25 // SSD or something with low power usage
|
|
icon_state = "hdd_normal"
|
|
hardware_size = 1
|
|
origin_tech = list(TECH_DATA = 1, TECH_ENGINEERING = 1)
|
|
var/max_capacity = 128
|
|
var/used_capacity = 0
|
|
var/list/stored_files = list() // List of stored files on this drive. DO NOT MODIFY DIRECTLY!
|
|
|
|
/obj/item/weapon/computer_hardware/hard_drive/advanced
|
|
name = "advanced hard drive"
|
|
desc = "A small hybrid hard drive with 256GQ of storage capacity for use in higher grade computers where balance between power efficiency and capacity is desired."
|
|
max_capacity = 256
|
|
origin_tech = list(TECH_DATA = 2, TECH_ENGINEERING = 2)
|
|
power_usage = 50 // Hybrid, medium capacity and medium power storage
|
|
icon_state = "hdd_advanced"
|
|
hardware_size = 2
|
|
|
|
/obj/item/weapon/computer_hardware/hard_drive/super
|
|
name = "super hard drive"
|
|
desc = "A small hard drive with 512GQ of storage capacity for use in cluster storage solutions where capacity is more important than power efficiency."
|
|
max_capacity = 512
|
|
origin_tech = list(TECH_DATA = 3, TECH_ENGINEERING = 3)
|
|
power_usage = 100 // High-capacity but uses lots of power, shortening battery life. Best used with APC link.
|
|
icon_state = "hdd_super"
|
|
hardware_size = 2
|
|
|
|
/obj/item/weapon/computer_hardware/hard_drive/cluster
|
|
name = "cluster hard drive"
|
|
desc = "A large storage cluster consisting of multiple hard drives for usage in high capacity storage systems. Has capacity of 2048 GQ."
|
|
power_usage = 500
|
|
origin_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 4)
|
|
max_capacity = 2048
|
|
icon_state = "hdd_cluster"
|
|
hardware_size = 3
|
|
|
|
// For tablets, etc. - highly power efficient.
|
|
/obj/item/weapon/computer_hardware/hard_drive/small
|
|
name = "small hard drive"
|
|
desc = "A small highly efficient solid state drive for portable devices."
|
|
power_usage = 10
|
|
origin_tech = list(TECH_DATA = 2, TECH_ENGINEERING = 2)
|
|
max_capacity = 64
|
|
icon_state = "hdd_small"
|
|
hardware_size = 1
|
|
|
|
/obj/item/weapon/computer_hardware/hard_drive/micro
|
|
name = "micro hard drive"
|
|
desc = "A small micro hard drive for portable devices."
|
|
power_usage = 2
|
|
origin_tech = list(TECH_DATA = 1, TECH_ENGINEERING = 1)
|
|
max_capacity = 32
|
|
icon_state = "hdd_micro"
|
|
hardware_size = 1
|
|
|
|
/obj/item/weapon/computer_hardware/hard_drive/diagnostics(var/mob/user)
|
|
..()
|
|
// 999 is a byond limit that is in place. It's unlikely someone will reach that many files anyway, since you would sooner run out of space.
|
|
to_chat(user, "NT-NFS File Table Status: [stored_files.len]/999")
|
|
to_chat(user, "Storage capacity: [used_capacity]/[max_capacity]GQ")
|
|
|
|
// Use this proc to add file to the drive. Returns 1 on success and 0 on failure. Contains necessary sanity checks.
|
|
/obj/item/weapon/computer_hardware/hard_drive/proc/store_file(var/datum/computer_file/F)
|
|
if(!F || !istype(F))
|
|
return 0
|
|
|
|
if(!can_store_file(F.size))
|
|
return 0
|
|
|
|
if(!check_functionality())
|
|
return 0
|
|
|
|
if(!stored_files)
|
|
return 0
|
|
|
|
// This file is already stored. Don't store it again.
|
|
if(F in stored_files)
|
|
return 0
|
|
|
|
F.holder = src
|
|
stored_files.Add(F)
|
|
recalculate_size()
|
|
return 1
|
|
|
|
// Use this proc to add file to the drive. Returns 1 on success and 0 on failure. Contains necessary sanity checks.
|
|
/obj/item/weapon/computer_hardware/hard_drive/proc/install_default_programs()
|
|
store_file(new/datum/computer_file/program/computerconfig(src)) // Computer configuration utility, allows hardware control and displays more info than status bar
|
|
store_file(new/datum/computer_file/program/ntnetdownload(src)) // NTNet Downloader Utility, allows users to download more software from NTNet repository
|
|
store_file(new/datum/computer_file/program/filemanager(src)) // File manager, allows text editor functions and basic file manipulation.
|
|
|
|
|
|
// Use this proc to remove file from the drive. Returns 1 on success and 0 on failure. Contains necessary sanity checks.
|
|
/obj/item/weapon/computer_hardware/hard_drive/proc/remove_file(var/datum/computer_file/F)
|
|
if(!F || !istype(F))
|
|
return 0
|
|
|
|
if(!stored_files)
|
|
return 0
|
|
|
|
if(!check_functionality())
|
|
return 0
|
|
|
|
if(F in stored_files)
|
|
stored_files -= F
|
|
recalculate_size()
|
|
return 1
|
|
else
|
|
return 0
|
|
|
|
// Loops through all stored files and recalculates used_capacity of this drive
|
|
/obj/item/weapon/computer_hardware/hard_drive/proc/recalculate_size()
|
|
var/total_size = 0
|
|
for(var/datum/computer_file/F in stored_files)
|
|
total_size += F.size
|
|
|
|
used_capacity = total_size
|
|
|
|
// Checks whether file can be stored on the hard drive.
|
|
/obj/item/weapon/computer_hardware/hard_drive/proc/can_store_file(var/size = 1)
|
|
// In the unlikely event someone manages to create that many files.
|
|
// BYOND is acting weird with numbers above 999 in loops (infinite loop prevention)
|
|
if(stored_files.len >= 999)
|
|
return 0
|
|
if(used_capacity + size > max_capacity)
|
|
return 0
|
|
else
|
|
return 1
|
|
|
|
// Checks whether we can store the file. We can only store unique files, so this checks whether we wouldn't get a duplicity by adding a file.
|
|
/obj/item/weapon/computer_hardware/hard_drive/proc/try_store_file(var/datum/computer_file/F)
|
|
if(!F || !istype(F))
|
|
return 0
|
|
var/name = F.filename + "." + F.filetype
|
|
for(var/datum/computer_file/file in stored_files)
|
|
if((file.filename + "." + file.filetype) == name)
|
|
return 0
|
|
return can_store_file(F.size)
|
|
|
|
|
|
|
|
// Tries to find the file by filename. Returns null on failure
|
|
/obj/item/weapon/computer_hardware/hard_drive/proc/find_file_by_name(var/filename)
|
|
if(!check_functionality())
|
|
return null
|
|
|
|
if(!filename)
|
|
return null
|
|
|
|
if(!stored_files)
|
|
return null
|
|
|
|
for(var/datum/computer_file/F in stored_files)
|
|
if(F.filename == filename)
|
|
return F
|
|
return null
|
|
|
|
/obj/item/weapon/computer_hardware/hard_drive/Destroy()
|
|
if(holder2 && (holder2.hard_drive == src))
|
|
holder2.hard_drive = null
|
|
stored_files = null
|
|
return ..()
|
|
|
|
/obj/item/weapon/computer_hardware/hard_drive/New()
|
|
install_default_programs()
|
|
..() |