📄 skillinfo.cpp
字号:
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 + -