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

📄 dissolutiondialog.cpp

📁 墨香最新私服
💻 CPP
字号:
// DissolutionDialog.cpp: implementation of the CDissolutionDialog class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "DissolutionDialog.h"
#include "./Interface/cIconGridDialog.h"
#include "WindowIDEnum.h"
#include "./Interface/cScriptManager.h"
#include "Item.h"
#include "ItemManager.h"
#include "DissolutionManager.h"
#include "./Interface/cIconDialog.h"
#include "./Interface/cIconGridDialog.h"
#include "ObjectManager.h"
#include "GameIn.h"
#include "InventoryExDialog.h"
#include "ChatManager.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CDissolutionDialog::CDissolutionDialog()
{
	m_pDissolutionItemDlg	= NULL;
	m_pUnitItemDlg[0]		= NULL;
	m_pUnitItemDlg[1]		= NULL;
	m_pUnitItemDlg[2]		= NULL;
	
	cImage imgToolTip;
	SCRIPTMGR->GetImage( 63, &imgToolTip, PFT_HARDPATH );

	m_VirtualDissolutionItem.SetToolTip( "", RGB_HALF( 255, 255, 255), &imgToolTip );
	m_VirtualDissolutionItem.SetMovable(FALSE);

	for(int i = 0 ; i < MAX_DISSOLUTION_UNITNUM ; ++i)
	{
		m_ShowUnitItem[i].SetToolTip( "", RGB_HALF( 255, 255, 255), &imgToolTip );
		m_ShowUnitItem[i].SetMovable(FALSE);
	}

	m_nTotalUnitOutNum	= 0;
	ZeroMemory( &m_CheckItemInfo, sizeof(m_CheckItemInfo) );
}

CDissolutionDialog::~CDissolutionDialog()
{

}

void CDissolutionDialog::Add( cWindow* window )
{
	if( window->GetType() == WT_PUSHUPBUTTON )
		AddTabBtn( curIdx1++, (cPushupButton * )window );
	else if( window->GetType() == WT_ICONGRIDDIALOG )
	{
		AddTabSheet( curIdx2++, window );
		((cIconGridDialog*)window)->SetDragOverIconType( WT_ITEM );
	}
	else 
		cDialog::Add(window);
}

void CDissolutionDialog::Linking()
{
	m_pDissolutionItemDlg	= (cIconDialog*)GetWindowForID(DIS_BASEICONDLG);
	m_pUnitItemDlg[0]		= (cIconGridDialog*)GetWindowForID(DIS_ICONGRIDDLG1);
	m_pUnitItemDlg[1]		= (cIconGridDialog*)GetWindowForID(DIS_ICONGRIDDLG2);
	m_pUnitItemDlg[2]		= (cIconGridDialog*)GetWindowForID(DIS_ICONGRIDDLG3);
}

void CDissolutionDialog::Render()
{
	cDialog::RenderWindow();
	cDialog::RenderComponent();	
	cTabDialog::RenderTabComponent();
}

DWORD CDissolutionDialog::ActionEvent( CMouse* mouseInfo )
{
	DWORD we = WE_NULL;

	we |= cTabDialog::ActionEvent( mouseInfo );

	return we;
}

void CDissolutionDialog::SetActive( BOOL val )
{
	if( m_bDisable ) return;

	if( val == FALSE )
	{
		RemoveDissolutionItem();
		RemoveAllUnitItems();
	}

	cTabDialog::SetActive(val);
}

void CDissolutionDialog::OnActionEvent( LONG lId, void * p, DWORD we )
{
	if( lId == DIS_OKBTN )
	{
		SendMsg_Dissolution();
	}
	else if( lId == DIS_CANCELBTN )
	{
		SetActive( FALSE );
	}

	return;
}

BOOL CDissolutionDialog::FakeMoveIcon( LONG x, LONG y, cIcon * icon )
{
	if( m_bDisable )					return FALSE;
	if( icon == NULL )					return FALSE;
	if( icon->GetType() != WT_ITEM )	return FALSE;

	CItem* pOrigItem = (CItem*)icon;
	if( pOrigItem->IsLocked() )			return FALSE;

	// 牢亥配府捞寇俊 酒捞袍 FALSE
	if( !ITEMMGR->IsEqualTableIdxForPos( eItemTable_Inventory, pOrigItem->GetPosition() ) )
		return FALSE;

	//碍拳 酒捞袍捞搁 救凳
	if( ITEMMGR->IsOptionItem( pOrigItem->GetItemIdx(), pOrigItem->GetDurability() ) )
	{
		CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(689) );	//"碍拳等 酒捞袍篮 盒秦 且 荐 绝嚼聪促."
		return FALSE;
	}
	
	//府胶飘俊 乐绰瘤 犬牢
	if( !DISSOLUTIONMGR->CanDissolutionItem( pOrigItem->GetItemIdx() ) )
	{
		CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(690) );	//"盒秦且 荐 绝绰 酒捞袍 涝聪促."
		return FALSE;
	}

	//扁粮俊 棵扼客 乐带 酒捞袍阑 瘤款促.
	RemoveDissolutionItem();
	RemoveAllUnitItems();

	//酒捞袍阑 棵赴促.
	AddDissolutionItem( pOrigItem );

	return FALSE;
}

CVirtualItem* CDissolutionDialog::GetDissolutionVirtualItem()
{
	 return (CVirtualItem*)m_pDissolutionItemDlg->GetIconForIdx(0);
}

CItem* CDissolutionDialog::GetDissolutionInventoryItem()
{
	 CVirtualItem* pVItem = (CVirtualItem*)m_pDissolutionItemDlg->GetIconForIdx(0);
	 if( pVItem == NULL ) return NULL;

	 return (CItem*)pVItem->GetLinkItem();
}

void CDissolutionDialog::AddDissolutionItem( CItem* pOrigItem )
{
	if( m_pDissolutionItemDlg->AddIcon( 0, &m_VirtualDissolutionItem ) )
	{
		m_nTotalUnitOutNum = 0;

		if( ShowUnitItems( pOrigItem->GetItemIdx() ) )
		{
			m_VirtualDissolutionItem.SetData( pOrigItem->GetItemIdx() );
			m_VirtualDissolutionItem.SetLinkItem( pOrigItem );
			if( ITEMMGR->IsOptionItem( pOrigItem->GetItemIdx(), pOrigItem->GetDurability() ) )
				ITEMMGR->SetToolTipIcon( &m_VirtualDissolutionItem, ITEMMGR->GetItemOption( pOrigItem->GetDurability() ) );
			else
				ITEMMGR->SetToolTipIcon( &m_VirtualDissolutionItem );

			pOrigItem->SetLock( TRUE );

			m_CheckItemInfo = *pOrigItem->GetItemBaseInfo();
		}
		else
		{
			//error
			RemoveDissolutionItem();
			RemoveAllUnitItems();
		}
	}
}

void CDissolutionDialog::RemoveDissolutionItem()
{
	CVirtualItem* pVItem = NULL;
	m_pDissolutionItemDlg->DeleteIcon( 0, (cIcon**)&pVItem );
	if( pVItem == NULL )
		return;
	pVItem->SetLinkItem(NULL);

	CItem* pOrigItem = ITEMMGR->GetItem( m_CheckItemInfo.dwDBIdx );
	ZeroMemory( &m_CheckItemInfo, sizeof(m_CheckItemInfo) );
	
	m_nTotalUnitOutNum = 0;
	if( pOrigItem == NULL ) return;
	pOrigItem->SetLock( FALSE );
}

BOOL CDissolutionDialog::ShowUnitItems( WORD wDissolutionItemIdx )
{
	WORD wUnitKindNum = 0;
	sITEM_DISSOLUTIONITEM* pUnitInfo = DISSOLUTIONMGR->GetDissolutionUnitItemInfo( wDissolutionItemIdx, &wUnitKindNum );
	if( pUnitInfo == NULL )
		return FALSE;
	
	if( wUnitKindNum > MAX_DISSOLUTION_UNITNUM ) return FALSE;		//辆幅啊 沫焊促 腹阑 荐绰 绝促.

	for( int i = 0 ; i < wUnitKindNum ; ++i )
	{
		WORD tempUnitItemIdx = pUnitInfo[i].wUnitItemIdx;
		WORD tempUnitItemNum = pUnitInfo[i].wUnitItemNum;

		if( tempUnitItemIdx == 0 || tempUnitItemNum == 0 ) return FALSE;

		//咯扁辑 父距 酒捞袍捞 盒秦且 荐 乐绰 酒捞袍捞搁 肚茄锅 盒秦茄促.
		eITEM_KINDBIT eItemKind = GetItemKind( tempUnitItemIdx );
		if( !(eItemKind & eEXTRA_ITEM) )
		{
			if( ShowUnitItems( tempUnitItemIdx ) == TRUE )	//盒秦登搁 酒贰啊 鞘夸绝促.
				continue;			
		}
		
		while( tempUnitItemNum > 0 )
		{
			if( m_nTotalUnitOutNum >= MAX_DISSOLUTION_UNITNUM ) return FALSE;	//=档 等促.

			if( m_pUnitItemDlg[m_nTotalUnitOutNum/MAX_UNIT_PERTAB]->AddIcon( m_nTotalUnitOutNum%MAX_UNIT_PERTAB, (cIcon*)&m_ShowUnitItem[m_nTotalUnitOutNum] ) )
			{
				m_ShowUnitItem[m_nTotalUnitOutNum].SetData( tempUnitItemIdx );

				if( tempUnitItemNum > 5 )
				{
					m_ShowUnitItem[m_nTotalUnitOutNum].Init( tempUnitItemIdx, 5 );
					tempUnitItemNum -= 5;	//while(tempUnitItemNum>5) 捞骨栏肺 0焊促 累酒龙 荐绰 绝促.
				}
				else
				{
					m_ShowUnitItem[m_nTotalUnitOutNum].Init( tempUnitItemIdx, tempUnitItemNum );
					tempUnitItemNum = 0;
				}

				ITEMMGR->SetToolTipIcon( &m_ShowUnitItem[m_nTotalUnitOutNum] );		
				++m_nTotalUnitOutNum;
			}
			else
			{
				//error
				//棵扼埃 showitem甸 瘤快扁
				return FALSE;
			}
		}
	}

	if( m_nTotalUnitOutNum > MAX_DISSOLUTION_UNITNUM ) return FALSE;	//=捞 酒聪促.

	return TRUE;
}


void CDissolutionDialog::RemoveAllUnitItems()
{
	CItemShow* pSItem = NULL;

	for( int i = 0 ; i < MAX_DISSOLUTION_UNITNUM ; ++i )
	{
		m_pUnitItemDlg[i/MAX_UNIT_PERTAB]->DeleteIcon( i%MAX_UNIT_PERTAB, (cIcon**)&pSItem );
		if( pSItem != NULL )
		{
			m_ShowUnitItem[i].SetData( 0 );
			m_ShowUnitItem[i].Init( 0, 0 );
		}
	}
}

BOOL CDissolutionDialog::SendMsg_Dissolution()
{
	const ITEMBASE* pInventoryItemInfo = ITEMMGR->GetItemInfoAbsIn( HERO, m_CheckItemInfo.Position );
	CItem* pItem = GetDissolutionInventoryItem();
	if( pInventoryItemInfo == NULL || pItem == NULL )
	{
		//酒捞袍 沥焊啊 促辅聪促.
		return FALSE;
	}

	const ITEMBASE* pDissolutionItemInfo = pItem->GetItemBaseInfo();

	if( pDissolutionItemInfo->dwDBIdx != pInventoryItemInfo->dwDBIdx ||
		pDissolutionItemInfo->wIconIdx != pInventoryItemInfo->wIconIdx ||
		pDissolutionItemInfo->Position != pInventoryItemInfo->Position ||
		pDissolutionItemInfo->Durability != pInventoryItemInfo->Durability ||
		pDissolutionItemInfo->QuickPosition != pInventoryItemInfo->QuickPosition )
	{
		//酒捞袍 沥焊啊 促辅聪促.
		return FALSE;
	}

	//酒捞袍 甸绢哎 傍埃阑 犬牢窍磊
	int nBlankNum = GAMEIN->GetInventoryDialog()->GetBlankNum();
	if( m_nTotalUnitOutNum > nBlankNum )
	{
		CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(691) );//牢亥配府 傍埃捞 何练窍咯 盒秦且 荐 绝嚼聪促.
		return FALSE;
	}
	
	SetDisable( TRUE );
	ITEMMGR->SetDisableDialog( TRUE, eItemTable_Inventory );

	MSG_ITEM msg;
	msg.Category	= MP_ITEM;
	msg.Protocol	= MP_ITEM_DISSOLUTION_SYN;
	msg.dwObjectID	= HEROID;
	msg.ItemInfo	= *pInventoryItemInfo;
	NETWORK->Send( &msg, sizeof(msg) );

	return TRUE;
}


void CDissolutionDialog::EndDissolution( BOOL bSuccess )
{
	SetDisable( FALSE );
	ITEMMGR->SetDisableDialog( FALSE, eItemTable_Inventory );

	if( bSuccess )
	{
		//林狼 : 酒贰肺 郴府瘤付矫坷. m_CheckItemInfo 檬扁拳登搁 救凳.
		ITEMMGR->DeleteItemofTable( eItemTable_Inventory, m_CheckItemInfo.Position );
		//扁粮俊 棵扼客 乐带 酒捞袍阑 瘤款促.
		RemoveDissolutionItem();
		RemoveAllUnitItems();
	}
	else
	{
		
	}
}

⌨️ 快捷键说明

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