From 56d8ce28c8837ee1555b873e67b4ddc0235f2995 Mon Sep 17 00:00:00 2001 From: Rob Nelson Date: Sat, 19 Apr 2014 15:58:14 -0700 Subject: [PATCH] Part 1 of economy rework: Spacecash refactor - See commit for full changelog. * Implements stacking and stack overlays * Simplified tiers of cash (1,10,100,500,1000, may remove 500) * Simplified API (dispense_cash, count_cash) Conflicts: code/modules/admin/admin_verbs.dm code/modules/admin/verbs/debug.dm code/modules/economy/ATM.dm --- baystation12.dme | 2 +- code/game/objects/items/weapons/cash.dm | 93 +++++++++++++++++++ .../objects/items/weapons/storage/wallets.dm | 12 ++- .../crates_lockers/closets/secure/freezer.dm | 7 +- code/modules/admin/admin_verbs.dm | 1 + code/modules/admin/verbs/debug.dm | 9 ++ code/modules/economy/ATM.dm | 9 +- code/modules/economy/cash.dm | 8 -- code/modules/media/jukebox.dm | 3 +- .../reagent_containers/food/snacks/grown.dm | 18 +--- 10 files changed, 124 insertions(+), 38 deletions(-) create mode 100644 code/game/objects/items/weapons/cash.dm diff --git a/baystation12.dme b/baystation12.dme index 2d89d6dbf32..ec54b88c419 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -570,6 +570,7 @@ #include "code\game\objects\items\weapons\AI_modules.dm" #include "code\game\objects\items\weapons\alien_specific.dm" #include "code\game\objects\items\weapons\cards_ids.dm" +#include "code\game\objects\items\weapons\cash.dm" #include "code\game\objects\items\weapons\cigs_lighters.dm" #include "code\game\objects\items\weapons\clown_items.dm" #include "code\game\objects\items\weapons\cosmetics.dm" @@ -861,7 +862,6 @@ #include "code\modules\economy\Accounts.dm" #include "code\modules\economy\Accounts_DB.dm" #include "code\modules\economy\ATM.dm" -#include "code\modules\economy\cash.dm" #include "code\modules\economy\economy_misc.dm" #include "code\modules\economy\EFTPOS.dm" #include "code\modules\economy\Events.dm" diff --git a/code/game/objects/items/weapons/cash.dm b/code/game/objects/items/weapons/cash.dm new file mode 100644 index 00000000000..2e2ccef9554 --- /dev/null +++ b/code/game/objects/items/weapons/cash.dm @@ -0,0 +1,93 @@ +var/global/list/moneytypes=list( + /obj/item/weapon/spacecash/c1000 = 1000, + /obj/item/weapon/spacecash/c500 = 500, // Might get rid of this. + /obj/item/weapon/spacecash/c100 = 100, + /obj/item/weapon/spacecash/c10 = 10, + /obj/item/weapon/spacecash = 1, +) + +/obj/item/weapon/spacecash + name = "credit chip" + desc = "Money money money." + gender = PLURAL + icon = 'icons/obj/money.dmi' + icon_state = "cash1" + opacity = 0 + density = 0 + anchored = 0.0 + force = 1.0 + throwforce = 1.0 + throw_speed = 1 + throw_range = 2 + w_class = 1.0 + var/access = list() + access = access_crate_cash + var/worth = 1 // Per chip + var/amount = 1 // number of chips + var/stack_color = "#4E054F" + +/obj/item/weapon/spacecash/New(var/new_loc,var/new_amount=1) + loc = new_loc + name = "[worth] credit chip" + amount = new_amount + update_icon() + +/obj/item/weapon/spacecash/examine() + if(amount>1) + usr << "\icon[src] This is a stack of [amount] [src]s." + else + usr << "\icon[src] This is \a [src]s." + usr << "It's worth [worth*amount] credits." + +/obj/item/weapon/spacecash/update_icon() + icon_state = "cash[worth]" + // Up to 100 items per stack. + overlays = 0 + var/stacksize=round(amount/25) + pixel_x=rand(-7,7) + pixel_y=rand(-14,14) + if(stacksize) + // 0 = single + // 1 = 1/4 stack + // 2 = 1/2 stack + // 3 = 3/4 stack + // 4 = full stack + var/image/stack = image(icon,icon_state="cashstack[stacksize]") + stack.color=stack_color + overlays += stack + +/obj/item/weapon/spacecash/c10 + icon_state = "cash10" + worth = 10 + stack_color = "#663200" + +/obj/item/weapon/spacecash/c100 + icon_state = "cash100" + worth = 100 + stack_color = "#663200" + +/obj/item/weapon/spacecash/c500 + icon_state = "cash500" + worth = 500 + stack_color = "#663200" + +/obj/item/weapon/spacecash/c1000 + icon_state = "cash1000" + worth = 1000 + stack_color = "#333333" + +/proc/dispense_cash(var/amount, var/loc) + for(var/cashtype in moneytypes) + var/slice = moneytypes[cashtype] + var/dispense_count = Floor(amount/slice) + amount = amount % slice + while(dispense_count>0) + var/dispense_this_time = min(dispense_count,100) + if(dispense_this_time > 0) + new cashtype(loc,dispense_this_time) + dispense_count -= dispense_this_time + +/proc/count_cash(var/list/cash) + . = 0 + for(var/obj/item/weapon/spacecash/C in cash) + . += C.amount * C.worth \ No newline at end of file diff --git a/code/game/objects/items/weapons/storage/wallets.dm b/code/game/objects/items/weapons/storage/wallets.dm index 86b12f693ec..7e483b3ccbf 100644 --- a/code/game/objects/items/weapons/storage/wallets.dm +++ b/code/game/objects/items/weapons/storage/wallets.dm @@ -74,10 +74,18 @@ /obj/item/weapon/storage/wallet/random/New() ..() - var/item1_type = pick( /obj/item/weapon/spacecash/c10,/obj/item/weapon/spacecash/c100,/obj/item/weapon/spacecash/c1000,/obj/item/weapon/spacecash/c20,/obj/item/weapon/spacecash/c200,/obj/item/weapon/spacecash/c50, /obj/item/weapon/spacecash/c500) + var/item1_type = pick(/obj/item/weapon/spacecash, + /obj/item/weapon/spacecash/c10, + /obj/item/weapon/spacecash/c100, + /obj/item/weapon/spacecash/c500, + /obj/item/weapon/spacecash/c1000) var/item2_type if(prob(50)) - item2_type = pick( /obj/item/weapon/spacecash/c10,/obj/item/weapon/spacecash/c100,/obj/item/weapon/spacecash/c1000,/obj/item/weapon/spacecash/c20,/obj/item/weapon/spacecash/c200,/obj/item/weapon/spacecash/c50, /obj/item/weapon/spacecash/c500) + item2_type = pick(/obj/item/weapon/spacecash, + /obj/item/weapon/spacecash/c10, + /obj/item/weapon/spacecash/c100, + /obj/item/weapon/spacecash/c500, + /obj/item/weapon/spacecash/c1000) var/item3_type = pick( /obj/item/weapon/coin/silver, /obj/item/weapon/coin/silver, /obj/item/weapon/coin/gold, /obj/item/weapon/coin/iron, /obj/item/weapon/coin/iron, /obj/item/weapon/coin/iron ) spawn(2) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm b/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm index 2650c04c4b0..c05b60bea2a 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm @@ -99,12 +99,7 @@ New() ..() sleep(2) - for(var/i = 0, i < 3, i++) - new /obj/item/weapon/spacecash/c1000(src) - for(var/i = 0, i < 5, i++) - new /obj/item/weapon/spacecash/c500(src) - for(var/i = 0, i < 6, i++) - new /obj/item/weapon/spacecash/c200(src) + dispense_cash(6700,src) return diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index ac4a1a7c55e..eff3e8737eb 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -95,6 +95,7 @@ var/list/admin_verbs_fun = list( /client/proc/toggle_random_events, /client/proc/set_ooc, /client/proc/editappear, + /client/proc/gib_money // /vg/ ) var/list/admin_verbs_spawn = list( /datum/admins/proc/spawn_atom, /*allows us to spawn instances*/ diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index b14055f28c5..132c4b64aa5 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -1087,3 +1087,12 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that log_admin("[key_name(src)] has toggled [M.key]'s [blockname] block [state]!") else alert("Invalid mob") + +/client/proc/gib_money() + set category = "Fun" + set name = "Dispense Money" + set desc = "Honk" + + var/response = input(src,"How much moneys?") as num + if( response < 1) return + dispense_cash(response, mob.loc) diff --git a/code/modules/economy/ATM.dm b/code/modules/economy/ATM.dm index 59434f9e591..7ce821a1f71 100644 --- a/code/modules/economy/ATM.dm +++ b/code/modules/economy/ATM.dm @@ -72,7 +72,7 @@ log transactions //short out the machine, shoot sparks, spew money! emagged = 1 spark_system.start() - spawn_money(rand(100,500),src.loc) + dispense_cash(rand(100,500),src.loc) //we don't want to grief people by locking their id in an emagged ATM release_held_id(user) @@ -309,7 +309,7 @@ log transactions //remove the money authenticated_account.money -= amount - spawn_money(amount,src.loc) + dispense_cash(amount,src.loc) //create an entry in the account transaction log var/datum/transaction/T = new() @@ -365,6 +365,11 @@ log transactions src.attack_hand(usr) +//create the most effective combination of notes to make up the requested amount +/obj/machinery/atm/proc/withdraw_arbitrary_sum(var/arbitrary_sum) + dispense_cash(arbitrary_sum,get_turf(src)) + + //stolen wholesale and then edited a bit from newscasters, which are awesome and by Agouri /obj/machinery/atm/proc/scan_user(mob/living/carbon/human/human_user as mob) if(!authenticated_account) diff --git a/code/modules/economy/cash.dm b/code/modules/economy/cash.dm index c352caa88d4..0703eb5deaa 100644 --- a/code/modules/economy/cash.dm +++ b/code/modules/economy/cash.dm @@ -64,11 +64,3 @@ desc = "It's worth 1000 credits." worth = 1000 -proc/spawn_money(var/sum, spawnloc) - var/cash_type - for(var/i in list(1000,500,200,100,50,20,10,1)) - cash_type = text2path("/obj/item/weapon/spacecash/c[i]") - while(sum >= i) - sum -= i - new cash_type(spawnloc) - return \ No newline at end of file diff --git a/code/modules/media/jukebox.dm b/code/modules/media/jukebox.dm index 014b43e9c34..8d2f707c0a6 100644 --- a/code/modules/media/jukebox.dm +++ b/code/modules/media/jukebox.dm @@ -44,8 +44,7 @@ return "\[NO TAGS\]" var/str="" if(artist!="") - str += "[artist]" - str += " - " + str += "[artist] - " if(title!="") str += "\"[title]\"" else diff --git a/code/modules/reagents/reagent_containers/food/snacks/grown.dm b/code/modules/reagents/reagent_containers/food/snacks/grown.dm index cdac58333d3..7f4360d3a43 100644 --- a/code/modules/reagents/reagent_containers/food/snacks/grown.dm +++ b/code/modules/reagents/reagent_containers/food/snacks/grown.dm @@ -1089,23 +1089,7 @@ icon_state = "spawner" potency = 10 New() - switch(rand(1,100))//(potency) //It wants to use the default potency instead of the new, so it was always 10. Will try to come back to this later - Cheridan - if(0 to 10) - new/obj/item/weapon/spacecash/(src.loc) - if(11 to 20) - new/obj/item/weapon/spacecash/c10(src.loc) - if(21 to 30) - new/obj/item/weapon/spacecash/c20(src.loc) - if(31 to 40) - new/obj/item/weapon/spacecash/c50(src.loc) - if(41 to 50) - new/obj/item/weapon/spacecash/c100(src.loc) - if(51 to 60) - new/obj/item/weapon/spacecash/c200(src.loc) - if(61 to 80) - new/obj/item/weapon/spacecash/c500(src.loc) - else - new/obj/item/weapon/spacecash/c1000(src.loc) + dispense_cash(rand(1,100)*10,src.loc)//(potency) //It wants to use the default potency instead of the new, so it was always 10. Will try to come back to this later - Cheridan spawn(5) //Workaround to keep harvesting from working weirdly. del(src)