📄 lowhpstatus.cpp
字号:
#include "stdafx.h"
#include "Ability.h"
#include "LowHPStatus.h"
#include "SkillAttrCalculator.h"
VOID LowHPStatus::Init( Character *pOwner, Character *pAttacker, Ability *pAbility )
{
AbilityStatus::Init( pOwner, pAttacker, pAbility );
BASE_ABILITYINFO *pBaseAbilityInfo = pAbility->GetBaseAbilityInfo();
m_eAttackType = (eATTACK_TYPE)pBaseAbilityInfo->m_iOption1;
}
VOID LowHPStatus::Start()
{
UpdateLowHP();
}
VOID LowHPStatus::End()
{
// 利侩登绢乐绰 荐摹绰 哗滚赴促.
m_fHPRatio = 0;
UpdateLowHP();
AbilityStatus::End();
}
VOID LowHPStatus::UpdateLowHP()
{
if( m_pOwner->IsDead() ) return;
// 泅犁 HP 厚啦 眉农
float fHPRatio = (float)m_pOwner->GetHP() / m_pOwner->GetMaxHP();
// 捞固 荐摹啊 利侩登绢 乐栏搁
if( m_bApplied )
{
// HP厚啦 炼扒俊 嘎瘤 臼栏搁 促矫 荐摹甫 猾促.
if( fHPRatio > m_fHPRatio )
{
SkillAttrCalculator SkillCalc( m_pOwner->GetAttr() );
SkillCalc.DelAttr( m_eAttrID, m_iValueType, m_iValue );
m_bApplied = FALSE;
// 荐摹 函拳甫 努扼俊 舅赴促.
SendAttrChange();
}
}
else
{
// HP厚啦 炼扒俊 嘎栏搁 荐摹甫 利侩矫挪促.
if( fHPRatio <= m_fHPRatio )
{
// 傍拜仿阑 刘皑矫挪促.
SkillAttrCalculator SkillCalc( m_pOwner->GetAttr() );
int iAddValue = SkillCalc.AddAttr( m_eAttrID, m_iValueType, m_iValue ); // AttrType, 荐摹鸥涝, 荐摹
// 唱吝俊 促矫 棵妨霖父怒 别扁困秦辑 m_iValue甫 促矫 汲沥茄促.
m_iValueType = VALUE_TYPE_VALUE;
m_iValue = iAddValue;
m_bApplied = TRUE;
// 荐摹 函拳甫 努扼俊 舅赴促.
SendAttrChange();
}
}
}
VOID LowHPStatus::SendAttrChange()
{
DWORD dwValue = 0;
Attributes &Attr = m_pOwner->GetAttr();
// 加己 傍拜仿 函拳
if( m_eAttrID >= eATTR_MAGICAL_WATER_ATTACK_POWER && m_eAttrID <= eATTR_MAGICAL_DIVINE_ATTACK_POWER )
{
dwValue = Attr.GetMagicalAttackPower( m_eAttackType );
m_pOwner->SendAttrChange( m_eAttrID, dwValue );
}
// 可记 傈眉 傍拜仿
else if( m_eAttrID == eATTR_OPTION_ALL_ATTACK_POWER )
{
dwValue = Attr[eATTR_OPTION_PHYSICAL_ATTACK_POWER][eATTR_KIND_CALC];
m_pOwner->SendAttrChange( m_eAttrID, dwValue );
dwValue = Attr[eATTR_OPTION_MAGICAL_ATTACK_POWER][eATTR_KIND_CALC];
m_pOwner->SendAttrChange( m_eAttrID, dwValue );
}
// 加己 傈眉 傍拜仿
else if( m_eAttrID == eATTR_MAGICAL_ALL_ATTACK_POWER )
{
for( int AttackType = eATTACK_TYPE_WATER; AttackType <= eATTACK_TYPE_DIVINE; ++AttackType )
{
dwValue = Attr.GetMagicalAttackPower( (eATTACK_TYPE)AttackType );
m_pOwner->SendAttrChange( m_eAttrID, dwValue );
}
}
// 加己 规绢仿 函拳
else if( m_eAttrID >= eATTR_MAGICAL_WATER_DEFENSE_POWER && m_eAttrID <= eATTR_MAGICAL_DIVINE_DEFENSE_POWER )
{
dwValue = Attr.GetMagicalDefense( m_eAttackType );
m_pOwner->SendAttrChange( m_eAttrID, dwValue );
}
// 可记 傈眉 规绢仿
else if( m_eAttrID == eATTR_OPTION_ALL_ATTACK_POWER )
{
dwValue = Attr[eATTR_OPTION_PHYSICAL_DEFENSE_POWER][eATTR_KIND_CALC];
m_pOwner->SendAttrChange( m_eAttrID, dwValue );
dwValue = Attr[eATTR_OPTION_MAGICAL_DEFENSE_POWER][eATTR_KIND_CALC];
m_pOwner->SendAttrChange( m_eAttrID, dwValue );
}
// 加己 傈眉 规绢仿
else if( m_eAttrID == eATTR_MAGICAL_ALL_DEFENSE_POWER )
{
for( int AttackType = eATTACK_TYPE_WATER; AttackType <= eATTACK_TYPE_DIVINE; ++AttackType )
{
dwValue = Attr.GetMagicalDefense( (eATTACK_TYPE)AttackType );
m_pOwner->SendAttrChange( m_eAttrID, dwValue );
}
}
else
{
dwValue = Attr[m_eAttrID][eATTR_KIND_CALC];
m_pOwner->SendAttrChange( m_eAttrID, dwValue );
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -