+ broadcast(NULL, 4, 0);
+}
+
+static void Handle_OP_PLAYER_NAME(struct NetworkServerPlayerInfo *player,
+ unsigned int len)
+{
+ struct NetworkServerPlayerInfo *v;
+ int i;
+
+ if (len>16)
+ len=16;
+ memcpy(player->player_name, &buffer[2], len-2);
+ player->player_name[len-2] = 0;
+ for (i=0; i<len-2; i++)
+ {
+ if (player->player_name[i] < ' ' ||
+ ((unsigned char)(player->player_name[i]) > 0x7e &&
+ (unsigned char)(player->player_name[i]) <= 0xa0))
+ {
+ player->player_name[i] = 0;
+ break;
+ }
+ }
+
+ if (!player->introduced)
+ {
+ buffer[0] = player->number;
+ buffer[1] = OP_PLAYER_CONNECTED;
+ broadcast(player, 2, 0);
+ }
+
+ if (options.verbose)
+ Error(ERR_NETWORK_SERVER, "client %d calls itself \"%s\"",
+ player->number, player->player_name);
+ buffer[1] = OP_PLAYER_NAME;
+ broadcast(player, len, 0);
+
+ if (!player->introduced)
+ {
+ for (v=first_player; v; v=v->next)
+ {
+ if (v != player && v->introduced)
+ {
+ buffer[0] = v->number;
+ buffer[1] = OP_PLAYER_CONNECTED;
+ sendtoone(player, 2);
+ buffer[1] = OP_PLAYER_NAME;
+ memcpy(&buffer[2], v->player_name, 14);
+ sendtoone(player, 2+strlen(v->player_name));
+ }
+ }
+ }
+
+ player->introduced = 1;
+}
+
+static void Handle_OP_START_PLAYING(struct NetworkServerPlayerInfo *player)
+{
+ struct NetworkServerPlayerInfo *v, *w;
+
+ if (options.verbose)
+ Error(ERR_NETWORK_SERVER,
+ "client %d (%s) starts game [level %d from levedir %d (%s)]",
+ player->number, player->player_name,
+ (buffer[2] << 8) + buffer[3],
+ (buffer[4] << 8) + buffer[5],
+ &buffer[6]);
+
+ for (w=first_player; w; w=w->next)
+ if (w->introduced)
+ w->active = 1;
+