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

📄 skillinfo.cpp

📁 墨香最新私服
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		return FALSE;
*/
	
	return TRUE;
}

BOOL CSkillInfo::IsInSkillRange(CObject* pObject,VECTOR3* pTargetPos,float TargetRadius)
{
	VECTOR3* p1 = CCharMove::GetPosition(pObject);
	VECTOR3* p2 = pTargetPos;
	p1->y = p2->y = 0;

	// 傍拜磊客 嘎绰 逞狼 鸥百芭府甫 猾促.
	float dist = CalcDistanceXZ(p1,p2) - TargetRadius;
	float addRange = 0;
	
	if(m_SkillInfo.ComboNum != SKILL_COMBO_NUM &&
		(m_SkillInfo.WeaponKind == WP_AMGI || m_SkillInfo.WeaponKind == WP_GUNG))		// 霓焊啊 酒聪搁 胶湃俊 蝶扼辑 荤沥芭府 疵绢巢
		addRange = pObject->GetAddAttackRange();

	// 傍拜磊啊 敲饭捞绢 捞搁 荤沥芭府甫 100疵妨霖促. (坷瞒 绊妨)
	if(pObject->GetObjectKind() == eObjectKind_Player)
		dist -= 100;

	if(m_SkillInfo.SkillRange+addRange < dist)	// 辑滚绰 
		return FALSE;
		
	return TRUE;
}

BOOL CSkillInfo::ComboTest(CObject* pObject)
{
	return TRUE;
}

BOOL CSkillInfo::CheckEvade(MAINTARGET* pMainTarget)
{
	return FALSE;
}
#else

BOOL CSkillInfo::IsExcutableSkillState(CHero* pHero,int SkillLevel)
{
	if(pHero->GetLevel() < m_SkillInfo.RestrictLevel)
	{
		// 饭骇捞 何练窍咯 公傍阑 矫傈窍角 荐 绝嚼聪促.
		return FALSE;
	}

	/*
	if(pHero->IsSkillCooling() == TRUE)
	{
		// 酿鸥烙捞 场唱具 公傍阑 促矫 矫傈窍角荐 乐嚼聪促.
		return FALSE;
	}
	*/
	if(pHero->GetDelayGroup()->CheckDelay(CDelayGroup::eDK_Skill,GetSkillIndex()) != 0)
		return FALSE;

	if( m_SkillInfo.WeaponKind != 0 )
	{
		if( pHero->GetWeaponEquipType() != m_SkillInfo.WeaponKind )
		{
			CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(151) );
			return FALSE;
		}
	}
	
#ifndef _TESTCLIENT_
	if( pHero->GetNaeRyuk() < GetNeedNaeRyuk(SkillLevel) )		// 郴仿八荤
	{
		CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(401) );
		return FALSE;
	}
#endif
	
	if( pHero->IsInSpecialState(eSpecialState_Stun) == TRUE)
		return FALSE;

	if( pHero->GetState() != eObjectState_None &&
		pHero->GetState() != eObjectState_Move &&
		pHero->GetState() != eObjectState_TiedUp_CanSkill /*&&
		pHero->GetState() != eObjectState_Society*/
		) {

		if( pHero->GetState() != eObjectState_SkillSyn &&
			pHero->GetState() != eObjectState_SkillUsing &&
			pHero->GetState() != eObjectState_SkillBinding &&
			pHero->GetState() != eObjectState_SkillStart &&			
			pHero->GetState() != eObjectState_SkillDelay )
		{
//			CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(141) );
			pHero->DisableAutoAttack();
		}
		
		return FALSE;
	}

	if( pHero->GetState() == eObjectState_Society )
	{
		if( pHero->EndSocietyAct() == FALSE )
		{
			pHero->DisableAutoAttack();
			return FALSE;
		}
	}

	// 饭骇 力茄
	if( pHero->GetLevel() < m_SkillInfo.RestrictLevel &&
		m_SkillInfo.ComboNum != SKILL_COMBO_NUM) // 老窜 公傍篮 饭骇 力茄 绝澜
		return FALSE;

	//if PeaceMode == TRUE then Can't Attack
//KES 阜澜.. 乞拳葛靛矫浚 磊悼栏肺 傈捧葛靛肺 官操绢辑 傍拜!	
//	if(pHero->GetCharacterTotalInfo()->bPeace == TRUE)
//	{
////		CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(142) );
//		return FALSE;
//	}

	return TRUE;
}

BOOL CSkillInfo::IsInSkillRange(CHero* pHero,CActionTarget* pTarget)
{
	VECTOR3 p1;
	pHero->GetPosition(&p1);
	VECTOR3* p2 = pTarget->GetTargetPosition();
	VECTOR3 hpos;
	pHero->GetPosition(&hpos);
	if(p2 == NULL)
		return FALSE;

	p1.y = p2->y = 0;

	// 傍拜磊客 嘎绰 逞狼 鸥百芭府甫 猾促.
	float dist = CalcDistanceXZ(&p1,p2) - pTarget->GetRadius();
	float addRange = 0;

	if( m_SkillInfo.ComboNum != SKILL_COMBO_NUM &&
		(m_SkillInfo.WeaponKind == WP_AMGI || m_SkillInfo.WeaponKind == WP_GUNG))		// 霓焊啊 酒聪搁 胶湃俊 蝶扼辑 荤沥芭府 疵绢巢
		addRange = pHero->GetAddAttackRange();

	if(m_SkillInfo.SkillRange+addRange < dist)
		return FALSE;
		
	return TRUE;
}

BOOL CSkillInfo::ComboTest(CHero* pHero)
{
#ifdef _TESTCLIENT_
	return TRUE;
#endif
	
	DWORD curcombo = pHero->GetCurComboNum();
	if( m_SkillInfo.ComboNum == SKILL_COMBO_NUM &&
		curcombo != SKILL_COMBO_NUM )
		return TRUE;
	if( m_SkillInfo.ComboNum == curcombo +1 )
		return TRUE;

	return FALSE;
}

void CSkillInfo::SendMsgToServer(CHero* pOperator,CActionTarget* pTarget)
{
	MSG_SKILL_START_SYN msg;
	MAINTARGET MainTarget;
	pTarget->GetMainTarget(&MainTarget);
	msg.InitMsg(GetSkillIndex(),&MainTarget,pOperator->GetAngleDeg(),pOperator->GetID());
	pTarget->GetTargetArray(&msg.TargetList);
	
	NETWORK->Send(&msg,msg.GetMsgLength());
}

BOOL CSkillInfo::IsValidTarget(CHero* pHero,CActionTarget* pTarget)
{
	CBattle* pBattle = BATTLESYSTEM->GetBattle(pHero);
	CObject* pTargetObj = NULL;
	if(pTarget->GetTargetID() != 0)
		pTargetObj = OBJECTMGR->GetObject(pTarget->GetTargetID());

	if(pTargetObj == NULL)
		return TRUE;

	if( pTargetObj->GetObjectKind() == eObjectKind_Npc )
		return FALSE;

	if( m_SkillInfo.FirstPhyAttack[11] != 0 ||
		m_SkillInfo.FirstAttAttackMin[11] != 0 ||
		m_SkillInfo.FirstAttAttackMax[11] != 0 )		// 霉傍拜捞 乐栏搁
	{
		if( pBattle->IsEnemy(pHero,pTargetObj) == FALSE )
			return FALSE;
	}
	
	return TRUE;
}

BOOL CSkillInfo::ConvertTargetToSkill(CHero* pHero,CActionTarget* pTarget)
{
	if(GetSkillInfo()->TargetKind == 1) // 磊脚
	{
		pTarget->SetOneTarget(pHero);
		return TRUE;
	}
	else if(GetSkillInfo()->TargetKind == 0) // 惑措
	{
		pTarget->SetOneTarget(NULL);
		return TRUE;
	}
	else
	{
		return TRUE;
	}
}

#endif

CSkillObject* CSkillInfo::GetSkillObject()
{
	CSkillObject* pSObj;
	if(m_SkillObjectPool.GetCount() == 0)
		pSObj = CSkillObjectFactory::MakeNewSkillObject(this);
	else
		pSObj = (CSkillObject*)m_SkillObjectPool.RemoveTail();
	return pSObj;
}

void CSkillInfo::ReleaseSkillObject(CSkillObject* pSObj,int kind)
{
	PTRLISTSEARCHSTART(m_SkillObjectPool,CSkillObject*,pPreObj)
		if(pSObj == pPreObj)
		{			
			return;
		}
	PTRLISTSEARCHEND

#ifdef _MAPSERVER_
	pSObj->releaseKind = kind;
#endif
	
	m_SkillObjectPool.AddHead(pSObj);
}

VECTOR3* CSkillInfo::GetTargetAreaPivotPos(VECTOR3* pOperatorPos,VECTOR3* pTargetPos)
{	
	if(IsTargetAreaFitToHero())
		return pOperatorPos;
	else
		return pTargetPos;
}

BOOL CSkillInfo::IsMultipleTargetSkill()
{
	if( m_SkillInfo.TargetRange != 0 ||
		m_SkillInfo.TargetAreaIdx != 0)
		return TRUE;
	else
		return FALSE;
}

DWORD CSkillInfo::GetSkillOperateAnimationTime(int gender)
{
	if(gender >= GENDER_MAX)
	{
		ASSERT(0);
		gender = GENDER_MALE;
	}

	return m_SkillOperateAnimationTime[gender];
}

void CSkillInfo::SetSkillTree(WORD Before,WORD After,WORD* pArray)
{
	m_AfterSkill = After;
	m_BeforeSkill = Before;
	memcpy(&m_SkillTree,pArray,sizeof(WORD)*5);
}

⌨️ 快捷键说明

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