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

📄 itempack.cpp

📁 魔域的源代码
💻 CPP
字号:
// ItemPack.cpp: implementation of the CItemPack class.
//
//////////////////////////////////////////////////////////////////////

#include "windows.h"
#include "define.h"
#include "ItemPack.h"

MYHEAP_IMPLEMENTATION(CItemPack,s_heap)
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CItemPack::CItemPack()
{
	m_setItem	= ITEM_SET::CreateNew(true);

	for(int i = 0; i < MAX_EQUIPSIZE; i++)
		m_setEquip.Push(NULL);
}

CItemPack::~CItemPack()
{
	for(int i = 0; i < MAX_EQUIPSIZE; i++)
		m_setEquip[i]->ReleaseByOwner();
}

CItem* CItemPack::GetEquipItem(int nPos)
{
	int idx = nPos - ITEMPOSITION_EQUIPBEGIN;
	return m_setEquip[idx];
}

CItem** CItemPack::GetEquipItemPtr(int nPos)
{
	int idx = nPos - ITEMPOSITION_EQUIPBEGIN;
	return &m_setEquip[idx];
}

void CItemPack::EquipItem(OBJID idItem, int nPos)
{
	CItem* pItem = FindItem(idItem);
	IF_OK(pItem)
	{
		CItem** ppEquip = GetEquipItemPtr(nPos);
		IF_OK(ppEquip && !*ppEquip)
		{
			pItem->SetInt(ITEMDATA_POSITION, nPos);
			*ppEquip = pItem;
			m_setItem->PopObj(idItem);
		}
	}
}

void CItemPack::UnequipItem(OBJID idItem, int nPos)
{
	CItem** ppEquip = GetEquipItemPtr(nPos);
	IF_OK(ppEquip && *ppEquip)
	{
		IF_OK(!IsItemFull())
		{
			(*ppEquip)->SetInt(ITEMDATA_POSITION, ITEMPOSITION_BACKPACK);
			m_setItem->AddObj(*ppEquip);
			*ppEquip	= NULL;
		}
	}
}

void CItemPack::DropItem(OBJID idItem)
{
	CItem* pItem = FindItem(idItem);
	IF_OK(pItem)
	{
		m_setItem->DelObj(idItem);
	}
}

void CItemPack::DropEquipItem(OBJID idItem, int nPos)
{
	CItem** ppItem = GetEquipItemPtr(nPos);
	IF_OK(ppItem && *ppItem)
	{
		(*ppItem)->ReleaseByOwner();
		*ppItem	= NULL;
	}
}

void CItemPack::SetItemAmount(OBJID idItem, int nAmount)
{
	CItem* pItem = FindItem(idItem, idItem);
	IF_OK(pItem)
	{
		pItem->SetInt(ITEMDATA_AMOUNT, nAmount);
	}
}

CItem* CItemPack::FindItem(OBJID idItem, OBJID idEquip)
{
	if(idItem)
	{
		CItem* pItem = m_setItem->GetObj(idItem);
		if(pItem)
			return pItem;
	}

	if(idEquip)
	{
		EQUIP_SET::Iterator iter = m_setEquip.NewEnum();
		while(iter.Next())
		{
			CItem* pItem = *iter;
			if(pItem->GetID() == idEquip)
				return pItem;
		}
	}

	return NULL;
}

CItem* CItemPack::FindItemByType(OBJID idType)
{
	ITEM_SET::Iterator pItem = m_setItem->NewEnum();
	while(pItem.Next())
	{
		if(pItem && pItem->IsMedicine())
			return pItem;
	}
	return NULL;
}

bool CItemPack::AddItem(CItem *pItem)
{
	CHECKF(pItem && pItem->GetInt(ITEMDATA_POSITION) == ITEMPOSITION_BACKPACK && !IsItemFull());

	m_setItem->AddObj(pItem);
	return true;
}

int CItemPack::GetWeaponRange()
{
	CItem* pItem = GetEquipItem(ITEMPOSITION_WEAPONR);
	if(pItem)
		return ::CutTrail(1, pItem->GetInt(ITEMDATA_ATKRANGE));

	return 1;
}

bool CItemPack::AddEquip(CItem *pItem)
{
	int nPos = pItem->GetInt(ITEMDATA_POSITION);
	CHECKF(pItem && nPos >= ITEMPOSITION_EQUIPBEGIN && nPos < ITEMPOSITION_EQUIPEND
			&& m_setEquip[nPos - ITEMPOSITION_EQUIPBEGIN] == NULL);

	m_setEquip[nPos - ITEMPOSITION_EQUIPBEGIN]	= pItem;
	return true;
}

⌨️ 快捷键说明

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