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

📄 exchangemanager.cpp

📁 墨香最新私服
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#include "stdafx.h"
#include "ExchangeManager.h"
#include "Item.h"
#include "GameIn.h"
#include "ExchangeItem.h"
#include "./interface/cWindowManager.h"
#include "WindowIdEnum.h"
#include "cMsgBox.h"
#include "ChatManager.h"
#include "ObjectManager.h"
#include "ItemManager.h"
#include "MoveManager.h"
#include "VimuManager.h"

#include "ExchangeDialog.h"
#include "InventoryExDialog.h"
#include "MainBarDialog.h"
#include "ObjectStateManager.h"
#include "QuickManager.h"

GLOBALTON(CExchangeManager)

CExchangeManager::CExchangeManager()
{
	m_IconIndexCreator.Init(MAX_ITEMICON_NUM, IG_EXCHANGEITEM_STARTINDEX);
	
	m_nLinkedItemNum	= 0;
	m_bLockSyncing		= FALSE;
	m_bExchangeSyncing	= FALSE;
	m_bInventoryActive	= FALSE;
//	m_nExchangeState	= eEXSTT_NONE;
}

CExchangeManager::~CExchangeManager()
{
	m_IconIndexCreator.Release();
}

void CExchangeManager::Init()	//exchangedialog¿¡¼­ active false À϶§ È£ÃâÇÑ´Ù. CONFIRM
{
	m_nLinkedItemNum	= 0;
	m_bLockSyncing		= FALSE;
	m_bExchangeSyncing	= FALSE;
	m_IsExchanging		= FALSE;
}

void CExchangeManager::ExchangeStart()
{
//---±³È¯½Åû»óÅ·Π¸¸µé±â
	HERO->DisableAutoAttack();					//ÀÚµ¿ °ø°Ý Ãë¼Ò
	HERO->SetNextAction(NULL);					//½ºÅ³ Ãë¼Ò
	MOVEMGR->HeroMoveStop();					//Á¦ÀÚ¸® ¸ØÃã ¸Þ¼¼Áö
	OBJECTSTATEMGR->StartObjectState(HERO, eObjectState_Exchange);

	m_IsExchanging = TRUE;
//------------------------
}

void CExchangeManager::ExchangeEnd()
{
	if( HERO->GetState() == eObjectState_Exchange )
		OBJECTSTATEMGR->EndObjectState(HERO, eObjectState_Exchange);

	m_IsExchanging = FALSE;
}

BOOL CExchangeManager::ApplyExchange()
{
#ifdef _TESTCLIENT_
	return FALSE;
#endif
//---±³È¯½Åû °¡´É»óÅÂÀÎÁö üũ
	if( m_IsExchanging  )
	{
		//"ÀÌ¹Ì ±³È¯ ½ÅûÁß ÀÔ´Ï´Ù."
		CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(335) );
		return FALSE;
	}

	if( HERO->GetState() != eObjectState_None && HERO->GetState() != eObjectState_Move &&
		HERO->GetState() != eObjectState_Immortal )
	{
		//"±³È¯ ÇÒ ¼ö ¾ø´Â »óÅÂÀÔ´Ï´Ù."
		CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(336) );
		return FALSE;
	}

	if( VIMUMGR->IsVimuing() )
	{
		CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(336) );
		return FALSE;
	}

	CObject* pOpPlayer = OBJECTMGR->GetSelectedObject();
	if( pOpPlayer == NULL ) 
	{
		//"±³È¯À» ÇϽ÷Á¸é ¸ÕÀú ¿øÇÏ´Â »ó´ë¸¦ ¼±ÅÃÇØ ÁÖ¼¼¿ä."
		CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(338) );
		return FALSE;
	}

	if( pOpPlayer->GetObjectKind() != eObjectKind_Player || pOpPlayer == HERO ) 
	{
		CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(338) );
		return FALSE;
	}
//------------------------------
	
	ExchangeStart();

//---»ó´ë¿¡°Ô ±³È¯½Åû ¸Þ¼¼Áö º¸³»±â
	MSG_DWORD msgApply;
	msgApply.Category	= MP_EXCHANGE;
	msgApply.Protocol	= MP_EXCHANGE_APPLY_SYN;
	msgApply.dwObjectID	= HERO->GetID();
	msgApply.dwData		= pOpPlayer->GetID();
	NETWORK->Send( &msgApply, sizeof( msgApply ) );
//-----------------------------------

	return TRUE;
}

BOOL CExchangeManager::CanAcceptExchange( CPlayer* pAccepter )
{
	if( pAccepter == NULL )					return FALSE;
	if( VIMUMGR->IsVimuing() )				return FALSE;

	if( pAccepter->GetState() != eObjectState_None && pAccepter->GetState() != eObjectState_Move
		&& pAccepter->GetState() != eObjectState_Immortal )
		return FALSE;
	
	return TRUE;	
}

void CExchangeManager::AcceptExchange( BOOL bAccept )
{
	if( bAccept )
	{
		if( CanAcceptExchange( HERO ) )
		{
			ExchangeStart();	//nack¿¡¼­ ÇØÁ¦È®ÀÎ
			
			MSGBASE msgAccept;
			msgAccept.Category		= MP_EXCHANGE;
			msgAccept.dwObjectID	= HERO->GetID();
			msgAccept.Protocol		= MP_EXCHANGE_ACCEPT_SYN;
			NETWORK->Send( &msgAccept, sizeof( msgAccept ) );

			CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(334) );//±³È¯À» ¼ö¶ôÇϼ̽À´Ï´Ù.

		}
		else
		{
			MSGBASE msgError;		//Â÷ÈÄ ¿¡·¯Ã¼Å©¸¦ Ãß°¡ÇÏÀÚ.
			msgError.Category		= MP_EXCHANGE;
			msgError.dwObjectID		= HERO->GetID();
			msgError.Protocol		= MP_EXCHANGE_CANTAPPLY;
			NETWORK->Send( &msgError, sizeof(MSGBASE) );

			m_IsExchanging			 = FALSE;

			CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(336) );//±³È¯ÇÒ ¼ö ¾ø´Â»óÅÂÀÔ´Ï´Ù.
		}
	}
	else
	{
		MSGBASE msgAccept;
		msgAccept.Category		= MP_EXCHANGE;
		msgAccept.dwObjectID	= HERO->GetID();
		msgAccept.Protocol		= MP_EXCHANGE_REJECT_SYN;
		NETWORK->Send( &msgAccept, sizeof( msgAccept ) );

		CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(327) );

		ExchangeEnd();
	}	
}

void CExchangeManager::CancelApply()
{
	MSGBASE msg;

	msg.Category	= MP_EXCHANGE;
	msg.Protocol	= MP_EXCHANGE_WAITING_CANCEL_SYN;
	msg.dwObjectID	= HERO->GetID();

	NETWORK->Send( &msg, sizeof(MSGBASE) );
}

BOOL CExchangeManager::LinkItem( CItem* pItem )
{
	if( pItem->GetType() != WT_ITEM ) return FALSE;		//Àκ¥Å丮 ¾ÆÀÌÅÛÀÌ ¾Æ´Ï¸é return
	//ÀåÂøµÇ¾î ÀÖ´Â ¾ÆÀÌÅÛÀº....¾ÈµÇ´Â°Í Ãß°¡..		//confirm

	if( pItem->GetLinkItem() != NULL ) return FALSE;		//ÀÌ¹Ì ¸µÅ©µÈ ¾ÆÀÌÅÛÀ̸é return
	//¸µÅ©°¡ µÇ¾ú´ÂÁö ¾ÈµÇ¾ú´ÂÁö¸¸ ¾Ë¸é µÇÁö ¾ÊÀ»±î?

	if( m_nLinkedItemNum >= MAX_EXCHANGEITEM ) return FALSE;

	++m_nLinkedItemNum;
	
	pItem->SetLock( TRUE );


	MSG_LINKITEM msg;

	msg.Category	= MP_EXCHANGE;
	msg.Protocol	= MP_EXCHANGE_ADDITEM_SYN;
	msg.dwObjectID	= HERO->GetID();
	msg.ItemInfo	= *pItem->GetItemBaseInfo();
	msg.wAbsPosition = m_nLinkedItemNum;

	NETWORK->Send( &msg, sizeof( MSG_LINKITEM ) );

	return TRUE;
}

void CExchangeManager::UnLinkItem( int nTypeIndex, cIcon* pItem )
{
	if( nTypeIndex == 0 )
	{
		((CExchangeItem*)pItem)->GetLinkItem()->SetLinkPosition( 0 );
		((CExchangeItem*)pItem)->GetLinkItem()->SetLinkItem( NULL );
		((CExchangeItem*)pItem)->GetLinkItem()->SetLock( FALSE );		
	}

	m_IconIndexCreator.ReleaseIndex( pItem->GetID() );
	WINDOWMGR->AddListDestroyWindow( pItem );
}

void CExchangeManager::Lock( BOOL bLock )
{
	MSGBASE msg;
	msg.Category	= MP_EXCHANGE;
	msg.dwObjectID	= HERO->GetID();

	if( bLock )
	{
		msg.Protocol = MP_EXCHANGE_LOCK_SYN;
	}
	else
	{
		msg.Protocol = MP_EXCHANGE_UNLOCK_SYN;
	}

	NETWORK->Send( &msg, sizeof( MSGBASE ) );

	m_bLockSyncing = TRUE;
}


void CExchangeManager::Exchange()
{
	MSGBASE msg;
	msg.Category	= MP_EXCHANGE;
	msg.dwObjectID	= HERO->GetID();
	msg.Protocol	= MP_EXCHANGE_EXCHANGE_SYN;

	NETWORK->Send( &msg, sizeof( MSGBASE ) );
	
	//KES 040801 ±³È¯Áß¿¡ Àκ¥Å丮 »ç¿ë ¸·±â
	ITEMMGR->SetDisableDialog(TRUE, eItemTable_Inventory);

	m_bExchangeSyncing = TRUE;
}


void CExchangeManager::NetworkMsgParse( BYTE Protocol, void* pMsg )
{
	switch(Protocol)
	{
	case MP_EXCHANGE_APPLY:	//»ó´ë°¡ ³ª¿¡°Ô ½ÅûÀ» ÇØ¿Ô´Ù
		{
			MSG_DWORD* msg = (MSG_DWORD*)pMsg;
			CPlayer* pPlayer = (CPlayer*)OBJECTMGR->GetObject( msg->dwData );
			
			ASSERT(pPlayer->GetObjectKind() == eObjectKind_Player);

			if( pPlayer == NULL || m_IsExchanging == TRUE )
			{
				MSGBASE msgReject;
				msgReject.Category		= MP_EXCHANGE;
				msgReject.dwObjectID	= HERO->GetID();
				msgReject.Protocol		= MP_EXCHANGE_CANTAPPLY;
				NETWORK->Send( &msgReject, sizeof(MSGBASE) );

				//¿¡·¯¸Þ¼¼Áö
				CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(336) );	//±³È¯ÇÒ ¼ö ¾ø´Â»óÅÂÀÔ´Ï´Ù.
				break;
			}

			WINDOWMGR->MsgBox( MBI_EXCHANGEAPPLY, MBT_YESNO,
						CHATMGR->GetChatMsg(321), pPlayer->GetObjectName() );

			m_IsExchanging = TRUE;
		}
		break;

	case MP_EXCHANGE_APPLY_ACK:
		{
			MSG_DWORD* msg = (MSG_DWORD*)pMsg;
			CPlayer* pPlayer = (CPlayer*)OBJECTMGR->GetObject( msg->dwData );
			if( pPlayer == NULL )	//CHECK ±³È¯»ó´ë¸¦ ãÀ» ¼ö ¾ø´Ù?
			{
				//±³È¯ ½ÅûÀ» ¼öÇàÇÏÁö ¸øÇÏ¿´½À´Ï´Ù.
				ExchangeEnd();
				break;
			}
			ASSERT(pPlayer->GetObjectKind() == eObjectKind_Player);

			CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(322), pPlayer->GetObjectName() );

			cMsgBox* pMsgBox = WINDOWMGR->MsgBox( MBI_EXCHANGEWAITING, MBT_CANCEL, CHATMGR->GetChatMsg(337) );
			if( pMsgBox )
				pMsgBox->SetDefaultBtn(-1);	//µðÆúÆ® ¹öư ¾ø´Ù.
		}
		break;

	case MP_EXCHANGE_APPLY_NACK:
		{			
			CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(323) );
			ExchangeEnd();
		}
		break;

	case MP_EXCHANGE_ACCEPT_NACK:
		{
			MSGBASE* msg = (MSGBASE*)pMsg;

			CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(326) );			
			ExchangeEnd();
		}
		break;

	case MP_EXCHANGE_ACCEPT:
		{
			MSG_DWORD* msg = (MSG_DWORD*)pMsg;
			CPlayer* pPlayer = (CPlayer*)OBJECTMGR->GetObject( msg->dwData );
			if( pPlayer == NULL ) return;

			ASSERT(pPlayer->GetObjectKind() == eObjectKind_Player);

			CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(324), pPlayer->GetObjectName() );

			cDialog* pDlg = WINDOWMGR->GetWindowForID( MBI_EXCHANGEWAITING );
			if( pDlg )
				WINDOWMGR->AddListDestroyWindow( pDlg );
		}
		break;

	case MP_EXCHANGE_REJECT:
		{
			MSGBASE* msg = (MSGBASE*)pMsg;

			ExchangeEnd();
			
			cDialog* pDlg = WINDOWMGR->GetWindowForID( MBI_EXCHANGEWAITING );
			if( pDlg )
				WINDOWMGR->AddListDestroyWindow( pDlg );

			CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(326) );
		}
		break;

	case MP_EXCHANGE_CANTAPPLY:
		{
			MSGBASE* msg = (MSGBASE*)pMsg;

			ExchangeEnd();

			cDialog* pDlg = WINDOWMGR->GetWindowForID( MBI_EXCHANGEWAITING );
			if( pDlg )
				WINDOWMGR->AddListDestroyWindow( pDlg );

			CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(323) );
			//315 °Å¸®°¡ ³Ê¹« ¸Ö¾î ±³È¯ÇÒ ¼ö ¾ø½À´Ï´Ù.
		}
		break;

	case MP_EXCHANGE_WAITING_CANCEL:
		{
			ExchangeEnd();
			

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -