blackbox dynamic ruleset selections and budget (#28890)

* blackbox dynamic ruleset selections and budget

* record both ruleset and antag budget
This commit is contained in:
warriorstar-orion
2025-04-08 13:58:42 +00:00
committed by GitHub
parent 302ab85370
commit 3177ea2e9f
2 changed files with 11 additions and 1 deletions
@@ -122,6 +122,7 @@
/datum/ruleset/proc/roundstart_post_setup(datum/game_mode/dynamic)
for(var/datum/mind/antag as anything in pre_antags)
antag.add_antag_datum(antagonist_type)
SSblackbox.record_feedback("nested tally", "dynamic_selections", 1, list("roundstart", "[antagonist_type]"))
/datum/ruleset/proc/refund(info)
// not enough antagonists signed up!!! idk what to do. The only real solution is to procedurally allocate budget, which will result in 1000x more get_players_for_role() calls. Which is not cheap.
@@ -170,6 +171,7 @@
for(var/i in 1 to late_antag_amount)
var/datum/mind/antag = pick_n_take(possible_antags)
antag.add_antag_datum(antagonist_type)
SSblackbox.record_feedback("nested tally", "dynamic_selections", 1, list("latespawn", "[antagonist_type]"))
log_dynamic("Latespawned [late_antag_amount] [name]\s.")
message_admins("Dynamic latespawned [late_antag_amount] [name]\s.")
@@ -196,6 +198,7 @@
traitor_datum.delayed_objectives = TRUE
traitor_datum.addtimer(CALLBACK(traitor_datum, TYPE_PROC_REF(/datum/antagonist/traitor, reveal_delayed_objectives)), latespawn_time, TIMER_DELETE_ME)
antag.add_antag_datum(traitor_datum)
SSblackbox.record_feedback("nested tally", "dynamic_selections", 1, list("roundstart", "[antagonist_type]"))
/datum/ruleset/traitor/autotraitor
name = "Autotraitor"
@@ -287,6 +290,7 @@
/datum/ruleset/team/roundstart_post_setup(datum/game_mode/dynamic)
if(unique_team)
SSblackbox.record_feedback("nested tally", "dynamic_selections", 1, list("roundstart", "[team_type]"))
new team_type(pre_antags)
return
stack_trace("Undefined behavior for dynamic non-unique teams!")
+7 -1
View File
@@ -46,8 +46,12 @@ GLOBAL_LIST_EMPTY(dynamic_forced_rulesets)
/datum/game_mode/dynamic/proc/allocate_ruleset_budget()
var/ruleset_budget = text2num(GLOB.dynamic_forced_rulesets["budget"] || pickweight(list("0" = 3, "1" = 8, "2" = 12, "3" = 3)))
antag_budget = calculate_budget(num_players())
var/num_players = num_players()
antag_budget = calculate_budget(num_players)
log_dynamic("Allocated gamemode budget: [ruleset_budget]")
SSblackbox.record_feedback("tally", "dynamic_budget", ruleset_budget, "ruleset")
SSblackbox.record_feedback("tally", "dynamic_budget", antag_budget, "antag")
SSblackbox.record_feedback("amount", "dynamic_num_players", num_players)
var/list/possible_rulesets = list()
for(var/datum/ruleset/ruleset as anything in subtypesof(/datum/ruleset))
if(ruleset.ruleset_weight <= 0)
@@ -57,6 +61,8 @@ GLOBAL_LIST_EMPTY(dynamic_forced_rulesets)
var/datum/ruleset/new_ruleset = new ruleset()
possible_rulesets[new_ruleset] = new_ruleset.ruleset_weight
for(var/datum/ruleset/ruleset in possible_rulesets)
SSblackbox.record_feedback("tally", "dynamic_possible_rulesets_by_weight", ruleset.ruleset_weight, "[ruleset.type]")
log_dynamic("Available rulesets: [english_list(possible_rulesets)]")
for(var/datum/ruleset/ruleset as anything in GLOB.dynamic_forced_rulesets)