This commit is contained in:
aozhiwei 2023-03-28 15:31:39 +08:00
parent 24f8e63d58
commit 2400200453
6 changed files with 71 additions and 50 deletions

View File

@ -73,6 +73,7 @@ Ability::Ability(CreatureWeakPtr owner)
Clear();
}
#if 0
float Ability::GetAttrAbs(int attr_id)
{
float attr_abs_val = GetBuffAttrAbs(attr_id);
@ -104,12 +105,10 @@ float Ability::GetBuffAttrRate(int attr_id)
}
return 0;
}
#endif
void Ability::Clear()
{
buff_attr_abs_ = {};
buff_attr_rate_ = {};
buff_attr_flag_ = {};
for (auto& tuple : attr_add_) {
std::get<0>(tuple) = 0.0f;
while (!list_empty(&std::get<1>(tuple))) {
@ -158,24 +157,6 @@ void Ability::Clear()
}
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::AddSpeedAddition(float rate)
{
speed_addition_rate_ += rate;
@ -448,6 +429,46 @@ float Ability::GetFixedSped()
return fixed_speed_;
}
AttrAbsHandle Ability::AddAttrAbs(int attr_id, float value)
{
}
void Ability::RemoveAttrAbs(AttrAbsHandle handle)
{
}
AttrRateHandle Ability::AddAttrRate(int attr_id, float value)
{
}
void Ability::RemoveAttrRate(AttrAbsHandle handle)
{
}
void Ability::RecalcAttrAbs(int attr_id)
{
}
void Ability::RecalcAttrRate(int attr_id)
{
}
float Ability::GetAttrAbs(int attr_id)
{
return 0.0f;
}
float Ability::GetAttrRate(int attr_id)
{
return 0.0f;
}
AttrAdditionHandle Ability::AddAttr(int attr_id, float rate)
{
if (IsValidHumanAttr(attr_id) ||

View File

@ -6,6 +6,9 @@
typedef std::weak_ptr<struct AttrAdditionPtr> AttrAdditionHandle;
typedef std::weak_ptr<struct AttrRuducePtr> AttrRuduceHandle;
typedef std::weak_ptr<struct AttrAbsPtr> AttrAbsHandle;
typedef std::weak_ptr<struct AttrRatePtr> AttrRateHandle;
class Room;
class Human;
class Ability
@ -13,13 +16,6 @@ class Ability
public:
Ability(CreatureWeakPtr owner);
void Clear();
float GetAttrAbs(int attr_id);
float GetAttrRate(int attr_id);
float GetBuffAttrAbs(int attr_id);
float GetBuffAttrRate(int attr_id);
float* GetBuffAttrAbsPtr(int attr_id);
float* GetBuffAttrRatePtr(int attr_id);
void AddSpeedAddition(float rate);
void DelSpeedAddition(float rate);
float GetSpeedAddition();
@ -67,6 +63,15 @@ class Ability
int GetFixedSpeedTimes();
float GetFixedSped();
AttrAbsHandle AddAttrAbs(int attr_id, float value);
void RemoveAttrAbs(AttrAbsHandle handle);
AttrRateHandle AddAttrRate(int attr_id, float value);
void RemoveAttrRate(AttrAbsHandle handle);
void RecalcAttrAbs(int attr_id);
void RecalcAttrRate(int attr_id);
float GetAttrAbs(int attr_id);
float GetAttrRate(int attr_id);
AttrAdditionHandle AddAttr(int attr_id, float rate);
void RemoveAttrAddition(AttrAdditionHandle handler);
AttrRuduceHandle DecAttr(int attr_id, float rate);
@ -76,11 +81,14 @@ class Ability
float GetAttrAddition(int attr_id);
float GetAttrRuduce(int attr_id);
private:
void Clear();
private:
CreatureWeakPtr owner_;
std::array<float, kHAT_End> buff_attr_abs_ = {};
std::array<float, kHAT_End> buff_attr_rate_ = {};
std::array<int, kHAT_End> buff_attr_flag_ = {};
std::array<std::tuple<float, list_head>, kHAT_End> attr_abs_ = {};
std::array<std::tuple<float, list_head>, kHAT_End> attr_rate_ = {};
std::array<std::tuple<float, list_head>, kHAT_End> attr_add_ = {};
std::array<std::tuple<float, list_head>, kHAT_End> attr_dec_ = {};
std::array<std::tuple<float, list_head>, kHVAT_End - kHVAT_Begin> vattr_add_ = {};

View File

@ -1,6 +1,7 @@
#pragma once
#include "buff.h"
#include "ability.h"
class ModifyBaseAttrBuff : public Buff
{
@ -8,4 +9,8 @@ class ModifyBaseAttrBuff : public Buff
virtual void Activate() override;
virtual void Deactivate() override;
private:
AttrAdditionHandle add_handle_;
AttrRuduceHandle ruduce_handle_;
};

View File

@ -1,6 +1,7 @@
#pragma once
#include "buff.h"
#include "ability.h"
class ModifyGrowAttrBuff : public Buff
{
@ -8,4 +9,7 @@ class ModifyGrowAttrBuff : public Buff
virtual void Activate() override;
virtual void Deactivate() override;
private:
AttrAdditionHandle add_handle_;
AttrRuduceHandle ruduce_handle_;
};

View File

@ -612,29 +612,10 @@ void Creature::AddBuffPostProc(Creature* caster, Buff* buff)
void Creature::RecalcBuffAttr()
{
CheckAbilityUsed();
ability_->Clear();
bool need_refresh_hp = false;
for (auto& buff : buff_list_) {
}
for (auto& tuple : talent_list) {
auto talent_meta = mt::GunTalentGrow::GetByIdQyality(std::get<0>(tuple), std::get<1>(tuple));
if (talent_meta) {
for (auto& tuple1 : talent_meta->_addattr) {
int attr_type = std::get<0>(tuple1);
int attr_val = std::get<1>(tuple1);
if (talent_meta->addtype() == 0) {
float* p = ability_->GetBuffAttrAbsPtr(attr_type);
if (p) {
*p += attr_val;
}
} else if (talent_meta->addtype() == 1) {
float* p = ability_->GetBuffAttrRatePtr(attr_type);
if (p) {
*p += attr_val;
}
}
}
}
}
if (need_refresh_hp) {
SetHP(GetMaxHP());

View File

@ -144,6 +144,7 @@ void PBUtils::_Ability_FillMFAttrAdditionList(Ability* self,
std::function<cs::MFAttrAddition* ()> add_func
)
{
#if 0
for (int attr_id = 0; attr_id < kHAT_End; ++attr_id) {
if (!(attr_id == 12 || attr_id == 33)) {
continue;
@ -159,6 +160,7 @@ void PBUtils::_Ability_FillMFAttrAdditionList(Ability* self,
#endif
}
}
#endif
}
/*