diff --git a/dDatabase/GameDatabase/ITables/ILeaderboard.h b/dDatabase/GameDatabase/ITables/ILeaderboard.h index fc4164bc..f88497b0 100644 --- a/dDatabase/GameDatabase/ITables/ILeaderboard.h +++ b/dDatabase/GameDatabase/ITables/ILeaderboard.h @@ -41,6 +41,7 @@ public: virtual void SaveScore(const uint32_t playerId, const uint32_t gameId, const Score& score) = 0; virtual void UpdateScore(const uint32_t playerId, const uint32_t gameId, const Score& score) = 0; virtual void IncrementNumWins(const uint32_t playerId, const uint32_t gameId) = 0; + virtual void IncrementTimesPlayed(const uint32_t playerId, const uint32_t gameId) = 0; }; #endif //!__ILEADERBOARD__H__ diff --git a/dDatabase/GameDatabase/MySQL/MySQLDatabase.h b/dDatabase/GameDatabase/MySQL/MySQLDatabase.h index 4e7d19a4..29fd7ea8 100644 --- a/dDatabase/GameDatabase/MySQL/MySQLDatabase.h +++ b/dDatabase/GameDatabase/MySQL/MySQLDatabase.h @@ -122,6 +122,7 @@ public: void UpdateScore(const uint32_t playerId, const uint32_t gameId, const Score& score) override; std::optional GetPlayerScore(const uint32_t playerId, const uint32_t gameId) override; void IncrementNumWins(const uint32_t playerId, const uint32_t gameId) override; + void IncrementTimesPlayed(const uint32_t playerId, const uint32_t gameId) override; void InsertUgcBuild(const std::string& modules, const LWOOBJID bigId, const std::optional characterId) override; void DeleteUgcBuild(const LWOOBJID bigId) override; private: diff --git a/dDatabase/GameDatabase/MySQL/Tables/Leaderboard.cpp b/dDatabase/GameDatabase/MySQL/Tables/Leaderboard.cpp index a6734030..14ac121a 100644 --- a/dDatabase/GameDatabase/MySQL/Tables/Leaderboard.cpp +++ b/dDatabase/GameDatabase/MySQL/Tables/Leaderboard.cpp @@ -68,6 +68,10 @@ void MySQLDatabase::UpdateScore(const uint32_t playerId, const uint32_t gameId, score.primaryScore, score.secondaryScore, score.tertiaryScore, playerId, gameId); } +void MySQLDatabase::IncrementTimesPlayed(const uint32_t playerId, const uint32_t gameId) { + ExecuteUpdate("UPDATE leaderboard SET timesPlayed = timesPlayed + 1 WHERE character_id = ? AND game_id = ?;", playerId, gameId); +} + std::optional MySQLDatabase::GetPlayerScore(const uint32_t playerId, const uint32_t gameId) { std::optional toReturn = std::nullopt; auto res = ExecuteSelect("SELECT * FROM leaderboard WHERE character_id = ? AND game_id = ?;", playerId, gameId); diff --git a/dDatabase/GameDatabase/TestSQL/TestSQLDatabase.h b/dDatabase/GameDatabase/TestSQL/TestSQLDatabase.h index c2a3950a..49e954ae 100644 --- a/dDatabase/GameDatabase/TestSQL/TestSQLDatabase.h +++ b/dDatabase/GameDatabase/TestSQL/TestSQLDatabase.h @@ -99,6 +99,7 @@ class TestSQLDatabase : public GameDatabase { void UpdateScore(const uint32_t playerId, const uint32_t gameId, const Score& score) override {}; std::optional GetPlayerScore(const uint32_t playerId, const uint32_t gameId) override { return {}; }; void IncrementNumWins(const uint32_t playerId, const uint32_t gameId) override {}; + void IncrementTimesPlayed(const uint32_t playerId, const uint32_t gameId) override {}; void InsertUgcBuild(const std::string& modules, const LWOOBJID bigId, const std::optional characterId) override {}; void DeleteUgcBuild(const LWOOBJID bigId) override {}; }; diff --git a/dGame/LeaderboardManager.cpp b/dGame/LeaderboardManager.cpp index f3a27919..da27e88b 100644 --- a/dGame/LeaderboardManager.cpp +++ b/dGame/LeaderboardManager.cpp @@ -288,6 +288,8 @@ void LeaderboardManager::SaveScore(const LWOOBJID& playerID, const GameID activi if (newHighScore) { Database::Get()->UpdateScore(playerID, activityId, newScore); + } else { + Database::Get()->IncrementTimesPlayed(playerID, activityId); } } else { Database::Get()->SaveScore(playerID, activityId, newScore);