mirror of
https://github.com/celisej567/source-engine.git
synced 2026-01-04 18:09:53 +03:00
1
This commit is contained in:
195
game/client/tf/tf_shared_content_manager.cpp
Normal file
195
game/client/tf/tf_shared_content_manager.cpp
Normal file
@@ -0,0 +1,195 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose: Generic in-game abuse reporting
|
||||
//
|
||||
// $NoKeywords: $
|
||||
//=============================================================================//
|
||||
|
||||
#include "cbase.h"
|
||||
#include "GameEventListener.h"
|
||||
#include "tf_shared_content_manager.h"
|
||||
#include "confirm_dialog.h"
|
||||
#include "clientmode_tf.h"
|
||||
#include "tf_gamerules.h"
|
||||
|
||||
|
||||
// memdbgon must be the last include file in a .cpp file!!!
|
||||
#include "tier0/memdbgon.h"
|
||||
|
||||
// Declare singleton object
|
||||
static C_TFSharedContentManager s_SharedContentManager;
|
||||
C_TFSharedContentManager *TFSharedContentManager() { return &s_SharedContentManager; }
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Romevision-specific dialog and callback
|
||||
//-----------------------------------------------------------------------------
|
||||
extern ConVar tf_romevision_opt_in;
|
||||
extern ConVar tf_romevision_skip_prompt;
|
||||
|
||||
void PromptAcceptRomevisionSharingCallback( bool bConfirm, void *pContext )
|
||||
{
|
||||
if ( bConfirm )
|
||||
{
|
||||
tf_romevision_opt_in.SetValue( true );
|
||||
}
|
||||
}
|
||||
|
||||
static void PromptAcceptRomevisionSharing()
|
||||
{
|
||||
if ( tf_romevision_opt_in.GetBool() == false )
|
||||
{
|
||||
ShowConfirmOptOutDialog( "#TF_Prompt_Romevision_Title", "#TF_Prompt_Romevision_Message",
|
||||
"#TF_Prompt_Romevsion_OK", "#TF_Prompt_Romevsion_Cancel",
|
||||
"#TF_Prompt_Romevsion_Opt_Out", "tf_romevision_skip_prompt",
|
||||
PromptAcceptRomevisionSharingCallback, NULL );
|
||||
}
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
bool C_TFSharedContentManager::Init()
|
||||
{
|
||||
m_iSharedVisionFlags = TF_VISION_FILTER_NONE;
|
||||
m_PlayersWhoHaveOfferedVision.Purge();
|
||||
m_SharedVisionQueue.Purge();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
void C_TFSharedContentManager::Update( float frametime )
|
||||
{
|
||||
// check our shared vision queue
|
||||
if ( m_SharedVisionQueue.Count() > 0 )
|
||||
{
|
||||
int iTeam = GetLocalPlayerTeam();
|
||||
bool bPrompt = false;
|
||||
|
||||
if ( iTeam == TEAM_SPECTATOR )
|
||||
{
|
||||
bPrompt = true;
|
||||
}
|
||||
else if ( iTeam > LAST_SHARED_TEAM )
|
||||
{
|
||||
C_TFPlayer *pTFLocalPlayer = C_TFPlayer::GetLocalTFPlayer();
|
||||
if ( pTFLocalPlayer && pTFLocalPlayer->GetPlayerClass() && ( pTFLocalPlayer->GetPlayerClass()->GetClassIndex() > TF_CLASS_UNDEFINED ) )
|
||||
{
|
||||
bPrompt = true;
|
||||
}
|
||||
}
|
||||
|
||||
if ( bPrompt )
|
||||
{
|
||||
OfferSharedVision_Internal( m_SharedVisionQueue[0].iFlag, m_SharedVisionQueue[0].unAccountID );
|
||||
m_SharedVisionQueue.Remove( 0 );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
bool C_TFSharedContentManager::CanOfferVision( int iFlag )
|
||||
{
|
||||
bool bRetVal = false;
|
||||
|
||||
switch ( iFlag )
|
||||
{
|
||||
case TF_VISION_FILTER_ROME:
|
||||
if ( TFGameRules() && TFGameRules()->IsMannVsMachineMode() )
|
||||
{
|
||||
bRetVal = true;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return bRetVal;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
void C_TFSharedContentManager::OfferSharedVision( int iFlag, uint32 unAccountID )
|
||||
{
|
||||
if ( !CanOfferVision( iFlag ) )
|
||||
return;
|
||||
|
||||
for ( int i = 0 ; i < m_SharedVisionQueue.Count() ; i++ )
|
||||
{
|
||||
if ( ( m_SharedVisionQueue[i].iFlag == iFlag ) && ( m_SharedVisionQueue[i].unAccountID == unAccountID ) )
|
||||
{
|
||||
// we already have this entry in the queue
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
shared_vision_entry_t data = { iFlag, unAccountID };
|
||||
m_SharedVisionQueue.AddToTail( data );
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
void C_TFSharedContentManager::PrintChatText( int iFlag, uint32 unAccountID )
|
||||
{
|
||||
// add some chat text saying who has offered the vision, but only once-per-player to avoid spam
|
||||
if ( m_PlayersWhoHaveOfferedVision.Find( unAccountID ) == m_PlayersWhoHaveOfferedVision.InvalidIndex() )
|
||||
{
|
||||
const char *pszPlayerName = NULL;
|
||||
|
||||
CBasePlayer *pPlayer = GetPlayerByAccountID( unAccountID );
|
||||
if ( pPlayer )
|
||||
{
|
||||
pszPlayerName = pPlayer->GetPlayerName();
|
||||
}
|
||||
|
||||
if ( pszPlayerName && pszPlayerName[0] )
|
||||
{
|
||||
KeyValuesAD pKeyValues( "data" );
|
||||
pKeyValues->SetString( "player", pszPlayerName );
|
||||
|
||||
const char *pText = NULL;
|
||||
switch ( iFlag )
|
||||
{
|
||||
case TF_VISION_FILTER_ROME:
|
||||
if ( TFGameRules() && TFGameRules()->IsMannVsMachineMode() )
|
||||
{
|
||||
pText = "#TF_Player_OptionalVision";
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if ( pText )
|
||||
{
|
||||
GetClientModeTFNormal()->PrintTextToChat( pText, pKeyValues );
|
||||
}
|
||||
}
|
||||
|
||||
m_PlayersWhoHaveOfferedVision.AddToHead( unAccountID );
|
||||
}
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
void C_TFSharedContentManager::OfferSharedVision_Internal( int iFlag, uint32 unAccountID )
|
||||
{
|
||||
if ( !CanOfferVision( iFlag ) )
|
||||
return;
|
||||
|
||||
// If we haven't already offered it
|
||||
if ( ( m_iSharedVisionFlags & iFlag ) == 0 )
|
||||
{
|
||||
switch( iFlag )
|
||||
{
|
||||
case TF_VISION_FILTER_ROME:
|
||||
if ( !IsLocalPlayerUsingVisionFilterFlags( TF_VISION_FILTER_ROME ) && ( tf_romevision_skip_prompt.GetBool() == false ) )
|
||||
{
|
||||
PromptAcceptRomevisionSharing();
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
AddSharedVision( iFlag );
|
||||
}
|
||||
|
||||
// Display who is offering the shared vision
|
||||
PrintChatText( iFlag, unAccountID );
|
||||
}
|
||||
Reference in New Issue
Block a user