mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-20 20:45:28 +01:00
[MIRROR] Drastic Lag Mitigation Subsystem: SSlag_switch (#6786)
* Drastic Lag Mitigation Subsystem: SSlag_switch (#59717) Requested by oranges and inspired by the upcoming event. A new subsyetem, non-processing (for now), aimed at providing some toggle switches that can be flipped as a last ditch effort to save some CPU cycles by sacrificing some non-critical mechanics. Below you can see each individual toggle. Screenshot of the admin panel: image Surely there are more opportunities for toggles I missed, but adding new ones is not very difficult at all. Why It's Good For The Game Better performance during extreme pop, I hope. Changelog cl code: Introduces the Lag Switch subsystem for when a smoother experience is worth trading a few bells and whistles for. Performance enhancement measures can be togged by admins with the Show Lag Switches admin verb or enabled automatically at a pop amount set via config. config: Added a new config var: number/auto_lag_switch_pop * Drastic Lag Mitigation Subsystem: SSlag_switch * mirrored the changes to the modular file Co-authored-by: Wayland-Smithy <64715958+Wayland-Smithy@users.noreply.github.com> Co-authored-by: Useroth <37159550+Useroth@users.noreply.github.com>
This commit is contained in:
@@ -590,15 +590,12 @@
|
||||
set category = "Server"
|
||||
set desc="People can't enter"
|
||||
set name="Toggle Entering"
|
||||
GLOB.enter_allowed = !( GLOB.enter_allowed )
|
||||
if (!( GLOB.enter_allowed ))
|
||||
to_chat(world, "<B>New players may no longer enter the game.</B>", confidential = TRUE)
|
||||
else
|
||||
to_chat(world, "<B>New players may now enter the game.</B>", confidential = TRUE)
|
||||
log_admin("[key_name(usr)] toggled new player game entering.")
|
||||
message_admins(span_adminnotice("[key_name_admin(usr)] toggled new player game entering."))
|
||||
world.update_status()
|
||||
SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Entering", "[GLOB.enter_allowed ? "Enabled" : "Disabled"]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
if(!SSlag_switch.initialized)
|
||||
return
|
||||
SSlag_switch.set_measure(DISABLE_NON_OBSJOBS, !SSlag_switch.measures[DISABLE_NON_OBSJOBS])
|
||||
log_admin("[key_name(usr)] toggled new player game entering. Lag Switch at index ([DISABLE_NON_OBSJOBS])")
|
||||
message_admins("[key_name_admin(usr)] toggled new player game entering [SSlag_switch.measures[DISABLE_NON_OBSJOBS] ? "OFF" : "ON"].")
|
||||
SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Entering", "[!SSlag_switch.measures[DISABLE_NON_OBSJOBS] ? "Enabled" : "Disabled"]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/datum/admins/proc/toggleAI()
|
||||
set category = "Server"
|
||||
@@ -828,6 +825,9 @@
|
||||
tgui_alert(usr, "You cannot manage jobs before the job subsystem is initialized!")
|
||||
return
|
||||
|
||||
if(SSlag_switch.measures[DISABLE_NON_OBSJOBS])
|
||||
dat += "<div class='notice red' style='font-size: 125%'>Lag Switch \"Disable non-observer late joining\" is ON. Only Observers may join!</div>"
|
||||
|
||||
dat += "<table>"
|
||||
|
||||
for(var/j in SSjob.occupations)
|
||||
@@ -960,3 +960,31 @@
|
||||
"Admin login: [key_name(src)]")
|
||||
if(string)
|
||||
message_admins("[string]")
|
||||
|
||||
/datum/admins/proc/show_lag_switch_panel()
|
||||
set category = "Admin.Game"
|
||||
set name = "Show Lag Switches"
|
||||
set desc="Display the controls for drastic lag mitigation measures."
|
||||
|
||||
if(!SSlag_switch.initialized)
|
||||
to_chat(usr, span_notice("The Lag Switch subsystem has not yet been initialized."))
|
||||
return
|
||||
if(!check_rights())
|
||||
return
|
||||
|
||||
var/list/dat = list("<html><head><meta http-equiv='Content-Type' content='text/html; charset=UTF-8'><title>Lag Switches</title></head><body><h2><B>Lag (Reduction) Switches</B></h2>")
|
||||
dat += "Automatic Trigger: <a href='?_src_=holder;[HrefToken()];change_lag_switch_option=TOGGLE_AUTO'><b>[SSlag_switch.auto_switch ? "On" : "Off"]</b></a><br/>"
|
||||
dat += "Population Threshold: <a href='?_src_=holder;[HrefToken()];change_lag_switch_option=NUM'><b>[SSlag_switch.trigger_pop]</b></a><br/>"
|
||||
dat += "Slowmode Cooldown (toggle On/Off below): <a href='?_src_=holder;[HrefToken()];change_lag_switch_option=SLOWCOOL'><b>[SSlag_switch.slowmode_cooldown/10] seconds</b></a><br/>"
|
||||
dat += "<br/><b>SET ALL MEASURES: <a href='?_src_=holder;[HrefToken()];change_lag_switch=ALL_ON'>ON</a> | <a href='?_src_=holder;[HrefToken()];change_lag_switch=ALL_OFF'>OFF</a></b><br/>"
|
||||
dat += "<br/>Disable ghosts zoom and t-ray verbs (except staff): <a href='?_src_=holder;[HrefToken()];change_lag_switch=[DISABLE_GHOST_ZOOM_TRAY]'><b>[SSlag_switch.measures[DISABLE_GHOST_ZOOM_TRAY] ? "On" : "Off"]</b></a><br/>"
|
||||
dat += "Disable late joining: <a href='?_src_=holder;[HrefToken()];change_lag_switch=[DISABLE_NON_OBSJOBS]'><b>[SSlag_switch.measures[DISABLE_NON_OBSJOBS] ? "On" : "Off"]</b></a><br/>"
|
||||
dat += "<br/>============! MAD GHOSTS ZONE !============<br/>"
|
||||
dat += "Disable deadmob keyLoop (except staff, informs dchat): <a href='?_src_=holder;[HrefToken()];change_lag_switch=[DISABLE_DEAD_KEYLOOP]'><b>[SSlag_switch.measures[DISABLE_DEAD_KEYLOOP] ? "On" : "Off"]</b></a><br/>"
|
||||
dat += "==========================================<br/>"
|
||||
dat += "<br/><b>Measures below can be bypassed with a <abbr title='TRAIT_BYPASS_MEASURES'><u>special trait</u></abbr></b><br/>"
|
||||
dat += "Slowmode say verb (informs world): <a href='?_src_=holder;[HrefToken()];change_lag_switch=[SLOWMODE_SAY]'><b>[SSlag_switch.measures[SLOWMODE_SAY] ? "On" : "Off"]</b></a><br/>"
|
||||
dat += "Disable runechat: <a href='?_src_=holder;[HrefToken()];change_lag_switch=[DISABLE_RUNECHAT]'><b>[SSlag_switch.measures[DISABLE_RUNECHAT] ? "On" : "Off"]</b></a> - <span style='font-size:80%'>trait applies to speaker</span><br/>"
|
||||
dat += "Disable examine icons: <a href='?_src_=holder;[HrefToken()];change_lag_switch=[DISABLE_USR_ICON2HTML]'><b>[SSlag_switch.measures[DISABLE_USR_ICON2HTML] ? "On" : "Off"]</b></a> - <span style='font-size:80%'>trait applies to examiner</span><br/>"
|
||||
dat += "</body></html>"
|
||||
usr << browse(dat.Join(), "window=lag_switch_panel;size=420x420")
|
||||
|
||||
@@ -31,6 +31,7 @@ GLOBAL_PROTECT(admin_verbs_admin)
|
||||
return list(
|
||||
/client/proc/invisimin, /*allows our mob to go invisible/visible*/
|
||||
// /datum/admins/proc/show_traitor_panel, /*interface which shows a mob's mind*/ -Removed due to rare practical use. Moved to debug verbs ~Errorage
|
||||
/datum/admins/proc/show_lag_switch_panel,
|
||||
/datum/admins/proc/show_player_panel, /*shows an interface for individual players, with various links (links require additional flags*/
|
||||
/datum/verbs/menu/Admin/verb/playerpanel,
|
||||
/client/proc/game_panel, /*game panel, allows to change game-mode etc*/
|
||||
|
||||
@@ -1721,6 +1721,58 @@
|
||||
GLOB.station_goals += G
|
||||
modify_goals()
|
||||
|
||||
else if(href_list["change_lag_switch"])
|
||||
if(!check_rights(R_ADMIN))
|
||||
return
|
||||
|
||||
switch(href_list["change_lag_switch"])
|
||||
if("ALL_ON")
|
||||
SSlag_switch.set_all_measures(TRUE)
|
||||
log_admin("[key_name(usr)] turned all Lag Switch measures ON.")
|
||||
message_admins("[key_name_admin(usr)] turned all Lag Switch measures ON.")
|
||||
if("ALL_OFF")
|
||||
SSlag_switch.set_all_measures(FALSE)
|
||||
log_admin("[key_name(usr)] turned all Lag Switch measures OFF.")
|
||||
message_admins("[key_name_admin(usr)] turned all Lag Switch measures OFF.")
|
||||
else
|
||||
var/switch_index = text2num(href_list["change_lag_switch"])
|
||||
if(!SSlag_switch.set_measure(switch_index, !LAZYACCESS(SSlag_switch.measures, switch_index)))
|
||||
to_chat(src, span_danger("Something went wrong when trying to toggle that Lag Switch. Check runtimes for more info."), confidential = TRUE)
|
||||
else
|
||||
log_admin("[key_name(usr)] turned a Lag Switch measure at index ([switch_index]) [LAZYACCESS(SSlag_switch.measures, switch_index) ? "ON" : "OFF"]")
|
||||
message_admins("[key_name_admin(usr)] turned a Lag Switch measure [LAZYACCESS(SSlag_switch.measures, switch_index) ? "ON" : "OFF"]")
|
||||
|
||||
src.show_lag_switch_panel()
|
||||
|
||||
else if(href_list["change_lag_switch_option"])
|
||||
if(!check_rights(R_ADMIN))
|
||||
return
|
||||
|
||||
switch(href_list["change_lag_switch_option"])
|
||||
if("CANCEL")
|
||||
if(SSlag_switch.cancel_auto_enable_in_progress())
|
||||
log_admin("[key_name(usr)] canceled the automatic Lag Switch activation in progress.")
|
||||
message_admins("[key_name_admin(usr)] canceled the automatic Lag Switch activation in progress.")
|
||||
return // return here to avoid (re)rendering the panel for this case
|
||||
if("TOGGLE_AUTO")
|
||||
SSlag_switch.toggle_auto_enable()
|
||||
log_admin("[key_name(usr)] toggled automatic Lag Switch activation [SSlag_switch.auto_switch ? "ON" : "OFF"].")
|
||||
message_admins("[key_name_admin(usr)] toggled automatic Lag Switch activation [SSlag_switch.auto_switch ? "ON" : "OFF"].")
|
||||
if("NUM")
|
||||
var/new_num = input("Enter new threshold value:", "Num") as null|num
|
||||
if(!isnull(new_num))
|
||||
SSlag_switch.trigger_pop = new_num
|
||||
log_admin("[key_name(usr)] set the Lag Switch automatic trigger pop to [new_num].")
|
||||
message_admins("[key_name_admin(usr)] set the Lag Switch automatic trigger pop to [new_num].")
|
||||
if("SLOWCOOL")
|
||||
var/new_num = input("Enter new cooldown in seconds:", "Num") as null|num
|
||||
if(!isnull(new_num))
|
||||
SSlag_switch.change_slowmode_cooldown(new_num)
|
||||
log_admin("[key_name(usr)] set the Lag Switch slowmode cooldown to [new_num] seconds.")
|
||||
message_admins("[key_name_admin(usr)] set the Lag Switch slowmode cooldown to [new_num] seconds.")
|
||||
|
||||
src.show_lag_switch_panel()
|
||||
|
||||
else if(href_list["viewruntime"])
|
||||
var/datum/error_viewer/error_viewer = locate(href_list["viewruntime"])
|
||||
if(!istype(error_viewer))
|
||||
|
||||
Reference in New Issue
Block a user