1
This commit is contained in:
parent
24f8e63d58
commit
2400200453
@ -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) ||
|
||||
|
@ -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_ = {};
|
||||
|
@ -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_;
|
||||
};
|
||||
|
@ -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_;
|
||||
};
|
||||
|
@ -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());
|
||||
|
@ -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
|
||||
}
|
||||
|
||||
/*
|
||||
|
Loading…
x
Reference in New Issue
Block a user