📄 exitmanager.cpp
字号:
// ExitManager.cpp: implementation of the CExitManager class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "ExitManager.h"
#include "ChatManager.h"
#include "ObjectManager.h"
#include "ObjectStateManager.h"
#include "MoveManager.h"
#include "WindowIDEnum.h"
#include "./Interface/cWindowManager.h"
#include "cMsgBox.h"
#include "MainGame.h"
#include "PKManager.h"
#include "MHTimeManager.h"
extern HWND _g_hWnd;
GLOBALTON(CExitManager);
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CExitManager::CExitManager()
{
m_bExitProcessing = FALSE;
m_dwStartTime = 0;
m_nExitCount = EXIT_COUNT;
m_nCount = 0;
m_bExitSync = FALSE;
}
CExitManager::~CExitManager()
{
}
int CExitManager::CanExit()
{
if( HERO->IsPKMode() ) //PK葛靛吝浚 辆丰且 荐 绝嚼聪促.
return eEXITCODE_PKMODE;
if( PKMGR->IsPKLooted() ) //PK风泼阑 寸窍绰 吝俊绰 辆丰且 荐 绝促.
return eEXITCODE_LOOTING;
if( HERO->GetState() == eObjectState_Exchange ) //背券吝浚 辆丰且 荐 绝促.
return eEXITCODE_NOT_ALLOW_STATE;
if( HERO->GetState() == eObjectState_StreetStall_Owner ||
HERO->GetState() == eObjectState_StreetStall_Guest ) //畴痢吝浚 辆丰且 荐 绝促.
return eEXITCODE_NOT_ALLOW_STATE;
if( HERO->GetState() == eObjectState_Deal ) //惑痢 捞侩吝浚 辆丰且 荐 绝促.
return eEXITCODE_NOT_ALLOW_STATE;
return eEXITCODE_OK;
}
BOOL CExitManager::SendExitMsg( int nExitKind )
{
if( m_bExitSync || m_bExitProcessing ) return FALSE;
m_nExitKind = nExitKind;
m_bExitSync = TRUE;
////
HERO->DisableAutoAttack(); //磊悼 傍拜 秒家
HERO->SetNextAction(NULL); //胶懦 秒家
MOVEMGR->HeroMoveStop(); //捞悼肛勉
OBJECTSTATEMGR->StartObjectState( HERO, eObjectState_Exit );
////
MSGBASE msg;
msg.Category = MP_CHAR;
msg.Protocol = MP_CHAR_EXITSTART_SYN;
msg.dwObjectID = HEROID;
NETWORK->Send( &msg, sizeof(msg) );
return TRUE;
}
void CExitManager::StartExit() //Start_Ack
{
//m_bExitSync = FALSE; //咯扁急 false肺 父甸瘤 臼绰促. 墨款飘场唱绊靖
m_bExitProcessing = TRUE;
DWORD dwCurTime = MHTIMEMGR->GetNewCalcCurTime();
m_dwStartTime = dwCurTime - 1000; //矫累窍磊付磊 墨款飘甫 窍扁困秦辑 -1000
m_nCount = m_nExitCount;
}
void CExitManager::RejectExit( int nExitCode ) //Start_Nack
{
m_bExitSync = FALSE;
OBJECTSTATEMGR->EndObjectState( HERO, eObjectState_Exit );
switch( nExitCode )
{
case eEXITCODE_PKMODE:
CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(552) ); // "混扁甫 靛矾辰 惑怕俊辑绰 辆丰且 荐 绝嚼聪促."
break;
case eEXITCODE_LOOTING:
CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(553) ); //"风泼阑 寸窍绰 吝俊绰 辆丰且 荐 绝嚼聪促."
break;
default:
CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(554) ); //"辆丰且 荐 绝绰 惑怕涝聪促."
break;
}
}
void CExitManager::Exit()
{
if( m_nExitKind == eEK_GAMEEXIT )
{
// MAINGAME->SetGameState( eGAMESTATE_END );
WINDOWMGR->MsgBox( MBI_NOBTNMSGBOX, MBT_NOBTN, CHATMGR->GetChatMsg( 307 ) );
PostMessage( _g_hWnd, WM_CLOSE, NULL, NULL );
}
else if( m_nExitKind == eEK_CHARSEL )
{
MSGBASE data;
data.Category = MP_USERCONN;
data.Protocol = MP_USERCONN_BACKTOCHARSEL_SYN;
data.dwObjectID = HEROID;
NETWORK->Send(&data,sizeof(data));
WINDOWMGR->MsgBox( MBI_NOBTNMSGBOX, MBT_NOBTN, CHATMGR->GetChatMsg( 290 ) );
//MP_USERCONN_CHARACTERLIST_ACK啊 坷搁 某腐急琶芒栏肺 埃促...
}
m_bExitSync = FALSE; //犬角窍霸 窍妨搁....?
}
void CExitManager::CancelExit( int nErrorCode ) //磷芭唱 扁鸥夸牢俊 狼秦辑 秒家凳
{
m_bExitProcessing = FALSE;
m_bExitSync = FALSE;
OBJECTSTATEMGR->EndObjectState( HERO, eObjectState_Exit );
switch( nErrorCode )
{
case eEXITCODE_PKMODE:
CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(552) );
break;
case eEXITCODE_LOOTING:
CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(553) );
break;
case eEXITCODE_SPEEDHACK:
CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(556) );
break;
case eEXITCODE_DIEONEXIT:
CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(555) );
break;
default:
CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(554) );
break;
}
}
void CExitManager::Process()
{
if( !m_bExitProcessing || !m_bExitSync ) return;
if( gCurTime - m_dwStartTime >= 1000 ) //1檬付促 眉农
{
m_dwStartTime += 1000;
if( m_nCount <= 0 )
{
m_bExitProcessing = FALSE;
MSGBASE msg;
msg.Category = MP_CHAR;
msg.Protocol = MP_CHAR_EXIT_SYN;
msg.dwObjectID = HEROID;
NETWORK->Send( &msg, sizeof(msg) );
}
else
{
if( m_nExitKind == eEK_GAMEEXIT )
CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg( 540 ), m_nCount );
else if( m_nExitKind == eEK_CHARSEL )
CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg( 541 ), m_nCount );
}
--m_nCount; //墨款飘促款
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -