/** * Copyright 1998-2012 Epic Games, Inc. All Rights Reserved. */ class OnlineSubsystemDingo extends OnlineSubsystemCommonImpl native implements(OnlinePlayerInterface, OnlinePlayerInterfaceEx, OnlineVoiceInterface,OnlineSystemInterface) config(Engine) inherits(FCallbackEventDevice); /** The object that handles the game DVR interface implementation */ var OnlineGameDVRInterfaceDingo GameDVRInterfaceImpl; /** The object that handles the stats interface implementation */ var OnlineStatsInterfaceDingo StatsInterfaceImpl; /** The object that handles the title-file interface implementation */ var OnlineTitleFileInterfaceDingo TitleFileInterfaceImpl; /** The object that handles the community content interface implementation */ var OnlineCommunityContentInterfaceDingo CommunityContentInterfaceImpl; /** The object that handles the marketplace interface implementation */ var OnlineMarketplaceInterfaceDingo MarketplaceInterfaceImpl; /** The object that handles the content interface implementation */ var OnlineContentInterfaceDingo ContentInterfaceImpl; //@HSL_BEGIN - urias.rooney@hardsuitlabs.com – 12/08/16 - Dingo Party Interface /** The object that handles the lobby interface implementation */ var KFOnlineLobbyDingo LobbyInterface; //@HSL_END /** These variables are used for limiting connection status flapping */ var EOnlineServerConnectionStatus CurrentConnectionStatus; var EOnlineServerConnectionStatus DesiredConnectionStatus; var float ConnectionTimeUpdateDelta; /** * This is the array of queued async tasks that will be held until * the game is activated and will then be transferred to the standard async * task array. */ var native const array QueuedActivationAsyncTasks{FQueuedOnlineAsyncTaskDingo}; /** * This is the array of pending async tasks. Each tick these tasks are checked * for completion. If complete, the delegate associated with them is called */ var native const array AsyncTasks{FOnlineAsyncTaskDingo}; /** The directory profile data should be stored in */ var config string ProfileDataDirectory; /** The file extension to use when saving profile data */ var config string ProfileDataExtension; /** The array of delegates that notify the completion of OnlineProfile reads */ var array > ReadOnlineProfileDelegates; /** The cached profile for the player */ var OnlineProfileSettings CachedProfile; /** The list of delegates to notify when the keyboard input is complete */ var array > KeyboardInputDelegates; /** Was the keyboard input canceled? */ var byte KeyboardInputWasCanceled; /** Holds the last keyboard input results */ var string KeyboardInputResults; /** List of callbacks to notify when speech recognition is complete */ var array > SpeechRecognitionCompleteDelegates; /** The array of delegates that notify read completion of the friends list data */ var array > ReadFriendsDelegates; /** The array of delegates that notify that the friends list has changed */ var array > FriendsChangeDelegates; /** The array of delegates that notify that the mute list has changed */ var array > MutingChangeDelegates; /** The array of delegates that notify that help has been shown */ var array > ShowHelpDelegates; /** The array of delegates that notify the token and signature have been retrieved */ var array > TokenAndSignatureDelegates; /** The array of delegates that notify that help has been shown */ var array > ShowGamerCardCompleteDelegates; /** Holds the list of delegates to fire when any login changes */ var array > LoginChangeDelegates; /** This is the list of requested delegates to fire when a login is cancelled */ var array > LoginCancelledDelegates; /** This is the list of delegates to fire when the current user changes */ var array > CurrentUserChangedDelegates; /** This is the list of requested delegates to fire when a login fails to process */ var array > LoginFailedDelegates; /** This is the list of requested delegates to fire when a login finishes*/ var array > OnLoginCompleteDelegates; /** This is the list of delegates to fire when a controller is connected/disconnected */ var array > ControllerChangeDelegates; /** This is the list of delegates to fire when a system user controller pairing event occurs */ var array > UserControllerPairingChangeDelegates; /** This is the list of delegates to fire when a connection status change occurs */ var array > ConnectionStatusChangeDelegates; /** This is the list of delegates to fire when the game gains or loses focus */ var array > FocusChangeDelegates; /** The array of delegates to notify that a privilege check has completed */ var array > PrivilegeCheckedDelegates; /** The array of delegates to notify that permissions have been checked on a per-user basis */ var array > PrivilegeCheckedForUsersDelegates; /** The array of delegates to notify when a local talker registration completes */ var array > RegisterLocalTalkerCompleteDelegates; /** The array of delegates to notify when a local talker unregistration completes */ var array > UnregisterLocalTalkerCompleteDelegates; /** The array of delegates to notify when a remote talker unregistration completes */ var array > UnregisterRemoteTalkerCompleteDelegates; /** The array of delegates to notify when the user account info has been retrieved */ var array > UserAccountInfoRetrievedDelegates; /** The array of delegates to notify when a remote talker is talking or not */ var array > RemoteTalkerStatusChangeDelegates; /** Keep track of what user/contexts have connected to RTA services */ var native Map{FString, UBOOL} UsersConnectedToRTA; /** The array of delegates to notify when a people picker operation is complete */ var array > PeoplePickerCompleteDelegates; var array > AccountPickerCompleteDelegates; /** The array of delegates for when trial mode status has been updated */ var array > TrialModeUpdateDelegates; /** Holds the login state, xuids for a player */ struct native CachedLoginState { /** The type of login for this player previously */ var const ELoginStatus LoginStatus; /** The xuid for the signed in player */ var const UniqueNetId PlayerXuid; }; /** The cached state of each player's login status */ var native const CachedLoginState LastLoginState[`MAX_NUM_PLAYERS]; /** Holds the avatar, xuids for player */ struct native CachedAvatarData { var const UniqueNetId PlayerXuid; var init array AvatarBytes; var float AvatarCreationTime; }; var native array CachedAvatars; /** Queued controller pairing changes to pass to the game for handling */ var native array QueuedControllerPairingChangeEvents {Windows::Xbox::Input::ControllerPairingChangedEventArgs}; /** Should we allowed user status processing to occur? When the app is suspended, we disable this processing until the app is activated again */ var native const bool bAllowUserStateProcessing; /** Keeps track if the app/game is focused or not */ var native const bool bIsAppInFocus; /** Keeps track if the app/game is in constrained mode */ var native const bool bIsAppConstrained; /** Keeps track if the app/game is suspended or not */ var native const bool bIsAppSuspended; /** Have we received a login state change message? */ var native const bool bLoginStatusUpdated; /** TRUE if the login status updated while suspended */ var const bool bLoginStatusUpdatedWhileSuspended; /** TRUE if people picker is active */ var const bool bPeoplePickerActive; /** Have we received a current user changed message? */ var native const bool bCurrentUserChanged; /** Have we received a connection status change message? */ var native const bool bConnectionStatusUpdated; /** Do we need to refresh Marketplace Inventory */ var native const bool bRefreshMarketplaceInventory; //@TW_BEGIN | Adam Massingale | KFII-37834 Added this bool to force inventory checks to playfab when store page is closed since //Microsoft's productpurchsed event unreliable /** Did we just see the marketplace ui? is only set briefly */ var native const bool bMarketplaceUIWasSeen; //@TW_END /** Are we connected to the LIVE network? */ var native const bool bConnectedToLIVENetwork; /** Have we received a user controller pairing change message? */ var native const bool bControllerPairingChanged; /** Have we received info about license updated */ var native const bool bLisenceInfoUpdated; /** Have we received a product purchased event? */ var const bool bProductPurchased; /** Were we activated on the previous frame? */ var native const bool bWasActivated; var const bool bAudioDeviceAdded; /** TRUE if the local user is currently being registered for voice */ var const bool bLocalUserRegisteringForVoice; /** TRUE if everybody should be muted */ var const bool PlayerMuteSetting; /** TRUE if we have already checked the cmdline for a cross game invite */ var const bool bProcessedLaunchGameInvite; /** The pending game invite command that comes in from the system. Used to store so we can process on the main thread */ var const string PendingGameInviteCmd; /** * Information about a remote talker's priority * * Zero means highest priority, < zero means muted */ struct native TalkerPriority { /** Holds the current priority for this talker */ var int CurrentPriority; /** Holds the last priority for this talker */ var int LastPriority; }; /** Information about a remote talker */ struct native DingoRemoteTalker extends RemoteTalker { /** Holds the priorities for each of the local players */ var TalkerPriority LocalPriorities[`MAX_NUM_PLAYERS]; var byte bReceivedAddMessage; /** TRUE if this talker is muted */ var bool bMuted; structcpptext { /** @return TRUE if any of the local players have this player muted, otherwise FALSE */ inline UBOOL IsLocallyMuted(void) { //for (INT Index = 0; Index < ARRAY_COUNT(LocalPriorities); Index++) //{ // if (LocalPriorities[Index].CurrentPriority == XHV_PLAYBACK_PRIORITY_NEVER) // { // return TRUE; // } //} return FALSE; } } }; /** Holds information about each of the local talkers */ var LocalTalker LocalTalkers[`MAX_NUM_PLAYERS]; /** Array of registered remote talkers */ var array RemoteTalkers; /** Array or Remote Talkers waiting for a local talker to be registered */ var native array PendingRemoteTalkerRegisters; /** The list of voice IDs that have been registered. MUST be thread safe */ var array VoiceRegisteredIds; /** Holds the list of delegates that are interested in receiving talking notifications */ var array > TalkingDelegates; /** Since the static array of dynamic array syntax appears to be broken */ struct native PerUserDelegateLists { /** This is the list of requested delegates to fire */ var array > LoginStatusChangeDelegates; /** The array of delegates for notifying when speech recognition has completed for a player */ var array > SpeechRecognitionDelegates; /** The array of delegates for notifying when an achievement write has completed */ var array > AchievementDelegates; /** The array of delegates for notifying when an achievements list read has completed */ var array > AchievementReadDelegates; /** The array of delegates for reading profile settings */ var array > ReadProfileSettingsDelegates; /** The array of delegates that notify write completion of profile data */ var array > WriteProfileSettingsDelegates; }; /** Per user array of array of delegates */ var PerUserDelegateLists PerUserDelegates[`MAX_NUM_PLAYERS]; /** The amount of time between voice notifications */ var config float VoiceNotificationDelta; /** Holds the cached state of the friends list for a single player */ struct native FriendsListCache { /** The list of returned friends */ var init array Friends; /** Indicates the state of the async read */ var EOnlineEnumerationReadState ReadState; /** The array of delegates that notify read completion of the friends list data */ var init array > ReadFriendsDelegates; /** The array of delegates that notify that the friends list has changed */ var init array > FriendsChangeDelegates; }; /** Cache of friends data per player */ var native map{QWORD,FFriendsListCache} FriendsCache; /** Cache of current presence data */ var native map{INT,FString} PresenceCache; /** Holds the cached achievements for a single player */ struct native CachedAchievements { /** The player these are for */ var native QWORD PlayerXUID; /** The title id that these are for */ var int TitleId; /** The list of achievements for this player and title */ var init array Achievements; /** Indicates the state of the async read */ var EOnlineEnumerationReadState ReadState; structcpptext { FCachedAchievements () : ReadState(OERS_NotStarted) {} } }; /** Holds the list of achievements that have been read for players */ var array AchievementsCache; var config string ProductID; var const string ServiceConfigId; var config string DefaultSessionKeyword; var config string DefaultHopperName; struct native CountryRegionMapping { /** The country code*/ var const int CountryCode; /** The matching region */ var const int MatchingRegion; }; /** The mappings from country to matchmaking region */ var const config array CountryMatchmakingRegionMappings; var native hatpointer ShowContentAsyncAction{Windows::Foundation::IAsyncAction}; /** The active license info for the app */ var native hatpointer ActiveLicenseInfo{Windows::ApplicationModel::Store::LicenseInformation}; /** * Called from engine start up code to allow the subsystem to initialize * * @return TRUE if the initialization was successful, FALSE otherwise */ native event bool Init(); /** * Called from the engine shutdown code to allow the subsystem to release any * resources that may have been allocated */ native event Exit(); /** * Delegate used in login notifications * * @param LocalUserNum the player that had the login change */ delegate OnLoginChange(byte LocalUserNum); /** * Delegate used to notify when a login request was cancelled by the user */ delegate OnLoginCancelled(); /** * Delegate called when the current user changes * * @param LocalUserNum - The index of the player who is now the current user * @param CurrentUser - The current user's Gamertag * @param LoggedInUser - The logged in user's Gamertag */ delegate OnCurrentUserChanged(byte LocalUserNum, string CurrentUser, string LoggedInUser); /** * Delegate used in mute list change notifications */ delegate OnMutingChange(); /** * Called when a player is talking either locally or remote. This will be called * once for each active talker each frame. * * @param Player the player that is talking * @param bIsTalking if true, the player is now talking, if false they are no longer talking */ delegate OnPlayerTalkingStateChange(UniqueNetId Player,bool bIsTalking); /** * Adds a talker delegate to the list of notifications * * @param TalkerDelegate the delegate to call when a player is talking */ function AddPlayerTalkingDelegate(delegate TalkerDelegate) { `AddUniqueItemToArray(RemoteTalkerStatusChangeDelegates, TalkerDelegate); } /** * Removes a talker delegate to the list of notifications * * @param TalkerDelegate the delegate to remove from the notification list */ function ClearPlayerTalkingDelegate(delegate TalkerDelegate) { RemoteTalkerStatusChangeDelegates.RemoveItem(TalkerDelegate); } /** * Delegate used in friends list change notifications */ delegate OnFriendsChange(); /** * Determine if the player is registered in the specified session * * @param PlayerId the player to check if in session or not * @return TRUE if the player is a registrant in the session */ native function bool IsPlayerInSession(name SessionName,UniqueNetId PlayerId); /** * Get a list of the net ids for the players currently registered on the session * * @param SessionName name of the session to find * @param OutRegisteredPlayers [out] list of player net ids in the session (empty if not found) */ function GetRegisteredPlayers(name SessionName,out array OutRegisteredPlayers) { local int Idx,PlayerIdx; OutRegisteredPlayers.Length = 0; for (Idx=0; Idx < Sessions.Length; Idx++) { // find session by name if (Sessions[Idx].SessionName == SessionName) { // return list of player ids currently registered on the session OutRegisteredPlayers.Length = Sessions[Idx].Registrants.Length; for (PlayerIdx=0; PlayerIdx < Sessions[Idx].Registrants.Length; PlayerIdx++) { OutRegisteredPlayers[PlayerIdx] = Sessions[Idx].Registrants[PlayerIdx].PlayerNetId; } break; } } } /** * Displays the UI that prompts the user for their login credentials. Each * platform handles the authentication of the user's data. * * @param bShowOnlineOnly whether to only display online enabled profiles or not * * @return TRUE if it was able to show the UI, FALSE if it failed */ native function bool ShowLoginUI(byte LocalUserNum, optional bool bShowOnlineOnly = false); delegate OnAccountPickerComplete( bool bForceLogin ); function AddAccountPickerCompleteDelegate(delegate InDelegate) { `AddUniqueItemToArray(AccountPickerCompleteDelegates, InDelegate); } function RemoveAccountPickerCompleteDelegate(delegate InDelegate) { AccountPickerCompleteDelegates.RemoveItem(InDelegate); } /** * Logs the player into the online service. If this fails, it generates a * OnLoginFailed notification * * @param LocalUserNum the controller number of the associated user * @param LoginName the unique identifier for the player * @param Password the password for this account * @param bWantsLocalOnly whether the player wants to sign in locally only or not * * @return true if the async call started ok, false otherwise */ native function bool Login(byte LocalUserNum,optional string LoginName="",optional string Password="",optional bool bWantsLocalOnly); delegate OnLoginComplete( byte LocalUserNum, bool bWasSuccessful, EOnlineServerConnectionStatus ErrorCode ); function AddLoginCompleteDelegate(byte LocalUserNum, delegate InDelegate) { `AddUniqueItemToArray(OnLoginCompleteDelegates, InDelegate); } function ClearLoginCompleteDelegate(byte LocalUserNum, delegate InDelegate) { OnLoginCompleteDelegates.RemoveItem(InDelegate); } /** * Logs the player into the online service using parameters passed on the * command line. Expects -Login= -Password=. If either * are missing, the function returns false and doesn't start the login * process * * @return true if the async call started ok, false otherwise */ function bool AutoLogin() { return false; } /** * Delegate used in notifying the UI/game that the manual login failed * * @param LocalUserNum the controller number of the associated user * @param ErrorCode the async error code that occurred */ delegate OnLoginFailed(byte LocalUserNum,EOnlineServerConnectionStatus ErrorCode); /** * Sets the delegate used to notify the gameplay code that a login failed * * @param LocalUserNum the controller number of the associated user * @param FailedDelegate the delegate to use for notifications */ function AddLoginFailedDelegate(byte LocalUserNum,delegate FailedDelegate) { `AddUniqueItemToArray(LoginFailedDelegates, FailedDelegate); } /** * Removes the specified delegate from the notification list * * @param LocalUserNum the controller number of the associated user * @param FailedDelegate the delegate to use for notifications */ function ClearLoginFailedDelegate(byte LocalUserNum,delegate FailedDelegate) { LoginFailedDelegates.RemoveItem(FailedDelegate); } /** * Signs the player out of the online service * * @param LocalUserNum the controller number of the associated user * * @return TRUE if the call succeeded, FALSE otherwise */ native function bool Logout(byte LocalUserNum); /** * Delegate used in notifying the UI/game that the manual logout completed * * @param bWasSuccessful whether the async call completed properly or not */ delegate OnLogoutCompleted(bool bWasSuccessful); /** * Sets the delegate used to notify the gameplay code that a logout completed * * @param LocalUserNum the controller number of the associated user * @param LogoutDelegate the delegate to use for notifications */ function AddLogoutCompletedDelegate(byte LocalUserNum,delegate LogoutDelegate); /** * Removes the specified delegate from the notification list * * @param LocalUserNum the controller number of the associated user * @param LogoutDelegate the delegate to use for notifications */ function ClearLogoutCompletedDelegate(byte LocalUserNum,delegate LogoutDelegate); /** * Delegate used to notify the game that the system has detected a user controller pairing change * NOTE: This will not change the engine's user controller pairing. To do that, the game must call PairUserAndControllerAtIndex(...) * in response to this delegate. * * @param NewLocalUserNum the index of the user now associated with the controller, INDEX_NONE if the controller no longer has a paired user * @param PreviousLocalUserNum the index of the user previously associated with the controller, INDEX_NONE if the controller was not previously paired */ delegate OnSystemUserControllerPairingChanged(INT NewLocalUserNum, INT PreviousLocalUserNum); /** * Sets the delegate used to notify the game that a system user controller pairing change has occurred * * @param PairingChangeDelegate the delegate to use for notification */ function AddSystemUserContrllerPairingChangedDelegate(delegate PairingChangeDelegate) { `AddUniqueItemToArray(UserControllerPairingChangeDelegates, PairingChangeDelegate); } /** * Removes the specified delegate from the notification list * * @param PairingChangeDelegate the delegate to remove from notification */ function ClearSystemUserContrllerPairingChangedDelegate(delegate PairingChangeDelegate) { UserControllerPairingChangeDelegates.RemoveItem(PairingChangeDelegate); } /** * Gets added into UserControllerPairingChangeDelegates * @param NewLocalUserNum the index of the user now associated with the controller, INDEX_NONE if the controller no longer has a paired user * @param PreviousLocalUserNum the index of the user previously associated with the controller, INDEX_NONE if the controller was not previously paired */ native function OnUserControllerPairingChanged(INT NewLocalUserNum, INT PreviousLocalUserNum); /** * Adds OnUserControllerPairingChanged to UserControllerPairingChangeDelegates */ event AddOnSystemUserControllerPairingChangedDelegate() { AddSystemUserContrllerPairingChangedDelegate(OnUserControllerPairingChanged); } /** * Clears OnUserControllerPairingChanged from UserControllerPairingChangeDelegates */ event ClearOnSystemUserControllerPairingChangedDelegate() { ClearSystemUserContrllerPairingChangedDelegate(OnUserControllerPairingChanged); } //@HSL_BEGIN - urias.rooney@hardsuitlabs.com – 12/08/16 - Dingo Party Interface /** * Called from native code to assign the lobby interface * * @param NewInterface The object to assign as providing the lobby interface * @return Returns True if the interface is valid, False otherwise */ event bool SetLobbyInterface( object NewInterface ) { LobbyInterface = KFOnlineLobbyDingo( NewInterface ); // Will return false if the interface isn't supported return LobbyInterface != none && LobbyInterface.Initialize(); } function TWOnlineLobby GetLobbyInterface() { return LobbyInterface; } //@HSL_END /** * Pairs a player and controller at a given index * * @param PlayerIndex the index of the desired player to pair * @param ControllerIndex the index of the desired controller to pair * @param PairIndex the index to pair at * * @return true if successfull, false otherwise */ native function bool PairUserAndControllerAtIndex(byte PlayerIndex, byte ControllerIndex, INT PairIndex); /** * Fetches the login status for a given player * * @param LocalUserNum the controller number of the associated user * * @return the enum value e e of their status */ native function ELoginStatus GetLoginStatus(byte LocalUserNum); /** * Gets the platform specific unique id for the specified player * * @param LocalUserNum the controller number of the associated user * @param PlayerId the byte array that will receive the id * * @return TRUE if the call succeeded, FALSE otherwise */ native function bool GetUniquePlayerId(byte LocalUserNum,out UniqueNetId PlayerId); /** * Gets the ControllerId for the platform specific unique Id * * @param PlayerId the platform specific unique Id * @param ControllerId the byte that will receive the controllerId * * @return TRUE if the call succeeded, FALSE otherwise */ native function bool GetControllerIdFromNetId(UniqueNetId PlayerId, out byte ControllerId); native function ManuallyActivateUser( const UniqueNetId ForUniqueId ); native function ActivateGamepad( const int GamepadIndex ); /** * Reads the player's nick name from the online service * * @param LocalUserNum the controller number of the associated user * * @return a string containing the players nick name */ native function string GetPlayerNickname(byte LocalUserNum); native function bool GetUserAccountInfo( byte LocalUserNum ); delegate OnUserAccountInfoRetrieved( bool bSuccessful, UserAccountInfo AccountInfo ); function AddGetUserAccountInfoDelegate( delegate InDelegate ) { `AddUniqueItemToArray(UserAccountInfoRetrievedDelegates, InDelegate); } function ClearGetUserAccountInfoDelegate( delegate InDelegate ) { UserAccountInfoRetrievedDelegates.RemoveItem(InDelegate); } /** * Delegate called when a user's privilege level has been checked * * @param LocalUserNum - the player that checked a privilege level * @param Privilege - the privilege that was checked * @param PrivilegeLevel - the privilege level for the given user for the requested Privilege * @param bDiffersFromHint - does the returned privilege level differ from the hint that was given earlier? */ delegate OnPrivilegeLevelChecked(byte LocalUserNum, EFeaturePrivilege Privilege, EFeaturePrivilegeLevel PrivilegeLevel, bool bDiffersFromHint); /** * Sets the delegate used to notify the gameplay code that a privilege check was completed * * @param PrivilegeDelegate the delegate to use for notifications */ function AddPrivilegeLevelCheckedDelegate(delegate PrivilegeDelegate) { `AddUniqueItemToArray(PrivilegeCheckedDelegates, PrivilegeDelegate); } /** * If player does not have a systems premium online services then use this to upsell them */ function UpsellPremiumOnlineService(); /** * Removes the specified delegate from the notification list * * @param PrivilegeDelegate the delegate to use for notifications */ function ClearPrivilegeLevelCheckedDelegate(delegate PrivilegeDelegate) { PrivilegeCheckedDelegates.RemoveItem(PrivilegeDelegate); } delegate OnPrivilegeCheckedForUsers(byte LocalUserNum, EFeaturePrivilege Privilege, array Results); function AddPrivilegeCheckedForUsersDelegate(delegate PrivilegeDelegate) { `AddUniqueItemToArray(PrivilegeCheckedForUsersDelegates, PrivilegeDelegate); } function ClearPrivilegeCheckedForUsersDelegate(delegate PrivilegeDelegate) { PrivilegeCheckedForUsersDelegates.RemoveItem(PrivilegeDelegate); } /** * Determines whether the player is allowed to play online * * @param LocalUserNum the controller number of the associated user * @param PrivilegeLevelHint upon completion, this parameter holds a hint about the expected value being retrieved asynchronously * @param bAttemptToResolve if the user does not have the proper privilege, should the system attempt to resolve the issue (eg via upsell) * @param Reason friendly display string explaining privilege failure * * @return true if the call succeeds, false otherwise */ native function bool CanPlayOnline(byte LocalUserNum, out EFeaturePrivilegeLevel PrivilegeLevelHint, optional bool bAttemptToResolve = false, optional string Reason = ""); /** * Determines whether the player is allowed to use text chat online * * @param LocalUserNum the controller number of the associated user * @param PrivilegeLevelHint upon completion, this parameter holds a hint about the expected value being retrieved asynchronously * @param bAttemptToResolve if the user does not have the proper privilege, should the system attempt to resolve the issue (eg via upsell) * @param Reason friendly display string explaining privilege failure * * @return true if the call succeeds, false otherwise */ native function bool CanCommunicateText(byte LocalUserNum, out EFeaturePrivilegeLevel PrivilegeLevelHint, optional bool bAttemptToResolve = false, optional string Reason = ""); /** * Determines whether the player is allowed to use video chat online * * @param LocalUserNum the controller number of the associated user * @param PrivilegeLevelHint upon completion, this parameter holds a hint about the expected value being retrieved asynchronously * @param bAttemptToResolve if the user does not have the proper privilege, should the system attempt to resolve the issue (eg via upsell) * @param Reason friendly display string explaining privilege failure * * @return true if the call succeeds, false otherwise */ native function bool CanCommunicateVideo(byte LocalUserNum, out EFeaturePrivilegeLevel PrivilegeLevelHint, optional bool bAttemptToResolve = false, optional string Reason = ""); /** * Determines whether the player is allowed to use voice chat online * * @param LocalUserNum the controller number of the associated user * @param PrivilegeLevelHint upon completion, this parameter holds a hint about the expected value being retrieved asynchronously * @param bAttemptToResolve if the user does not have the proper privilege, should the system attempt to resolve the issue (eg via upsell) * @param Reason friendly display string explaining privilege failure * * @return true if the call succeeds, false otherwise */ native function bool CanCommunicateVoice(byte LocalUserNum, out EFeaturePrivilegeLevel PrivilegeLevelHint, optional bool bAttemptToResolve = false, optional string Reason = ""); /** * Determines whether the player is allowed to use voice chat online with specific users * * @param LocalUserNum the controller number of the associated user * @param Users the list of users to check against * * @return true if the call succeeds, false otherwise */ native function bool CanCommunicateVoiceWithUsers(byte LocalUserNum, array Users); /** * Determines whether the player is allowed to share (upload/download) user created content * * @param LocalUserNum the controller number of the associated user * @param PrivilegeLevelHint upon completion, this parameter holds a hint about the expected value being retrieved asynchronously * @param bAttemptToResolve if the user does not have the proper privilege, should the system attempt to resolve the issue (eg via upsell) * @param Reason friendly display string explaining privilege failure * * @return true if the call succeeds, false otherwise */ native function bool CanShareUserCreatedContent(byte LocalUserNum, out EFeaturePrivilegeLevel PrivilegeLevelHint, optional bool bAttemptToResolve = false, optional string Reason = ""); /** * Determines whether the player is allowed to buy content online * * @param LocalUserNum the controller number of the associated user * @param PrivilegeLevelHint upon completion, this parameter holds a hint about the expected value being retrieved asynchronously * @param bAttemptToResolve if the user does not have the proper privilege, should the system attempt to resolve the issue (eg via upsell) * @param Reason friendly display string explaining privilege failure * * @return true if the call succeeds, false otherwise */ native function bool CanPurchaseContent(byte LocalUserNum, out EFeaturePrivilegeLevel PrivilegeLevelHint, optional bool bAttemptToResolve = false, optional string Reason = ""); /** * Determines whether the player is allowed to view other people's player profile * * @param LocalUserNum the controller number of the associated user * @param PrivilegeLevelHint upon completion, this parameter holds a hint about the expected value being retrieved asynchronously * @param bAttemptToResolve if the user does not have the proper privilege, should the system attempt to resolve the issue (eg via upsell) * @param Reason friendly display string explaining privilege failure * * @return true if the call succeeds, false otherwise */ native function bool CanViewPlayerProfiles(byte LocalUserNum, out EFeaturePrivilegeLevel PrivilegeLevelHint, optional bool bAttemptToResolve = false, optional string Reason = ""); /** * Determines whether the player is allowed to have their online presence * information shown to remote clients * * @param LocalUserNum the controller number of the associated user * @param PrivilegeLevelHint upon completion, this parameter holds a hint about the expected value being retrieved asynchronously * @param bAttemptToResolve if the user does not have the proper privilege, should the system attempt to resolve the issue (eg via upsell) * @param Reason friendly display string explaining privilege failure * *@return true if the call succeeds, false otherwise */ native function bool CanShowPresenceInformation(byte LocalUserNum, out EFeaturePrivilegeLevel PrivilegeLevelHint, optional bool bAttemptToResolve = false, optional string Reason = ""); /** * Determines whether the player is allowed to record DVR clips * * @param LocalUserNum the controller number of the associated user * @param PrivilegeLevelHint upon completion, this parameter holds a hint about the expected value being retrieved asynchronously * @param bAttemptToResolve if the user does not have the proper privilege, should the system attempt to resolve the issue (eg via upsell) * @param Reason friendly display string explaining privilege failure * *@return true if the call succeeds, false otherwise */ native function bool CanRecordDVRClips(byte LocalUserNum, out EFeaturePrivilegeLevel PrivilegeLevelHint, optional bool bAttemptToResolve = false, optional string Reason = ""); /** * Determines whether the player is allowed to use Cloud storage * * @param LocalUserNum the controller number of the associated user * @param PrivilegeLevelHint upon completion, this parameter holds a hint about the expected value being retrieved asynchronously * @param bAttemptToResolve if the user does not have the proper privilege, should the system attempt to resolve the issue (eg via upsell) * @param Reason friendly display string explaining privilege failure * *@return true if the call succeeds, false otherwise */ native function bool CanUseCloudStorage(byte LocalUserNum, out EFeaturePrivilegeLevel PrivilegeLevelHint, optional bool bAttemptToResolve = false, optional string Reason = ""); /** * Determines whether the player is allowed to access premium content * * @param LocalUserNum the controller number of the associated user * @param PrivilegeLevelHint upon completion, this parameter holds a hint about the expected value being retrieved asynchronously * @param bAttemptToResolve if the user does not have the proper privilege, should the system attempt to resolve the issue (eg via upsell) * @param Reason friendly display string explaining privilege failure * *@return true if the call succeeds, false otherwise */ native function bool CanAccessPremiumContent(byte LocalUserNum, out EFeaturePrivilegeLevel PrivilegeLevelHint, optional bool bAttemptToResolve = false, optional string Reason = ""); /** * Determines whether the player is allowed to access premium video content * * @param LocalUserNum the controller number of the associated user * @param PrivilegeLevelHint upon completion, this parameter holds a hint about the expected value being retrieved asynchronously * @param bAttemptToResolve if the user does not have the proper privilege, should the system attempt to resolve the issue (eg via upsell) * @param Reason friendly display string explaining privilege failure * *@return true if the call succeeds, false otherwise */ native function bool CanAccessPremiumVideoContent(byte LocalUserNum, out EFeaturePrivilegeLevel PrivilegeLevelHint, optional bool bAttemptToResolve = false, optional string Reason = ""); /** * Determines whether the player is allowed to browse the internet * * @param LocalUserNum the controller number of the associated user * @param PrivilegeLevelHint upon completion, this parameter holds a hint about the expected value being retrieved asynchronously * @param bAttemptToResolve if the user does not have the proper privilege, should the system attempt to resolve the issue (eg via upsell) * @param Reason friendly display string explaining privilege failure * *@return true if the call succeeds, false otherwise */ native function bool CanBrowseInternet(byte LocalUserNum, out EFeaturePrivilegeLevel PrivilegeLevelHint, optional bool bAttemptToResolve = false, optional string Reason = ""); /** * Determines whether the player is allowed to share content with a social network * * @param LocalUserNum the controller number of the associated user * @param PrivilegeLevelHint upon completion, this parameter holds a hint about the expected value being retrieved asynchronously * @param bAttemptToResolve if the user does not have the proper privilege, should the system attempt to resolve the issue (eg via upsell) * @param Reason friendly display string explaining privilege failure * *@return true if the call succeeds, false otherwise */ native function bool CanShareWithSocialNetwork(byte LocalUserNum, out EFeaturePrivilegeLevel PrivilegeLevelHint, optional bool bAttemptToResolve = false, optional string Reason = ""); /** * Determines whether the player is allowed to share kinect generated/recorded content with other users * * @param LocalUserNum the controller number of the associated user * @param PrivilegeLevelHint upon completion, this parameter holds a hint about the expected value being retrieved asynchronously * @param bAttemptToResolve if the user does not have the proper privilege, should the system attempt to resolve the issue (eg via upsell) * @param Reason friendly display string explaining privilege failure * *@return true if the call succeeds, false otherwise */ native function bool CanShareKinectContent(byte LocalUserNum, out EFeaturePrivilegeLevel PrivilegeLevelHint, optional bool bAttemptToResolve = false, optional string Reason = ""); /** * Determines whether the player is allowed to upload fitness data (eg height, weight, age, gender) * * @param LocalUserNum the controller number of the associated user * @param PrivilegeLevelHint upon completion, this parameter holds a hint about the expected value being retrieved asynchronously * @param bAttemptToResolve if the user does not have the proper privilege, should the system attempt to resolve the issue (eg via upsell) * @param Reason friendly display string explaining privilege failure * *@return true if the call succeeds, false otherwise */ native function bool CanUploadFitnessData(byte LocalUserNum, out EFeaturePrivilegeLevel PrivilegeLevelHint, optional bool bAttemptToResolve = false, optional string Reason = ""); /** * Checks that a unique player id is part of the specified user's friends list * * @param LocalUserNum the controller number of the associated user * @param PlayerId the id of the player being checked * * @return TRUE if a member of their friends list, FALSE otherwise */ native function bool IsFriend(byte LocalUserNum,UniqueNetId PlayerId); /** * Checks that whether a group of player ids are among the specified player's * friends * * @param LocalUserNum the controller number of the associated user * @param Query an array of players to check for being included on the friends list * * @return TRUE if the call succeeded, FALSE otherwise */ native function bool AreAnyFriends(byte LocalUserNum,out array Query); /** * Checks that a unique player id is on the specified user's mute list * * @param LocalUserNum the controller number of the associated user * @param PlayerId the id of the player being checked * * @return TRUE if the player should be muted, FALSE otherwise */ native function bool IsMuted(byte LocalUserNum,UniqueNetId PlayerId); /** * Displays the UI that shows a user's list of friends * * @param LocalUserNum the controller number of the associated user * * @return TRUE if it was able to show the UI, FALSE if it failed */ native function bool ShowFriendsUI(byte LocalUserNum); /** * Sets the delegate used to notify the gameplay code that a login changed * * @param LoginDelegate the delegate to use for notifications * @param LocalUserNum whether to watch for changes on a specific slot or all slots */ function AddLoginChangeDelegate(delegate LoginDelegate) { `AddUniqueItemToArray(LoginChangeDelegates, LoginDelegate); } /** * Removes the specified delegate from the notification list * * @param LoginDelegate the delegate to use for notifications * @param LocalUserNum whether to watch for changes on a specific slot or all slots */ function ClearLoginChangeDelegate(delegate LoginDelegate) { LoginChangeDelegates.RemoveItem(LoginDelegate); } /** * Adds a delegate to the list of delegates that are fired when a login is cancelled * * @param CancelledDelegate the delegate to add to the list */ function AddLoginCancelledDelegate(delegate CancelledDelegate) { `AddUniqueItemToArray(LoginCancelledDelegates, CancelledDelegate); } /** * Removes the specified delegate from the notification list * * @param CancelledDelegate the delegate to remove fromt he list */ function ClearLoginCancelledDelegate(delegate CancelledDelegate) { LoginCancelledDelegates.RemoveItem(CancelledDelegate); } /** * Adds a delegate to the list of delegates that are fired when the current user changes * * @param CurrentUserDelegate the delegate to add to the list */ function AddCurrentUserChangedDelegate(delegate CurrentUserDelegate) { `AddUniqueItemToArray(CurrentUserChangedDelegates, CurrentUserDelegate); } /** * Removes the specified delegate from the notification list * * @param CurrentUserDelegate the delegate to remove from the list */ function ClearCurrentUserChangedDelegate(delegate CurrentUserDelegate) { CurrentUserChangedDelegates.RemoveItem(CurrentUserDelegate); } /** * Determines whether the specified user is a local (non-online) login or not * * @param LocalUserNum the controller number of the associated user * * @return true if a local profile, false otherwise */ native function bool IsLocalLogin(byte LocalUserNum); /** * Determines whether the specified user is a guest login or not * * @param LocalUserNum the controller number of the associated user * * @return true if a guest, false otherwise */ native function bool IsGuestLogin(byte LocalUserNum); /** * Sets the delegate used to notify the gameplay code that a muting list changed * * @param MutingDelegate the delegate to use for notifications */ function AddMutingChangeDelegate(delegate MutingDelegate) { // Add this delegate to the array if not already present if (MutingChangeDelegates.Find(MutingDelegate) == INDEX_NONE) { MutingChangeDelegates[MutingChangeDelegates.Length] = MutingDelegate; } } /** * Searches the existing set of delegates for the one specified and removes it * from the list * * @param FriendsDelegate the delegate to use for notifications */ function ClearMutingChangeDelegate(delegate MutingDelegate) { local int RemoveIndex; RemoveIndex = MutingChangeDelegates.Find(MutingDelegate); // Remove this delegate from the array if found if (RemoveIndex != INDEX_NONE) { MutingChangeDelegates.Remove(RemoveIndex,1); } } /** * Sets the delegate used to notify the gameplay code that a friends list changed * * @param LocalUserNum the user to read the friends list of * @param FriendsDelegate the delegate to use for notifications */ function AddFriendsChangeDelegate(byte LocalUserNum,delegate FriendsDelegate) { if (LocalUserNum == 0) { // Add this delegate to the array if not already present if (FriendsChangeDelegates.Find(FriendsDelegate) == INDEX_NONE) { FriendsChangeDelegates[FriendsChangeDelegates.Length] = FriendsDelegate; } } else { `Warn("Invalid user index ("$LocalUserNum$") specified for ClearFriendsChangeDelegate()"); } } /** * Searches the existing set of delegates for the one specified and removes it * from the list * * @param LocalUserNum the user to read the friends list of * @param FriendsDelegate the delegate to use for notifications */ function ClearFriendsChangeDelegate(byte LocalUserNum,delegate FriendsDelegate) { local int RemoveIndex; // @igs(jtl) TODO, support > 1 user if (LocalUserNum == 0) { RemoveIndex = FriendsChangeDelegates.Find(FriendsDelegate); // Remove this delegate from the array if found if (RemoveIndex != INDEX_NONE) { FriendsChangeDelegates.Remove(RemoveIndex,1); } } else { `Warn("Invalid user index ("$LocalUserNum$") specified for ClearFriendsChangeDelegate()"); } } /** * Reads the online profile settings for a given user * * @param LocalUserNum the user that we are reading the data for * @param ProfileSettings the object to copy the results to and contains the list of items to read * * @return true if the call succeeds, false otherwise */ native function bool ReadProfileSettings(byte LocalUserNum,OnlineProfileSettings ProfileSettings); /** * Delegate used when the last read profile settings request has completed * * @param LocalUserNum the controller index of the player who's read just completed * @param bWasSuccessful true if the async action completed without error, false if there was an error */ delegate OnReadProfileSettingsComplete(byte LocalUserNum,bool bWasSuccessful); /** * Sets the delegate used to notify the gameplay code that the last read request has completed * * @param LocalUserNum which user to watch for read complete notifications * @param ReadProfileSettingsCompleteDelegate the delegate to use for notifications */ function AddReadProfileSettingsCompleteDelegate(byte LocalUserNum,delegate ReadProfileSettingsCompleteDelegate) { if (LocalUserNum >= 0 && LocalUserNum < ArrayCount(PerUserDelegates)) { `AddUniqueItemToArray(PerUserDelegates[LocalUserNum].ReadProfileSettingsDelegates, ReadProfileSettingsCompleteDelegate); } else { `Warn("Invalid user index ("$LocalUserNum$") specified for AddReadProfileSettingsCompleteDelegate()"); } } /** * Searches the existing set of delegates for the one specified and removes it * from the list * * @param LocalUserNum which user to watch for read complete notifications * @param ReadProfileSettingsCompleteDelegate the delegate to find and clear */ function ClearReadProfileSettingsCompleteDelegate(byte LocalUserNum,delegate ReadProfileSettingsCompleteDelegate) { if (LocalUserNum >= 0 && LocalUserNum < ArrayCount(PerUserDelegates)) { PerUserDelegates[LocalUserNum].ReadProfileSettingsDelegates.RemoveItem(ReadProfileSettingsCompleteDelegate); } else { `Warn("Invalid user index ("$LocalUserNum$") specified for ClearReadProfileSettingsCompleteDelegate()"); } } //@HSL_BEGIN - BWJ - 1-11-17 - Support for setting a cached profile function SetCachedProfile(OnlineProfileSettings InSettings) { CachedProfile = InSettings; } //@HSL_END /** * Returns the online profile settings for a given user * * @param LocalUserNum the user that we are reading the data for * * @return the profile settings object */ function OnlineProfileSettings GetProfileSettings(byte LocalUserNum) { return CachedProfile; } /** * Writes the online profile settings for a given user to the online data store * * @param LocalUserNum the user that we are writing the data for * @param ProfileSettings the list of settings to write out * * @return true if the call succeeds, false otherwise */ native function bool WriteProfileSettings(byte LocalUserNum,OnlineProfileSettings ProfileSettings); /** * Delegate used when the last write profile settings request has completed * * @param LocalUserNum the controller index of the player who's write just completed * @param bWasSuccessful true if the async action completed without error, false if there was an error */ delegate OnWriteProfileSettingsComplete(byte LocalUserNum,bool bWasSuccessful); /** * Sets the delegate used to notify the gameplay code that the last read request has completed * * @param LocalUserNum which user to watch for read complete notifications * @param ReadProfileSettingsCompleteDelegate the delegate to use for notifications */ function AddWriteProfileSettingsCompleteDelegate(byte LocalUserNum,delegate WriteProfileSettingsCompleteDelegate) { if (LocalUserNum >= 0 && LocalUserNum < ArrayCount(PerUserDelegates)) { `AddUniqueItemToArray(PerUserDelegates[LocalUserNum].WriteProfileSettingsDelegates, WriteProfileSettingsCompleteDelegate); } else { `Warn("Invalid user index ("$LocalUserNum$") specified for AddWriteProfileSettingsCompleteDelegate()"); } } /** * Searches the existing set of delegates for the one specified and removes it * from the list * * @param LocalUserNum which user to watch for read complete notifications * @param ReadProfileSettingsCompleteDelegate the delegate to find and clear */ function ClearWriteProfileSettingsCompleteDelegate(byte LocalUserNum,delegate WriteProfileSettingsCompleteDelegate) { if (LocalUserNum >= 0 && LocalUserNum < ArrayCount(PerUserDelegates)) { PerUserDelegates[LocalUserNum].WriteProfileSettingsDelegates.RemoveItem(WriteProfileSettingsCompleteDelegate); } else { `Warn("Invalid user index ("$LocalUserNum$") specified for ClearWriteProfileSettingsCompleteDelegate()"); } } /** * Delegate called when a player's status changes but doesn't change profiles * * @param NewStatus the new login status for the user * @param NewId the new id to associate with the user */ delegate OnLoginStatusChange(ELoginStatus NewStatus,UniqueNetId NewId); /** * Sets the delegate used to notify the gameplay code that a login status has changed * * @param LoginDelegate the delegate to use for notifications * @param LocalUserNum the player to watch login status changes for */ function AddLoginStatusChangeDelegate(delegate LoginStatusDelegate,byte LocalUserNum) { // Make sure the user is valid if (LocalUserNum >= 0 && LocalUserNum < ArrayCount(PerUserDelegates)) { `AddUniqueItemToArray(PerUserDelegates[LocalUserNum].LoginStatusChangeDelegates, LoginStatusDelegate); } else { `warn("Invalid index ("$LocalUserNum$") passed to AddLoginStatusChangeDelegate()"); } } /** * Removes the specified delegate from the notification list * * @param LoginDelegate the delegate to use for notifications * @param LocalUserNum the player to watch login status changes for */ function ClearLoginStatusChangeDelegate(delegate LoginStatusDelegate,byte LocalUserNum) { // Make sure the user is valid if (LocalUserNum >= 0 && LocalUserNum < ArrayCount(PerUserDelegates)) { PerUserDelegates[LocalUserNum].LoginStatusChangeDelegates.RemoveItem(LoginStatusDelegate); } else { `warn("Invalid index ("$LocalUserNum$") passed to ClearLoginStatusChangeDelegate()"); } } /** * Delegate used when the friends read request has completed * * @param bWasSuccessful true if the async action completed without error, false if there was an error */ delegate OnReadFriendsComplete(bool bWasSuccessful); /** * Starts an async task that retrieves the list of friends for the player from the * online service. The list can be retrieved in whole or in part. * * @param LocalUserNum the user to read the friends list of * @param Count the number of friends to read or zero for all * @param StartingAt the index of the friends list to start at (for pulling partial lists) * * @return true if the read request was issued successfully, false otherwise */ native function bool ReadFriendsList(byte LocalUserNum,optional int Count,optional int StartingAt); /** * Sets the delegate used to notify the gameplay code that the friends read request has completed * * @param LocalUserNum the user to read the friends list of * @param ReadFriendsCompleteDelegate the delegate to use for notifications */ native function AddReadFriendsCompleteDelegate(byte LocalUserNum,delegate ReadFriendsCompleteDelegate); /** * Searches the existing set of delegates for the one specified and removes it * from the list * * @param LocalUserNum which user to watch for read complete notifications * @param ReadFriendsCompleteDelegate the delegate to find and clear */ native function ClearReadFriendsCompleteDelegate(byte LocalUserNum,delegate ReadFriendsCompleteDelegate); /** * Copies the list of friends for the player previously retrieved from the online * service. The list can be retrieved in whole or in part. * * @param LocalUserNum the user to read the friends list of * @param Friends the out array that receives the copied data * @param Count the number of friends to read or zero for all * @param StartingAt the index of the friends list to start at (for pulling partial lists) * * @return OERS_Done if the read has completed, otherwise one of the other states */ native function EOnlineEnumerationReadState GetFriendsList(byte LocalUserNum,out array Friends,optional int Count,optional int StartingAt); /** * Registers the user as a talker * * @param LocalUserNum the local player index that is a talker * * @return TRUE if the call succeeded, FALSE otherwise */ native function bool RegisterLocalTalker(byte LocalUserNum, optional byte ChannelIndex); /** * Unregisters the user as a talker * * @param LocalUserNum the local player index to be removed * * @return TRUE if the call succeeded, FALSE otherwise */ native function bool UnregisterLocalTalker(byte LocalUserNum, optional byte ChannelIndex); /** * Determines whether a local talker is currently registered or not * * @return TRUE if the user is talking, FALSE otherwise */ native function bool IsLocalTalkerRegistered(byte LocalUserNum); /** * Determines if there are any local talkers that are currently registered */ native function bool AreAnyLocalTalkersRegistered(); /** * Recieves a reliable voice packet from server * * @param MessageType the type of message sent * @param Sender the Unique Net Id for the sender who sent the packet * @param InData the reliable voice data * */ native function ReceiveReliableVoicePacket( byte MessageType, UniqueNetId Sender, int Length, byte InData[60]); /** * Registers a remote player as a talker * * @param PlayerId the unique id of the remote player that is a talker * * @return TRUE if the call succeeded, FALSE otherwise */ native function bool RegisterRemoteTalker(UniqueNetId PlayerId); /** * Unregisters a remote player as a talker * * @param PlayerId the unique id of the remote player to be removed * * @return TRUE if the call succeeded, FALSE otherwise */ native function bool UnregisterRemoteTalker(UniqueNetId PlayerId); /** * Unregisters all remote players * * @return TRUE if the call succeeded, FALSE otherwise */ native function bool UnregisterAllRemoteTalkers(); /** * Determines if the specified player is actively talking into the mic * * @param LocalUserNum the local player index being queried * * @return TRUE if the player is talking, FALSE otherwise */ native function bool IsLocalPlayerTalking(byte LocalUserNum); /** * Determines if the specified remote player is actively talking into the mic * NOTE: Network latencies will make this not 100% accurate * * @param PlayerId the unique id of the remote player being queried * * @return TRUE if the player is talking, FALSE otherwise */ native function bool IsRemotePlayerTalking(UniqueNetId PlayerId); /** * Determines if the specified player has a headset connected * * @param LocalUserNum the local player index being queried * * @return TRUE if the player has a headset plugged in, FALSE otherwise */ native function bool IsHeadsetPresent(byte LocalUserNum); /** * Sets the relative priority for a remote talker. 0 is highest * * @param LocalUserNum the user that controls the relative priority * @param PlayerId the remote talker that is having their priority changed for * @param Priority the relative priority to use (0 highest, < 0 is muted) * * @return TRUE if the function succeeds, FALSE otherwise */ native function bool SetRemoteTalkerPriority(byte LocalUserNum,UniqueNetId PlayerId,int Priority); /** * Mutes all the players (including self) * * @param PlayerMuteSetting whether to mute all, mute bad rep, or mute nobody by default * * @return TRUE if the function succeeds, FALSE otherwise */ native function bool UpdatePlayerMuteSetting(bool NewPlayerMuteSetting); /** * Mutes a remote talker for the specified local player. NOTE: This only mutes them in the * game unless the bIsSystemWide flag is true, which attempts to mute them globally * * @param LocalUserNum the user that is muting the remote talker * @param PlayerId the remote talker that is being muted * @param bIsSystemWide whether to try to mute them globally or not * * @return TRUE if the function succeeds, FALSE otherwise */ native function bool MuteRemoteTalker(byte LocalUserNum,UniqueNetId PlayerId,optional bool bIsSystemWide); /** * Allows a remote talker to talk to the specified local player. NOTE: This only unmutes them in the * game unless the bIsSystemWide flag is true, which attempts to unmute them globally * * @param LocalUserNum the user that is allowing the remote talker to talk * @param PlayerId the remote talker that is being restored to talking * @param bIsSystemWide whether to try to unmute them globally or not * * @return TRUE if the function succeeds, FALSE otherwise */ native function bool UnmuteRemoteTalker(byte LocalUserNum,UniqueNetId PlayerId,optional bool bIsSystemWide); /** * Checks if a user is muted or not * * @param ConsoleId the remote talker that is being restored to talking * * @return TRUE if the player is muted, FALSE otherwise */ native function bool IsTalkerMuted(UniqueNetId ConsoleId); /** * Tells the voice layer that networked processing of the voice data is allowed * for the specified player. This allows for push-to-talk style voice communication * * @param LocalUserNum the local user to allow network transimission for */ native function StartNetworkedVoice(byte LocalUserNum); /** * Tells the voice layer to stop processing networked voice support for the * specified player. This allows for push-to-talk style voice communication * * @param LocalUserNum the local user to disallow network transimission for */ native function StopNetworkedVoice(byte LocalUserNum); /** * Tells the voice system to start tracking voice data for speech recognition * * @param LocalUserNum the local user to recognize voice data for * * @return true upon success, false otherwise */ function bool StartSpeechRecognition(byte LocalUserNum); /** * Tells the voice system to stop tracking voice data for speech recognition * * @param LocalUserNum the local user to recognize voice data for * * @return true upon success, false otherwise */ function bool StopSpeechRecognition(byte LocalUserNum); /** * Gets the results of the voice recognition * * @param LocalUserNum the local user to read the results of * @param Words the set of words that were recognized by the voice analyzer * * @return true upon success, false otherwise */ function bool GetRecognitionResults(byte LocalUserNum,out array Words); /** * Called when speech recognition for a given player has completed. The * consumer of the notification can call GetRecognitionResults() to get the * words that were recognized */ delegate OnRecognitionComplete(); /** * Sets the speech recognition notification callback to use for the specified user * * @param LocalUserNum the local user to receive notifications for * @param RecognitionDelegate the delegate to call when recognition is complete */ function AddRecognitionCompleteDelegate(byte LocalUserNum,delegate RecognitionDelegate) { if (SpeechRecognitionCompleteDelegates.Find(RecognitionDelegate) == INDEX_NONE) { SpeechRecognitionCompleteDelegates[SpeechRecognitionCompleteDelegates.Length] = RecognitionDelegate; } } /** * Clears the speech recognition notification callback to use for the specified user * * @param LocalUserNum the local user to receive notifications for * @param RecognitionDelegate the delegate to call when recognition is complete */ function ClearRecognitionCompleteDelegate(byte LocalUserNum,delegate RecognitionDelegate) { local int RemoveIndex; RemoveIndex = SpeechRecognitionCompleteDelegates.Find(RecognitionDelegate); if (RemoveIndex != INDEX_NONE) { SpeechRecognitionCompleteDelegates.Remove(RemoveIndex,1); } } /** * Changes the vocabulary id that is currently being used * * @param LocalUserNum the local user that is making the change * @param VocabularyId the new id to use * * @return true if successful, false otherwise */ function bool SelectVocabulary(byte LocalUserNum,int VocabularyId); /** * Changes the object that is in use to the one specified * * @param LocalUserNum the local user that is making the change * @param SpeechRecogObj the new object use * * @param true if successful, false otherwise */ function bool SetSpeechRecognitionObject(byte LocalUserNum,SpeechRecognition SpeechRecogObj); /** * Returns the name of the player for the specified index * * @param UserIndex the user to return the name of * * @return the name of the player at the specified index */ native function string GetPlayerNicknameFromIndex(int UserIndex); /** * Determines if the ethernet link is connected or not */ function bool HasLinkConnection() { return true; } /** * Delegate fired when the network link status changes * * @param bIsConnected whether the link is currently connected or not */ delegate OnLinkStatusChange(bool bIsConnected); /** * Adds the delegate used to notify the gameplay code that link status changed * * @param LinkStatusDelegate the delegate to use for notifications */ function AddLinkStatusChangeDelegate(delegate LinkStatusDelegate); /** * Removes the delegate from the notify list * * @param LinkStatusDelegate the delegate to remove */ function ClearLinkStatusChangeDelegate(delegate LinkStatusDelegate); /** * Delegate fired when an external UI display state changes (opening/closing) * * @param bIsOpening whether the external UI is opening or closing */ delegate OnExternalUIChange(bool bIsOpening); /** * Sets the delegate used to notify the gameplay code that external UI state * changed (opened/closed) * * @param ExternalUIDelegate the delegate to use for notifications */ function AddExternalUIChangeDelegate(delegate ExternalUIDelegate); /** * Removes the delegate from the notification list * * @param ExternalUIDelegate the delegate to remove */ function ClearExternalUIChangeDelegate(delegate ExternalUIDelegate); /** * Determines the current notification position setting */ function ENetworkNotificationPosition GetNetworkNotificationPosition(); /** * Sets a new position for the network notification icons/images * * @param NewPos the new location to use */ function SetNetworkNotificationPosition(ENetworkNotificationPosition NewPos); /** * Delegate fired when the controller becomes dis/connected * * @param ControllerId the id of the controller that changed connection state * @param bIsConnected whether the controller connected (true) or disconnected (false) * @param bPauseGame wheater the game should pause or not */ delegate OnControllerChange(int ControllerId,bool bIsConnected,bool bPauseGame); /** * Sets the delegate used to notify the gameplay code that the controller state changed * * @param ControllerChangeDelegate the delegate to use for notifications */ function AddControllerChangeDelegate(delegate ControllerChangeDelegate) { `AddUniqueItemToArray(ControllerChangeDelegates, ControllerChangeDelegate); } /** * Removes the delegate used to notify the gameplay code that the controller state changed * * @param ControllerChangeDelegate the delegate to remove */ function ClearControllerChangeDelegate(delegate ControllerChangeDelegate) { ControllerChangeDelegates.RemoveItem(ControllerChangeDelegate); } /** * Determines if the specified controller is connected or not * * @param ControllerId the controller to query * * @return true if connected, false otherwise */ native function bool IsControllerConnected(int ControllerId); /** * Retrieves the current connection status * * @return the current connection status */ native function EOnlineServerConnectionStatus GetCurrentConnectionStatus(); /** * Delegate fire when the online server connection state changes * * @param ConnectionStatus the new connection status */ delegate OnConnectionStatusChange(EOnlineServerConnectionStatus ConnectionStatus); /** * Adds the delegate to the list to be notified when the connection status changes * * @param ConnectionStatusDelegate the delegate to add */ function AddConnectionStatusChangeDelegate(delegate ConnectionStatusDelegate) { `AddUniqueItemToArray(ConnectionStatusChangeDelegates, ConnectionStatusDelegate); } /** * Removes the delegate from the notify list * * @param ConnectionStatusDelegate the delegate to remove */ function ClearConnectionStatusChangeDelegate(delegate ConnectionStatusDelegate) { ConnectionStatusChangeDelegates.RemoveItem(ConnectionStatusDelegate); } /** * Determines the NAT type the player is using */ function ENATType GetNATType() { return NAT_Open; } /** * Determine the locale (country code) for the player */ function int GetLocale() { return 0; } /** * Delegate fired when a storage device change is detected */ delegate OnStorageDeviceChange(); /** * Adds the delegate to the list to be notified when a storage device changes * * @param StorageDeviceChangeDelegate the delegate to add */ function AddStorageDeviceChangeDelegate(delegate StorageDeviceChangeDelegate); /** * Removes the delegate from the notify list * * @param ConnectionStatusDelegate the delegate to remove */ function ClearStorageDeviceChangeDelegate(delegate StorageDeviceChangeDelegate); /** * Delegate fired when the application's focus changes */ delegate OnFocusChange(bool bHasFocus); /** * Adds the delegate to the list to be notified when the application's focus changes * * @param FocusChangeDelegate the delegate to add */ function AddFocusChangeDelegate(delegate FocusChangeDelegate) { `AddUniqueItemToArray(FocusChangeDelegates, FocusChangeDelegate); } /** * Removes the delegate from the notify list * * @param FocusChangeDelegate the delegate to remove */ function ClearFocusChangeDelegate(delegate FocusChangeDelegate) { FocusChangeDelegates.RemoveItem(FocusChangeDelegate); } /** * Sets the online status information to use for the specified player. Used to * tell other players what the player is doing (playing, menus, away, etc.) * * @param LocalUserNum the controller number of the associated user * @param StatusString the status string to use * @param PlayerActive indicates if the player is active */ native function SetOnlineStatus(byte LocalUserNum,string StatusString,optional bool PlayerActive=true); /** * Called when keyboard input is completed. Sets the appropriate member variables and fires the OnKeyboardInputComplete delegates * * @param bWasCancelled - if the input was cancelled * @param InputResults - the results of the keyboard input */ native function KeyboardInputFinished(bool bWasCanceled, string InputResults); /** * Displays the UI that shows the keyboard for inputing text * * @param LocalUserNum the controller number of the associated user * @param TitleText the title to display to the user * @param DescriptionText the text telling the user what to input * @param bIsPassword whether the item being entered is a password or not * @param bShouldValidate whether to apply the string validation API after input or not * @param DefaultText the default string to display * @param MaxResultLength the maximum length string expected to be filled in * * @return TRUE if it was able to show the UI, FALSE if it failed */ native function bool ShowKeyboardUI(byte LocalUserNum,string TitleText,string DescriptionText, optional bool bIsPassword = false, optional bool bShouldValidate = true, optional string DefaultText, optional int MaxResultLength = 256); /** * Hides the UI that shows the keyboard for inputing text * * @param LocalUserNum the controller number of the associated user * * @return TRUE if it was able to hide the UI, FALSE if it failed */ native function bool HideKeyboardUI(byte LocalUserNum); /** * Delegate used when the keyboard input request has completed * * @param bWasSuccessful true if the async action completed without error, false if there was an error */ delegate OnKeyboardInputComplete(bool bWasSuccessful); /** * Adds the delegate used to notify the gameplay code that the user has completed * their keyboard input * * @param InputDelegate the delegate to use for notifications */ function AddKeyboardInputDoneDelegate(delegate InputDelegate) { if (KeyboardInputDelegates.Find(InputDelegate) == INDEX_NONE) { KeyboardInputDelegates.AddItem(InputDelegate); } } /** * Clears the delegate used to notify the gameplay code that the user has completed * their keyboard input * * @param InputDelegate the delegate to use for notifications */ function ClearKeyboardInputDoneDelegate(delegate InputDelegate) { local int RemoveIndex; RemoveIndex = KeyboardInputDelegates.Find(InputDelegate); if (RemoveIndex != INDEX_NONE) { KeyboardInputDelegates.Remove(RemoveIndex,1); } } /** * Fetches the results of the input * * @param bWasCancelled whether the user canceled the input or not * * @return the string entered by the user. Note the string will be empty if it * fails validation */ function string GetKeyboardInputResults(out byte bWasCanceled) { bWasCanceled = KeyboardInputWasCanceled; return KeyboardInputResults; } /** * Delegate used when the last write online player storage request has completed * * @param LocalUserNum the controller index of the player who's write just completed * @param bWasSuccessful true if the async action completed without error, false if there was an error */ delegate OnWritePlayerStorageComplete(byte LocalUserNum,bool bWasSuccessful); /** * Sets the delegate used to notify the gameplay code that the last write request has completed * * @param LocalUserNum which user to watch for write complete notifications * @param WritePlayerStorageCompleteDelegate the delegate to use for notifications */ function AddWritePlayerStorageCompleteDelegate(byte LocalUserNum,delegate WritePlayerStorageCompleteDelegate); /** * Delegate used when the last read of online player storage data request has completed * * @param NetId the net id for the user who's read just completed * @param bWasSuccessful true if the async action completed without error, false if there was an error */ delegate OnReadPlayerStorageForNetIdComplete(UniqueNetId NetId,bool bWasSuccessful); /** * Sets the delegate used to notify the gameplay code that the last read request has completed * * @param NetId the net id for the user to watch for read complete notifications * @param ReadPlayerStorageForNetIdCompleteDelegate the delegate to use for notifications */ function AddReadPlayerStorageForNetIdCompleteDelegate(UniqueNetId NetId,delegate ReadPlayerStorageForNetIdCompleteDelegate); /** * Reads the online player storage data for a given net user * * @param LocalUserNum the local user that is initiating the read * @param NetId the net user that we are reading the data for * @param PlayerStorage the object to copy the results to and contains the list of items to read * * @return true if the call succeeds, false otherwise */ function bool ReadPlayerStorageForNetId(byte LocalUserNum,UniqueNetId NetId,OnlinePlayerStorage PlayerStorage); /** * Searches the existing set of delegates for the one specified and removes it * from the list * * @param NetId the net id for the user to watch for read complete notifications * @param ReadPlayerStorageForNetIdCompleteDelegate the delegate to find and clear */ function ClearReadPlayerStorageForNetIdCompleteDelegate(UniqueNetId NetId,delegate ReadPlayerStorageForNetIdCompleteDelegate); /** * Reads the online player storage data for a given local user * If a valid storage device ID is specified then data is also read from that device and the newer version is kept. * * @param LocalUserNum the user that we are reading the data for * @param PlayerStorage the object to copy the results to and contains the list of items to read * @param DeviceId optional ID for connected device to read from. -1 for no device * * @return true if the call succeeds, false otherwise */ function bool ReadPlayerStorage(byte LocalUserNum,OnlinePlayerStorage PlayerStorage,optional int DeviceId = -1); /** * Delegate used when the last read of online player storage data request has completed * * @param LocalUserNum the controller index of the player who's read just completed * @param bWasSuccessful true if the async action completed without error, false if there was an error */ delegate OnReadPlayerStorageComplete(byte LocalUserNum,bool bWasSuccessful); /** * Sets the delegate used to notify the gameplay code that the last read request has completed * * @param LocalUserNum which user to watch for read complete notifications * @param ReadPlayerStorageCompleteDelegate the delegate to use for notifications */ function AddReadPlayerStorageCompleteDelegate(byte LocalUserNum,delegate ReadPlayerStorageCompleteDelegate); /** * Searches the existing set of delegates for the one specified and removes it * from the list * * @param LocalUserNum which user to watch for read complete notifications * @param ReadPlayerStorageCompleteDelegate the delegate to find and clear */ function ClearReadPlayerStorageCompleteDelegate(byte LocalUserNum,delegate ReadPlayerStorageCompleteDelegate); /** * Returns the online player storage for a given local user * * @param LocalUserNum the user that we are reading the data for * * @return the player storage object */ function OnlinePlayerStorage GetPlayerStorage(byte LocalUserNum) { return None; } /** * Writes the online player storage data for a given local user to the online data store * If a valid storage device ID is specified then data is also written to that device. * * @param LocalUserNum the user that we are writing the data for * @param PlayerStorage the object that contains the list of items to write * @param DeviceId optional ID for connected device to write to. -1 for no device * * @return true if the call succeeds, false otherwise */ function bool WritePlayerStorage(byte LocalUserNum,OnlinePlayerStorage PlayerStorage,optional int DeviceId = -1); /** * Clears the delegate used to notify the gameplay code that the last write request has completed * * @param LocalUserNum which user to watch for write complete notifications * @param WritePlayerStorageCompleteDelegate the delegate to use for notifications */ function ClearWritePlayerStorageCompleteDelegate(byte LocalUserNum,delegate WritePlayerStorageCompleteDelegate); /** * Sends a friend invite to the specified player * * @param LocalUserNum the user that is sending the invite * @param NewFriend the player to send the friend request to * @param Message the message to display to the recipient * * @return true if successful, false otherwise */ function bool AddFriend(byte LocalUserNum,UniqueNetId NewFriend,optional string Message); /** * Sends a friend invite to the specified player nick * * @param LocalUserNum the user that is sending the invite * @param FriendName the name of the player to send the invite to * @param Message the message to display to the recipient * * @return true if successful, false otherwise */ function bool AddFriendByName(byte LocalUserNum,string FriendName,optional string Message); /** * Called when a friend invite arrives for a local player * * @param bWasSuccessful true if successfully added, false if not found or failed */ delegate OnAddFriendByNameComplete(bool bWasSuccessful); /** * Adds the delegate used to notify the gameplay code that the user has received a friend invite * * @param LocalUserNum the user associated with the notification * @param FriendDelegate the delegate to use for notifications */ function AddAddFriendByNameCompleteDelegate(byte LocalUserNum,delegate FriendDelegate); /** * Removes the delegate specified from the list * * @param LocalUserNum the user associated with the notification * @param FriendDelegate the delegate to use for notifications */ function ClearAddFriendByNameCompleteDelegate(byte LocalUserNum,delegate FriendDelegate); /** * Used to accept a friend invite sent to this player * * @param LocalUserNum the user the invite is for * @param RequestingPlayer the player the invite is from * * @param true if successful, false otherwise */ function bool AcceptFriendInvite(byte LocalUserNum,UniqueNetId RequestingPlayer); /** * Used to deny a friend request sent to this player * * @param LocalUserNum the user the invite is for * @param RequestingPlayer the player the invite is from * * @param true if successful, false otherwise */ function bool DenyFriendInvite(byte LocalUserNum,UniqueNetId RequestingPlayer); /** * Removes a friend from the player's friend list * * @param LocalUserNum the user that is removing the friend * @param FormerFriend the player to remove from the friend list * * @return true if successful, false otherwise */ function bool RemoveFriend(byte LocalUserNum,UniqueNetId FormerFriend); /** * Called when a friend invite arrives for a local player * * @param LocalUserNum the user that is receiving the invite * @param RequestingPlayer the player sending the friend request * @param RequestingNick the nick of the player sending the friend request * @param Message the message to display to the recipient */ delegate OnFriendInviteReceived(byte LocalUserNum,UniqueNetId RequestingPlayer,string RequestingNick,string Message); /** * Adds the delegate used to notify the gameplay code that the user has received a friend invite * * @param LocalUserNum the user associated with the notification * @param InviteDelegate the delegate to use for notifications */ function AddFriendInviteReceivedDelegate(byte LocalUserNum,delegate InviteDelegate); /** * Removes the delegate specified from the list * * @param LocalUserNum the user associated with the notification * @param InviteDelegate the delegate to use for notifications */ function ClearFriendInviteReceivedDelegate(byte LocalUserNum,delegate InviteDelegate); /** * Sends a message to a friend * * @param LocalUserNum the user that is sending the message * @param Friend the player to send the message to * @param Message the message to display to the recipient * * @return true if successful, false otherwise */ function bool SendMessageToFriend(byte LocalUserNum,UniqueNetId Friend,string Message); /** * Sends an invitation to play in the player's current session * * @param LocalUserNum the user that is sending the invite * @param Friend the player to send the invite to * @param Text the text of the message for the invite * * @return true if successful, false otherwise */ native function bool SendGameInviteToFriend(byte LocalUserNum,name SessionName,UniqueNetId Friend,optional string Text); /** * Sends invitations to play in the player's current session * * @param LocalUserNum the user that is sending the invite * @param Friends the player to send the invite to * @param Text the text of the message for the invite * * @return true if successful, false otherwise */ native function bool SendGameInviteToFriends(byte LocalUserNum,name SessionName,array Friends,optional string Text); //@HSL_BEGIN - JRO - 6/10/2016 - Is this needed for Dingo? function bool SendGameInviteToUsers(string SessionId, name SessionName, array MembersToInvite, optional string Text); //@HSL_END /** * Called when the online system receives a game invite that needs handling * * @param LocalUserNum the user that is receiving the invite * @param InviterName the nick name of the person sending the invite */ delegate OnReceivedGameInvite(byte LocalUserNum,string InviterName); /** * Adds the delegate used to notify the gameplay code that the user has received a game invite * * @param LocalUserNum the user associated with the notification * @param ReceivedGameInviteDelegate the delegate to use for notifications */ function AddReceivedGameInviteDelegate(byte LocalUserNum,delegate ReceivedGameInviteDelegate); /** * Removes the delegate specified from the list * * @param LocalUserNum the user associated with the notification * @param ReceivedGameInviteDelegate the delegate to use for notifications */ function ClearReceivedGameInviteDelegate(byte LocalUserNum,delegate ReceivedGameInviteDelegate); delegate OnReceivedGameInviteById(byte LocalUserNum, UniqueNetId InviterId); function AddReceivedGameInviteByIdDelegate(byte LocalUserNum,delegate ReceivedGameInviteDelegate); function ClearReceivedGameInviteByIdDelegate(byte LocalUserNum,delegate ReceivedGameInviteDelegate); /** * Checks if the game was booted due to a game invite */ native function CheckForGameInviteOnLaunch(); /** * Allows the local player to follow a friend into a game * * @param LocalUserNum the local player wanting to join * @param Friend the player that is being followed * * @return true if the async call worked, false otherwise */ function bool JoinFriendGame(byte LocalUserNum,UniqueNetId Friend); /** * Called once the join task has completed * * @param bWasSuccessful the session was found and is joinable, false otherwise */ delegate OnJoinFriendGameComplete(bool bWasSuccessful); /** * Sets the delegate used to notify when the join friend is complete * * @param JoinFriendGameCompleteDelegate the delegate to use for notifications */ function AddJoinFriendGameCompleteDelegate(delegate JoinFriendGameCompleteDelegate); /** * Removes the delegate from the list of notifications * * @param JoinFriendGameCompleteDelegate the delegate to use for notifications */ function ClearJoinFriendGameCompleteDelegate(delegate JoinFriendGameCompleteDelegate); /** * Returns the list of messages for the specified player * * @param LocalUserNum the local player wanting to join * @param FriendMessages the set of messages cached locally for the player */ function GetFriendMessages(byte LocalUserNum,out array FriendMessages); /** * Called when a friend invite arrives for a local player * * @param LocalUserNum the user that is receiving the message * @param SendingPlayer the player sending the message * @param SendingNick the nick of the player sending the message * @param Message the message to display to the recipient */ delegate OnFriendMessageReceived(byte LocalUserNum,UniqueNetId SendingPlayer,string SendingNick,string Message); /** * Adds the delegate used to notify the gameplay code that the user has received a friend invite * * @param LocalUserNum the user associated with the notification * @param MessageDelegate the delegate to use for notifications */ function AddFriendMessageReceivedDelegate(byte LocalUserNum,delegate MessageDelegate); /** * Removes the delegate specified from the list * * @param LocalUserNum the user associated with the notification * @param MessageDelegate the delegate to use for notifications */ function ClearFriendMessageReceivedDelegate(byte LocalUserNum,delegate MessageDelegate); /** * Mutes all voice or all but friends * * @param LocalUserNum the local user that is making the change * @param bAllowFriends whether to mute everyone or allow friends */ function bool MuteAll(byte LocalUserNum,bool bAllowFriends); /** * Allows all speakers to send voice * * @param LocalUserNum the local user that is making the change */ function bool UnmuteAll(byte LocalUserNum); /** * Deletes a message from the list of messages * * @param LocalUserNum the user that is deleting the message * @param MessageIndex the index of the message to delete * * @return true if the message was deleted, false otherwise */ function bool DeleteMessage(byte LocalUserNum,int MessageIndex); /** * Unlocks the specified achievement for the specified user * * @param LocalUserNum the controller number of the associated user * @param AchievementId the id of the achievement to unlock * * @return TRUE if the call worked, FALSE otherwise */ function bool UnlockAchievement(byte LocalUserNum,int AchievementId,float PercentComplete=100.0); /** * Delegate used when the achievement unlocking has completed * * @param bWasSuccessful true if the async action completed without error, false if there was an error */ delegate OnUnlockAchievementComplete(bool bWasSuccessful); /** * Adds the delegate used to notify the gameplay code that the achievement unlocking has completed * * @param LocalUserNum which user to watch for read complete notifications * @param UnlockAchievementCompleteDelegate the delegate to use for notifications */ function AddUnlockAchievementCompleteDelegate(byte LocalUserNum,delegate UnlockAchievementCompleteDelegate); /** * Clears the delegate used to notify the gameplay code that the achievement unlocking has completed * * @param LocalUserNum which user to watch for read complete notifications * @param UnlockAchievementCompleteDelegate the delegate to use for notifications */ function ClearUnlockAchievementCompleteDelegate(byte LocalUserNum,delegate UnlockAchievementCompleteDelegate); /** * Starts an async read for the achievement list * * @param LocalUserNum the controller number of the associated user * @param TitleId the title id of the game the achievements are to be read for * @param bShouldReadText whether to fetch the text strings or not * @param bShouldReadImages whether to fetch the image data or not * * @return TRUE if the task starts, FALSE if it failed */ native function bool ReadAchievements(byte LocalUserNum,optional int TitleId = 0,optional bool bShouldReadText = true,optional bool bShouldReadImages = false); /** * Called when the async achievements read has completed * * @param TitleId the title id that the read was for (0 means current title) */ delegate OnReadAchievementsComplete(int TitleId); /** * Sets the delegate used to notify the gameplay code that the achievements read request has completed * * @param LocalUserNum the user to read the achievements list for * @param ReadAchievementsCompleteDelegate the delegate to use for notifications */ function AddReadAchievementsCompleteDelegate(byte LocalUserNum,delegate ReadAchievementsCompleteDelegate) { // Make sure the user is valid if (LocalUserNum >= 0 && LocalUserNum < ArrayCount(PerUserDelegates)) { if (PerUserDelegates[LocalUserNum].AchievementReadDelegates.Find(ReadAchievementsCompleteDelegate) == INDEX_NONE) { PerUserDelegates[LocalUserNum].AchievementReadDelegates.AddItem(ReadAchievementsCompleteDelegate); } } else { `warn("Invalid index ("$LocalUserNum$") passed to AddReadAchievementsComplete()"); } } /** * Clears the delegate used to notify the gameplay code that the achievements read request has completed * * @param LocalUserNum the user to read the achievements list for * @param ReadAchievementsCompleteDelegate the delegate to use for notifications */ function ClearReadAchievementsCompleteDelegate(byte LocalUserNum,delegate ReadAchievementsCompleteDelegate) { local int RemoveIndex; // Make sure the user is valid if (LocalUserNum >= 0 && LocalUserNum < ArrayCount(PerUserDelegates)) { RemoveIndex = PerUserDelegates[LocalUserNum].AchievementReadDelegates.Find(ReadAchievementsCompleteDelegate); if (RemoveIndex != INDEX_NONE) { PerUserDelegates[LocalUserNum].AchievementReadDelegates.Remove(RemoveIndex,1); } } else { `warn("Invalid index ("$LocalUserNum$") passed to ClearReadAchievementsCompleteDelegate()"); } } /** * Copies the list of achievements for the specified player and title id * * @param LocalUserNum the user to read the friends list of * @param Achievements the out array that receives the copied data * @param TitleId the title id of the game that these were read for * * @return OERS_Done if the read has completed, otherwise one of the other states */ native function EOnlineEnumerationReadState GetAchievements(byte LocalUserNum,out array Achievements,optional int TitleId = 0); /** * Clears the list of achievements for the specified player and title id * * @param LocalUserNum the user to read the friends list of * @param TitleId the title id of the game that these were read for */ native function ClearAchievements(byte LocalUserNum, optional int TitleId = 0); /** * Displays the UI for a products details * * @param LocalUserNum the local user viewing available content * @param ParentProductId the product ID of the parent product for which to show child content */ native function bool ShowProductDetailsUI(byte LocalUserNum, optional string ParentProductId = ProductId); /** * Displays the marketplace UI for content * * @param LocalUserNum the local user viewing available content * @param ParentProductType the type of the parent product specified by ParentProductId * (use constants defined in OnlineSubsyste.uc, generally this should be PIT_Game) * @param RequestedProductTypes the types of child products to show in the marketplace UI * (use constants defined in OnlineSubsyste.uc, generally this should be PIT_Durable | PIT_Consumable) * @param ParentProductId the product ID of the parent product for which to show child content */ native function bool ShowContentMarketplaceUI(byte LocalUserNum, int ParentProductType, int RequestedProductTypes, optional string ParentProductId = ProductId); /** * Displays the purchase UI for an offer * * @param LocalUserNum the local user viewing available content * @param Offer the offer that you want the purchase screen shown for */ native function bool ShowContentPurchaseUI(byte LocalUserNum, string Offer); /** * Displays the redeem code UI for content * * @param LocalUserNum the local user viewing available content * @param Offer the offer that you want the redeem code screen shown for */ native function bool ShowContentRedeemCodeUI(byte LocalUserNum, string Offer); /** * Close the current content UI * */ native function CloseCurrentContentUI(); /** * Displays the UI that allows a player to give feedback on another player * * @param LocalUserNum the controller number of the associated user * @param PlayerId the id of the player having feedback given for * * @return TRUE if it was able to show the UI, FALSE if it failed */ function bool ShowFeedbackUI(byte LocalUserNum,UniqueNetId PlayerId); /** * Displays the UI with Help documentation * * @param LocalUserNum the controller number of the associated user * * @return TRUE if the async show command is processing, FALSE if it failed to initialize */ native function bool ShowHelpUI(byte LocalUserNum); /** * Displays the UI with Help documentation for a given error the application has encountered * * @param ContextId application specific context within which the error occurred * @param ErrorString a string representation of the error * * @return TRUE if the async show command is processing, FALSE if it failed to initialize */ native function bool ShowHelpForErrorUI(string ContextId, string ErrorString); /** * Delegate used when a show help request has completed * * @param bWasSuccessful true if the async action completed without error, false if there was an error */ delegate OnShowHelpComplete(bool bWasSuccessful); /** * Adds the delegate used to notify the gameplay code that a show help request has finished * * @param ShowHelpDelegate the delegate to use for notifications */ function AddShowHelpCompleteDelegate(delegate HelpDelegate) { `AddUniqueItemToArray(ShowHelpDelegates, HelpDelegate); } /** * Removes the specified delegate from the list of callbacks * * @param ShowHelpDelegate the delegate to use for notifications */ function ClearShowHelpCompleteDelegate(delegate HelpDelegate) { ShowHelpDelegates.RemoveItem(HelpDelegate); } /** * Displays the UI with Help documentation * * @param URL link to show * * @return TRUE if the show command succeded, FALSE otherwise */ native function bool ShowVideo(string URL); // Overriden from Onlinesubsystem.uc native function OpenURL(string WebsiteLink); //@HSL_BEGIN_XBOX /** * Delegate called when OSS-side tokens are acquired */ delegate OnTokenAndSignatureRetrieved(byte LocalUserNum, string URL, string Token, string Signature); native function GetTokenAndSignatureForURL(byte LocalUserNum, string URL); function AddURLTokenRetrievedDelegate(byte LocalUserNum,delegate tsrDelegate) { `AddUniqueItemToArray(TokenAndSignatureDelegates, tsrDelegate); } function ClearURLTokenRetrievedDelegate(byte LocalUserNum, delegate tsrDelegate) { TokenAndSignatureDelegates.RemoveItem(tsrDelegate); } //@HSL_END_XBOX /** * Delegate used when a show gamer card request has completed */ delegate OnShowGamerCardComplete(bool bWasSuccessful); /** * Adds the delegate used to notify the gameplay code that a show gamer card request has finished * * @param ShowHelpDelegate the delegate to use for notifications */ function AddShowGamerCardCompleteDelegate(delegate GamerCardDelegate) { `AddUniqueItemToArray(ShowGamerCardCompleteDelegates, GamerCardDelegate); } /** * Removes the specified delegate from the list of callbacks * * @param ShowHelpDelegate the delegate to use for notifications */ function ClearShowGamerCardCompleteDelegate(delegate GamerCardDelegate) { ShowGamerCardCompleteDelegates.RemoveItem(GamerCardDelegate); } /** * Displays the gamer card UI for the specified player * * @param LocalUserNum the controller number of the associated user * @param PlayerId the id of the player to show the gamer card of * * @return TRUE if it was able to show the UI, FALSE if it failed */ native function bool ShowGamerCardUI(byte LocalUserNum,UniqueNetId PlayerId); /** * Displays the messages UI for a player * * @param LocalUserNum the controller number of the associated user * * @return TRUE if it was able to show the UI, FALSE if it failed */ function bool ShowMessagesUI(byte LocalUserNum); /** * Displays the achievements UI for a player * * @param LocalUserNum the controller number of the associated user * * @return TRUE if it was able to show the UI, FALSE if it failed */ function bool ShowAchievementsUI(byte LocalUserNum); /** * Displays the invite ui * * @param LocalUserNum the local user sending the invite * @param InviteText the string to prefill the UI with */ native function bool ShowInviteUI(byte LocalUserNum,optional string InviteText); /** * Displays the marketplace UI for memberships * * @param LocalUserNum the local user viewing available memberships */ function bool ShowMembershipMarketplaceUI(byte LocalUserNum); /** * Displays the UI that allows the user to choose which device to save content to * * @param LocalUserNum the controller number of the associated user * @param SizeNeeded the size of the data to be saved in bytes * @param bManageStorage whether to allow the user to manage their storage or not * * @return TRUE if it was able to show the UI, FALSE if it failed */ function bool ShowDeviceSelectionUI(byte LocalUserNum,int SizeNeeded,optional bool bManageStorage); /** * Delegate used when the device selection request has completed * * @param bWasSuccessful true if the async action completed without error, false if there was an error */ delegate OnDeviceSelectionComplete(bool bWasSuccessful); /** * Adds the delegate used to notify the gameplay code that the user has completed * their device selection * * @param DeviceDelegate the delegate to use for notifications */ function AddDeviceSelectionDoneDelegate(byte LocalUserNum,delegate DeviceDelegate); /** * Removes the specified delegate from the list of callbacks * * @param DeviceDelegate the delegate to use for notifications */ function ClearDeviceSelectionDoneDelegate(byte LocalUserNum,delegate DeviceDelegate); /** * Fetches the results of the device selection * * @param LocalUserNum the player to check the results for * @param DeviceName out param that gets a copy of the string * * @return the ID of the device that was selected * NOTE: Zero means the user hasn't selected one */ function int GetDeviceSelectionResults(byte LocalUserNum,out string DeviceName); /** * Checks the device id to determine if it is still valid (could be removed) and/or * if there is enough space on the specified device * * @param DeviceId the device to check * @param SizeNeeded the amount of space requested * * @return true if valid, false otherwise */ function bool IsDeviceValid(int DeviceId,optional int SizeNeeded); /** * Unlocks a gamer picture for the local user * * @param LocalUserNum the user to unlock the picture for * @param PictureId the id of the picture to unlock */ function bool UnlockGamerPicture(byte LocalUserNum,int PictureId); /** * Called when an external change to player profile data has occured */ delegate OnProfileDataChanged(); /** * Sets the delegate used to notify the gameplay code that someone has changed their profile data externally * * @param LocalUserNum the user the delegate is interested in * @param ProfileDataChangedDelegate the delegate to use for notifications */ function AddProfileDataChangedDelegate(byte LocalUserNum,delegate ProfileDataChangedDelegate); /** * Clears the delegate used to notify the gameplay code that someone has changed their profile data externally * * @param LocalUserNum the user the delegate is interested in * @param ProfileDataChangedDelegate the delegate to use for notifications */ function ClearProfileDataChangedDelegate(byte LocalUserNum,delegate ProfileDataChangedDelegate); /** * Displays the UI that shows a user's list of friends * * @param LocalUserNum the controller number of the associated user * @param PlayerId the id of the player being invited * * @return TRUE if it was able to show the UI, FALSE if it failed */ native function bool ShowFriendsInviteUI(byte LocalUserNum,UniqueNetId PlayerId); native function bool ShowPeoplePickerUI(byte LocalUserNum, array People, int MaxSelectable, optional string Text); delegate OnPeoplePickerComplete(bool bWasSuccessful, array PeoplePicked); function AddPeoplePickerCompleteDelegate(byte LocalUserNum,delegate InDelegate) { // Add this delegate to the array if not already present if (PeoplePickerCompleteDelegates.Find(InDelegate) == INDEX_NONE) { PeoplePickerCompleteDelegates[PeoplePickerCompleteDelegates.Length] = InDelegate; } } function ClearPeoplePickerCompleteDelegate(byte LocalUserNum,delegate InDelegate) { local int RemoveIndex; RemoveIndex = PeoplePickerCompleteDelegates.Find(InDelegate); // Remove this delegate from the array if found if (RemoveIndex != INDEX_NONE) { PeoplePickerCompleteDelegates.Remove(RemoveIndex,1); } } // Displays UI for sending data to other users using system-supplied UI function bool ShowDataSendingUI(byte LocalUserNum, string Message, string DataName, string DataDescription, array Data, int MaxSelectableUsers); delegate OnAcceptReceivedData(string Data); function AddAcceptReceivedDataDelegate(byte LocalUserNum, delegate InDelegate); function ClearAcceptReceivedDataDelegate(byte LocalUserNum, delegate InDelegate); /** * Displays the UI that shows the player list * * @param LocalUserNum the controller number of the associated user * * @return TRUE if it was able to show the UI, FALSE if it failed */ function bool ShowPlayersUI(byte LocalUserNum); /** * Shows a custom players UI for the specified list of players * * @param LocalUserNum the controller number of the associated user * @param Players the list of players to show in the custom UI * @param Title the title to use for the UI * @param Description the text to show at the top of the UI * * @return TRUE if it was able to show the UI, FALSE if it failed */ function bool ShowCustomPlayersUI(byte LocalUserNum,const out array Players,string Title,string Description); //@HSL_BEGIN_XBOX /** * Shows a custom players UI for the specified list of players * * @param LocalUserNum the controller number of the associated user * @param Players the list of players to show in the custom UI * @param Title the title to use for the UI * @param Description the text to show at the top of the UI * * @return TRUE if it was able to show the UI, FALSE if it failed */ function bool RecordPlayersRecentlyMet( byte LocalUserNum, out array Players, string GameDescription ); //@HSL_END_XBOX /** * Unlocks an avatar award for the local user * * @param LocalUserNum the user to unlock the avatar item for * @param AvatarItemId the id of the avatar item to unlock */ function bool UnlockAvatarAward(byte LocalUserNum,int AvatarItemId); /** * Reads the online profile settings for a given user and title id * * @param LocalUserNum the user that we are reading the data for * @param TitleId the title that the profile settings are being read for * @param ProfileSettings the object to copy the results to and contains the list of items to read * * @return true if the call succeeds, false otherwise */ function bool ReadCrossTitleProfileSettings(byte LocalUserNum,int TitleId,OnlineProfileSettings ProfileSettings); /** * Delegate used when the last read profile settings request has completed * * @param LocalUserNum the controller index of the player who's read just completed * @param TitleId the title that the profile settings were read for * @param bWasSuccessful true if the async action completed without error, false if there was an error */ delegate OnReadCrossTitleProfileSettingsComplete(byte LocalUserNum,int TitleId,bool bWasSuccessful); /** * Sets the delegate used to notify the gameplay code that the last read request has completed * * @param LocalUserNum which user to watch for read complete notifications * @param ReadProfileSettingsCompleteDelegate the delegate to use for notifications */ function AddReadCrossTitleProfileSettingsCompleteDelegate(byte LocalUserNum,delegate ReadProfileSettingsCompleteDelegate); /** * Searches the existing set of delegates for the one specified and removes it * from the list * * @param LocalUserNum which user to watch for read complete notifications * @param ReadProfileSettingsCompleteDelegate the delegate to find and clear */ function ClearReadCrossTitleProfileSettingsCompleteDelegate(byte LocalUserNum,delegate ReadProfileSettingsCompleteDelegate); /** * Returns the online profile settings for a given user and title id * * @param LocalUserNum the user that we are reading the data for * @param TitleId the title that the profile settings are being read for * * @return the profile settings object */ function OnlineProfileSettings GetCrossTitleProfileSettings(byte LocalUserNum,int TitleId); /** * Removes a cached entry of a profile for the specified title id * * @param LocalUserNum the user that we are reading the data for * @param TitleId the title that the profile settings are being read for */ function ClearCrossTitleProfileSettings(byte LocalUserNum,int TitleId); /** * Shows a dialog with the message pre-populated in it * * @param LocalUserNum the user sending the message * @param Recipients the list of people to send the message to * @param MessageTitle the title of the message being sent * @param NonEditableMessage the portion of the message that the user cannot edit * @param EditableMessage the portion of the message the user can edit * * @return true if successful, false otherwise */ function bool ShowCustomMessageUI(byte LocalUserNum,const out array Recipients,string MessageTitle,string NonEditableMessage,optional string EditableMessage); /** * Shows a system dialog with the given error code and context * * @param ErrorCode the error code to display * @param ErrorContext the error context to display * * @return true of successful, false otherwise */ native function bool ShowSystemErrorUI(int ErrorCode, string ErrorContext); /** * Shows a customized system dialog with the given error code, context, title and content * * @param ErrorCode the error code to display * @param ErrorContext the error context to display * @param DialogTitle the title of the dialog * @param DialogContent the content of the dialog * * @return true of successful, false otherwise */ native function bool ShowCustomErrorUI(int ErrorCode, string ErrorContext, string DialogTitle, string DialogContent); /** * Look up a player's nickname from their net ID * * @param InPlayerId the player ID for which to retrieve the nickname * @param OutPlayerNickname the nickname for the player with the given ID * * @return true if successful, false otherwise */ native function bool GetPlayerNicknameForPlayerId(UniqueNetId InPlayerId, out string OutPlayerNickname); /** * Look up a player's net ID from their nickname * * @param InPlayerNickname the nickname to look up a player ID for * @param OutPlayerId the player ID for the player with the given nickname * * @return true if successful, false otherwise */ native function bool GetPlayerIDForPlayerNickname(string InPlayerNickname, out UniqueNetId OutPlayerId); /** * Caches the controller that the player logged in with */ native function CacheLoggedInGamepad(); /** * Asynchronously retrieve a set of OnlineProfiles for a list of Player IDs * * @param PlayerIDs the list of Player IDs for which to retrieve OnlineProfiles * * @return true if the async action began successfully, false otherwise */ native function bool ReadOnlineProfilesForPlayers(array PlayerIDs); /** * Delegate fired when an OnlineProfile read completes * * @param bWasSuccessful true if the async action completed without error, false if there was an error * @param PlayerIDs the list of Player IDs that the request originated with * @param OnlineProfiles the list of OnlineProfiles for the requested Player IDs */ delegate OnReadOnlineProfilesComplete(bool bWasSuccessful, array PlayerIDs, array OnlineProfiles); /** * Adds the delegate used to notify the gameplay code that an OnlineProfile read has completed * * @param ReadOnlineProfileDelegate the delegate to use for notifications */ function AddReadOnlineProfilesCompleteDelegate(delegate ReadOnlineProfileDelegate) { `AddUniqueItemToArray(ReadOnlineProfileDelegates, ReadOnlineProfileDelegate); } /** * Removes the specified delegate from the list of callbacks * * @param ReadOnlineProfileDelegate the delegate to use for notifications */ function ClearReadOnlineProfilesCompleteDelegate(delegate ReadOnlineProfileDelegate) { ReadOnlineProfileDelegates.RemoveItem(ReadOnlineProfileDelegate); } /** * Delegate used when registration of a local talker completes * * @param LocalUserNum the controller index of the player who is registered as a local talker * @param bWasSuccessful true if the async action completed without error, false if there was an error */ delegate OnRegisterLocalTalkerComplete(byte LocalUserNum,bool bWasSuccessful); /** * Sets the delegate used to notify the gameplay code that the local talker registration has completed * * @param RegisterLocalTalkerCompleteDelegate the delegate to use for notifications */ function AddRegisterLocalTalkerCompleteDelegate(delegate RegisterLocalTalkerCompleteDelegate) { `AddUniqueItemToArray(RegisterLocalTalkerCompleteDelegates, RegisterLocalTalkerCompleteDelegate); } /** * Searches the existing set of delegates for the one specified and removes it * from the list * * @param RegisterLocalTalkerCompleteDelegate the delegate to find and clear */ function ClearRegisterLocalTalkerCompleteDelegate(delegate RegisterLocalTalkerCompleteDelegate) { RegisterLocalTalkerCompleteDelegates.RemoveItem(RegisterLocalTalkerCompleteDelegate); } /** * Delegate used when unregistration of a local talker completes * * @param LocalUserNum the controller index of the player who is unregistered as a local talker * @param bWasSuccessful true if the async action completed without error, false if there was an error */ delegate OnUnregisterLocalTalkerComplete(byte LocalUserNum,bool bWasSuccessful); /** * Sets the delegate used to notify the gameplay code that the local talker unregistration has completed * * @param UnregisterLocalTalkerCompleteDelegate the delegate to use for notifications */ function AddUnregisterLocalTalkerCompleteDelegate(delegate UnregisterLocalTalkerCompleteDelegate) { `AddUniqueItemToArray(UnregisterLocalTalkerCompleteDelegates, UnregisterLocalTalkerCompleteDelegate); } /** * Searches the existing set of delegates for the one specified and removes it * from the list * * @param UnregisterLocalTalkerCompleteDelegate the delegate to find and clear */ function ClearUnregisterLocalTalkerCompleteDelegate(delegate UnregisterLocalTalkerCompleteDelegate) { UnregisterLocalTalkerCompleteDelegates.RemoveItem(UnregisterLocalTalkerCompleteDelegate); } /** * Delegate used when unregistration of a remote talker completes * * @param netId ofthe player who is unregistered as a remote talker * @param bWasSuccessful true if the async action completed without error, false if there was an error */ delegate OnUnregisterRemoteTalkerComplete(UniqueNetId RemoteNetId,bool bWasSuccessful); /** * Sets the delegate used to notify the gameplay code that the remote talker unregistration has completed * * @param UnregisterRemoteTalkerCompleteDelegate the delegate to use for notifications */ function AddUnregisterRemoteTalkerCompleteDelegate(delegate UnregisterRemoteTalkerCompleteDelegate) { `AddUniqueItemToArray(UnregisterRemoteTalkerCompleteDelegates, UnregisterRemoteTalkerCompleteDelegate); } /** * Searches the existing set of delegates for the one specified and removes it * from the list * * @param UnregisterRemoteTalkerCompleteDelegate the delegate to find and clear */ function ClearUnregisterRemoteTalkerCompleteDelegate(delegate UnregisterRemoteTalkerCompleteDelegate) { UnregisterRemoteTalkerCompleteDelegates.RemoveItem(UnregisterRemoteTalkerCompleteDelegate); } /** * Delegate used when unregistration of a remote talker completes * * @param netId ofthe player who is currently talking * @param bWasSuccessful true if the async action completed without error, false if there was an error */ delegate OnRemoteTalkerStatusChange(UniqueNetId RemoteNetId, bool bIsTalking); /** * Sets the delegate used to notify the gameplay code that the remote talker unregistration has completed * * @param RemoteTalkerStatusChange the delegate to use for notifications */ function AddRemoteTalkerStatusChangeDelegate(delegate RemoteTalkerStatusChange) { `AddUniqueItemToArray(RemoteTalkerStatusChangeDelegates, RemoteTalkerStatusChange); } /** * Searches the existing set of delegates for the one specified and removes it * from the list * * @param RemoteTalkerStatusChange the delegate to find and clear */ function ClearRemoteTalkerStatusChangeDelegate(delegate RemoteTalkerStatusChange) { RemoteTalkerStatusChangeDelegates.RemoveItem(RemoteTalkerStatusChange); } /** * Sends reputation feedback * * @param SenderLocalUserNum The user that's sending the reputation feedback * @param ReputeeNetId The console id of the player getting reported * @param FeedbackType What type of feedback to send * @param ReportText Report message associated with the report */ native function bool SendReputationFeedback(byte SenderLocalUserNum, UniqueNetId ReputeeNetId, EReputationFeedbackType FeedbackType, string ReportText); delegate OnTrialModeUpdate( bool bTrialActive ); function AddOnTrialModeUpdateDelegate( delegate InDelegate ) { `AddUniqueItemToArray(TrialModeUpdateDelegates, InDelegate); } function ClearOnTrialModeUpdatedDelegate( delegate InDelegate ) { TrialModeUpdateDelegates.RemoveItem(InDelegate); } //@HSL_BEGIN_PS4 function PostActivityFeedSample(int Foo, string Bar); function bool ShowGamerCardUIByUsername(byte LocalUserNum, string UserName); //@HSL_END_PS4 //@HSL_BEGIN_PS4 function StartRealtimeMultiplay(); function StopRealtimeMultiplay(); //@HSL_END_PS4 /** * Notifies the interested party that the micro transaction purchase was completed(success or fail) * * @param bWasSuccessful true if the async action completed without error, false if there was an error */ delegate OnReadMicroTransactionStatusComplete(bool bAuthorized, int iAppId, QWORD qOrderId); /** * Adds the delegate to a list used to notify the gameplay code that the stats read has completed * * @param OnReadMicroTransactionStatusComplete the delegate to use for notifications */ function AddReadMicroTransactionStatusCompleteDelegate(delegate ReadMicroTransactionStatusCompleteDelegate); /** * Removes the delegate from the notify list * * @param ReadMicroTransactionStatusCompleteDelegate the delegate to use for notifications */ function ClearReadMicroTransactionStatusCompleteDelegate(delegate ReadMicroTransactionStatusCompleteDelegate); delegate OnIsConnectedToOnlineServiceChecked(bool bIsConnected); function AddIsConnectedToOnlineServiceCheckedDelegate(delegate InDelegate); function ClearIsConnectedToOnlineServiceCheckedDelegate(delegate InDelegate); function IsConnectedToOnlineService(); /** * Get safe frame settings * * @param fSafeFrame safe frame value */ function SetSystemSafeFrame( float fSafeFrame ); function float GetSystemSafeFrame( ); /** * Starts an asynchronous request for a user's avatar. * * @param LocalUserNum The controller number of the associated user making the request. * @param PlayerNetId The network id of the player who's avatar is requested. * @param Size The desired resolution of the avatar (Size x Size). Final texture size may vary. * @param Obsolete Obsolete */ native function ReadOnlineAvatar(const UniqueNetId PlayerNetId, int Size); //@HSL_END //@HSL_BEGIN - JRO - 5/17/2016 - PS4 Activity Feeds function bool AddInGamePost( int InPostID, optional string InPostParam ); // Unused... function PostActivityFeedBossKill(string BossName, string ClassName, string MapName); function PostActivityFeedTeamAward(string AwardName); function PostActivityFeedPerkLevelUp(string PerkClassName, int Level); //@HSL_END //@HSL_BEGIN - BWJ - 5-26-16 - Support for reading store data function ReadStoreData(); delegate OnStoreDataRead( bool bSuccessful ); function AddStoreDataReadCompleteDelegate( delegate InDelegate ); function ClearStoreDataReadCompleteDelegate( delegate InDelegate ); function ReadEntitlements(); delegate OnEntitlementsRead( bool bSuccess ); function AddOnEntitlementsReadDelegate( delegate InDelegate ); function ClearOnEntitlementsReadDelegate( delegate InDelegate ); //@HSL_END //@HSL_BEGIN - BWJ - 12-1-16 - Support for save data private event StartSaveDataRead( byte LocalUserNum, string FileName ) { ContentInterfaceImpl.AddReadSaveGameDataComplete(LocalUserNum, OnReadProfileSaveData); ContentInterfaceImpl.ReadSaveGameData(LocalUserNum, 0, "", "", FileName); } private function OnReadProfileSaveData(bool bWasSuccessful,byte LocalUserNum,int DeviceId,string FriendlyName,string FileName,string SaveFileName) { ContentInterfaceImpl.ClearReadSaveGameDataComplete( LocalUserNum, OnReadProfileSaveData ); HandleReadProfileSaveDataComplete( bWasSuccessful, LocalUserNum, SaveFileName ); } private native function HandleReadProfileSaveDataComplete( bool bWasSuccessful, byte LocalUserNum, string SaveFileName ); private event WriteProfileData(byte LocalUserNum, string FileName, const out array ProfileData) { ContentInterfaceImpl.AddWriteSaveGameDataComplete(LocalUserNum, OnWriteProfileSaveData); ContentInterfaceImpl.WriteSaveGameData(LocalUserNum, 0, "", "", FileName, ProfileData); } // Callback for profile writing complete private function OnWriteProfileSaveData(bool bWasSuccessful,byte LocalUserNum,int DeviceId,string FriendlyName,string FileName,string SaveFileName) { ContentInterfaceImpl.ClearWriteSaveGameDataComplete(LocalUserNum, OnWriteProfileSaveData); HandleWriteProfileSaveDataComplete(bWasSuccessful, LocalUserNum, SaveFileName); } // Fire off write profile delegates in native private native function HandleWriteProfileSaveDataComplete(bool bWasSuccessful, byte LocalUserNum, string SaveFileName); //@HSL_END //@HSL BEGIN - BWJ - 2-27-17 - Support for detecting default region native function StartRegionPingAndSelectDefaultRegion(delegate Callback); //@HSL_END defaultproperties { bLoginStatusUpdated=FALSE bCurrentUserChanged=FALSE bConnectionStatusUpdated=FALSE bRefreshMarketplaceInventory=FALSE bConnectedToLIVENetwork=FALSE bControllerPairingChanged=FALSE bIsAppInFocus=TRUE bIsAppSuspended =FALSE bIsAppConstrained=FALSE ConnectionTimeUpdateDelta=1.0f }