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

📄 heroitem.cpp

📁 网络游戏魔域源代码 测试可以完整变异
💻 CPP
📖 第 1 页 / 共 3 页
字号:
				
	if (nPosition == ITEMPOSITION_WEAPONR)
	{
		if (this->GetEquipment(ITEMPOSITION_WEAPONL))
		{
			const OBJID idUnequipLeftWeaponFirst = 100053;
			g_objGameMsg.AddMsg(g_objGameDataSet.GetStr(idUnequipLeftWeaponFirst));
			return false;
		}
	}

	CItem* pItem = this->GetEquipment(nPosition);
	if (!pItem)
		return false;

	CMsgItem msg;
	if(msg.Create(pItem->GetID(), nPosition, ITEMACT_UNEQUIP))
		msg.Send();
	
	return true;
}

//--------------------------------------------------------------
CItem* CHero::SearchEquipment(OBJID idItem)
{
	if (ID_NONE == idItem)
		return NULL;

	for (int i=0; i<_MAX_EQUIPMENT; i++)
	{
		CItem* pEquip = m_pEquipment[i];
		if (pEquip && pEquip->GetID() == idItem)
			return pEquip;
	}

	return NULL;
}

//--------------------------------------------------------------
BOOL CHero::CanEquip(int nPosition, CItem* pItem) const
{
	return true;
}

//--------------------------------------------------------------
DWORD CHero::GetCarryingCapacity()
{
	int nStep = 0;
	int nBaseWeight = 0;
	switch(this->GetProfessionSort())
	{
	case PROFSORT_SOLDIER:
		nStep = 3;
		nBaseWeight = 30;
		break;
		
	case PROFSORT_ARCHER:
		nStep = 2;
		nBaseWeight = 20;
		break;
		
	case PROFSORT_MAGICIAN:
		nStep = 2;
		nBaseWeight = 20;
		break;
	}
	int nWeight = nBaseWeight + this->GetLev() * nStep - nStep;
	return __max(0, nWeight);
}
//--------------------------------------------------------------
DWORD CHero::GetItemTotalWeight()
{
	// 圣战不走负重
	return 0;
}
//--------------------------------------------------------------
BOOL CHero::IsPackageFull(CItem* pItem)
{
	if (pItem)
	{
		int nPackageType = pItem->GetPackageType();
		if ( g_objHero.GetItemAmount (nPackageType) < g_objHero.GetPackageLimit (nPackageType) )
			return FALSE;
		if (pItem->GetAmount() >= pItem->GetAmountLimit()) 
		{
			if ( g_objHero.GetItemAmount (nPackageType) < g_objHero.GetPackageLimit (nPackageType) )
				return FALSE;
		}
		else 
		{
			int nAmount = g_objHero.GetItemAmount(nPackageType);
			for(int i =0 ;i< nAmount ;i++)
			{
				CItem* pOldItem = g_objHero.GetItemByIndex(i,nPackageType);
				if (pOldItem && pOldItem->GetTypeID() == pItem->GetTypeID()
					&& (pItem->GetAmount() + pOldItem->GetAmount() <= pItem->GetAmountLimit())) 
					return FALSE;
			}
		}
	}			
	return TRUE;
}
//--------------------------------------------------------------
int CHero::GetAtkRange()
{
/*	if(this->HaveBow())
		return this->GetBowShootRange();*/
	if (this->IsTransform())
		return 1;

	int nRange = 1, nRangeR = 0, nRangeL = 0;
	CItem* pRWeapon = this->GetEquipment(ITEMPOSITION_WEAPONR);
	if (pRWeapon)
		nRangeR = pRWeapon->GetAtkRange();

	CItem* pLWeapon = this->GetEquipment(ITEMPOSITION_WEAPONL);
	if (pLWeapon)
		nRangeL = pLWeapon->GetAtkRange();

	if(nRangeR && nRangeL)
		nRange = (nRangeR + nRangeL) / 2;
	else if(nRangeR)
		nRange = nRangeR;
	else if(nRangeL)
		nRange = nRangeL;

	// weapon skill factor
	int nAmount = m_setMagic.size();
	for(int i = 0; i < nAmount; i ++)
	{
		CMagic* pMagic = m_setMagic[i];
		if (pMagic && (MAGICSORT_ATKRANGE == pMagic->m_infoMagicType.dwActionSort))
		{
			CItem* pWeaponR = this->GetEquipment(ITEMPOSITION_WEAPONR);
			CItem* pWeaponL = this->GetEquipment(ITEMPOSITION_WEAPONL);

			if ((pWeaponR && pWeaponR->GetWeaponSkillType() == pMagic->GetWeaponRequired())
					|| (pWeaponL && pWeaponL->GetWeaponSkillType() == pMagic->GetWeaponRequired()))
			{
				nRange += pMagic->GetPower();
			}
		}
	}

	return nRange;
}

//--------------------------------------------------------------
void CHero::ImproveItem(OBJID idItem, OBJID idTreasure)
{
	CItem* pTreasure = this->GetItem(idTreasure);
	if (!pTreasure || !pTreasure->IsDragonBall())
		return;

	CItem* pItem = this->GetItem(idItem);
	if (!pItem || pItem->GetAmount() < pItem->GetAmountLimit())
		return;

	CMsgItem msg;
	IF_SUC (msg.Create(idItem, idTreasure, ITEMACT_IMPROVE))
		msg.Send();
}

//--------------------------------------------------------------
void CHero::UpLevelItem(OBJID idItem, OBJID idTreasure)
{
	CItem* pTreasure = this->GetItem(idTreasure);
	if (!pTreasure || !pTreasure->IsShootingStar())
		return;

	CItem* pItem = this->GetItem(idItem);
	if (!pItem || pItem->GetAmount() < pItem->GetAmountLimit())
		return;

	CMsgDataArray msgDataArray;
	long id[3];
	id[0]= idItem;
	id[1]= idTreasure;
	if(msgDataArray.Create(_DATAARRAY_ACTION_UPGRADE_EQUIPLEVEL,2,id)) 
		msgDataArray.Send();	
}

//--------------------------------------------------------------
void CHero::EmbedGem	(OBJID idItem, OBJID idGem, int nPos)
{
	// param check
	if (!this->GetItem(idItem))
		return;
	
	if (!this->GetItem(idGem))
		return;

	if (nPos != 1 && nPos != 2)
		return;
	
	// send msg
	CMsgGemEmbed msg;
	IF_OK (msg.Create(this->GetID(), idItem, idGem, nPos))
		msg.Send();
}

//--------------------------------------------------------------
void CHero::TakeOutGem	(OBJID idItem, int nPos)
{
	// param check
	if (!this->GetItem(idItem))
		return;
	
	if (nPos != 1 && nPos != 2)
		return;
	
	// send msg
	CMsgGemEmbed msg;
	IF_OK (msg.Create(this->GetID(), idItem, ID_NONE, nPos, GEM_TAKEOUT))
		msg.Send();
}

//--------------------------------------------------------------
BOOL CHero::IsMiner(void)
{
	CItem* pWeapon = this->GetEquipment(ITEMPOSITION_WEAPONR);
	if (!pWeapon)
		return false;

	OBJID idType = pWeapon->GetTypeID();
	if (ID_NONE == idType || 562 != (idType/1000)%1000)
		return false;

	return true;
}

//--------------------------------------------------------------
void CHero::Mine(void)
{
	if(this->IsTransform())
	{
		// 变身以后不可采矿...
		return;
	}
	// condition check
	CItem* pWeapon = this->GetEquipment(ITEMPOSITION_WEAPONR);
	if (!pWeapon)
	{
		OBJID idMineToolError = 100054;
		g_objGameMsg.AddMsg(g_objGameDataSet.GetStr(idMineToolError));
		return;
	}

	OBJID idType = pWeapon->GetTypeID();
	if (ID_NONE == idType || 562 != (idType/1000)%1000)
	{
		OBJID idMineToolError = 100054;
		g_objGameMsg.AddMsg(g_objGameDataSet.GetStr(idMineToolError));
		return;
	}

	// prevent repeat
	if (_COMMAND_MINE == this->GetCommandType())
		return;

	// set cmd now
	CCommand cmd;
	cmd.iType	= _COMMAND_MINE;
	cmd.iStatus	= _CMDSTATUS_BEGIN;

	this->SetCommand(&cmd);

	CMsgAction msg;
	IF_SUC (msg.Create(this->GetID(), 0, 0, this->GetDir(), actionMine))
		msg.Send();
}

//--------------------------------------------------------------
BOOL CHero::IsAllEquipmentNonsuch()
{
	BOOL bReturn = true;
	for (int i=0; i<_MAX_EQUIPMENT; i++)
	{
		if(!m_pEquipment[i])
		{
			bReturn = false;
		}
		else
		{
			if(!CItem::IsNonsuchItem(m_pEquipment[i]->GetTypeID()))
			{
				bReturn = false;
			}
		}
	}	
	return bReturn;
}
//--------------------------------------------------------------
BOOL CHero::SplitItem	(OBJID idItem, int nAmount)
{
	CItem* pItem = g_objHero.GetItem(idItem);
	if(!pItem)
		return false;
	if(nAmount <= 0)
		return false;
	if(pItem->GetSort() != ITEMSORT_EXPEND)
		return false;
	if(pItem->GetAmount() <= nAmount)
		return false;
	CMsgItem msg;
	if(msg.Create(idItem, nAmount, ITEMACT_SPLITITEM))
		msg.Send();
	return true;
}
//--------------------------------------------------------------
BOOL CHero::CombinItem	(OBJID idItemSource, OBJID idItemTarget)
{
/*	CItem* pItemSource = g_objHero.GetItem(idItemSource);
	CItem* pItemTarget = g_objHero.GetItem(idItemTarget);
	if(!pItemSource || !pItemTarget)
		return false;
	if(pItemSource->GetSort() != ITEMSORT_EXPEND && pItemSource->GetSort() != ITEMSORT_EXPEND)
		return false;*/
	CMsgItem msg;
	if(msg.Create(idItemSource, idItemTarget, ITEMACT_COMBINEITEM))
		msg.Send();
	return true;
}
//--------------------------------------------------------------
void CHero::IdentItem(OBJID idItem)
{
	CItem* pItem = this->GetItem(idItem);
	if(pItem && pItem->TestStatus(_ITEM_STATUS_NOT_IDENT))
	{
		CMsgItem msgItem;
		if(msgItem.Create(idItem, 0, ITEMACT_IDENT))
			msgItem.Send();
	}
	else
	{
		// 只有未鉴定物品才能被鉴定
		const OBJID idStr = 100158;
		g_objGameMsg.AddMsg(g_objGameDataSet.GetStr(idStr));
	}
}
//--------------------------------------------------------------
void	CHero::ImproveQuality(OBJID idItem, OBJID idGem)
{
	CMsgDataArray msgDataArray;
	long id[2];
	id[0]= idItem;
	id[1]= idGem;
	if(msgDataArray.Create(_DATAARRAY_ACTION_UPGRADE_QUALITY,2,id)) 
		msgDataArray.Send();
}
//--------------------------------------------------------------
void	CHero::ImproveSoulDegree(OBJID idItem, OBJID idGem)
{
	CMsgDataArray msgDataArray;
	long id[2];
	id[0]= idItem;
	id[1]= idGem;
	if(msgDataArray.Create(_DATAARRAY_ACTION_UPGRADE_SUPERADDITION,2,id)) 
		msgDataArray.Send();
}
//--------------------------------------------------------------
void	CHero::ImproveMagic(OBJID idItem, OBJID idGem)
{
	CMsgDataArray msgDataArray;
	long id[2];
	id[0]= idItem;
	id[1]= idGem;
	if(msgDataArray.Create(_DATAARRAY_ACTION_EMBEDGEM,2,id)) 
		msgDataArray.Send();
}
//--------------------------------------------------------------

int		CHero::GetPackageLimit(int nPackageType)
{
	int nLimit = 0;
	switch(nPackageType)
	{
	case PACKAGE_BAG:
		nLimit =  _MAX_HEROITEM;
		break;
	case PACKAGE_PET:
		nLimit = _MAX_HEROPET;
		break;
	case PACKAGE_EGG:
		nLimit = _MAX_HEROEGG;
		break;
	case PACKAGE_SOUL:
		nLimit = _MAX_HEROITEM;
		break;
	default:
		break;
	}
	return nLimit;
}

int CHero::GetGhostGemAmount(int nSubType)
{
	int nReturn = 0;
	int nAmount = this->GetItemAmount(PACKAGE_SOUL)	;
	for(int i=0;i<nAmount;i++)
	{
		CItem* pItem = this->GetItemByIndex(i,PACKAGE_SOUL);
		if (pItem!=NULL)
		{
			if (nSubType/1000*1000 == pItem->GetSubType()/1000*1000)
			{
				nReturn++;
			}
		}
	}
	return nReturn;
}


void CHero::CompletePlayerTaskForItem(OBJID idTask,OBJID idItem)
{
	if (idTask)
	{
		CMsgItem msgItem;
		if(msgItem.Create(idTask,idItem,ITEMACT_COMPLETE_TASK))
			msgItem.Send();
	}
}

//-------------------------------------------------------------------
//拍卖物品
void CHero::AuctionAddItem(OBJID idNpc,OBJID idItem,int dwValue)
{
	if (idNpc != ID_NONE && idItem != ID_NONE)
	{
		CMsgAuction msg;
		if (msg.Create(idNpc,idItem,dwValue,AUCTION_ADD))
			msg.Send();
	}
}

void CHero::AuctionBid(OBJID idNpc,OBJID idItem,int dwValue)
{
	if (idNpc !=ID_NONE && idItem !=ID_NONE)
	{
		CMsgAuction msg;
		if (msg.Create(idNpc,idItem,dwValue,AUCTION_BID))
			msg.Send();
	}
}

void CHero::AuctionItemInfo(OBJID idNpc, OBJID idItem)
{
	if (idNpc != ID_NONE && idItem != ID_NONE)
	{
		CMsgAuction msg;
		if (msg.Create(idNpc,idItem,AUCTION_ITEM_INFO))
			msg.Send();		
	}
}

CItem* CHero::GetAuctionItem()
{
	//temp code!
	if (m_AuctionItem != NULL)
		return m_AuctionItem;
	else
		return NULL;
}

void CHero::SetAuctionItem(CItem* pItem)
{
	//temp code!
	if (pItem != NULL)
		m_AuctionItem = pItem;
}

void CHero::DelAuctionItem ()
{
	m_AuctionItemId = 0;
	m_AuctionItemMoney = 0;		//拍卖价格
	strcpy(m_AuctionName,"");	//加价人
	strcpy(m_AuctionOwnerName,""); //物品主人
	SAFE_DELETE(m_AuctionItem);	//拍卖物品	
}

⌨️ 快捷键说明

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