📄 dealdialog.cpp
字号:
// DealDialog.cpp: implementation of the CDealDialog class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "DealDialog.h"
#include "DealItem.h"
#include "ItemManager.h"
#include "ObjectManager.h"
#include "MoveManager.h"
#include "WindowIDEnum.h"
#include "./Interface/cWindowManager.h"
#include "./Interface/cIconGridDialog.h"
#include "./Interface/cStatic.h"
#include "GameIn.h"
#include "ObjectStateManager.h"
#include "cDivideBox.h"
#include "InventoryExDialog.h"
#include "mhFile.h"
#include "cMsgBox.h"
#include "ChatManager.h"
#include "MHMap.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
void BuyItem(LONG lId, void * p, DWORD we);
CDealDialog::CDealDialog()
{
m_type = WT_DEALDIALOG;
m_pMoneyEdit = NULL;
m_CurSelectedItemIdx = 0;
m_lCurSelItemPos = -1;
m_DealerTable.Initialize(32); // #define MAX_DEALER_NUM 100
m_fShow = FALSE;
m_DealerIdx = 0;
}
CDealDialog::~CDealDialog()
{
Release();
}
void CDealDialog::Add(cWindow * window)
{
if(window->GetType() == WT_PUSHUPBUTTON)
AddTabBtn(curIdx1++, (cPushupButton * )window);
else if(window->GetType() == WT_ICONGRIDDIALOG)
AddTabSheet(curIdx2++, window);
else
cDialog::Add(window);
}
void CDealDialog::ShowDealer(DWORD DealerKey)
{
if(m_fShow) HideDealer();
SelectTab(0);
SetMoney(0, 2);
DealerData * pDealer = m_DealerTable.GetData(DealerKey);
if(pDealer == NULL)
{
CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(197) );
if( HERO->GetState() == eObjectState_Deal )
OBJECTSTATEMGR->EndObjectState(HERO, eObjectState_Deal);
return;
}
CDealItem* pItem = NULL;
cImage tmpImage;
m_DealerIdx = DealerKey;
DWORD DealIdx = 0;
DealerItem* pDealItem = NULL;
POS pos = pDealer->m_DealItemList.GetFirstPos();
while(pDealItem = pDealer->m_DealItemList.GetNextPos(pos))
{
pItem = new CDealItem;
pItem->Init(0,0,DEFAULT_ICONSIZE,DEFAULT_ICONSIZE, ITEMMGR->GetIconImage(pDealItem->ItemIdx, &tmpImage),IG_DEALITEM_START+DealIdx++);
pItem->SetData(pDealItem->ItemIdx);
pItem->SetItemIdx(pDealItem->ItemIdx);
//pItem->SetMovable(FALSE);
ITEMMGR->SetToolTipIcon(pItem); // toolTip
//啊拜砒屏
char buf[32];
DWORD ItemPrice = pItem->GetBuyPrice();
if(MAP->IsVillage() == FALSE)
ItemPrice *= 1.2;
wsprintf( buf, CHATMGR->GetChatMsg(214), AddComma(ItemPrice) );
//wsprintf( buf, CHATMGR->GetChatMsg(214), pItem->GetBuyPrice() );
pItem->AddToolTipLine( buf, TTTC_BUYPRICE );
if( !ITEMMGR->CanEquip(pDealItem->ItemIdx) )
pItem->SetToolTipImageRGB( TTCLR_ITEM_CANNOTEQUIP );
WINDOWMGR->AddWindow(pItem);
cIconGridDialog * dlg = (cIconGridDialog *)GetTabSheet(pDealItem->Tab);
dlg->AddIcon(pDealItem->Pos, pItem);
}
GAMEIN->GetInventoryDialog()->SetActive(TRUE); // taiyo : 蜡历啊 阂祈且 荐 乐瘤 臼篮啊?
if( HERO->GetState() != eObjectState_Deal )
OBJECTSTATEMGR->StartObjectState(HERO, eObjectState_Deal);
SetActive(TRUE);
m_CurSelectedItemIdx = 0;
m_lCurSelItemPos = -1;
m_fShow = TRUE;
ITEMMGR->SetPriceToItem( TRUE );
}
void CDealDialog::HideDealer()
{
if(!m_fShow) return;
cIcon* pIcon;
for(int tab=0;tab<m_bTabNum;++tab)
{
cIconGridDialog * dlg = (cIconGridDialog *)GetTabSheet(tab);
for(int n=0;n<dlg->m_nCol*dlg->m_nRow;++n)
{
pIcon = dlg->GetIconForIdx(n);
if(pIcon != NULL)
{
dlg->DeleteIcon(pIcon);
//delete pIcon;
pIcon->SetActive( FALSE );
WINDOWMGR->AddListDestroyWindow( pIcon );
pIcon = NULL;
}
}
}
m_DealerIdx = 0;
//KES 困俊 WINDOMGR->AddListDestroyWindow( pIcon ) 肺 措眉.窍看澜
//process 吝俊 官肺 delete沁阑矫俊 巩力啊 积辫.
// for(DWORD n=0;n<m_DealIdx;++n)
// {
// WINDOWMGR->DeleteWindowForID(IG_DEALITEM_START+n);
// }
//磷篮 惑怕俊辑 甸绢棵 荐档 乐促. 眉农窍绰巴 眠啊 鞘夸
if( HERO->GetState() != eObjectState_Die )
{
if( HERO->GetState() == eObjectState_Deal )
OBJECTSTATEMGR->EndObjectState(HERO,eObjectState_Deal);
}
m_fShow = FALSE;
ITEMMGR->SetPriceToItem( FALSE );
}
void CDealDialog::LoadDealerItem(CMHFile* fp)
{
char buff[1024];
char mapname[256];
char npcname[256];
// DWORD DealerKey;
BOOL IsItem = FALSE;
WORD ItemIdx;
DealerItem* pItem;
DealerData* pCurDealer = NULL;
char seps[] = "\t\n";
char* token;
int count = 0;
while(1)
{
if(fp->IsEOF())
{
break;
}
count++;
WORD map_num = fp->GetWord();
fp->GetString(mapname);
WORD npc_kind = fp->GetWord();
fp->GetString(npcname);
WORD npc_index = fp->GetWord();
WORD point_x = fp->GetWord();
WORD point_z = fp->GetWord();
WORD angle = fp->GetWord();
BYTE tabnum = fp->GetByte();
BYTE Pos = 0;
fp->GetLine(buff,1024);
token = strtok( buff, seps );
if(token == NULL)
continue;
token = strtok( NULL, seps );
ItemIdx = atoi(token);
pCurDealer = m_DealerTable.GetData(npc_index);
if(pCurDealer == NULL)
{
pCurDealer = new DealerData;
m_DealerTable.Add(pCurDealer,npc_index);
}
pItem = new DealerItem;
ASSERT(tabnum)
pItem->Tab = tabnum-1;
pItem->Pos = Pos++;
pItem->ItemIdx = ItemIdx;
pCurDealer->m_DealItemList.AddTail(pItem);
while( 1 )
{
token = strtok( NULL, seps );
if(token == NULL)
break;
token = strtok( NULL, seps );
ItemIdx = atoi(token);
pItem = new DealerItem;
pItem->Tab = tabnum-1;
pItem->Pos = Pos++;
pItem->ItemIdx = ItemIdx;
pCurDealer->m_DealItemList.AddTail(pItem);
}
}
}
void CDealDialog::Linking()
{
m_pMoneyEdit = (cStatic *)GetWindowForID(DE_MONEYEDIT);
m_pMoneyEdit->SetTextXY( 4, 4 );
m_pMoneyEdit->SetAlign( TXT_RIGHT );
}
void CDealDialog::Release()
{
DealerData* pDealer = NULL;
m_DealerTable.SetPositionHead();
while(pDealer = m_DealerTable.GetData())
{
if(pDealer)
{
pDealer->m_DealItemList.DeleteAll();
delete pDealer;
pDealer = NULL;
}
}
m_DealerTable.RemoveAll();
}
void CDealDialog::OnSelectedItem()
{
cIconGridDialog * gridDlg = (cIconGridDialog *)GetTabSheet(GetCurTabNum());
CDealItem* pItem = (CDealItem*)gridDlg->GetIconForIdx(gridDlg->GetCurSelCellPos());
if(!pItem)
{
SetMoney(0, 2);
m_CurSelectedItemIdx = 0;
m_lCurSelItemPos = -1;
return;
}
m_CurSelectedItemIdx = pItem->GetItemIdx();
m_lCurSelItemPos = gridDlg->GetCurSelCellPos();
ITEM_INFO * pItemInfo = ITEMMGR->GetItemInfo(m_CurSelectedItemIdx);
ASSERT(pItemInfo);
DWORD ItemPrice = pItemInfo->BuyPrice;
if(MAP->IsVillage() == FALSE)
ItemPrice *= 1.2;
SetMoney(ItemPrice, 1);
}
void CDealDialog::Render()
{
cDialog::RenderWindow();
cDialog::RenderComponent();
cTabDialog::RenderTabComponent();
}
void CDealDialog::SetMoney(DWORD value, BYTE colorType)
{
if(colorType == 0) //颇绰啊拜钎矫
m_pMoneyEdit->SetFGColor(RGB_HALF(255,0,0));
else if(colorType == 1) //荤绰啊拜钎矫
m_pMoneyEdit->SetFGColor(TTTC_BUYPRICE);
else
m_pMoneyEdit->SetFGColor(RGB_HALF(255,255,255));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -