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.
196 lines
5.0 KiB
196 lines
5.0 KiB
![]()
4 years ago
|
//========= 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 );
|
||
|
}
|