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

📄 heroitem.cpp

📁 网络游戏魔域源代码 测试可以完整变异
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	case ITEMSORT_RING:
		nPosition = ITEMPOSITION_RINGR;
		break;

	case ITEMSORT_SHOES:
		nPosition = ITEMPOSITION_SHOES;
		break;

	case ITEMSORT_MOUNT:
		nPosition = ITEMPOSITION_MOUNT;
		break;

	default:
		break;
	}

/*	if (nPosition != 0)
	{
		CCommand cmd;
		cmd.iType	=_COMMAND_STANDBY;
		cmd.iStatus	=_CMDSTATUS_BEGIN;
		
		g_objHero.SetCommand(&cmd);	
		g_objHero.ResetActionData();
	}*/

	CMsgItem msg;
	if(msg.CreateForUseItem(id, nPosition, ITEMACT_USE, idTarget))
		msg.Send();
}
//--------------------------------------------------------------
BOOL CHero::TryItemTarget(CItem* pItem, OBJID idTarget)
{
	if (!pItem)
		return false;

	if (pItem->TestTarget(TARGET_NONE))	// 不限定条件		
		return true;
	
	if (pItem->TestTarget(TARGET_FORBIDDEN))	// 禁止对任何目标使用		
		return false;	
	
	CPlayer* pPlayer = g_objPlayerSet.GetPlayer(idTarget,true);
	if (!pPlayer)
		return false;
	else
	{
		if (pItem->TestTarget(TARGET_SELF)) //对自己使用
		{
			if (pPlayer->GetID() != g_objHero.GetID()
				&& !pPlayer->IsMyPet()) 
				return false;
		}
		if (pItem->TestTarget(TARGET_OTHERS)) //对他人使用
		{
			if (pPlayer->GetID() == g_objHero.GetID()
				|| pPlayer->IsMyPet())
				return false;
		}
		if (pItem->TestTarget(TARGET_BODY)) //对尸体使用
		{
			if (!pPlayer->IsDead()) 
				return false;
		}
		if (pItem->TestTarget(TARGET_CHK_PKMODE))	//PK模式检查
		{
			if (pPlayer->GetID() == g_objHero.GetID()
				&& pPlayer->IsMyPet())
				return false;
			if (g_objHero.GetPkMode() == PKMODE_MONSTERONLY)  //安全
			{
				if (pPlayer->IsPlayer() || pPlayer->IsPet())
					return false;
			}
			else if (g_objHero.GetPkMode() == PKMODE_TMEXCLUDE) //组队
			{
				if(pPlayer->IsPlayer())
				{
					if(g_objHero.GetTeamMemberInfoByID(pPlayer->GetID()))
						return false;
					if(g_objHero.GetFriend(pPlayer->GetID()))
						return false;
					if (strcmp(pPlayer->GetName(),g_objHero.GetMate()) == 0)
						return false;
					if (pPlayer->GetSydicateID() == g_objHero.GetSydicateID())
						return false;
				}
				else if (pPlayer->IsPet())
				{
					if(g_objHero.GetTeamMemberInfoByID(pPlayer->GetPetOwnerId()))
						return false;
					if(g_objHero.GetFriend(pPlayer->GetPetOwnerId()))
						return false;
					CPlayer* pOwnerPlayer = g_objPlayerSet.GetPlayer(pPlayer->GetPetOwnerId());
					if (pOwnerPlayer && pOwnerPlayer->GetSydicateID() == g_objHero.GetSydicateID())
						return false;
					if (pOwnerPlayer && strcmp(pPlayer->GetName(),g_objHero.GetMate()) == 0)
						return false;
				}
			}
			else if (g_objHero.GetPkMode() == PKMODE_ARRESTMENT) //捕杀
			{
				if (pPlayer->IsPlayer())
				{
					if (!pPlayer->TestStatus(USERSTATUS_CRIME)
						&& !pPlayer->TestStatus(USERSTATUS_DARKRED))
					return false;					
				}
				else if (pPlayer->IsPet())
				{
					CPlayer* pOwnerPlayer = g_objPlayerSet.GetPlayer(pPlayer->GetPetOwnerId());
					if (pOwnerPlayer 
						&& !pOwnerPlayer->TestStatus(USERSTATUS_CRIME)
						&& !pOwnerPlayer->TestStatus(USERSTATUS_DARKRED))
						return false;
				}
			}
//			else if (g_objHero.GetPkMode() == PKMODE_FREE) //自由pk 无限制
		}
		//目标类型检测
		if (!pItem->TestTarget(TARGET_USER)		//不可以用于玩家		
			&& pPlayer->IsPlayer())
			return false;
		if (!pItem->TestTarget(TARGET_MONSTER)  //不可以用于怪物
			&& pPlayer->IsMonster())
			return false;
		if (!pItem->TestTarget(TARGET_EUDEMON)  //不可以用于幻兽
			&& pPlayer->IsPet())
			return false;
	}
	return true;
}

//--------------------------------------------------------------
BOOL CHero::TryItem(CItem* pItem)
{
	if (!pItem)
		return false;

	// task item
	if (pItem->IsTaskItem())
		return false;

	// level check
	if (pItem->GetLevelRequired() != 0 && 
			this->GetLev() < pItem->GetLevelRequired())
		return false;

	// attribute check
	if (pItem->GetForceRequired() != 0 &&
			this->GetForce() < pItem->GetForceRequired())
		return false;

	if (pItem->GetSpeedRequired() != 0 &&
			this->GetSpeed() < pItem->GetSpeedRequired())
		return false;

	if (pItem->GetHealthRequired() != 0 &&
			this->GetHealth() < pItem->GetHealthRequired())
		return false;

	if (pItem->GetSoulRequired() != 0 &&
			this->GetOriginalSoul() < pItem->GetSoulRequired())
		return false;

	if(pItem->GetSexRequried() == SEX_MALE || pItem->GetSexRequried() == SEX_FEMALE)
		if(this->GetSex() != pItem->GetSexRequried())
			return false;
	if(pItem->TestStatus(_ITEM_STATUS_NOT_IDENT))
		return false;
	// profession check
	int nReqProfession = pItem->GetProfessionRequired ();
	int nProfession = this->GetProfession();
	if ( nReqProfession != 0 )
	{
		int nRequireProfSort	= nReqProfession/10;
		int nRequireProfLevel	= nReqProfession%10;

		if (nRequireProfSort != (nProfession%1000)/10)
			return false;
		if (nProfession%10 < nRequireProfLevel)
			return false;
	}


	return true;
}
//--------------------------------------------------------------
BOOL	CHero::TryItem(OBJID idItem, int nPosition)
{
	CItem* pItem = g_objHero.GetItem(idItem);
	if(!pItem)
		return false;
	if(!this->TryItem(pItem))
		return false;

	if(pItem->GetTypeID() == _ARROW)
	{
		if(this->GetRWeapon()/1000%1000 == 500 && nPosition == ITEMPOSITION_WEAPONL)
			return true;
		else 
			return false;
	}

	
	if(pItem->GetTypeID() == _DART)
	{
		if(this->GetRWeapon()/1000%1000 == 501 && nPosition == ITEMPOSITION_WEAPONL)
			return true;
		else 
			return false;
	}

	switch(pItem->GetSort())
	{
	case ITEMSORT_EXPEND:
		return false;
		break;
	case ITEMSORT_TREASURE:
		return (nPosition == ITEMPOSITION_TREASURE);

	case ITEMSORT_HELMET:
		return (nPosition == ITEMPOSITION_HELMET);

	case ITEMSORT_NECKLACE:
		return (nPosition == ITEMPOSITION_NECKLACE);
		
	case ITEMSORT_ARMOR:
		return (nPosition == ITEMPOSITION_ARMOR);
		
	case ITEMSORT_WEAPON_SINGLE_HAND:
		return (nPosition == ITEMPOSITION_WEAPONR);
				
	case ITEMSORT_WEAPON_DOUBLE_HAND:
		{
			if (this->GetEquipment(ITEMPOSITION_WEAPONL))
				return false;
			else
				return true;
		}

	case ITEMSORT_SHIELD:
		{
			CItem* pItem = this->GetEquipment(ITEMPOSITION_WEAPONR);
			if(!pItem)
				return false;
			if (pItem && ITEMSORT_WEAPON_DOUBLE_HAND == pItem->GetSort())
				return false;
			else
				return true;
		}
		
	case ITEMSORT_RING:
		return (nPosition == ITEMPOSITION_RINGR);
		
	case ITEMSORT_SHOES:
		return (nPosition == ITEMPOSITION_SHOES);
	default:
		return false;
	}
}
//--------------------------------------------------------------
void CHero::SetEquipment (int nPosition, CItem* pItem)
{
	//if (!pItem)
	//	return;

	MYASSERT(nPosition-1>=0 && nPosition-1<_MAX_EQUIPMENT);

	int nType = nPosition-1;
	switch(nPosition)
	{
	case ITEMPOSITION_HELMET:
		m_pEquipment[nType] = pItem;
/*
		if (pItem)
			this->SetArmet(pItem->GetTypeID());
		else
			this->SetArmet(ID_NONE);
*/
		break;

	case ITEMPOSITION_NECKLACE:
		m_pEquipment[nType] = pItem;
		break;

	case ITEMPOSITION_ARMOR:
		m_pEquipment[nType] = pItem;
		if (pItem)
			this->SetArmor(pItem->GetTypeID());
		else
			this->SetArmor(ID_NONE);
		break;

	case ITEMPOSITION_WEAPONR:
		m_pEquipment[nType] = pItem;
		if (pItem)
		{
			this->SetRWeapon(pItem->GetTypeID());
			/*if(pItem->GetSort() == ITEMSORT_WEAPON_DOUBLE_HAND || ITEMSORT_WEAPON_SINGLE_HAND == pItem->GetSort())
			{
				CItem* pLItem = g_objHero.GetEquipment(ITEMPOSITION_WEAPONL);
				if(pItem->IsBow() && pLItem && pLItem->IsArrow())
				{
				}
				else
				{
					this->AddItem(m_pEquipment[nPosition]);
					m_pEquipment[nPosition] = NULL;
					this->SetLWeapon(ID_NONE);
				}
			}*/
		}
		else
		{
			this->SetRWeapon(ID_NONE);
		}
		break;

	case ITEMPOSITION_WEAPONL:
		m_pEquipment[nType] = pItem;
		if (pItem)
			this->SetLWeapon(pItem->GetTypeID());
		else
			this->SetLWeapon(ID_NONE);
		break;

	case ITEMPOSITION_RINGR:
		m_pEquipment[nType] = pItem;
		break;

	case ITEMPOSITION_TREASURE:
		m_pEquipment[nType] = pItem;
		break;

	case ITEMPOSITION_SHOES:
		m_pEquipment[nType] = pItem;
		break;

	case ITEMPOSITION_MOUNT:
		m_pEquipment[nType] = pItem;
		this->SetMount(pItem->GetTypeID());
		break;
		
	case ITEMPOSITION_SPRITE:
		m_pEquipment[nType] = pItem;
		break;
	}
	::PostCmd(CMD_FLASHEQUIPMENT);
}

//--------------------------------------------------------------
BOOL CHero::EquipItem (int nPosition, OBJID id)
{
	if (this->IsDead())
		return false;
	
	CCommand* pCommand = this->GetCommand();
	if (pCommand
		&& pCommand->iType != _COMMAND_STANDBY
		&& pCommand->iType != _COMMAND_WALK
		&& pCommand->iType != _COMMAND_RUN)
	{
		return false;
	}
	CItem* pItem	=this->GetItem(id);
	if (!pItem)
		return false;

	if (!this->TryItem(pItem))
		return false;

	if(pItem->GetTypeID() == _ARROW && pItem->GetTypeID() == _DART)
	{
		if(pItem->GetTypeID() == _ARROW && this->GetRWeapon()/1000%1000 != 500)
			return false;
		else if(pItem->GetTypeID() == _ARROW && nPosition == ITEMPOSITION_WEAPONL)
		{
			CMsgItem msg;
			if (msg.Create(id, nPosition, ITEMACT_USE))
				msg.Send();
			return true;
		}
		
		if(pItem->GetTypeID() == _DART && this->GetRWeapon()/1000%1000 != 501)
			return false;
		else if(pItem->GetTypeID() == _DART && nPosition == ITEMPOSITION_WEAPONL)
		{
			CMsgItem msg;
			if (msg.Create(id, nPosition, ITEMACT_USE))
				msg.Send();
			return true;
		}
		return false;
	}
	
	switch(pItem->GetSort())
	{
	case ITEMSORT_HELMET:
		if (nPosition != ITEMPOSITION_HELMET)
			return false;
		break;

	case ITEMSORT_NECKLACE:
		if (nPosition != ITEMPOSITION_NECKLACE)
			return false;
		break;

	case ITEMSORT_ARMOR:
		if (nPosition != ITEMPOSITION_ARMOR)
			return false;
		break;

	case ITEMSORT_WEAPON_SINGLE_HAND:
		{
			if (nPosition != ITEMPOSITION_WEAPONR)
			{
					return false;
			}

		}
		break;

	case ITEMSORT_WEAPON_DOUBLE_HAND:
		{
			if (nPosition != ITEMPOSITION_WEAPONR)
			{
				const OBJID idEqumipError = 100049;
				g_objGameMsg.AddMsg(g_objGameDataSet.GetStr(idEqumipError));
				return false;
			}

			if (this->GetEquipment(ITEMPOSITION_WEAPONL))
			{
				const OBJID idEqumipError = 100047;
				g_objGameMsg.AddMsg(g_objGameDataSet.GetStr(idEqumipError));
				return false;
			}
		}
		break;

	case ITEMSORT_SHIELD:
		{
			if (nPosition != ITEMPOSITION_WEAPONL)
				return false;

			CItem* pEquipment = this->GetEquipment(ITEMPOSITION_WEAPONR);
			if(!pEquipment)
				return false;
			if (pEquipment && ITEMSORT_WEAPON_DOUBLE_HAND == pEquipment->GetSort())
			{
				const OBJID idEqumipError = 100048;
				g_objGameMsg.AddMsg(g_objGameDataSet.GetStr(idEqumipError));
				return false;
			}
		}
		break;

	case ITEMSORT_RING:
		if (nPosition != ITEMPOSITION_RINGR)
			return false;
		break;

	case ITEMSORT_SHOES:
		if (nPosition != ITEMPOSITION_SHOES)
			return false;
		break;
	}

	CMsgItem msg;
	if (msg.Create(id, nPosition, ITEMACT_USE))
		msg.Send();

	return true;
}

//--------------------------------------------------------------
BOOL CHero::UnequipItem(int nPosition)
{
	if (this->IsDead())
		return false;

⌨️ 快捷键说明

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