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]
- - Reward: [B.reward_string()]
- - Completed: [B.completion_string()]
"}
-
-/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={(
- act('Print')} />
- )}>
-
-
-
- Bounty Object
-
-
- Description
-
-
- Progress
-
-
- Value
-
-
- Claim
-
-
- {bountydata.map(bounty => (
-
-
- {bounty.name}
-
-
- {bounty.description}
-
-
- {bounty.priority === 1
- ? High Priority
- : ""}
- {bounty.completion_string}
-
-
- {bounty.reward_string}
-
-
- act('ClaimBounty', {
- bounty: bounty.bounty_ref,
- })} />
-
-
- ))}
-
-
-
-
- );
-};
-
-const BountyHeader = (props, context) => {
- const { act, data } = useBackend(context);
- const {
- stored_cash,
- } = data;
- return (
-
- formatMoney(value)} />
- {' credits'}
-
- );
-};