X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fgame.c;h=470ccf5901defd4fe9407207f80a4309e48a7695;hb=e4b2e4f943c20af98956d30fd3014888e9f75416;hp=b85dbcae9861dfcae7df2d211ed5a51e2aeba768;hpb=edfb8a9789e107ac11ad76e456bb0f7c2a943ffa;p=rocksndiamonds.git diff --git a/src/game.c b/src/game.c index b85dbcae..470ccf59 100644 --- a/src/game.c +++ b/src/game.c @@ -5066,6 +5066,10 @@ static int addScoreEntry(struct ScoreInfo *list, struct ScoreEntry *new_entry) boolean entry_is_empty = (entry->score == 0 && entry->time == 0); + // prevent adding server score entries if also existing in local score file + if (strEqual(new_entry->tape_basename, entry->tape_basename)) + return -1; + if (is_better || entry_is_empty) { // player has made it to the hall of fame @@ -5119,17 +5123,36 @@ int NewHighScore(int level_nr) LoadScore(level_nr); - int position = addScoreEntry(&scores, &new_entry); + scores.last_added = addScoreEntry(&scores, &new_entry); - if (position >= 0) + if (scores.last_added >= 0) { SaveScore(level_nr); if (game.LevelSolved_SaveTape) + { SaveScoreTape(level_nr); + SaveServerScore(level_nr); + } + } + + return scores.last_added; +} + +void MergeServerScore(void) +{ + int i; + + for (i = 0; i < server_scores.num_entries; i++) + { + int pos = addScoreEntry(&scores, &server_scores.entry[i]); + + if (pos >= 0 && pos <= scores.last_added) + scores.last_added++; } - return position; + if (scores.last_added >= MAX_SCORE_ENTRIES) + scores.last_added = -1; } static int getElementMoveStepsizeExt(int x, int y, int direction)