-
-
Notifications
You must be signed in to change notification settings - Fork 444
/
Copy path_event_admin_setup.dm
181 lines (155 loc) · 6.92 KB
/
_event_admin_setup.dm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
/// 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