⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 exitmanager.cpp

📁 墨香最新私服
💻 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 + -