This commit is contained in:
aozhiwei 2023-03-28 10:51:17 +08:00
parent d26cd19ac7
commit daa4c26099
6 changed files with 49 additions and 2 deletions

View File

@ -62,6 +62,14 @@ Ability::Ability(CreatureWeakPtr owner)
std::get<0>(tuple) = .0f;
INIT_LIST_HEAD(&std::get<1>(tuple));
}
for (auto& tuple : vattr_add_) {
std::get<0>(tuple) = .0f;
INIT_LIST_HEAD(&std::get<1>(tuple));
}
for (auto& tuple : vattr_dec_) {
std::get<0>(tuple) = .0f;
INIT_LIST_HEAD(&std::get<1>(tuple));
}
Clear();
}
@ -124,6 +132,30 @@ void Ability::Clear()
delete e;
}
}
for (auto& tuple : vattr_add_) {
std::get<0>(tuple) = 0.0f;
while (!list_empty(&std::get<1>(tuple))) {
AttrAddition* e = list_first_entry(&std::get<1>(tuple),
AttrAddition,
entry);
e->ptr->data = nullptr;
list_del_init(&e->entry);
delete e;
}
}
for (auto& tuple : vattr_dec_) {
std::get<0>(tuple) = 0.0f;
while (!list_empty(&std::get<1>(tuple))) {
AttrRuduce* e = list_first_entry(&std::get<1>(tuple),
AttrRuduce,
entry);
e->ptr->data = nullptr;
list_del_init(&e->entry);
delete e;
}
}
}
float* Ability::GetBuffAttrAbsPtr(int attr_id)

View File

@ -83,6 +83,8 @@ class Ability
std::array<int, kHAT_End> buff_attr_flag_ = {};
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_ = {};
std::array<std::tuple<float, list_head>, kHVAT_End - kHVAT_Begin> vattr_dec_ = {};
int speed_addition_times_ = 0;
float speed_addition_rate_ = 0;

View File

@ -49,3 +49,10 @@ enum HumanAttrType_e
kHAT_Shield = 53,
kHAT_End
};
enum HumanVirtualAttrType_e
{
kHVAT_Begin = 1000,
kHVAT_Dmg = 1001,
kHVAT_End
};

View File

@ -565,8 +565,8 @@ float BattleDataContext::CalcDmg(Creature* target, IBullet* bullet)
normal_dmg *= 1.5;
}
float finaly_dmg = normal_dmg;
finaly_dmg *= (1 + owner_.Get()->GetAbility()->GetAttrAddition(kHAT_Atk)); //连加
finaly_dmg *= target->GetAbility()->GetAttrRuduce(kHAT_Atk); //(1-减免) 连乘
finaly_dmg *= (1 + owner_.Get()->GetAbility()->GetAttrAddition(kHVAT_Dmg)); //连加
finaly_dmg *= target->GetAbility()->GetAttrRuduce(kHVAT_Dmg); //(1-减免) 连乘
#else
float total_atk = GetTotalAtk(bullet);
if (bullet->GetSkillMeta() && bullet->GetSkillMeta()->_number_meta) {

View File

@ -23,6 +23,11 @@ bool IsValidHumanAttr(int attr_type)
return attr_type > kHAT_Begin && attr_type < kHAT_End;
}
bool IsValidHumanVirtualAttr(int attr_type)
{
return attr_type > kHVAT_Begin && attr_type < kHVAT_End;
}
bool IsValidEventBuff(int event)
{
return event >= 0 && event < kEventBuffEnd;

View File

@ -21,6 +21,7 @@ class Global : public a8::Singleton<Global>
bool IsValidSlotId(int slot_id);
bool IsValidBuffEffect(int buff_effect);
bool IsValidHumanAttr(int attr_type);
bool IsValidHumanVirtualAttr(int attr_type);
bool IsValidEventBuff(int event);
bool IsValidWeaponOpt(int opt);
bool IsValidBuffOpt(int opt);