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

📄 disslovedlg.cpp

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

#include "stdafx.h"
#include "DissloveDlg.h"
#include "Item.h"
#include "INTERFACE\cStatic.h"
#include "INTERFACE\cIconDialog.h"
#include "INTERFACE\cIconGridDialog.h"
#include "WindowIDEnum.h"
#include "Gamein.h"
#include "ItemManager.h"
#include "ChatManager.h"
#include "./Interface/cScriptManager.h"
#include "ObjectManager.h"
#include "reinforcemanager.h"
#include "InventoryExDialog.h"
#include "AbilityManager.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CDissloveDlg::CDissloveDlg()
{
	m_pDissolveDlg = NULL;
	m_pDissolveGridDlg = NULL;

	cImage imgToolTip;
	SCRIPTMGR->GetImage( 63, &imgToolTip, PFT_HARDPATH );
	for(int i = 0 ; i < MAX_DISSOLVEGRID_NUM+1 ; ++i)
	{
		m_VirtualItem[i].SetToolTip( "", RGB_HALF( 255, 255, 255), &imgToolTip );
		m_VirtualItem[i].SetMovable(FALSE);
	}
}

CDissloveDlg::~CDissloveDlg()
{
	// don't call Release() 
	// pre delete item 
}

void CDissloveDlg::Release(eDissolveReleaseOpt op)
{
	CVirtualItem * pVItem = NULL;

	if((op & eDissolveBasicRelease) && !IsEmpty(0))
	{
		m_pDissolveDlg->DeleteIcon(0, (cIcon **)&pVItem);
		pVItem->GetLinkItem()->SetLock(FALSE);
		pVItem->SetLinkItem(NULL);
	}


	if( (op & eDissolveViewRelease) )
	{
		for(int i = 1 ; i < MAX_DISSOLVEGRID_NUM+1 ; ++i)
		{
			if(!IsEmpty(i))
			{
				m_pDissolveGridDlg->DeleteIcon(i-1, (cIcon **)&pVItem);
				pVItem->GetLinkItem()->SetLock(FALSE);
				pVItem->SetLinkItem(NULL);
			}
		}		
	}
}
void CDissloveDlg::Linking()
{
	m_pDissolveDlg			= (cIconDialog *)GetWindowForID(DIS_DISSOLVEICONDLG);
	m_pDissolveGridDlg		= (cIconGridDialog *)GetWindowForID(DIS_DISSOLVEICONGRIDDLG);
	m_pDissolveCostStatic	= (cStatic *)GetWindowForID(DIS_DISSOLVECOST);
}

BOOL CDissloveDlg::IsEmpty(POSTYPE pos)
{
	if(pos == 0)
	{
		if(m_pDissolveDlg->IsAddable(0))
			return TRUE;
		else
			return FALSE;
	}
	else
	{
		if(m_pDissolveGridDlg->IsAddable(pos-1))
			return TRUE;
		else
			return FALSE;
	}
}
DWORD CDissloveDlg::ActionEvent(CMouse * mouseInfo)
{
	DWORD we = WE_NULL;
	if( !m_bActive ) return we;
	we |= cDialog::ActionEvent(mouseInfo);

	for(int i = 0 ; i < MAX_DISSOLVEGRID_NUM+1 ; ++i)
	{
		m_VirtualItem[i].ActionEvent(mouseInfo);
	}

	return we;
}

BOOL CDissloveDlg::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()))
		return FALSE;

	if(ITEMMGR->IsOptionItem(pOrigItem->GetItemIdx(), pOrigItem->GetDurability()))
	{
		if(!IsEmpty(0))
		{
			Release(eDissolveBasicRelease);
		}

		AddVirtualItemWrap(0, pOrigItem);

		const ITEM_INFO * pInfo = pOrigItem->GetItemInfo();
		// 盒秦 厚侩 免仿 
		SetCost(ITEM_DISSOLVE_PRICE_VALUE*pInfo->LimitLevel);
	}
	else
	{
		// 盒秦 且 荐 绝绰 酒捞袍 
		CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(222) );
	}
	return FALSE;
}
void CDissloveDlg::SetCost(DWORD Cost)
{
	char costTxt[128];
	sprintf(costTxt, CHATMGR->GetChatMsg(227), Cost);
	m_pDissolveCostStatic->SetStaticText(costTxt);
}
BOOL CDissloveDlg::EnoughSpace(WORD wOptionIdx, LEVELTYPE ItemLevel, WORD wAbilityGrade, MATERIAL_ARRAY * wMatItemOut, WORD & wMatItemNumOut)
{
	ITEM_OPTION_INFO * pInfo = ITEMMGR->GetItemOption(wOptionIdx);
	if(!pInfo) return FALSE;


	wMatItemNumOut = 0;

	float var = 0;
	DWORD num = 0;
	BOOL bConvert = FALSE;
	sITEM_REINFORCE_INFO * pRInfo = NULL;
	REINFORCEMGR->SetHeadPos();
	while(pRInfo = REINFORCEMGR->GetData())
	{
		switch(pRInfo->ReinforceType)
		{
		case eRJP_GENGOL:
			{
				if(pInfo->GenGol > 0)
				{ 
					var = pInfo->GenGol;
					bConvert = TRUE;
				}
			}
			break;
		case eRJP_MINCHUB:
			{
				if(pInfo->MinChub > 0)
				{ 
					var = pInfo->MinChub;
					bConvert = TRUE;
				}
			}
			break;
		case eRJP_CHERYUK:
			{
				if(pInfo->CheRyuk > 0)
				{ 
					var = pInfo->CheRyuk;
					bConvert = TRUE;
				}
			}
			break;
		case eRJP_SIMMEK:
			{
				if(pInfo->SimMek > 0)
				{ 
					var = pInfo->SimMek;
					bConvert = TRUE;
				}
			}
			break;
		case eRJP_LIFE:
			{
				if(pInfo->Life > 0)
				{ 
					var = pInfo->Life;
					bConvert = TRUE;
				}
			}
			break;
		case eRJP_NAERYUK:
			{
				if(pInfo->NaeRyuk > 0)
				{ 
					var = pInfo->NaeRyuk;
					bConvert = TRUE;
				}
			}
			break;
		case eRJP_SHIELD:
			{
				if(pInfo->Shield > 0)
				{ 
					var = pInfo->Shield;
					bConvert = TRUE;
				}
			}
			break;
		case eRJP_FIREREGIST:
			{
				if(pInfo->AttrRegist.GetElement_Val(ATTR_FIRE) > 0.009)
				{ 
					var = pInfo->AttrRegist.GetElement_Val(ATTR_FIRE);
					bConvert = TRUE;
				}
			}
			break;
		case eRJP_WATERREGIST:
			{
				if(pInfo->AttrRegist.GetElement_Val(ATTR_WATER) > 0.009)
				{ 
					var = pInfo->AttrRegist.GetElement_Val(ATTR_WATER);
					bConvert = TRUE;
				}
			}
			break;
		case eRJP_TREEREGIST:
			{								
				if(pInfo->AttrRegist.GetElement_Val(ATTR_TREE) > 0.009) 
				{ 
					var = pInfo->AttrRegist.GetElement_Val(ATTR_TREE);
					bConvert = TRUE;
				}
			}
			break;
		case eRJP_GOLDREGIST:
			{
				if(pInfo->AttrRegist.GetElement_Val(ATTR_IRON) > 0.009) 
				{ 
					var = pInfo->AttrRegist.GetElement_Val(ATTR_IRON);
					bConvert = TRUE;
				}
			}
			break;
		case eRJP_EARTHREGIST:
			{
				if(pInfo->AttrRegist.GetElement_Val(ATTR_EARTH) > 0.009) 
				{ 
					var = pInfo->AttrRegist.GetElement_Val(ATTR_EARTH);
					bConvert = TRUE;
				}
			}
			break;
		case eRJP_PHYATTACK:
			{
				if(pInfo->PhyAttack > 0) 
				{ 
					var = pInfo->PhyAttack;
					bConvert = TRUE;
				}
			}
			break;
		case eRJP_CRITICAL:
			{
				if(pInfo->CriticalPercent > 0) 
				{ 
					var = pInfo->CriticalPercent;
					bConvert = TRUE;
				}
			}
			break;		
		case eRJP_FIREATTACK:
			{
				if(pInfo->AttrAttack.GetElement_Val(ATTR_FIRE) > 0.009) 
				{ 
					var = pInfo->AttrAttack.GetElement_Val(ATTR_FIRE);
					bConvert = TRUE;
				}
			}
			break;	
		case eRJP_WATERATTACK:
			{
				if(pInfo->AttrAttack.GetElement_Val(ATTR_WATER) > 0.009) 
				{ 
					var = pInfo->AttrAttack.GetElement_Val(ATTR_WATER);
					bConvert = TRUE;
				}
			}
			break;	
		case eRJP_TREEATTACK:
			{
				if(pInfo->AttrAttack.GetElement_Val(ATTR_TREE) > 0.009) 
				{ 
					var = pInfo->AttrAttack.GetElement_Val(ATTR_TREE);
					bConvert = TRUE;
				}
			}
			break;	
		case eRJP_GOLDATTACK:
			{
				if(pInfo->AttrAttack.GetElement_Val(ATTR_IRON) > 0.009) 
				{ 
					var = pInfo->AttrAttack.GetElement_Val(ATTR_IRON);
					bConvert = TRUE;
				}
			}
			break;	
		case eRJP_EARTHATTACK:
			{
				if(pInfo->AttrAttack.GetElement_Val(ATTR_EARTH) > 0.009) 
				{ 
					var = pInfo->AttrAttack.GetElement_Val(ATTR_EARTH);
					bConvert = TRUE;
				}
			}
			break;	
		case eRJP_PHYDEFENSE:
			{
				if(pInfo->PhyDefense > 0)
				{
					var = pInfo->PhyDefense;
					bConvert = TRUE;
				}
			}
			break;	
		default:
			{
				return FALSE;
			}	
		}
		if(bConvert)
		{
//check plz 1020
//			WORD plusNum = var*100;
//			WORD seed = (pRInfo->w*(random(0, 100) - ItemLevel/2+wAbilityGrade));
//			num = plusNum/seed;


			while(num)
			{
				if(ITEMMGR->IsDupItem(pRInfo->wItemIdx))
				{
					if(num > MAX_YOUNGYAKITEM_DUPNUM)
					{
						num -= MAX_YOUNGYAKITEM_DUPNUM;
						wMatItemOut[wMatItemNumOut].wItemIdx = pRInfo->wItemIdx;
						wMatItemOut[wMatItemNumOut].Dur = MAX_YOUNGYAKITEM_DUPNUM;
						wMatItemOut[wMatItemNumOut].ItemPos = 0;
					}
					else
					{
						num = 0;
						wMatItemOut[wMatItemNumOut].wItemIdx = pRInfo->wItemIdx;
						wMatItemOut[wMatItemNumOut].Dur = num;
						wMatItemOut[wMatItemNumOut].ItemPos = 0;
					}
				}
				else
				{
					--num;
					wMatItemOut[wMatItemNumOut].wItemIdx = pRInfo->wItemIdx;
					wMatItemOut[wMatItemNumOut].Dur = 0;
					wMatItemOut[wMatItemNumOut].ItemPos = 0;
				}

				++wMatItemNumOut;
			}
			bConvert = FALSE;	
		}
	}

	ASSERT(wMatItemNumOut<=MAX_DISSOLVEGRID_NUM);
	if(!EnoughInvSpace(wMatItemNumOut))
		return FALSE;
	else
		return TRUE;
}
BOOL CDissloveDlg::EnoughInvSpace(WORD wMatItemNum)
{
	for(int i = TP_INVENTORY_START ; i < TP_INVENTORY_END && wMatItemNum != 0 ; ++i)
	{
		if(!GAMEIN->GetInventoryDialog()->IsExist(i))
		{
			--wMatItemNum;
		}
	}

	if(wMatItemNum == 0)
		return TRUE;
	else
		return FALSE;
}
BOOL CDissloveDlg::EnoughMoney(LEVELTYPE ItemLevel)
{
	if(HERO->GetMoney() > ItemLevel*ITEM_DISSOLVE_PRICE_VALUE)
		return TRUE;
	return FALSE;
}
void CDissloveDlg::DissolveOkBtn(CDissloveDlg * pThis)
{

	if(pThis->IsEmpty(0))
	{
		CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(222) );
		return;
	}
	
	CItem * pTargetItem = (CItem *)m_VirtualItem[0].GetLinkItem();
	const ITEM_INFO * pInfo = pTargetItem->GetItemInfo();

	// 面盒茄 捣 眉农
	if(!EnoughMoney(pInfo->LimitLevel))
	{
		CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(222) );
		return;
	}

	/*
	// 辑滚俊辑父
	// 后傍埃捞 乐绰瘤 眉农
	MATERIAL_ARRAY MatArray[MAX_DISSOLVEGRID_NUM];
	WORD wMatItemNum = 0;
	WORD grade = ABILITYMGR->GetAbilityLevel(ABILITYINDEX_ITEMDISSOLVE, HERO->GetAbilityGroup());
	if(!EnoughSpace(pTargetItem->GetDurability(), pInfo->LimitLevel, grade, MatArray, wMatItemNum))
	{
		CHATMGR->AddMsg( CTC_TOWHOLE, CHATMGR->GetChatMsg(222) );
		return;
	}*/
	

	MSG_ITEM_DISSOLVE_SYN msg;
	msg.Category = MP_ITEM;
	msg.Protocol = MP_ITEM_DISSOLVE_SYN;
	msg.dwObjectID = HEROID;
	msg.wTargetItemIdx	= pTargetItem->GetItemIdx();
	msg.TargetPos		= pTargetItem->GetPosition();
	msg.wOptionIdx		= pTargetItem->GetDurability();

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

}
void CDissloveDlg::DissolveCancelBtn(CDissloveDlg * pThis)
{
	pThis->Release();
	pThis->SetActiveRecursive(FALSE);
	CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(223) );
}	

BOOL CDissloveDlg::AddVirtualItemWrap(POSTYPE relPos, CItem * pItem)
{
	m_VirtualItem[relPos].SetData(pItem->GetItemIdx());
	m_VirtualItem[relPos].SetLinkItem(pItem);
	if(ITEMMGR->IsOptionItem(pItem->GetItemIdx(), pItem->GetDurability()))
		ITEMMGR->SetToolTipIcon((cIcon*)&m_VirtualItem[relPos], ITEMMGR->GetItemOption(pItem->GetDurability()));
	else
		ITEMMGR->SetToolTipIcon((cIcon*)&m_VirtualItem[relPos]);
	return AddVirtualItem(relPos, &m_VirtualItem[relPos]);
}

BOOL CDissloveDlg::AddVirtualItem(POSTYPE relPos, CVirtualItem * pItem)
{
	//empty 眉农饶 
	if(relPos == 0)
	{
		if(IsEmpty(0))
		{
			m_pDissolveDlg->AddIcon(0, (cIcon *)pItem);
			return TRUE;
		}
		return FALSE;
	}
	else
	{
		if(IsEmpty(relPos))
		{
			m_pDissolveGridDlg->AddIcon(relPos-1, (cIcon *)pItem);
			return TRUE;
		}
		return FALSE;
	}
}

BOOL CDissloveDlg::OnActionEvent(LONG lId, void * p, DWORD we)
{
	CDissloveDlg * pDissloveDlg = (CDissloveDlg *)p;
	switch(we)
	{
	case WE_CLOSEWINDOW:
		{
			pDissloveDlg->Release();
			return TRUE;
		}
		break;
	}

	switch( lId )
	{
	case DIS_DISSOLVEOKBTN:
		{
			CDissloveDlg::DissolveOkBtn(pDissloveDlg);
		}
		break;
	case DIS_DISSOLVECANCELBTN:
		{
			CDissloveDlg::DissolveCancelBtn(pDissloveDlg);
		}
		break;
		
	}

	return TRUE;
}

⌨️ 快捷键说明

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