📄 exchangemanager.cpp
字号:
#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 + -