mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-11 10:11:09 +00:00
## About The Pull Request `/proc/flatten_list()` -> `/proc/assoc_to_values()`, also changes the code doc to mirror the language of `assoc_to_keys()`'s code doc ## Why It's Good For The Game Having a proc called `assoc_to_keys` that takes an associative list and returns a list of the keys, and also having a proc that takes an associative list and returns a list of the values, and the latter not being called `assoc_to_values` is very funny ## Changelog 🆑 code: renamed flatten_list proc to assoc_to_values /🆑 --------- Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
117 lines
4.2 KiB
Plaintext
117 lines
4.2 KiB
Plaintext
|
|
/// Verb to open the create command report window and send command reports.
|
|
ADMIN_VERB(dynamic_tester, R_DEBUG, "Dynamic Tester", "See dynamic probabilities.", ADMIN_CATEGORY_DEBUG)
|
|
BLACKBOX_LOG_ADMIN_VERB("Dynamic Tester")
|
|
var/datum/dynamic_tester/tgui = new()
|
|
tgui.ui_interact(user.mob)
|
|
|
|
/datum/dynamic_tester
|
|
/// Instances of every roundstart ruleset
|
|
var/list/roundstart_rulesets = list()
|
|
/// Instances of every midround ruleset
|
|
var/list/midround_rulesets = list()
|
|
|
|
/// A formatted report of the weights of each roundstart ruleset, refreshed occasionally and sent to the UI.
|
|
var/list/roundstart_ruleset_report = list()
|
|
/// A formatted report of the weights of each light midround ruleset, refreshed occasionally and sent to the UI.
|
|
var/list/light_midround_ruleset_report = list()
|
|
/// A formatted report of the weights of each heavy midround ruleset, refreshed occasionally and sent to the UI.
|
|
var/list/heavy_midround_ruleset_report = list()
|
|
|
|
/// What is the tier we are testing?
|
|
var/tier = 1
|
|
/// How many players are we testing with?
|
|
var/num_players = 10
|
|
|
|
/datum/dynamic_tester/New()
|
|
for(var/datum/dynamic_ruleset/rtype as anything in subtypesof(/datum/dynamic_ruleset/roundstart))
|
|
if(!initial(rtype.config_tag))
|
|
continue
|
|
var/datum/dynamic_ruleset/roundstart/created = new rtype(SSdynamic.get_config())
|
|
roundstart_rulesets += created
|
|
// snowflake so we can see headrev stats
|
|
if(istype(created, /datum/dynamic_ruleset/roundstart/revolution))
|
|
var/datum/dynamic_ruleset/roundstart/revolution/revs = created
|
|
revs.heads_necessary = 0
|
|
|
|
for(var/datum/dynamic_ruleset/rtype as anything in subtypesof(/datum/dynamic_ruleset/midround))
|
|
if(!initial(rtype.config_tag))
|
|
continue
|
|
var/datum/dynamic_ruleset/midround/created = new rtype(SSdynamic.get_config())
|
|
midround_rulesets += created
|
|
|
|
update_reports()
|
|
|
|
/datum/dynamic_tester/ui_state(mob/user)
|
|
return ADMIN_STATE(R_DEBUG)
|
|
|
|
/datum/dynamic_tester/ui_close()
|
|
qdel(src)
|
|
|
|
/datum/dynamic_tester/ui_interact(mob/user, datum/tgui/ui)
|
|
ui = SStgui.try_update_ui(user, src, ui)
|
|
if(!ui)
|
|
ui = new(user, src, "DynamicTester")
|
|
ui.open()
|
|
|
|
/datum/dynamic_tester/ui_static_data(mob/user)
|
|
var/list/data = list()
|
|
|
|
data["tier"] = tier
|
|
data["num_players"] = num_players
|
|
data["roundstart_ruleset_report"] = assoc_to_values(roundstart_ruleset_report)
|
|
data["light_midround_ruleset_report"] = assoc_to_values(light_midround_ruleset_report)
|
|
data["heavy_midround_ruleset_report"] = assoc_to_values(heavy_midround_ruleset_report)
|
|
|
|
return data
|
|
|
|
/datum/dynamic_tester/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state)
|
|
. = ..()
|
|
if(.)
|
|
return
|
|
|
|
switch(action)
|
|
if("set_num_players")
|
|
var/old_num = num_players
|
|
num_players = max(text2num(params["num_players"]), 1)
|
|
if(old_num != num_players)
|
|
update_reports()
|
|
return TRUE
|
|
|
|
if("set_tier")
|
|
var/old_tier = tier
|
|
tier = max(text2num(params["tier"]), 1)
|
|
if(old_tier != tier)
|
|
update_reports()
|
|
return TRUE
|
|
|
|
/datum/dynamic_tester/proc/update_reports()
|
|
roundstart_ruleset_report.Cut()
|
|
for(var/datum/dynamic_ruleset/roundstart/ruleset as anything in roundstart_rulesets)
|
|
var/comment = ""
|
|
if(istype(ruleset, /datum/dynamic_ruleset/roundstart/revolution))
|
|
var/datum/dynamic_ruleset/roundstart/revolution/revs = ruleset
|
|
comment = " (Assuming [initial(revs.heads_necessary)] heads of staff)"
|
|
|
|
roundstart_ruleset_report[ruleset] = list(
|
|
"name" = ruleset.name,
|
|
"weight" = ruleset.get_weight(num_players, tier),
|
|
"max_candidates" = ruleset.get_antag_cap(num_players, ruleset.max_antag_cap || ruleset.min_antag_cap),
|
|
"min_candidates" = ruleset.get_antag_cap(num_players, ruleset.min_antag_cap),
|
|
"comment" = comment,
|
|
)
|
|
|
|
light_midround_ruleset_report.Cut()
|
|
heavy_midround_ruleset_report.Cut()
|
|
for(var/datum/dynamic_ruleset/midround/ruleset as anything in midround_rulesets)
|
|
var/list/list_to_add = ruleset.midround_type == LIGHT_MIDROUND ? light_midround_ruleset_report : heavy_midround_ruleset_report
|
|
list_to_add[ruleset] = list(
|
|
"name" = ruleset.name,
|
|
"weight" = ruleset.get_weight(num_players, tier),
|
|
"max_candidates" = ruleset.get_antag_cap(num_players, ruleset.max_antag_cap || ruleset.min_antag_cap),
|
|
"min_candidates" = ruleset.get_antag_cap(num_players, ruleset.min_antag_cap),
|
|
)
|
|
|
|
|
|
update_static_data_for_all_viewers()
|