mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-15 20:22:07 +00:00
## About The Pull Request Removes pAI subsystem/card's reliance on clients and makes them unstoppable, which didn't really make much sense for it to be this way in the first place since it's something that has to always happen and is something that isn't client-controlled. Also removed case of ``usr`` use in ui act. ## Why It's Good For The Game Closes https://github.com/tgstation/tgstation/issues/70401 ## Changelog 🆑 fix: pAI requests should no longer randomly permanently break in a round. /🆑
104 lines
3.1 KiB
Plaintext
104 lines
3.1 KiB
Plaintext
SUBSYSTEM_DEF(pai)
|
|
name = "pAI"
|
|
flags = SS_NO_INIT|SS_NO_FIRE
|
|
|
|
/// List of pAI candidates, including those not submitted.
|
|
var/list/candidates = list()
|
|
/// All pAI cards on the map.
|
|
var/list/pai_card_list = list()
|
|
/// Prevents a pAI from submitting itself repeatedly and sounding an alert.
|
|
var/submit_spam = FALSE
|
|
|
|
/datum/controller/subsystem/pai/ui_interact(mob/user, datum/tgui/ui)
|
|
. = ..()
|
|
ui = SStgui.try_update_ui(user, src, ui)
|
|
if(!ui)
|
|
ui = new(user, src, "PaiSubmit")
|
|
ui.open()
|
|
ui.set_autoupdate(FALSE)
|
|
|
|
/datum/controller/subsystem/pai/Recover()
|
|
. = ..()
|
|
candidates = SSpai.candidates
|
|
pai_card_list = SSpai.pai_card_list
|
|
|
|
/datum/controller/subsystem/pai/ui_state(mob/user)
|
|
return GLOB.observer_state
|
|
|
|
/datum/controller/subsystem/pai/ui_static_data(mob/user)
|
|
. = ..()
|
|
var/list/data = list()
|
|
var/datum/pai_candidate/candidate = candidates[user.ckey]
|
|
if(isnull(candidate))
|
|
return data
|
|
data["comments"] = candidate.comments
|
|
data["description"] = candidate.description
|
|
data["name"] = candidate.name
|
|
return data
|
|
|
|
/datum/controller/subsystem/pai/ui_act(action, list/params, datum/tgui/ui)
|
|
. = ..()
|
|
if(.)
|
|
return TRUE
|
|
var/mob/user = ui.user
|
|
var/datum/pai_candidate/candidate = candidates[user.ckey]
|
|
if(is_banned_from(user.ckey, ROLE_PAI))
|
|
to_chat(user, span_warning("You are banned from playing pAI!"))
|
|
ui.close()
|
|
return FALSE
|
|
if(isnull(candidate))
|
|
to_chat(user, span_warning("There was an error. Please resubmit."))
|
|
ui.close()
|
|
return FALSE
|
|
switch(action)
|
|
if("submit")
|
|
candidate.comments = trim(params["comments"], MAX_BROADCAST_LEN)
|
|
candidate.description = trim(params["description"], MAX_BROADCAST_LEN)
|
|
candidate.name = trim(params["name"], MAX_NAME_LEN)
|
|
candidate.ckey = user.ckey
|
|
candidate.ready = TRUE
|
|
ui.close()
|
|
submit_alert(user)
|
|
return TRUE
|
|
if("save")
|
|
candidate.comments = params["comments"]
|
|
candidate.description = params["description"]
|
|
candidate.name = params["name"]
|
|
candidate.savefile_save(user)
|
|
return TRUE
|
|
if("load")
|
|
candidate.savefile_load(user)
|
|
ui.send_full_update()
|
|
return TRUE
|
|
return FALSE
|
|
|
|
/**
|
|
* This is the primary window proc when the pAI candidate
|
|
* hud menu is pressed by observers.
|
|
*
|
|
* @params {mob} user The ghost doing the pressing.
|
|
*/
|
|
/datum/controller/subsystem/pai/proc/recruit_window(mob/user)
|
|
/// Searches for a previous candidate upon opening the menu
|
|
var/datum/pai_candidate/candidate = candidates[user.ckey]
|
|
if(isnull(candidate))
|
|
candidate = new(user.ckey)
|
|
candidates[user.ckey] = candidate
|
|
ui_interact(user)
|
|
|
|
|
|
/**
|
|
* Pings all pAI cards on the station that new candidates are available.
|
|
*/
|
|
/datum/controller/subsystem/pai/proc/submit_alert(mob/user)
|
|
if(submit_spam)
|
|
to_chat(user, span_warning("Your candidacy has been submitted, but pAI cards have been alerted too recently."))
|
|
return FALSE
|
|
submit_spam = TRUE
|
|
for(var/obj/item/pai_card/pai_card as anything in pai_card_list)
|
|
if(!pai_card.pai)
|
|
pai_card.alert_update()
|
|
to_chat(user, span_notice("Your pAI candidacy has been submitted!"))
|
|
addtimer(VARSET_CALLBACK(src, submit_spam, FALSE), PAI_SPAM_TIME, TIMER_UNIQUE|TIMER_DELETE_ME)
|
|
return TRUE
|