5#include "CoreMinimal.h"
10#include "StatsTrackingManager.generated.h"
20 GENERATED_USTRUCT_BODY()
25 TWeakObjectPtr<AProjectXPlayerState> PlayerState = NULL;
29 TWeakObjectPtr<UObject> Object = NULL;
30 int32 DebugMapType = 0;
31 FString DebugMapName =
"";
37 GENERATED_USTRUCT_BODY()
39 UPROPERTY(BlueprintReadWrite)
41 UPROPERTY(BlueprintReadWrite)
43 UPROPERTY(BlueprintReadWrite)
50 GENERATED_USTRUCT_BODY()
52 FLeaderBoardEntry(
const FString& PlayerIDIn,
const FString& DisplayNameIn, int32 ValueIn,
const FString& BannerIDIn,
const FString& SteamIDIn, uint16 RankIn)
55 PlayerID = PlayerIDIn;
56 DisplayName = DisplayNameIn;
57 BannerID = BannerIDIn;
62 UPROPERTY(BlueprintReadWrite)
64 UPROPERTY(BlueprintReadWrite)
65 FString PlayerID = "";
66 UPROPERTY(BlueprintReadWrite)
67 FString DisplayName = "";
68 UPROPERTY(BlueprintReadWrite)
69 FString BannerID = "";
70 UPROPERTY(BlueprintReadWrite)
72 UPROPERTY(BlueprintReadWrite)
74 UPROPERTY(BlueprintReadWrite)
79 if (Value != Other.Value)
81 return Value > Other.Value;
106 UFUNCTION(BlueprintPure, Category = StatTracking, meta = (WorldContext =
"WorldContextObject", CallableWithoutWorldContext))
108 UFUNCTION(BlueprintPure, Category = StatsTracking)
110 UFUNCTION(BlueprintPure, Category = StatsTracking)
113 UFUNCTION(BlueprintCallable, Category = StatsTrackingManager)
115 UFUNCTION(BlueprintCallable, Category = StatsTrackingManager)
116 void SaveAllInstances();
117 UFUNCTION(BlueprintCallable, Category = StatsTrackingManager)
118 void SaveInstance(
const FString&
PlayerID,
bool bChallengesOnly =
false);
119 UFUNCTION(BlueprintCallable,BlueprintPure, Category = StatsTrackingManager)
121 UFUNCTION(BlueprintCallable, Category = StatsTracking)
123 UFUNCTION(BlueprintCallable, Category = StatsTracking)
125 UFUNCTION(BlueprintCallable, Category = StatsTracking)
126 void MarkStatSaveForReload(
const FString&
PlayerID,
bool bAuthorityOnly =
false);
127 UFUNCTION(BlueprintCallable)
128 void LoadChallenges(
const FString&
PlayerID);
129 UFUNCTION(BlueprintCallable)
130 void RerollChallenge(
const FString& ChallengeID);
131 UFUNCTION(BlueprintCallable)
132 void ClaimChallenge(
const FString& ChallengeID);
133 UFUNCTION(BlueprintCallable)
134 void LoadLeaderBoardForStat(
EStatNames Name,
EStatClassifier Type,
const FString&
Class,
int NumberOfEntries,
int PageNumber,
bool bFriendsOnly =
false);
135 UFUNCTION(BlueprintCallable)
137 UFUNCTION(BlueprintCallable)
139 UFUNCTION(BlueprintCallable,BlueprintPure)
140 bool AreStatsSynced(
const FString&
PlayerID);
141 UFUNCTION(BlueprintPure)
142 bool HasChallengeReroll()
const{
return bHasChallengeReroll;}
144 void OnNakamaConnected();
145 UFUNCTION(BlueprintCallable, BlueprintPure)
146 const FString& GetNakamaLocalPlayerID() {
return LocalPlayerID; }
148 void OnPurchaseEvent(
bool bPurchaseSucess, const FString& ItemID);
149 UFUNCTION(BlueprintCallable)
151 UFUNCTION(BlueprintCallable)
152 bool IsValidLeaderboardPage(int32 PageNumber,int32 Entries) const;
155 void LoadAllStats(const FString&
PlayerID,
bool bForceReload = false);
156 void LoadAuthoritativeStats(const FString&
PlayerID, const TArray<FString>& StatNames,
bool bForceReload = false);
158 UFUNCTION(BlueprintCallable, Category = "Stats")
159 void LoadRequestedPlayerStats(const FString&
PlayerID, const TArray<FString>& StatNames,
bool bForceReload);
161 void UpdateStat(struct
FStatEvent const& StatEvent);
162 void ShotComplete(struct
FStatEvent const& StatEvent, const uint16 ID);
163 void UpdateChallengeComplete(const FString&
PlayerID, const FString& ChallengeID);
164 void UpdateChallengePredictiveProgressFromChallengeNumber(
AProjectXPlayerState* const PlayerState, uint8 ChallengeID);
167 void RemoveStatInstance(const FString&
PlayerID);
168 void LoadFriendsLeaderboardResponse(const TArray<TSharedPtr<FJsonValue>>& LeaderboardEntryList);
169 void LeaderboardLoadedResponse(const TArray<TSharedPtr<FJsonValue>>& LeaderboardEntryList);
170 void LoadLeaderBoard(const FString& StatKey,
int NumberOfEntries,
int PageNumber);
171 void LoadPersonalLeaderBoard(const FString& StatKey);
172 void LoadLeaderBoardForFriends(const FString& StatKey,
int PageNumber = 0);
175 void CheckAchievementList(const
FStatEvent AchievementStatEvent);
178 void OverrideAuthoritativeStat(const FString& StatKey,
int Value);
179 void ForceLevelToTarget(const FString& StatKey,
int Value);
181 UPROPERTY(BlueprintAssignable)
182 FChallengesSignature OnChallengesLoadedEvent;
183 UPROPERTY(BlueprintAssignable)
184 FChallengeClaimedSignature OnChallengeClaimedEvent;
185 UPROPERTY(BlueprintAssignable)
186 FChallengeProgressSignature OnChallengeProgressUpdated;
187 UPROPERTY(BlueprintAssignable)
188 FLeaderBoardLoadedSignature OnLeaderBoardLoaded;
189 UPROPERTY(BlueprintAssignable)
190 FLeaderBoardLoadedSignature OnLocalLeaderboardUpdatedEvent;
191 UPROPERTY(BlueprintAssignable)
193 UPROPERTY(BlueprintAssignable)
194 FStatsFinishedLoadingSignature OnStatsFinishedLoading;
195 UPROPERTY(BlueprintAssignable)
196 FStatsSaveLoadedSignature OnAuthoritativeStastLoaded;
197 UPROPERTY(BlueprintAssignable)
198 FLevelUpEventSignature OnPlayerLeveledUp;
199 UPROPERTY(BlueprintAssignable)
200 FStatsTrackingManagerInitializedSignature OnStatsTrackingManagerInitialized;
205 FTimerHandle RetryConnectionHandle;
210 void LoadChallengesResponse(TSharedPtr<FJsonObject> FoundChallengesJson,const FString&
PlayerID);
216 void OnExperienceUpdatedResponse(
UStatTrackingSave* const Save, const TArray<TSharedPtr<FJsonValue>>& LevelingResults);
217 void ResetCurrentLeaderboard(const FString& StatKey,
bool bFriends);
218 TSharedPtr<FJsonObject> MakeExperienceUpdate(
EStatClassifier Classifier, const FString& ClassID, const FString&
PlayerID);
219 FString GetGameTypeStringFromEnum(
EGameType GameTypeEnum);
221 int32 GetChallengNumberFromID(const FString& ChallengeID);
222 const FString& GetChallengeIDFromNumber(int32 Number);
224 UFUNCTION(BlueprintPure, Category = "Stats")
225 int32 GetPlayerLevelFromPlayerID(const FString&
PlayerID);
227 std::
string LeaderboardCursor;
228 FString CurrentLeaderboardStatKey = "";
229 int32 HighestLoadedLeaderboardPage = 0;
234 TArray<TSharedPtr<FJsonValue>> LeaderboardEntries;
236 bool bFriendsOnlyLoaded = false;
237 FString LocalPlayerID = "";
239 FString ChallengeComplete = "VO_ChallengeCompleted";
241 TMap<FString,
float> AnalyticStatsToSend;
243 bool bHasChallengeReroll = false;
245 FString EmptyChallengeID = "";
247 TArray<FString>ChallengeIDs;
248 TSet<FString> AuthoritativeStats = TSet<FString>();
249 TSet<FString> LeaderboardStats = TSet<FString>();
EStatClassifier
Definition: PlayerStats.h:75
EStatUpdateBehaviour
Definition: PlayerStats.h:142
EStatNames
Definition: PlayerStats.h:86
EGameType
Definition: ProjectXGameState.h:40
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FLeaderBoardLoadedSignature, bool, bLoadSuccess)
DECLARE_DYNAMIC_MULTICAST_DELEGATE_FourParams(FChallengeClaimedSignature, const FString &, ChallengeID, const FString &, ItemID, int, Experience, int, Currency)
DECLARE_DYNAMIC_MULTICAST_DELEGATE_ThreeParams(FLevelUpEventSignature, const FString &, PlayerID, const FString &, ClassID, int, NewLevel)
DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FChallengesSignature, const FTimedChallenges &, Challenges, const FString &, PlayerID)
DECLARE_DYNAMIC_MULTICAST_DELEGATE(FStatsFinishedLoadingSignature)
Definition: ProjectXPlayerState.h:238
Definition: ProjectXGameInstance.h:507
Definition: StatTrackingSave.h:124
int32 GetStat(const EStatClassifier &ClassStatType, const FString &ClassName, const EStatNames &StatName)
Definition: StatTrackingSave.cpp:27
FString PlayerID
Definition: StatTrackingSave.h:132
FStatsLoadedSignature OnStatsLoaded
Definition: StatTrackingSave.h:140
void InitStatType(const EStatClassifier &StatClass, const TArray< FString > &ClassNames, const TSet< EStatNames > &StatsToTrack)
Definition: StatTrackingSave.cpp:55
int32 GetStatDelta(const EStatClassifier &ClassStatType, const FString &ClassName, const EStatNames &StatName)
Definition: StatTrackingSave.cpp:38
FTimedChallenges & GetChallenges()
Definition: StatTrackingSave.h:137
Definition: StatsTrackingManager.h:101
Definition: WeaponInstance.h:220
Definition: StatsTrackingManager.h:49
FLeaderBoardEntry(const FString &PlayerIDIn, const FString &DisplayNameIn, int32 ValueIn, const FString &BannerIDIn, const FString &SteamIDIn, uint16 RankIn)
Definition: StatsTrackingManager.h:52
Definition: StatsTrackingManager.h:36
Definition: StatsTrackingManager.h:19
Definition: PlayerStats.h:200