102 lines
2.6 KiB
C++
102 lines
2.6 KiB
C++
#include "precompile.h"
|
|
|
|
#include "ability.h"
|
|
#include "metamgr.h"
|
|
#include "buff.h"
|
|
#include "creature.h"
|
|
|
|
float Ability::GetAttrAbs(int attr_id)
|
|
{
|
|
float attr_abs_val = GetBuffAttrAbs(attr_id);
|
|
if (attr_id == kHAT_Atk || attr_id == kHAT_Def) {
|
|
if (owner.Get()) {
|
|
Buff* buff = owner.Get()->GetBuffByEffectId(kBET_Car);
|
|
if (buff) {
|
|
MetaData::Equip* equip_meta = MetaMgr::Instance()->GetEquip(buff->meta->param4);
|
|
if (equip_meta) {
|
|
switch (attr_id) {
|
|
case kHAT_Atk:
|
|
{
|
|
attr_abs_val += equip_meta->i->atk();
|
|
}
|
|
break;
|
|
case kHAT_Def:
|
|
{
|
|
attr_abs_val += equip_meta->i->def();
|
|
}
|
|
break;
|
|
default:
|
|
{
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return attr_abs_val;
|
|
}
|
|
|
|
float Ability::GetAttrRate(int attr_id)
|
|
{
|
|
float attr_rate_val = GetBuffAttrRate(attr_id) / 100.0f;
|
|
return attr_rate_val;
|
|
}
|
|
|
|
float Ability::GetBuffAttrAbs(int attr_id)
|
|
{
|
|
if (IsValidHumanAttr(attr_id)) {
|
|
return buff_attr_abs_[attr_id];
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
float Ability::GetBuffAttrRate(int attr_id)
|
|
{
|
|
if (IsValidHumanAttr(attr_id)) {
|
|
return buff_attr_rate_[attr_id];
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
void Ability::Clear()
|
|
{
|
|
buff_attr_abs_ = {};
|
|
buff_attr_rate_ = {};
|
|
buff_attr_flag_ = {};
|
|
}
|
|
|
|
float* Ability::GetBuffAttrAbsPtr(int attr_id)
|
|
{
|
|
if (!IsValidHumanAttr(attr_id)) {
|
|
return nullptr;
|
|
}
|
|
buff_attr_flag_[attr_id] = 1;
|
|
return &buff_attr_abs_[attr_id];
|
|
}
|
|
|
|
float* Ability::GetBuffAttrRatePtr(int attr_id)
|
|
{
|
|
if (!IsValidHumanAttr(attr_id)) {
|
|
return nullptr;
|
|
}
|
|
buff_attr_flag_[attr_id] = 1;
|
|
return &buff_attr_rate_[attr_id];
|
|
}
|
|
|
|
void Ability::FillMFAttrAdditionList(Room* room, Human* hum,
|
|
::google::protobuf::RepeatedPtrField<::cs::MFAttrAddition>* pb_attr_list)
|
|
{
|
|
for (int attr_id = 0; attr_id < kHAT_End; ++attr_id) {
|
|
if (!(attr_id == 12 || attr_id == 33)) {
|
|
continue;
|
|
}
|
|
if (buff_attr_flag_[attr_id]) {
|
|
auto pb_attr = pb_attr_list->Add();
|
|
pb_attr->set_attr_id(attr_id);
|
|
pb_attr->set_abs_val(buff_attr_abs_[attr_id]);
|
|
pb_attr->set_rate_val(buff_attr_rate_[attr_id] * 100);
|
|
}
|
|
}
|
|
}
|