parent
56e7f73f63
commit
f20107d5f7
1 changed files with 16 additions and 6 deletions
|
|
@ -139,6 +139,7 @@ boolean receivedplayerinfo = false;
|
|||
|
||||
tic_t servermaxping = 20; // server's max delay, in frames. Defaults to 20
|
||||
static tic_t nettics[MAXNETNODES]; // what tic the client have received
|
||||
static tic_t supposedtics[MAXNETNODES]; // nettics prevision for smaller packet
|
||||
static UINT8 nodewaiting[MAXNETNODES];
|
||||
static tic_t firstticstosend; // min of the nettics
|
||||
static tic_t tictoclear = 0; // optimize d_clearticcmd
|
||||
|
|
@ -3576,6 +3577,7 @@ static void ResetNode(INT32 node)
|
|||
nodewaiting[node] = 0;
|
||||
|
||||
nettics[node] = gametic;
|
||||
supposedtics[node] = gametic;
|
||||
|
||||
nodetoplayer[node] = -1;
|
||||
nodetoplayer2[node] = -1;
|
||||
|
|
@ -3743,6 +3745,7 @@ void D_QuitNetGame(void)
|
|||
static inline void SV_AddNode(INT32 node)
|
||||
{
|
||||
nettics[node] = gametic;
|
||||
supposedtics[node] = gametic;
|
||||
// little hack because the server connects to itself and puts
|
||||
// nodeingame when connected not here
|
||||
if (node)
|
||||
|
|
@ -5860,11 +5863,12 @@ static void SV_SendTics(void)
|
|||
|
||||
// send to all client but not to me
|
||||
// for each node create a packet with x tics and send it
|
||||
// x is computed using nettics[n], max packet size and maketic
|
||||
// x is computed using supposedtics[n], max packet size and maketic
|
||||
for (n = 1; n < MAXNETNODES; n++)
|
||||
if (nodeingame[n])
|
||||
{
|
||||
realfirsttic = nettics[n];
|
||||
// assert supposedtics[n]>=nettics[n]
|
||||
realfirsttic = max(supposedtics[n], firstticstosend);
|
||||
lasttictosend = min(maketic, nettics[n] + CLIENTBACKUPTICS);
|
||||
|
||||
if (realfirsttic >= lasttictosend)
|
||||
|
|
@ -5873,8 +5877,8 @@ static void SV_SendTics(void)
|
|||
// to resent packet that are supposed lost (this is necessary since lost
|
||||
// packet detection work when we have received packet with firsttic > neededtic
|
||||
// (getpacket servertics case)
|
||||
DEBFILE(va("Nothing to send node %u mak=%u net=%u \n",
|
||||
n, lasttictosend, nettics[n]));
|
||||
DEBFILE(va("Nothing to send node %u mak=%u sup=%u net=%u \n",
|
||||
n, lasttictosend, supposedtics[n], nettics[n]));
|
||||
realfirsttic = nettics[n];
|
||||
if (realfirsttic >= lasttictosend || (I_GetTime() + n)&3)
|
||||
// all tic are ok
|
||||
|
|
@ -5951,10 +5955,16 @@ static void SV_SendTics(void)
|
|||
packsize = bufpos - (UINT8 *)&(netbuffer->u);
|
||||
|
||||
HSendPacket(n, false, 0, packsize);
|
||||
}
|
||||
// when tic are too large, only one tic is sent so don't go backward!
|
||||
if (lasttictosend-doomcom->extratics > realfirsttic)
|
||||
supposedtics[n] = lasttictosend-doomcom->extratics;
|
||||
else
|
||||
supposedtics[n] = lasttictosend;
|
||||
|
||||
supposedtics[n] = max(supposedtics[n], nettics[n]);
|
||||
}
|
||||
// node 0 is me!
|
||||
nettics[0] = maketic;
|
||||
supposedtics[0] = maketic;
|
||||
}
|
||||
|
||||
//
|
||||
|
|
|
|||
Loading…
Reference in a new issue