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

📄 skillobjectfirstunit.cpp

📁 墨香最新私服
💻 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 + -