2026-03-01 12:16:08 +08:00
# pragma once
enum eAwardType
{
eAwardType_Achievement = 0 ,
eAwardType_GamerPic ,
eAwardType_Theme ,
eAwardType_AvatarItem ,
} ;
enum eUpsellType
{
eUpsellType_Custom = 0 , // This is the default, and means that the upsell dialog was initiated in the app code
eUpsellType_Achievement ,
eUpsellType_GamerPic ,
eUpsellType_Theme ,
eUpsellType_AvatarItem ,
} ;
enum eUpsellResponse
{
eUpsellResponse_Declined ,
eUpsellResponse_Accepted_NoPurchase ,
eUpsellResponse_Accepted_Purchase ,
} ;
class C_4JProfile
{
public :
struct PROFILESETTINGS
{
int iYAxisInversion ;
int iControllerSensitivity ;
int iVibration ;
bool bSwapSticks ;
} ;
// 4 players have game defined data, puiGameDefinedDataChangedBitmask needs to be checked by the game side to see if there's an update needed - it'll have the bits set for players to be updated
void Initialise ( DWORD dwTitleID ,
DWORD dwOfferID ,
unsigned short usProfileVersion ,
UINT uiProfileValuesC ,
UINT uiProfileSettingsC ,
DWORD * pdwProfileSettingsA ,
int iGameDefinedDataSizeX4 ,
unsigned int * puiGameDefinedDataChangedBitmask ) ;
void SetTrialTextStringTable ( CXuiStringTable * pStringTable , int iAccept , int iReject ) ;
void SetTrialAwardText ( eAwardType AwardType , int iTitle , int iText ) ; // achievement popup in the trial game
int GetLockedProfile ( ) ;
void SetLockedProfile ( int iProf ) ;
bool IsSignedIn ( int iQuadrant ) ;
bool IsSignedInLive ( int iProf ) ;
bool IsGuest ( int iQuadrant ) ;
UINT RequestSignInUI ( bool bFromInvite , bool bLocalGame , bool bNoGuestsAllowed , bool bMultiplayerSignIn , bool bAddUser , int ( * Func ) ( LPVOID , const bool , const int iPad ) , LPVOID lpParam , int iQuadrant = XUSER_INDEX_ANY ) ;
UINT DisplayOfflineProfile ( int ( * Func ) ( LPVOID , const bool , const int iPad ) , LPVOID lpParam , int iQuadrant = XUSER_INDEX_ANY ) ;
UINT RequestConvertOfflineToGuestUI ( int ( * Func ) ( LPVOID , const bool , const int iPad ) , LPVOID lpParam , int iQuadrant = XUSER_INDEX_ANY ) ;
void SetPrimaryPlayerChanged ( bool bVal ) ;
bool QuerySigninStatus ( void ) ;
void GetXUID ( int iPad , PlayerUID * pXuid , bool bOnlineXuid ) ;
BOOL AreXUIDSEqual ( PlayerUID xuid1 , PlayerUID xuid2 ) ;
BOOL XUIDIsGuest ( PlayerUID xuid ) ;
bool AllowedToPlayMultiplayer ( int iProf ) ;
bool GetChatAndContentRestrictions ( int iPad , bool * pbChatRestricted , bool * pbContentRestricted , int * piAge ) ;
void StartTrialGame ( ) ; // disables saves and leaderboard, and change state to readyforgame from pregame
void AllowedPlayerCreatedContent ( int iPad , bool thisQuadrantOnly , BOOL * allAllowed , BOOL * friendsAllowed ) ;
BOOL CanViewPlayerCreatedContent ( int iPad , bool thisQuadrantOnly , PPlayerUID pXuids , DWORD dwXuidCount ) ;
void ShowProfileCard ( int iPad , PlayerUID targetUid ) ;
bool GetProfileAvatar ( int iPad , int ( * Func ) ( LPVOID lpParam , PBYTE pbThumbnail , DWORD dwThumbnailBytes ) , LPVOID lpParam ) ;
void CancelProfileAvatarRequest ( ) ;
// SYS
int GetPrimaryPad ( ) ;
void SetPrimaryPad ( int iPad ) ;
2026-03-03 11:58:22 -05:00
const char * GetGamertag ( int iPad ) ;
2026-03-01 12:16:08 +08:00
wstring GetDisplayName ( int iPad ) ;
bool IsFullVersion ( ) ;
void SetSignInChangeCallback ( void ( * Func ) ( LPVOID , bool , unsigned int ) , LPVOID lpParam ) ;
void SetNotificationsCallback ( void ( * Func ) ( LPVOID , DWORD , unsigned int ) , LPVOID lpParam ) ;
bool RegionIsNorthAmerica ( void ) ;
bool LocaleIsUSorCanada ( void ) ;
HRESULT GetLiveConnectionStatus ( ) ;
bool IsSystemUIDisplayed ( ) ;
void SetProfileReadErrorCallback ( void ( * Func ) ( LPVOID ) , LPVOID lpParam ) ;
// PROFILE DATA
int SetDefaultOptionsCallback ( int ( * Func ) ( LPVOID , PROFILESETTINGS * , const int iPad ) , LPVOID lpParam ) ;
int SetOldProfileVersionCallback ( int ( * Func ) ( LPVOID , unsigned char * , const unsigned short , const int ) , LPVOID lpParam ) ;
PROFILESETTINGS * GetDashboardProfileSettings ( int iPad ) ;
void WriteToProfile ( int iQuadrant , bool bGameDefinedDataChanged = false , bool bOverride5MinuteLimitOnProfileWrites = false ) ;
void ForceQueuedProfileWrites ( int iPad = XUSER_INDEX_ANY ) ;
void * GetGameDefinedProfileData ( int iQuadrant ) ;
void ResetProfileProcessState ( ) ; // after a sign out from the primary player, call this
void Tick ( void ) ;
// ACHIEVEMENTS & AWARDS
void RegisterAward ( int iAwardNumber , int iGamerconfigID , eAwardType eType , bool bLeaderboardAffected = false ,
CXuiStringTable * pStringTable = NULL , int iTitleStr = - 1 , int iTextStr = - 1 , int iAcceptStr = - 1 , char * pszThemeName = NULL , unsigned int uiThemeSize = 0L ) ;
int GetAwardId ( int iAwardNumber ) ;
eAwardType GetAwardType ( int iAwardNumber ) ;
bool CanBeAwarded ( int iQuadrant , int iAwardNumber ) ;
void Award ( int iQuadrant , int iAwardNumber , bool bForce = false ) ;
bool IsAwardsFlagSet ( int iQuadrant , int iAward ) ;
// RICH PRESENCE
void RichPresenceInit ( int iPresenceCount , int iContextCount ) ;
void RegisterRichPresenceContext ( int iGameConfigContextID ) ;
void SetRichPresenceContextValue ( int iPad , int iContextID , int iVal ) ;
void SetCurrentGameActivity ( int iPad , int iNewPresence , bool bSetOthersToIdle = false ) ;
// PURCHASE
void DisplayFullVersionPurchase ( bool bRequired , int iQuadrant , int iUpsellParam = - 1 ) ;
void SetUpsellCallback ( void ( * Func ) ( LPVOID lpParam , eUpsellType type , eUpsellResponse response , int iUserData ) , LPVOID lpParam ) ;
// Debug
void SetDebugFullOverride ( bool bVal ) ; // To override the license version (trail/full). Only in debug/release, not ContentPackage
} ;
// Singleton
extern C_4JProfile ProfileManager ;