initial
This commit is contained in:
247
public/matchmaking/imatchtitle.h
Normal file
247
public/matchmaking/imatchtitle.h
Normal file
@@ -0,0 +1,247 @@
|
||||
//===== Copyright c 1996-2009, Valve Corporation, All rights reserved. ======//
|
||||
//
|
||||
// Purpose:
|
||||
//
|
||||
// $NoKeywords: $
|
||||
//===========================================================================//
|
||||
|
||||
#ifndef IMATCHTITLE_H
|
||||
#define IMATCHTITLE_H
|
||||
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#if defined ( _PS3 )
|
||||
|
||||
#define TITLE_DATA_PREFIX "PS3."
|
||||
#define TITLE_DATA_DEVICE_MOVE_PREFIX "MOVE."
|
||||
#define TITLE_DATA_DEVICE_SHARP_SHOOTER_PREFIX "SHARP_SHOOTER."
|
||||
|
||||
#else
|
||||
|
||||
#define TITLE_DATA_PREFIX ""
|
||||
|
||||
#endif
|
||||
|
||||
struct TitleDataFieldsDescription_t
|
||||
{
|
||||
enum DataType_t
|
||||
{
|
||||
DT_0 = 0,
|
||||
DT_uint8 = 8,
|
||||
DT_BITFIELD = 9,
|
||||
DT_uint16 = 16,
|
||||
DT_uint32 = 32,
|
||||
DT_float = 33,
|
||||
DT_uint64 = 64
|
||||
};
|
||||
|
||||
enum DataBlock_t
|
||||
{
|
||||
DB_TD1 = 0,
|
||||
DB_TD2 = 1,
|
||||
DB_TD3 = 2,
|
||||
|
||||
DB_TD_COUNT = 3
|
||||
};
|
||||
|
||||
char const *m_szFieldName;
|
||||
DataBlock_t m_iTitleDataBlock;
|
||||
DataType_t m_eDataType;
|
||||
union
|
||||
{
|
||||
int m_numBytesOffset;
|
||||
int m_nUserDataValue0;
|
||||
};
|
||||
};
|
||||
|
||||
struct TitleAchievementsDescription_t
|
||||
{
|
||||
char const *m_szAchievementName; // Name by which achievement can be awarded and queried
|
||||
int m_idAchievement; // Achievement ID on the platform
|
||||
int m_numComponents; // Number of achievement component title data bits
|
||||
};
|
||||
|
||||
struct TitleAvatarAwardsDescription_t
|
||||
{
|
||||
char const *m_szAvatarAwardName; // Name by which avatar award can be awarded and queried
|
||||
int m_idAvatarAward; // Avatar award ID on the platform
|
||||
char const *m_szTitleDataBitfieldStatName; // Name of a bitfield in title data storage representing whether avatar award has been earned
|
||||
};
|
||||
|
||||
struct TitleDlcDescription_t
|
||||
{
|
||||
uint64 m_uiLicenseMaskId;
|
||||
int m_idDlcAppId;
|
||||
int m_idDlcPackageId;
|
||||
char const *m_szTitleDataBitfieldStatName; // Name of a bitfield in title data storage representing whether dlc has been discovered installed
|
||||
};
|
||||
|
||||
enum TitleSettingsFlags_t
|
||||
{
|
||||
MATCHTITLE_SETTING_MULTIPLAYER = ( 1 << 0 ), // Title wants network sockets initialization
|
||||
MATCHTITLE_SETTING_NODEDICATED = ( 1 << 1 ), // Title doesn't support dedicated servers
|
||||
MATCHTITLE_PLAYERMGR_DISABLED = ( 1 << 2 ), // Title doesn't need friends presence poll
|
||||
MATCHTITLE_SERVERMGR_DISABLED = ( 1 << 3 ), // Title doesn't need group servers poll
|
||||
MATCHTITLE_INVITE_ONLY_SINGLE_USER = ( 1 << 4 ), // Accepted game invite forcefully disables splitscreen (e.g.: 1-on-1 games)
|
||||
MATCHTITLE_VOICE_INGAME = ( 1 << 5 ), // When in active gameplay lobby system doesn't transmit voice
|
||||
MATCHTITLE_XLSPPATCH_SUPPORTED = ( 1 << 6 ), // Title supports xlsp patch containers
|
||||
MATCHTITLE_PLAYERMGR_ALLFRIENDS = ( 1 << 7 ), // Player manager by default fetches only friends for same game, this will force all friends to be fetched
|
||||
MATCHTITLE_PLAYERMGR_FRIENDREQS = ( 1 << 8 ), // Player manager by default fetches only real friends, this will force friend requests to also be fetched
|
||||
};
|
||||
|
||||
abstract_class IMatchTitle
|
||||
{
|
||||
public:
|
||||
// Title ID
|
||||
virtual uint64 GetTitleID() = 0;
|
||||
|
||||
// Service ID for XLSP
|
||||
virtual uint64 GetTitleServiceID() = 0;
|
||||
|
||||
// Describe title settings using a bitwise combination of flags
|
||||
virtual uint64 GetTitleSettingsFlags() = 0;
|
||||
|
||||
// Prepare network startup params for the title
|
||||
virtual void PrepareNetStartupParams( void *pNetStartupParams ) = 0;
|
||||
|
||||
// Get total number of players supported by the title
|
||||
virtual int GetTotalNumPlayersSupported() = 0;
|
||||
|
||||
// Get a guest player name
|
||||
virtual char const * GetGuestPlayerName( int iUserIndex ) = 0;
|
||||
|
||||
// Decipher title data fields
|
||||
virtual TitleDataFieldsDescription_t const * DescribeTitleDataStorage() = 0;
|
||||
|
||||
// Title achievements
|
||||
virtual TitleAchievementsDescription_t const * DescribeTitleAchievements() = 0;
|
||||
|
||||
// Title avatar awards
|
||||
virtual TitleAvatarAwardsDescription_t const * DescribeTitleAvatarAwards() = 0;
|
||||
|
||||
// Title leaderboards
|
||||
virtual KeyValues * DescribeTitleLeaderboard( char const *szLeaderboardView ) = 0;
|
||||
|
||||
// Sets up all necessary client-side convars and user info before
|
||||
// connecting to server
|
||||
virtual void PrepareClientForConnect( KeyValues *pSettings ) = 0;
|
||||
|
||||
// Start up a listen server with the given settings
|
||||
virtual bool StartServerMap( KeyValues *pSettings ) = 0;
|
||||
|
||||
// Title DLC description
|
||||
virtual TitleDlcDescription_t const * DescribeTitleDlcs() = 0;
|
||||
|
||||
// Run every frame
|
||||
virtual void RunFrame() = 0;
|
||||
};
|
||||
|
||||
//
|
||||
// Matchmaking title settings extension interface
|
||||
//
|
||||
|
||||
abstract_class IMatchTitleGameSettingsMgr
|
||||
{
|
||||
public:
|
||||
// Extends server game details
|
||||
virtual void ExtendServerDetails( KeyValues *pDetails, KeyValues *pRequest ) = 0;
|
||||
|
||||
// Adds the essential part of game details to be broadcast
|
||||
virtual void ExtendLobbyDetailsTemplate( KeyValues *pDetails, char const *szReason, KeyValues *pFullSettings ) = 0;
|
||||
|
||||
// Extends game settings update packet for lobby transition,
|
||||
// either due to a migration or due to an endgame condition
|
||||
virtual void ExtendGameSettingsForLobbyTransition( KeyValues *pSettings, KeyValues *pSettingsUpdate, bool bEndGame ) = 0;
|
||||
|
||||
// Adds data for datacenter reporting
|
||||
virtual void ExtendDatacenterReport( KeyValues *pReportMsg, char const *szReason ) = 0;
|
||||
|
||||
|
||||
// Rolls up game details for matches grouping
|
||||
// valid pDetails, null pRollup
|
||||
// returns a rollup representation of pDetails to be used as an indexing key
|
||||
// valid pDetails, valid pRollup (usually called second time)
|
||||
// rolls the details into the rollup, aggregates some values, when
|
||||
// the aggregate values are missing in pRollup, then this is the first
|
||||
// details entry being aggregated and would establish the first rollup
|
||||
// returns pRollup
|
||||
// null pDetails, valid pRollup
|
||||
// tries to determine if the rollup should remain even though no details
|
||||
// matched it, adjusts pRollup to represent no aggregated data
|
||||
// returns null to drop pRollup, returns pRollup to keep rollup
|
||||
virtual KeyValues * RollupGameDetails( KeyValues *pDetails, KeyValues *pRollup, KeyValues *pQuery ) = 0;
|
||||
|
||||
|
||||
// Defines session search keys for matchmaking
|
||||
virtual KeyValues * DefineSessionSearchKeys( KeyValues *pSettings ) = 0;
|
||||
|
||||
// Defines dedicated server search key
|
||||
virtual KeyValues * DefineDedicatedSearchKeys( KeyValues *pSettings, bool bNeedOfficialServer, int nSearchPass ) = 0;
|
||||
|
||||
|
||||
// Initializes full game settings from potentially abbreviated game settings
|
||||
virtual void InitializeGameSettings( KeyValues *pSettings, char const *szReason ) = 0;
|
||||
|
||||
// Sets the bspname key given a mapgroup
|
||||
virtual void SetBspnameFromMapgroup( KeyValues *pSettings ) = 0;
|
||||
|
||||
// Extends game settings update packet before it gets merged with
|
||||
// session settings and networked to remote clients
|
||||
virtual void ExtendGameSettingsUpdateKeys( KeyValues *pSettings, KeyValues *pUpdateDeleteKeys ) = 0;
|
||||
|
||||
virtual KeyValues * ExtendTeamLobbyToGame( KeyValues *pSettings ) = 0;
|
||||
|
||||
// Prepares system for session creation
|
||||
virtual KeyValues * PrepareForSessionCreate( KeyValues *pSettings ) = 0;
|
||||
|
||||
|
||||
// Executes the command on the session settings, this function on host
|
||||
// is allowed to modify Members/Game subkeys and has to fill in modified players KeyValues
|
||||
// When running on a remote client "ppPlayersUpdated" is NULL and players cannot
|
||||
// be modified
|
||||
virtual void ExecuteCommand( KeyValues *pCommand, KeyValues *pSessionSystemData, KeyValues *pSettings, KeyValues **ppPlayersUpdated ) = 0;
|
||||
|
||||
// Prepares the host lobby for game or adjust settings of new players who
|
||||
// join a game in progress, this function is allowed to modify
|
||||
// Members/Game subkeys and has to fill in modified players KeyValues
|
||||
virtual void PrepareLobbyForGame( KeyValues *pSettings, KeyValues **ppPlayersUpdated ) = 0;
|
||||
|
||||
// Prepares the host team lobby for game adjusting the game settings
|
||||
// this function is allowed to prepare modification package to update
|
||||
// Game subkeys.
|
||||
// Returns the update/delete package to be applied to session settings
|
||||
// and pushed to dependent two sesssion of the two teams.
|
||||
virtual KeyValues * PrepareTeamLinkForGame( KeyValues *pSettingsLocal, KeyValues *pSettingsRemote ) = 0;
|
||||
|
||||
|
||||
// Prepares the client lobby for migration
|
||||
// this function is called when the client session is still in the state
|
||||
// of "client" while handling the original host disconnection and decision
|
||||
// has been made that local machine will be elected as new "host"
|
||||
// Returns NULL if migration should proceed normally
|
||||
// Returns [ kvroot { "error" "n/a" } ] if migration should be aborted.
|
||||
virtual KeyValues * PrepareClientLobbyForMigration( KeyValues *pSettingsLocal, KeyValues *pMigrationInfo ) = 0;
|
||||
|
||||
// Prepares the session for server disconnect
|
||||
// this function is called when the session is still in the active gameplay
|
||||
// state and while localhost is handling the disconnection from game server.
|
||||
// Returns NULL to allow default flow
|
||||
// Returns [ kvroot { "disconnecthdlr" "<opt>" } ] where <opt> can be:
|
||||
// "destroy" : to trigger a disconnection error and destroy the session
|
||||
// "lobby" : to initiate a "salvaging" lobby transition
|
||||
virtual KeyValues * PrepareClientLobbyForGameDisconnect( KeyValues *pSettingsLocal, KeyValues *pDisconnectInfo ) = 0;
|
||||
|
||||
// Validates if client profile can set a stat or get awarded an achievement
|
||||
virtual bool AllowClientProfileUpdate( KeyValues *kvUpdate ) = 0;
|
||||
|
||||
// Retrieves the indexed formula from the match system settings file. (MatchSystem.360.res)
|
||||
virtual char const * GetFormulaAverage( int index ) = 0;
|
||||
|
||||
// Called by the client to notify matchmaking that it should update matchmaking properties based
|
||||
// on player distribution among the teams.
|
||||
virtual void UpdateTeamProperties( KeyValues *pCurrentSettings, KeyValues *pTeamProperties ) = 0;
|
||||
};
|
||||
|
||||
#endif // IMATCHTITLE_H
|
||||
Reference in New Issue
Block a user