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.
216 lines
6.1 KiB
216 lines
6.1 KiB
![]()
4 years ago
|
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||
|
//
|
||
|
// Purpose: Disconnect prompt to warn leavers of penalty they will incur
|
||
|
//
|
||
|
// $NoKeywords: $
|
||
|
//=============================================================================
|
||
|
#include "cbase.h"
|
||
|
#include "tf_hud_disconnect_prompt.h"
|
||
|
#include "econ_controls.h"
|
||
|
#include "tf_gc_client.h"
|
||
|
#include "tf_gamerules.h"
|
||
|
|
||
|
using namespace vgui;
|
||
|
|
||
|
CTFDisconnectConfirmDialog::CTFDisconnectConfirmDialog(
|
||
|
const char *pTitle,
|
||
|
const char *pTextKey,
|
||
|
const char *pConfirmBtnText,
|
||
|
const char *pCancelBtnText,
|
||
|
GenericConfirmDialogCallback callback,
|
||
|
vgui::Panel *pParent
|
||
|
) : CTFGenericConfirmDialog( pTitle, pTextKey, pConfirmBtnText, pCancelBtnText, callback, pParent )
|
||
|
{
|
||
|
m_eAbandonStatus = GTFGCClientSystem()->GetCurrentServerAbandonStatus();
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
//-----------------------------------------------------------------------------
|
||
|
const char *CTFDisconnectConfirmDialog::GetResFile()
|
||
|
{
|
||
|
switch ( m_eAbandonStatus )
|
||
|
{
|
||
|
case k_EAbandonGameStatus_Safe:
|
||
|
return "Resource/UI/econ/ConfirmDialogAbandonSafe.res";
|
||
|
case k_EAbandonGameStatus_AbandonWithoutPenalty:
|
||
|
return "Resource/UI/econ/ConfirmDialogAbandonNoPenalty.res";
|
||
|
case k_EAbandonGameStatus_AbandonWithPenalty:
|
||
|
return "Resource/UI/econ/ConfirmDialogAbandonPenalty.res";
|
||
|
}
|
||
|
|
||
|
return "Resource/UI/econ/ConfirmDialogOptOut.res";
|
||
|
}
|
||
|
|
||
|
void CTFDisconnectConfirmDialog::SetReason( eDisconnectReason reason )
|
||
|
{
|
||
|
m_eReason = reason;
|
||
|
}
|
||
|
|
||
|
void CTFDisconnectConfirmDialog::OnCommand( const char *command )
|
||
|
{
|
||
|
if( FStrEq( command, "confirm" ) )
|
||
|
{
|
||
|
// Check this before disconnecting
|
||
|
if ( GTFGCClientSystem()->BExitMatchmakingAfterDisconnect() )
|
||
|
{
|
||
|
GTFGCClientSystem()->EndMatchmaking( true );
|
||
|
}
|
||
|
|
||
|
engine->DisconnectInternal();
|
||
|
|
||
|
int nCount = m_confirmCommands.Count();
|
||
|
for( int i=0; i<nCount; ++i )
|
||
|
{
|
||
|
engine->ClientCmd_Unrestricted( m_confirmCommands[i] );
|
||
|
}
|
||
|
}
|
||
|
else if( FStrEq( command, "cancel" ) )
|
||
|
{
|
||
|
int nCount = m_cancelCommands.Count();
|
||
|
for( int i=0; i<nCount; ++i )
|
||
|
{
|
||
|
engine->ClientCmd_Unrestricted( m_cancelCommands[i] );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// This will clean us up if we get a cancel or confirm command
|
||
|
BaseClass::OnCommand( command );
|
||
|
}
|
||
|
|
||
|
|
||
|
void CTFDisconnectConfirmDialog::AddConfirmCommand( const char *command )
|
||
|
{
|
||
|
m_confirmCommands.AddToTail( command );
|
||
|
}
|
||
|
|
||
|
|
||
|
void CTFDisconnectConfirmDialog::AddCancelCommand( const char *command )
|
||
|
{
|
||
|
m_cancelCommands.AddToTail( command );
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// Extern Helper to Build Dialog
|
||
|
CTFDisconnectConfirmDialog *BuildDisconnectConfirmDialog ()
|
||
|
{
|
||
|
EAbandonGameStatus eAbandonStatus = GTFGCClientSystem()->GetCurrentServerAbandonStatus();
|
||
|
const char* pszTitle = NULL;
|
||
|
const char* pszBody = NULL;
|
||
|
const char* pszConfirm = NULL;
|
||
|
|
||
|
switch ( eAbandonStatus )
|
||
|
{
|
||
|
case k_EAbandonGameStatus_Safe:
|
||
|
pszTitle = "#TF_MM_Disconnect_Title";
|
||
|
pszBody = "#TF_MM_Disconnect";
|
||
|
pszConfirm = "#TF_MM_Rejoin_Leave";
|
||
|
break;
|
||
|
case k_EAbandonGameStatus_AbandonWithoutPenalty:
|
||
|
pszTitle = "#TF_MM_Abandon_Title";
|
||
|
pszBody = "#TF_MM_Abandon_NoPenalty";
|
||
|
pszConfirm = "#TF_MM_Rejoin_Leave";
|
||
|
break;
|
||
|
case k_EAbandonGameStatus_AbandonWithPenalty:
|
||
|
pszTitle = "#TF_MM_Abandon_Title";
|
||
|
pszBody = ( TFGameRules() && TFGameRules()->IsMannVsMachineMode() ) ? "TF_MM_Abandon_Ban" : "#TF_MM_Abandon";
|
||
|
pszConfirm = "#TF_MM_Rejoin_Abandon";
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
CTFDisconnectConfirmDialog *pDialog = vgui::SETUP_PANEL( new CTFDisconnectConfirmDialog(
|
||
|
pszTitle,
|
||
|
pszBody,
|
||
|
pszConfirm,
|
||
|
"#TF_MM_Rejoin_Stay",
|
||
|
NULL,
|
||
|
NULL ) );
|
||
|
|
||
|
return pDialog;
|
||
|
}
|
||
|
|
||
|
// sent from quit and disconnect attempts
|
||
|
CON_COMMAND( cl_disconnect_prompt, "Prompt about disconnect" )
|
||
|
{
|
||
|
CTFDisconnectConfirmDialog *pDialog = vgui::SETUP_PANEL( new CTFDisconnectConfirmDialog( "#TF_MM_Abandon_Title",
|
||
|
"#TF_MM_Abandon",
|
||
|
"#TF_Coach_Yes",
|
||
|
"#TF_Coach_No",
|
||
|
NULL,
|
||
|
NULL ) );
|
||
|
|
||
|
if ( pDialog )
|
||
|
{
|
||
|
pDialog->Show();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
bool HandleDisconnectAttempt()
|
||
|
{
|
||
|
// !FIXME! We could show different messages depending on the abandon status
|
||
|
|
||
|
if( engine->IsInGame() && GameRules() && GameRules()->ShouldConfirmOnDisconnect() &&
|
||
|
GTFGCClientSystem()->GetCurrentServerAbandonStatus() == k_EAbandonGameStatus_AbandonWithPenalty )
|
||
|
{
|
||
|
CTFDisconnectConfirmDialog *pDialog = vgui::SETUP_PANEL( new CTFDisconnectConfirmDialog( "#TF_MM_Abandon_Title",
|
||
|
"#TF_MM_Abandon",
|
||
|
"#TF_Coach_Yes",
|
||
|
"#TF_Coach_No",
|
||
|
NULL,
|
||
|
NULL ) );
|
||
|
|
||
|
if ( pDialog )
|
||
|
{
|
||
|
pDialog->Show();
|
||
|
}
|
||
|
|
||
|
// The disconnect was handled by us. Stop the engine from handling it.
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
// We're not changing the disconnect behavior in any way. Let the engine take care of it.
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// CTFRejoinConfirmDialog
|
||
|
//-----------------------------------------------------------------------------
|
||
|
CTFRejoinConfirmDialog::CTFRejoinConfirmDialog(
|
||
|
const char *pTitle,
|
||
|
const char *pTextKey,
|
||
|
const char *pConfirmBtnText,
|
||
|
const char *pCancelBtnText,
|
||
|
GenericConfirmDialogCallback callback,
|
||
|
vgui::Panel *pParent
|
||
|
) : CTFGenericConfirmDialog( pTitle, pTextKey, pConfirmBtnText, pCancelBtnText, callback, pParent )
|
||
|
{
|
||
|
m_eAbandonStatus = GTFGCClientSystem()->GetAssignedMatchAbandonStatus();
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
//-----------------------------------------------------------------------------
|
||
|
const char *CTFRejoinConfirmDialog::GetResFile()
|
||
|
{
|
||
|
switch ( m_eAbandonStatus )
|
||
|
{
|
||
|
case k_EAbandonGameStatus_Safe:
|
||
|
return "Resource/UI/econ/ConfirmDialogAbandonSafe.res";
|
||
|
case k_EAbandonGameStatus_AbandonWithoutPenalty:
|
||
|
return "Resource/UI/econ/ConfirmDialogAbandonNoPenalty.res";
|
||
|
case k_EAbandonGameStatus_AbandonWithPenalty:
|
||
|
return "Resource/UI/econ/ConfirmDialogAbandonPenalty.res";
|
||
|
}
|
||
|
|
||
|
return "Resource/UI/econ/ConfirmDialogOptOut.res";
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void CTFRejoinConfirmDialog::CloseRejoinWindow()
|
||
|
{
|
||
|
FinishUp();
|
||
|
}
|