mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-18 13:43:27 +00:00
* Admins can now customize the space vines event. Also fixes a space vine event bugs. * skyrat edit --------- Co-authored-by: NamelessFairy <40036527+NamelessFairy@users.noreply.github.com> Co-authored-by: lessthanthree <83487515+lessthnthree@users.noreply.github.com>
182 lines
6.9 KiB
Plaintext
182 lines
6.9 KiB
Plaintext
/// Datum that holds a proc for additional options when running an event.
|
|
/// Prototypes are declared here, non-prototypes on the event files.
|
|
/datum/event_admin_setup
|
|
/// event control that owns this.
|
|
var/datum/round_event_control/event_control
|
|
|
|
/datum/event_admin_setup/New(event_control)
|
|
src.event_control = event_control
|
|
|
|
/datum/event_admin_setup/proc/prompt_admins()
|
|
SHOULD_CALL_PARENT(FALSE)
|
|
CRASH("Unimplemented prompt_admins() on [event_control]'s admin setup.")
|
|
|
|
/datum/event_admin_setup/proc/apply_to_event(datum/round_event/event)
|
|
SHOULD_CALL_PARENT(FALSE)
|
|
CRASH("Unimplemented apply_to_event() on [event_control]'s admin setup.")
|
|
|
|
/// A very common pattern is picking from a tgui list input, so this does that.
|
|
/// Supply a list in `get_list` and prompt admins will have the admin pick from it or cancel.
|
|
/datum/event_admin_setup/listed_options
|
|
/// Text to ask the user, for example "What deal would you like to offer the crew?"
|
|
var/input_text = "Unset Text"
|
|
/// If set, picking this will be the same as running the event without admin setup.
|
|
var/normal_run_option
|
|
/// if you want a special button, this will add it. Remember to actually handle that case for chosen in `apply_to_event`
|
|
/// Example is in scrubber_overflow.dm
|
|
var/special_run_option
|
|
/// Picked list option to be applied.
|
|
var/chosen
|
|
|
|
/datum/event_admin_setup/listed_options/proc/get_list()
|
|
SHOULD_CALL_PARENT(FALSE)
|
|
CRASH("Unimplemented get_list() on [event_control]'s admin setup.")
|
|
|
|
/datum/event_admin_setup/listed_options/prompt_admins()
|
|
var/list/options = get_list()
|
|
if(special_run_option)
|
|
options.Insert(1, special_run_option)
|
|
if(normal_run_option)
|
|
options.Insert(1, normal_run_option)
|
|
chosen = tgui_input_list(usr, input_text, event_control.name, options)
|
|
if(!chosen)
|
|
return ADMIN_CANCEL_EVENT
|
|
if(normal_run_option && chosen == normal_run_option)
|
|
chosen = null //no admin pick = runs as normal
|
|
|
|
/// For admin setups that want a custom string. Suggests what the event would have picked normally.
|
|
/datum/event_admin_setup/text_input
|
|
/// Text to ask the user, for example "What horrifying truth will you reveal?"
|
|
var/input_text = "Unset Text"
|
|
/// Picked string to be applied.
|
|
var/chosen
|
|
|
|
/// Returns a string to suggest to the admin, which would be what the event would have chosen.
|
|
/// No suggestion if an empty string, which is default behavior.
|
|
/datum/event_admin_setup/text_input/proc/get_text_suggestion()
|
|
return ""
|
|
|
|
/datum/event_admin_setup/text_input/prompt_admins()
|
|
var/suggestion = get_text_suggestion()
|
|
chosen = tgui_input_text(usr, input_text, event_control.name, suggestion)
|
|
if(!chosen)
|
|
return ADMIN_CANCEL_EVENT
|
|
|
|
/// Some events are not always a good idea when a game state is in a certain situation.
|
|
/// This runs a check and warns the admin.
|
|
/datum/event_admin_setup/warn_admin
|
|
/// Warning text shown to admin on the alert.
|
|
var/warning_text = "Unset warning text"
|
|
/// Message sent to other admins. Example: "has forced a shuttle catastrophe while a shuttle was already docked."
|
|
var/snitch_text = "Unset snitching text (be mad at coders AND the admin responsible)"
|
|
|
|
/datum/event_admin_setup/warn_admin/prompt_admins()
|
|
if(!should_warn())
|
|
return
|
|
var/mob/admin = usr
|
|
if(tgui_alert(usr, "WARNING: [warning_text]", event_control.name, list("Yes", "No")) == "Yes")
|
|
if(snitch_text)
|
|
message_admins("[admin.ckey] [snitch_text]")
|
|
else
|
|
return ADMIN_CANCEL_EVENT
|
|
|
|
/// Returns whether the admin should get an alert.
|
|
/datum/event_admin_setup/warn_admin/proc/should_warn()
|
|
SHOULD_CALL_PARENT(FALSE)
|
|
CRASH("Unimplemented should_warn() on [event_control]'s admin setup.")
|
|
|
|
/datum/event_admin_setup/warn_admin/apply_to_event(datum/round_event/event)
|
|
return
|
|
|
|
/datum/event_admin_setup/set_location
|
|
///Text shown when admins are queried about setting the target location.
|
|
var/input_text = "Aimed at the turf we're on?"
|
|
///Turf that will be passed onto the event.
|
|
var/atom/chosen_turf
|
|
|
|
/datum/event_admin_setup/set_location/prompt_admins()
|
|
var/set_location = tgui_alert(usr, input_text, event_control.name, list("Yes", "No", "Cancel"))
|
|
switch(set_location)
|
|
if("Yes")
|
|
chosen_turf = get_turf(usr)
|
|
if("No")
|
|
chosen_turf = null
|
|
else
|
|
return ADMIN_CANCEL_EVENT
|
|
|
|
/datum/event_admin_setup/input_number
|
|
///Text shown when admins are queried about what number to set.
|
|
var/input_text = "Unset text"
|
|
///The value the number will be set to by default
|
|
var/default_value
|
|
///The highest value setable by the admin.
|
|
var/max_value = 10000
|
|
///The lowest value setable by the admin
|
|
var/min_value = 0
|
|
///Value selected by the admin
|
|
var/chosen_value
|
|
|
|
/datum/event_admin_setup/input_number/prompt_admins()
|
|
chosen_value = tgui_input_number(usr, input_text, event_control.name, default_value, max_value, min_value)
|
|
if(isnull(chosen_value))
|
|
return ADMIN_CANCEL_EVENT
|
|
|
|
///For events that mandate a set number of candidates to function
|
|
/datum/event_admin_setup/minimum_candidate_requirement
|
|
///Text shown when there are not enough candidates
|
|
var/output_text = "There are no candidates eligible to..."
|
|
///Minimum number of candidates for the event to function
|
|
var/min_candidates = 1
|
|
|
|
/datum/event_admin_setup/minimum_candidate_requirement/prompt_admins()
|
|
var/candidate_count = count_candidates()
|
|
if(candidate_count < min_candidates)
|
|
tgui_alert(usr, output_text, "Error")
|
|
return ADMIN_CANCEL_EVENT
|
|
tgui_alert(usr, "[candidate_count] candidates found!", event_control.name)
|
|
|
|
/// Checks for candidates. Should return the total number of candidates
|
|
/datum/event_admin_setup/minimum_candidate_requirement/proc/count_candidates()
|
|
SHOULD_CALL_PARENT(FALSE)
|
|
CRASH("Unimplemented count_candidates() on [event_control]'s admin setup.")
|
|
|
|
/datum/event_admin_setup/minimum_candidate_requirement/apply_to_event(datum/round_event/event)
|
|
return
|
|
|
|
///For events that require a true/false question
|
|
/datum/event_admin_setup/question
|
|
///Question shown to the admin.
|
|
var/input_text = "Are you sure you would like to do this?"
|
|
///Value passed to the event.
|
|
var/chosen
|
|
|
|
/datum/event_admin_setup/question/prompt_admins()
|
|
var/response = tgui_alert(usr, input_text , event_control.name , list("Yes", "No", "Cancel"))
|
|
switch(response)
|
|
if("Yes")
|
|
chosen = TRUE
|
|
if("No")
|
|
chosen = FALSE
|
|
else
|
|
return ADMIN_CANCEL_EVENT
|
|
|
|
/datum/event_admin_setup/multiple_choice
|
|
///Text shown to the admin when queried about which options they want to pick.
|
|
var/input_text = "Unset Text"
|
|
///The minimum number of choices an admin must make for this event.
|
|
var/min_choices = 1
|
|
///The maximum number of choices that the admin can make for this event.
|
|
var/max_choices = 50
|
|
///List of choices returned by this setup to the event.
|
|
var/list/choices = list()
|
|
|
|
/datum/event_admin_setup/multiple_choice/proc/get_options()
|
|
SHOULD_CALL_PARENT(FALSE)
|
|
CRASH("Unimplemented get_options() on [event_control]'s admin setup.")
|
|
|
|
/datum/event_admin_setup/multiple_choice/prompt_admins()
|
|
var/list/options = get_options()
|
|
choices = tgui_input_checkboxes(usr, input_text, event_control.name, options, min_choices, max_choices)
|
|
if(isnull(choices))
|
|
return ADMIN_CANCEL_EVENT
|