Leaderboard Scoring Updates

This commit is contained in:
Verathian 2021-12-21 22:30:37 -05:00
parent dcbca46e75
commit 3cb16ddb5f

View File

@ -123,7 +123,7 @@ void LeaderboardManager::SaveScore(LWOOBJID playerID, uint32_t gameID, uint32_t
} }
break; break;
case SurvivalNS: case SurvivalNS:
if (time >= storedTime) if (score < storedScore || time >= storedTime)
highscore = false; highscore = false;
break; break;
default: default:
@ -150,7 +150,7 @@ void LeaderboardManager::SaveScore(LWOOBJID playerID, uint32_t gameID, uint32_t
delete statement; delete statement;
} else { } else {
// Note: last_played will be set to sysdate by default when inserting into leaderboard // Note: last_played will be set to SYSDATE() by default when inserting into leaderboard
auto* statement = Database::CreatePreppedStmt("INSERT INTO leaderboard (character_id, game_id, time, score) VALUES (?, ?, ?, ?);"); auto* statement = Database::CreatePreppedStmt("INSERT INTO leaderboard (character_id, game_id, time, score) VALUES (?, ?, ?, ?);");
statement->setUInt64(1, character->GetID()); statement->setUInt64(1, character->GetID());
statement->setInt(2, gameID); statement->setInt(2, gameID);
@ -174,13 +174,16 @@ Leaderboard *LeaderboardManager::GetLeaderboard(uint32_t gameID, InfoType infoTy
query = standingsScoreQuery; // Shooting gallery is based on the highest score. query = standingsScoreQuery; // Shooting gallery is based on the highest score.
break; break;
case FootRace: case FootRace:
query = standingsTimeQuery; // The higher your time, the better (for FootRace) query = standingsTimeQuery; // The higher your time, the better for FootRace.
break; break;
case Survival: case Survival:
query = classicSurvivalScoring ? standingsTimeQuery : standingsScoreQuery; query = classicSurvivalScoring ? standingsTimeQuery : standingsScoreQuery;
break; break;
case SurvivalNS:
query = standingsScoreQueryAsc; // BoNS is scored by highest wave (score) first, then time.
break;
default: default:
query = standingsTimeQueryAsc; // SurvivalNS, MonumentRace, and Racing are all based on the shortest time. query = standingsTimeQueryAsc; // MonumentRace and Racing are based on the shortest time.
} }
break; break;
case InfoType::Friends: case InfoType::Friends:
@ -189,13 +192,16 @@ Leaderboard *LeaderboardManager::GetLeaderboard(uint32_t gameID, InfoType infoTy
query = friendsScoreQuery; // Shooting gallery is based on the highest score. query = friendsScoreQuery; // Shooting gallery is based on the highest score.
break; break;
case FootRace: case FootRace:
query = friendsTimeQuery; // The higher your time, the better (for FootRace) query = friendsTimeQuery; // The higher your time, the better for FootRace.
break; break;
case Survival: case Survival:
query = classicSurvivalScoring ? friendsTimeQuery : friendsScoreQuery; query = classicSurvivalScoring ? friendsTimeQuery : friendsScoreQuery;
break; break;
case SurvivalNS:
query = friendsScoreQueryAsc; // BoNS is scored by highest wave (score) first, then time.
break;
default: default:
query = friendsTimeQueryAsc; // SurvivalNS, MonumentRace, and Racing are all based on the shortest time. query = friendsTimeQueryAsc; // MonumentRace and Racing are based on the shortest time.
} }
break; break;
@ -205,13 +211,16 @@ Leaderboard *LeaderboardManager::GetLeaderboard(uint32_t gameID, InfoType infoTy
query = topPlayersScoreQuery; // Shooting gallery is based on the highest score. query = topPlayersScoreQuery; // Shooting gallery is based on the highest score.
break; break;
case FootRace: case FootRace:
query = topPlayersTimeQuery; // The higher your time, the better (for FootRace) query = topPlayersTimeQuery; // The higher your time, the better for FootRace.
break; break;
case Survival: case Survival:
query = classicSurvivalScoring ? topPlayersTimeQuery : topPlayersScoreQuery; query = classicSurvivalScoring ? topPlayersTimeQuery : topPlayersScoreQuery;
break; break;
case SurvivalNS:
query = topPlayersScoreQueryAsc; // BoNS is scored by highest wave (score) first, then time.
break;
default: default:
query = topPlayersTimeQueryAsc; // SurvivalNS, MonumentRace, and Racing are all based on the shortest time. query = topPlayersTimeQueryAsc; // MonumentRace and Racing are based on the shortest time.
} }
} }