LEAP Documentation 40220
Documentation for the LEAP project
ProjectXGameInstance.h
Go to the documentation of this file.
1// Copyright Blue Isle Studios Inc 2018. All Rights Reserved.
2
3#pragma once
4
5#include "CoreMinimal.h"
6#include "CosmeticAssetBase.h"
7#include "OnlineSessionInterface.h"
9#include "ProjectXGameState.h"
10/* Online Subsystem */
11#include "OnlineIdentityInterface.h"
12#include "OnlineSessionSettings.h"
13#include "OnlineSessionInterface.h"
14#include "Engine/DataTable.h"
15/* End Online Subsystem */
16#include "Stats/NakamaManager.h"
18
19#if !IS_CONSOLE_PLATFORM
20#include "Schemas/ModioResponse.h"
21#include "ThirdParty/Steamworks/Steamv146/sdk/public/steam/steam_api.h"
22#endif
23
24#include "ProjectXGameInstance.generated.h"
25
27class ULevelInfo;
31class UWeaponInstance;
33class UDataTable;
34class URemoteConsole;
37
38UENUM()
39enum class EOnlineMode : uint8
40{
41 Offline,
42 LAN,
43 Online
44};
45
46UENUM(BlueprintType)
47enum class ESessionState : uint8
48{
49 NONE,
51 JOINING,
54};
55
56UENUM(BlueprintType)
57enum class EServerPlatform : uint8
58{
59 PC,
60 PS,
61 XBOX
62};
63
64UENUM(BlueprintType)
65enum class EProjectXPrivileges : uint8
66{
68 CanPlay,
77};
78
79UENUM(BlueprintType)
80enum class EProjectXPrivilegeResult : uint8
81{
83 NoFailures = 0,
93 UserNotFound = 5,
101 GenericFailure = 9,
106};
107
109{
110 const FName None = FName(TEXT("None"));
111 const FName WelcomeScreen = FName(TEXT("WelcomeScreen"));
112 const FName MainMenu = FName(TEXT("MainMenu"));
113 const FName Playing = FName(TEXT("Playing"));
114 const FName PlayingSolo = FName(TEXT("PlayingSolo"));
115}
116
117DECLARE_DYNAMIC_DELEGATE_TwoParams(FPrivilegeSignature, bool, bAllowed, EProjectXPrivilegeResult, Result);
118
119USTRUCT(Blueprintable)
121{
122 GENERATED_USTRUCT_BODY()
123
124public:
126 FPrivilegeSignature Callback;
127};
128
130{
131public:
133
135 TSharedPtr< const FUniqueNetId > UserId;
136 FOnlineSessionSearchResult InviteResult;
139};
140
141UENUM(BlueprintType)
142enum class EAvatarSize : uint8
143{
144 Small = 0,
145 Medium = 1,
146 Large = 2,
147};
148
149USTRUCT(BlueprintType)
150struct FMatureWordsRow : public FTableRowBase
151{
152 GENERATED_USTRUCT_BODY()
153
154public:
155 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = MatureWords)
156 FString MatureWord;
157};
158
159USTRUCT(BlueprintType)
161{
162 GENERATED_USTRUCT_BODY()
163
164public:
165 UPROPERTY(EditAnywhere, BlueprintReadWrite)
166 FName LanguageCode;
167 UPROPERTY(EditAnywhere, BlueprintReadWrite)
168 FText LanguageText;
169};
170
171UENUM(BlueprintType)
172enum class ESortParameter : uint8
173{
174 NONE = 0,
175 Official = 1,
176 MapName = 2,
177 Mode = 3,
178 PlayerCount = 4,
179 Region = 5,
180 Ping = 6,
181 AntiCheat = 7,
182 MODS = 8,
183 Password = 9,
184 ServerName = 10,
185 WhiteList = 11,
186 Difficulty = 12,
187};
188
189UENUM(BlueprintType)
190enum class EAchievementData : uint8
191{
192 NONE = 0,
236};
237
238USTRUCT(BlueprintType)
240{
241 GENERATED_USTRUCT_BODY()
242
243 UPROPERTY(BlueprintReadWrite)
244 FString ServerName = "";
245 UPROPERTY(BlueprintReadWrite)
246 bool bOfficial = false;
247 UPROPERTY(BlueprintReadWrite)
248 FString MapName = "";
249 UPROPERTY(BlueprintReadWrite)
250 int32 PlayersCurrent = -1;
251 UPROPERTY(BlueprintReadWrite)
252 EGameType GameType = EGameType::NONE;
253 UPROPERTY(BlueprintReadWrite)
254 int32 DifficultyLevel = 254;
255 UPROPERTY(BlueprintReadWrite)
256 int32 PlayerMaximum = -1;
257 UPROPERTY(BlueprintReadWrite)
258 FString Region = "";
259 UPROPERTY(BlueprintReadWrite)
260 int32 Ping = -1;
261 UPROPERTY(BlueprintReadWrite)
262 int32 VersionNumber = -1;
263 UPROPERTY(BlueprintReadWrite)
264 int32 BranchNumber = -1;
265 UPROPERTY(BlueprintReadWrite)
266 bool bAntiCheatEnabled = true;
267 UPROPERTY(BlueprintReadWrite)
268 bool bHasPassword = false;
269 UPROPERTY(BlueprintReadWrite)
270 TArray<FString> Mods;
271 UPROPERTY(BlueprintReadWrite)
272 bool bHasWhiteList = false;
273
274 static bool CompareServer(const ESortParameter Parameter, bool bSortDescending, const FServerInfo& ServerInfoA, const FServerInfo& ServerInfoB)
275 {
276 switch (Parameter)
277 {
279 if (ServerInfoA.ServerName != ServerInfoB.ServerName)
280 {
281 return bSortDescending ? ServerInfoA.ServerName < ServerInfoB.ServerName : ServerInfoA.ServerName > ServerInfoB.ServerName;
282 }
283 break;
285 if (ServerInfoA.bOfficial != ServerInfoB.bOfficial)
286 {
287 return bSortDescending ? ServerInfoA.bOfficial > ServerInfoB.bOfficial : ServerInfoA.bOfficial < ServerInfoB.bOfficial;
288 }
289 break;
291 if (ServerInfoA.GameType != ServerInfoB.GameType)
292 {
293 return bSortDescending ? ServerInfoA.GameType < ServerInfoB.GameType : ServerInfoA.GameType > ServerInfoB.GameType;
294 }
295 break;
297 if (ServerInfoA.PlayersCurrent != ServerInfoB.PlayersCurrent)
298 {
299 return bSortDescending ? ServerInfoA.PlayersCurrent > ServerInfoB.PlayersCurrent : ServerInfoA.PlayersCurrent < ServerInfoB.PlayersCurrent;
300 }
301 break;
303 if (ServerInfoA.MapName != ServerInfoB.MapName)
304 {
305 return bSortDescending ? ServerInfoA.MapName < ServerInfoB.MapName : ServerInfoA.MapName > ServerInfoB.MapName;
306 }
307 break;
309 if (ServerInfoA.Ping != ServerInfoB.Ping)
310 {
311 return bSortDescending ? ServerInfoA.Ping < ServerInfoB.Ping : ServerInfoA.Ping > ServerInfoB.Ping;
312 }
313 break;
315 if (ServerInfoA.bAntiCheatEnabled != ServerInfoB.bAntiCheatEnabled)
316 {
317 return bSortDescending ? ServerInfoA.bAntiCheatEnabled > ServerInfoB.bAntiCheatEnabled : ServerInfoA.bAntiCheatEnabled < ServerInfoB.bAntiCheatEnabled;
318 }
320 if (ServerInfoA.Mods.Num() != ServerInfoB.Mods.Num())
321 {
322 return bSortDescending ? ServerInfoA.Mods.Num() < ServerInfoB.Mods.Num() : ServerInfoA.Mods.Num() > ServerInfoB.Mods.Num();
323 }
325 if (ServerInfoA.bHasWhiteList != ServerInfoB.bHasWhiteList)
326 {
327 return bSortDescending ? ServerInfoA.bHasWhiteList > ServerInfoB.bHasWhiteList : ServerInfoA.bHasWhiteList < ServerInfoB.bHasWhiteList;
328 }
330 if (ServerInfoA.DifficultyLevel != ServerInfoB.DifficultyLevel)
331 {
332 return bSortDescending ? ServerInfoA.DifficultyLevel > ServerInfoB.DifficultyLevel : ServerInfoA.DifficultyLevel < ServerInfoB.DifficultyLevel;
333 }
334 }
335
336 return ServerInfoA > ServerInfoB;
337 }
338
339 bool operator >(const FServerInfo& Other) const
340 {
341 if (ServerName != Other.ServerName)
342 {
343 return ServerName < Other.ServerName;
344 }
345
346 if (bOfficial != Other.bOfficial)
347 {
348 return bOfficial > Other.bOfficial;
349 }
350
351 if (bAntiCheatEnabled != Other.bAntiCheatEnabled)
352 {
353 return bAntiCheatEnabled > Other.bAntiCheatEnabled;
354 }
355
356 if (GameType != Other.GameType)
357 {
358 return GameType < Other.GameType;
359 }
360
361 if (PlayersCurrent != PlayersCurrent)
362 {
363 return PlayersCurrent < Other.PlayersCurrent;
364 }
365
366 if (MapName != Other.MapName)
367 {
368 return MapName < Other.MapName;
369 }
370
371 if (Ping!= Other.Ping)
372 {
373 return Ping < Other.Ping;
374 }
375
376 if (bHasWhiteList != Other.bHasWhiteList)
377 {
378 return bHasWhiteList > Other.bHasWhiteList;
379 }
380
381 if (DifficultyLevel != Other.DifficultyLevel)
382 {
383 return DifficultyLevel > Other.DifficultyLevel;
384 }
385
386 return true;
387 }
388
389 FOnlineSessionSearchResult Session;
390};
391
392USTRUCT(BlueprintType)
394{
395 GENERATED_USTRUCT_BODY()
397 FServerScore(const FServerInfo& InServerInfo, float InScore) { ServerInfo = InServerInfo; Score = InScore; }
398
399 UPROPERTY(BlueprintReadWrite)
400 FServerInfo ServerInfo = FServerInfo();
401 UPROPERTY(BlueprintReadWrite)
402 float Score = 0.f;
403
404 bool operator >(const FServerScore& Other) const
405 {
406 return Score > Other.Score;
407 }
408};
409
410USTRUCT(BlueprintType)
412{
413 GENERATED_USTRUCT_BODY()
415 FNakamaUser(const FString& NewUserName, const FString& NewSteamID) {UserName = NewUserName; SteamID = NewSteamID; }
416 UPROPERTY(BlueprintReadWrite)
417 FString UserName = "";
418 UPROPERTY(BlueprintReadWrite)
419 FString SteamID = "";
420};
421
422USTRUCT(BlueprintType)
423struct FUsers
424{
426 {
427 Users = TMap<FString, FNakamaUser>();
428 }
429 GENERATED_USTRUCT_BODY()
430 UPROPERTY(BlueprintReadWrite)
431 TMap<FString, FNakamaUser> Users = TMap<FString, FNakamaUser>();
432};
433
434UENUM(BlueprintType)
435enum class ERewardType :uint8
436{
437 ReferAFriend = 0,
438 FoundersDLC = 1,
439 DailyLogin = 2,
440 TwitchRewards = 3
441};
442
443UENUM(BlueprintType)
444enum class EJoinSessionResponse :uint8
445{
447 Success,
458};
459
460USTRUCT(BlueprintType)
462{
463 GENERATED_USTRUCT_BODY()
464
466 FRewardShowcase(const TArray<FString>& Items, int32 Currency, int32 Experience)
467 {
468 ItemUnlockShowcase = Items;
469 CurrencyShowcase = Currency;
470 ExpShowcase = Experience;
471 }
472
473 UPROPERTY(BlueprintReadWrite)
474 TArray<FString> ItemUnlockShowcase;
475 UPROPERTY(BlueprintReadWrite)
476 int32 CurrencyShowcase = INDEX_NONE;
477 UPROPERTY(BlueprintReadWrite)
478 int32 ExpShowcase = INDEX_NONE;
479};
480
481DECLARE_DYNAMIC_MULTICAST_DELEGATE_ThreeParams(FOnWorldOriginChangedSignature, class UWorld*, InWorld, FIntVector, PreviousOriginLocation, FIntVector, NewOriginLocation);
482DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnSessionSearchCompleteSignature, const TArray<FServerInfo>&, ServerInfos);
483DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnSessionJoinCompleteSignature, EJoinSessionResponse, JoinResult);
484DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnSessionMatchmakingSignature, bool, bIsMatchMaking);
485DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnSessionDestroyCompleteSignature, bool, bComplete);
487DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FSettingChanged, const float, Delta);
488DECLARE_DYNAMIC_MULTICAST_DELEGATE(FOnRestartPendingSignature);
489DECLARE_DYNAMIC_MULTICAST_DELEGATE(FOnFounderDLCUnlockSignature);
491DECLARE_DYNAMIC_MULTICAST_DELEGATE(FOnTwitchIntegrationVerified);
492DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FOnMenuStateChanged, UAdvancedUserWidget*, Widget, bool, bToggle);
493DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnUsersLoadedSignature, const FUsers&, FoundUsers);
494DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FOnNakamaUserIDFoundSignature, const FString&, FoundID, const FString&, ForID);
495DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FOnDailyRewardsSignature, int, Currency, int, Experience);
496DECLARE_DYNAMIC_MULTICAST_DELEGATE(FOnNakamaManagerInitializedSignature);
497DECLARE_DYNAMIC_DELEGATE_TwoParams(FOnNakamaUserIDFound, const FString&, NakamaID, const FString&, SteamID);
498DECLARE_DYNAMIC_DELEGATE_OneParam(FOnNakamaDailyLoginRewardsFound, bool, bLoginBonusAvailable);
499DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnUserInfoRequested, const FString&, ID);
500DECLARE_DYNAMIC_DELEGATE_TwoParams(FUserRequestCallbackSignature, const FString&, ID, const FString&, NickName);
501
502DECLARE_DELEGATE_TwoParams(FOnNakamaUserIDsFoundSignature, const TArray<FString>&, const TSharedPtr<FJsonObject>&);
503
504
505UCLASS(Config = Game)
507{
508 GENERATED_BODY()
509
510public:
511 void SetServerPendingRestart();
512 virtual void Shutdown() override;
513 virtual void Init() override;
514 virtual void OnStart() override;
515 virtual void CheckForInstanceRestart();
516 void DownloadModsHeadless();
517#if !IS_CONSOLE_PLATFORM
518 void ModDownloadCompleteHeadless(FModioResponse Response, bool bSuccess);
519#endif
520 void InstallModsHeadless();
521 void OnClientTravel(const FString& PendingURL, ETravelType TravelType, bool bIsSeamlessTravel);
522 void OnBackBufferReady_RenderThread(SWindow& SlateWindow, const FTexture2DRHIRef& BackBuffer);
523 void CopyTextureImpl(const FTexture2DRHIRef& Src, FTexture2DRHIRef& Dst, FRHIGPUFence* GPUFence);
524 void DisableSoftwareCursor();
525 void BeginClientAntiCheatSession();
526 void EndClientAntiCheatSession();
527
528 void OnAntiCheatMessageToServer(TArrayView<const uint8> Message);
529 void OnAntiCheatClientViolation(const FString& Reason);
530
531 UFUNCTION(BlueprintCallable)
532 bool GetUnlockedItemsPlayerMayHaveMissed(ERewardType Type, FRewardShowcase& FoundReward);
533 UFUNCTION(BlueprintCallable, Category="Online Subsystem")
534 void FindAllSessions(bool bLan);
535 UFUNCTION(BlueprintCallable, Category="Online Subsystem")
536 void CancelJoinSession();
537 UFUNCTION(BlueprintCallable, Category = "Online Subsystem")
538 void LeaveSession();
539 UFUNCTION(BlueprintCallable, Category = "Online Subsystem")
540 void FindAndJoinBestSession(EGameType GameType);
541 UFUNCTION(BlueprintCallable, Category = "Online Subsystem" , meta = (AutoCreateRefTerm = "Difficultylevels"))
542 void FindAndJoinBestSessionForTypes(const TArray<EGameType> GameTypes, TArray<EDifficultyLevel> Difficultylevels, bool bShouldSearchFreshServersOnly = false);
543 UFUNCTION(BlueprintCallable, Category = "Online Subsystem")
544 void JoinSession(const FServerInfo& SessionInfo);
545 bool FinishJoinSession(ULocalPlayer* LocalPlayer, const FOnlineSessionSearchResult& SearchResult);
546
547 UFUNCTION(BlueprintPure, Category = "Online Subsystem")
548 bool CanUpdateSessionState() const;
549 UFUNCTION(BlueprintPure, Category = "Online Subsystem")
550 float GetInstanceUptime() const { return UpTime; }
551 UFUNCTION(BlueprintCallable)
552 const TArray<FServerInfo>& GetServerInfos() const { return SavedServerInfos; }
553
554 UFUNCTION(BlueprintPure, Category = GameInstance)
555 FORCEINLINE FIntVector GetLastOriginShiftDelta() const { return LastOriginShiftDelta; }
556 UFUNCTION(BlueprintPure, Category = GameInstance)
557 FORCEINLINE class UStatsTrackingManager* GetStatsTrackingManager() const { return StatsTracker; }
558 UFUNCTION(BlueprintPure, Category = GameInstance)
559 FORCEINLINE UNakamaManager* GetNakamaManager() { return NakamaManager; }
560 UFUNCTION(BlueprintPure, Category = GameInstance)
561 FORCEINLINE UCosmeticsManager* GetCosmeticsManager() { return CosmeticManager; }
562 UFUNCTION(BlueprintPure, Category = Cosmetics)
563 FORCEINLINE UDataTable* GetCosmeticsTable() const { return MasterCosmeticTable; }
564 UFUNCTION(BlueprintPure, Category = Cosmetics)
565 FORCEINLINE UDataTable* GetPerkTable() const {return PerksTable;}
566 UFUNCTION(BlueprintPure, Category = Cosmetics)
567 FORCEINLINE UDataTable* GetChallengeTable() const { return ChallengeTable; }
568 UFUNCTION(BlueprintPure, Category = Cosmetics)
569 FORCEINLINE bool IsLoginBonusAvailable() const { return bLoginBonusAvailable; }
570 UFUNCTION(BlueprintPure, Category = Cosmetics)
571 FORCEINLINE UDataTable* GetRarityWeightTable() const {return RarityWeightTable;}
572 UFUNCTION(BlueprintPure, Category = GameState)
573 const TArray<TSubclassOf<class AProjectXCharacter>>& GetPlayerClassList() const { return PlayerClassList; }
574 UFUNCTION(BlueprintPure, Category = GameState)
575 const TArray<TSubclassOf<class AProjectXVehicle>>& GetVehicleClassList() const { return VehicleClassList; }
576 UFUNCTION(BlueprintPure, Category = GameState)
577 const TArray<FString>& GetAchievementMapNameList() const { return AchievementMapNameList; }
578 UFUNCTION(BlueprintPure, Category = GameState)
579 TSubclassOf<AProjectXMapCamera> GetMapCameraClass() const { return MapCameraClass; }
580 UFUNCTION(BlueprintPure, Category = GameState)
581 void GetWeaponList(TArray<TSubclassOf<class UWeaponInstance>>& WeaponList,EEquipSlot Slot) const;
582 UFUNCTION(BlueprintCallable)
583 const FLinearColor& GetRarityColour(ERarity Rarity) const { return RarityColours.Contains(Rarity) ? RarityColours[Rarity] : FLinearColor::Black; }
584 UFUNCTION(BlueprintPure)
585 const FLinearColor& GetAllyColour(const FName& ColourName = NAME_None) const;
586 UFUNCTION(BlueprintPure)
587 const FLinearColor& GetEnemyColour(const FName& ColourName = NAME_None) const;
588 UFUNCTION(BlueprintPure)
589 const FLinearColor& GetSquadmateColour() const;
590 UFUNCTION(BlueprintPure)
591 ESessionState GetSessionState() const {return SessionState;}
592 UFUNCTION(BlueprintCallable)
593 bool IsMatchmaking() const { return bIsMatchMaking; }
594 UFUNCTION(BlueprintCallable)
595 void SetCaptureBackBuffer(bool bCaptureBackBuffer) { bCaptureBackBufferAndStream.AtomicSet(bCaptureBackBuffer); }
596 UFUNCTION(BlueprintPure)
597 static void GetCurrentLevelName(FString& LevelName);
598 UFUNCTION(BlueprintPure)
599 static void GetCurrentLevelNameForClients(FString& LevelName);
600 UFUNCTION(BlueprintCallable)
601 void UpdateClientPassword(UPARAM(ref)const FString& NewPassword) { ClientPassword = NewPassword; }
602 UFUNCTION(BlueprintCallable)
603 void LoadNakamaUsers(const TArray<FString>& NakamaIds);
604 const FString& GetClientPassword() { return ClientPassword; }
605 UFUNCTION(BlueprintCallable)
606 void AskForNakamaIdFromSteamID(const FString& SteamID,FOnNakamaUserIDFound Callback);
607 UFUNCTION(BlueprintCallable)
608 const TArray<FString>& GetFriendsList() const {return Friends;}
609 UFUNCTION(BlueprintCallable)
610 void RequestUserInfo(const FString& PlayerID, FUserRequestCallbackSignature Callback);
611 UFUNCTION(BlueprintCallable)
612 bool IsRewardLoaded(ERewardType Type) const;
613 UPlayerProgressionManager* GetPlayerProgression() const { return PlayerProgression; }
614 static UProjectXGameInstance* GetGameInstance(int32 bServer = INDEX_NONE);
615 AProjectXGameSession* GetGameSession() const;
616 const TArray<TSubclassOf<ULevelInfo>>& GetMapList() const { return MapList; }
617 const void GetMapNameList(TArray<FString>& MapNameList, bool bShowMode = false, bool bShowSize = false) const;
618
619 TSubclassOf<class UOnlineSession> GetOnlineSessionClass() override;
620
621 const FString& GetSessionID() const { return SessionID; }
622 template <class T>
623 FORCEINLINE static T* GetGameInstance() { return Cast<T>(GetGameInstance()); }
624
625 void SetPendingInvite(const FPXPendingInvite& NewPendingInvite) { PendingInvite = NewPendingInvite; }
626 void ToggleLevelLighting(bool bActiveLighting);
627 void AskForNakamaIdsFromSteamIDs(const TArray<FString>& SteamIDs, FOnNakamaUserIDsFoundSignature FoundNakamaUsersCallback);
628
629 UFUNCTION()
630 virtual void SetKickReason(const FString& InKickReason);
631 UFUNCTION(BlueprintCallable, Category = GameInstance)
632 virtual void ConsumeKickReason(FString& OutKickReason);
633 UFUNCTION()
634 virtual void OnNakamaConnected();
635 UFUNCTION(BlueprintPure)
636 static void UpdateSortParameters(ESortParameter SortParamater,bool bSortDescending, const TArray<FServerInfo>& Info, TArray<FServerInfo>& SortedInfos);
637 UFUNCTION(BlueprintPure)
638 bool DoesServerOnlyAllowWhitelistedPlayers() const { return WhitelistedPlayers.Num() != 0; }
639 UFUNCTION(Exec)
640 void OverrideAuthoritativeStat(const FString& StatKey, int Value);
641 UFUNCTION(Exec)
642 void LevelToTarget(const FString& StatKey, int Value);
643 bool IsServerRestarting() const { return bServerRestartPending; }
644
645 //This one could eventually become a voice pack. Consider it player-mutable
646 UAnnouncerSoundDataAsset* GetAnnouncerData() const { return AnnouncementDataSet; }
647 //This one isn't meant to change and covers things like the store
648 UAnnouncerSoundDataAsset* GetGeneralAnnouncerData() const { return GeneralAnnouncementDataSet; }
649
650 UPROPERTY(BlueprintAssignable)
651 FOnWorldOriginChangedSignature WorldOriginChangedEvent;
652 UPROPERTY(BlueprintAssignable)
653 FOnSessionSearchCompleteSignature SessionSearchCompleteEvent;
654 UPROPERTY(BlueprintAssignable)
655 FOnSessionSearchCompleteSignature OnSessionsListUpdatedEvent;
656 UPROPERTY(BlueprintAssignable)
657 FOnSessionJoinCompleteSignature SessionJoinCompleteEvent;
658 UPROPERTY(BlueprintAssignable)
659 FOnSessionDestroyCompleteSignature SessionDestroyCompleteEvent;
660 UPROPERTY(BlueprintAssignable)
661 FOnSessionEventSignature OnSessionStateUpdatedEvent;
662 UPROPERTY(BlueprintAssignable)
663 FOnSessionMatchmakingSignature OnSessionMatchmakingUpdated;
664 UPROPERTY(BlueprintAssignable)
665 FOnRestartPendingSignature OnServerRestartPending;
666 UPROPERTY(BlueprintAssignable)
667 FOnFounderDLCUnlockSignature OnShowFoundersPrompt;
668 UPROPERTY(BlueprintAssignable)
669 FOnShowcaseItems OnShowcaseUnlockedItems;
670 UPROPERTY(BlueprintAssignable)
671 FOnTwitchIntegrationVerified OnTwitchIntegrationVerified;
672 UPROPERTY(BlueprintAssignable)
673 FOnTwitchIntegrationVerified OnTwitchIntegrationRemoved;
674 UPROPERTY(BlueprintAssignable)
675 FOnMenuStateChanged OnMenuStateChanged;
676 UPROPERTY(BlueprintAssignable)
677 FOnUsersLoadedSignature OnNakamaUsersFoundEvent;
678 UPROPERTY(BlueprintAssignable)
679 FOnNakamaUserIDFoundSignature OnNakamaUserIDFoundEvent;
680 UPROPERTY(BlueprintAssignable)
681 FOnNakamaManagerInitializedSignature OnNakamaManagerInitializedEvent;
682 UPROPERTY(BlueprintAssignable)
683 FOnNakamaManagerInitializedSignature OnDailyLoginEvent;
684 UPROPERTY(BlueprintAssignable, BlueprintCallable)
685 FSettingChanged OnFOVSettingChanged;
686 UPROPERTY(BlueprintAssignable)
687 FOnUserInfoRequested OnUserInfoReceivedEvent;
688
689 FOnNakamaUserIDsFoundSignature OnNakamaUserIDsFoundEvent;
690
691 UPROPERTY(EditDefaultsOnly, Category = Configuration)
692 USoundAttenuation* ShooterSoundAttenuation = nullptr;
693 UPROPERTY(EditDefaultsOnly, Category = Configuration)
694 USoundConcurrency* HitConcurrency = nullptr;
695
696 UFUNCTION(BlueprintPure, Category = "Culture")
697 TArray<FText> GetSupportedLanguages() const;
698 UFUNCTION(BlueprintPure, Category = "Culture")
699 FName GetCurrentCulture() const { return CurrentLanguage; }
700 UFUNCTION(BlueprintCallable, Category = "Culture")
701 void ChangeCulture(FName LanguageCode, bool bPromptRestart = false, bool bForce = false);
702 void FinishChangeCulture(FName InLanguageOverride, bool bRestartToMenu = false);
703
704 UFUNCTION(BlueprintPure)
705 void GetTwitchAccountInfo(FString& Username, FString& Avatar) const { Username = TwitchUserName; Avatar = TwitchAvatar; }
706 UFUNCTION(BlueprintPure)
707 bool HasValidTwitchAccountLinked() const { return bIsTwitchIntegratedOnThisAccount; }
708 UFUNCTION(BlueprintCallable)
709 void LinkTwitchAccount();
710 UFUNCTION(BlueprintCallable)
711 void UnlinkTwitchAccount();
712 UFUNCTION()
713 void InitTwitch();
714 UFUNCTION()
715 void CheckReferAFriend();
716 UFUNCTION()
717 void CheckLoginBonus();
718 UFUNCTION(BlueprintCallable)
719 void ConsumeLoginBonus(FOnNakamaDailyLoginRewardsFound OnLoginBonusFound);
720 void VerifyTwitchIntegration(bool bCheckInBackground = true);
721 void OnTwitchIntegrationFailed();
722 void CheckForTwitchRewards(bool ShowRewardsImmediately = false);
723 void OnTwitchIntegrationSuccess();
724
725 void RewardLoadResponse(ERewardType Type,const FRewardShowcase& Rewards);
726
727 void GotoState(FName NewState, bool bInitiateLevelLoad = true, bool bForce = false);
728 void Open(FString OpenString);
729 void Open(FName LevelName, bool bAbsolute = true, FString Options = "");
730 void FinishOpen(FString OpenString);
731 void FinishOpen(FName LevelName, bool bAbsolute, FString Options);
732 void SetPresenceForPlayer(const FString& StatusStr, const FVariantData& PresenceData);
733 void AdvancePlatformDependentEngagement(bool bAllowed, EProjectXPrivilegeResult Result);
734 void AdvancePlatformDependentEngagement2(bool bAllowed, EProjectXPrivilegeResult Result);
735 UFUNCTION(BlueprintCallable, Category = Permission)
736 void HasOnlinePermissions(EProjectXPrivileges PrivelegeToCheck, const FPrivilegeSignature& Callback);
737 FPrivilegeSignature OnlinePermissionsCallback;
738 TArray<FPermissionCheckQueue> PermissionChecks;
739
740 void OnPermissionsChecked(const FUniqueNetId& UserId, EUserPrivileges::Type Privilege, uint32 PrivilegeResults);
741 FName CurrentLanguage = NAME_None;
742 bool bIsTwitchIntegratedOnThisAccount = false;
743 FString TwitchUserName = "";
744 FString TwitchAvatar = "";
745
747 EOnlineMode OnlineMode;
748 bool bIsLicensed = false;
749 int PendingControllerIndex = INDEX_NONE;
750 FPXPendingInvite PendingInvite;
751 bool bMightBeSilver = false;
752
753 /* Game Mode Defaults */
754 UPROPERTY(EditDefaultsOnly, Category = GameState)
755 TArray<FLanguageDefinition> SupportedLanguages;
756 UPROPERTY(EditDefaultsOnly, Category = GameState)
757 TMap<EGameType, FText> GameModeNames;
758 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = GameState)
759 TMap<FString, FText> EnumStringMap;
760 UPROPERTY(EditDefaultsOnly, GlobalConfig, Category = GameState)
761 TMap<FName, FLinearColor> AllyColours;
762 UPROPERTY(EditDefaultsOnly, GlobalConfig, Category = GameState)
763 TMap<FName, FLinearColor> EnemyColours;
764 UPROPERTY(EditDefaultsOnly, Category = GameState)
765 TMap<ERarity, FLinearColor> RarityColours;
766 UPROPERTY(EditDefaultsOnly, GlobalConfig, Category = GameState)
767 FLinearColor NeutralColor = FLinearColor::Gray;
768 UPROPERTY(EditDefaultsOnly, GlobalConfig, Category = GameState)
769 FLinearColor SquadmateColour = FLinearColor::Green;
770 UPROPERTY(EditDefaultsOnly, GlobalConfig, Category = GameState)
771 TArray<FText> TeamNames;
772 UPROPERTY(EditDefaultsOnly, GlobalConfig, Category = GameState)
773 TArray<FString> AchievementMapNameList;
774 UPROPERTY(EditDefaultsOnly, GlobalConfig, Category = GameState)
775 TArray<TSubclassOf<class AProjectXCharacter>> PlayerClassList;
776 UPROPERTY(EditDefaultsOnly, GlobalConfig, Category = GameState)
777 TArray<TSubclassOf<class AProjectXVehicle>> VehicleClassList;
778 UPROPERTY(EditDefaultsOnly, GlobalConfig, Category = GameState)
779 TSubclassOf<AProjectXMapCamera> MapCameraClass;
780 UPROPERTY(EditDefaultsOnly, GlobalConfig, Category = AntiCheat)
781 bool bEnableAntiCheatForServer = true;
782 /* How long does this instance can stay alive before asking for restart? (seconds). Ignored if time is < 0
783 After several hours, servers can start to show issues due to floating points imprecisions, it's important at this time that instances can restart to reset those increasing values. */
784 UPROPERTY(EditDefaultsOnly, GlobalConfig, BlueprintReadOnly, Category = "Server Health")
785 float InstanceRestartTime = 0.f;
786 UPROPERTY(GlobalConfig)
787 TArray<int32> ModIds;
788 UPROPERTY(GlobalConfig)
789 TArray<FString> WhitelistedAdmins;
790 UPROPERTY(GlobalConfig)
791 TArray<FString> WhitelistedPlayers;
792
793 /* End Game Mode Defaults */
794 UPROPERTY(EditDefaultsOnly, Category = GameState)
795 TSoftObjectPtr<UDataTable> MatureWordsDatabase;
796 UPROPERTY(EditDefaultsOnly, Category = GameState)
797 TSubclassOf<UPlatformInputSymbols> PlatformInputSymbols;
798 static TArray<FString> MatureWords;
799 UPROPERTY(EditDefaultsOnly, Category = "AnnouncerData")
800 UAnnouncerSoundDataAsset* AnnouncementDataSet = nullptr;
801 UPROPERTY(EditDefaultsOnly, Category = "AnnouncerData")
802 UAnnouncerSoundDataAsset* GeneralAnnouncementDataSet = nullptr;
803 UPROPERTY(EditDefaultsOnly, Category = "AnnouncerData")
804 USoundEffectSourcePresetChain* HelmetRadioEffect = nullptr;
805 UPROPERTY(EditDefaultsOnly, Category = "Sound")
806 USoundClass* LocalWeaponSoundClass = nullptr;
807 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
808 class UTextureRenderTarget2D* FrameBufferAsRenderTexture = nullptr;
809 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
810 UCurveFloat* NavLinkApproachCurve = nullptr;
811
812 /*When Matchmaking, anything below this threshold will award the maximum ping score for the server*/
813 UPROPERTY(EditDefaultsOnly, Category = Server)
814 int AcceptablePingRange = 50;
815 /* When matchmaking, any ping after this maximum will start to heavily impact on the ping score (negatively)*/
816 UPROPERTY(EditDefaultsOnly, Category = Server)
817 int MaximumPingRange = 150;
818 /* When comparing the current player count of the server, if this value is > 0 we will use it as the ceiling instead of the server's max population to drive the playercount scoring */
819 UPROPERTY(EditDefaultsOnly, Category = Server)
820 int MatchmakingMaxPlayerCount = 60;
821 UPROPERTY(EditDefaultsOnly, Category = Session)
822 float SessionEventDelayLength = 5.0f;
823 UPROPERTY(EditDefaultsOnly, Category = Session)
824 float PartyHostSessionJoinDelay = 3.0f;
825
826 UPROPERTY(EditDefaultsOnly)
827 TSubclassOf<AProjectXCharacter> DefaultFavouriteCharacter;
828 UPROPERTY(EditDefaultsOnly)
829 TSubclassOf<UAfflictionInstance> DefaultMarkRemainingEnemiesAffliction = NULL;
830 UPROPERTY(BlueprintReadOnly)
831 bool bIsFoundersEdition = true;
832 UFUNCTION(BlueprintPure)
833 bool ShowFoundersPrompt();
834
835 UFUNCTION(BlueprintNativeEvent)
836 void OnPlatformDependentEngagementCompleted();
837
838 bool bShowFoundersPrompt = false;
839 UPROPERTY()
840 FText CancelText = NSLOCTEXT("LEAP", "Cancel", "Cancel");
841 UPROPERTY()
842 FText OkText = NSLOCTEXT("LEAP", "OK", "Ok");
843
844 FString GetModIdsAsString() const
845 {
846 FString Output = "";
847 for (int32 ModId : ModIds)
848 {
849 Output += FString::FromInt(ModId) + ":";
850 }
851 Output = Output.LeftChop(1);
852 return MoveTemp(Output);
853 }
854
855 const TMap<EAchievementData, int32>& GetAchievementMap() const { return AchievementMap; }
856 TMap<ERewardType,FRewardShowcase> RewardShowcaseQue = TMap<ERewardType, FRewardShowcase>();
857 uint8 LoadedRewards = 0;
858protected:
859 void OnNetworkTravelFailure(UWorld* InWorld, ETravelFailure::Type FailureType, const FString& ErrorString);
860 void OnNetworkFailure(UWorld* InWorld, class UNetDriver* NetDriver, ENetworkFailure::Type FailureType, const FString& ErrorString);
861 void SetOnlineMode(EOnlineMode InOnlineMode);
862 void FindSessions(bool blan, bool bDelayResult, bool bMatchMaking);
863 void UpdateSessionState(ESessionState NewSessionState);
864
865 UFUNCTION()
866 void JoinBestSession(const TArray<FServerInfo>& ServerInfos);
867 UFUNCTION()
868 void FindAllSessionsResponse(const TArray<FServerInfo>& ServerInfos);
869 UPROPERTY()
870 UPlayerProgressionManager* PlayerProgression = NULL;
871
872private:
873 /* Online Subsystem */
874 TSharedPtr<class FOnlineSessionSearch> SessionSearch;
875 FOnFindSessionsCompleteDelegate OnFindSessionsCompleteDelegate;
876 FOnReadFriendsListComplete OnReadFriendsListComplete;
877 FDelegateHandle OnFindSessionsCompleteDelegateHandle;
878 FDelegateHandle OnJoinSessionsCompleteDelegateHandle;
879 FDelegateHandle OnSearchSessionsCompleteDelegateHandle;
880 FOnJoinSessionComplete::FDelegate OnJoinSessionCompleteDelegate;
881 FDelegateHandle OnCreatePresenceSessionCompleteDelegateHandle;
882 FOnDestroySessionCompleteDelegate OnDestroySessionCompleteDelegate;
883 FDelegateHandle OnDestroySessionCompleteDelegateHandle;
884
886 FTickerDelegate TickDelegate;
887
889 FDelegateHandle TickDelegateHandle;
890
891 void PostInit();
892 void InitNakama();
893 void OnlineSubsystemInit();
894 void BeginAntiCheatSession(const FUniqueNetId& LocalUserId, ELoginStatus::Type Status);
895
896 bool Tick(float DeltaSeconds);
897#if !IS_CONSOLE_PLATFORM
898 void ModDownloadsComplete(struct FModioResponse Response, bool bSuccess);
899#endif
900 void InstallMods();
901 void OnModsInstalled();
902
903 UFUNCTION()
904 void GetFoundersDLC();
905 UFUNCTION()
906 void OnPostWorldOriginOffset(UWorld* InWorld, FIntVector PreviousOriginLocation, FIntVector NewOriginLocation);
907
908 void LoadMods(TArray<int32>& ModsToLoad, bool bRefreshPluginDirectory = false);
909 void OnJoinSessionComplete(FName SessionName, EOnJoinSessionCompleteResult::Type JoinCompletionResult);
910 void JoinPartyToSearchResult(const FOnlineSessionSearchResult& SearchResult);
911
912 void OnDestroySessionComplete(FName Sessionname, bool bSucessful);
913 virtual bool JoinSession(ULocalPlayer* LocalPlayer, int32 SessionIndexInSearchResults) override;
914 virtual bool JoinSession(ULocalPlayer* LocalPlayer, const FOnlineSessionSearchResult& SearchResult) override;
915 bool HostGame(ULocalPlayer* LocalPlayer, const FString& GameType, const FString& InTravelURL);
916 void OnCreatePresenceSessionComplete(FName SessionName, bool bWasSuccessful);
917 void OnRegisterLocalPlayerComplete(const FUniqueNetId& PlayerId, EOnJoinSessionCompleteResult::Type Result);
918 void FinishSessionCreation(EOnJoinSessionCompleteResult::Type Result);
919
920 void OnSearchSessionCompleteDelay(bool bWasSuccessful);
921 UFUNCTION()
922 void OnSearchSessionsComplete(bool bWasSuccessful);
923
924 void OnSessionUserInviteAcceptedClient(const bool bSuccess, const int32 ControllerId, TSharedPtr<const FUniqueNetId> UserId, const FOnlineSessionSearchResult& InviteSessionData);
925 void OnSessionUserInviteReceivedClient(const FUniqueNetId& UserId, const FUniqueNetId& FromId, const FString& AppID, const FOnlineSessionSearchResult& InviteResult);
926 void HandleSessionFailureServer(const FUniqueNetId& NetId, ESessionFailure::Type FailureType);
927 void HandleSessionFailureClient(const FUniqueNetId& NetId, ESessionFailure::Type FailureType);
928 void OnCreateGameSessionCompleted(FName InSessionName, bool bWasSuccessful);
929 UFUNCTION()
930 void OnFriendsChanged();
931 UFUNCTION()
932 void OnReadFriendListCompleteResponse(int32 LocalUserNum, bool bWasSuccessful, const FString& ListName, const FString& ErrorStr);
933 void OnNakamaIdsFoundResponse(const TArray<FString>& SteamIds, const TSharedPtr<FJsonObject>& FoundNakamaUsers);
934 void LoadFriendsListFromInterface();
935#if !IS_CONSOLE_PLATFORM
936 STEAM_CALLBACK(UProjectXGameInstance, OnRequestInfoResponse, PersonaStateChange_t);
937#endif
938 bool LoadFrontEndMap();
939 void JoinFoundSession(int32 Id, bool Success, const FOnlineSessionSearchResult& Session);
940 /* Use PlayerState->GetPlayerName() to get the replicated nickname. This should be used for debugging purposes only */
941 FString GetPlayerNickname() const;
942 static IOnlineIdentityPtr GetOnlineIdentity();
943 /* End Online Subsystem */
944
945 UPROPERTY();
946 TArray<TSubclassOf<ULevelInfo>> MapList;
947 UPROPERTY(GlobalConfig, EditDefaultsOnly, Category = Maps)
948 TArray<TSoftClassPtr<ULevelInfo>> MapListConfig;
949 UPROPERTY(EditDefaultsOnly, Category = Cosmetics)
950 UDataTable* MasterCosmeticTable = NULL;
951 UPROPERTY(EditDefaultsOnly, Category = Cosmetics)
952 UDataTable* PerksTable = NULL;
953 UPROPERTY(EditDefaultsOnly, Category = Cosmetics)
954 UDataTable* ChallengeTable = NULL;
955 UPROPERTY(EditDefaultsOnly, Category = Cosmetics)
956 UDataTable* RarityWeightTable = NULL;
957 //Current reason we were kicked from the server.
958 UPROPERTY()
959 FString KickReason = "";
960
961 FString TravelURL = "";
962
963 bool bAntiCheatClientSessionActive = false;
964 TWeakObjectPtr<class UContextMenuWidget> ModDownloadWidget = nullptr;
965 bool bStarted = false;
966protected:
967 UPROPERTY()
968 class UStatsTrackingManager* StatsTracker = NULL;
969 UPROPERTY()
970 class UNakamaManager* NakamaManager = NULL;
971 UPROPERTY()
972 class UCosmeticsManager* CosmeticManager = NULL;
973
974 UPROPERTY()
975 URemoteConsole* RemoteConsole = NULL;
976
977 UPROPERTY(BlueprintReadOnly, Category = "SimpleUGC")
978 class UUGCRegistry* UGCRegistry = nullptr;
979
980 int32 IgnorePairingChangeForControllerId;
981 EOnlineServerConnectionStatus::Type CurrentConnectionStatus;
982 FString ConsoleServerPort = "";
983 FString ServerSecret = "";
984 EServerPlatform ServerPlatform = EServerPlatform::PC;
985 TArray<ELoginStatus::Type> LocalPlayerOnlineStatus;
986
987 FString SessionID = "";
988 FString ClientPassword = "";
989 TArray<FString> Friends;
990 TArray<FServerInfo> SavedServerInfos;
991 FTimerHandle FindSessionDelayTimer;
992 FTimerHandle JoiningSessionDelayTimer;
993 FTimerHandle InstanceResetCheckTimer;
994 FDelegateHandle WorldOriginDelegateHandle;
995 FUsers UsersAccounts = FUsers();
996 bool bIsMatchMaking = false;
997 bool bLoadedFriendsListInterface = false;
998 float UpTime = 0.0f;
999 bool bLoginBonusAvailable = false;
1000 FThreadSafeBool bCaptureBackBufferAndStream = true;
1001
1002 ESessionState SessionState = ESessionState::NONE;
1003 TArray<EGameType> GameTypesSearchParameter = TArray<EGameType>();
1004 TArray<EDifficultyLevel> DifficultyLevelsSearchParameter = TArray<EDifficultyLevel>();
1005 bool bSearchFreshServersOnly = false;
1006 bool bServerRestartPending = false;
1007 FIntVector LastOriginShiftDelta = FIntVector::ZeroValue;
1008
1009 TMap<FString, FUserRequestCallbackSignature> UserInfoCallbackRequests;
1010 TMap<FString,FString> UserIDtoNicknameMap = TMap<FString,FString>();
1011 TArray<int32> ServerModsToLoad;
1012 FOnlineSessionSearchResult PostModDownloadSessionToJoin;
1013
1014 UPROPERTY(EditDefaultsOnly, Category = Matchmaking)
1015 UCurveFloat* MatchmakingPingWeightCurve = nullptr;
1016 UPROPERTY(EditDefaultsOnly, Category = Matchmaking)
1017 UCurveFloat* MatchmakingPlayerWeightCurve = nullptr;
1018 UPROPERTY(EditDefaultsOnly, Category = Achievement)
1019 TMap<EAchievementData, int32> AchievementMap;
1020 bool bIsDownloadingMods = false;
1021};
1022
@ Open
Definition: AdvancedUserWidget.h:24
ERarity
Definition: CosmeticAssetBase.h:95
EEquipSlot
Definition: PlayerStructs.h:25
EProjectXPrivileges
Definition: ProjectXGameInstance.h:66
EProjectXPrivilegeResult
Definition: ProjectXGameInstance.h:81
EServerPlatform
Definition: ProjectXGameInstance.h:58
DECLARE_DYNAMIC_MULTICAST_DELEGATE_ThreeParams(FOnWorldOriginChangedSignature, class UWorld *, InWorld, FIntVector, PreviousOriginLocation, FIntVector, NewOriginLocation)
EAvatarSize
Definition: ProjectXGameInstance.h:143
DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FOnMenuStateChanged, UAdvancedUserWidget *, Widget, bool, bToggle)
DECLARE_DYNAMIC_DELEGATE_TwoParams(FPrivilegeSignature, bool, bAllowed, EProjectXPrivilegeResult, Result)
DECLARE_DELEGATE_TwoParams(FOnNakamaUserIDsFoundSignature, const TArray< FString > &, const TSharedPtr< FJsonObject > &)
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnSessionSearchCompleteSignature, const TArray< FServerInfo > &, ServerInfos)
ESessionState
Definition: ProjectXGameInstance.h:48
DECLARE_DYNAMIC_DELEGATE_OneParam(FOnNakamaDailyLoginRewardsFound, bool, bLoginBonusAvailable)
EAchievementData
Definition: ProjectXGameInstance.h:191
@ GLUTTON_FOR_PUNISHMENT_ACHIEVEMENT_8
@ CITIZEN_OF_CHANGSHA_ACHIEVEMENT_12
@ KING_OF_THE_HILL_ACHIEVEMENT_16
@ BRINGER_OF_WRATH_ACHIEVEMENT_27
@ MORE_LIKE_TECH_STOPS_ACHIEVEMENT_35
@ CANT_STOP_ME_NOW_ACHIEVEMENT_42
@ FLOAT_LIKE_A_BUTTERFLY_ACHIEVEMENT_43
@ ALL_THAT_GLITTERS_ACHIEVEMENT_21
@ CAPTURE_THE_VICTORY_ACHIEVEMENT_18
EOnlineMode
Definition: ProjectXGameInstance.h:40
DECLARE_DYNAMIC_MULTICAST_DELEGATE(FOnRestartPendingSignature)
EJoinSessionResponse
Definition: ProjectXGameInstance.h:445
ESortParameter
Definition: ProjectXGameInstance.h:173
ERewardType
Definition: ProjectXGameInstance.h:436
EDifficultyLevel
Definition: ProjectXGameState.h:54
EGameType
Definition: ProjectXGameState.h:40
Definition: ProjectXCharacter.h:128
Definition: ProjectXGameSession.h:36
Definition: ProjectXMapCamera.h:11
Definition: ProjectXVehicle.h:56
Definition: ProjectXGameInstance.h:130
bool bUGCPrivilegesCheckedAndAllowed
Definition: ProjectXGameInstance.h:138
bool bPrivilegesCheckedAndAllowed
Definition: ProjectXGameInstance.h:137
int32 ControllerId
Definition: ProjectXGameInstance.h:134
FPXPendingInvite()
Definition: ProjectXGameInstance.h:132
TSharedPtr< const FUniqueNetId > UserId
Definition: ProjectXGameInstance.h:135
FOnlineSessionSearchResult InviteResult
Definition: ProjectXGameInstance.h:136
Definition: AdvancedUserWidget.h:30
Definition: AnnouncerSoundDataAsset.h:42
Definition: ContextMenuWidget.h:37
Definition: GameInstanceLoadingScreen.h:18
Definition: LevelInfo.h:14
Definition: NakamaManager.h:55
Definition: PlatformInputSymbols.h:14
Definition: PlayerProgressionManager.h:76
Definition: ProjectXGameInstance.h:507
UAnnouncerSoundDataAsset * GetGeneralAnnouncerData() const
Definition: ProjectXGameInstance.h:648
UPlayerProgressionManager * GetPlayerProgression() const
Definition: ProjectXGameInstance.h:613
const FString & GetClientPassword()
Definition: ProjectXGameInstance.h:604
UAnnouncerSoundDataAsset * GetAnnouncerData() const
Definition: ProjectXGameInstance.h:646
const TMap< EAchievementData, int32 > & GetAchievementMap() const
Definition: ProjectXGameInstance.h:855
const FString & GetSessionID() const
Definition: ProjectXGameInstance.h:621
const TArray< TSubclassOf< ULevelInfo > > & GetMapList() const
Definition: ProjectXGameInstance.h:616
void SetPendingInvite(const FPXPendingInvite &NewPendingInvite)
Definition: ProjectXGameInstance.h:625
static FORCEINLINE T * GetGameInstance()
Definition: ProjectXGameInstance.h:623
bool IsServerRestarting() const
Definition: ProjectXGameInstance.h:643
Definition: RemoteConsole.h:15
Definition: StatsTrackingManager.h:101
Definition: WeaponInstance.h:220
Definition: ProjectXGameInstance.h:109
const FName None
Definition: ProjectXGameInstance.h:110
const FName MainMenu
Definition: ProjectXGameInstance.h:112
const FName Playing
Definition: ProjectXGameInstance.h:113
const FName PlayingSolo
Definition: ProjectXGameInstance.h:114
const FName WelcomeScreen
Definition: ProjectXGameInstance.h:111
Definition: ProjectXGameInstance.h:161
Definition: ProjectXGameInstance.h:151
Definition: ProjectXGameInstance.h:412
FNakamaUser(const FString &NewUserName, const FString &NewSteamID)
Definition: ProjectXGameInstance.h:415
Definition: ProjectXGameInstance.h:121
EProjectXPrivileges Privilege
Definition: ProjectXGameInstance.h:125
FPrivilegeSignature Callback
Definition: ProjectXGameInstance.h:126
Definition: ProjectXGameInstance.h:462
FRewardShowcase(const TArray< FString > &Items, int32 Currency, int32 Experience)
Definition: ProjectXGameInstance.h:466
Definition: ProjectXGameInstance.h:240
FOnlineSessionSearchResult Session
Definition: ProjectXGameInstance.h:389
EGameType GameType
Definition: ProjectXGameInstance.h:252
FString ServerName
Definition: ProjectXGameInstance.h:244
int32 Ping
Definition: ProjectXGameInstance.h:260
bool bHasWhiteList
Definition: ProjectXGameInstance.h:272
bool bOfficial
Definition: ProjectXGameInstance.h:246
FString MapName
Definition: ProjectXGameInstance.h:248
bool bAntiCheatEnabled
Definition: ProjectXGameInstance.h:266
int32 DifficultyLevel
Definition: ProjectXGameInstance.h:254
int32 PlayersCurrent
Definition: ProjectXGameInstance.h:250
Definition: ProjectXGameInstance.h:394
FServerScore(const FServerInfo &InServerInfo, float InScore)
Definition: ProjectXGameInstance.h:397
Definition: ProjectXGameInstance.h:424
FUsers()
Definition: ProjectXGameInstance.h:425