📄 mixdialog.cpp
字号:
// MixDialog.cpp: implementation of the CMixDialog class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "MixDialog.h"
#include "ChatManager.h"
#include "MixManager.h"
#include "Item.h"
#include "INTERFACE\cIconDialog.h"
#include "INTERFACE\cIconGridDialog.h"
#include "WindowIDEnum.h"
#include "ItemShow.h"
#include "Gamein.h"
#include "ItemManager.h"
#include "InventoryExDialog.h"
#include "interface/cStatic.h"
#include "./Interface/cScriptManager.h"
#include "ObjectManager.h"
#include "./Interface/cWindowManager.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CMixDialog::CMixDialog()
{
m_pMixDlg = NULL;
m_pMixGridDlg = NULL;
cImage imgToolTip;
SCRIPTMGR->GetImage( 63, &imgToolTip, PFT_HARDPATH );
for(int i = 0 ; i < eMixPos_Max ; ++i)
{
m_VirtualItem[i].SetToolTip( "", RGB_HALF( 255, 255, 255), &imgToolTip );
m_VirtualItem[i].SetMovable(FALSE);
}
for(i = 0 ; i < MAX_MIXGRID_NUM ; ++i)
{
m_ViewShowItem[i].SetToolTip( "", RGB_HALF( 255, 255, 255), &imgToolTip );
m_ViewShowItem[i].SetMovable(FALSE);
}
}
CMixDialog::~CMixDialog()
{
// don't call Release()
// pre delete item
}
void CMixDialog::Release(eMixReleaseOpt op, BOOL bMsg)
{
ResetCurSelCellPos();
CVirtualItem * pVItem;
if(!m_pMixDlg->IsAddable(eMixPos_Basic) && (op & eMixBasicRelease) )
{
m_pMixDlg->DeleteIcon(eMixPos_Basic, (cIcon **)&pVItem);
pVItem->GetLinkItem()->SetLock(FALSE);
if( bMsg )
{
///辑滚俊档 焊郴拎具瘤!!!! KES
MSG_WORD msg;
msg.Category = MP_ITEM;
msg.Protocol = MP_ITEM_MIX_RELEASEITEM;
msg.dwObjectID = HEROID;
msg.wData = pVItem->GetLinkItem()->GetPosition();
NETWORK->Send( &msg, sizeof(msg) );
}
pVItem->SetLinkItem(NULL);
DeleteViewResultItemAll();
m_pMaterialsStatic->SetStaticText(" ");
}
if(!m_pMixDlg->IsAddable(eMixPos_Result) && (op & eMixResultRelease) )
{
m_pMixDlg->DeleteIcon(eMixPos_Result, (cIcon **)&pVItem);
pVItem->GetLinkItem()->SetLock(FALSE);
if( bMsg )
{
///辑滚俊档 焊郴拎具瘤!!!! KES
MSG_WORD msg;
msg.Category = MP_ITEM;
msg.Protocol = MP_ITEM_MIX_RELEASEITEM;
msg.dwObjectID = HEROID;
msg.wData = pVItem->GetLinkItem()->GetPosition();
NETWORK->Send( &msg, sizeof(msg) );
}
pVItem->SetLinkItem(NULL);
}
}
BOOL CMixDialog::IsEmpty(eMixPos pos)
{
if( pos >= eMixPos_Max )
return FALSE;
return m_pMixDlg->IsAddable(pos);
}
void CMixDialog::Linking()
{
m_pMaterialsStatic = (cStatic *)GetWindowForID(ITMD_MIXMATERIALS);
m_pMaterialsStatic->SetMultiLine(TRUE);
m_pMaterialsStatic->InitMultiLine();
m_pMixDlg = (cIconDialog *)GetWindowForID(ITMD_MIXICONDLG);
m_pMixGridDlg = (cIconGridDialog *)GetWindowForID(ITMD_MIXICONGRIDDLG);
}
BOOL CMixDialog::FakeMoveIcon(LONG x, LONG y, cIcon * pOrigIcon)
{
if(pOrigIcon->GetType() != WT_ITEM) return FALSE;
if( m_bDisable ) return FALSE;
CItem * pOrigItem = (CItem *)pOrigIcon;
if( pOrigItem->IsLocked() ) return FALSE;
// 牢亥配府捞寇俊 酒捞袍 FALSE
if(!ITEMMGR->IsEqualTableIdxForPos(eItemTable_Inventory, pOrigItem->GetPosition()))
{
CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg( 612 ) );
return FALSE;
}
// 可记 酒捞袍 救凳
if(ITEMMGR->IsOptionItem(pOrigItem->GetItemIdx(), pOrigItem->GetDurability()))
{
CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(202) );
return FALSE;
}
eITEM_KINDBIT bits = pOrigItem->GetItemKind();
if( !(bits & eYOUNGYAK_ITEM) && !(bits & eMUGONG_ITEM)
&& !(bits & eEQUIP_ITEM) && !(bits & eEXTRA_ITEM) )
{
CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(202) );
return FALSE;
}
// view list
ITEM_MIX_INFO * pMixItemInfo = MIXMGR->GetMixItemInfo(pOrigItem->GetItemIdx());
if(!pMixItemInfo)
{
CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(202) );
return FALSE;
}
//康距酒捞袍捞 酒囱 犁丰酒捞袍老版快 窍唱观俊 救棵扼埃促.
if( GetItemKind(pOrigItem->GetItemIdx() ) != eYOUNGYAK_ITEM &&
// GetItemKind(pOrigItem->GetItemIdx() ) != eEXTRA_ITEM_JEWEL &&
pOrigItem->GetDurability() > 1 )
{
CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(629) );
return FALSE;
}
//LOCK ITEM
pOrigItem->SetLock(TRUE);///辑滚俊档 遏阑 吧绢具瘤!!!!!! KES
//---咯扁辑 皋技瘤焊郴绊
MSG_ITEM msgItem;
msgItem.Category = MP_ITEM;
msgItem.Protocol = MP_ITEM_MIX_ADDITEM_SYN;
msgItem.dwObjectID = HEROID;
msgItem.ItemInfo = *pOrigItem->GetItemBaseInfo();
NETWORK->Send( &msgItem, sizeof(msgItem) );
ITEMMGR->SetDisableDialog(TRUE, eItemTable_Inventory);
ITEMMGR->SetDisableDialog(TRUE, eItemTable_Pyoguk);
ITEMMGR->SetDisableDialog(TRUE, eItemTable_MunpaWarehouse);
if(!IsEmpty(eMixPos_Basic))
{
Release(eMixBasicRelease);
}
Release(eMixResultRelease);
//add Item
AddVirtualItemWrap(eMixPos_Basic, pOrigItem);
//m_VirtualItem[eMixPos_Basic].SetLinkItem(pOrigItem);
//m_pMixDlg->AddIcon(eMixPos_Basic, (cIcon*)&m_VirtualItem[eMixPos_Basic]);
ViewResultItemList(pMixItemInfo);
m_pMaterialsStatic->SetStaticText( CHATMGR->GetChatMsg(613) );
return FALSE;
}
void CMixDialog::ViewMaterialsDesc(ITEM_MIX_RES * pResultItem)
{
char line[25];
char szDescText[255];
CVirtualItem * pBasicItem = (CVirtualItem *)m_pMixDlg->GetIconForIdx(eMixPos_Basic);
if(pBasicItem->GetSrcDurability() >1 )
#ifndef TAIWAN_LOCAL
wsprintf( szDescText, "%s 】 %d^n^n", pResultItem->szResItemName, pBasicItem->GetSrcDurability() );
#else
wsprintf( szDescText, "%s X %d^n^n", pResultItem->szResItemName, pBasicItem->GetSrcDurability() );
#endif
else
wsprintf( szDescText, "%s^n^n", pResultItem->szResItemName );
// SafeStrCpy(szDescText, pResultItem->szResItemName, MAX_NAME_LENGTH);
// strcat(szDescText, "^n^n");
for(int i = 0 ; i < pResultItem->wMaterialItemNum ; ++i)
{
wsprintf(line, CHATMGR->GetChatMsg(228), pResultItem->psMaterialItemInfo[i].szMatItemName, pResultItem->psMaterialItemInfo[i].wMatItemNum);
strcat(szDescText, line);
if(pBasicItem->GetSrcDurability() >1 )
{
#ifndef TAIWAN_LOCAL
wsprintf(line, " 】 %d", pBasicItem->GetSrcDurability());
#else
wsprintf(line, " X %d", pBasicItem->GetSrcDurability());
#endif
strcat(szDescText, line);
}
strcat(szDescText, "^n");
}
DWORD dwMoney;
if( ITEMMGR->IsDupItem( pBasicItem->GetSrcItemIdx() ) )
{
dwMoney = pResultItem->Money * pBasicItem->GetSrcDurability();
}
else
{
dwMoney = pResultItem->Money;
}
wsprintf(line, CHATMGR->GetChatMsg(229), AddComma( dwMoney ) );
strcat(szDescText, line);
m_pMaterialsStatic->SetStaticText(szDescText);
}
void CMixDialog::ViewResultItemList(ITEM_MIX_INFO * pMixItemInfo)
{
if(!pMixItemInfo) return;
DeleteViewResultItemAll();
DURTYPE Dur = m_VirtualItem[eMixPos_Basic].GetLinkItem()->GetDurability();
//char ToolTipText[25];
for(int i = 0 ; i < pMixItemInfo->wResultItemNum ; ++i)
{
//CItemShow * pSItem = MIXMGR->NewShowItem();
m_ViewShowItem[i].SetData(pMixItemInfo->psResultItemInfo[i].wResItemIdx);
m_ViewShowItem[i].Init(pMixItemInfo->psResultItemInfo[i].wResItemIdx, Dur);
//wsprintf(ToolTipText, "[%s]", pMixItemInfo->psResultItemInfo[i].szResItemName);
//m_ViewShowItem[i].SetToolTip( ToolTipText, RGB_HALF( 255, 255, 255) );
ITEMMGR->SetToolTipIcon((cIcon*)&m_ViewShowItem[i]);
m_pMixGridDlg->AddIcon(i, (cIcon*)&m_ViewShowItem[i]);
}
}
void CMixDialog::DeleteViewResultItemAll()
{
for(int i = 0 ; i < m_pMixGridDlg->GetCellNum() ; ++i )
{
CItemShow * pSItemOut = NULL;
if(m_pMixGridDlg->DeleteIcon(i, (cIcon**)&pSItemOut))
{
// MIXMGR->DeleteShowItem(pSItemOut);
}
}
}
BOOL CMixDialog::AddVirtualItemWrap(POSTYPE relPos, CItem * pItem)
{
m_VirtualItem[relPos].SetData(pItem->GetItemIdx());
m_VirtualItem[relPos].SetLinkItem(pItem);
//char ToolTipText[25];
//wsprintf(ToolTipText, "[%s]", pItem->GetItemInfo()->ItemName );
//m_VirtualItem[relPos].SetToolTip( ToolTipText, RGB_HALF( 255, 255, 255) );
if(pItem->GetDurability() != 0 && !ITEMMGR->IsDupItem(pItem->GetItemIdx()))
ITEMMGR->SetToolTipIcon((cIcon*)&m_VirtualItem[relPos], ITEMMGR->GetItemOption(pItem->GetDurability()));
else
ITEMMGR->SetToolTipIcon((cIcon*)&m_VirtualItem[relPos]);
return AddVirtualItem(relPos, &m_VirtualItem[relPos]);
}
BOOL CMixDialog::AddVirtualItem(POSTYPE relPos, CVirtualItem * pItem)
{
//empty 眉农饶
if(m_pMixDlg->IsAddable(relPos))
{
m_pMixDlg->AddIcon(relPos, (cIcon *)pItem);
return TRUE;
}
return FALSE;
}
CVirtualItem * CMixDialog::GetVirtualItem(POSTYPE relPos)
{
return (CVirtualItem *)m_pMixDlg->GetIconForIdx(relPos);
}
void CMixDialog::MixOkBtn(CMixDialog * pThis)
{
// 扁夯 酒捞袍 粮犁?
CVirtualItem * pBasicItem = (CVirtualItem *)pThis->m_pMixDlg->GetIconForIdx(eMixPos_Basic);
if(NULL == pBasicItem)
{
CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(618) );
return ;
}
// 搬苞急琶 ok?
if(-1 == pThis->m_pMixGridDlg->GetCurSelCellPos())
{
CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(203) );
return;
}
CItemShow * pSelItemShow = (CItemShow *)pThis->m_pMixGridDlg->GetIconForIdx(pThis->m_pMixGridDlg->GetCurSelCellPos());
if(NULL == pSelItemShow)
{
CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(203) );
return ;
}
ITEM_MIX_INFO * pMixInfo = MIXMGR->GetMixItemInfo(pBasicItem->GetSrcItemIdx());
for(int i = 0 ; i < pMixInfo->wResultItemNum ; ++i)
{
if(pMixInfo->psResultItemInfo[i].wResItemIdx == pSelItemShow->GetItemIdx())
{
MSG_ITEM_MIX_SYN msg;
msg.Init();
msg.Category = MP_ITEM;
msg.Protocol = MP_ITEM_MIX_SYN;
msg.dwObjectID = HEROID;
msg.wBasicItemIdx = pBasicItem->GetSrcItemIdx();
msg.BasicItemPos = pBasicItem->GetSrcPosition();
msg.wResultItemIdx = pSelItemShow->GetItemIdx();
msg.ResultIndex = i;
// 鞘夸茄 捣篮 乐绰啊?
DWORD dwMoney;
if(ITEMMGR->IsDupItem(pBasicItem->GetSrcItemIdx()))
{
dwMoney = pMixInfo->psResultItemInfo[i].Money * pBasicItem->GetSrcDurability();
}
else
{
dwMoney = pMixInfo->psResultItemInfo[i].Money;
}
if( dwMoney > HERO->GetMoney() )
{
CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(117) );
return ;
}
// 犁丰 enough?
MATERIAL_ARRAY ItemOut[MAX_MIXGRID_NUM];
WORD ItemPosNum;
WORD needItemIdx;
WORD needItemNum;
for(int j = 0 ; j < pMixInfo->psResultItemInfo[i].wMaterialItemNum ; ++j)
{
needItemIdx = pMixInfo->psResultItemInfo[i].psMaterialItemInfo[j].wMatItemIdx;
needItemNum = pMixInfo->psResultItemInfo[i].psMaterialItemInfo[j].wMatItemNum;
if(ITEMMGR->IsDupItem(pBasicItem->GetSrcItemIdx()))
needItemNum *= pBasicItem->GetSrcDurability();
if(!pThis->EnoughMaterial(needItemIdx, needItemNum, ItemOut, ItemPosNum))
{
CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(205) );
return;
}
for(int k = 0 ; k < ItemPosNum ; ++k)
{
if(ITEMMGR->IsDupItem(needItemIdx))
msg.AddMaterial(needItemIdx, ItemOut[k].ItemPos, ItemOut[k].Dur);
else
msg.AddMaterial(needItemIdx, ItemOut[k].ItemPos, 0);
}
}
NETWORK->Send(&msg, msg.GetSize());
return;
}
}
}
BOOL CMixDialog::EnoughMaterial(WORD wItemIdx, WORD ItemNum, MATERIAL_ARRAY * ItemOut, WORD & ItemPosNum)
{
ItemPosNum = 0;
WORD CurRemainNum = ItemNum;
for(int i = TP_INVENTORY_START ; i < TP_INVENTORY_END && CurRemainNum != 0 ; ++i)
{
CItem * pItem = GAMEIN->GetInventoryDialog()->GetItemForIdx(i);
if(pItem && pItem->GetItemIdx() == wItemIdx)
{
if(pItem->IsLocked())
continue;
if(ITEMMGR->IsDupItem(wItemIdx))
{
if(CurRemainNum > pItem->GetDurability())
{
ItemOut[ItemPosNum].Dur = pItem->GetDurability();
CurRemainNum -= pItem->GetDurability();
}
else
{
ItemOut[ItemPosNum].Dur = CurRemainNum;
CurRemainNum = 0;
}
ItemOut[ItemPosNum++].ItemPos = i;
}
else
{
ItemOut[ItemPosNum].Dur = 1;
ItemOut[ItemPosNum++].ItemPos = i;
--CurRemainNum;
}
}
}
if(CurRemainNum == 0)
return TRUE;
else
return FALSE;
}
void CMixDialog::MixCancelBtn(CMixDialog * pThis)
{
// 葛电 傅农 昏力
pThis->Release();
pThis->SetActiveRecursive(FALSE);
CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(206));
}
BOOL CMixDialog::OnActionEvent(LONG lId, void * p, DWORD we)
{
switch(we)
{
case WE_CLOSEWINDOW:
{
// CMixDialog * pMixDlg = (CMixDialog *)p; //PPP
CMixDialog * pMixDlg = (CMixDialog *)WINDOWMGR->GetWindowForID(lId);
pMixDlg->Release();
return TRUE;
}
break;
}
switch( lId )
{
case ITMD_MIXICONGRIDDLG:
{
//cIconGridDialog * pMixGridDlg = (cIconGridDialog *)p; //PPP
cIconGridDialog* pMixGridDlg = (cIconGridDialog *)((cDialog*)p)->GetWindowForID(lId); //PPP
if(we == WE_LBTNCLICK)
{
CMixDialog * pPar = (CMixDialog *)pMixGridDlg->GetParent();
LONG SelectPos = pMixGridDlg->GetCurSelCellPos();
CItemShow * pSelItemShow = (CItemShow *)pMixGridDlg->GetIconForIdx(SelectPos);
if(NULL == pSelItemShow)
{
pPar->m_pMaterialsStatic->SetStaticText(" ");
return FALSE;
}
CVirtualItem * pBasicItem = (CVirtualItem *)pPar->m_pMixDlg->GetIconForIdx(eMixPos_Basic);
ITEM_MIX_INFO * pMixInfo = MIXMGR->GetMixItemInfo(pBasicItem->GetSrcItemIdx());
if(!pMixInfo)
return FALSE;
pPar->ViewMaterialsDesc(&pMixInfo->psResultItemInfo[SelectPos]);
}
}
break;
case ITMD_MIXOKBTN:
{
CMixDialog * pMixDlg = (CMixDialog *)p;
CMixDialog::MixOkBtn(pMixDlg);
}
break;
case ITMD_MIXCANCELBTN:
{
CMixDialog * pMixDlg = (CMixDialog *)p;
CMixDialog::MixCancelBtn(pMixDlg);
}
break;
}
return TRUE;
}
DWORD CMixDialog::ActionEvent(CMouse * mouseInfo)
{
DWORD we = WE_NULL;
if( !m_bActive ) return we;
we |= cDialog::ActionEvent(mouseInfo);
for(int i = 0 ; i < eMixPos_Max ; ++i)
{
m_VirtualItem[i].ActionEvent(mouseInfo);
}
return we;
}
void CMixDialog::ResetCurSelCellPos()
{
m_pMixGridDlg->SetCurSelCellPos(-1);
}
BOOL CMixDialog::AddRealItem( CItem *pOrigItem )
{
/*
ITEM_MIX_INFO * pMixItemInfo = MIXMGR->GetMixItemInfo(pOrigItem->GetItemIdx());
if( !pMixItemInfo ) return FALSE;
if(!IsEmpty(eMixPos_Basic))
{
Release(eMixBasicRelease);
}
Release(eMixResultRelease);
//add Item
AddVirtualItemWrap(eMixPos_Basic, pOrigItem);
//m_VirtualItem[eMixPos_Basic].SetLinkItem(pOrigItem);
//m_pMixDlg->AddIcon(eMixPos_Basic, (cIcon*)&m_VirtualItem[eMixPos_Basic]);
ViewResultItemList(pMixItemInfo);
m_pMaterialsStatic->SetStaticText( CHATMGR->GetChatMsg(613) );
*/
return TRUE;
}
void CMixDialog::DieCheck()
{
if( HERO->GetState() == eObjectState_Die )
{
Release();
SetActiveRecursive( FALSE );
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -