diff --git a/baystation12.dme b/baystation12.dme index 8fe8cc3f78b..cc4ebdfc30c 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -159,6 +159,7 @@ #define FILE_DIR "code/unused/powerarmor" #define FILE_DIR "code/unused/spacecraft" #define FILE_DIR "code/WorkInProgress" +#define FILE_DIR "code/WorkInProgress/animusstation" #define FILE_DIR "code/WorkInProgress/Apples" #define FILE_DIR "code/WorkInProgress/Cael_Aislinn" #define FILE_DIR "code/WorkInProgress/Cael_Aislinn/Rust" @@ -1139,6 +1140,7 @@ #include "code\WorkInProgress\AI_Visibility.dm" #include "code\WorkInProgress\buildmode.dm" #include "code\WorkInProgress\explosion_particles.dm" +#include "code\WorkInProgress\animusstation\atm.dm" #include "code\WorkInProgress\Cael_Aislinn\Rust\core_field.dm" #include "code\WorkInProgress\Cael_Aislinn\Rust\core_gen.dm" #include "code\WorkInProgress\Cael_Aislinn\Rust\core_monitor.dm" @@ -1159,7 +1161,6 @@ #include "code\WorkInProgress\Cael_Aislinn\Tajara\tajaran.dm" #include "code\WorkInProgress\Cael_Aislinn\Tajara\whisper.dm" #include "code\WorkInProgress\Chinsky\ashtray.dm" -#include "code\WorkInProgress\Mini\ATM.dm" #include "code\WorkInProgress\Mini\atmos_control.dm" #include "code\WorkInProgress\Mini\pipe_heater.dm" #include "code\WorkInProgress\Mloc\Shortcuts.dm" diff --git a/code/WorkInProgress/animusstation/atm.dm b/code/WorkInProgress/animusstation/atm.dm new file mode 100644 index 00000000000..cbb61e6e79c --- /dev/null +++ b/code/WorkInProgress/animusstation/atm.dm @@ -0,0 +1,165 @@ +/* + +TODO: +give money an actual use (QM stuff, vending machines) +send money to people (might be worth attaching money to custom database thing for this, instead of being in the ID) +log transactions + +*/ + +/obj/machinery/atm + name = "\improper NanoTrasen Automatic Teller Machine" + desc = "For all your monetary needs!" + icon = 'terminals.dmi' + icon_state = "atm" + anchored = 1 + use_power = 1 + idle_power_usage = 10 + var + obj/item/weapon/card/id/card + obj/item/weapon/spacecash/cashes = list() + inserted = 0 + accepted = 0 + pincode = 0 + + attackby(var/obj/A, var/mob/user) + if(istype(A,/obj/item/weapon/spacecash)) + cashes += A + user.drop_item() + A.loc = src + inserted += A:worth + return + if(istype(A,/obj/item/weapon/coin)) + if(istype(A,/obj/item/weapon/coin/iron)) + cashes += A + user.drop_item() + A.loc = src + inserted += 1 + return + if(istype(A,/obj/item/weapon/coin/silver)) + cashes += A + user.drop_item() + A.loc = src + inserted += 10 + return + if(istype(A,/obj/item/weapon/coin/gold)) + cashes += A + user.drop_item() + A.loc = src + inserted += 50 + return + if(istype(A,/obj/item/weapon/coin/plasma)) + cashes += A + user.drop_item() + A.loc = src + inserted += 2 + return + if(istype(A,/obj/item/weapon/coin/diamond)) + cashes += A + user.drop_item() + A.loc = src + inserted += 300 + return + user << "You insert your [A.name] in ATM" + ..() + + attack_hand(var/mob/user) + if(istype(user, /mob/living/silicon)) + user << "\red Artificial unit recognized. Artificial units do not currently receive monetary compensation, as per NanoTrasen regulation #1005." + return + + if(!(stat && NOPOWER) && ishuman(user)) + var/dat + user.machine = src + if(!accepted) + if(scan(user)) + pincode = input(usr,"Enter a pin-code") as num + if(card.checkaccess(pincode,usr)) + accepted = 1 +// usr << sound('nya.mp3') + else + dat = null + dat += "

NanoTrasen Automatic Teller Machine


" + dat += "For all your monetary needs!

" + dat += "Welcome, [card.registered_name]. You have [card.money] credits deposited.
" + dat += "Current inserted item value: [inserted] credits.

" + dat += "Please, select action
" + dat += "Withdraw Physical Credits
" + dat += "Eject Inserted Items
" + dat += "Convert Inserted Items to Credits
" + dat += "Lock ATM
" + user << browse(dat,"window=atm") + onclose(user,"close") + proc + withdraw(var/mob/user) + if(accepted) + var/amount = input("How much would you like to withdraw?", "Amount", 0) in list(1,10,20,50,100,200,500,1000, 0) + if(amount == 0) + return + if(card.money >= amount) + card.money -= amount + switch(amount) + if(1) + new /obj/item/weapon/spacecash(loc) + if(10) + new /obj/item/weapon/spacecash/c10(loc) + if(20) + new /obj/item/weapon/spacecash/c20(loc) + if(50) + new /obj/item/weapon/spacecash/c50(loc) + if(100) + new /obj/item/weapon/spacecash/c100(loc) + if(200) + new /obj/item/weapon/spacecash/c200(loc) + if(500) + new /obj/item/weapon/spacecash/c500(loc) + if(1000) + new /obj/item/weapon/spacecash/c1000(loc) + else + user << "\red Error: Insufficient funds." + return + + scan(var/mob/user) + if(istype(user,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = user + if(H.wear_id) + if(istype(H.wear_id, /obj/item/weapon/card/id)) + card = H.wear_id + return 1 + if(istype(H.wear_id,/obj/item/device/pda)) + var/obj/item/device/pda/P = H.wear_id + if(istype(P.id,/obj/item/weapon/card/id)) + card = P.id + return 1 + return 0 + return 0 + + insert() + if(accepted) + card.money += inserted + inserted = 0 + + Topic(href,href_list) + if (usr.machine==src && get_dist(src, usr) <= 1 || istype(usr, /mob/living/silicon/ai)) + if(href_list["eca"]) + if(accepted) + for(var/obj/item/weapon/spacecash/M in cashes) + M.loc = loc + inserted = 0 + if(!cashes) + cashes = null + if(href_list["with"] && card) + withdraw(usr) + if(href_list["ins"] && card) + if(accepted) + card.money += inserted + inserted = 0 + if(href_list["lock"]) + card = null + accepted = 0 + usr.machine = null + usr << browse(null,"window=atm") + src.updateUsrDialog() + else + usr.machine = null + usr << browse(null,"window=atm") diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm index 1bc78daa926..1abcbba3ab6 100644 --- a/code/defines/obj/weapon.dm +++ b/code/defines/obj/weapon.dm @@ -159,7 +159,7 @@ ammo = 30 /obj/item/weapon/spacecash - name = "space cash" + name = "stack of credits" desc = "It's worth 1 credit." gender = PLURAL icon = 'items.dmi' @@ -175,6 +175,7 @@ var/access = list() access = access_crate_cash var/worth = 1 + var/amount = 1 /obj/item/weapon/spacecash/c10 icon_state = "spacecash10" @@ -211,6 +212,51 @@ access = access_crate_cash desc = "It's worth 1000 credits." worth = 1000 +/obj/item/weapon/spacecash/attack_self(var/mob/user) + var/dat = "Space cash stack" + dat += "Credit amount - [worth * amount]
" + dat += "Take amount
" + user << browse(dat,"window=money") + +/obj/item/weapon/spacecash/Topic(href, href_list) + if(href_list["takemoney"]) + var/a = 1 + a = input(usr,"How much you want take?") as num + if((a > src.amount) || (a < 0)) + usr << "\red You don't have that many credits" + return + src.amount -= a + var/obj/item/weapon/spacecash/S + if(a <= 0) + return + switch(src.worth) + if(1) + S = new /obj/item/weapon/spacecash(get_turf(src)) + if(10) + S = new /obj/item/weapon/spacecash/c10(get_turf(src)) + if(20) + S = new /obj/item/weapon/spacecash/c20(get_turf(src)) + if(50) + S = new /obj/item/weapon/spacecash/c50(get_turf(src)) + if(100) + S = new /obj/item/weapon/spacecash/c100(get_turf(src)) + if(200) + S = new /obj/item/weapon/spacecash/c200(get_turf(src)) + if(500) + S = new /obj/item/weapon/spacecash/c500(get_turf(src)) + if(1000) + S = new /obj/item/weapon/spacecash/c1000(get_turf(src)) + S.amount = a + if(src.amount == 0) + del(src) +/obj/item/weapon/spacecash/attackby(var/obj/I, var/mob/user) + if(!I) + return + if(istype(I,src)) + src.amount += I:amount + user << "You add [I:amount] credits to stack" + del(I) + /obj/item/device/mass_spectrometer desc = "A hand-held mass spectrometer which identifies trace chemicals in a blood sample." @@ -573,11 +619,12 @@ item_state = "card-id" var/access = list() var/registered_name = null // The name registered_name on the card - + var/pin = 0 + var/money = 0 var/assignment = null var/over_jumpsuit = 1 // If set to 0, it won't display on top of the mob's jumpsuit var/dorm = 0 // determines if this ID has claimed a dorm already - + var/obj/item/weapon/credit_card/card var/blood_type = "\[UNSET\]" var/dna_hash = "\[UNSET\]" var/fingerprint_hash = "\[UNSET\]" diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm index 7b9e21ab0ac..2eb8bfb6515 100644 --- a/code/game/jobs/job_controller.dm +++ b/code/game/jobs/job_controller.dm @@ -304,6 +304,11 @@ var/global/datum/controller/occupations/job_master C.assignment = title C.name = "[C.registered_name]'s ID Card ([C.assignment])" C.access = get_access(rank) + C.pin = rand(1000,9999) + C.money = 10 * rand(50,200) + H << "\bold \red Your station account has [C.money] credits. The pin-code is [C.pin]." + if(H.mind) + H.mind.memory += "Your pin-code is - [C.pin]
" H.equip_if_possible(C, H.slot_wear_id) if(!H.equip_if_possible(new /obj/item/weapon/pen(H), H.slot_r_store)) H.equip_if_possible(new /obj/item/weapon/pen(H), H.slot_ears) diff --git a/code/game/objects/items/weapons/cards_ids.dm b/code/game/objects/items/weapons/cards_ids.dm index 5f6a3e80ebe..96e712bc5d0 100644 --- a/code/game/objects/items/weapons/cards_ids.dm +++ b/code/game/objects/items/weapons/cards_ids.dm @@ -107,6 +107,12 @@ FINGERPRINT CARD else ..() +/obj/item/weapon/card/id/proc/checkaccess(p,var/mob/user) + if(p == pin) + user << "\green Access granted" + return 1 + user << "\red Access denied" + return 0 // FINGERPRINT HOLDER