Sync mindelay setting to server

- Adds playerdelaytable, no UX changes
This commit is contained in:
James R 2024-04-27 04:09:18 -07:00
parent 2eae5b2ef6
commit e0c33596e8
4 changed files with 20 additions and 2 deletions

View file

@ -399,7 +399,6 @@ consvar_t cv_menuframeskip = Player("menuframeskip", "Off").values({
{144, "MAX"}, {144, "MAX"},
{0, "Off"}, {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_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_netstat = Player("netstat", "Off").on_off().dont_save(); // show bandwidth statistics
consvar_t cv_netticbuffer = Player("netticbuffer", "1").min_max(0, 3); 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) 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[]; extern CV_PossibleValue_t Color_cons_t[];
void Color1_OnChange(void); void Color1_OnChange(void);
void Color2_OnChange(void); void Color2_OnChange(void);

View file

@ -122,6 +122,7 @@ UINT16 pingmeasurecount = 1;
UINT32 realpingtable[MAXPLAYERS]; //the base table of ping where an average will be sent to everyone. 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 playerpingtable[MAXPLAYERS]; //table of player latency values.
UINT32 playerpacketlosstable[MAXPLAYERS]; UINT32 playerpacketlosstable[MAXPLAYERS];
UINT32 playerdelaytable[MAXPLAYERS]; // mindelay values.
#define GENTLEMANSMOOTHING (TICRATE) #define GENTLEMANSMOOTHING (TICRATE)
static tic_t reference_lag; static tic_t reference_lag;
@ -3344,6 +3345,7 @@ void SV_ResetServer(void)
memset(realpingtable, 0, sizeof realpingtable); memset(realpingtable, 0, sizeof realpingtable);
memset(playerpingtable, 0, sizeof playerpingtable); memset(playerpingtable, 0, sizeof playerpingtable);
memset(playerpacketlosstable, 0, sizeof playerpacketlosstable); memset(playerpacketlosstable, 0, sizeof playerpacketlosstable);
memset(playerdelaytable, 0, sizeof playerdelaytable);
ClearAdminPlayers(); ClearAdminPlayers();
Schedule_Clear(); Schedule_Clear();
@ -5278,6 +5280,7 @@ static void HandlePacketFromPlayer(SINT8 node)
{ {
playerpingtable[i] = (tic_t)netbuffer->u.netinfo.pingtable[i]; playerpingtable[i] = (tic_t)netbuffer->u.netinfo.pingtable[i];
playerpacketlosstable[i] = netbuffer->u.netinfo.packetloss[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.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. // 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.

View file

@ -405,6 +405,7 @@ struct netinfo_pak
{ {
UINT32 pingtable[MAXPLAYERS+1]; UINT32 pingtable[MAXPLAYERS+1];
UINT32 packetloss[MAXPLAYERS+1]; UINT32 packetloss[MAXPLAYERS+1];
UINT32 delay[MAXPLAYERS+1];
} ATTRPACK; } ATTRPACK;
// //
@ -546,6 +547,7 @@ extern UINT16 pingmeasurecount;
extern UINT32 realpingtable[MAXPLAYERS]; extern UINT32 realpingtable[MAXPLAYERS];
extern UINT32 playerpingtable[MAXPLAYERS]; extern UINT32 playerpingtable[MAXPLAYERS];
extern UINT32 playerpacketlosstable[MAXPLAYERS]; extern UINT32 playerpacketlosstable[MAXPLAYERS];
extern UINT32 playerdelaytable[MAXPLAYERS];
extern tic_t servermaxping; extern tic_t servermaxping;
extern boolean server_lagless; extern boolean server_lagless;

View file

@ -1276,7 +1276,11 @@ void WeaponPref_Send(UINT8 ssplayer)
if (gamecontrolflags[ssplayer] & GCF_ANALOGSTICK) if (gamecontrolflags[ssplayer] & GCF_ANALOGSTICK)
prefs |= WP_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) 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); *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 // SEE ALSO g_demo.c
demo_extradata[playernum] |= DXD_WEAPONPREF; demo_extradata[playernum] |= DXD_WEAPONPREF;
} }