-
Notifications
You must be signed in to change notification settings - Fork 75
Голосование за тип раунда #5590
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Changes from 3 commits
863edc2
cb37c7e
e114dab
0825e40
7bc9eee
ba6e593
537b4b6
db73f42
5872434
761b051
9d5d421
dd44e6f
da44838
e640daf
95a215f
f41a1fa
10a8680
4f7c41d
54fd7fb
d0dafe3
e948bfa
838198c
edb9723
58e7336
e21f67a
4e4a389
d95b454
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,9 @@ | ||
| #define ROUND_LIGHT_SHIFT "Green" | ||
| #define ROUND_MID_SHIFT "Blue" | ||
| #define ROUND_HARD_SHIFT "Red" | ||
|
|
||
| #define ROUND_LIGHT_SHIFT_STRING "Green Shift" | ||
| #define ROUND_MID_SHIFT_STRING "Blue Shift" | ||
| #define ROUND_HARD_SHIFT_STRING "Red Shift" | ||
|
|
||
| GLOBAL_VAR(shift_intensity_level) |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,11 @@ | ||
| ## Включает систему голосования за тип раунда | ||
| #SHIFT_INTENSITY | ||
|
|
||
| ## Включает возможность начать голосование за тип раунда | ||
| #ALLOW_SHIFT_INTENSITY_VOTE | ||
|
|
||
| ## Время до начала раунда (в децисекундах), в которое запускается голосование за тип раунда | ||
| SHIFT_INTENSITY_VOTE_STARTTIME 1000 | ||
|
|
||
| ## Количество игроков, необходимое для старта голосования за тип раунда | ||
| SHIFT_INTENSITY_VOTE_MINIMUM_PLAYERS 20 |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,36 @@ | ||
| SUBSYSTEM_DEF(shift_intensity) | ||
| name = "Shift Intensity Vote" | ||
| flags = SS_BACKGROUND | ||
| runlevels = RUNLEVEL_LOBBY | RUNLEVEL_SETUP | ||
| dependencies = list( | ||
| /datum/controller/subsystem/vote, | ||
| ) | ||
|
|
||
| // Время до начала раунда, после которого подсистема будет пытаться запустить голосование | ||
| var/start_time | ||
| // Количество игроков, необходимое для старта голосования | ||
| var/minimum_players | ||
|
|
||
| /datum/controller/subsystem/shift_intensity/Initialize() | ||
| if(!CONFIG_GET(flag/shift_intensity)) | ||
| can_fire = FALSE | ||
| return SS_INIT_NO_NEED | ||
|
|
||
| start_time = CONFIG_GET(number/shift_intensity_vote_starttime) | ||
| minimum_players = CONFIG_GET(number/shift_intensity_vote_minimum_players) | ||
| return SS_INIT_SUCCESS | ||
|
|
||
| /datum/controller/subsystem/shift_intensity/Recover() | ||
| start_time = SSshift_intensity.start_time | ||
|
|
||
| /datum/controller/subsystem/shift_intensity/fire() | ||
| if(SSticker.current_state > GAME_STATE_PREGAME) | ||
| can_fire = FALSE | ||
| return | ||
|
|
||
| if(SSticker.GetTimeLeft() <= start_time) | ||
| can_fire = FALSE | ||
| if(GLOB.clients.len < minimum_players) | ||
| return | ||
| SSvote.initiate_vote(/datum/vote/shift_intensity, "server", forced = TRUE) | ||
|
|
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,14 @@ | ||
| // Определяет, работает ли SSshiftcolor или нет | ||
| /datum/config_entry/flag/shift_intensity | ||
|
|
||
| // Определяет, может ли голосование за shiftcolor быть начато кем-либо или нет | ||
| /datum/config_entry/flag/allow_shift_intensity_vote | ||
|
|
||
| // Время (в децисекундах) до начала раунда, после которого SSshiftcolorvote будет пытаться запустить голосование | ||
| /datum/config_entry/number/shift_intensity_vote_starttime | ||
| min_val = 50 | ||
| default = 1000 | ||
|
|
||
| // Количество игроков, необходимое для старта голосования | ||
| /datum/config_entry/number/shift_intensity_vote_minimum_players | ||
| default = 20 | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,75 @@ | ||
| /datum/vote/shift_intensity | ||
| name = "Intensity" | ||
| default_choices = list( | ||
| ROUND_LIGHT_SHIFT_STRING, | ||
| ROUND_MID_SHIFT_STRING, | ||
| ROUND_HARD_SHIFT_STRING, | ||
| ) | ||
| var/static/list/roundstart_rulesets = list( | ||
| /datum/dynamic_ruleset/roundstart/nuclear, | ||
| /datum/dynamic_ruleset/roundstart/revs, | ||
| /datum/dynamic_ruleset/roundstart/bloodcult, | ||
| ) | ||
|
|
||
| /datum/vote/shift_intensity/toggle_votable() | ||
| CONFIG_SET(flag/allow_shift_intensity_vote, !CONFIG_GET(flag/allow_shift_intensity_vote)) | ||
|
|
||
| /datum/vote/shift_intensity/is_config_enabled() | ||
| return CONFIG_GET(flag/shift_intensity) && CONFIG_GET(flag/allow_shift_intensity_vote) | ||
|
|
||
| /datum/vote/shift_intensity/can_be_initiated(forced) | ||
| . = ..() | ||
| if(. != VOTE_AVAILABLE) | ||
| return . | ||
|
|
||
| if(SSticker.current_state != GAME_STATE_PREGAME) | ||
| return "It's too late for that, the round is already starting." | ||
|
|
||
| return VOTE_AVAILABLE | ||
|
|
||
| /datum/vote/shift_intensity/initiate_vote(initiator, duration) | ||
| . = ..() | ||
| // Необходимо продлить время до старта раунда, асли до него меньше 90 секунд (60 секунд сам воут + 30 на то, чтобы игроки успели понять тип раунда) | ||
| if(SSticker.GetTimeLeft() < 90 SECONDS) | ||
| SSticker.SetTimeLeft(90 SECONDS) | ||
|
|
||
| /datum/vote/shift_intensity/tiebreaker(list/winners) | ||
| // Если никто не проголосовал - смена будет *обычная* | ||
| if(choices_by_ckey.len == 0) | ||
| return ROUND_MID_SHIFT_STRING | ||
| return ..() | ||
|
|
||
|
|
||
| /datum/vote/shift_intensity/finalize_vote(winning_option) | ||
| if(SSticker.current_state != GAME_STATE_PREGAME) | ||
| message_admins("Shift type vote ended after the round started. No changes to the round type. Current type: [winning_option]") | ||
Kocma-san marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| log_admin("Shift type vote ended after the round started. No changes to the round type. Current type: [winning_option]") | ||
Kocma-san marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| return | ||
|
|
||
| // Боже, прости меня за это, но меня заставляют. Нужно будет заменить на отдельные конфиги для каждого типа раунда | ||
|
||
| switch(winning_option) | ||
| if(ROUND_LIGHT_SHIFT_STRING) | ||
| SSdynamic.max_threat_level = 30 | ||
| SSdynamic.low_pop_maximum_threat = 20 | ||
| SSdynamic.threat_curve_centre = -4 | ||
| SSdynamic.threat_curve_width = 2.2 | ||
| GLOB.shift_intensity_level = ROUND_LIGHT_SHIFT | ||
| message_admins("Selected Green Shift") | ||
| if(ROUND_MID_SHIFT_STRING) | ||
| // Ничего не меняем, все как обычно | ||
| GLOB.shift_intensity_level = ROUND_MID_SHIFT | ||
| message_admins("Selected Blue Shift") | ||
| if(ROUND_HARD_SHIFT_STRING) | ||
| GLOB.dynamic_no_stacking = FALSE | ||
| SSdynamic.threat_curve_centre = 4 | ||
| SSdynamic.threat_curve_width = 2.2 | ||
| // Ужас. Но нужен, чтобы выбирать случайно культ, нюку или реву для спавна раундстартом | ||
| var/chosen_roundstart_ruleset = pick(roundstart_rulesets) | ||
| GLOB.dynamic_forced_roundstart_ruleset += new chosen_roundstart_ruleset() | ||
| GLOB.shift_intensity_level = ROUND_HARD_SHIFT | ||
| message_admins("Selected Red Shift. Randomly selected ruleset: [chosen_roundstart_ruleset]") | ||
| else | ||
| CRASH("[type] wasn't passed a valid winning choice. (Got: [winning_option || "null"])") | ||
|
|
||
| message_admins("Shift type vote ended ") | ||
| log_admin("Shift type vote ended ") | ||
Uh oh!
There was an error while loading. Please reload this page.