X-Git-Url: https://deadsoftware.ru/gitweb?p=netwar.git;a=blobdiff_plain;f=server.c;h=d6cbfcc3b3c07cb1670bb914466dd414dca5136d;hp=ea28583e06de04a2ead618e666593f6e92e2dc22;hb=4148d3ff0c0c4b52b0741c38a867a1502600a65f;hpb=c4b04d12861ae0eac6315b1c2170013422136f80 diff --git a/server.c b/server.c index ea28583..d6cbfcc 100644 --- a/server.c +++ b/server.c @@ -48,6 +48,15 @@ static void sv_sync_client(int id, bool full) { for(int i = 0; i < clientlimit; i++) if(full || g_player[i].updated) SendMessage(sock, client[id].address, sv_splr(i, g_player[i].live, g_player[i].x, g_player[i].y, g_player[i].r, g_player[i].vx, g_player[i].vy, g_player[i].vr)); + + for(int i = 0; i < MAX_BULLETS; i++) + if(full || g_bullet[i].updated) + SendMessage(sock, client[id].address, sv_sbul(i, g_bullet[i].owner, g_bullet[i].live, g_bullet[i].x, g_bullet[i].y, g_bullet[i].vx, g_bullet[i].vy, g_bullet[i].tick)); +} + +static void sv_spawn_player(int id) { + assert(id >= 0); + g_player_set(id, true, randfm(), randfm(), randfm(), 0, 0, 0); } static void sv_kill_player(int id, bool send, const char * msg) { @@ -66,6 +75,9 @@ static void sv_move_player(int id, ProtocolMessage m) { assert(id >= 0); assert(client[id].connected); + if(!g_player[id].live) + sv_spawn_player(id); + g_player_does(id, m.cl.does.code); } @@ -92,7 +104,7 @@ static void sv_register_player(IPaddress address, ProtocolMessage m) { SDL_Log("Player %s (%i) connected", client[i].name, i); SendMessage(sock, address, sv_info(name, i, clientlimit)); - g_player_set(i, true, randfm(), randfm(), randfm(), 0, 0, 0); + sv_spawn_player(i); sv_sync_client(i, true); } @@ -114,9 +126,12 @@ static void sv_send() { for(int i = 0; i < clientlimit; i++) if(client[i].connected) sv_sync_client(i, false); - + for(int i = 0; i < clientlimit; i++) g_player[i].updated = false; + + for(int i = 0; i < MAX_BULLETS; i++) + g_bullet[i].updated = false; } void sv_start(uint16_t port) {