diff --git a/source/src/client.cpp b/source/src/client.cpp index 1d3b38e2..8cc891fd 100644 --- a/source/src/client.cpp +++ b/source/src/client.cpp @@ -459,9 +459,8 @@ void c2sinfo(playerent *d) // send update to the server dz >= -8 && dz <= 7) { // compact POS packet bitbuf b(q); - putint(q, SV_POSC); + putint(q, SV_POSC + usefactor - 7); b.putbits(5, cn); - b.putbits(2, usefactor - 7); b.putbits(usefactor + 4, x); b.putbits(usefactor + 4, y); b.putbits(YAWBITS, ya); diff --git a/source/src/clients2c.cpp b/source/src/clients2c.cpp index 223a5836..de4c7ffd 100644 --- a/source/src/clients2c.cpp +++ b/source/src/clients2c.cpp @@ -115,14 +115,17 @@ void parsepositions(ucharbuf &p) { case SV_POS: // position of another client case SV_POSC: + case SV_POSC2: + case SV_POSC3: + case SV_POSC4: { int cn, f, yaw, pitch, z; vec o, vel; - if(type == SV_POSC) + if(type != SV_POS) { bitbuf q(p); cn = q.getbits(5); - int usefactor = q.getbits(2) + 7; + int usefactor = type - SV_POSC + 7; o.x = q.getbits(usefactor + 4) / DMF; o.y = q.getbits(usefactor + 4) / DMF; yaw = q.getbits(YAWBITS); diff --git a/source/src/protocol.cpp b/source/src/protocol.cpp index c090c599..1f31f874 100644 --- a/source/src/protocol.cpp +++ b/source/src/protocol.cpp @@ -580,7 +580,7 @@ float decodeyaw(int r) static const int msgsizes[] = // size inclusive message token, 0 for variable or not-checked sizes { - SV_SERVINFO, 1, SV_SERVINFO_RESPONSE, 0, SV_SERVINFO_CONTD, 0, SV_WELCOME, 2, SV_INITCLIENT, 0, SV_POS, 0, SV_POSC, 0, SV_POSN, 0, + SV_SERVINFO, 1, SV_SERVINFO_RESPONSE, 0, SV_SERVINFO_CONTD, 0, SV_WELCOME, 2, SV_INITCLIENT, 0, SV_POS, 0, SV_POSC, 0, SV_POSC2, 0, SV_POSC3, 0, SV_POSC4, 0, SV_POSN, 0, SV_TEXT, 0, SV_TEAMTEXT, 0, SV_TEXTME, 0, SV_TEAMTEXTME, 0, SV_TEXTPRIVATE, 0, SV_SOUND, 2, SV_VOICECOM, 2, SV_VOICECOMTEAM, 2, SV_CDIS, 2, SV_SHOOT, 0, SV_EXPLODE, 0, SV_SUICIDE, 1, SV_AKIMBO, 2, SV_RELOAD, 3, SV_AUTHT, 0, SV_AUTHREQ, 0, SV_AUTHTRY, 0, SV_AUTHANS, 0, SV_AUTHCHAL, 0, diff --git a/source/src/protocol.h b/source/src/protocol.h index ad82efdc..a02c9a7a 100644 --- a/source/src/protocol.h +++ b/source/src/protocol.h @@ -26,7 +26,7 @@ extern bool modprotocol; // network messages codes, c2s, c2c, s2c enum { - SV_SERVINFO = 0, SV_SERVINFO_RESPONSE, SV_SERVINFO_CONTD, SV_WELCOME, SV_INITCLIENT, SV_POS, SV_POSC, SV_POSN, SV_TEXT, SV_TEAMTEXT, SV_TEXTME, SV_TEAMTEXTME, SV_TEXTPRIVATE, + SV_SERVINFO = 0, SV_SERVINFO_RESPONSE, SV_SERVINFO_CONTD, SV_WELCOME, SV_INITCLIENT, SV_POS, SV_POSC, SV_POSC2, SV_POSC3, SV_POSC4, SV_POSN, SV_TEXT, SV_TEAMTEXT, SV_TEXTME, SV_TEAMTEXTME, SV_TEXTPRIVATE, SV_SOUND, SV_VOICECOM, SV_VOICECOMTEAM, SV_CDIS, SV_SHOOT, SV_EXPLODE, SV_SUICIDE, SV_AKIMBO, SV_RELOAD, SV_AUTHT, SV_AUTHREQ, SV_AUTHTRY, SV_AUTHANS, SV_AUTHCHAL, SV_GIBDIED, SV_DIED, SV_GIBDAMAGE, SV_DAMAGE, SV_HITPUSH, SV_SHOTFX, SV_THROWNADE, diff --git a/source/src/server.cpp b/source/src/server.cpp index 636039eb..de281d59 100644 --- a/source/src/server.cpp +++ b/source/src/server.cpp @@ -3377,7 +3377,7 @@ void process(ENetPacket *packet, int sender, int chan) type = checktype(getint(p), cl); #ifdef _DEBUG - if(type!=SV_POS && type!=SV_POSC && type!=SV_CLIENTPING && type!=SV_PING && type!=SV_CLIENT) + if(type!=SV_POS && type!=SV_POSC && type!=SV_POSC2 && type!=SV_POSC3 && type!=SV_POSC4 && type!=SV_CLIENTPING && type!=SV_PING && type!=SV_CLIENT) { DEBUGVAR(cl->name); if(type >= 0) { DEBUGVAR(messagenames[type]); } @@ -3847,6 +3847,9 @@ void process(ENetPacket *packet, int sender, int chan) } case SV_POSC: + case SV_POSC2: + case SV_POSC3: + case SV_POSC4: { bitbuf q(p); int cn = q.getbits(5); @@ -3858,7 +3861,7 @@ void process(ENetPacket *packet, int sender, int chan) #endif return; } - int usefactor = q.getbits(2) + 7; + int usefactor = type - SV_POSC + 7; int xt = q.getbits(usefactor + 4); int yt = q.getbits(usefactor + 4); cl->yaw = (int)decodeyaw(q.getbits(YAWBITS)); diff --git a/source/src/server.h b/source/src/server.h index 65e3c946..91f5b858 100644 --- a/source/src/server.h +++ b/source/src/server.h @@ -455,7 +455,7 @@ const char *modeinfologfilename = NULL; const char *messagenames[SV_NUM] = { - "SV_SERVINFO", "SV_SERVINFO_RESPONSE", "SV_SERVINFO_CONTD", "SV_WELCOME", "SV_INITCLIENT", "SV_POS", "SV_POSC", "SV_POSN", + "SV_SERVINFO", "SV_SERVINFO_RESPONSE", "SV_SERVINFO_CONTD", "SV_WELCOME", "SV_INITCLIENT", "SV_POS", "SV_POSC", "SV_POSC2", "SV_POSC3", "SV_POSC4", "SV_POSN", "SV_TEXT", "SV_TEAMTEXT", "SV_TEXTME", "SV_TEAMTEXTME", "SV_TEXTPRIVATE", "SV_SOUND", "SV_VOICECOM", "SV_VOICECOMTEAM", "SV_CDIS", "SV_SHOOT", "SV_EXPLODE", "SV_SUICIDE", "SV_AKIMBO", "SV_RELOAD", "SV_AUTHT", "SV_AUTHREQ", "SV_AUTHTRY", "SV_AUTHANS", "SV_AUTHCHAL",