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