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

📄 munpawarehousedialog.cpp

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

#include "stdafx.h"
#include "MunpaWarehouseDialog.h"
#include "WindowIDEnum.h"
#include "ItemManager.h"
#include "ChatManager.h"
#include "GameIn.h"
#include "MunpaWareIconGridDialog.h"
#include "cDivideBox.h"
#include "./Interface/cWindowManager.h"
#include "./Interface/cPushupButton.h"
#include "./Input/Mouse.h"
#include "./Interface/cEditBox.h"

#include "MunpaDialog.h"
#include "InventoryExDialog.h"
#include "PyogukDialog.h"
#include "./Input/UserInput.h"
#include "ObjectManager.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CMunpaWarehouseDialog::CMunpaWarehouseDialog()
{
	m_type = WT_MUNPAWAREHOUSEDLG;
}

CMunpaWarehouseDialog::~CMunpaWarehouseDialog()
{
}

void CMunpaWarehouseDialog::Init(LONG x, LONG y, WORD wid, WORD hei, cImage * basicImage, LONG ID)
{
	cDialog::Init(x,y,wid,hei,basicImage,ID);
	m_type = WT_MUNPAWAREHOUSEDLG;

}

void CMunpaWarehouseDialog::Linking()
{
	for(BYTE n=0;n<m_bTabNum;++n)
	{
		((CMunpaWareIconGridDialog*)GetTabSheet(n))->SetTabNum(n);
	}
}

void CMunpaWarehouseDialog::SetActive(BOOL val)
{
	if(m_bActive == FALSE && val == TRUE)
		SelectTab(0);
	if(val == FALSE)
	{
		cDivideBox * pDivideBox = (cDivideBox *)WINDOWMGR->GetWindowForID( DBOX_INPUT_MONEY );
		if( pDivideBox )
		{
			pDivideBox->SetDisable(TRUE);
			pDivideBox->SetActive(FALSE);
			WINDOWMGR->AddListDestroyWindow( pDivideBox );
		}
	}
	cTabDialog::SetActive(val);
}

DWORD CMunpaWarehouseDialog::ActionEvent(CMouse * mouseInfo)
{
	return cTabDialog::ActionEvent(mouseInfo);
}

void CMunpaWarehouseDialog::Add(cWindow * window)
{
	if(window->GetType() == WT_PUSHUPBUTTON)
		AddTabBtn(curIdx1++, (cPushupButton * )window);
	else if(window->GetType() == WT_MUNPAWAREICONGRIDDIALOG)
		AddTabSheet(curIdx2++, window);
	else 
		cDialog::Add(window);
}

BOOL CMunpaWarehouseDialog::InitItem(MUNPA_WAREHOUSE_ITEM_INFO * pItemTotalInfo )
{
	for(int n=0;n<TABCELL_MUNPAWAREHOUSE_NUM;++n)
	{
		if(pItemTotalInfo->WarehouseItem[n].dwDBIdx == 0)
			continue;

		AddItem(&pItemTotalInfo->WarehouseItem[n]);
	}

	return TRUE;
}

BOOL CMunpaWarehouseDialog::AddItem(ITEMBASE* pItemInfo)
{
	if(pItemInfo->dwDBIdx == 0)
	{
		ASSERTMSG(0,"巩颇芒绊-酒捞袍 叼厚牢郸胶啊 0. Invalid MunpaWarehouse Index.");
		return FALSE;
	}
	CItem* pItem = ITEMMGR->MakeNewItem(pItemInfo,"CMunpaWarehouseDialog::AddItem");
	ASSERT(pItem);

	return AddItem(pItem);
}

BOOL CMunpaWarehouseDialog::AddItem(CItem* pItem)
{
	ITEMMGR->RefreshItem(pItem);
	POSTYPE relPos = GetRelativePosition(pItem->GetPosition());
	int tabIndex = GetTabIndex( pItem->GetPosition() );
	cIconGridDialog * dlg = (cIconGridDialog *)GetTabSheet(tabIndex);
	return dlg->AddIcon(relPos, pItem);
}

BOOL CMunpaWarehouseDialog::DeleteItem(POSTYPE Pos,CItem** ppItem)
{
	int TabIndex = GetTabIndex( Pos );
	cIconGridDialog * Dlg = (cIconGridDialog *)GetTabSheet(TabIndex);
	if(!Dlg->IsAddable(Pos - TP_MUNPAWAREHOUSE_START-TABCELL_MUNPAWAREHOUSE_NUM*TabIndex))
		return Dlg->DeleteIcon(Pos-TP_MUNPAWAREHOUSE_START-TABCELL_MUNPAWAREHOUSE_NUM*TabIndex, (cIcon **)ppItem);
	else
		return FALSE;

}

BOOL CMunpaWarehouseDialog::FakeMoveIcon(LONG x, LONG y, cIcon * icon)
{	
	ASSERT(icon);
	
	CMunpaDialog* pDlg = GAMEIN->GetMunpaDialog();
	DWORD MunpaID = pDlg->GetMunpaID();
	if(icon->GetType() == WT_ITEM)
	{
		FakeMoveItem(x, y, (CItem *)icon, MunpaID);
	}
	return FALSE;
}

void CMunpaWarehouseDialog::FakeMoveItem(LONG mouseX, LONG mouseY, CItem * pFromItem, DWORD MunpaID)
{
	WORD ToPos=0;
	if( !GetPositionForXYRef( 0, mouseX, mouseY, ToPos ) )	// 例措困摹 逞绢 咳
		return;

	if(ToPos == pFromItem->GetPosition())
		return;

	CItem* pToItem = GetItemForIdx( ToPos );
	if(pToItem)
		return;
/*	if( ITEMMGR->IsDupItem( pFromItem->GetItemIdx() ) )
	{
		if( KEYBOARD->GetKeyPressed(KEY_MENU) && !( pToItem ) )
		{
			FakeItemDivide( ToPos, pFromItem, pToItem );
			return;
		}
		else if( ( pToItem && pFromItem->GetItemIdx() == pToItem->GetItemIdx() ) )
		{
			FakeItemCombine( ToPos, pFromItem, pToItem );
			return;
		}
	} */
	FakeGeneralItemMove(ToPos, pFromItem, pToItem, MunpaID);
}

BOOL CMunpaWarehouseDialog::GetPositionForXYRef(BYTE param, LONG x, LONG y, WORD& pos)
{
	WORD position=0;										// 惑措 困摹

	cIconGridDialog * gridDlg = (cIconGridDialog *)GetTabSheet(GetCurTabNum());
	if(gridDlg->GetPositionForXYRef(x, y, position))
	{
		pos = position+TP_MUNPAWAREHOUSE_START + TABCELL_MUNPAWAREHOUSE_NUM * GetCurTabNum();		// -> 例措 困摹肺 官厕
		return TRUE;
	}
	return FALSE;
}

int CMunpaWarehouseDialog::GetTabIndex( POSTYPE absPos )
{
	return ( absPos - TP_MUNPAWAREHOUSE_START ) / TABCELL_MUNPAWAREHOUSE_NUM;
}

POSTYPE CMunpaWarehouseDialog::GetRelativePosition( POSTYPE absPos)
{
	return ( absPos - TP_MUNPAWAREHOUSE_START ) % TABCELL_MUNPAWAREHOUSE_NUM;
}

CItem * CMunpaWarehouseDialog::GetItemForIdx(POSTYPE absPos)
{
	if(TP_MUNPAWAREHOUSE_START <= absPos && absPos < TP_MUNPAWAREHOUSE_END)
	{
		int TabIndex = GetTabIndex( absPos );
		cIconGridDialog * Dlg = (cIconGridDialog *)GetTabSheet(TabIndex);
		return (CItem *)Dlg->GetIconForIdx(absPos-TP_MUNPAWAREHOUSE_START-TABCELL_MUNPAWAREHOUSE_NUM*TabIndex);
	}
	return NULL;
}


void CMunpaWarehouseDialog::FakeItemCombine( POSTYPE ToPos, CItem * pFromItem, CItem * pToItem )
{
	if( pFromItem->GetPosition() == pToItem->GetPosition() )
		return;
	if( pFromItem->GetItemIdx() != pToItem->GetItemIdx() )
		return;

	BYTE FromIdx = ITEMMGR->GetTableIdxForAbsPos( pFromItem->GetPosition() );
	if(FromIdx >= eItemTable_Max) return;

	BYTE ToIdx = ITEMMGR->GetTableIdxForAbsPos( ToPos );
	if(ToIdx >= eItemTable_Max) return;

	MSG_ITEM_COMBINE_SYN msg;
	msg.Category			= MP_ITEM;
	msg.Protocol			= MP_ITEM_COMBINE_SYN;
	msg.dwObjectID			= HEROID;
	
	msg.FromPos				= pFromItem->GetPosition();
	msg.ToPos				= pToItem->GetPosition();
	msg.wItemIdx			= pFromItem->GetItemIdx();
	msg.FromDur				= pFromItem->GetDurability();
	msg.ToDur				= pToItem->GetDurability();

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

void CMunpaWarehouseDialog::FakeItemDivide( POSTYPE ToPos, CItem * pFromItem, CItem * pToItem )
{
	if( !CanBeMoved( pFromItem, ToPos ) )
		return;
	if( pFromItem->GetPosition() == ToPos )
		return;

	BYTE FromIdx = ITEMMGR->GetTableIdxForAbsPos( pFromItem->GetPosition() );
	if(FromIdx >= eItemTable_Max) return;

	GAMEIN->GetMunpaDialog()->SetDividMsg( pFromItem, ToPos );

	// Locking
	CMunpaDialog* pMunpaDlg = GAMEIN->GetMunpaDialog();
	pMunpaDlg->SetDisable(TRUE);
	if(FromIdx == eItemTable_Inventory)
	{
		CInventoryExDialog* pInvenDlg = GAMEIN->GetInventoryDialog();
		pInvenDlg->SetDisable(TRUE);
	}

	CInventoryExDialog* pFromDlg = GAMEIN->GetInventoryDialog();
	cDivideBox * pDivideBox = WINDOWMGR->DivideBox( DBOX_DIVIDE_INV, pFromItem->GetAbsX(), pFromItem->GetAbsY(), OnFakeItemDivideOk, OnFakeItemDivideCancel, pMunpaDlg, pFromItem, CHATMGR->GetChatMsg(185) );
	pDivideBox->SetValue( 1 );
	pDivideBox->SetMaxValue( 5 );
}

void CMunpaWarehouseDialog::OnFakeItemDivideCancel( LONG iId, void* p, DWORD param1, void * vData1, void * vData2 )
{
	cDialog * ToDlg = ( cDialog * )vData1;
	ToDlg->SetDisable(FALSE);
	GAMEIN->GetInventoryDialog()->SetDisable(FALSE);
	GAMEIN->GetPyogukDialog()->SetDisable(FALSE);
}

void CMunpaWarehouseDialog::OnFakeItemDivideOk( LONG iId, void* p, DWORD param1, void * vData1, void * vData2 )
{
	CMunpaDialog * tDlg = ( CMunpaDialog * )vData1;
	cDialog * pDlg = (cDialog*)vData2;

	if( param1 == 0 )
	{
		tDlg->SetDisable(FALSE);
		GAMEIN->GetInventoryDialog()->SetDisable(FALSE);
		GAMEIN->GetPyogukDialog()->SetDisable(FALSE);
		return;
	}

	if( tDlg->m_divideMsg.FromDur > param1 )
	{
		tDlg->m_divideMsg.ToDur			= param1;
		tDlg->m_divideMsg.FromDur		= tDlg->m_divideMsg.FromDur - param1;
		NETWORK->Send( &tDlg->m_divideMsg, sizeof(tDlg->m_divideMsg) );
	}
	else
	{
		//酒捞袍 捞悼
		tDlg->FakeGeneralItemMove(tDlg->m_divideMsg.ToPos, (CItem *)vData2, NULL);
		tDlg->SetDisable(FALSE);
		GAMEIN->GetInventoryDialog()->SetDisable(FALSE);	}
}

void CMunpaWarehouseDialog::FakeGeneralItemMove( POSTYPE ToPos, CItem * pFromItem, CItem * pToItem, DWORD MunpaID)
{
	BYTE FromIdx = ITEMMGR->GetTableIdxForAbsPos( pFromItem->GetPosition() );
	if(FromIdx >= eItemTable_Max) return;

	if(FromIdx == eItemTable_MunpaWarehouse)
	{
		WORD FromTab = GetTabIndex(pFromItem->GetPosition());
		WORD ToTab = GetTabIndex(ToPos);
		
		if(FromTab != ToTab)
		{
			//巩颇 芒绊俊辑 徘俊辑 徘栏肺 捞悼 救窃.
			CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(46) );
			return;
		}
	}

	BYTE ToIdx = ITEMMGR->GetTableIdxForAbsPos( ToPos );
	if (ToIdx >= eItemTable_Max) return;
	

	MSG_ITEM_MOVE_SYN msg;
	msg.Category			= MP_ITEM;
	msg.Protocol			= MP_ITEM_MUNPA_MOVE_SYN;
	msg.dwObjectID			= HEROID;

	msg.FromPos				= pFromItem->GetPosition();
	msg.wFromItemIdx		= pFromItem->GetItemIdx();
	msg.ToPos				= ToPos;
	msg.wToItemIdx			= (pToItem?pToItem->GetItemIdx():0);

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

void CMunpaWarehouseDialog::MoveItem(MSG_ITEM_MOVE_SYN* pInfo)
{
	CItem * FromItem = NULL;
	CItem * ToItem = NULL;
	
	DeleteItem(pInfo->FromPos, &FromItem);
	DeleteItem(pInfo->ToPos, &ToItem);
	
	if(FromItem)
	{
		FromItem->SetPosition(pInfo->FromPos);
		AddItem(FromItem);
	}
	
	if(ToItem)
	{
		ToItem->SetPosition(pInfo->ToPos);
		AddItem(ToItem);
	}
}

BOOL CMunpaWarehouseDialog::CanBeMoved(CItem* pItem,POSTYPE pos)
{
	ASSERT(pItem);

	if(TP_MUNPAWAREHOUSE_START<= pos && pos < TP_MUNPAWAREHOUSE_END)
	{
		// 公炼扒 TRUE
		return TRUE;
	}
	else
		return FALSE;
}

void CMunpaWarehouseDialog::PutInOutMoneySyn(int vals)
{
	cEditBox* pMunpaMoney = (cEditBox*)WINDOWMGR->GetWindowForIDEx(MUN_MONEY);
	if(vals)
	{
		cDivideBox * pDivideBox = WINDOWMGR->DivideBox( DBOX_INPUT_MONEY, 
								pMunpaMoney->GetAbsX() , pMunpaMoney->GetAbsY()-150, 
								OnPutInMoneyOk, OnPutInMoneyCancel, 
								NULL, NULL, CHATMGR->GetChatMsg(230) );
	}
	else
	{
		cDivideBox * pDivideBox = WINDOWMGR->DivideBox( DBOX_INPUT_MONEY, 
								pMunpaMoney->GetAbsX() , pMunpaMoney->GetAbsY()-150, 
								OnPutOutMoneyOk, OnPutInMoneyCancel, 
								NULL, NULL, CHATMGR->GetChatMsg(231) );
	}
}

void CMunpaWarehouseDialog::OnPutInMoneyCancel( LONG iId, void* p, DWORD param1, void * vData1, void * vData2 )
{
}

void CMunpaWarehouseDialog::OnPutInMoneyOk( LONG iId, void* p, DWORD param1, void * vData1, void * vData2 )
{
	if(HERO->GetMoney() < param1)
		param1 = HERO->GetMoney();

	if(param1 == 0)
		return;

	MSG_DWORD msg;
	msg.Category = MP_MUNPA;
	msg.Protocol = MP_MUNPA_PUTIN_MONEY_SYN;
	msg.dwObjectID = HEROID;
	msg.dwData = param1;
	
	NETWORK->Send(&msg, sizeof(msg));
}

void CMunpaWarehouseDialog::OnPutOutMoneyOk( LONG iId, void* p, DWORD param1, void * vData1, void * vData2 )
{
	DWORD MunpaMoney = GAMEIN->GetMunpaDialog()->GetMoney();
	if(param1 > MunpaMoney)
		param1 = MunpaMoney;

	if(param1 == 0)
		return;
	
	MSG_DWORD msg;
	msg.Category = MP_MUNPA;
	msg.Protocol = MP_MUNPA_PUTOUT_MONEY_SYN;
	msg.dwObjectID = HEROID;
	msg.dwData = param1;
	
	NETWORK->Send(&msg, sizeof(msg));
}

⌨️ 快捷键说明

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