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