mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-28 10:31:59 +00:00
* Enforce preserving parent proc return values across ui_act call stacks (#53964) All ui_act procs should call parent by default. All procs should preserve the value of the parent proc when it's TRUTHY and pass it down the call stack. No UI should be interactible when its flags or state indicate it should not be, except when explicity overriden by child procs intentionally disregarding parent return values to achieve a specific goal. * Enforce preserving parent proc return values across ui_act call stacks Co-authored-by: Timberpoes <silent_insomnia_pp@hotmail.co.uk>
121 lines
4.5 KiB
Plaintext
121 lines
4.5 KiB
Plaintext
/datum/computer_file/program/bounty_board
|
|
filename = "bountyboard"
|
|
filedesc = "Bounty Board Request Network"
|
|
program_icon_state = "bountyboard"
|
|
extended_desc = "A multi-platform network for placing requests across the station, with payment across the network being possible.."
|
|
requires_ntnet = TRUE
|
|
size = 10
|
|
tgui_id = "NtosRequestKiosk"
|
|
///Reference to the currently logged in user.
|
|
var/datum/bank_account/current_user
|
|
///The station request datum being affected by UI actions.
|
|
var/datum/station_request/active_request
|
|
///Value of the currently bounty input
|
|
var/bounty_value = 1
|
|
///Text of the currently written bounty
|
|
var/bounty_text = ""
|
|
///Has the app been added to the network yet?
|
|
var/networked = FALSE
|
|
|
|
/datum/computer_file/program/bounty_board/ui_data(mob/user)
|
|
var/list/data = get_header_data()
|
|
var/list/formatted_requests = list()
|
|
var/list/formatted_applicants = list()
|
|
var/obj/item/computer_hardware/card_slot/card_slot = computer.all_components[MC_CARD]
|
|
if(!networked)
|
|
GLOB.allbountyboards += computer
|
|
networked = TRUE
|
|
if(card_slot && card_slot.stored_card && card_slot.stored_card.registered_account)
|
|
current_user = card_slot.stored_card.registered_account
|
|
for(var/i in GLOB.request_list)
|
|
if(!i)
|
|
continue
|
|
var/datum/station_request/request = i
|
|
formatted_requests += list(list("owner" = request.owner, "value" = request.value, "description" = request.description, "acc_number" = request.req_number))
|
|
if(request.applicants)
|
|
for(var/datum/bank_account/j in request.applicants)
|
|
formatted_applicants += list(list("name" = j.account_holder, "request_id" = request.owner_account.account_id, "requestee_id" = j.account_id))
|
|
if(current_user)
|
|
data["accountName"] = current_user.account_holder
|
|
data["requests"] = formatted_requests
|
|
data["applicants"] = formatted_applicants
|
|
data["bountyValue"] = bounty_value
|
|
data["bountyText"] = bounty_text
|
|
return data
|
|
|
|
/datum/computer_file/program/bounty_board/ui_act(action, list/params)
|
|
. = ..()
|
|
if(.)
|
|
return
|
|
var/current_ref_num = params["request"]
|
|
var/current_app_num = params["applicant"]
|
|
var/datum/bank_account/request_target
|
|
if(current_ref_num)
|
|
for(var/datum/station_request/i in GLOB.request_list)
|
|
if("[i.req_number]" == "[current_ref_num]")
|
|
active_request = i
|
|
break
|
|
if(active_request)
|
|
for(var/datum/bank_account/j in active_request.applicants)
|
|
if("[j.account_id]" == "[current_app_num]")
|
|
request_target = j
|
|
break
|
|
switch(action)
|
|
if("createBounty")
|
|
if(!current_user || !bounty_text)
|
|
playsound(src, 'sound/machines/buzz-sigh.ogg', 20, TRUE)
|
|
return TRUE
|
|
for(var/datum/station_request/i in GLOB.request_list)
|
|
if("[i.req_number]" == "[current_user.account_id]")
|
|
computer.say("Account already has active bounty.")
|
|
return
|
|
var/datum/station_request/curr_request = new /datum/station_request(current_user.account_holder, bounty_value,bounty_text,current_user.account_id, current_user)
|
|
GLOB.request_list += list(curr_request)
|
|
for(var/obj/i in GLOB.allbountyboards)
|
|
i.say("New bounty has been added!")
|
|
playsound(i.loc, 'sound/effects/cashregister.ogg', 30, TRUE)
|
|
return TRUE
|
|
if("apply")
|
|
if(!current_user)
|
|
computer.say("Please swipe a valid ID first.")
|
|
return TRUE
|
|
if(current_user.account_holder == active_request.owner)
|
|
playsound(computer, 'sound/machines/buzz-sigh.ogg', 20, TRUE)
|
|
return TRUE
|
|
active_request.applicants += list(current_user)
|
|
if("payApplicant")
|
|
if(!current_user)
|
|
return
|
|
if(!current_user.has_money(active_request.value) || (current_user.account_holder != active_request.owner))
|
|
playsound(computer, 'sound/machines/buzz-sigh.ogg', 30, TRUE)
|
|
return
|
|
request_target.transfer_money(current_user, active_request.value)
|
|
computer.say("Paid out [active_request.value] credits.")
|
|
return TRUE
|
|
if("clear")
|
|
if(current_user)
|
|
current_user = null
|
|
computer.say("Account Reset.")
|
|
return TRUE
|
|
if("deleteRequest")
|
|
if(!current_user)
|
|
playsound(computer, 'sound/machines/buzz-sigh.ogg', 20, TRUE)
|
|
return TRUE
|
|
if(active_request.owner != current_user.account_holder)
|
|
playsound(computer, 'sound/machines/buzz-sigh.ogg', 20, TRUE)
|
|
return TRUE
|
|
computer.say("Deleted current request.")
|
|
GLOB.request_list.Remove(active_request)
|
|
return TRUE
|
|
if("bountyVal")
|
|
bounty_value = text2num(params["bountyval"])
|
|
if(!bounty_value)
|
|
bounty_value = 1
|
|
if("bountyText")
|
|
bounty_text = (params["bountytext"])
|
|
. = TRUE
|
|
|
|
/datum/computer_file/program/bounty_board/Destroy()
|
|
GLOB.allbountyboards -= computer
|
|
. = ..()
|