aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.Client/Orbis/4JLibs/inc/4J_Profile.h
blob: d988adbfe20f0795fcc7fcbd56b0c634275d011a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
#pragma once
#include <np/np_common.h>
#include <np_toolkit.h>

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,
	eUpsellResponse_UserNotSignedInPSN
};



class C_4JProfile
{
public:

	typedef struct 
	{
		int					iPad;
		int					( *m_fnFunc)(LPVOID lpParam,PBYTE pbThumbnail,DWORD dwThumbnailBytes);
		LPVOID				m_fnFunc_Param;
	}
	FUNCPARAMS;

	// 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( const SceNpCommunicationId* commsId,
									const SceNpCommunicationSignature* commsSig,
									unsigned short usProfileVersion,
									UINT uiProfileValuesC,
									UINT uiProfileSettingsC,
									DWORD *pdwProfileSettingsA, 
									int iGameDefinedDataSizeX4,
									unsigned int *puiGameDefinedDataChangedBitmask); 
	void				InitialiseTrophies();//const SceNpCommunicationId* commsId, const SceNpCommunicationSignature* commsSig);
	int					WaitTrophyInitComplete();
	int					tryWaitTrophyInitComplete();
	void				trophySystemCallback(const sce::Toolkit::NP::Event& event);
	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				GetSceNpId(int iPad, SceNpId *npId);
	void				GetXUID(int iPad, PlayerUID *pXuid,bool bOnlineXuid);
	BOOL				AreXUIDSEqual(PlayerUID xuid1,PlayerUID xuid2);
	BOOL				XUIDIsGuest(PlayerUID xuid);
	bool				AllowedToPlayMultiplayer(int iProf);
	bool				HasPlayStationPlus(int iProf);
	void				PsPlusUpdate(int iProf, SceNpCommerceDialogResult *dialogResult);
	bool				RequestingPlaystationPlus(int iPad);
	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 );
	bool				GetProfileAvatar(int iPad,int( *Func)(LPVOID lpParam,PBYTE pbThumbnail,DWORD dwThumbnailBytes), LPVOID lpParam);
	void				CancelProfileAvatarRequest();

	void				SetGetStringFunc(LPCWSTR ( *Func)(int));
	void				SetPlayerListTitleID(int id);
	void				SetFatalTrophyErrorID(int id);
				
	// SYS
	int					GetPrimaryPad();
	void				SetPrimaryPad(int iPad);
	char*				GetGamertag(int iPad);
	wstring				GetDisplayName(int iPad);
	bool				IsFullVersion();
	void				SetFullVersion(bool bFull);
	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				DisplaySystemMessage( SceMsgDialogSystemMessageType _type, int iQuadrant);
	void				SetProfileReadErrorCallback(void ( *Func)(LPVOID), LPVOID lpParam);

	void				SetHDDFreeKB(int iHDDFreeKB);
	void				SetMinSaveKB(int iMinSaveKB);
	int					GetHDDFreeKB(void);



	// 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=nullptr, int iTitleStr=-1, int iTextStr=-1, int iAcceptStr=-1, char *pszThemeName=nullptr, 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);	
	void				Terminate();

	// RICH PRESENCE
	void				RichPresenceRegisterPresenceString(int index, const char* str);
	void				RichPresenceRegisterContext(int ctxID, const char* token);
	void				RichPresenceRegisterContextString(int ctxID, int strIndex, const char* str);

	void				RichPresenceInit(int iPresenceCount, int iContextCount);
	void				SetRichPresenceContextValue(int iPad,int iContextID, int iVal);
	void				SetCurrentGameActivity(int iPad,int iNewPresence, bool bSetOthersToIdle=false);
	void				SetRichPresenceSettingFn(int ( *SetPresenceInfoFn)(const void *data));

	// 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

	// Online status
	void				SetNetworkStatus(bool online);

	DWORD				GetSignedInUsersMask();

	// PS3 chat and content restrictions
	void				RefreshChatAndContentRestrictions(void( *Func)(void *pParam), void *pParam);
	bool				GetChatAndContentRestrictions(int iPad, bool thisQuadrantOnly,bool *pbChatRestricted,bool *pbContentRestricted,int *piAge);
	void				SetServiceID(char *pchServiceID); // needed for the ticket request for the chat restrictions of secondary PSN players
	void				HandleNetworkTicket(int result,void *arg);
	void				SetMinimumAge(int iAge);

	SceUserServiceUserId	getUserID(int iQuadrant); //  grab the PS4 userID for this quadrant (SCE_USER_SERVICE_USER_ID_INVALID if it's not signed in)
	int						getQuadrant(SceUserServiceUserId userId);
	void					SignedInPSNStateCallback(SceUserServiceUserId userId, SceNpState state, const SceNpId *npId);

	int						getNPAvailability(int iQuadrant);
	bool					isSignedInPSN(int iQuadrant);
	bool					isConnectedToPSN(int iQuadrant);

	// Http calls
	bool SonyHttp_init();
	void SonyHttp_shutdown();
	bool SonyHttp_getDataFromURL(const char* szURL, void** ppOutData, int* pDataSize);

};

// Singleton
extern C_4JProfile ProfileManager;