diff --git a/code/__DEFINES/logging.dm b/code/__DEFINES/logging.dm
index 7decaa9df70..8d49140c141 100644
--- a/code/__DEFINES/logging.dm
+++ b/code/__DEFINES/logging.dm
@@ -37,6 +37,7 @@
#define LOG_VIRUS (1 << 16)
#define LOG_CLONING (1 << 17)
#define LOG_SHUTTLE (1 << 18)
+#define LOG_ECON (1 << 19)
//Individual logging panel pages
#define INDIVIDUAL_ATTACK_LOG (LOG_ATTACK)
@@ -45,7 +46,7 @@
#define INDIVIDUAL_COMMS_LOG (LOG_PDA | LOG_CHAT | LOG_COMMENT | LOG_TELECOMMS)
#define INDIVIDUAL_OOC_LOG (LOG_OOC | LOG_ADMIN)
#define INDIVIDUAL_OWNERSHIP_LOG (LOG_OWNERSHIP)
-#define INDIVIDUAL_SHOW_ALL_LOG (LOG_ATTACK | LOG_SAY | LOG_WHISPER | LOG_EMOTE | LOG_DSAY | LOG_PDA | LOG_CHAT | LOG_COMMENT | LOG_TELECOMMS | LOG_OOC | LOG_ADMIN | LOG_OWNERSHIP | LOG_GAME | LOG_ADMIN_PRIVATE | LOG_ASAY | LOG_MECHA | LOG_VIRUS | LOG_CLONING | LOG_SHUTTLE)
+#define INDIVIDUAL_SHOW_ALL_LOG (LOG_ATTACK | LOG_SAY | LOG_WHISPER | LOG_EMOTE | LOG_DSAY | LOG_PDA | LOG_CHAT | LOG_COMMENT | LOG_TELECOMMS | LOG_OOC | LOG_ADMIN | LOG_OWNERSHIP | LOG_GAME | LOG_ADMIN_PRIVATE | LOG_ASAY | LOG_MECHA | LOG_VIRUS | LOG_CLONING | LOG_SHUTTLE | LOG_ECON)
#define LOGSRC_CLIENT "Client"
#define LOGSRC_MOB "Mob"
diff --git a/code/__HELPERS/_logging.dm b/code/__HELPERS/_logging.dm
index b30975c14e3..7e681045bc6 100644
--- a/code/__HELPERS/_logging.dm
+++ b/code/__HELPERS/_logging.dm
@@ -90,6 +90,10 @@
if (CONFIG_GET(flag/log_attack))
WRITE_LOG(GLOB.world_attack_log, "ATTACK: [text]")
+/proc/log_econ(text)
+ if (CONFIG_GET(flag/log_econ))
+ WRITE_LOG(GLOB.world_attack_log, "MONEY: [text]")
+
/proc/log_manifest(ckey, datum/mind/mind,mob/body, latejoin = FALSE)
if (CONFIG_GET(flag/log_manifest))
WRITE_LOG(GLOB.world_manifest_log, "[ckey] \\ [body.real_name] \\ [mind.assigned_role] \\ [mind.special_role ? mind.special_role : "NONE"] \\ [latejoin ? "LATEJOIN":"ROUNDSTART"]")
diff --git a/code/controllers/configuration/entries/general.dm b/code/controllers/configuration/entries/general.dm
index 6eb1171e7d1..9fb82476755 100644
--- a/code/controllers/configuration/entries/general.dm
+++ b/code/controllers/configuration/entries/general.dm
@@ -73,6 +73,8 @@
/datum/config_entry/flag/log_emote // log emotes
+/datum/config_entry/flag/log_econ // log economy actions
+
/datum/config_entry/flag/log_adminchat // log admin chat messages
protection = CONFIG_ENTRY_LOCKED
diff --git a/code/game/atoms.dm b/code/game/atoms.dm
index cef025e834c..8a2ddfe24b0 100644
--- a/code/game/atoms.dm
+++ b/code/game/atoms.dm
@@ -1164,6 +1164,8 @@
log_comment(log_text)
if(LOG_TELECOMMS)
log_telecomms(log_text)
+ if(LOG_ECON)
+ log_econ(log_text)
if(LOG_OOC)
log_ooc(log_text)
if(LOG_ADMIN)
diff --git a/code/game/objects/items/cards_ids.dm b/code/game/objects/items/cards_ids.dm
index 83c2d64f2be..a1e9542e97e 100644
--- a/code/game/objects/items/cards_ids.dm
+++ b/code/game/objects/items/cards_ids.dm
@@ -183,6 +183,7 @@
registered_account.adjust_money(cash_money)
SSblackbox.record_feedback("amount", "credits_inserted", cash_money)
+ log_econ("[cash_money] credits were inserted into [src] owned by [src.registered_name]")
if(physical_currency)
to_chat(user, "You stuff [I] into [src]. It disappears in a small puff of bluespace smoke, adding [cash_money] credits to the linked account.")
else
@@ -204,6 +205,7 @@
registered_account.adjust_money(cash_money)
SSblackbox.record_feedback("amount", "credits_inserted", total)
+ log_econ("[total] credits were inserted into [src] owned by [src.registered_name]")
QDEL_LIST(money)
return total
@@ -273,6 +275,7 @@
user.put_in_hands(holochip)
to_chat(user, "You withdraw [amount_to_remove] credits into a holochip.")
SSblackbox.record_feedback("amount", "credits_removed", amount_to_remove)
+ log_econ("[amount_to_remove] credits were removed from [src] owned by [src.registered_name]")
return
else
var/difference = amount_to_remove - registered_account.account_balance
diff --git a/code/modules/economy/account.dm b/code/modules/economy/account.dm
index f5c0e09d3e4..0d26bb6ca14 100644
--- a/code/modules/economy/account.dm
+++ b/code/modules/economy/account.dm
@@ -44,6 +44,7 @@
if(from.has_money(amount))
adjust_money(amount)
SSblackbox.record_feedback("amount", "credits_transferred", amount)
+ log_econ("[amount] credits were transferred from [from.account_holder]'s account to [src.account_holder]")
from.adjust_money(-amount)
return TRUE
return FALSE
@@ -53,6 +54,7 @@
if(free)
adjust_money(money_to_transfer)
SSblackbox.record_feedback("amount", "free_income", money_to_transfer)
+ log_econ("[money_to_transfer] credits were given to [src.account_holder]'s account from income.")
else
var/datum/bank_account/D = SSeconomy.get_dep_account(account_job.paycheck_department)
if(D)
diff --git a/code/modules/mining/mint.dm b/code/modules/mining/mint.dm
index 51dc728e92e..e5e0ee6cb48 100644
--- a/code/modules/mining/mint.dm
+++ b/code/modules/mining/mint.dm
@@ -117,6 +117,8 @@
switch(action)
if ("startpress")
if (!processing)
+ if(produced_coins > 0)
+ log_econ("[produced_coins] coins were created by [src] in the last cycle.")
produced_coins = 0
processing = TRUE
begin_processing()
diff --git a/code/modules/research/bepis.dm b/code/modules/research/bepis.dm
index c6ce45f1606..48e74376568 100644
--- a/code/modules/research/bepis.dm
+++ b/code/modules/research/bepis.dm
@@ -101,6 +101,7 @@
return
account.adjust_money(-deposit_value) //The money vanishes, not paid to any accounts.
SSblackbox.record_feedback("amount", "BEPIS_credits_spent", deposit_value)
+ log_econ("[deposit_value] credits were inserted into [src] by [account.account_holder]")
banked_cash += deposit_value
use_power(1000 * power_saver)
say("Cash deposit successful. There is [banked_cash] in the chamber.")
diff --git a/code/modules/vending/_vending.dm b/code/modules/vending/_vending.dm
index b3d2d56b847..4c37fd3d6a2 100644
--- a/code/modules/vending/_vending.dm
+++ b/code/modules/vending/_vending.dm
@@ -820,6 +820,7 @@ GLOBAL_LIST_EMPTY(vending_products)
if(D)
D.adjust_money(price_to_use)
SSblackbox.record_feedback("amount", "vending_spent", price_to_use)
+ log_econ("[price_to_use] credits were inserted into [src] by [D.account_holder] to buy [R].")
if(last_shopper != usr || purchase_message_cooldown < world.time)
say("Thank you for shopping with [src]!")
purchase_message_cooldown = world.time + 5 SECONDS
@@ -1052,6 +1053,7 @@ GLOBAL_LIST_EMPTY(vending_products)
if(owner)
owner.adjust_money(S.custom_price)
SSblackbox.record_feedback("amount", "vending_spent", S.custom_price)
+ log_econ("[S.custom_price] credits were spent on [src] buying a [S] by [owner.account_holder], owned by [private_a.account_holder].")
vending_machine_input[N] = max(vending_machine_input[N] - 1, 0)
S.forceMove(drop_location())
loaded_items--
diff --git a/config/config.txt b/config/config.txt
index 4f50ee5dbb3..5284febf00a 100644
--- a/config/config.txt
+++ b/config/config.txt
@@ -115,6 +115,9 @@ LOG_PRAYER
## log lawchanges
LOG_LAW
+## log economy actions
+LOG_ECON
+
## log crew manifest to seperate file
LOG_MANIFEST