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.
215 lines
6.1 KiB
215 lines
6.1 KiB
//========= 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(); |
|
}
|
|
|