DEADSOFTWARE

Добавлена стрельба
[netwar.git] / server.c
index ea28583e06de04a2ead618e666593f6e92e2dc22..d6cbfcc3b3c07cb1670bb914466dd414dca5136d 100644 (file)
--- 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) {