mirror of
https://github.com/ddnet/ddnet.git
synced 2024-09-20 01:24:18 +00:00
fixed problem with server and client getting out of sync
This commit is contained in:
parent
f826bc6cac
commit
3014707fe5
|
@ -102,7 +102,6 @@ static snapshot_info *client_snapshot_add(int tick, int64 time, void *data, int
|
||||||
holder->snap = (snapshot *)(holder+1);
|
holder->snap = (snapshot *)(holder+1);
|
||||||
mem_copy(holder->snap, data, data_size);
|
mem_copy(holder->snap, data, data_size);
|
||||||
|
|
||||||
|
|
||||||
holder->next =0x0;
|
holder->next =0x0;
|
||||||
holder->prev = last_snapshot;
|
holder->prev = last_snapshot;
|
||||||
if(last_snapshot)
|
if(last_snapshot)
|
||||||
|
@ -644,19 +643,9 @@ static void client_process_packet(NETPACKET *packet)
|
||||||
int num_parts = 1;
|
int num_parts = 1;
|
||||||
int part = 0;
|
int part = 0;
|
||||||
int part_size = 0;
|
int part_size = 0;
|
||||||
int crc = 0;
|
|
||||||
|
|
||||||
//if(msg == NETMSG_SNAP)
|
|
||||||
{
|
|
||||||
//num_parts = msg_unpack_int();
|
|
||||||
//part = msg_unpack_int();
|
|
||||||
}
|
|
||||||
|
|
||||||
if(msg != NETMSG_SNAPEMPTY)
|
if(msg != NETMSG_SNAPEMPTY)
|
||||||
{
|
|
||||||
part_size = msg_unpack_int();
|
part_size = msg_unpack_int();
|
||||||
crc = msg_unpack_int();
|
|
||||||
}
|
|
||||||
|
|
||||||
if(snapshot_part == part)
|
if(snapshot_part == part)
|
||||||
{
|
{
|
||||||
|
@ -677,8 +666,6 @@ static void client_process_packet(NETPACKET *packet)
|
||||||
unsigned char tmpbuffer2[MAX_SNAPSHOT_SIZE];
|
unsigned char tmpbuffer2[MAX_SNAPSHOT_SIZE];
|
||||||
if(part_size)
|
if(part_size)
|
||||||
{
|
{
|
||||||
if(msg == NETMSG_SNAPEMPTY)
|
|
||||||
dbg_msg("client", "FAILURE!");
|
|
||||||
int compsize = zerobit_decompress(snapshot_incomming_data, part_size, tmpbuffer);
|
int compsize = zerobit_decompress(snapshot_incomming_data, part_size, tmpbuffer);
|
||||||
int intsize = intpack_decompress(tmpbuffer, compsize, tmpbuffer2);
|
int intsize = intpack_decompress(tmpbuffer, compsize, tmpbuffer2);
|
||||||
deltadata = tmpbuffer2;
|
deltadata = tmpbuffer2;
|
||||||
|
@ -762,13 +749,10 @@ static void client_process_packet(NETPACKET *packet)
|
||||||
snapshot_part = 0;
|
snapshot_part = 0;
|
||||||
|
|
||||||
// ack snapshot
|
// ack snapshot
|
||||||
//if((rand()%10)==0)
|
msg_pack_start_system(NETMSG_SNAPACK, 0);
|
||||||
{
|
msg_pack_int(game_tick);
|
||||||
msg_pack_start_system(NETMSG_SNAPACK, 0);
|
msg_pack_end();
|
||||||
msg_pack_int(game_tick);
|
client_send_msg();
|
||||||
msg_pack_end();
|
|
||||||
client_send_msg();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -303,7 +303,7 @@ static int conn_feed(NETCONNECTION *conn, NETPACKETDATA *p, NETADDR4 *addr)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// out of sequence, request resend
|
// out of sequence, request resend
|
||||||
dbg_msg("conn", "asking for resend");
|
//dbg_msg("conn", "asking for resend");
|
||||||
conn_send(conn, NETWORK_PACKETFLAG_RESEND, 0, 0);
|
conn_send(conn, NETWORK_PACKETFLAG_RESEND, 0, 0);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -312,7 +312,7 @@ static int conn_feed(NETCONNECTION *conn, NETPACKETDATA *p, NETADDR4 *addr)
|
||||||
{
|
{
|
||||||
if(p->seq > conn->ack)
|
if(p->seq > conn->ack)
|
||||||
{
|
{
|
||||||
dbg_msg("conn", "asking for resend");
|
//dbg_msg("conn", "asking for resend");
|
||||||
conn_send(conn, NETWORK_PACKETFLAG_RESEND, 0, 0);
|
conn_send(conn, NETWORK_PACKETFLAG_RESEND, 0, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -306,7 +306,6 @@ public:
|
||||||
|
|
||||||
// create delta
|
// create delta
|
||||||
int deltasize = snapshot_create_delta(deltashot, (snapshot*)data, deltadata);
|
int deltasize = snapshot_create_delta(deltashot, (snapshot*)data, deltadata);
|
||||||
//dbg_msg("PACK", "%d unpacked with %d", current_tick, delta_tick);
|
|
||||||
|
|
||||||
if(deltasize)
|
if(deltasize)
|
||||||
{
|
{
|
||||||
|
@ -337,7 +336,6 @@ public:
|
||||||
msg_pack_int(current_tick);
|
msg_pack_int(current_tick);
|
||||||
msg_pack_int(current_tick-delta_tick); // compressed with
|
msg_pack_int(current_tick-delta_tick); // compressed with
|
||||||
msg_pack_int(chunk);
|
msg_pack_int(chunk);
|
||||||
msg_pack_int(snapshot_crc((snapshot*)data));
|
|
||||||
msg_pack_raw(&compdata[n*max_size], chunk);
|
msg_pack_raw(&compdata[n*max_size], chunk);
|
||||||
msg_pack_end();
|
msg_pack_end();
|
||||||
//const msg_info *info = msg_get_info();
|
//const msg_info *info = msg_get_info();
|
||||||
|
|
|
@ -882,17 +882,13 @@ static void render_player(obj_player *prev, obj_player *player)
|
||||||
if(player->health < 0) // dont render dead players
|
if(player->health < 0) // dont render dead players
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (prev->health < 0)
|
|
||||||
{
|
|
||||||
// Don't flicker from previous position
|
|
||||||
prev->x = player->x;
|
|
||||||
prev->y = player->y;
|
|
||||||
}
|
|
||||||
|
|
||||||
vec2 direction = get_direction(player->angle);
|
vec2 direction = get_direction(player->angle);
|
||||||
float angle = player->angle/256.0f;
|
float angle = player->angle/256.0f;
|
||||||
vec2 position = mix(vec2(prev->x, prev->y), vec2(player->x, player->y), client_intratick());
|
vec2 position = mix(vec2(prev->x, prev->y), vec2(player->x, player->y), client_intratick());
|
||||||
|
|
||||||
|
if(prev->health < 0) // Don't flicker from previous position
|
||||||
|
position = vec2(player->x, player->y);
|
||||||
|
|
||||||
bool stationary = player->vx < 1 && player->vx > -1;
|
bool stationary = player->vx < 1 && player->vx > -1;
|
||||||
bool inair = col_check_point(player->x, player->y+16) == 0;
|
bool inair = col_check_point(player->x, player->y+16) == 0;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue