Skip to content

Commit 8b55a96

Browse files
committed
made it possible to change gamesettings in the f1-menu on dedicated servers
1 parent bc824f1 commit 8b55a96

File tree

4 files changed

+96
-11
lines changed

4 files changed

+96
-11
lines changed

src/gamemodes/amongus/gamemode/cl_net.moon

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -507,3 +507,24 @@ net.Receive "NMW AU Flow", -> switch net.ReadUInt GAMEMODE.FlowSize
507507
return unless IsValid GAMEMODE.Hud
508508

509509
GAMEMODE\HUD_ShowHelp!
510+
511+
skipSync = {}
512+
for _, cvar in ipairs GAMEMODE.replicatedWritableCvars
513+
cvars.AddChangeCallback GAMEMODE.ConVars[cvar]\GetName!, ((cvar, oldValue, newValue) ->
514+
if skipSync[cvar]
515+
skipSync[cvar] = false
516+
elseif CAMI.PlayerHasAccess LocalPlayer!, GAMEMODE.PRIV_CHANGE_SETTINGS
517+
net.Start "AU ChangeCvar"
518+
net.WriteString cvar
519+
net.WriteString newValue
520+
net.SendToServer!
521+
else
522+
print "Only admins can change ConVar #{cvar}"
523+
skipSync[cvar] = true
524+
RunConsoleCommand cvar, oldValue
525+
), "SendToServer"
526+
527+
net.Receive "AU ChangeCvar", (len, ply) ->
528+
cvar = net.ReadString!
529+
skipSync[cvar] = true
530+
RunConsoleCommand cvar, net.ReadString!

src/gamemodes/amongus/gamemode/shared.moon

Lines changed: 33 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ GM.WorkshopID = "{{CI_WORKSHOP_ID}}"
1717
GM.Version = "manual-build" if GM.Version == "{{" .. "CI_GAMEMODE_VERSION}}"
1818
GM.WorkshopID = nil if GM.WorkshopID == "{{" .. "CI_WORKSHOP_ID}}"
1919

20-
flags = bit.bor FCVAR_ARCHIVE, FCVAR_REPLICATED
20+
flags = FCVAR_ARCHIVE
21+
flagsRep = bit.bor FCVAR_ARCHIVE, FCVAR_REPLICATED
2122

2223
--- Table of all ConVars the game mode is using.
2324
-- These are tracked and cannot be changed during the round.
@@ -45,7 +46,7 @@ flags = bit.bor FCVAR_ARCHIVE, FCVAR_REPLICATED
4546
-- @field ForceAutoWarmup (Bool) Should the automated round management be forced?
4647
GM.ConVars =
4748
ImposterCount: CreateConVar "au_max_imposters" , 1 , flags, "", 1, 10
48-
MinPlayers: CreateConVar "au_min_players" , 3 , flags, "", 3, 128
49+
MinPlayers: CreateConVar "au_min_players" , 3 , flagsRep, "", 3, 128
4950
KillCooldown: CreateConVar "au_kill_cooldown" , 20, flags, "", 1, 60
5051
KillDistanceMod: CreateConVar "au_killdistance_mod", 1 , flags, "", 1, 3
5152
ConfirmEjects: CreateConVar "au_confirm_ejects" , 1 , flags, "", 0, 1
@@ -65,19 +66,42 @@ GM.ConVars =
6566
TasksCommon: CreateConVar "au_tasks_common" , 1, flags, "", 0, 5
6667
TasksVisual: CreateConVar "au_tasks_enable_visual", 0, flags, "", 0, 1
6768

68-
DistributeTasksToBots: CreateConVar "au_debug_bot_tasks" , 0, flags, "", 0, 1
69-
MeetingBotVote: CreateConVar "au_debug_bot_vote" , 0, flags, "", 0, 1
69+
DistributeTasksToBots: CreateConVar "au_debug_bot_tasks" , 0, flagsRep, "", 0, 1
70+
MeetingBotVote: CreateConVar "au_debug_bot_vote" , 0, flagsRep, "", 0, 1
7071

7172
TimeLimit: CreateConVar "au_time_limit", 600, flags, "", 0, 1200
72-
Countdown: CreateConVar "au_countdown" , 5 , flags, "", 1, 10
73+
Countdown: CreateConVar "au_countdown" , 5 , flagsRep, "", 1, 10
7374

74-
WarmupTime: CreateConVar "au_warmup_time" , 60, flags, "", 0, 120
75-
ForceAutoWarmup: CreateConVar "au_warmup_force_auto", 0 , flags, "", 0, 1
75+
WarmupTime: CreateConVar "au_warmup_time" , 60, flagsRep, "", 0, 120
76+
ForceAutoWarmup: CreateConVar "au_warmup_force_auto", 0 , flagsRep, "", 0, 1
7677

7778
PlayerModel: CreateConVar "au_player_model", "models/amongus/player/player.mdl",
78-
flags, ""
79+
flagsRep, ""
7980
CorpseModel: CreateConVar "au_corpse_model", "models/amongus/player/corpse.mdl",
80-
flags, ""
81+
flagsRep, ""
82+
83+
GM.replicatedWritableCvars = {
84+
"ImposterCount"
85+
"KillCooldown"
86+
"TimeLimit"
87+
"KillDistanceMod"
88+
"AllTalk"
89+
"TaskbarUpdates"
90+
"PlayerSpeedMod"
91+
92+
"MeetingsPerPlayer"
93+
"MeetingCooldown"
94+
"VoteTime"
95+
"VotePreTime"
96+
"VotePostTime"
97+
"ConfirmEjects"
98+
"VoteAnonymous"
99+
100+
"TasksShort"
101+
"TasksLong"
102+
"TasksCommon"
103+
"TasksVisual"
104+
}
81105

82106
--- Enum of all colors players can get.
83107
-- @table GM.Colors

src/gamemodes/amongus/gamemode/sv_net.moon

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
-- @module sv_net
44

55
util.AddNetworkString "NMW AU Flow"
6+
util.AddNetworkString "AU ChangeCvar"
67

78
--- Sends the game state update.
89
-- @param ply Player entity.
@@ -428,6 +429,7 @@ net.Receive "NMW AU Flow", (len, ply) ->
428429
ply\SetPlayerColor GAMEMODE.Colors[preferred]\ToVector!
429430

430431
GAMEMODE\Net_UpdateGameState ply
432+
GAMEMODE\Net_SyncGameSettings ply
431433

432434
--
433435
-- Player has closed the task window.
@@ -538,3 +540,34 @@ GM.SetOnAutoPilot = (newState) =>
538540
-- @return You guessed it again.
539541
GM.SetFullyInitializedPlayerCount = (newCount) =>
540542
SetGlobalInt "NMW AU FullyInitializedPlayers", newCount
543+
544+
GM.Net_SyncGameSettings = (ply) =>
545+
for _, cvar in ipairs GAMEMODE.replicatedWritableCvars
546+
net.Start "AU ChangeCvar"
547+
net.WriteString GAMEMODE.ConVars[cvar]\GetName!
548+
net.WriteString GAMEMODE.ConVars[cvar]\GetString!
549+
net.Send ply
550+
551+
skipSync = {}
552+
for _, cvar in ipairs GAMEMODE.replicatedWritableCvars
553+
cvars.AddChangeCallback GAMEMODE.ConVars[cvar]\GetName!, ((cvar, oldValue, newValue) ->
554+
if skipSync[cvar]
555+
skipSync[cvar] = false
556+
else
557+
net.Start "AU ChangeCvar"
558+
net.WriteString cvar
559+
net.WriteString newValue
560+
net.Broadcast!
561+
), "SendToClient"
562+
563+
net.Receive "AU ChangeCvar", (len, ply) ->
564+
isWritableCvar = (cvarName) ->
565+
for _, cvar in ipairs GAMEMODE.replicatedWritableCvars
566+
if GAMEMODE.ConVars[cvar]\GetName! == cvarName
567+
return true
568+
return false
569+
570+
cvar = net.ReadString!
571+
if CAMI.PlayerHasAccess(ply, GAMEMODE.PRIV_CHANGE_SETTINGS) and isWritableCvar(cvar)
572+
skipSync[cvar] = true
573+
RunConsoleCommand cvar, net.ReadString!

src/gamemodes/amongus/gamemode/vgui/vgui_showhelp.moon

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -340,7 +340,7 @@ return vgui.RegisterTable {
340340
.Paint = (_, w, h) ->
341341
draw.RoundedBox cornerRadiusBase * 1.5, 0, 0, w, h, entryColor
342342

343-
element = if (CAMI.PlayerHasAccess LocalPlayer!, GAMEMODE.PRIV_CHANGE_SETTINGS) and LocalPlayer!\GetNWBool "NMW AU Host"
343+
element = if CAMI.PlayerHasAccess LocalPlayer!, GAMEMODE.PRIV_CHANGE_SETTINGS
344344
-- Show the admin stuffs to admins.
345345
switch type
346346
when "Int", "Time", "Mod"
@@ -360,7 +360,14 @@ return vgui.RegisterTable {
360360

361361
depressed = false
362362
.OnDepressed = -> depressed = true
363-
.OnReleased = -> depressed = false
363+
.OnReleased = ->
364+
depressed = false
365+
if conVarName == "sv_alltalk"
366+
-- sending value here to server because sv_alltalk doesn't callback on client (https://github.com/Facepunch/garrysmod-issues/issues/3503)
367+
net.Start "AU ChangeCvar"
368+
net.WriteString conVarName
369+
net.WriteString \GetChecked() and "0" or "1"
370+
net.SendToServer!
364371

365372
.Paint = (_, w, h) ->
366373
depressedPadding = w * 0.025

0 commit comments

Comments
 (0)