📄 munpawarehousedialog.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 + -