Repeatable Gamemodes (#21564)

* modes like our ipods stuck on replay

* bugfix
This commit is contained in:
Kurfursten
2019-02-18 06:52:12 -06:00
committed by jknpj
parent abb66d2018
commit 3ba353e919
4 changed files with 23 additions and 3 deletions

View File

@@ -228,7 +228,7 @@ var/list/threat_by_job = list(
var/datum/dynamic_ruleset/latejoin/latejoin_rule = pickweight(drafted_rules)
if (latejoin_rule)
if (!latejoin_rule.repeatable)
latejoin_rules -= latejoin_rule
latejoin_rules = remove_rule(latejoin_rules,latejoin_rule.type)
spend_threat(latejoin_rule.cost)
threat_log += "[worldtime2text()]: [latejoin_rule.name] spent [latejoin_rule.cost]"
dynamic_stats.measure_threat(threat)
@@ -247,7 +247,7 @@ var/list/threat_by_job = list(
var/datum/dynamic_ruleset/midround/midround_rule = pickweight(drafted_rules)
if (midround_rule)
if (!midround_rule.repeatable)
midround_rules -= midround_rule
midround_rules = remove_rule(midround_rules,midround_rule.type)
spend_threat(midround_rule.cost)
threat_log += "[worldtime2text()]: [midround_rule.name] spent [midround_rule.cost]"
dynamic_stats.measure_threat(threat)
@@ -328,7 +328,7 @@ var/list/threat_by_job = list(
rule.candidates = current_players.Copy()
rule.trim_candidates()
if (rule.ready())
drafted_rules[rule] = rule.weight
drafted_rules[rule] = rule.get_weight()
if (drafted_rules.len > 0)
message_admins("DYNAMIC MODE: [drafted_rules.len] elligible rulesets.")
@@ -394,6 +394,12 @@ var/list/threat_by_job = list(
log_admin("DYNAMIC MODE: Check failed!")
return 0
/datum/gamemode/dynamic/proc/remove_rule(var/list/rule_list,var/rule_type)
for(var/datum/dynamic_ruleset/DR in rule_list)
if(istype(DR,rule_type))
rule_list -= DR
return rule_list
/datum/gamemode/dynamic/latespawn(var/mob/living/newPlayer)
if(emergency_shuttle.departed)//no more rules after the shuttle has left
return

View File

@@ -68,6 +68,13 @@
return 0
return 1
/datum/dynamic_ruleset/proc/get_weight()
if(repeatable && weight > 1)
for(var/datum/dynamic_ruleset/DR in mode.executed_rules)
if(istype(DR,src.type))
weight = max(weight-2,1)
return weight
/datum/dynamic_ruleset/proc/trim_candidates()
return

View File

@@ -14,6 +14,7 @@
weight = 7
cost = 5
requirements = list(40,30,20,10,10,10,10,10,10,10)
repeatable = TRUE
/datum/dynamic_ruleset/latejoin/infiltrator/acceptable(var/population=0,var/threat=0)
var/player_count = mode.living_players.len
@@ -49,6 +50,7 @@
weight = 1
cost = 50
requirements = list(90,90,70,40,30,20,10,10,10,10)
repeatable = TRUE
/datum/dynamic_ruleset/latejoin/raginmages/acceptable(var/population=0,var/threat=0)
if(wizardstart.len == 0)
@@ -92,6 +94,8 @@
requirements = list(90,90,60,20,10,10,10,10,10,10)
logo = "weeaboo-logo"
repeatable = TRUE
/datum/dynamic_ruleset/latejoin/weeaboo/acceptable(var/population=0,var/threat=0)
var/player_count = mode.living_players.len
var/antag_count = mode.living_antags.len

View File

@@ -77,6 +77,7 @@
weight = 7
cost = 10
requirements = list(50,40,30,20,10,10,10,10,10,10)
repeatable = TRUE
/datum/dynamic_ruleset/midround/autotraitor/acceptable(var/population=0,var/threat=0)
var/player_count = mode.living_players.len
@@ -182,6 +183,7 @@
cost = 50
requirements = list(90,90,70,40,30,20,10,10,10,10)
logo = "raginmages-logo"
repeatable = TRUE
/datum/dynamic_ruleset/midround/from_ghosts/faction_based/raginmages/acceptable(var/population=0,var/threat=0)
if(wizardstart.len == 0)
@@ -266,6 +268,7 @@
cost = 10
requirements = list(90,90,60,20,10,10,10,10,10,10)
logo = "weeaboo-logo"
repeatable = TRUE
/datum/dynamic_ruleset/midround/from_ghosts/weeaboo/acceptable(var/population=0,var/threat=0)
var/player_count = mode.living_players.len