From e0c33596e8e51d902cde1bc79d6a589cf6243316 Mon Sep 17 00:00:00 2001 From: James R Date: Sat, 27 Apr 2024 04:09:18 -0700 Subject: [PATCH] Sync mindelay setting to server - Adds playerdelaytable, no UX changes --- src/cvars.cpp | 3 ++- src/d_clisrv.c | 4 ++++ src/d_clisrv.h | 2 ++ src/d_netcmd.c | 13 ++++++++++++- 4 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/cvars.cpp b/src/cvars.cpp index fcb0e08cd..b5e45757d 100644 --- a/src/cvars.cpp +++ b/src/cvars.cpp @@ -399,7 +399,6 @@ consvar_t cv_menuframeskip = Player("menuframeskip", "Off").values({ {144, "MAX"}, {0, "Off"}, }); -consvar_t cv_mindelay = Player("mindelay", "2").min_max(0, 30); consvar_t cv_movebob = Player("movebob", "1.0").floating_point().min_max(0, 4*FRACUNIT); consvar_t cv_netstat = Player("netstat", "Off").on_off().dont_save(); // show bandwidth statistics consvar_t cv_netticbuffer = Player("netticbuffer", "1").min_max(0, 3); @@ -1193,6 +1192,8 @@ consvar_t cv_kickstartaccel[MAXSPLITSCREENPLAYERS] = { Player("kickstartaccel4", "Off").on_off().onchange(weaponPrefChange4) }; +consvar_t cv_mindelay = Player("mindelay", "2").min_max(0, 30).onchange(weaponPrefChange); + extern CV_PossibleValue_t Color_cons_t[]; void Color1_OnChange(void); void Color2_OnChange(void); diff --git a/src/d_clisrv.c b/src/d_clisrv.c index a4a778bec..959f86248 100644 --- a/src/d_clisrv.c +++ b/src/d_clisrv.c @@ -122,6 +122,7 @@ UINT16 pingmeasurecount = 1; UINT32 realpingtable[MAXPLAYERS]; //the base table of ping where an average will be sent to everyone. UINT32 playerpingtable[MAXPLAYERS]; //table of player latency values. UINT32 playerpacketlosstable[MAXPLAYERS]; +UINT32 playerdelaytable[MAXPLAYERS]; // mindelay values. #define GENTLEMANSMOOTHING (TICRATE) static tic_t reference_lag; @@ -3344,6 +3345,7 @@ void SV_ResetServer(void) memset(realpingtable, 0, sizeof realpingtable); memset(playerpingtable, 0, sizeof playerpingtable); memset(playerpacketlosstable, 0, sizeof playerpacketlosstable); + memset(playerdelaytable, 0, sizeof playerdelaytable); ClearAdminPlayers(); Schedule_Clear(); @@ -5278,6 +5280,7 @@ static void HandlePacketFromPlayer(SINT8 node) { playerpingtable[i] = (tic_t)netbuffer->u.netinfo.pingtable[i]; playerpacketlosstable[i] = netbuffer->u.netinfo.packetloss[i]; + playerdelaytable[i] = netbuffer->u.netinfo.delay[i]; } } @@ -6251,6 +6254,7 @@ static inline void PingUpdate(void) } netbuffer->u.netinfo.packetloss[i] = lost; + netbuffer->u.netinfo.delay[i] = playerdelaytable[i]; } // send the server's maxping as last element of our ping table. This is useful to let us know when we're about to get kicked. diff --git a/src/d_clisrv.h b/src/d_clisrv.h index c9277fac6..dc80c059e 100644 --- a/src/d_clisrv.h +++ b/src/d_clisrv.h @@ -405,6 +405,7 @@ struct netinfo_pak { UINT32 pingtable[MAXPLAYERS+1]; UINT32 packetloss[MAXPLAYERS+1]; + UINT32 delay[MAXPLAYERS+1]; } ATTRPACK; // @@ -546,6 +547,7 @@ extern UINT16 pingmeasurecount; extern UINT32 realpingtable[MAXPLAYERS]; extern UINT32 playerpingtable[MAXPLAYERS]; extern UINT32 playerpacketlosstable[MAXPLAYERS]; +extern UINT32 playerdelaytable[MAXPLAYERS]; extern tic_t servermaxping; extern boolean server_lagless; diff --git a/src/d_netcmd.c b/src/d_netcmd.c index 7a9d1b403..6dfb53797 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -1276,7 +1276,11 @@ void WeaponPref_Send(UINT8 ssplayer) if (gamecontrolflags[ssplayer] & GCF_ANALOGSTICK) prefs |= WP_ANALOGSTICK; - SendNetXCmdForPlayer(ssplayer, XD_WEAPONPREF, &prefs, 1); + UINT8 buf[2]; + buf[0] = prefs; + buf[1] = cv_mindelay.value; + + SendNetXCmdForPlayer(ssplayer, XD_WEAPONPREF, buf, sizeof buf); } void WeaponPref_Save(UINT8 **cp, INT32 playernum) @@ -1338,6 +1342,13 @@ static void Got_WeaponPref(const UINT8 **cp,INT32 playernum) { *cp += WeaponPref_Parse(*cp, playernum); + UINT8 mindelay = READUINT8(*cp); + if (server) + { + for (UINT8 i = 0; i < G_LocalSplitscreenPartySize(playernum); ++i) + playerdelaytable[G_LocalSplitscreenPartyMember(playernum, i)] = mindelay; + } + // SEE ALSO g_demo.c demo_extradata[playernum] |= DXD_WEAPONPREF; }