mirror of
https://github.com/vgstation-coders/vgstation13.git
synced 2025-12-09 16:14:13 +00:00
Some Dynamic Logging QoL and Fix'd Forced Rulesets (#28206)
* fix forced rulesets * better
This commit is contained in:
@@ -138,7 +138,7 @@ var/stacking_limit = 90
|
||||
|
||||
/datum/gamemode/dynamic/GetScoreboard()
|
||||
|
||||
dat += "<h2>Dynamic Mode v1.0 - Threat Level = <font color='red'>[threat_level]%</font></h2><a href='?src=\ref[src];threatlog=1'>\[View Log\]</a>"
|
||||
dat += "<h2>Dynamic Mode - Threat Level = <font color='red'>[threat_level]%</font></h2><a href='?src=\ref[src];threatlog=1'>\[View Log\]</a>"
|
||||
|
||||
var/rules = list()
|
||||
if (executed_rules.len > 0)
|
||||
@@ -198,16 +198,16 @@ var/stacking_limit = 90
|
||||
if(player.ready && player.mind)
|
||||
rst_pop++
|
||||
if (rst_pop >= high_pop_limit)
|
||||
message_admins("High Population Override is in effect! ([rst_pop]/[high_pop_limit]) Threat Level will have more impact on which roles will appear, and player population less.")
|
||||
log_admin("High Population Override is in effect! ([rst_pop]/[high_pop_limit]) Threat Level will have more impact on which roles will appear, and player population less.")
|
||||
message_admins("DYNAMIC MODE: Mode: High Population Override is in effect! ([rst_pop]/[high_pop_limit]) Threat Level will have more impact on which roles will appear, and player population less.")
|
||||
log_admin("DYNAMIC MODE: High Population Override is in effect! ([rst_pop]/[high_pop_limit]) Threat Level will have more impact on which roles will appear, and player population less.")
|
||||
dynamic_stats = new
|
||||
dynamic_stats.starting_threat_level = threat_level
|
||||
|
||||
if (round(threat_level*10) == 666)
|
||||
forced_roundstart_ruleset += new /datum/dynamic_ruleset/roundstart/bloodcult()
|
||||
forced_roundstart_ruleset += new /datum/dynamic_ruleset/roundstart/vampire()
|
||||
log_admin("666 threat override.")
|
||||
message_admins("666 threat override.", 1)
|
||||
log_admin("DYNAMIC MODE: 666 threat override.")
|
||||
message_admins("DYNAMIC MODE: 666 threat override.", 1)
|
||||
|
||||
return 1
|
||||
|
||||
@@ -239,12 +239,15 @@ var/stacking_limit = 90
|
||||
if(player.ready && player.mind)
|
||||
roundstart_pop_ready++
|
||||
candidates.Add(player)
|
||||
message_admins("Listing [roundstart_rules.len] round start rulesets, and [candidates.len] players ready.")
|
||||
message_admins("DYNAMIC MODE: Listing [roundstart_rules.len] round start rulesets, and [candidates.len] players ready.")
|
||||
log_admin("DYNAMIC MODE: Listing [roundstart_rules.len] round start rulesets, and [candidates.len] players ready.")
|
||||
if (candidates.len <= 0)
|
||||
message_admins("Not a single player readied-up. The round will begin without any roles assigned.")
|
||||
message_admins("DYNAMIC MODE: Not a single player readied-up. The round will begin without any roles assigned.")
|
||||
log_admin("DYNAMIC MODE: Not a single player readied-up. The round will begin without any roles assigned.")
|
||||
return 1
|
||||
if (roundstart_rules.len <= 0)
|
||||
message_admins("There are no roundstart rules within the code, what the fuck? The round will begin without any roles assigned.")
|
||||
message_admins("DYNAMIC MODE: There are no roundstart rules within the code, what the fuck? The round will begin without any roles assigned.")
|
||||
log_admin("DYNAMIC MODE: There are no roundstart rules within the code, what the fuck? The round will begin without any roles assigned.")
|
||||
return 1
|
||||
if (forced_roundstart_ruleset.len > 0)
|
||||
rigged_roundstart()
|
||||
@@ -261,23 +264,50 @@ var/stacking_limit = 90
|
||||
return 1
|
||||
|
||||
/datum/gamemode/dynamic/proc/rigged_roundstart()
|
||||
message_admins("[forced_roundstart_ruleset.len] rulesets being forced. Will now attempt to draft players for them.")
|
||||
message_admins("DYNAMIC MODE: [forced_roundstart_ruleset.len] rulesets being forced. Will now attempt to draft players for them.")
|
||||
log_admin("DYNAMIC MODE: [forced_roundstart_ruleset.len] rulesets being forced. Will now attempt to draft players for them.")
|
||||
var/forced_rules = 0
|
||||
for (var/datum/dynamic_ruleset/roundstart/rule in forced_roundstart_ruleset)
|
||||
rule.mode = src
|
||||
rule.candidates = candidates.Copy()
|
||||
rule.trim_candidates()
|
||||
|
||||
if (rule.ready(1))//ignoring enemy job requirements
|
||||
picking_roundstart_rule(list(rule))
|
||||
forced_rules++
|
||||
for (var/datum/forced_ruleset/forced_rule in forced_roundstart_ruleset)//By checking in this order we allow admins to set up priorities among the forced rulesets.
|
||||
for (var/datum/dynamic_ruleset/roundstart/rule in roundstart_rules)
|
||||
if (forced_rule.name == rule.name)
|
||||
rule.candidates = candidates.Copy()
|
||||
rule.trim_candidates()
|
||||
if (rule.ready(TRUE))
|
||||
forced_rules++
|
||||
rule.calledBy = forced_rule.calledBy
|
||||
|
||||
message_admins("DYNAMIC MODE: <font size='3'>[rule.name]</font> successfully forced!")
|
||||
log_admin("DYNAMIC MODE: <font size='3'>[rule.name]</font> successfully forced!")
|
||||
|
||||
//we don't spend threat on forced rulesets
|
||||
threat_log += "[worldtime2text()]: Roundstart [rule.name] forced"
|
||||
|
||||
if (istype(rule, /datum/dynamic_ruleset/roundstart/delayed/))
|
||||
message_admins("DYNAMIC MODE: with a delay of [rule:delay/10] seconds.")
|
||||
log_admin("DYNAMIC MODE: with a delay of [rule:delay/10] seconds.")
|
||||
return pick_delay(rule)
|
||||
|
||||
if (rule.execute())//this should never fail since ready() returned 1
|
||||
executed_rules += rule
|
||||
if (rule.persistent)
|
||||
current_rules += rule
|
||||
for(var/mob/M in rule.assigned)
|
||||
candidates -= M
|
||||
return 1
|
||||
else
|
||||
message_admins("DYNAMIC MODE: ....except not because whomever coded that ruleset forgot some cases in ready() apparently! execute() returned 0.")
|
||||
log_admin("DYNAMIC MODE: ....except not because whomever coded that ruleset forgot some cases in ready() apparently! execute() returned 0.")
|
||||
|
||||
if (forced_rules == 0)
|
||||
message_admins("Not a single forced ruleset could be executed. Sad! Will now start a regular round of dynamic.")
|
||||
message_admins("DYNAMIC MODE: Not a single forced ruleset could be executed. Sad! Will now start a regular round of dynamic.")
|
||||
log_admin("DYNAMIC MODE: Not a single forced ruleset could be executed. Sad! Will now start a regular round of dynamic.")
|
||||
roundstart()
|
||||
|
||||
/datum/gamemode/dynamic/proc/roundstart()
|
||||
if (forced_extended)
|
||||
message_admins("Starting a round of forced extended.")
|
||||
message_admins("DYNAMIC MODE: Starting a round of forced extended.")
|
||||
log_admin("DYNAMIC MODE: Starting a round of forced extended.")
|
||||
return 1
|
||||
|
||||
var/indice_pop = min(10,round(roundstart_pop_ready/5)+1)
|
||||
@@ -302,7 +332,8 @@ var/stacking_limit = 90
|
||||
extra_rulesets_amount++
|
||||
|
||||
if (extra_rulesets_amount && prob(50))
|
||||
message_admins("Rather than extra rulesets, we'll try to draft spicier ones.")
|
||||
message_admins("DYNAMIC MODE: Rather than extra rulesets, we'll try to draft spicier ones.")
|
||||
log_admin("DYNAMIC MODE: Rather than extra rulesets, we'll try to draft spicier ones.")
|
||||
for (var/datum/dynamic_ruleset/rule in roundstart_rules)
|
||||
if (rule.flags & HIGHLANDER_RULESET)
|
||||
rule.weight += extra_rulesets_amount
|
||||
@@ -326,27 +357,34 @@ var/stacking_limit = 90
|
||||
drafted_rules[rule] = rule.get_weight()
|
||||
|
||||
if (classic_secret)
|
||||
message_admins("Classic secret was forced.")
|
||||
message_admins("DYNAMIC MODE: Classic secret was forced.")
|
||||
log_admin("DYNAMIC MODE: Classic secret was forced.")
|
||||
else
|
||||
message_admins("[i] rulesets qualify for the current pop and threat level, including [drafted_rules.len] with eligible candidates.")
|
||||
message_admins("DYNAMIC MODE: [i] rulesets qualify for the current pop and threat level, including [drafted_rules.len] with eligible candidates.")
|
||||
log_admin("DYNAMIC MODE: [i] rulesets qualify for the current pop and threat level, including [drafted_rules.len] with eligible candidates.")
|
||||
if (drafted_rules.len > 0 && picking_roundstart_rule(drafted_rules))
|
||||
if (extra_rulesets_amount > 0)//we've got enough population and threat for a second rulestart rule
|
||||
for (var/datum/dynamic_ruleset/roundstart/rule in drafted_rules)
|
||||
if (rule.cost > threat)
|
||||
drafted_rules -= rule
|
||||
message_admins("The current pop and threat level allow for a second round start ruleset, there remains [candidates.len] eligible candidates and [drafted_rules.len] eligible rulesets")
|
||||
message_admins("DYNAMIC MODE: The current pop and threat level allow for a second round start ruleset, there remains [candidates.len] eligible candidates and [drafted_rules.len] eligible rulesets")
|
||||
log_admin("DYNAMIC MODE: The current pop and threat level allow for a second round start ruleset, there remains [candidates.len] eligible candidates and [drafted_rules.len] eligible rulesets")
|
||||
if (drafted_rules.len > 0 && picking_roundstart_rule(drafted_rules))
|
||||
if (extra_rulesets_amount > 1)//we've got enough population and threat for a third rulestart rule
|
||||
for (var/datum/dynamic_ruleset/roundstart/rule in drafted_rules)
|
||||
if (rule.cost > threat)
|
||||
drafted_rules -= rule
|
||||
message_admins("The current pop and threat level allow for a third round start ruleset, there remains [candidates.len] eligible candidates and [drafted_rules.len] eligible rulesets")
|
||||
message_admins("DYNAMIC MODE: The current pop and threat level allow for a third round start ruleset, there remains [candidates.len] eligible candidates and [drafted_rules.len] eligible rulesets")
|
||||
log_admin("DYNAMIC MODE: The current pop and threat level allow for a third round start ruleset, there remains [candidates.len] eligible candidates and [drafted_rules.len] eligible rulesets")
|
||||
if (!drafted_rules.len > 0 || !picking_roundstart_rule(drafted_rules))
|
||||
message_admins("The mode failed to pick a third ruleset.")
|
||||
message_admins("DYNAMIC MODE: The mode failed to pick a third ruleset.")
|
||||
log_admin("DYNAMIC MODE: The mode failed to pick a third ruleset.")
|
||||
else
|
||||
message_admins("The mode failed to pick a second ruleset.")
|
||||
message_admins("DYNAMIC MODE: The mode failed to pick a second ruleset.")
|
||||
log_admin("DYNAMIC MODE: The mode failed to pick a second ruleset.")
|
||||
else
|
||||
message_admins("The mode failed to pick a first ruleset. The round will begin without any roles assigned.")
|
||||
message_admins("DYNAMIC MODE: The mode failed to pick a first ruleset. The round will begin without any roles assigned.")
|
||||
log_admin("DYNAMIC MODE: The mode failed to pick a first ruleset. The round will begin without any roles assigned.")
|
||||
return 0
|
||||
return 1
|
||||
|
||||
@@ -354,25 +392,27 @@ var/stacking_limit = 90
|
||||
var/datum/dynamic_ruleset/roundstart/starting_rule
|
||||
|
||||
while(!starting_rule && drafted_rules.len > 0)
|
||||
message_admins("Drafted rules: [json_encode(drafted_rules)]")
|
||||
message_admins("DYNAMIC MODE: Drafted rules: [json_encode(drafted_rules)]")
|
||||
log_admin("DYNAMIC MODE: Drafted rules: [json_encode(drafted_rules)]")
|
||||
starting_rule = pickweight(drafted_rules)
|
||||
if (threat < stacking_limit && no_stacking)
|
||||
for (var/datum/dynamic_ruleset/roundstart/DR in executed_rules)
|
||||
if ((DR.flags & HIGHLANDER_RULESET) && (starting_rule.flags & HIGHLANDER_RULESET))
|
||||
message_admins("Ruleset [starting_rule.name] refused as we already have a round-ending ruleset.")
|
||||
log_admin("Ruleset [starting_rule.name] refused as we already have a round-ending ruleset.")
|
||||
message_admins("DYNAMIC MODE: Ruleset [starting_rule.name] refused as we already have a round-ending ruleset.")
|
||||
log_admin("DYNAMIC MODE: Ruleset [starting_rule.name] refused as we already have a round-ending ruleset.")
|
||||
drafted_rules -= starting_rule
|
||||
starting_rule = null
|
||||
|
||||
if (starting_rule)
|
||||
message_admins("Picking a [istype(starting_rule, /datum/dynamic_ruleset/roundstart/delayed/) ? " delayed " : ""] ruleset...<font size='3'>[starting_rule.name]</font>!")
|
||||
log_admin("Picking a [istype(starting_rule, /datum/dynamic_ruleset/roundstart/delayed/) ? " delayed " : ""] ruleset...<font size='3'>[starting_rule.name]</font>!")
|
||||
message_admins("DYNAMIC MODE: Picking a [istype(starting_rule, /datum/dynamic_ruleset/roundstart/delayed/) ? " delayed " : ""] ruleset...<font size='3'>[starting_rule.name]</font>!")
|
||||
log_admin("DYNAMIC MODE: Picking a [istype(starting_rule, /datum/dynamic_ruleset/roundstart/delayed/) ? " delayed " : ""] ruleset...<font size='3'>[starting_rule.name]</font>!")
|
||||
|
||||
roundstart_rules -= starting_rule
|
||||
drafted_rules -= starting_rule
|
||||
|
||||
if (istype(starting_rule, /datum/dynamic_ruleset/roundstart/delayed/))
|
||||
message_admins("Delayed ruleset, with a delay of [starting_rule:delay/10] seconds.")
|
||||
message_admins("DYNAMIC MODE: Delayed ruleset, with a delay of [starting_rule:delay/10] seconds.")
|
||||
log_admin("DYNAMIC MODE: Delayed ruleset, with a delay of [starting_rule:delay/10] seconds.")
|
||||
spend_threat(starting_rule.cost)
|
||||
return pick_delay(starting_rule)
|
||||
|
||||
@@ -390,7 +430,8 @@ var/stacking_limit = 90
|
||||
drafted_rules -= rule//and removing rules that are no longer eligible
|
||||
return 1
|
||||
else
|
||||
message_admins("....except not because whomever coded that ruleset forgot some cases in ready() apparently! execute() returned 0.")
|
||||
message_admins("DYNAMIC MODE: ....except not because whomever coded that ruleset forgot some cases in ready() apparently! execute() returned 0.")
|
||||
log_admin("DYNAMIC MODE: ....except not because whomever coded that ruleset forgot some cases in ready() apparently! execute() returned 0.")
|
||||
return 0
|
||||
|
||||
/datum/gamemode/dynamic/proc/pick_delay(var/datum/dynamic_ruleset/roundstart/delayed/rule)
|
||||
@@ -403,7 +444,8 @@ var/stacking_limit = 90
|
||||
if (rule.persistent)
|
||||
current_rules += rule
|
||||
else
|
||||
message_admins("....except not because whomever coded that ruleset forgot some cases in ready() apparently! execute() returned 0.")
|
||||
message_admins("DYNAMIC MODE: ....except not because whomever coded that ruleset forgot some cases in ready() apparently! execute() returned 0.")
|
||||
log_admin("DYNAMIC MODE: ....except not because whomever coded that ruleset forgot some cases in ready() apparently! execute() returned 0.")
|
||||
return 1
|
||||
|
||||
|
||||
@@ -417,8 +459,8 @@ var/stacking_limit = 90
|
||||
dynamic_stats.measure_threat(threat)
|
||||
if (latejoin_rule.execute())//this should never fail since ready() returned 1
|
||||
var/mob/M = pick(latejoin_rule.assigned)
|
||||
message_admins("[key_name(M)] joined the station, and was selected by the <font size='3'>[latejoin_rule.name]</font> ruleset.")
|
||||
log_admin("[key_name(M)] joined the station, and was selected by the [latejoin_rule.name] ruleset.")
|
||||
message_admins("DYNAMIC MODE: [key_name(M)] joined the station, and was selected by the <font size='3'>[latejoin_rule.name]</font> ruleset.")
|
||||
log_admin("DYNAMIC MODE: [key_name(M)] joined the station, and was selected by the [latejoin_rule.name] ruleset.")
|
||||
executed_rules += latejoin_rule
|
||||
dynamic_stats.successful_injection(latejoin_rule)
|
||||
if (latejoin_rule.persistent)
|
||||
@@ -435,8 +477,8 @@ var/stacking_limit = 90
|
||||
threat_log += "[worldtime2text()]: Midround [midround_rule.name] spent [midround_rule.cost]"
|
||||
dynamic_stats.measure_threat(threat)
|
||||
if (midround_rule.execute())//this should never fail since ready() returned 1
|
||||
message_admins("Injecting some threats...<font size='3'>[midround_rule.name]</font>!")
|
||||
log_admin("Injecting some threats...[midround_rule.name]!")
|
||||
message_admins("DYNAMIC MODE: Injecting some threats...<font size='3'>[midround_rule.name]</font>!")
|
||||
log_admin("DYNAMIC MODE: Injecting some threats...[midround_rule.name]!")
|
||||
dynamic_stats.successful_injection(midround_rule)
|
||||
executed_rules += midround_rule
|
||||
if (midround_rule.persistent)
|
||||
@@ -451,7 +493,8 @@ var/stacking_limit = 90
|
||||
else if(istype(ruletype,/datum/dynamic_ruleset))
|
||||
new_rule = ruletype
|
||||
else
|
||||
message_admins("The specific ruleset failed beacuse a type other than a path or rule was sent.")
|
||||
message_admins("DYNAMIC MODE: The specific ruleset failed beacuse a type other than a path or rule was sent.")
|
||||
log_admin("DYNAMIC MODE: The specific ruleset failed beacuse a type other than a path or rule was sent.")
|
||||
return
|
||||
if(caller)
|
||||
new_rule.calledBy = caller
|
||||
@@ -477,8 +520,8 @@ var/stacking_limit = 90
|
||||
current_rules += new_rule
|
||||
return 1
|
||||
else if (forced)
|
||||
message_admins("The ruleset couldn't be executed due to lack of eligible players.")
|
||||
log_admin("The ruleset couldn't be executed due to lack of eligible players.")
|
||||
message_admins("DYNAMIC MODE: The ruleset couldn't be executed due to lack of eligible players.")
|
||||
log_admin("DYNAMIC MODE: The ruleset couldn't be executed due to lack of eligible players.")
|
||||
return 0
|
||||
|
||||
/datum/gamemode/dynamic/process()
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
if (istype(ticker.mode, /datum/gamemode/dynamic))
|
||||
mode = ticker.mode
|
||||
else
|
||||
//message_admins("A dynamic ruleset was created but server isn't on Dynamic Mode!")
|
||||
message_admins("A dynamic ruleset was created but server isn't on Dynamic Mode!")
|
||||
qdel(src)
|
||||
|
||||
/datum/dynamic_ruleset/roundstart//One or more of those drafted at roundstart
|
||||
@@ -225,6 +225,14 @@
|
||||
candidates -= M
|
||||
return M
|
||||
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/datum/forced_ruleset
|
||||
var/name = ""
|
||||
var/ruleType
|
||||
var/calledBy
|
||||
|
||||
|
||||
//////////////////////////////////////////////
|
||||
// //
|
||||
// ROUNDSTART RULESETS ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
@@ -236,6 +244,7 @@
|
||||
var/cand = candidates.len
|
||||
var/a = 0
|
||||
var/b = 0
|
||||
var/b1 = 0
|
||||
var/c = 0
|
||||
var/c1 = 0
|
||||
var/d = 0
|
||||
@@ -248,10 +257,14 @@
|
||||
candidates.Remove(P)
|
||||
a++
|
||||
continue
|
||||
if (!P.client.desires_role(role_pref) || jobban_isbanned(P, role_id) || isantagbanned(P) || (role_category_override && jobban_isbanned(P, role_category_override)))//are they willing and not antag-banned?
|
||||
if (!P.client.desires_role(role_pref))//are they willing?
|
||||
candidates.Remove(P)
|
||||
b++
|
||||
continue
|
||||
else if (jobban_isbanned(P, role_id) || isantagbanned(P) || (role_category_override && jobban_isbanned(P, role_category_override)))//are they not antag-banned?
|
||||
candidates.Remove(P)
|
||||
b1++//we only count banned ones if they actually wanted to play the role
|
||||
continue
|
||||
if ((protected_from_jobs.len > 0) && P.mind.assigned_role && (P.mind.assigned_role in protected_from_jobs))
|
||||
var/probability = initial(role_category.protected_traitor_prob)
|
||||
if (prob(probability))
|
||||
@@ -267,8 +280,8 @@
|
||||
candidates.Remove(P)
|
||||
e++
|
||||
continue
|
||||
message_admins("Dynamic Mode: Trimming [name]'s candidates: [candidates.len] remaining out of [cand] ([a],[b],[c] ([c1]),[d],[e])")
|
||||
log_admin("Dynamic Mode: Trimming [name]'s candidates: [candidates.len] remaining out of [cand] ([a],[b],[c] ([c1]),[d],[e])")
|
||||
message_admins("DYNAMIC MODE: [name] has [candidates.len] valid candidates out of [cand] players ([a ? "[a] disconnected, ":""][b ? "[b] didn't want the role, ":""][b1 ? "[b1] wanted the role but are banned from it, ":""][c1 ? "[c1] out of [c] were protected from the role, " : ""][d ? "[d] were restricted from the role, " : ""][e ? "[e] didn't pick the job necessary for the role" : ""])")
|
||||
log_admin("DYNAMIC MODE: [name] has [candidates.len] valid candidates out of [cand] players ([a ? "[a] disconnected, ":""][b ? "[b] didn't want the role, ":""][b1 ? "[b1] wanted the role but are banned from it, ":""][c1 ? "[c1] out of [c] were protected from the role, " : ""][d ? "[d] were restricted from the role, " : ""][e ? "[e] didn't pick the job necessary for the role" : ""])")
|
||||
|
||||
/datum/dynamic_ruleset/roundstart/delayed/trim_candidates()
|
||||
if (ticker && ticker.current_state < GAME_STATE_PLAYING)
|
||||
@@ -297,7 +310,6 @@
|
||||
continue
|
||||
|
||||
/datum/dynamic_ruleset/roundstart/ready(var/forced = 0)
|
||||
message_admins("[name]: [length(candidates)] candidates")
|
||||
if (!forced)
|
||||
if(!check_enemy_jobs(FALSE))
|
||||
return 0
|
||||
|
||||
@@ -679,7 +679,7 @@ var/global/floorIsLava = 0
|
||||
dat += "<A href='?src=\ref[src];f_dynamic_roundstart=1'>(Force Roundstart Rulesets)</A><br>"
|
||||
dat += "<A href='?src=\ref[src];f_dynamic_options=1'>(Dynamic mode options)</A><br>"
|
||||
if (forced_roundstart_ruleset.len > 0)
|
||||
for(var/datum/dynamic_ruleset/roundstart/rule in forced_roundstart_ruleset)
|
||||
for(var/datum/forced_ruleset/rule in forced_roundstart_ruleset)
|
||||
dat += {"<A href='?src=\ref[src];f_dynamic_roundstart_remove=\ref[rule]'>-> [rule.name] <-</A><br>"}
|
||||
dat += "<A href='?src=\ref[src];f_dynamic_roundstart_clear=1'>(Clear Rulesets)</A><br>"
|
||||
dat += "<A href='?src=\ref[src];f_dynamic_options=1>Dynamic mode options</a><br/>"
|
||||
|
||||
@@ -1644,14 +1644,18 @@
|
||||
return alert(usr, "The game has already started.", null, null, null, null)
|
||||
if(master_mode != "Dynamic Mode")
|
||||
return alert(usr, "The game mode has to be Dynamic Mode!", null, null, null, null)
|
||||
if (forced_roundstart_ruleset.len > 30)
|
||||
return alert(usr, "Haven't you already forced enough rulesets?", null, null, null, null)
|
||||
var/list/datum/dynamic_ruleset/roundstart/roundstart_rules = list()
|
||||
for (var/rule in subtypesof(/datum/dynamic_ruleset/roundstart))
|
||||
var/datum/dynamic_ruleset/roundstart/newrule = new rule()
|
||||
roundstart_rules[newrule.name] = newrule
|
||||
var/datum/dynamic_ruleset/roundstart/newrule = rule
|
||||
roundstart_rules += initial(newrule.name)
|
||||
var/added_rule = input(usr,"What ruleset do you want to force? This will bypass threat level and population restrictions.", "Rigging Roundstart", null) as null|anything in roundstart_rules
|
||||
if (added_rule)
|
||||
roundstart_rules[added_rule].calledBy = "[key_name(usr)]"
|
||||
forced_roundstart_ruleset += roundstart_rules[added_rule]
|
||||
var/datum/forced_ruleset/forcedrule = new
|
||||
forcedrule.name = added_rule
|
||||
forcedrule.calledBy = "[key_name(usr)]"
|
||||
forced_roundstart_ruleset += forcedrule
|
||||
log_admin("[key_name(usr)] set [added_rule] to be a forced roundstart ruleset.")
|
||||
message_admins("[key_name(usr)] set [added_rule] to be a forced roundstart ruleset.", 1)
|
||||
Game()
|
||||
@@ -1660,6 +1664,8 @@
|
||||
if(!check_rights(R_ADMIN))
|
||||
return
|
||||
|
||||
for (var/datum/forced_ruleset/rule in forced_roundstart_ruleset)
|
||||
qdel(rule)
|
||||
forced_roundstart_ruleset = list()
|
||||
Game()
|
||||
log_admin("[key_name(usr)] cleared the rigged roundstart rulesets. The mode will pick them as normal.")
|
||||
@@ -1670,8 +1676,9 @@
|
||||
if(!check_rights(R_ADMIN))
|
||||
return
|
||||
|
||||
var/datum/dynamic_ruleset/roundstart/rule = locate(href_list["f_dynamic_roundstart_remove"])
|
||||
var/datum/forced_ruleset/rule = locate(href_list["f_dynamic_roundstart_remove"])
|
||||
forced_roundstart_ruleset -= rule
|
||||
qdel(rule)
|
||||
Game()
|
||||
log_admin("[key_name(usr)] removed [rule] from the forced roundstart rulesets.")
|
||||
message_admins("[key_name(usr)] removed [rule] from the forced roundstart rulesets.", 1)
|
||||
|
||||
Reference in New Issue
Block a user