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.
116 lines
3.1 KiB
116 lines
3.1 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: Generic in-game abuse reporting |
|
// |
|
// $NoKeywords: $ |
|
//=============================================================================// |
|
|
|
#include "cbase.h" |
|
#include "tf_abuse_report.h" |
|
#include "abuse_report_ui.h" |
|
#include "game/client/iviewport.h" |
|
#include "tf_shareddefs.h" |
|
#include "tf_hud_mainmenuoverride.h" |
|
#include "tf_gcmessages.h" |
|
#include "c_tf_player.h" |
|
#include "tf_quickplay_shared.h" |
|
#include "tf_gc_client.h" |
|
|
|
// memdbgon must be the last include file in a .cpp file!!! |
|
#include "tier0/memdbgon.h" |
|
|
|
|
|
/// Declare singleton object |
|
CTFAbuseReportManager theAbuseReportManager; |
|
|
|
CTFAbuseReportManager::CTFAbuseReportManager() {} |
|
CTFAbuseReportManager::~CTFAbuseReportManager() {} |
|
|
|
bool CTFAbuseReportManager::CreateAndPopulateIncident() |
|
{ |
|
if ( !CAbuseReportManager::CreateAndPopulateIncident() ) |
|
{ |
|
return false; |
|
} |
|
|
|
if ( m_bTestReport ) |
|
{ |
|
return true; |
|
} |
|
|
|
for ( int iPlayer = 0 ; iPlayer < m_pIncidentData->m_vecPlayers.Count() ; ++iPlayer ) |
|
{ |
|
|
|
AbuseIncidentData_t::PlayerData_t *p = &m_pIncidentData->m_vecPlayers[iPlayer]; |
|
|
|
CPlayerInventory *pInv = InventoryManager()->GetInventoryForAccount( p->m_steamID.GetAccountID() ); |
|
//C_TFPlayer *pTFPlayer = dynamic_cast<C_TFPlayer *> ( UTIL_PlayerByIndex( p->m_iClientIndex ) ); |
|
//if ( pTFPlayer == NULL ) |
|
//{ |
|
// Assert( !p->m_bHasEntity ); |
|
// continue; |
|
//} |
|
//CTFPlayerInventory *pInv = pTFPlayer->Inventory(); |
|
if ( pInv == NULL ) |
|
{ |
|
Warning( "No inventory data for player '%s'; we won't be able to report this person for inappropriate custom images\n", p->m_sPersona.String() ); |
|
continue; |
|
} |
|
|
|
for ( int i = 0 ; i < pInv->GetItemCount() ; ++i) |
|
{ |
|
CEconItemView *pItem = pInv->GetItem( i ); |
|
|
|
// Get custom texture ID, if any |
|
uint64 hCustomtextureID = pItem->GetCustomUserTextureID(); |
|
|
|
// Most items won't have a custom texture |
|
if ( hCustomtextureID == 0 ) |
|
{ |
|
continue; |
|
} |
|
|
|
// Discard duplicates, as it makes the UI confusing |
|
bool bDup = false; |
|
for ( int j = 0 ; j < p->m_vecImages.Count() ; ++j ) |
|
{ |
|
if ( p->m_vecImages[ j ].m_hUGCHandle == hCustomtextureID ) |
|
{ |
|
bDup = true; |
|
break; |
|
} |
|
} |
|
if ( bDup ) |
|
{ |
|
continue; |
|
} |
|
|
|
AbuseIncidentData_t::PlayerImage_t img; |
|
img.m_eType = AbuseIncidentData_t::k_PlayerImageType_UGC; |
|
img.m_hUGCHandle = hCustomtextureID; |
|
p->m_vecImages.AddToTail( img ); |
|
} |
|
} |
|
|
|
// Check if we can report abuse against the game server. |
|
if (m_pIncidentData->m_adrGameServer.IsValid() && |
|
!GTFGCClientSystem()->BIsIPRecentMatchServer( m_pIncidentData->m_adrGameServer ) ) |
|
{ |
|
m_pIncidentData->m_bCanReportGameServer = true; |
|
} |
|
|
|
return true; |
|
} |
|
|
|
void CTFAbuseReportManager::ActivateSubmitReportUI() |
|
{ |
|
Assert( g_AbuseReportDlg.Get() == NULL ); |
|
Assert( m_pIncidentData != NULL ); |
|
|
|
IViewPortPanel *pMMOverride = ( gViewPortInterface->FindPanelByName( PANEL_MAINMENUOVERRIDE ) ); |
|
engine->ExecuteClientCmd("gameui_activate"); |
|
vgui::SETUP_PANEL( new CAbuseReportDlg( (CHudMainMenuOverride*)pMMOverride, m_pIncidentData ) ); |
|
Assert( g_AbuseReportDlg.Get() != NULL ); |
|
g_AbuseReportDlg->MakeModal(); |
|
} |
|
|
|
|