From 9f5bf6f747b61badb3ec1a2a66ec363eae60cd98 Mon Sep 17 00:00:00 2001 From: warriorstar-orion Date: Wed, 23 Jul 2025 13:28:07 -0400 Subject: [PATCH] Assign different paycheck amounts to each job (#29682) --- code/__DEFINES/economy_defines.dm | 7 ++++--- code/controllers/subsystem/SSeconomy.dm | 2 ++ code/game/jobs/job/assistant.dm | 1 + code/game/jobs/job/job.dm | 5 +++++ code/game/jobs/job/medical_jobs.dm | 8 ++++++++ code/game/jobs/job/science_jobs.dm | 4 ++++ code/game/jobs/job/security_jobs.dm | 4 ++++ code/game/jobs/job/supervisor.dm | 7 +++++++ code/game/jobs/job/support.dm | 12 ++++++++++++ code/game/jobs/job/support_chaplain.dm | 1 + code/game/machinery/computer/card.dm | 11 ++++++++++- code/modules/economy/money_account.dm | 4 ++-- 12 files changed, 60 insertions(+), 6 deletions(-) diff --git a/code/__DEFINES/economy_defines.dm b/code/__DEFINES/economy_defines.dm index 553ffd9263f..48a30d1aa8a 100644 --- a/code/__DEFINES/economy_defines.dm +++ b/code/__DEFINES/economy_defines.dm @@ -22,9 +22,10 @@ #define DEPARTMENT_BALANCE_HIGH 1500 /////BASE PAY AMOUNTS/// -#define CREW_BASE_PAY_LOW 100 -#define CREW_PAY_MEDIUM 250 -#define CREW_PAY_HIGH 300 +#define CREW_PAY_ASSISTANT 100 +#define CREW_PAY_LOW 150 +#define CREW_PAY_MEDIUM 200 +#define CREW_PAY_HIGH 250 #define DEPARTMENT_BASE_PAY_NONE 0 #define DEPARTMENT_BASE_PAY_LOW 250 diff --git a/code/controllers/subsystem/SSeconomy.dm b/code/controllers/subsystem/SSeconomy.dm index 74e23dd7664..69cff7ad37d 100644 --- a/code/controllers/subsystem/SSeconomy.dm +++ b/code/controllers/subsystem/SSeconomy.dm @@ -306,6 +306,8 @@ SUBSYSTEM_DEF(economy) amount_to_pay -= deduction amount_to_pay = max(amount_to_pay, 0) account.pay_check_deductions = null + if(!amount_to_pay) + continue station_db.credit_account(account, amount_to_pay, "Payday", "NAS Trurl Payroll", FALSE) if(account.account_type == ACCOUNT_TYPE_PERSONAL) if(LAZYLEN(account.associated_nanobank_programs)) diff --git a/code/game/jobs/job/assistant.dm b/code/game/jobs/job/assistant.dm index 4f4819a29dd..d80831349ba 100644 --- a/code/game/jobs/job/assistant.dm +++ b/code/game/jobs/job/assistant.dm @@ -10,6 +10,7 @@ access = list() //See /datum/job/assistant/get_access() alt_titles = list("Off-Duty", "Retired", "Intern") outfit = /datum/outfit/job/assistant + standard_paycheck = CREW_PAY_ASSISTANT /datum/job/assistant/get_access() if(GLOB.configuration.jobs.assistant_maint_access) diff --git a/code/game/jobs/job/job.dm b/code/game/jobs/job/job.dm index f818e96dafe..16ff7809ae9 100644 --- a/code/game/jobs/job/job.dm +++ b/code/game/jobs/job/job.dm @@ -72,10 +72,15 @@ /// Boolean detailing if this job has been banned because of a gamemode restriction i.e. The revolution has won, no more command var/job_banned_gamemode = FALSE + /// Standard paycheck amount for this job + var/standard_paycheck = CREW_PAY_ASSISTANT + //Only override this proc /datum/job/proc/after_spawn(mob/living/carbon/human/H) + SHOULD_CALL_PARENT(TRUE) SEND_GLOBAL_SIGNAL(COMSIG_GLOB_JOB_AFTER_SPAWN, src, H) + H.mind.initial_account.payday_amount = standard_paycheck /datum/job/proc/announce(mob/living/carbon/human/H) return diff --git a/code/game/jobs/job/medical_jobs.dm b/code/game/jobs/job/medical_jobs.dm index 8160d45f5c5..a78b1e10ac1 100644 --- a/code/game/jobs/job/medical_jobs.dm +++ b/code/game/jobs/job/medical_jobs.dm @@ -34,6 +34,7 @@ blacklisted_disabilities = list(DISABILITY_FLAG_BLIND, DISABILITY_FLAG_DEAF, DISABILITY_FLAG_MUTE, DISABILITY_FLAG_DIZZY) outfit = /datum/outfit/job/cmo important_information = "This role requires you to coordinate a department. You are required to be familiar with Standard Operating Procedure (Medical), basic job duties, and act professionally (roleplay)." + standard_paycheck = CREW_PAY_HIGH /datum/outfit/job/cmo name = "Chief Medical Officer" @@ -81,6 +82,7 @@ minimal_player_age = 3 exp_map = list(EXP_TYPE_CREW = 180) outfit = /datum/outfit/job/doctor + standard_paycheck = CREW_PAY_MEDIUM /datum/outfit/job/doctor name = "Medical Doctor" @@ -121,6 +123,7 @@ minimal_player_age = 3 exp_map = list(EXP_TYPE_CREW = 180) outfit = /datum/outfit/job/coroner + standard_paycheck = CREW_PAY_MEDIUM /datum/outfit/job/coroner name = "Coroner" @@ -190,6 +193,7 @@ minimal_player_age = 7 exp_map = list(EXP_TYPE_CREW = 300) outfit = /datum/outfit/job/chemist + standard_paycheck = CREW_PAY_MEDIUM /datum/outfit/job/chemist name = "Chemist" @@ -231,6 +235,7 @@ minimal_player_age = 3 exp_map = list(EXP_TYPE_CREW = 180) outfit = /datum/outfit/job/geneticist + standard_paycheck = CREW_PAY_MEDIUM /datum/outfit/job/geneticist name = "Geneticist" @@ -275,6 +280,7 @@ /datum/job_objective/virus_samples ) outfit = /datum/outfit/job/virologist + standard_paycheck = CREW_PAY_MEDIUM /datum/outfit/job/virologist @@ -315,6 +321,7 @@ ) alt_titles = list("Psychologist","Therapist") outfit = /datum/outfit/job/psychiatrist + standard_paycheck = CREW_PAY_MEDIUM /datum/outfit/job/psychiatrist name = "Psychiatrist" @@ -366,6 +373,7 @@ exp_map = list(EXP_TYPE_CREW = 180) outfit = /datum/outfit/job/paramedic important_information = "You are the first responder to medical emergencies outside the sanctity of the Medbay. You can also respond to Lavaland emergencies via the mining shuttle located in Cargo." + standard_paycheck = CREW_PAY_MEDIUM /datum/outfit/job/paramedic name = "Paramedic" diff --git a/code/game/jobs/job/science_jobs.dm b/code/game/jobs/job/science_jobs.dm index 0b119fd74fe..f1573685c0a 100644 --- a/code/game/jobs/job/science_jobs.dm +++ b/code/game/jobs/job/science_jobs.dm @@ -44,6 +44,7 @@ outfit = /datum/outfit/job/rd important_information = "This role requires you to coordinate a department. You are required to be familiar with Standard Operating Procedure (Science), basic job duties, and act professionally (roleplay)." + standard_paycheck = CREW_PAY_HIGH /datum/outfit/job/rd name = "Research Director" @@ -95,6 +96,7 @@ ) outfit = /datum/outfit/job/scientist + standard_paycheck = CREW_PAY_MEDIUM /datum/outfit/job/scientist name = "Scientist" @@ -145,6 +147,7 @@ ) outfit = /datum/outfit/job/xenobiologist + standard_paycheck = CREW_PAY_MEDIUM /datum/outfit/job/xenobiologist name = "Xenobiologist" @@ -197,6 +200,7 @@ ) outfit = /datum/outfit/job/roboticist + standard_paycheck = CREW_PAY_MEDIUM /datum/outfit/job/roboticist name = "Roboticist" diff --git a/code/game/jobs/job/security_jobs.dm b/code/game/jobs/job/security_jobs.dm index f560857512b..19567d21ce8 100644 --- a/code/game/jobs/job/security_jobs.dm +++ b/code/game/jobs/job/security_jobs.dm @@ -44,6 +44,7 @@ missing_limbs_allowed = FALSE outfit = /datum/outfit/job/hos important_information = "This role requires you to coordinate a department. You are required to be familiar with Standard Operating Procedure (Security), Space Law, basic job duties, and act professionally (roleplay)." + standard_paycheck = CREW_PAY_HIGH /datum/outfit/job/hos name = "Head of Security" @@ -100,6 +101,7 @@ blacklisted_disabilities = list(DISABILITY_FLAG_BLIND, DISABILITY_FLAG_DEAF, DISABILITY_FLAG_MUTE, DISABILITY_FLAG_DIZZY, DISABILITY_FLAG_NERVOUS, DISABILITY_FLAG_LISP, DISABILITY_FLAG_PARAPLEGIC) missing_limbs_allowed = FALSE outfit = /datum/outfit/job/warden + standard_paycheck = CREW_PAY_MEDIUM /datum/outfit/job/warden name = "Warden" @@ -159,6 +161,7 @@ missing_limbs_allowed = FALSE outfit = /datum/outfit/job/detective important_information = "Track, investigate, and look cool while doing it." + standard_paycheck = CREW_PAY_MEDIUM /datum/outfit/job/detective name = "Detective" @@ -230,6 +233,7 @@ missing_limbs_allowed = FALSE outfit = /datum/outfit/job/officer important_information = "Space Law is the law, not a suggestion." + standard_paycheck = CREW_PAY_MEDIUM /datum/outfit/job/officer name = "Security Officer" diff --git a/code/game/jobs/job/supervisor.dm b/code/game/jobs/job/supervisor.dm index 28a2437966c..f20e2969ec6 100644 --- a/code/game/jobs/job/supervisor.dm +++ b/code/game/jobs/job/supervisor.dm @@ -16,6 +16,7 @@ blacklisted_disabilities = list(DISABILITY_FLAG_BLIND, DISABILITY_FLAG_DEAF, DISABILITY_FLAG_MUTE, DISABILITY_FLAG_DIZZY, DISABILITY_FLAG_NERVOUS, DISABILITY_FLAG_LISP) outfit = /datum/outfit/job/captain important_information = "This role requires you to coordinate a department. You are required to be familiar with Standard Operating Procedure (Command), basic job duties, and act professionally (roleplay)." + standard_paycheck = CREW_PAY_HIGH /datum/job/captain/get_access() return get_all_accesses() @@ -110,6 +111,7 @@ blacklisted_disabilities = list(DISABILITY_FLAG_BLIND, DISABILITY_FLAG_DEAF, DISABILITY_FLAG_MUTE, DISABILITY_FLAG_DIZZY , DISABILITY_FLAG_NERVOUS, DISABILITY_FLAG_LISP) outfit = /datum/outfit/job/hop important_information = "This role requires you to coordinate a department. You are required to be familiar with Standard Operating Procedure (Service), basic job duties, and act professionally (roleplay)." + standard_paycheck = CREW_PAY_HIGH /datum/outfit/job/hop name = "Head of Personnel" @@ -185,6 +187,7 @@ blacklisted_disabilities = list(DISABILITY_FLAG_DEAF, DISABILITY_FLAG_MUTE, DISABILITY_FLAG_NERVOUS, DISABILITY_FLAG_LISP) outfit = /datum/outfit/job/nanotrasenrep important_information = "This role requires you to advise the Command team about Standard Operating Procedure, Chain of Command, and report to Central Command about various matters. You are required to act in a manner befitting someone representing Nanotrasen." + standard_paycheck = CREW_PAY_MEDIUM /datum/outfit/job/nanotrasenrep name = "Nanotrasen Representative" @@ -246,6 +249,7 @@ missing_limbs_allowed = FALSE outfit = /datum/outfit/job/blueshield important_information = "This role requires you to ensure the safety of the Heads of Staff, not the general crew. You may perform arrests only if the combatant is directly threatening a member of Command, the Nanotrasen Representative, or the Magistrate." + standard_paycheck = CREW_PAY_MEDIUM /datum/outfit/job/blueshield name = "Blueshield" @@ -298,6 +302,7 @@ blacklisted_disabilities = list(DISABILITY_FLAG_DEAF, DISABILITY_FLAG_MUTE, DISABILITY_FLAG_NERVOUS, DISABILITY_FLAG_LISP) outfit = /datum/outfit/job/judge important_information = "This role requires you to oversee legal matters and make important decisions about sentencing. You are required to have an extensive knowledge of Space Law and Security SOP and only operate within, not outside, the boundaries of the law." + standard_paycheck = CREW_PAY_MEDIUM /datum/outfit/job/judge name = "Magistrate" @@ -352,6 +357,7 @@ blacklisted_disabilities = list(DISABILITY_FLAG_DEAF, DISABILITY_FLAG_MUTE, DISABILITY_FLAG_NERVOUS, DISABILITY_FLAG_LISP) outfit = /datum/outfit/job/iaa important_information = "Your job is to deal with affairs regarding Standard Operating Procedure. You are NOT in charge of Space Law affairs, nor can you override it. You are NOT a prisoner defence lawyer." + standard_paycheck = CREW_PAY_MEDIUM /datum/outfit/job/iaa name = "Internal Affairs Agent" @@ -413,6 +419,7 @@ blacklisted_disabilities = list(DISABILITY_FLAG_DEAF, DISABILITY_FLAG_MUTE, DISABILITY_FLAG_NERVOUS, DISABILITY_FLAG_LISP) outfit = /datum/outfit/job/nct important_information = "Your job is to try to assist as many crew members as possible regardless of department. You are NOT permitted to give command staff advice on any command SOP questions or aid in legal advice." + standard_paycheck = CREW_PAY_MEDIUM /datum/outfit/job/nct name = "Nanotrasen Career Trainer" diff --git a/code/game/jobs/job/support.dm b/code/game/jobs/job/support.dm index 198462f810d..e700c8669d8 100644 --- a/code/game/jobs/job/support.dm +++ b/code/game/jobs/job/support.dm @@ -35,6 +35,7 @@ outfit = /datum/outfit/job/qm important_information = "This role requires you to coordinate a department. You are required to be familiar with Standard Operating Procedure (Supply), basic job duties, and act professionally (roleplay)." exp_map = list(EXP_TYPE_SUPPLY = 1200) + standard_paycheck = CREW_PAY_HIGH /datum/outfit/job/qm name = "Quartermaster" @@ -78,6 +79,7 @@ ) alt_titles = list("Mail Carrier", "Courier") outfit = /datum/outfit/job/cargo_tech + standard_paycheck = CREW_PAY_LOW /datum/outfit/job/cargo_tech name = "Cargo Technician" @@ -116,6 +118,7 @@ ) alt_titles = list("Metalworker", "Tinkerer") outfit = /datum/outfit/job/smith + standard_paycheck = CREW_PAY_LOW /datum/outfit/job/smith name = "Smith" @@ -150,6 +153,7 @@ ) alt_titles = list("Spelunker") outfit = /datum/outfit/job/mining + standard_paycheck = CREW_PAY_LOW /datum/outfit/job/mining name = "Shaft Miner" @@ -232,6 +236,7 @@ ) alt_titles = list("Salvage Technician", "Scavenger") outfit = /datum/outfit/job/explorer + standard_paycheck = CREW_PAY_LOW /datum/outfit/job/explorer name = "Explorer" @@ -265,6 +270,7 @@ selection_color = "#dddddd" access = list(ACCESS_BAR, ACCESS_MAINT_TUNNELS, ACCESS_WEAPONS, ACCESS_MINERAL_STOREROOM) outfit = /datum/outfit/job/bartender + standard_paycheck = CREW_PAY_LOW /datum/outfit/job/bartender name = "Bartender" @@ -313,6 +319,7 @@ ) alt_titles = list("Cook","Culinary Artist","Butcher") outfit = /datum/outfit/job/chef + standard_paycheck = CREW_PAY_LOW /datum/outfit/job/chef name = "Chef" @@ -353,6 +360,7 @@ ) alt_titles = list("Hydroponicist", "Botanical Researcher") outfit = /datum/outfit/job/hydro + standard_paycheck = CREW_PAY_LOW /datum/outfit/job/hydro name = "Botanist" @@ -393,6 +401,7 @@ ACCESS_THEATRE ) outfit = /datum/outfit/job/clown + standard_paycheck = CREW_PAY_LOW /datum/outfit/job/clown name = "Clown" @@ -488,6 +497,7 @@ ACCESS_THEATRE ) outfit = /datum/outfit/job/mime + standard_paycheck = CREW_PAY_LOW /datum/outfit/job/mime name = "Mime" @@ -547,6 +557,7 @@ ) alt_titles = list("Custodial Technician") outfit = /datum/outfit/job/janitor + standard_paycheck = CREW_PAY_LOW /datum/outfit/job/janitor name = "Janitor" @@ -586,6 +597,7 @@ ) alt_titles = list("Journalist") outfit = /datum/outfit/job/librarian + standard_paycheck = CREW_PAY_LOW /datum/outfit/job/librarian name = "Librarian" diff --git a/code/game/jobs/job/support_chaplain.dm b/code/game/jobs/job/support_chaplain.dm index 68d298425c6..2dbf0662ae3 100644 --- a/code/game/jobs/job/support_chaplain.dm +++ b/code/game/jobs/job/support_chaplain.dm @@ -16,6 +16,7 @@ ACCESS_MORGUE ) outfit = /datum/outfit/job/chaplain + standard_paycheck = CREW_PAY_LOW /datum/outfit/job/chaplain name = "Chaplain" diff --git a/code/game/machinery/computer/card.dm b/code/game/machinery/computer/card.dm index a902fd306df..4998755f185 100644 --- a/code/game/machinery/computer/card.dm +++ b/code/game/machinery/computer/card.dm @@ -509,10 +509,10 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) SSjobs.notify_dept_head(modify.rank, "[scan.registered_name] has transferred \"[modify.registered_name]\" the \"[oldrank]\" to \"[temp_t]\".") else var/list/access = list() + var/datum/job/jobdatum if(is_centcom() && islist(get_centcom_access(t1))) access = get_centcom_access(t1) else - var/datum/job/jobdatum for(var/jobtype in typesof(/datum/job)) var/datum/job/J = new jobtype if(ckey(J.title) == ckey(t1)) @@ -534,6 +534,9 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) SSjobs.notify_dept_head(t1, "[scan.registered_name] has transferred \"[modify.registered_name]\" the \"[jobnamedata]\" to \"[t1]\".") if(modify.owner_uid) SSjobs.slot_job_transfer(modify.rank, t1) + var/datum/money_account/account = modify.get_card_account() + if(account && jobdatum) + account.payday_amount = jobdatum.standard_paycheck var/mob/living/carbon/human/H = modify.getPlayer() if(istype(H)) @@ -573,6 +576,9 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) modify.lastlog = "[station_time_timestamp()]: DEMOTED by \"[scan.registered_name]\" ([scan.assignment]) from \"[jobnamedata]\" for: \"[reason]\"." SSjobs.notify_dept_head(modify.rank, "[scan.registered_name] ([scan.assignment]) has demoted \"[modify.registered_name]\" ([jobnamedata]) for \"[reason]\".") SSjobs.slot_job_transfer(modify.rank, "Assistant") + var/datum/money_account/account = modify.get_card_account() + if(account) + account.payday_amount = jobdatum.standard_paycheck modify.access = access modify.assignment = "Demoted" modify.icon_state = "id" @@ -600,6 +606,9 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) var/datum/job/job = SSjobs.GetJob(modify.rank) if(modify.assignment != "Demoted" && !(job.title in GLOB.command_positions)) job.current_positions-- + var/datum/money_account/account = modify.get_card_account() + if(account) + account.payday_amount = 0 modify.assignment = "Terminated" modify.access = list() modify.rank = "Terminated" diff --git a/code/modules/economy/money_account.dm b/code/modules/economy/money_account.dm index 8a8faf13f44..67af920bf74 100644 --- a/code/modules/economy/money_account.dm +++ b/code/modules/economy/money_account.dm @@ -28,7 +28,7 @@ ///Type of account this is var/account_type = ACCOUNT_TYPE_PERSONAL ///the amount this account receives every payday - var/payday_amount = CREW_BASE_PAY_LOW + var/payday_amount = CREW_PAY_ASSISTANT ///The nanobank programs associated with this account, used for notifying crew members through PDA, this is a lazy list var/list/associated_nanobank_programs @@ -40,7 +40,7 @@ ///pay deductions for the next pay period for this account, this is a lazy list var/list/pay_check_deductions -/datum/money_account/New(_account_name, starting_balance = 0, _security_level = ACCOUNT_SECURITY_ID, _account_type = ACCOUNT_TYPE_PERSONAL, _payday_amount = CREW_BASE_PAY_LOW) +/datum/money_account/New(_account_name, starting_balance = 0, _security_level = ACCOUNT_SECURITY_ID, _account_type = ACCOUNT_TYPE_PERSONAL, _payday_amount = CREW_PAY_ASSISTANT) account_name = _account_name credit_balance = starting_balance payday_amount = _payday_amount