X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Fnetwork.c;h=b3b8eca226857d3457b9aebb35dacd70f716f06d;hp=e16c0d9f74abd086023561bea21e0831a87c4fab;hb=370a25a79d2e8df1e6e3e4cb4be39496d0190c28;hpb=a35852e106072656e444202e672d050ebff03abb diff --git a/src/network.c b/src/network.c index e16c0d9f..b3b8eca2 100644 --- a/src/network.c +++ b/src/network.c @@ -223,20 +223,23 @@ void SendToServer_StartPlaying() { unsigned long new_random_seed = InitRND(NEW_RANDOMIZE); + int dummy = 0; /* !!! HAS NO MEANING ANYMORE !!! */ + /* the name of the level must be enough */ + buffer[1] = OP_START_PLAYING; buffer[2] = (byte)(level_nr >> 8); buffer[3] = (byte)(level_nr & 0xff); - buffer[4] = (byte)(leveldir_nr >> 8); - buffer[5] = (byte)(leveldir_nr & 0xff); + buffer[4] = (byte)(dummy >> 8); + buffer[5] = (byte)(dummy & 0xff); buffer[6] = (unsigned char)((new_random_seed >> 24) & 0xff); buffer[7] = (unsigned char)((new_random_seed >> 16) & 0xff); buffer[8] = (unsigned char)((new_random_seed >> 8) & 0xff); buffer[9] = (unsigned char)((new_random_seed >> 0) & 0xff); - strcpy((char *)&buffer[10], leveldir[leveldir_nr].name); + strcpy((char *)&buffer[10], leveldir_current->name); - SendBufferToServer(10 + strlen(leveldir[leveldir_nr].name)+1); + SendBufferToServer(10 + strlen(leveldir_current->name) + 1); } void SendToServer_PausePlaying() @@ -409,25 +412,33 @@ static void Handle_OP_PLAYER_DISCONNECTED() static void Handle_OP_START_PLAYING() { - int new_level_nr, new_leveldir_nr; + struct LevelDirInfo *new_leveldir; + int new_level_nr; + int dummy; /* !!! HAS NO MEANING ANYMORE !!! */ unsigned long new_random_seed; char *new_leveldir_name; new_level_nr = (buffer[2] << 8) + buffer[3]; - new_leveldir_nr = (buffer[4] << 8) + buffer[5]; + dummy = (buffer[4] << 8) + buffer[5]; new_random_seed = (buffer[6] << 24) | (buffer[7] << 16) | (buffer[8] << 8) | (buffer[9]); new_leveldir_name = (char *)&buffer[10]; + new_leveldir = getLevelDirInfoFromLevelDirName(new_leveldir_name); + if (new_leveldir == NULL) + { + Error(ERR_WARN, "no such level directory: '%s'", new_leveldir_name); + + new_leveldir = leveldir_first; + Error(ERR_WARN, "using default level directory: '%s'", new_leveldir->name); + } + printf("OP_START_PLAYING: %d\n", buffer[0]); Error(ERR_NETWORK_CLIENT, - "client %d starts game [level %d from levedir %d (%s)]\n", - buffer[0], new_level_nr, new_leveldir_nr, new_leveldir_name); - - if (strcmp(leveldir[new_leveldir_nr].name, new_leveldir_name) != 0) - Error(ERR_WARN, "no such level directory: '%s'",new_leveldir_name); + "client %d starts game [level %d from leveldir '%s']\n", + buffer[0], new_level_nr, new_leveldir->name); - leveldir_nr = new_leveldir_nr; + leveldir_current = new_leveldir; level_nr = new_level_nr; TapeErase();