diff --git a/code/controllers/subsystem/economy.dm b/code/controllers/subsystem/economy.dm index 3f594e170e..88255f375e 100644 --- a/code/controllers/subsystem/economy.dm +++ b/code/controllers/subsystem/economy.dm @@ -52,6 +52,9 @@ SUBSYSTEM_DEF(economy) ///The modifier multiplied to the value of cargo pack prices. var/pack_price_modifier = 1 + var/civ_bounty_tracker = 0 + /// Contains the message to send to newscasters about earnings, updated on price_update() + /datum/controller/subsystem/economy/Initialize(timeofday) var/budget_to_hand_out = round(budget_pool / department_accounts.len) for(var/A in department_accounts) diff --git a/code/game/machinery/civilian_bountys.dm b/code/game/machinery/civilian_bountys.dm index f8650625d7..f195bdea12 100644 --- a/code/game/machinery/civilian_bountys.dm +++ b/code/game/machinery/civilian_bountys.dm @@ -92,9 +92,12 @@ stop_sending() if(curr_bounty.can_claim()) //Pay for the bounty with the ID's department funds. - inserted_scan_id.registered_account.transfer_money(SSeconomy.get_dep_account(inserted_scan_id.registered_account.account_job.paycheck_department), curr_bounty.reward) - status_report += "Bounty Completed! [curr_bounty.reward] credits have been paid out. " + status_report += "Bounty Completed! Please send your completed bounty cube to cargo for your automated payout shortly." inserted_scan_id.registered_account.reset_bounty() + SSeconomy.civ_bounty_tracker++ + var/obj/item/bounty_cube/reward = new /obj/item/bounty_cube(drop_location()) + reward.bounty_value = curr_bounty.reward + reward.AddComponent(/datum/component/pricetag, inserted_scan_id.registered_account, 10) pad.visible_message("[pad] activates!") flick(pad.sending_state,pad) pad.icon_state = pad.idle_state @@ -146,15 +149,7 @@ var/curr_time = round(((pot_acc.bounty_timer + (5 MINUTES))-world.time)/ (1 MINUTES), 0.01) to_chat(usr, "You already have an incomplete civilian bounty, try again in [curr_time] minutes to replace it!") return FALSE - var/datum/bounty/crumbs = random_bounty(pot_acc.account_job.bounty_types) //It's a good scene from War Dogs (2016). - /*if(SSeconomy.inflation_value() > 1) //lets try not to add inflation for right now - if(istype(crumbs, /datum/bounty/item)) - var/datum/bounty/item/items = crumbs - items.required_count = max(round((items.required_count)/(SSeconomy.inflation_value()*2)), 1) - if(istype(crumbs, /datum/bounty/reagent)) - var/datum/bounty/reagent/chems = crumbs - chems.required_volume = max(round((chems.required_volume)/SSeconomy.inflation_value()*2), 1) - crumbs.reward = round(crumbs.reward/(SSeconomy.inflation_value()*2))*/ + var/datum/bounty/crumbs = random_bounty(pot_acc.account_job.bounty_types) pot_acc.bounty_timer = world.time pot_acc.civilian_bounty = crumbs if("eject") @@ -201,6 +196,15 @@ updateUsrDialog() return TRUE +///Upon completion of a civilian bounty, one of these is created. It is sold to cargo to give the cargo budget bounty money, and the person who completed it cash. +/obj/item/bounty_cube + name = "Bounty Cube" + desc = "A bundle of compressed hardlight data, containing a completed bounty. Sell this on the cargo shuttle to claim it!" + icon = 'icons/obj/economy.dmi' + icon_state = "bounty_cube" + ///Value of the bounty that this bounty cube sells for. + var/bounty_value = 0 + ///Beacon to launch a new bounty setup when activated. /obj/item/civ_bounty_beacon diff --git a/code/game/objects/items/circuitboards/computer_circuitboards.dm b/code/game/objects/items/circuitboards/computer_circuitboards.dm index 7d23d25953..382764c586 100644 --- a/code/game/objects/items/circuitboards/computer_circuitboards.dm +++ b/code/game/objects/items/circuitboards/computer_circuitboards.dm @@ -352,10 +352,6 @@ name = "Bounty Pad (Computer Board)" build_path = /obj/machinery/computer/piratepad_control/civilian -// /obj/item/circuitboard/computer/bountypad -// name = "Bounty Pad (Computer Board)" -// build_path = /obj/machinery/computer/piratepad_control/civilian - /obj/item/circuitboard/computer/security/shuttle name = "Shuttlelinking Security Cameras (Computer Board)" icon_state = "generic" @@ -585,10 +581,6 @@ name = "Supply Request Console (Computer Board)" build_path = /obj/machinery/computer/cargo/request -/obj/item/circuitboard/computer/bounty - name = "Nanotrasen Bounty Console (Computer Board)" - build_path = /obj/machinery/computer/bounty - /obj/item/circuitboard/computer/ferry name = "Transport Ferry (Computer Board)" icon_state = "supply" diff --git a/code/modules/cargo/bounty.dm b/code/modules/cargo/bounty.dm index 4b24488a08..00d07c8df1 100644 --- a/code/modules/cargo/bounty.dm +++ b/code/modules/cargo/bounty.dm @@ -78,7 +78,7 @@ GLOBAL_LIST_EMPTY(bounties_list) // Returns a new bounty of random type, but does not add it to GLOB.bounties_list. /proc/random_bounty(var/guided = 0) var/bounty_num - if(guided) + if(guided && (guided != CIV_JOB_RANDOM)) bounty_num = guided else bounty_num = rand(1,13) diff --git a/code/modules/cargo/bounty_console.dm b/code/modules/cargo/bounty_console.dm deleted file mode 100644 index b2ee0e0e1a..0000000000 --- a/code/modules/cargo/bounty_console.dm +++ /dev/null @@ -1,65 +0,0 @@ -#define PRINTER_TIMEOUT 10 - -/obj/machinery/computer/bounty - name = "\improper Nanotrasen bounty console" - desc = "Used to check and claim bounties offered by Nanotrasen" - icon_screen = "bounty" - circuit = /obj/item/circuitboard/computer/bounty - light_color = "#E2853D"//orange - var/printer_ready = 0 //cooldown var - var/static/datum/bank_account/cargocash - -/obj/machinery/computer/bounty/Initialize(mapload) - . = ..() - printer_ready = world.time + PRINTER_TIMEOUT - cargocash = SSeconomy.get_dep_account(ACCOUNT_CAR) - -/obj/machinery/computer/bounty/proc/print_paper() - new /obj/item/paper/bounty_printout(loc) - -/obj/item/paper/bounty_printout - name = "paper - Bounties" - -/obj/item/paper/bounty_printout/Initialize(mapload) - . = ..() - info = "

Nanotrasen Cargo Bounties


" - update_icon() - - for(var/datum/bounty/B in GLOB.bounties_list) - if(B.claimed) - continue - info += {"

[B.name]

- "} - -/obj/machinery/computer/bounty/ui_interact(mob/user, datum/tgui/ui) - if(!GLOB.bounties_list.len) - setup_bounties() - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "CargoBountyConsole", name) - ui.open() - -/obj/machinery/computer/bounty/ui_data(mob/user) - var/list/data = list() - var/list/bountyinfo = list() - for(var/datum/bounty/B in GLOB.bounties_list) - bountyinfo += list(list("name" = B.name, "description" = B.description, "reward_string" = B.reward_string(), "completion_string" = B.completion_string() , "claimed" = B.claimed, "can_claim" = B.can_claim(), "priority" = B.high_priority, "bounty_ref" = REF(B))) - data["stored_cash"] = cargocash.account_balance - data["bountydata"] = bountyinfo - return data - -/obj/machinery/computer/bounty/ui_act(action,params) - if(..()) - return - switch(action) - if("ClaimBounty") - var/datum/bounty/cashmoney = locate(params["bounty"]) in GLOB.bounties_list - if(cashmoney) - cashmoney.claim() - return TRUE - if("Print") - if(printer_ready < world.time) - printer_ready = world.time + PRINTER_TIMEOUT - print_paper() - return diff --git a/code/modules/cargo/exports/civilain_bounty.dm b/code/modules/cargo/exports/civilain_bounty.dm new file mode 100644 index 0000000000..3d443fbad0 --- /dev/null +++ b/code/modules/cargo/exports/civilain_bounty.dm @@ -0,0 +1,8 @@ +/datum/export/bounty_box + cost = 1 + k_elasticity = 0 //Bounties are non-elastic funds. + unit_name = "completed bounty cube" + export_types = list(/obj/item/bounty_cube) + +/datum/export/bounty_box/get_cost(obj/item/bounty_cube/cube, allowed_categories, apply_elastic) + return cube.bounty_value diff --git a/code/modules/jobs/job_types/cargo_technician.dm b/code/modules/jobs/job_types/cargo_technician.dm index 1f87a5265d..f8e2f74d80 100644 --- a/code/modules/jobs/job_types/cargo_technician.dm +++ b/code/modules/jobs/job_types/cargo_technician.dm @@ -19,6 +19,7 @@ paycheck_department = ACCOUNT_CAR display_order = JOB_DISPLAY_ORDER_CARGO_TECHNICIAN + bounty_types = CIV_JOB_RANDOM threat = 0.2 /datum/outfit/job/cargo_tech diff --git a/code/modules/jobs/job_types/head_of_personnel.dm b/code/modules/jobs/job_types/head_of_personnel.dm index ce05f199a2..4c38fc4cf2 100644 --- a/code/modules/jobs/job_types/head_of_personnel.dm +++ b/code/modules/jobs/job_types/head_of_personnel.dm @@ -33,6 +33,7 @@ ACCESS_HOP, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY) paycheck = PAYCHECK_COMMAND paycheck_department = ACCOUNT_SRV + bounty_types = CIV_JOB_RANDOM display_order = JOB_DISPLAY_ORDER_HEAD_OF_PERSONNEL diff --git a/code/modules/jobs/job_types/quartermaster.dm b/code/modules/jobs/job_types/quartermaster.dm index 98343417c8..8ea7579127 100644 --- a/code/modules/jobs/job_types/quartermaster.dm +++ b/code/modules/jobs/job_types/quartermaster.dm @@ -27,6 +27,7 @@ ACCESS_SEC_DOORS, ACCESS_HEADS) paycheck = PAYCHECK_HARD //They can already buy stuff using cargo budget, don't give em a command-level paycheck. //alright i'll agree to that -qweq paycheck_department = ACCOUNT_CAR + bounty_types = CIV_JOB_RANDOM display_order = JOB_DISPLAY_ORDER_QUARTERMASTER blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/insanity) diff --git a/code/modules/modular_computers/file_system/programs/cargobounty.dm b/code/modules/modular_computers/file_system/programs/cargobounty.dm deleted file mode 100644 index 74ac44ade3..0000000000 --- a/code/modules/modular_computers/file_system/programs/cargobounty.dm +++ /dev/null @@ -1,47 +0,0 @@ -/datum/computer_file/program/bounty - filename = "bounty" - filedesc = "Nanotrasen Bounty Hunter" - program_icon_state = "bounty" - extended_desc = "A basic interface for supply personnel to check and claim bounties." - requires_ntnet = TRUE - transfer_access = ACCESS_CARGO - size = 10 - tgui_id = "NtosBountyConsole" - ///cooldown var for printing paper sheets. - var/printer_ready = 0 - ///The cargo account for grabbing the cargo account's credits. - var/static/datum/bank_account/cargocash - -/datum/computer_file/program/bounty/proc/print_paper() - new /obj/item/paper/bounty_printout(get_turf(computer)) - -/datum/computer_file/program/bounty/ui_interact(mob/user, datum/tgui/ui) - if(!GLOB.bounties_list.len) - setup_bounties() - printer_ready = world.time + PRINTER_TIMEOUT - cargocash = SSeconomy.get_dep_account(ACCOUNT_CAR) - . = ..() - -/datum/computer_file/program/bounty/ui_data(mob/user) - var/list/data = get_header_data() - var/list/bountyinfo = list() - for(var/datum/bounty/B in GLOB.bounties_list) - bountyinfo += list(list("name" = B.name, "description" = B.description, "reward_string" = B.reward_string(), "completion_string" = B.completion_string() , "claimed" = B.claimed, "can_claim" = B.can_claim(), "priority" = B.high_priority, "bounty_ref" = REF(B))) - data["stored_cash"] = cargocash.account_balance - data["bountydata"] = bountyinfo - return data - -/datum/computer_file/program/bounty/ui_act(action,params) - if(..()) - return - switch(action) - if("ClaimBounty") - var/datum/bounty/cashmoney = locate(params["bounty"]) in GLOB.bounties_list - if(cashmoney) - cashmoney.claim() - return TRUE - if("Print") - if(printer_ready < world.time) - printer_ready = world.time + PRINTER_TIMEOUT - print_paper() - return diff --git a/code/modules/research/designs/comp_board_designs/comp_board_designs_cargo.dm b/code/modules/research/designs/comp_board_designs/comp_board_designs_cargo.dm index f2514b6f9c..ea8e59a6b3 100644 --- a/code/modules/research/designs/comp_board_designs/comp_board_designs_cargo.dm +++ b/code/modules/research/designs/comp_board_designs/comp_board_designs_cargo.dm @@ -17,15 +17,7 @@ build_path = /obj/item/circuitboard/computer/cargo/request category = list("Computer Boards") departmental_flags = DEPARTMENTAL_FLAG_CARGO - -/datum/design/board/bounty - name = "Computer Design (Bounty Console)" - desc = "Allows for the construction of circuit boards used to build a Bounty Console." - id = "bounty" - build_path = /obj/item/circuitboard/computer/bounty - category = list("Computer Boards") - departmental_flags = DEPARTMENTAL_FLAG_CARGO - + /datum/design/board/mining name = "Computer Design (Outpost Status Display)" desc = "Allows for the construction of circuit boards used to build an outpost status display console." diff --git a/icons/obj/economy.dmi b/icons/obj/economy.dmi index a73f50ef7f..c8ac3c142c 100644 Binary files a/icons/obj/economy.dmi and b/icons/obj/economy.dmi differ diff --git a/tgstation.dme b/tgstation.dme index 90f21bf649..334c6f8985 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -1937,7 +1937,6 @@ #include "code\modules\buildmode\submodes\throwing.dm" #include "code\modules\buildmode\submodes\variable_edit.dm" #include "code\modules\cargo\bounty.dm" -#include "code\modules\cargo\bounty_console.dm" #include "code\modules\cargo\centcom_podlauncher.dm" #include "code\modules\cargo\console.dm" #include "code\modules\cargo\coupon.dm" @@ -1974,6 +1973,7 @@ #include "code\modules\cargo\bounties\slime.dm" #include "code\modules\cargo\bounties\special.dm" #include "code\modules\cargo\bounties\virus.dm" +#include "code\modules\cargo\exports\civilain_bounty.dm" #include "code\modules\cargo\exports\engineering.dm" #include "code\modules\cargo\exports\food_wine.dm" #include "code\modules\cargo\exports\gear.dm" @@ -2972,7 +2972,6 @@ #include "code\modules\modular_computers\file_system\programs\borg_monitor.dm" #include "code\modules\modular_computers\file_system\programs\budgetordering.dm" #include "code\modules\modular_computers\file_system\programs\card.dm" -#include "code\modules\modular_computers\file_system\programs\cargobounty.dm" #include "code\modules\modular_computers\file_system\programs\configurator.dm" #include "code\modules\modular_computers\file_system\programs\crewmanifest.dm" #include "code\modules\modular_computers\file_system\programs\file_browser.dm" diff --git a/tgui/packages/tgui/interfaces/CargoBountyConsole.js b/tgui/packages/tgui/interfaces/CargoBountyConsole.js deleted file mode 100644 index ad485231eb..0000000000 --- a/tgui/packages/tgui/interfaces/CargoBountyConsole.js +++ /dev/null @@ -1,119 +0,0 @@ -import { useBackend } from '../backend'; -import { AnimatedNumber, Box, Button, Section, Table } from '../components'; -import { formatMoney } from '../format'; -import { Window } from '../layouts'; - -export const CargoBountyConsole = (props, context) => { - const { act, data } = useBackend(context); - const { - bountydata = [], - } = data; - return ( - - -
} - buttons={( -
-
-
- ); -}; - -const BountyHeader = (props, context) => { - const { act, data } = useBackend(context); - const { - stored_cash, - } = data; - return ( - - formatMoney(value)} /> - {' credits'} - - ); -}; diff --git a/tgui/packages/tgui/interfaces/NtosBountyConsole.js b/tgui/packages/tgui/interfaces/NtosBountyConsole.js deleted file mode 100644 index bfd2b0e4c9..0000000000 --- a/tgui/packages/tgui/interfaces/NtosBountyConsole.js +++ /dev/null @@ -1,119 +0,0 @@ -import { useBackend } from '../backend'; -import { AnimatedNumber, Box, Button, Section, Table } from '../components'; -import { formatMoney } from '../format'; -import { NtosWindow } from '../layouts'; - -export const NtosBountyConsole = (props, context) => { - const { act, data } = useBackend(context); - const { - bountydata = [], - } = data; - return ( - - -
} - buttons={( -
-
-
- ); -}; - -const BountyHeader = (props, context) => { - const { act, data } = useBackend(context); - const { - stored_cash, - } = data; - return ( - - formatMoney(value)} /> - {' credits'} - - ); -};