From 7b3774364b744a42a501a40bb208d85cf579b24a Mon Sep 17 00:00:00 2001 From: Geeves Date: Wed, 15 Jul 2020 20:20:58 +0200 Subject: [PATCH] Paper Scanner Addition (#9299) Added a paper scanner device that can scan paper and paper bundles and convert them into data files. --- aurorastation.dme | 1 + .../modular_computers/items/paper_scanner.dm | 95 ++++++ code/modules/paperwork/paper_bundle.dm | 3 +- html/changelogs/geeves-paper_scanner.yml | 6 + icons/obj/devices/paperscanner.dmi | Bin 0 -> 618 bytes maps/aurora/aurora-4_mainlevel.dmm | 49 +++- maps/aurora/aurora-5_interstitial.dmm | 273 +++++++++--------- 7 files changed, 292 insertions(+), 135 deletions(-) create mode 100644 code/modules/modular_computers/items/paper_scanner.dm create mode 100644 html/changelogs/geeves-paper_scanner.yml create mode 100644 icons/obj/devices/paperscanner.dmi diff --git a/aurorastation.dme b/aurorastation.dme index c06b3f9c2cd..80db6869e2f 100644 --- a/aurorastation.dme +++ b/aurorastation.dme @@ -2133,6 +2133,7 @@ #include "code\modules\modular_computers\hardware\portable_hard_drive_presets.dm" #include "code\modules\modular_computers\hardware\processor_unit.dm" #include "code\modules\modular_computers\hardware\tesla_link.dm" +#include "code\modules\modular_computers\items\paper_scanner.dm" #include "code\modules\modular_computers\NTNet\NTNet.dm" #include "code\modules\modular_computers\NTNet\NTNet_relay.dm" #include "code\modules\modular_computers\NTNet\NTNRC\conversation.dm" diff --git a/code/modules/modular_computers/items/paper_scanner.dm b/code/modules/modular_computers/items/paper_scanner.dm new file mode 100644 index 00000000000..5b05c2d92ec --- /dev/null +++ b/code/modules/modular_computers/items/paper_scanner.dm @@ -0,0 +1,95 @@ +/obj/item/paper_scanner + name = "paper scanner" + desc = "A simple device that can be used to scan paper or paper bundles in order to digitize them." + desc_info = "Alt-click it while it's in one of your hands to eject the portable drive. Click paper or a paper bundle with it to digitize it and store it in the inserted drive." + icon = 'icons/obj/devices/paperscanner.dmi' + icon_state = "paperscanner" + item_state = "paperscanner" + contained_sprite = TRUE + var/obj/item/computer_hardware/hard_drive/portable/drive + +/obj/item/paper_scanner/Initialize(mapload, ...) + . = ..() + drive = new /obj/item/computer_hardware/hard_drive/portable(src) + update_icon() + +/obj/item/paper_scanner/update_icon() + cut_overlays() + if(drive) + add_overlay("paperscanner-drive") + +/obj/item/paper_scanner/AltClick(mob/living/carbon/user) + if(!drive) + to_chat(user, SPAN_WARNING("\The [src] doesn't have a drive installed.")) + return + if(!istype(user)) + to_chat(user, SPAN_WARNING("You're too simple to work \the [src].")) + return + if(user.l_hand == src || user.r_hand == src) + to_chat(user, SPAN_NOTICE("You eject \the [drive].")) + user.put_in_hands(drive) + drive = null + update_icon() + else + to_chat(user, SPAN_WARNING("You must be holding \the [src] in one of your hands before you can eject a drive.")) + +/obj/item/paper_scanner/attackby(obj/item/W, mob/user) + if(istype(W, /obj/item/computer_hardware/hard_drive/portable)) + if(drive) + to_chat(user, SPAN_WARNING("\The [src] already has a drive installed!")) + return + to_chat(user, SPAN_NOTICE("You insert \the [W] into \the [src].")) + user.drop_from_inventory(W, src) + drive = W + update_icon() + else + ..() + +/obj/item/paper_scanner/afterattack(atom/target, mob/user, proximity_flag, click_parameters) + if(proximity_flag && (istype(target, /obj/item/paper) || istype(target, /obj/item/paper_bundle))) + do_scan(target, user) + +/obj/item/paper_scanner/proc/do_scan(var/obj/item/target, var/mob/user) + if(!drive) + to_chat(user, SPAN_WARNING("\The [src] doesn't have a drive installed.")) + return + + var/list/pages_to_scan = list() + var/obj/item/paper/P = target + var/obj/item/paper_bundle/PB = target + + if(istype(P)) + if(!P.info) + to_chat(user, SPAN_WARNING("\The [P] doesn't have any information on it.")) + return + pages_to_scan += P + else if(istype(PB)) + var/has_info = FALSE + for(var/obj/item/paper/page in PB.pages) + if(page.info) + pages_to_scan += page + has_info = TRUE + if(!has_info) + to_chat(user, SPAN_WARNING("\The [PB] doesn't have any information in it.")) + return + + if(!length(pages_to_scan)) + return + + user.visible_message("[user] starts making a scan of \the [target]...", SPAN_NOTICE("You start making a scan of \the [target]..."), range = 3) + if(do_after(user, 30 * length(pages_to_scan), TRUE, target)) + if(!drive) + to_chat(user, SPAN_WARNING("\The [src] doesn't have a drive installed.")) + return + user.visible_message("[user] makes a scan of \the [target].", SPAN_NOTICE("You make a scan of \the [target]."), range = 3) + var/datum/computer_file/data/F = new /datum/computer_file/data(drive) + F.filename = target.name != initial(target.name) ? "[target.name] ([worldtime2text()] - [time2text(world.time, "Month DD")])" : "Digital Paper ([worldtime2text()] - [time2text(world.time, "Month DD")])" + F.filetype = "TXT" + var/data_to_save = "" + for(var/thing in pages_to_scan) + var/obj/item/paper/page = thing + data_to_save += page.info + data_to_save += "\[br\]" + F.stored_data = data_to_save + if(!drive.store_file(F)) + to_chat(usr, SPAN_WARNING("\The [drive] does not have enough space to store the latest scanned file.")) diff --git a/code/modules/paperwork/paper_bundle.dm b/code/modules/paperwork/paper_bundle.dm index acc59e835f6..76d3676e407 100644 --- a/code/modules/paperwork/paper_bundle.dm +++ b/code/modules/paperwork/paper_bundle.dm @@ -29,6 +29,7 @@ if(istype(W, /obj/item/paper) || istype(W, /obj/item/photo)) insert_sheet_at(user, pages.len+1, W) amount++ + attack_self(usr) //Update the browsed page. // burning else if(istype(W, /obj/item/flame)) @@ -43,6 +44,7 @@ amount++ to_chat(user, "You add \the [W.name] to [(src.name == "paper bundle") ? "the paper bundle" : src.name].") + attack_self(usr) //Update the browsed page. qdel(W) else if(istype(W, /obj/item/tape_roll)) @@ -53,7 +55,6 @@ P.attackby(W, user) update_icon() - attack_self(usr) //Update the browsed page. add_fingerprint(usr) return diff --git a/html/changelogs/geeves-paper_scanner.yml b/html/changelogs/geeves-paper_scanner.yml new file mode 100644 index 00000000000..1f744db96e1 --- /dev/null +++ b/html/changelogs/geeves-paper_scanner.yml @@ -0,0 +1,6 @@ +author: Geeves + +delete-after: True + +changes: + - rscadd: "Added a paper scanner device that can scan paper and paper bundles and convert them into data files." \ No newline at end of file diff --git a/icons/obj/devices/paperscanner.dmi b/icons/obj/devices/paperscanner.dmi new file mode 100644 index 0000000000000000000000000000000000000000..1af5e9691343757e9e99bb420e3b90d5bbe74762 GIT binary patch literal 618 zcmV-w0+s!VP)C0000pP)t-sz`(#V zZ80)4F*<)aNS;SbOiVvNKUrB>85tQSCMGntO(%~zGmbwXbt!8lB$G2Sz`(%W1tr}8 z0004WQchCV=-0C=2JR&a84_w-Y6@%7{?OD!tS z%+FJ>RWQ*r;NmRLOex6#a*U0*I5Sc+(=$pSoZ^zil2jm5sUWccs3SQsFE6!7iHkEO zv#1y-Y{=>p}q*G zdSwMyKNoNq007@2PXt%sx4-}Z0YgbdK~#90?byM#f*=rpVZe~h|2Mh;A4SQJS0p@utrm|z!b(`;`m;O zpAGzS{$Aji0cn8a8~oV7IfGIIr5VT;sA(Yg1!`uX`6VdMK5;A*A86>YZQG-F6951JKxgtUzkdIp$t)L1?){&qR`37C8Z|}aU4H%k zKa*K5BJBO6FB*_z