Files
Sun1602/Server/GameServer/Status/AbsorbStatus.cpp
T
2022-10-26 12:25:11 +08:00

71 lines
1.7 KiB
C++

#include "stdafx.h"
#include "Ability.h"
#include "AbsorbStatus.h"
void AbsorbStatus::AttackAbsorb(DAMAGETYPE damage)
{
#ifdef _NA_008486_20150914_TOTAL_BALANCE
#else
Character* const owner = GetOwner();
if (owner == NULL)
{
return;
}
int calc_value = GetAbilityValue();
{
const int value_type = GetAbilityValueType();
if (value_type == VALUE_TYPE_PERCENT_PER_MAX)
{
calc_value = damage * calc_value / 1000;
}
else if (value_type == VALUE_TYPE_PERCENT_PER_CUR)
{
calc_value = damage * calc_value / 1000;
}
}
const eABILITY ability_id = GetAbilityID();
if (ability_id == eABILITY_ATTACK_DAMAGE_HP_ABSORPTION)
{
owner->OnRecover(calc_value, 0);
}
else if (ability_id == eABILITY_ATTACK_DAMAGE_MP_ABSORPTION)
{
owner->OnRecover(0, calc_value);
}
#endif //_NA_008486_20150914_TOTAL_BALANCE
}
void AbsorbStatus::AttackedAbsorb(eATTACK_TYPE /*attack_type*/, DAMAGETYPE damage)
{
Character* const owner = GetOwner();
if (owner == NULL)
{
return;
}
int calc_value = GetAbilityValue();
{
const int value_type = GetAbilityValueType();
if (value_type == VALUE_TYPE_PERCENT_PER_MAX)
{
calc_value = damage * calc_value / 1000;
}
else if (value_type == VALUE_TYPE_PERCENT_PER_CUR)
{
calc_value = damage * calc_value / 1000;
}
}
const eABILITY ability_id = GetAbilityID();
if (ability_id == eABILITY_ATTACKED_DAMAGE_HP_ABSORPTION)
{
owner->OnRecover(calc_value, 0);
}
else if (ability_id == eABILITY_ATTACKED_DAMAGE_MP_ABSORPTION)
{
owner->OnRecover(0, calc_value);
}
}