1
0
KF2-Dev-Scripts/Engine/Classes/UIDataStore_OnlinePlayerData.uc
2020-12-13 18:01:13 +03:00

326 lines
10 KiB
Ucode

/**
* Copyright 1998-2013 Epic Games, Inc. All Rights Reserved.
*/
/**
* This class is responsible for retrieving the friends list from the online
* subsystem and populating the UI with that data.
*/
class UIDataStore_OnlinePlayerData extends UIDataStore_Remote
native(inherit)
config(Engine)
transient;
/** Provides access to the player's online friends list */
var UIDataProvider_OnlineFriends FriendsProvider;
/** Holds the player controller that this data store is associated with */
var int PlayerControllerId;
/** The online nick name for the player */
var string PlayerNick;
/** The name of the OnlineProfileSettings class to use as the default */
var config string ProfileSettingsClassName;
/** The class that should be created when a player is bound to this data store */
var class<OnlineProfileSettings> ProfileSettingsClass;
/** Provides access to the player's profile data */
var UIDataProvider_OnlineProfileSettings ProfileProvider;
/** The name of the data provider class to use as the default for player storage data */
var config string ProfileProviderClassName;
/** The class that should be created when a player is bound to this data store */
var class<UIDataProvider_OnlineProfileSettings> ProfileProviderClass;
/** The name of the OnlinePlayerStorage class to use as the default */
var config string PlayerStorageClassName;
/** The class that should be created when a player is bound to this data store */
var class<OnlinePlayerStorage> PlayerStorageClass;
/** Provides access to the player's storage data */
var UIDataProvider_OnlinePlayerStorage StorageProvider;
/** The name of the data provider class to use as the default for player storage data */
var config string StorageProviderClassName;
/** The class that should be created when a player is bound to this data store */
var class<UIDataProvider_OnlinePlayerStorage> StorageProviderClass;
/** Provides access to any friend messages */
var UIDataProvider_OnlineFriendMessages FriendMessagesProvider;
/** Provides access to the list of achievements for this player */
var UIDataProvider_PlayerAchievements AchievementsProvider;
/** The name of the data provider class to use as the default for friends */
var config string FriendsProviderClassName;
/** The class that should be created when a player is bound to this data store */
var class<UIDataProvider_OnlineFriends> FriendsProviderClass;
/** The name of the data provider class to use as the default for messages */
var config string FriendMessagesProviderClassName;
/** The class that should be created when a player is bound to this data store */
var class<UIDataProvider_OnlineFriendMessages> FriendMessagesProviderClass;
/** The name of the data provider class to use as the default for enumerating achievements */
var config string AchievementsProviderClassName;
/** The class that should be created when a player is bound to this data store for providing achievements data to the UI */
var class<UIDataProvider_PlayerAchievements> AchievementsProviderClass;
/** The name of the data provider class to use as the default for party chat members */
var config string PartyChatProviderClassName;
/** The class that should be created when a player is bound to this data store */
var class<UIDataProvider_OnlinePartyChatList> PartyChatProviderClass;
/** The provider instance for the party chat data */
var UIDataProvider_OnlinePartyChatList PartyChatProvider;
cpptext
{
/* === UIDataStore interface === */
/**
* Loads the game specific OnlineProfileSettings class
*/
virtual void LoadDependentClasses(void);
/**
* Creates the data providers exposed by this data store
*/
virtual void InitializeDataStore(void);
/**
* Forwards the calls to the data providers so they can do their start up
*
* @param Player the player that will be associated with this DataStore
*/
virtual void OnRegister(ULocalPlayer* Player);
/**
* Tells all of the child providers to clear their player data
*
* @param Player ignored
*/
virtual void OnUnregister(ULocalPlayer*);
}
/**
* Binds the player to this provider. Starts the async friends list gathering
*
* @param InPlayer the player that we are retrieving friends for
*/
event OnRegister(LocalPlayer InPlayer)
{
local OnlineSubsystem OnlineSub;
local OnlinePlayerInterface PlayerInterface;
// BWJ - 12-14-16 - Don't care about this
if (InPlayer != None && !class'WorldInfo'.static.IsConsoleBuild( CONSOLE_Durango ) )
{
PlayerControllerId = InPlayer.ControllerId;
// Figure out if we have an online subsystem registered
OnlineSub = class'GameEngine'.static.GetOnlineSubsystem();
if (OnlineSub != None)
{
// Grab the player interface to verify the subsystem supports it
PlayerInterface = OnlineSub.PlayerInterface;
if (PlayerInterface != None)
{
// We need to know when the player's login changes
PlayerInterface.AddLoginChangeDelegate(OnLoginChange);
}
if (OnlineSub.PlayerInterfaceEx != None)
{
// We need to know when the player changes data (change nick name, etc)
OnlineSub.PlayerInterfaceEx.AddProfileDataChangedDelegate(PlayerControllerId,OnPlayerDataChange);
}
}
//If we do not have an online subsystem, nor any settings, then we want the default settings.
else if (ProfileProvider != none && ProfileProvider.Profile != none)
{
ProfileProvider.Profile.SetToDefaults();
}
RegisterDelegates();
// Force a refresh
OnLoginChange(PlayerControllerId);
}
}
/**
* Clears our delegate for getting login change notifications
*/
event OnUnregister()
{
local OnlineSubsystem OnlineSub;
local OnlinePlayerInterface PlayerInterface;
if (PlayerControllerId != -1)
{
ClearDelegates();
// Figure out if we have an online subsystem registered
OnlineSub = class'GameEngine'.static.GetOnlineSubsystem();
if (OnlineSub != None)
{
// Grab the player interface to verify the subsystem supports it
PlayerInterface = OnlineSub.PlayerInterface;
if (PlayerInterface != None)
{
// Clear our delegate
PlayerInterface.ClearLoginChangeDelegate(OnLoginChange);
}
if (OnlineSub.PlayerInterfaceEx != None)
{
// Clear for GC reasons
OnlineSub.PlayerInterfaceEx.ClearProfileDataChangedDelegate(PlayerControllerId,OnPlayerDataChange);
}
}
}
}
/**
* Refetches the player's nick name from the online subsystem
*
* @param LocalUserNum the player that logged in/out
*/
function OnLoginChange(byte LocalUserNum)
{
local OnlineSubsystem OnlineSub;
local OnlinePlayerInterface PlayerInterface;
if (LocalUserNum == PlayerControllerId)
{
// Figure out if we have an online subsystem registered
OnlineSub = class'GameEngine'.static.GetOnlineSubsystem();
if (OnlineSub != None)
{
// Grab the player interface to verify the subsystem supports it
PlayerInterface = OnlineSub.PlayerInterface;
//@HSL_BEGIN - JRO - 7/27/2016 - Orbis login status only applies to PSN status. You always have an account active when a game is open,
// so resetting profile info isn't necessary and in fact is causing problems
if (PlayerInterface != None &&
(PlayerInterface.GetLoginStatus(PlayerControllerId) > LS_NotLoggedIn || class'WorldInfo'.static.IsConsoleBuild(CONSOLE_Orbis)))
//@HSL_END
{
// Get the name and force a refresh
PlayerNick = PlayerInterface.GetPlayerNickname(PlayerControllerId);
}
else
{
PlayerNick = "";
ProfileProvider.Profile.SetToDefaults();
StorageProvider.Profile.SetToDefaults();
}
}
RefreshSubscribers();
}
}
/**
* Refetches the player's nick name from the online subsystem
*/
function OnPlayerDataChange()
{
local OnlineSubsystem OnlineSub;
// Figure out if we have an online subsystem registered
OnlineSub = class'GameEngine'.static.GetOnlineSubsystem();
if (OnlineSub != None)
{
if (OnlineSub.PlayerInterface != None)
{
// Get the name and force a refresh
PlayerNick = OnlineSub.PlayerInterface.GetPlayerNickname(PlayerControllerId);
RefreshSubscribers();
}
}
}
/**
* Registers the delegates with the providers so we can know when async data changes
*/
function RegisterDelegates()
{
}
function ClearDelegates()
{
}
/**
* Retrieves a player profile which has been cached by the online subsystem.
*
* @param ControllerId the controller ID for the player to retrieve the profile for.
*
* @return a player profile which was previously created and cached by the online subsystem for
* the specified controller id.
*/
event OnlineProfileSettings GetCachedPlayerProfile( int ControllerId )
{
local OnlineSubsystem OnlineSub;
local OnlinePlayerInterface PlayerInterface;
local OnlineProfileSettings Result;
// Figure out if we have an online subsystem registered
OnlineSub = class'GameEngine'.static.GetOnlineSubsystem();
if (OnlineSub != None)
{
// Grab the player interface to verify the subsystem supports it
PlayerInterface = OnlineSub.PlayerInterface;
if (PlayerInterface != None)
{
Result = PlayerInterface.GetProfileSettings(ControllerId);
}
}
return Result;
}
/**
* Retrieves a player storage which has been cached by the online subsystem.
*
* @param ControllerId the controller ID for the player to retrieve the profile for.
*
* @return a player storage which was previously created and cached by the online subsystem for
* the specified controller id.
*/
event OnlinePlayerStorage GetCachedPlayerStorage( int ControllerId )
{
local OnlineSubsystem OnlineSub;
local OnlinePlayerInterface PlayerInterface;
local OnlinePlayerStorage Result;
// Figure out if we have an online subsystem registered
OnlineSub = class'GameEngine'.static.GetOnlineSubsystem();
if (OnlineSub != None)
{
// Grab the player interface to verify the subsystem supports it
PlayerInterface = OnlineSub.PlayerInterface;
if (PlayerInterface != None)
{
Result = PlayerInterface.GetPlayerStorage(ControllerId);
}
}
return Result;
}
defaultproperties
{
Tag=OnlinePlayerData
// So something shows up in the editor
PlayerNick="PlayerNickNameHere"
PlayerControllerId=-1
}