X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Ffiles.c;h=8f04a366cdf0d546d396c6ba5658d10fa2e0d591;hb=734eaa90125329a1ce5865b443ce9a31264f9218;hp=4e281d03aec9229a8d2863370692d04bd05d22bb;hpb=a5ed5a3df5859c2fcfcc0c4b2e99cfee3b612b76;p=rocksndiamonds.git diff --git a/src/files.c b/src/files.c index 4e281d03..8f04a366 100644 --- a/src/files.c +++ b/src/files.c @@ -7656,10 +7656,33 @@ void DumpLevel(struct LevelInfo *level) Print("SP player blocks last field: %s\n", (level->sp_block_last_field ? "yes" : "no")); Print("use spring bug: %s\n", (level->use_spring_bug ? "yes" : "no")); Print("use step counter: %s\n", (level->use_step_counter ? "yes" : "no")); + Print("rate time over score: %s\n", (level->rate_time_over_score ? "yes" : "no")); PrintLine("-", 79); } +void DumpLevels(void) +{ + static LevelDirTree *dumplevel_leveldir = NULL; + + dumplevel_leveldir = getTreeInfoFromIdentifier(leveldir_first, + global.dumplevel_leveldir); + + if (dumplevel_leveldir == NULL) + Fail("no such level identifier: '%s'", global.dumplevel_leveldir); + + if (global.dumplevel_level_nr < dumplevel_leveldir->first_level || + global.dumplevel_level_nr > dumplevel_leveldir->last_level) + Fail("no such level number: %d", global.dumplevel_level_nr); + + leveldir_current = dumplevel_leveldir; + + LoadLevel(global.dumplevel_level_nr); + DumpLevel(&level); + + CloseAllAndExit(0); +} + // ============================================================================ // tape file functions @@ -8419,6 +8442,32 @@ void DumpTape(struct TapeInfo *tape) PrintLine("-", 79); } +void DumpTapes(void) +{ + static LevelDirTree *dumptape_leveldir = NULL; + + dumptape_leveldir = getTreeInfoFromIdentifier(leveldir_first, + global.dumptape_leveldir); + + if (dumptape_leveldir == NULL) + Fail("no such level identifier: '%s'", global.dumptape_leveldir); + + if (global.dumptape_level_nr < dumptape_leveldir->first_level || + global.dumptape_level_nr > dumptape_leveldir->last_level) + Fail("no such level number: %d", global.dumptape_level_nr); + + leveldir_current = dumptape_leveldir; + + if (options.mytapes) + LoadTape(global.dumptape_level_nr); + else + LoadSolutionTape(global.dumptape_level_nr); + + DumpTape(&tape); + + CloseAllAndExit(0); +} + // ============================================================================ // score file functions @@ -8929,7 +8978,7 @@ static void DownloadServerScoreToCacheExt(struct HttpRequest *request, struct HttpResponse *response, int nr) { - request->hostname = API_SERVER_HOSTNAME; + request->hostname = setup.api_server_hostname; request->port = API_SERVER_PORT; request->method = API_SERVER_METHOD; request->uri = API_SERVER_URI_GET; @@ -9084,6 +9133,9 @@ static void LoadServerScoreFromCache(int nr) void LoadServerScore(int nr, boolean download_score) { + if (!setup.api_server) + return; + // always start with reliable default values setServerScoreInfoToDefaults(); @@ -9091,7 +9143,7 @@ void LoadServerScore(int nr, boolean download_score) // (this should prevent reading it while the thread is writing to it) LoadServerScoreFromCache(nr); - if (download_score) + if (download_score && runtime.api_server) { // 2nd step: download server scores from score server to cache file // (as thread, as it might time out if the server is not reachable) @@ -9159,7 +9211,7 @@ static void UploadScoreToServerExt(struct HttpRequest *request, { struct ScoreEntry *score_entry = &scores.entry[scores.last_added]; - request->hostname = API_SERVER_HOSTNAME; + request->hostname = setup.api_server_hostname; request->port = API_SERVER_PORT; request->method = API_SERVER_METHOD; request->uri = API_SERVER_URI_ADD; @@ -9250,6 +9302,9 @@ static void UploadScoreToServerAsThread(int nr) void SaveServerScore(int nr) { + if (!runtime.api_server) + return; + UploadScoreToServerAsThread(nr); } @@ -9262,9 +9317,14 @@ void LoadLocalAndServerScore(int nr, boolean download_score) // restore last added local score entry (before merging server scores) scores.last_added = scores.last_added_local = last_added_local; - LoadServerScore(nr, download_score); + if (setup.api_server) + { + // load server scores from cache file and trigger update from server + LoadServerScore(nr, download_score); - MergeServerScore(); + // merge local scores with scores from server + MergeServerScore(); + } } @@ -9501,6 +9561,14 @@ static struct TokenInfo global_setup_tokens[] = TYPE_STRING, &setup.network_server_hostname, "network_server_hostname" }, + { + TYPE_SWITCH, + &setup.api_server, "api_server" + }, + { + TYPE_STRING, + &setup.api_server_hostname, "api_server_hostname" + }, { TYPE_STRING, &setup.touch.control_type, "touch.control_type" @@ -10134,6 +10202,9 @@ static void setSetupInfoToDefaults(struct SetupInfo *si) si->network_player_nr = 0; // first player si->network_server_hostname = getStringCopy(STR_NETWORK_AUTO_DETECT); + si->api_server = TRUE; + si->api_server_hostname = getStringCopy(API_SERVER_HOSTNAME); + si->touch.control_type = getStringCopy(TOUCH_CONTROL_DEFAULT); si->touch.move_distance = TOUCH_MOVE_DISTANCE_DEFAULT; // percent si->touch.drop_distance = TOUCH_DROP_DISTANCE_DEFAULT; // percent @@ -10749,6 +10820,7 @@ void SaveSetup(void) global_setup_tokens[i].value == &setup.graphics_set || global_setup_tokens[i].value == &setup.volume_simple || global_setup_tokens[i].value == &setup.network_mode || + global_setup_tokens[i].value == &setup.api_server || global_setup_tokens[i].value == &setup.touch.control_type || global_setup_tokens[i].value == &setup.touch.grid_xsize[0] || global_setup_tokens[i].value == &setup.touch.grid_xsize[1])