📄 skillobjectfirstunit.cpp
字号:
// SkillObjectFirstUnit.cpp: implementation of the CSkillObjectFirstUnit class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "SkillObjectFirstUnit.h"
#include "Object.h"
#include "SkillInfo.h"
#include "..\[CC]Header\CommonCalcFunc.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CSkillObjectFirstUnit::CSkillObjectFirstUnit(SKILLINFO* pSkillInfo)
{
#ifdef _MHCLIENT_
m_pSkillInfoData = pSkillInfo;
m_hEff = 0;
#endif
}
CSkillObjectFirstUnit::~CSkillObjectFirstUnit()
{
}
void CSkillObjectFirstUnit::Init(CSkillInfo* pSkillInfo,WORD SkillLevel)
{
m_Attrib = pSkillInfo->GetAttrib();
m_RecoverStateAbnormal = pSkillInfo->GetSkillInfo()->RecoverStateAbnormal[SkillLevel-1];
m_StunRate = pSkillInfo->GetStunRate(SkillLevel);
m_StunTime = pSkillInfo->GetStunTime(SkillLevel);
m_DispelAttackFeelRate = pSkillInfo->GetDispelAttackFeelRate(SkillLevel);
}
#ifdef _MAPSERVER_
#include "StateMachinen.h"
void CSkillObjectFirstUnit::ExcuteFirstUnit(CObject* pOperator,CSkillObjectTargetList* pTargetList,
MSG_SKILLOBJECT_ADD* pAddMsg)
{
STLIST* pList;
CTargetListIterator iter(&pAddMsg->TargetList);
pTargetList->SetPositionHead();
RESULTINFO rinfo;
while(pList = pTargetList->GetNextTargetList())
{
rinfo.Clear();
DefaultFirstEffect(pOperator,pList,&rinfo);
iter.AddTargetWithResultInfo(pList->pObject->GetID(),pList->bTargetKind,&rinfo);
}
iter.Release();
}
void CSkillObjectFirstUnit::DefaultFirstEffect(CObject* pOperator,STLIST* pTarget,RESULTINFO* pRInfo)
{
if(m_RecoverStateAbnormal)
pRInfo->bDispelFromEvil = CheckRandom(m_RecoverStateAbnormal,pOperator->GetLevel(),pTarget->pObject->GetLevel());
// Stun
if(m_StunRate)
{
if(CheckRandom(m_StunRate,pOperator->GetLevel(),pTarget->pObject->GetLevel()) == TRUE)
{
pRInfo->StunTime = m_StunTime;
pTarget->pObject->StartSpecialState(eSpecialState_Stun,m_StunTime,0,0,0,FindEffectNum("monster_stun_s.beff"),0);
}
}
// 傍拜狼垮 惑角
if((pTarget->pObject->GetObjectKind() & eObjectKind_Monster) &&
m_DispelAttackFeelRate != 0)
{
if(CheckRandom(m_DispelAttackFeelRate,pOperator->GetLevel(),pTarget->pObject->GetLevel()) == TRUE)
GSTATEMACHINE.SetState(pTarget->pObject,eMA_STAND);
}
}
void CSkillObjectFirstUnit::Release()
{
}
#else
#include "ObjectManager.h"
#include "ObjectActionManager.h"
void CSkillObjectFirstUnit::StartFirstEffect(CObject* pOperator,CTargetList* pTList,MAINTARGET* pMainTarget)
{
DWORD EffectFlag = 0;
if(pOperator->GetID() == HEROID)
EffectFlag |= EFFECT_FLAG_HEROATTACK;
if(m_pSkillInfoData->FatalDamage)
EffectFlag |= EFFECT_FLAG_FATALDAMAGE;
m_hEff = EFFECTMGR->StartEffectProcessWithTargetList(m_pSkillInfoData->EffectUse,pOperator,pTList,pMainTarget,EffectFlag);
ASSERTMSG(m_hEff,"公傍 矫累 捞棋飘俊 坷幅啊 乐嚼聪促.");
if(m_hEff == NULL && pTList)
{
CTargetListIterator iter(pTList);
CObject* pObject;
RESULTINFO rinfo;
while(iter.GetNextTarget())
{
pObject = OBJECTMGR->GetObject(iter.GetTargetID());
iter.GetTargetData(&rinfo);
if(pObject == NULL)
continue;
OBJECTACTIONMGR->ApplyResult(pObject,pOperator,&rinfo,eDamageKind_Front);
}
iter.Release();
}
}
void CSkillObjectFirstUnit::SetTargetArray(CObject* pOperator,CTargetList* pTList,MAINTARGET* pMainTarget)
{
if(m_hEff)
{
if(EFFECTMGR->SetTargetArray(m_hEff,pTList,pMainTarget) == FALSE)
m_hEff = NULL;
}
if(m_hEff == NULL)
{
OBJECTACTIONMGR->ApplyTargetList(pOperator,pTList,eDamageKind_Front);
}
}
DWORD CSkillObjectFirstUnit::GetFirstUnitEndTime()
{
if(m_hEff)
return EFFECTMGR->GetOperatorAnimatioEndTime(m_hEff);
else
return 500;
}
void CSkillObjectFirstUnit::Release()
{
if(m_hEff)
EFFECTMGR->SetEffectEndFlag(m_hEff);
m_hEff = NULL;
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -