mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-10 15:45:05 +01:00
9e3d50a162
## About The Pull Request Dead path Closes #93757
113 lines
3.8 KiB
Plaintext
113 lines
3.8 KiB
Plaintext
/datum/dynamic_ruleset/latejoin
|
|
min_antag_cap = 1
|
|
max_antag_cap = 1
|
|
repeatable = TRUE
|
|
|
|
/datum/dynamic_ruleset/latejoin/set_config_value(nvar, nval)
|
|
if(nvar == NAMEOF(src, min_antag_cap) || nvar == NAMEOF(src, max_antag_cap))
|
|
return FALSE
|
|
return ..()
|
|
|
|
/datum/dynamic_ruleset/latejoin/vv_edit_var(var_name, var_value)
|
|
if(var_name == NAMEOF(src, min_antag_cap) || var_name == NAMEOF(src, max_antag_cap))
|
|
return FALSE
|
|
return ..()
|
|
|
|
/datum/dynamic_ruleset/latejoin/is_valid_candidate(mob/candidate, client/candidate_client)
|
|
if(isnull(candidate.mind))
|
|
return FALSE
|
|
if(candidate.mind.assigned_role.title in get_blacklisted_roles())
|
|
return FALSE
|
|
return ..()
|
|
|
|
/datum/dynamic_ruleset/latejoin/traitor
|
|
name = "Traitor"
|
|
config_tag = "Latejoin Traitor"
|
|
preview_antag_datum = /datum/antagonist/traitor
|
|
pref_flag = ROLE_SYNDICATE_INFILTRATOR
|
|
jobban_flag = ROLE_TRAITOR
|
|
weight = 10
|
|
min_pop = 3
|
|
blacklisted_roles = list(
|
|
JOB_HEAD_OF_PERSONNEL,
|
|
)
|
|
|
|
/datum/dynamic_ruleset/latejoin/traitor/assign_role(datum/mind/candidate)
|
|
candidate.add_antag_datum(/datum/antagonist/traitor)
|
|
|
|
/datum/dynamic_ruleset/latejoin/changeling
|
|
name = "Changeling"
|
|
config_tag = "Latejoin Changeling"
|
|
preview_antag_datum = /datum/antagonist/changeling
|
|
pref_flag = ROLE_STOWAWAY_CHANGELING
|
|
jobban_flag = ROLE_CHANGELING
|
|
weight = 3
|
|
min_pop = 15
|
|
blacklisted_roles = list(
|
|
JOB_HEAD_OF_PERSONNEL,
|
|
)
|
|
|
|
/datum/dynamic_ruleset/latejoin/changeling/assign_role(datum/mind/candidate)
|
|
candidate.add_antag_datum(/datum/antagonist/changeling)
|
|
|
|
/datum/dynamic_ruleset/latejoin/revolution
|
|
name = "Revolution"
|
|
config_tag = "Latejoin Revolution"
|
|
preview_antag_datum = /datum/antagonist/rev/head
|
|
pref_flag = ROLE_PROVOCATEUR
|
|
jobban_flag = ROLE_REV_HEAD
|
|
ruleset_flags = RULESET_HIGH_IMPACT
|
|
weight = 1
|
|
min_pop = 30
|
|
repeatable = FALSE
|
|
/// How many heads of staff are required to be on the station for this to be selected
|
|
var/heads_necessary = 3
|
|
|
|
/datum/dynamic_ruleset/latejoin/revolution/can_be_selected()
|
|
if(GLOB.revolution_handler)
|
|
return FALSE
|
|
var/head_check = 0
|
|
for(var/mob/player as anything in get_active_player_list(alive_check = TRUE, afk_check = TRUE))
|
|
if (player.mind.assigned_role.job_flags & JOB_HEAD_OF_STAFF)
|
|
head_check++
|
|
return head_check >= heads_necessary
|
|
|
|
/datum/dynamic_ruleset/latejoin/revolution/get_always_blacklisted_roles()
|
|
. = ..()
|
|
for(var/datum/job/job as anything in SSjob.all_occupations)
|
|
if(job.job_flags & JOB_HEAD_OF_STAFF)
|
|
. |= job.title
|
|
|
|
/datum/dynamic_ruleset/latejoin/revolution/assign_role(datum/mind/candidate)
|
|
LAZYADD(candidate.special_roles, "Dormant Head Revolutionary")
|
|
addtimer(CALLBACK(src, PROC_REF(reveal_head), candidate), 1 MINUTES, TIMER_DELETE_ME)
|
|
|
|
/datum/dynamic_ruleset/latejoin/revolution/proc/reveal_head(datum/mind/candidate)
|
|
LAZYREMOVE(candidate.special_roles, "Dormant Head Revolutionary")
|
|
|
|
var/head_check = 0
|
|
for(var/mob/player as anything in get_active_player_list(alive_check = TRUE, afk_check = TRUE))
|
|
if(player.mind?.assigned_role.job_flags & JOB_HEAD_OF_STAFF)
|
|
head_check++
|
|
|
|
if(head_check < heads_necessary - 1) // little bit of leeway
|
|
SSdynamic.unreported_rulesets += src
|
|
name += " (Canceled)"
|
|
log_dynamic("[config_tag]: Not enough heads of staff were present to start a revolution.")
|
|
return
|
|
|
|
if(!can_be_headrev(candidate))
|
|
SSdynamic.unreported_rulesets += src
|
|
name += " (Canceled)"
|
|
log_dynamic("[config_tag]: [key_name(candidate)] was ineligible after the timer expired. Ruleset canceled.")
|
|
message_admins("[config_tag]: [key_name(candidate)] was ineligible after the timer expired. Ruleset canceled.")
|
|
return
|
|
|
|
GLOB.revolution_handler ||= new()
|
|
var/datum/antagonist/rev/head/new_head = new()
|
|
new_head.give_flash = TRUE
|
|
new_head.give_hud = TRUE
|
|
new_head.remove_clumsy = TRUE
|
|
candidate.add_antag_datum(new_head, GLOB.revolution_handler.revs)
|
|
GLOB.revolution_handler.start_revolution()
|