mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-23 12:07:27 +01:00
"Dynamic" Gamemode using rulesets (#27600)
* yeah * yeah * lock tf in * aaaa * fix * im going to have a fucking stroke i hate mindflayers * dynamic is ready * fucking hell * yes * warrior review * blah blah * updates based on #27811 * ok fix * makes the menu usable during secret * ok RANDOM BULLSHIT GO! * Dynamic final changes * fixes some missing budget
This commit is contained in:
@@ -327,6 +327,8 @@ GLOBAL_VAR_INIT(disable_explosions, FALSE)
|
||||
dat += "<p><a href='byond://?src=[cached_UID];c_mode=1'>Change Game Mode</a><br></p>"
|
||||
if(GLOB.master_mode == "secret")
|
||||
dat += "<p><a href='byond://?src=[cached_UID];f_secret=1'>(Force Secret Mode)</a><br></p>"
|
||||
if(GLOB.master_mode == "dynamic" || (GLOB.master_mode == "secret" && GLOB.secret_force_mode == "dynamic"))
|
||||
dat += "<p><a href='byond://?src=[cached_UID];f_dynamic=1'>(Force Dynamic Rulesets)</a><br></p>"
|
||||
dat += "<hr><br>"
|
||||
dat += "<p><a href='byond://?src=[cached_UID];create_object=1'>Create Object</a><br></p>"
|
||||
dat += "<p><a href='byond://?src=[cached_UID];quick_create_object=1'>Quick Create Object</a><br></p>"
|
||||
|
||||
@@ -355,6 +355,9 @@
|
||||
if(SSticker && SSticker.current_state >= GAME_STATE_PLAYING)
|
||||
var/dat = "<html><meta charset='utf-8'><head><title>Round Status</title></head><body><h1><b>Round Status</b></h1>"
|
||||
dat += "Current Game Mode: <b>[SSticker.mode.name]</b><br>"
|
||||
if(istype(SSticker.mode, /datum/game_mode/dynamic))
|
||||
var/datum/game_mode/dynamic/dynamic = SSticker.mode
|
||||
dat += "Rulesets: <b>[english_list(dynamic.rulesets + dynamic.implied_rulesets)]</b><br>"
|
||||
dat += "Round Duration: <b>[round(ROUND_TIME / 36000)]:[add_zero(num2text(ROUND_TIME / 600 % 60), 2)]:[add_zero(num2text(ROUND_TIME / 10 % 60), 2)]</b><br>"
|
||||
dat += "<b>Emergency shuttle</b><br>"
|
||||
if(SSshuttle.emergency.mode < SHUTTLE_CALL)
|
||||
|
||||
@@ -1041,6 +1041,20 @@
|
||||
dat += {"Now: [GLOB.secret_force_mode]"}
|
||||
usr << browse(dat, "window=f_secret")
|
||||
|
||||
else if(href_list["f_dynamic"])
|
||||
if(!check_rights(R_ADMIN)) return
|
||||
|
||||
if(SSticker && SSticker.mode)
|
||||
return alert(usr, "The game has already started.", null, null, null, null)
|
||||
if(GLOB.master_mode != "dynamic" && !(GLOB.master_mode == "secret" && GLOB.secret_force_mode == "dynamic"))
|
||||
return alert(usr, "The game mode has to be dynamic!", null, null, null, null)
|
||||
var/dat = {"<!DOCTYPE html><b>Possible Rulesets:</b><hr>"}
|
||||
var/list/rulesets = subtypesof(/datum/ruleset) - typesof(/datum/ruleset/implied)
|
||||
dat += {"Budget: <a href='byond://?src=[UID()];f_dynamic2=budget'>[isnull(GLOB.dynamic_forced_rulesets["budget"]) ? "Random" : GLOB.dynamic_forced_rulesets["budget"]]</a><hr>"}
|
||||
for(var/datum/ruleset/ruleset as anything in rulesets)
|
||||
dat += {"[ruleset.name]: <a href='byond://?src=[UID()];f_dynamic2=[ruleset.type]'>[GLOB.dynamic_forced_rulesets[ruleset] || DYNAMIC_RULESET_NORMAL]</a><br>"}
|
||||
usr << browse(dat, "window=f_dynamic")
|
||||
|
||||
else if(href_list["c_mode2"])
|
||||
if(!check_rights(R_ADMIN|R_SERVER)) return
|
||||
|
||||
@@ -1067,6 +1081,44 @@
|
||||
Game() // updates the main game menu
|
||||
.(href, list("f_secret"=1))
|
||||
|
||||
else if(href_list["f_dynamic2"])
|
||||
if(!check_rights(R_ADMIN|R_SERVER)) return
|
||||
|
||||
if(SSticker && SSticker.mode)
|
||||
return alert(usr, "The game has already started.", null, null, null, null)
|
||||
if(GLOB.master_mode != "dynamic" && !(GLOB.master_mode == "secret" && GLOB.secret_force_mode == "dynamic"))
|
||||
return alert(usr, "The game mode has to be dynamic!", null, null, null, null)
|
||||
if(href_list["f_dynamic2"] == "budget")
|
||||
var/budget = input(usr, "Pick a budget for the dynamic gamemode (-1 to randomize)", "Gamemode Budget") as num|null
|
||||
if(isnull(budget))
|
||||
return
|
||||
if(budget < 0)
|
||||
GLOB.dynamic_forced_rulesets -= "budget"
|
||||
log_admin("[key_name(usr)] set the ruleset budget to random.")
|
||||
message_admins("<span class='notice'>[key_name_admin(usr)] set the ruleset budget to random.</span>")
|
||||
else
|
||||
GLOB.dynamic_forced_rulesets["budget"] = budget
|
||||
log_admin("[key_name(usr)] set the ruleset budget to [budget]")
|
||||
message_admins("<span class='notice'>[key_name_admin(usr)] set the ruleset budget to [budget].</span>")
|
||||
.(href, list("f_dynamic"=1))
|
||||
return
|
||||
|
||||
var/datum/ruleset/ruleset = text2path(href_list["f_dynamic2"])
|
||||
switch(GLOB.dynamic_forced_rulesets[ruleset])
|
||||
if(DYNAMIC_RULESET_FORCED)
|
||||
log_admin("[key_name(usr)] banned the [ruleset] ruleset.")
|
||||
message_admins("<span class='notice'>[key_name_admin(usr)] banned the [ruleset.name] ([ruleset.type]) ruleset.</span>")
|
||||
GLOB.dynamic_forced_rulesets[ruleset] = DYNAMIC_RULESET_BANNED
|
||||
if(DYNAMIC_RULESET_BANNED)
|
||||
log_admin("[key_name(usr)] set the [ruleset] ruleset to normal.")
|
||||
message_admins("<span class='notice'>[key_name_admin(usr)] set the [ruleset.name] ([ruleset.type]) ruleset to normal.</span>")
|
||||
GLOB.dynamic_forced_rulesets[ruleset] = DYNAMIC_RULESET_NORMAL
|
||||
else // not set, and already at normal
|
||||
log_admin("[key_name(usr)] forced the [ruleset] ruleset.")
|
||||
message_admins("<span class='notice'>[key_name_admin(usr)] forced the [ruleset.name] ([ruleset.type]) ruleset.</span>")
|
||||
GLOB.dynamic_forced_rulesets[ruleset] = DYNAMIC_RULESET_FORCED
|
||||
.(href, list("f_dynamic"=1))
|
||||
|
||||
else if(href_list["monkeyone"])
|
||||
if(!check_rights(R_SPAWN)) return
|
||||
|
||||
|
||||
Reference in New Issue
Block a user