Skip to content

Commit

Permalink
finish SteamUserStats
Browse files Browse the repository at this point in the history
  • Loading branch information
trdwll committed Dec 12, 2020
1 parent 50ce154 commit 9177578
Show file tree
Hide file tree
Showing 3 changed files with 664 additions and 16 deletions.
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ ISteamRemoteStorage | :x: |
ISteamScreenshots | :x: |
ISteamUGC | :x: |
ISteamUser | :heavy_check_mark: |
ISteamUserStats | :x: |
ISteamUserStats | :heavy_check_mark: | [1] (4)
ISteamUtils | :heavy_check_mark: | [1] (5)
ISteamVideo | :heavy_check_mark: |
SteamWeb | :x: | [2] |
Expand All @@ -48,7 +48,7 @@ Go to the [releases](https://github.com/trdwll/SteamBridge/releases) page and do

Using SteamBridge is actually really easy.

- Edit your `DefaultEngine.ini` and make sure the Steam config exists like below.
- Edit your `DefaultEngine.ini` and make sure the Steam config exists like [here](https://github.com/trdwll/SteamBridge/blob/main/ExampleDefaultEngine.ini).
- Open your project and start using SteamBridge.


Expand Down
97 changes: 97 additions & 0 deletions Source/SteamBridge/Private/Core/SteamUserStats.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,34 @@

USteamUserStats::USteamUserStats()
{
OnGlobalAchievementPercentagesReadyCallback.Register(this, &USteamUserStats::OnGlobalAchievementPercentagesReady);
OnGlobalStatsReceivedCallback.Register(this, &USteamUserStats::OnGlobalStatsReceived);
OnLeaderboardFindResultCallback.Register(this, &USteamUserStats::OnLeaderboardFindResult);
OnLeaderboardScoresDownloadedCallback.Register(this, &USteamUserStats::OnLeaderboardScoresDownloaded);
OnLeaderboardScoreUploadedCallback.Register(this, &USteamUserStats::OnLeaderboardScoreUploaded);
OnLeaderboardUGCSetCallback.Register(this, &USteamUserStats::OnLeaderboardUGCSet);
OnNumberOfCurrentPlayersCallback.Register(this, &USteamUserStats::OnNumberOfCurrentPlayers);
OnUserAchievementIconFetchedCallback.Register(this, &USteamUserStats::OnUserAchievementIconFetched);
OnUserAchievementStoredCallback.Register(this, &USteamUserStats::OnUserAchievementStored);
OnUserStatsReceivedCallback.Register(this, &USteamUserStats::OnUserStatsReceived);
OnUserStatsStoredCallback.Register(this, &USteamUserStats::OnUserStatsStored);
OnUserStatsUnloadedCallback.Register(this, &USteamUserStats::OnUserStatsUnloaded);
}

USteamUserStats::~USteamUserStats()
{
OnGlobalAchievementPercentagesReadyCallback.Unregister();
OnGlobalStatsReceivedCallback.Unregister();
OnLeaderboardFindResultCallback.Unregister();
OnLeaderboardScoresDownloadedCallback.Unregister();
OnLeaderboardScoreUploadedCallback.Unregister();
OnLeaderboardUGCSetCallback.Unregister();
OnNumberOfCurrentPlayersCallback.Unregister();
OnUserAchievementIconFetchedCallback.Unregister();
OnUserAchievementStoredCallback.Unregister();
OnUserStatsReceivedCallback.Unregister();
OnUserStatsStoredCallback.Unregister();
OnUserStatsUnloadedCallback.Unregister();
}

FSteamAPICall USteamUserStats::DownloadLeaderboardEntries(FSteamLeaderboard SteamLeaderboard, ESteamLeaderboardDataRequest LeaderboardDataRequest, int32 RangeStart, int32 RangeEnd) const
Expand Down Expand Up @@ -56,3 +80,76 @@ int32 USteamUserStats::GetGlobalStatHistoryFloat(const FString& StatName, TArray
}
return result;
}

bool USteamUserStats::GetUserAchievementAndUnlockTime(FSteamID SteamIDUser, const FString& Name, bool& bAchieved, int32& UnlockTime) const
{
uint32 TmpUnlockTime;
bool bResult = SteamUserStats()->GetUserAchievementAndUnlockTime(SteamIDUser, TCHAR_TO_UTF8(*Name), &bAchieved, &TmpUnlockTime);
UnlockTime = TmpUnlockTime;
return bResult;
}

FSteamAPICall USteamUserStats::UploadLeaderboardScore(FSteamLeaderboard SteamLeaderboard, ESteamLeaderboardUploadScoreMethod LeaderboardUploadScoreMethod, int32 Score, const TArray<int32>& ScoreDetails) const
{
return SteamUserStats()->UploadLeaderboardScore(SteamLeaderboard, (ELeaderboardUploadScoreMethod)LeaderboardUploadScoreMethod, Score, ScoreDetails.GetData(), ScoreDetails.Num());
}

void USteamUserStats::OnGlobalAchievementPercentagesReady(GlobalAchievementPercentagesReady_t* pParam)
{
m_OnGlobalAchievementPercentagesReady.Broadcast(pParam->m_nGameID, (ESteamResult)pParam->m_eResult);
}

void USteamUserStats::OnGlobalStatsReceived(GlobalStatsReceived_t* pParam)
{
m_OnGlobalStatsReceived.Broadcast(pParam->m_nGameID, (ESteamResult)pParam->m_eResult);
}

void USteamUserStats::OnLeaderboardFindResult(LeaderboardFindResult_t* pParam)
{
m_OnLeaderboardFindResult.Broadcast(pParam->m_hSteamLeaderboard, pParam->m_bLeaderboardFound == 1);
}

void USteamUserStats::OnLeaderboardScoresDownloaded(LeaderboardScoresDownloaded_t* pParam)
{
m_OnLeaderboardScoresDownloaded.Broadcast(pParam->m_hSteamLeaderboard, pParam->m_hSteamLeaderboardEntries, pParam->m_cEntryCount);
}

void USteamUserStats::OnLeaderboardScoreUploaded(LeaderboardScoreUploaded_t* pParam)
{
m_OnLeaderboardScoreUploaded.Broadcast(pParam->m_bSuccess == 1, pParam->m_hSteamLeaderboard, pParam->m_nScore, pParam->m_bScoreChanged == 1, pParam->m_nGlobalRankNew, pParam->m_nGlobalRankPrevious);
}

void USteamUserStats::OnLeaderboardUGCSet(LeaderboardUGCSet_t* pParam)
{
m_OnLeaderboardUGCSet.Broadcast((ESteamResult)pParam->m_eResult, pParam->m_hSteamLeaderboard);
}

void USteamUserStats::OnNumberOfCurrentPlayers(NumberOfCurrentPlayers_t* pParam)
{
m_OnNumberOfCurrentPlayers.Broadcast(pParam->m_bSuccess == 1, pParam->m_cPlayers);
}

void USteamUserStats::OnUserAchievementIconFetched(UserAchievementIconFetched_t* pParam)
{
m_OnUserAchievementIconFetched.Broadcast(pParam->m_nGameID.ToUint64(), UTF8_TO_TCHAR(pParam->m_rgchAchievementName), pParam->m_bAchieved, pParam->m_nIconHandle);
}

void USteamUserStats::OnUserAchievementStored(UserAchievementStored_t* pParam)
{
m_OnUserAchievementStored.Broadcast(pParam->m_nGameID, pParam->m_bGroupAchievement, UTF8_TO_TCHAR(pParam->m_rgchAchievementName), pParam->m_nCurProgress, pParam->m_nMaxProgress);
}

void USteamUserStats::OnUserStatsReceived(UserStatsReceived_t* pParam)
{
m_OnUserStatsReceived.Broadcast(pParam->m_nGameID, (ESteamResult)pParam->m_eResult, pParam->m_steamIDUser.ConvertToUint64());
}

void USteamUserStats::OnUserStatsStored(UserStatsStored_t* pParam)
{
m_OnUserStatsStored.Broadcast(pParam->m_nGameID, (ESteamResult)pParam->m_eResult);
}

void USteamUserStats::OnUserStatsUnloaded(UserStatsUnloaded_t* pParam)
{
m_OnUserStatsUnloaded.Broadcast(pParam->m_steamIDUser.ConvertToUint64());
}
Loading

0 comments on commit 9177578

Please sign in to comment.