mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-09 16:33:50 +00:00
* Tablet apps are now deleted when necessary & removes console preset. (#75863) ## About The Pull Request Apps now properly delete themselves when removed, so they don't exist in nullspace anymore. Chat client now actually updates the uid, because its New() didn't call parent. Deletes the 'console' subtype of modular computer Updates how downloading and transferring files are handled Fixes being able to infinitely upload apps to a disk ## Why It's Good For The Game Fixes some more bugs I found with apps and prevents spamming apps in a disk. ## Changelog 🆑 fix: Maintenance data disks now properly transfer from PC to disk fix: Disks can no longer be flooded with the same app repeatedly. /🆑 * Tablet apps are now deleted when necessary & removes console preset. * updatepaths * feex --------- Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com> Co-authored-by: Jolly-66 <70232195+Jolly-66@users.noreply.github.com>
87 lines
2.6 KiB
Plaintext
87 lines
2.6 KiB
Plaintext
/**
|
|
* store_file
|
|
*
|
|
* Adds an already initialized file to the computer, checking if one already exists.
|
|
* Returns TRUE if successfully stored, FALSE otherwise.
|
|
*/
|
|
/obj/item/modular_computer/proc/store_file(datum/computer_file/file_storing)
|
|
if(!file_storing || !istype(file_storing))
|
|
return FALSE
|
|
if(!can_store_file(file_storing))
|
|
return FALSE
|
|
|
|
// This file is already stored. Don't store it again.
|
|
if(file_storing in stored_files)
|
|
return FALSE
|
|
|
|
file_storing.computer = src
|
|
used_capacity += file_storing.size
|
|
SEND_SIGNAL(file_storing, COMSIG_MODULAR_COMPUTER_FILE_STORE, src)
|
|
return TRUE
|
|
|
|
/**
|
|
* remove_file
|
|
*
|
|
* Removes a given file from the computer, if possible.
|
|
* Properly checking if the file even exists and is in the computer.
|
|
* Returns TRUE if successfully completed, FALSE otherwise
|
|
*/
|
|
/obj/item/modular_computer/proc/remove_file(datum/computer_file/file_removing)
|
|
if(!file_removing || !istype(file_removing))
|
|
return FALSE
|
|
if(!(file_removing in stored_files))
|
|
return FALSE
|
|
if(istype(file_removing, /datum/computer_file/program))
|
|
var/datum/computer_file/program/program_file = file_removing
|
|
program_file.kill_program()
|
|
|
|
stored_files.Remove(file_removing)
|
|
used_capacity -= file_removing.size
|
|
SEND_SIGNAL(file_removing, COMSIG_MODULAR_COMPUTER_FILE_DELETED)
|
|
qdel(file_removing)
|
|
return TRUE
|
|
|
|
/**
|
|
* can_store_file
|
|
*
|
|
* Checks if a computer can store a file, as computers can only store unique files.
|
|
* returns TRUE if possible, FALSE otherwise.
|
|
*/
|
|
/obj/item/modular_computer/proc/can_store_file(datum/computer_file/file)
|
|
if(!file || !istype(file))
|
|
return FALSE
|
|
if(file in stored_files)
|
|
return FALSE
|
|
if(find_file_by_name(file.filename))
|
|
return FALSE
|
|
// 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 FALSE
|
|
if((used_capacity + file.size) > max_capacity)
|
|
return FALSE
|
|
if(!file.can_store_file(src))
|
|
return FALSE
|
|
|
|
return TRUE
|
|
|
|
/**
|
|
* find_file_by_name
|
|
*
|
|
* Will check all applications in a tablet for files and, if they have \
|
|
* the same filename (disregarding extension), will return it.
|
|
* If a computer disk is passed instead, it will check the disk over the computer.
|
|
*/
|
|
/obj/item/modular_computer/proc/find_file_by_name(filename, obj/item/computer_disk/target_disk)
|
|
if(!filename)
|
|
return null
|
|
if(target_disk)
|
|
for(var/datum/computer_file/file as anything in target_disk.stored_files)
|
|
if(file.filename == filename)
|
|
return file
|
|
else
|
|
for(var/datum/computer_file/file as anything in stored_files)
|
|
if(file.filename == filename)
|
|
return file
|
|
return null
|