mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2026-04-26 12:01:47 +00:00
Merge branch 'join-delay' into 'next'
Add a minimum delay between connections See merge request STJr/SRB2!889
This commit is contained in:
commit
2c74085826
4 changed files with 31 additions and 5 deletions
|
|
@ -85,6 +85,10 @@ tic_t jointimeout = (10*TICRATE);
|
||||||
static boolean sendingsavegame[MAXNETNODES]; // Are we sending the savegame?
|
static boolean sendingsavegame[MAXNETNODES]; // Are we sending the savegame?
|
||||||
static tic_t freezetimeout[MAXNETNODES]; // Until when can this node freeze the server before getting a timeout?
|
static tic_t freezetimeout[MAXNETNODES]; // Until when can this node freeze the server before getting a timeout?
|
||||||
|
|
||||||
|
// Incremented by cv_joindelay when a client joins, decremented each tic.
|
||||||
|
// If higher than cv_joindelay * 2 (3 joins in a short timespan), joins are temporarily disabled.
|
||||||
|
static tic_t joindelay = 0;
|
||||||
|
|
||||||
UINT16 pingmeasurecount = 1;
|
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.
|
||||||
|
|
@ -3077,6 +3081,8 @@ consvar_t cv_allownewplayer = {"allowjoin", "On", CV_NETVAR, CV_OnOff, NULL, 0,
|
||||||
consvar_t cv_joinnextround = {"joinnextround", "Off", CV_NETVAR, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; /// \todo not done
|
consvar_t cv_joinnextround = {"joinnextround", "Off", CV_NETVAR, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; /// \todo not done
|
||||||
static CV_PossibleValue_t maxplayers_cons_t[] = {{2, "MIN"}, {32, "MAX"}, {0, NULL}};
|
static CV_PossibleValue_t maxplayers_cons_t[] = {{2, "MIN"}, {32, "MAX"}, {0, NULL}};
|
||||||
consvar_t cv_maxplayers = {"maxplayers", "8", CV_SAVE, maxplayers_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL};
|
consvar_t cv_maxplayers = {"maxplayers", "8", CV_SAVE, maxplayers_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL};
|
||||||
|
static CV_PossibleValue_t joindelay_cons_t[] = {{1, "MIN"}, {3600, "MAX"}, {0, "Off"}, {0, NULL}};
|
||||||
|
consvar_t cv_joindelay = {"joindelay", "10", CV_SAVE, joindelay_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL};
|
||||||
static CV_PossibleValue_t rejointimeout_cons_t[] = {{1, "MIN"}, {60 * FRACUNIT, "MAX"}, {0, "Off"}, {0, NULL}};
|
static CV_PossibleValue_t rejointimeout_cons_t[] = {{1, "MIN"}, {60 * FRACUNIT, "MAX"}, {0, "Off"}, {0, NULL}};
|
||||||
consvar_t cv_rejointimeout = {"rejointimeout", "Off", CV_SAVE|CV_FLOAT, rejointimeout_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL};
|
consvar_t cv_rejointimeout = {"rejointimeout", "Off", CV_SAVE|CV_FLOAT, rejointimeout_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL};
|
||||||
|
|
||||||
|
|
@ -3164,6 +3170,8 @@ void SV_ResetServer(void)
|
||||||
neededtic = maketic;
|
neededtic = maketic;
|
||||||
tictoclear = maketic;
|
tictoclear = maketic;
|
||||||
|
|
||||||
|
joindelay = 0;
|
||||||
|
|
||||||
for (i = 0; i < MAXNETNODES; i++)
|
for (i = 0; i < MAXNETNODES; i++)
|
||||||
ResetNode(i);
|
ResetNode(i);
|
||||||
|
|
||||||
|
|
@ -3613,6 +3621,9 @@ static void HandleConnect(SINT8 node)
|
||||||
SV_SendRefuse(node, M_GetText("No players from\nthis node."));
|
SV_SendRefuse(node, M_GetText("No players from\nthis node."));
|
||||||
else if (luafiletransfers)
|
else if (luafiletransfers)
|
||||||
SV_SendRefuse(node, M_GetText("The server is broadcasting a file\nrequested by a Lua script.\nPlease wait a bit and then\ntry rejoining."));
|
SV_SendRefuse(node, M_GetText("The server is broadcasting a file\nrequested by a Lua script.\nPlease wait a bit and then\ntry rejoining."));
|
||||||
|
else if (netgame && joindelay > 2 * (tic_t)cv_joindelay.value * TICRATE)
|
||||||
|
SV_SendRefuse(node, va(M_GetText("Too many people are connecting.\nPlease wait %d seconds and then\ntry rejoining."),
|
||||||
|
(joindelay - 2 * cv_joindelay.value * TICRATE) / TICRATE));
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
#ifndef NONET
|
#ifndef NONET
|
||||||
|
|
@ -3670,6 +3681,7 @@ static void HandleConnect(SINT8 node)
|
||||||
DEBFILE("send savegame\n");
|
DEBFILE("send savegame\n");
|
||||||
}
|
}
|
||||||
SV_AddWaitingPlayers(names[0], names[1]);
|
SV_AddWaitingPlayers(names[0], names[1]);
|
||||||
|
joindelay += cv_joindelay.value * TICRATE;
|
||||||
player_joining = true;
|
player_joining = true;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
|
|
@ -5038,12 +5050,21 @@ void NetUpdate(void)
|
||||||
hu_resynching = true;
|
hu_resynching = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Net_AckTicker();
|
Net_AckTicker();
|
||||||
|
|
||||||
// Handle timeouts to prevent definitive freezes from happenning
|
// Handle timeouts to prevent definitive freezes from happenning
|
||||||
if (server)
|
if (server)
|
||||||
|
{
|
||||||
for (i = 1; i < MAXNETNODES; i++)
|
for (i = 1; i < MAXNETNODES; i++)
|
||||||
if (nodeingame[i] && freezetimeout[i] < I_GetTime())
|
if (nodeingame[i] && freezetimeout[i] < I_GetTime())
|
||||||
Net_ConnectionTimeout(i);
|
Net_ConnectionTimeout(i);
|
||||||
|
|
||||||
|
// In case the cvar value was lowered
|
||||||
|
if (joindelay)
|
||||||
|
joindelay = min(joindelay - 1, 3 * cv_joindelay.value * TICRATE);
|
||||||
|
}
|
||||||
|
|
||||||
nowtime /= NEWTICRATERATIO;
|
nowtime /= NEWTICRATERATIO;
|
||||||
if (nowtime > resptime)
|
if (nowtime > resptime)
|
||||||
{
|
{
|
||||||
|
|
@ -5051,6 +5072,7 @@ void NetUpdate(void)
|
||||||
M_Ticker();
|
M_Ticker();
|
||||||
CON_Ticker();
|
CON_Ticker();
|
||||||
}
|
}
|
||||||
|
|
||||||
SV_FileSendTicker();
|
SV_FileSendTicker();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -515,7 +515,7 @@ extern UINT32 realpingtable[MAXPLAYERS];
|
||||||
extern UINT32 playerpingtable[MAXPLAYERS];
|
extern UINT32 playerpingtable[MAXPLAYERS];
|
||||||
extern tic_t servermaxping;
|
extern tic_t servermaxping;
|
||||||
|
|
||||||
extern consvar_t cv_allownewplayer, cv_joinnextround, cv_maxplayers, cv_rejointimeout;
|
extern consvar_t cv_allownewplayer, cv_joinnextround, cv_maxplayers, cv_joindelay, cv_rejointimeout;
|
||||||
extern consvar_t cv_resynchattempts, cv_blamecfail;
|
extern consvar_t cv_resynchattempts, cv_blamecfail;
|
||||||
extern consvar_t cv_maxsend, cv_noticedownload, cv_downloadspeed;
|
extern consvar_t cv_maxsend, cv_noticedownload, cv_downloadspeed;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -573,6 +573,7 @@ void D_RegisterServerCommands(void)
|
||||||
|
|
||||||
// d_clisrv
|
// d_clisrv
|
||||||
CV_RegisterVar(&cv_maxplayers);
|
CV_RegisterVar(&cv_maxplayers);
|
||||||
|
CV_RegisterVar(&cv_joindelay);
|
||||||
CV_RegisterVar(&cv_rejointimeout);
|
CV_RegisterVar(&cv_rejointimeout);
|
||||||
CV_RegisterVar(&cv_resynchattempts);
|
CV_RegisterVar(&cv_resynchattempts);
|
||||||
CV_RegisterVar(&cv_maxsend);
|
CV_RegisterVar(&cv_maxsend);
|
||||||
|
|
|
||||||
11
src/m_menu.c
11
src/m_menu.c
|
|
@ -1583,7 +1583,7 @@ static menuitem_t OP_ServerOptionsMenu[] =
|
||||||
{IT_HEADER, NULL, "General", NULL, 0},
|
{IT_HEADER, NULL, "General", NULL, 0},
|
||||||
#ifndef NONET
|
#ifndef NONET
|
||||||
{IT_STRING | IT_CVAR | IT_CV_STRING,
|
{IT_STRING | IT_CVAR | IT_CV_STRING,
|
||||||
NULL, "Server name", &cv_servername, 7},
|
NULL, "Server name", &cv_servername, 7},
|
||||||
{IT_STRING | IT_CVAR, NULL, "Max Players", &cv_maxplayers, 21},
|
{IT_STRING | IT_CVAR, NULL, "Max Players", &cv_maxplayers, 21},
|
||||||
{IT_STRING | IT_CVAR, NULL, "Allow Add-on Downloading", &cv_downloading, 26},
|
{IT_STRING | IT_CVAR, NULL, "Allow Add-on Downloading", &cv_downloading, 26},
|
||||||
{IT_STRING | IT_CVAR, NULL, "Allow players to join", &cv_allownewplayer, 31},
|
{IT_STRING | IT_CVAR, NULL, "Allow players to join", &cv_allownewplayer, 31},
|
||||||
|
|
@ -1628,8 +1628,9 @@ static menuitem_t OP_ServerOptionsMenu[] =
|
||||||
|
|
||||||
#ifndef NONET
|
#ifndef NONET
|
||||||
{IT_HEADER, NULL, "Advanced", NULL, 225},
|
{IT_HEADER, NULL, "Advanced", NULL, 225},
|
||||||
{IT_STRING | IT_CVAR | IT_CV_STRING, NULL, "Master server", &cv_masterserver, 231},
|
{IT_STRING | IT_CVAR | IT_CV_STRING, NULL, "Master server", &cv_masterserver, 231},
|
||||||
{IT_STRING | IT_CVAR, NULL, "Attempts to resynchronise", &cv_resynchattempts, 245},
|
{IT_STRING | IT_CVAR, NULL, "Join delay", &cv_joindelay, 246},
|
||||||
|
{IT_STRING | IT_CVAR, NULL, "Attempts to resynchronise", &cv_resynchattempts, 251},
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -10822,7 +10823,8 @@ static void M_ServerOptions(INT32 choice)
|
||||||
OP_ServerOptionsMenu[ 3].status = IT_GRAYEDOUT; // Allow add-on downloading
|
OP_ServerOptionsMenu[ 3].status = IT_GRAYEDOUT; // Allow add-on downloading
|
||||||
OP_ServerOptionsMenu[ 4].status = IT_GRAYEDOUT; // Allow players to join
|
OP_ServerOptionsMenu[ 4].status = IT_GRAYEDOUT; // Allow players to join
|
||||||
OP_ServerOptionsMenu[35].status = IT_GRAYEDOUT; // Master server
|
OP_ServerOptionsMenu[35].status = IT_GRAYEDOUT; // Master server
|
||||||
OP_ServerOptionsMenu[36].status = IT_GRAYEDOUT; // Attempts to resynchronise
|
OP_ServerOptionsMenu[36].status = IT_GRAYEDOUT; // Minimum delay between joins
|
||||||
|
OP_ServerOptionsMenu[37].status = IT_GRAYEDOUT; // Attempts to resynchronise
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
@ -10834,6 +10836,7 @@ static void M_ServerOptions(INT32 choice)
|
||||||
? IT_GRAYEDOUT
|
? IT_GRAYEDOUT
|
||||||
: (IT_STRING | IT_CVAR | IT_CV_STRING));
|
: (IT_STRING | IT_CVAR | IT_CV_STRING));
|
||||||
OP_ServerOptionsMenu[36].status = IT_STRING | IT_CVAR;
|
OP_ServerOptionsMenu[36].status = IT_STRING | IT_CVAR;
|
||||||
|
OP_ServerOptionsMenu[37].status = IT_STRING | IT_CVAR;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue