Have!
_Ref SkillDesc
Code:
// Ref SkillDesc
MSkillDesc* pSkill = g_SkillDescManager.Find(pSkillParam->GetSkillID());
if (pSkill == NULL) {
OutputDebugString("MSkillPipe::OnEnter() Unknown SkillID \n");
return false;
}
if (pSkill->nActivationTime > 0)
SetEnterDelay(pSkill->nActivationTime);
MZoneServer* pZoneServer = MZoneServer::GetInstance();
MCommand* pCmd = pZoneServer->CreateCommand(MC_OBJECT_SKILL, MUID(0,0));
pCmd->AddParameter(new MCommandParameterUID(pActor->GetUID()));
pCmd->AddParameter(new MCommandParameterUID(pTarget->GetUID()));
pCmd->AddParameter(new MCommandParameterInt(pSkillParam->GetSkillID()));
pZoneServer->RouteToRegion(pActor->GetMap()->GetID(), pActor->GetPos(), 2000.0f, pCmd);
return true;
}
bool MSkillPipe::OnExcute(int nTime, MObject* pActor, MActParam* pParam)
{
if (pParam->GetType()!=ACTPARAM_TYPE_SKILL) {
OutputDebugString("MSkillPipe::OnEnter() Invalid ActParam \n");
return false;
}
MActParamSkill* pSkillParam = (MActParamSkill*)pParam;
MObjectCharacter* pTarget = (MObjectCharacter*)pSkillParam->GetTarget();
if (pTarget == NULL) {
OutputDebugString("MSkillPipe::OnEnter() Invalid ActParam Target \n");
return false;
}
// Ref SkillDesc
MSkillDesc* pSkill = g_SkillDescManager.Find(pSkillParam->GetSkillID());
if (pSkill == NULL) {
OutputDebugString("MSkillPipe::OnEnter() Unknown SkillID \n");
return false;
}
if (pSkill->nReactivationTime > 0)
SetExitDelay(pSkill->nReactivationTime);
for(list<MAction*>::iterator i=m_ActionList.begin(); i!=m_ActionList.end();i++) {
MAction* pAct = *i;
if (pAct->Run(nTime, pActor, pParam) == true)
continue;
else
break;
}
return true;
}
bool MSkillPipe::OnExit(int nTime, MObject* pActor, MActParam* pParam)
{
MActionPipe* pActivePipe = ((MObjectCharacter*)pActor)->FindActionPipe(PIPE_ID_ACTIVE);
if (pActivePipe->GetState() == PIPE_STATE_PENDING)
pActivePipe->Start();
return true;
}