Porting Goofconomy & co.

This commit is contained in:
Ghommie
2020-04-17 07:48:11 +02:00
parent 19328b8710
commit 4c6f1b622b
190 changed files with 2213 additions and 353 deletions
+2
View File
@@ -0,0 +1,2 @@
/obj/item/proc/get_item_credit_value()
return
+118
View File
@@ -0,0 +1,118 @@
#define DUMPTIME 3000
/datum/bank_account
var/account_holder = "Rusty Venture"
var/account_balance = 0
var/datum/job/account_job
var/list/bank_cards = list()
var/add_to_accounts = TRUE
var/transferable = TRUE
var/account_id
var/being_dumped = FALSE //pink levels are rising
var/withdrawDelay = 0
/datum/bank_account/New(newname, job)
if(add_to_accounts)
SSeconomy.bank_accounts += src
account_holder = newname
account_job = job
account_id = rand(111111,999999)
/datum/bank_account/Destroy()
if(add_to_accounts)
SSeconomy.bank_accounts -= src
return ..()
/datum/bank_account/proc/dumpeet()
being_dumped = TRUE
withdrawDelay = world.time + DUMPTIME
/datum/bank_account/proc/_adjust_money(amt)
account_balance += amt
if(account_balance < 0)
account_balance = 0
/datum/bank_account/proc/has_money(amt)
return account_balance >= amt
/datum/bank_account/proc/adjust_money(amt)
if((amt < 0 && has_money(-amt)) || amt > 0)
_adjust_money(amt)
return TRUE
return FALSE
/datum/bank_account/proc/transfer_money(datum/bank_account/from, amount)
if(!transferable || !from.has_money(amount))
return FALSE
adjust_money(amount)
from.adjust_money(-amount)
return TRUE
/datum/bank_account/proc/payday(amt_of_paychecks, free = FALSE)
var/money_to_transfer = account_job.paycheck * amt_of_paychecks
if(free)
adjust_money(money_to_transfer)
else
var/datum/bank_account/D = SSeconomy.get_dep_account(account_job.paycheck_department)
if(D)
if(!transfer_money(D, money_to_transfer))
bank_card_talk("ERROR: Payday aborted, departmental funds insufficient.")
return FALSE
else
bank_card_talk("Payday processed, account now holds [account_balance] cr.")
return TRUE
bank_card_talk("ERROR: Payday aborted, unable to contact departmental account.")
return FALSE
/datum/bank_account/proc/bank_card_talk(message, force)
if(!message || !bank_cards.len)
return
for(var/obj/A in bank_cards)
var/icon_source = A
/*
if(istype(A, /obj/item/card/id))
var/obj/item/card/id/id_card = A
if(id_card.uses_overlays)
icon_source = id_card.get_cached_flat_icon()
*/
var/mob/card_holder = recursive_loc_check(A, /mob)
if(ismob(card_holder)) //If on a mob
if(card_holder.client && !(card_holder.client.prefs.chat_toggles & CHAT_BANKCARD) && !force)
return
card_holder.playsound_local(get_turf(card_holder), 'sound/machines/twobeep.ogg', 50, TRUE)
if(card_holder.can_hear())
to_chat(card_holder, "[icon2html(icon_source, card_holder)] <span class='notice'>[message]</span>")
else if(isturf(A.loc)) //If on the ground
for(var/mob/M in hearers(1,get_turf(A)))
if(M.client && !(M.client.prefs.chat_toggles & CHAT_BANKCARD) && !force)
return
playsound(A, 'sound/machines/twobeep.ogg', 50, TRUE)
A.audible_message("[icon2html(icon_source, hearers(A))] <span class='notice'>[message]</span>", null, 1)
break
else
for(var/mob/M in A.loc) //If inside a container with other mobs (e.g. locker)
if(M.client && !(M.client.prefs.chat_toggles & CHAT_BANKCARD) && !force)
return
M.playsound_local(get_turf(M), 'sound/machines/twobeep.ogg', 50, TRUE)
if(M.can_hear())
to_chat(M, "[icon2html(icon_source, M)] <span class='notice'>[message]</span>")
/datum/bank_account/department
account_holder = "Guild Credit Agency"
var/department_id = "REPLACE_ME"
add_to_accounts = FALSE
/datum/bank_account/department/New(dep_id, budget)
department_id = dep_id
account_balance = budget
account_holder = SSeconomy.department_accounts[dep_id]
SSeconomy.generated_accounts += src
/datum/bank_account/remote // Bank account not belonging to the local station
add_to_accounts = FALSE
/datum/bank_account/remote/non_transferable
transferable = FALSE
#undef DUMPTIME
+138
View File
@@ -0,0 +1,138 @@
/obj/machinery/paystand
name = "unregistered pay stand"
desc = "See title."
icon = 'icons/obj/economy.dmi'
icon_state = "card_scanner"
density = TRUE
anchored = TRUE
var/locked = FALSE
var/obj/item/card/id/my_card
var/obj/item/assembly/signaler/signaler //attached signaler, let people attach signalers that get activated if the user's transaction limit is achieved.
var/signaler_threshold = 0 //signaler threshold amount
var/amount_deposited = 0 //keep track of the amount deposited over time so you can pay multiple times to reach the signaler threshold
var/force_fee = 0 //replaces the "pay whatever" functionality with a set amount when non-zero.
/obj/machinery/paystand/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/card/id))
if(W == my_card)
if(user.a_intent == INTENT_DISARM)
var/rename_msg = stripped_input(user, "Rename the Paystand:", "Paystand Naming", name)
if(!rename_msg || !user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
return
name = rename_msg
return
else if(user.a_intent == INTENT_GRAB)
var/force_fee_input = input(user,"Set the fee!","Set a fee!",0) as num|null
if(isnull(force_fee_input) || !user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
return
force_fee = force_fee_input
return
locked = !locked
to_chat(user, "<span class='notice'>You [src.locked ? "lock" : "unlock"] the paystand, protecting the bolts from [anchored ? "loosening" : "tightening"].</span>")
return
if(!my_card)
var/obj/item/card/id/assistant_mains_need_to_die = W
if(!assistant_mains_need_to_die.registered_account)
return
var/msg = stripped_input(user, "Name of pay stand:", "Paystand Naming", "[user]'s Awesome Paystand")
if(!msg)
return
name = msg
desc = "Owned by [assistant_mains_need_to_die.registered_account.account_holder], pays directly into [user.p_their()] account."
my_card = assistant_mains_need_to_die
to_chat(user, "You link the stand to your account.")
return
var/obj/item/card/id/vbucks = W
if(vbucks.registered_account)
var/momsdebitcard = 0
if(!force_fee)
momsdebitcard = input(user, "How much would you like to deposit?", "Money Deposit") as null|num
else
momsdebitcard = force_fee
if(!user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
return
if(momsdebitcard < 1)
to_chat(user, "<span class='warning'>ERROR: Invalid amount designated.</span>")
return
if(vbucks.registered_account.adjust_money(-momsdebitcard))
purchase(vbucks.registered_account.account_holder, momsdebitcard)
to_chat(user, "Thanks for purchasing! The vendor has been informed.")
return
else
to_chat(user, "<span class='warning'>ERROR: Account has insufficient funds to make transaction.</span>")
return
else
to_chat(user, "<span class='warning'>ERROR: No bank account assigned to identification card.</span>")
return
if(istype(W, /obj/item/holochip))
var/obj/item/holochip/H = W
var/cashmoney = input(user, "How much would you like to deposit?", "Money Deposit") as null|num
if(H.spend(cashmoney, FALSE))
purchase(user, cashmoney)
to_chat(user, "Thanks for purchasing! The vendor has been informed.")
return
else
to_chat(user, "<span class='warning'>ERROR: Insufficient funds to make transaction.</span>")
return
if(istype(W, /obj/item/stack/spacecash))
to_chat(user, "What is this, the 2000s? We only take card here.")
return
if(istype(W, /obj/item/coin))
to_chat(user, "What is this, the 1800s? We only take card here.")
return
if(istype(W, /obj/item/assembly/signaler))
var/obj/item/assembly/signaler/S = W
if(S.secured)
to_chat(user, "<span class='warning'>The signaler needs to be in attachable mode to add it to the paystand!</span>")
return
if(!my_card)
to_chat(user, "<span class='warning'>ERROR: No identification card has been assigned to this paystand yet!</span>")
return
if(!signaler)
var/cash_limit = input(user, "Enter the minimum amount of cash needed to deposit before the signaler is activated.", "Signaler Activation Threshold") as null|num
if(cash_limit < 1)
to_chat(user, "<span class='warning'>ERROR: Invalid amount designated.</span>")
return
if(cash_limit)
S.forceMove(src)
signaler = S
signaler_threshold = cash_limit
to_chat(user, "You attach the signaler to the paystand.")
desc += " A signaler appears to be attached to the scanner."
else
to_chat(user, "<span class='warning'>A signaler is already attached to this unit!</span>")
if(default_deconstruction_screwdriver(user, "card_scanner", "card_scanner", W))
return
else if(default_pry_open(W))
return
else if(default_unfasten_wrench(user, W))
return
else if(default_deconstruction_crowbar(W))
return
else
return ..()
/obj/machinery/paystand/proc/purchase(buyer, price)
my_card.registered_account.adjust_money(price)
my_card.registered_account.bank_card_talk("Purchase made at your vendor by [buyer] for [price] credits.")
amount_deposited = amount_deposited + price
if(signaler && amount_deposited >= signaler_threshold)
signaler.activate()
amount_deposited = 0
/obj/machinery/paystand/default_unfasten_wrench(mob/user, obj/item/I, time = 20)
if(locked)
to_chat(user, "<span class='warning'>The bolts on this paystand are currently covered!</span>")
return FALSE
. = ..()
/obj/machinery/paystand/examine(mob/user)
. = ..()
if(force_fee)
. += "<span class='warning'>This paystand forces a payment of <b>[force_fee]</b> credit\s per swipe instead of a variable amount.</span>"
if(user.get_active_held_item() == my_card)
. += "<span class='notice'>Paystands can be edited through swiping your card with different intents. <b>Disarm</b> allows editing the name while <b>Grab</b> changes payment functionality.</span>"