Index: src/server.mm ================================================================== --- src/server.mm +++ src/server.mm @@ -205,12 +205,12 @@ uchar *end = packet->data + packet->dataLength; uchar *p = packet->data + 2; char text[MAXTRANS]; int cn = -1, type; - while (p < end) - switch (type = getint(p)) { + while (p < end) { + switch ((type = getint(p))) { case SV_TEXT: sgetstr(); break; case SV_INITC2S: @@ -292,17 +292,15 @@ case SV_RECVMAP: send(sender, recvmap(sender)); return; - case SV_EXT: // allows for new features that require no server - // updates - { + // allows for new features that require no server updates + case SV_EXT: for (int n = getint(p); n; n--) getint(p); break; - } default: { int size = msgsizelookup(type); if (size == -1) { disconnect_client(sender, @"tag type"); @@ -309,15 +307,17 @@ return; } loopi(size - 1) getint(p); } } + } if (p > end) { disconnect_client(sender, @"end of packet"); return; } + multicast(packet, sender); } void send_welcome(int n) @@ -350,18 +350,20 @@ void multicast(ENetPacket *packet, int sender) { size_t count = clients.count; for (size_t i = 0; i < count; i++) - send(i, packet); + if (i != sender) + send(i, packet); } void localclienttoserver(ENetPacket *packet) { process(packet, 0); - if (!packet->referenceCount) + + if (packet->referenceCount == 0) enet_packet_destroy(packet); } Client * addclient()