char *filename = getScoreTapeFilename(tape.score_tape_basename, nr);
// used instead of "leveldir_current->subdir" (for network games)
- InitScoreDirectory(levelset.identifier);
+ InitScoreTapeDirectory(levelset.identifier, nr);
SaveTapeExt(filename);
}
if (!HTTP_SUCCESS(response->status_code))
{
+ // do not show error message if no scores found for this level set
+ if (response->status_code == 404)
+ return;
+
Error("server failed to handle request: %d %s",
response->status_code,
response->status_text);
struct HttpRequest *request = checked_calloc(sizeof(struct HttpRequest));
struct HttpResponse *response = checked_calloc(sizeof(struct HttpResponse));
+ program.api_thread_count++;
+
#if defined(PLATFORM_EMSCRIPTEN)
Emscripten_ApiGetScore_HttpRequest(request, data_raw);
#else
ApiGetScore_HttpRequest(request, response, data_raw);
#endif
+ program.api_thread_count--;
+
checked_free(request);
checked_free(response);
" \"level_nr\": \"%d\",\n"
" \"level_name\": \"%s\",\n"
" \"level_author\": \"%s\",\n"
+ " \"use_step_counter\": \"%d\",\n"
" \"rate_time_over_score\": \"%d\",\n"
" \"player_name\": \"%s\",\n"
" \"player_uuid\": \"%s\",\n"
level_nr,
level_name,
level_author,
+ level.use_step_counter,
level.rate_time_over_score,
player_name,
player_uuid,
struct HttpRequest *request = checked_calloc(sizeof(struct HttpRequest));
struct HttpResponse *response = checked_calloc(sizeof(struct HttpResponse));
+ program.api_thread_count++;
+
#if defined(PLATFORM_EMSCRIPTEN)
Emscripten_ApiAddScore_HttpRequest(request, data_raw);
#else
ApiAddScore_HttpRequest(request, response, data_raw);
#endif
+ program.api_thread_count--;
+
checked_free(request);
checked_free(response);
{
int last_added_local = scores.last_added_local;
- LoadScore(nr);
+ // needed if only showing server scores
+ setScoreInfoToDefaults();
+
+ if (!strEqual(setup.scores_in_highscore_list, STR_SCORES_TYPE_SERVER_ONLY))
+ LoadScore(nr);
// restore last added local score entry (before merging server scores)
scores.last_added = scores.last_added_local = last_added_local;
- if (setup.use_api_server && !setup.only_show_local_scores)
+ if (setup.use_api_server &&
+ !strEqual(setup.scores_in_highscore_list, STR_SCORES_TYPE_LOCAL_ONLY))
{
// load server scores from cache file and trigger update from server
LoadServerScore(nr, download_score);
&setup.show_undo_redo_buttons, "show_undo_redo_buttons"
},
{
- TYPE_SWITCH,
- &setup.only_show_local_scores, "only_show_local_scores"
+ TYPE_STRING,
+ &setup.scores_in_highscore_list, "scores_in_highscore_list"
},
{
TYPE_STRING,
si->small_game_graphics = FALSE;
si->show_load_save_buttons = FALSE;
si->show_undo_redo_buttons = FALSE;
- si->only_show_local_scores = FALSE;
+ si->scores_in_highscore_list = getStringCopy(STR_SCORES_TYPE_DEFAULT);
si->graphics_set = getStringCopy(GFX_CLASSIC_SUBDIR);
si->sounds_set = getStringCopy(SND_CLASSIC_SUBDIR);