You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
192 lines
7.4 KiB
192 lines
7.4 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: Dota specific GC based party |
|
// |
|
//============================================================================= |
|
|
|
#ifndef DOTA_PARTY_H |
|
#define DOTA_PARTY_H |
|
#ifdef _WIN32 |
|
#pragma once |
|
#endif |
|
|
|
#include "gcsdk/protobufsharedobject.h" |
|
#include "tf_gcmessages.h" |
|
#include "party.h" |
|
#include "tf_matchmaking_shared.h" |
|
|
|
#ifdef GC |
|
namespace GCSDK |
|
{ |
|
CWebAPIValues; |
|
} |
|
#endif |
|
|
|
const int k_nTFPartyMaxSize = 6; |
|
|
|
class CTFParty : public GCSDK::CProtoBufSharedObject<CSOTFParty, k_EProtoObjectTFParty>, public GCSDK::IParty |
|
{ |
|
#ifdef GC |
|
DECLARE_CLASS_MEMPOOL( CTFParty ); |
|
#endif |
|
typedef GCSDK::CProtoBufSharedObject<CSOTFParty, k_EProtoObjectTFParty> BaseClass; |
|
|
|
public: |
|
CTFParty(); |
|
virtual ~CTFParty(); |
|
|
|
const static int k_nTypeID = k_EProtoObjectTFParty; |
|
|
|
virtual bool BShouldDeleteByCache() const { return false; } |
|
virtual GCSDK::PlayerGroupID_t GetGroupID() const { return Obj().party_id(); } |
|
|
|
// Parties are their own SharedObject for all involved |
|
virtual CSharedObject* GetSharedObjectForMember( const CSteamID &steamID ) OVERRIDE { return this; } |
|
// Ambiguous between ISharedObject and IPlayerGroup. |
|
virtual void Dump() const OVERRIDE { return BaseClass::Dump(); } |
|
|
|
virtual const CSteamID GetLeader() const; |
|
|
|
virtual int GetNumMembers() const { return Obj().member_ids_size(); } |
|
virtual const CSteamID GetMember( int i ) const; |
|
virtual int GetMemberIndexBySteamID( const CSteamID &steamID ) const; |
|
|
|
virtual int GetNumPendingInvites() const { return Obj().pending_invites_size(); } |
|
virtual const CSteamID GetPendingInvite( int i ) const; |
|
virtual int GetPendingInviteIndexBySteamID( const CSteamID &steamID ) const; |
|
|
|
RTime32 GetStartedMatchmakingTime() const; |
|
CSOTFParty_State GetState() const |
|
{ |
|
CSOTFParty_State result = Obj().state(); |
|
#ifndef GC |
|
// The client really never needs to see this state. Let's |
|
// treat it as equivalent to the finding match state |
|
if ( result == CSOTFParty_State_AWAITING_RESERVATION_CONFIRMATION ) |
|
{ |
|
result = CSOTFParty_State_FINDING_MATCH; |
|
} |
|
#endif |
|
return result; |
|
} |
|
CSteamID GetSteamLobbyID() const { return CSteamID( Obj().steam_lobby_id() ); } |
|
int GetNumSearchingPlayers( int group ); |
|
int GetMaxNumSearchingPlayers(); // Returns the group with the largest number of players searching |
|
|
|
virtual bool AllowInvites() const { return false; } // we are using Steam invites |
|
|
|
void SpewDebug(); |
|
|
|
bool BAnyMemberWithoutTicket() const; |
|
bool BAnyMemberWithoutCompetitiveAccess() const; |
|
bool BAnyMemberWithLowPriority() const; |
|
|
|
inline bool GetSearchLateJoinOK() const { return Obj().search_late_join_ok(); } |
|
inline bool GetSearchPlayForBraggingRights() const { return Obj().search_play_for_bragging_rights(); } |
|
TF_MatchmakingMode GetMatchmakingMode() const { return Obj().matchmaking_mode(); } |
|
uint32 GetSearchQuickplayGameType() const { return Obj().search_quickplay_game_type(); } |
|
EMatchGroup GetMatchGroup() const; |
|
void GetSearchChallenges( CMvMMissionSet &challenges ) const; |
|
uint32 GetSearchLadderGameType() const { return Obj().search_ladder_game_type(); } |
|
|
|
#ifdef USE_MVM_TOUR |
|
/// Return name of tour we are searching for. Returns NULL if we are not manned up |
|
const char *GetSearchMannUpTourName() const; |
|
|
|
/// Return index of tour we are searching for. Might return one of the k_iMvmTourIndex_xxx values |
|
int GetSearchMannUpTourIndex() const; |
|
#endif // USE_MVM_TOUR |
|
|
|
#ifdef GC |
|
virtual void SetGroupID( GCSDK::PlayerGroupID_t nGroupID ); |
|
virtual void SetLeader( const CSteamID &steamID ); |
|
virtual void AddMember( const CSteamID &steamID ); |
|
virtual void RemoveMember( const CSteamID &steamID ); |
|
//virtual void SetSearchKey( const char *key ); |
|
void SetMatchmakingMode( TF_MatchmakingMode mode ); |
|
void SetSearchChallenges( const ::google::protobuf::RepeatedPtrField< ::std::string> &challenges ); |
|
#ifdef USE_MVM_TOUR |
|
void SetSearchMannUpTourName( const char *pszTourName ); |
|
#endif // USE_MVM_TOUR |
|
void CheckRemoveInvalidSearchChallenges(); |
|
void SetSearchQuickplayGameType( uint32 nType ); |
|
void SetSearchPlayForBraggingRights( bool bPlayForBraggingRights ); |
|
void SetSearchLadderGameType( uint32 nType ); |
|
void SetCasualSearchCriteria( const CMsgCasualMatchmakingSearchCriteria& msg ); |
|
void SetCustomPingTolerance( uint32 nPingTolerance ); |
|
uint32 GetCustomPingTolerance() const { return Obj().custom_ping_tolerance(); } |
|
void SetState( CSOTFParty_State newState ); |
|
//virtual void SetMatchingPlayers( uint32 unMatchingPlayers ); |
|
//virtual void SetSearchFraction( float flFraction ); |
|
virtual void SetLateJoinOK( bool bLateJoinOK ); |
|
virtual void SetMemberUseSquadSurplus( int nMemberIndex, bool bUseVoucher ); |
|
|
|
virtual void AddPendingInvite( const CSteamID &steamID ); |
|
virtual void RemovePendingInvite( const CSteamID &steamID ); |
|
|
|
void SetStartedMatchmakingTime( RTime32 time ); |
|
|
|
void AssociatePartyWithLobby( CTFLobby* pLobby ); |
|
void DissociatePartyFromLobby( CTFLobby* pLobby ); |
|
CTFLobby* GetAssociatedLobby() const; |
|
void SetUIStateAndWizardStep( TF_Matchmaking_WizardStep eWizardStep ); |
|
void SetNumSearchingPlayers( int group, uint32 nPlayers ); |
|
void SetSteamLobbyID( const CSteamID &steamIDLobby ); |
|
|
|
bool IsIntroModeEligible(); |
|
bool IsProModeEligible(); |
|
void UpdatePreventMatchmakingDate(); // sets prevent_match variables to match the party member blocked from matchmaking the longest |
|
|
|
void YldUpdateMemberData( int nMemberIndex ); |
|
|
|
void SetWebAPIDebugValues( GCSDK::CWebAPIValues *pPartyObject ); |
|
|
|
protected: |
|
void SetStateInternal( CSOTFParty_State newState ); |
|
void DirtyParty(); |
|
#endif |
|
|
|
#ifdef CLIENT_DLL |
|
// We mark a party as offline when we dont get any response from the GC regarding |
|
// changes to the party while messing with the MM UI. If we get an update for an |
|
// offline party and we no longer want to be in MM, then we leave matchmaking to |
|
// match the user's intent. If it comes back and we're still in the MM UI, it'll |
|
// just update like normal. |
|
void SetOffline( bool bOffLine ) { m_bOffLine = bOffLine; } |
|
bool BOffline() const { return m_bOffLine; } |
|
private: |
|
bool m_bOffLine; |
|
#endif |
|
}; |
|
|
|
class CTFPartyInvite : public GCSDK::CProtoBufSharedObject<CSOTFPartyInvite, k_EProtoObjectTFPartyInvite>, public GCSDK::IPlayerGroupInvite |
|
{ |
|
#ifdef GC |
|
DECLARE_CLASS_MEMPOOL( CTFPartyInvite ); |
|
#endif |
|
typedef GCSDK::CProtoBufSharedObject<CSOTFPartyInvite, k_EProtoObjectTFPartyInvite> BaseClass; |
|
|
|
public: |
|
const static int k_nTypeID = k_EProtoObjectTFPartyInvite; |
|
|
|
virtual const CSteamID GetSenderID() const { return Obj().sender_id(); } |
|
virtual GCSDK::PlayerGroupID_t GetGroupID() const { return Obj().group_id(); } |
|
virtual const char* GetSenderName() const { return Obj().sender_name().c_str(); } |
|
|
|
virtual int GetNumMembers() const { return Obj().members_size(); } |
|
virtual const CSteamID GetMember( int i ) const; |
|
virtual const char* GetMemberName( int i ) const; |
|
virtual uint16 GetMemberAvatar( int i ) const; |
|
virtual GCSDK::CSharedObject* GetSharedObject() { return this; } |
|
|
|
#ifdef GC |
|
virtual void YldInitFromPlayerGroup( GCSDK::IPlayerGroup *pPlayerGroup ); |
|
|
|
// NOTE: These do not dirty fields |
|
virtual void SetSenderID( const CSteamID &steamID ) { Obj().set_sender_id( steamID.ConvertToUint64() ); } |
|
virtual void SetGroupID( GCSDK::PlayerGroupID_t nGroupID ) { Obj().set_group_id( nGroupID ); } |
|
virtual void SetSenderName( const char *szName ) { Obj().set_sender_name( szName ); } |
|
virtual void AddMember( const CSteamID &steamID, const char *szPersonaName, uint16 unAvatar ); |
|
#endif |
|
}; |
|
#endif
|
|
|