📄 skillobjectfirstunit_attack.cpp
字号:
// SkillObjectFirstUnit_Attack.cpp: implementation of the CSkillObjectFirstUnit_Attack class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "SkillObjectFirstUnit_Attack.h"
#include "SkillInfo.h"
#include "Battle.h"
#include "..\[CC]Header\CommonCalcFunc.h"
#include "Object.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CSkillObjectFirstUnit_Attack::CSkillObjectFirstUnit_Attack(SKILLINFO* pSkillInfo)
: CSkillObjectFirstUnit(pSkillInfo)
{
#ifdef _MAPSERVER_
m_pSkillInfo = NULL;
#endif
}
CSkillObjectFirstUnit_Attack::~CSkillObjectFirstUnit_Attack()
{
}
void CSkillObjectFirstUnit_Attack::Init(CSkillInfo* pSkillInfo,WORD SkillLevel)
{
m_bMugong = pSkillInfo->GetSkillInfo()->ComboNum == SKILL_COMBO_NUM;
m_PhysicalAttack = pSkillInfo->GetSkillInfo()->FirstPhyAttack[SkillLevel-1];
#ifdef _MAPSERVER_
m_pSkillInfo = pSkillInfo;
#endif
WORD mi,ma;
mi = pSkillInfo->GetSkillInfo()->FirstAttAttackMin[SkillLevel-1];
ma = pSkillInfo->GetSkillInfo()->FirstAttAttackMax[SkillLevel-1];
m_AttribAttack.SetValue(mi,ma);
m_CriticalRate = pSkillInfo->GetCriticalRate(SkillLevel);
m_AttAttackRate = pSkillInfo->GetFirstAttAttack(SkillLevel);
CSkillObjectFirstUnit::Init(pSkillInfo,SkillLevel);
}
#ifdef _MAPSERVER_
#include "AttackManager.h"
#include "StateMachinen.h"
#include "SkillObject_Server.h"
void CSkillObjectFirstUnit_Attack::ExcuteFirstUnit(CObject* pOperator,CSkillObjectTargetList* pTargetList,
MSG_SKILLOBJECT_ADD* pAddMsg,float SkillTreeAmp)
{
CTargetListIterator iter(&pAddMsg->TargetList);
STLIST* pList;
RESULTINFO DamageInfo;
DWORD AmplifiedPower = 0;
DWORD AmplifiedPowerAtt = 0;
float AmplifiedPowerAttRate = 0;
if(m_PhysicalAttack) // 拱府 傍拜老锭父
AmplifiedPower = pOperator->GetSpecialStateParam1(eSpecialState_AmplifiedPowerPhy);
WORD Attrib = m_Attrib;
if( m_AttribAttack.GetMax() == 0 && m_AttAttackRate == 0)
Attrib = pOperator->GetSpecialStateParam2(eSpecialState_AmplifiedPowerAtt);
if( Attrib == pOperator->GetSpecialStateParam2(eSpecialState_AmplifiedPowerAtt) )
{
AmplifiedPowerAtt = pOperator->GetSpecialStateParam1(eSpecialState_AmplifiedPowerAtt);
AmplifiedPowerAttRate = pOperator->GetSpecialStateParam3(eSpecialState_AmplifiedPowerAtt);
}
LEVELTYPE OperLevel = pOperator->GetLevel();
//041213 KES decreaserate
float fRange = (float)m_pSkillInfo->GetSkillInfo()->SkillRange;
float fDecreaseRate = (float)m_pSkillInfo->GetSkillInfo()->DamageDecreaseForDist / 100.0f;
if( fDecreaseRate > 1.0f ) fDecreaseRate = 1.0f;
BOOL bDecrease = fDecreaseRate && m_pSkillInfo && fRange;
VECTOR3 OperatorPos;
pTargetList->GetSkillObjectPosition( &OperatorPos );
//---
pTargetList->SetPositionHead();
while(pList = pTargetList->GetNextTargetList())
{
DamageInfo.Clear();
if(pOperator->GetBattle()->IsEnemy(pOperator,pList->pObject))
{
float fDecreaseDamageRate = 1.0f; //傍拜仿啦
//*041213 KES decreaserate---------------------------------------------
if( bDecrease )
{
VECTOR3 TargetPos;
pList->pObject->GetPosition( &TargetPos );
float dist = CalcDistanceXZ( &OperatorPos, &TargetPos );
//
if( dist > fRange ) dist = fRange;
else if( dist < 0.0f ) dist = 0.0f;
fDecreaseDamageRate = ( 1 - fDecreaseRate ) * ( fRange - dist ) / fRange + fDecreaseRate;
}
///-------------------------------------------------------------------
ATTACKMGR->Attack(m_bMugong,
pOperator,pList->pObject, AmplifiedPower,
m_PhysicalAttack*SkillTreeAmp,
Attrib,
m_AttribAttack.GetMin()*SkillTreeAmp+AmplifiedPowerAtt,
m_AttribAttack.GetMax()*SkillTreeAmp+AmplifiedPowerAtt,
m_AttAttackRate*SkillTreeAmp+AmplifiedPowerAttRate,
m_CriticalRate,
&DamageInfo,
TRUE, fDecreaseDamageRate); // TRUE 绰 First Unit篮 墨款磐 单固瘤 乐澜
}
DefaultFirstEffect(pOperator,pList,&DamageInfo);
iter.AddTargetWithResultInfo(pList->pObject->GetID(),pList->bTargetKind,&DamageInfo);
}
iter.Release();
m_pSkillInfo = NULL;
}
#endif
#ifdef _MHCLIENT_
void CSkillObjectFirstUnit_Attack::StartFirstEffect(CObject* pOperator,CTargetList* pTList,MAINTARGET* pMainTarget)
{
CSkillObjectFirstUnit::StartFirstEffect(pOperator,pTList,pMainTarget);
// for delete Effect
pOperator->GetSpecialStateParam1(eSpecialState_AmplifiedPowerPhy);
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -