summaryrefslogtreecommitdiff
path: root/game/shared/tf/tf_party.h
diff options
context:
space:
mode:
Diffstat (limited to 'game/shared/tf/tf_party.h')
-rw-r--r--game/shared/tf/tf_party.h192
1 files changed, 192 insertions, 0 deletions
diff --git a/game/shared/tf/tf_party.h b/game/shared/tf/tf_party.h
new file mode 100644
index 0000000..f391773
--- /dev/null
+++ b/game/shared/tf/tf_party.h
@@ -0,0 +1,192 @@
+//========= 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