Files
MrMelbert f1234d1d3f Fix master skew (#92568)
Yippee
2025-08-19 22:39:36 -04:00

111 lines
5.3 KiB
Plaintext

///Everything within this file is an edited form from this file, stripping it of some various components because they are not needed for the PDA app: code/game/machinery/civilian_bounties.dm
///Percentage of a civilian bounty the civilian will make.
#define CIV_BOUNTY_SPLIT 30
/datum/computer_file/program/civilianbounties
filename = "bountyapp"
filedesc = "Civilian Bounties"
downloader_category = PROGRAM_CATEGORY_SUPPLY
program_open_overlay = "request"
extended_desc = "Nanotrasen Civilian Bounty Requisition Network interface for displaying wanted items."
program_flags = PROGRAM_ON_NTNET_STORE | PROGRAM_REQUIRES_NTNET
can_run_on_flags = PROGRAM_LAPTOP | PROGRAM_PDA
size = 5
tgui_id = "NtosCivCargoHoldTerminal"
program_icon = FA_ICON_BOXES_STACKED
var/status_report = "Ready for delivery."
var/points = 0
/datum/computer_file/program/civilianbounties/ui_data(mob/user)
var/list/data = list()
data["points"] = points
data["status_report"] = status_report
data["id_inserted"] = computer.stored_id
if(computer.stored_id?.registered_account)
if(computer.stored_id.registered_account.civilian_bounty)
data["id_bounty_info"] = computer.stored_id.registered_account.civilian_bounty.description
data["id_bounty_num"] = computer.stored_id.registered_account.bounty_num()
data["id_bounty_value"] = (computer.stored_id.registered_account.civilian_bounty.reward) * (CIV_BOUNTY_SPLIT/100)
if(computer.stored_id.registered_account.bounties)
data["picking"] = TRUE
data["id_bounty_names"] = list(computer.stored_id.registered_account.bounties[1].name,
computer.stored_id.registered_account.bounties[2].name,
computer.stored_id.registered_account.bounties[3].name)
data["id_bounty_infos"] = list(computer.stored_id.registered_account.bounties[1].description,
computer.stored_id.registered_account.bounties[2].description,
computer.stored_id.registered_account.bounties[3].description)
data["id_bounty_values"] = list(computer.stored_id.registered_account.bounties[1].reward * (CIV_BOUNTY_SPLIT/100),
computer.stored_id.registered_account.bounties[2].reward * (CIV_BOUNTY_SPLIT/100),
computer.stored_id.registered_account.bounties[3].reward * (CIV_BOUNTY_SPLIT/100))
else
data["picking"] = FALSE
return data
/datum/computer_file/program/civilianbounties/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state)
. = ..()
var/mob/user = ui.user
switch(action)
if("pick")
pick_bounty(params["value"])
if("bounty")
add_bounties(user, 0)
///Here is where cargo bounties are added to the player's bank accounts, then adjusted and scaled into a civilian bounty.
/datum/computer_file/program/civilianbounties/proc/add_bounties(mob/user, cooldown_reduction = 0)
var/datum/bank_account/id_account = computer.stored_id?.registered_account
if(!id_account)
return
if((id_account.civilian_bounty || id_account.bounties) && !COOLDOWN_FINISHED(id_account, bounty_timer))
var/time_left = DisplayTimeText(COOLDOWN_TIMELEFT(id_account, bounty_timer), round_seconds_to = 1)
computer.balloon_alert(user, "try again in [time_left]!")
return FALSE
if(!id_account.account_job)
computer.say("Requesting ID card has no job assignment registered!")
return FALSE
var/list/datum/bounty/crumbs = generate_bounty_list(id_account.account_job.bounty_types)
COOLDOWN_START(id_account, bounty_timer, (5 MINUTES) - cooldown_reduction)
id_account.bounties = crumbs
/**
* Proc that assigned a civilian bounty to an ID card, from the list of potential bounties that that bank account currently has available.
* Available choices are assigned during add_bounties, and one is locked in here.
*
* @param choice The index of the bounty in the list of bounties that the player can choose from.
*/
/datum/computer_file/program/civilianbounties/proc/pick_bounty(datum/bounty/choice)
var/datum/bank_account/id_account = computer.stored_id?.registered_account
if(!id_account?.bounties?[choice])
playsound(computer.loc, 'sound/machines/synth/synth_no.ogg', 40 , TRUE)
return
id_account.civilian_bounty = id_account.bounties[choice]
id_account.bounties = null
SSblackbox.record_feedback("tally", "bounties_assigned", 1, id_account.civilian_bounty.type)
return id_account.civilian_bounty
/**
* Generates a list of bounties for use with the civilian bounty pad, this is virtually identical to the stuff contained within: code/game/machinery/civilian_bounties.dm
* @param bounty_types the define taken from a job for selection of a random_bounty() proc.
* @param bounty_rolls the number of bounties to be selected from.
* @param assistant_failsafe Do we guarentee one assistant bounty per generated list? Used for non-assistant jobs to give an easier alternative to that job's default bounties.
*/
/datum/computer_file/program/civilianbounties/proc/generate_bounty_list(bounty_types, bounty_rolls = 3, assistant_failsafe = TRUE)
var/list/rolling_list = list()
if(assistant_failsafe)
rolling_list += random_bounty(CIV_JOB_BASIC)
while(bounty_rolls > 1)
var/datum/bounty/potential_bounty = random_bounty(bounty_types)
var/repeats_bool = FALSE
for(var/datum/iterator in rolling_list)
if(iterator.type == potential_bounty.type)
repeats_bool = TRUE
if(repeats_bool)
continue
rolling_list += potential_bounty
bounty_rolls -= 1
return rolling_list
#undef CIV_BOUNTY_SPLIT