aozhiwei 1c15c04cd5 1
2021-07-12 02:37:07 +00:00

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);
}
}
}