This commit is contained in:
aozhiwei 2022-09-08 17:19:07 +08:00
parent 6a3a55335c
commit f91dc31972
4 changed files with 47 additions and 16 deletions

View File

@ -19,7 +19,9 @@ float* AttrHelper::GetAttrRatePtr(std::array<float, kHAT_End>& attr, int attr_id
return &attr[attr_id];
}
bool AttrHelper::ParseAttr(std::shared_ptr<a8::XObject> xobj, std::array<float, kHAT_End>& attr)
bool AttrHelper::ParseAttr(std::shared_ptr<a8::XObject> xobj,
std::array<float, kHAT_End>& attr_abs,
std::array<float, kHAT_End>& attr_rate)
{
return true;
}

View File

@ -7,6 +7,8 @@ class AttrHelper
static float* GetAttrAbsPtr(std::array<float, kHAT_End>& attr, int attr_id);
static float* GetAttrRatePtr(std::array<float, kHAT_End>& attr, int attr_id);
static bool ParseAttr(std::shared_ptr<a8::XObject> xobj, std::array<float, kHAT_End>& attr);
static bool ParseAttr(std::shared_ptr<a8::XObject> xobj,
std::array<float, kHAT_End>& attr_abs,
std::array<float, kHAT_End>& attr_rate);
};

View File

@ -95,32 +95,37 @@ private:
std::array<float, kHAT_End> chip_attr_abs = {0};
std::array<float, kHAT_End> chip_attr_rate = {0};
std::array<float, kHAT_End> core_attr_abs = {0};
std::array<float, kHAT_End> core_attr_rate = {0};
{
std::shared_ptr<a8::XObject> attr_base_xobj = hero_dto->At("attr_base");
if (attr_base_xobj && attr_base_xobj->IsArray()) {
AttrHelper::ParseAttr(attr_base_xobj, base_attr_abs);
base_attr_rate = base_attr_abs;
AttrHelper::ParseAttr(attr_base_xobj, base_attr_abs, base_attr_rate);
}
}
{
std::shared_ptr<a8::XObject> attr_pro_xobj = hero_dto->At("attr_pro");
if (attr_pro_xobj && attr_pro_xobj->IsArray()) {
AttrHelper::ParseAttr(attr_pro_xobj, pro_attr_abs);
pro_attr_rate = pro_attr_abs;
AttrHelper::ParseAttr(attr_pro_xobj, pro_attr_abs, pro_attr_rate);
}
}
{
std::shared_ptr<a8::XObject> attr_skill_xobj = hero_dto->At("attr_skill");
if (attr_skill_xobj && attr_skill_xobj->IsArray()) {
AttrHelper::ParseAttr(attr_skill_xobj, skill_attr_abs);
skill_attr_rate = skill_attr_abs;
AttrHelper::ParseAttr(attr_skill_xobj, skill_attr_abs, skill_attr_rate);
}
}
{
std::shared_ptr<a8::XObject> attr_chip_xobj = hero_dto->At("attr_chip");
if (attr_chip_xobj && attr_chip_xobj->IsArray()) {
AttrHelper::ParseAttr(attr_chip_xobj, chip_attr_abs);
chip_attr_rate = chip_attr_abs;
AttrHelper::ParseAttr(attr_chip_xobj, chip_attr_abs, chip_attr_rate);
}
}
{
std::shared_ptr<a8::XObject> attr_core_xobj = hero_dto->At("attr_core");
if (attr_core_xobj && attr_core_xobj->IsArray()) {
AttrHelper::ParseAttr(attr_core_xobj, core_attr_abs, core_attr_rate);
}
}
@ -133,6 +138,24 @@ private:
if (pro_attr_rate[i] > 0.000f) {
finaly_attr_rate[i] = pro_attr_rate[i];
}
finaly_attr_abs[i] += skill_attr_abs[i];
finaly_attr_rate[i] += skill_attr_rate[i];
finaly_attr_abs[i] += chip_attr_abs[i];
finaly_attr_rate[i] += chip_attr_rate[i];
finaly_attr_abs[i] += core_attr_abs[i];
finaly_attr_rate[i] += core_attr_rate[i];
}
{
hp_ = finaly_attr_abs[kHAT_Hp] + base_attr_abs[kHAT_Hp] * finaly_attr_rate[kHAT_HP_RATE];
atk_ = finaly_attr_abs[kHAT_Atk] + base_attr_abs[kHAT_Atk] * finaly_attr_rate[kHAT_ATK_RATE];
crit_atk_ = finaly_attr_rate[kHAT_CRIT] * 1000;
crit_atk_ratio_ = finaly_attr_rate[kHAT_CRIT_DAMAGE_RATE];
dodge_ = finaly_attr_rate[kHAT_DODGE];
dodge_damage_ruduce_ = finaly_attr_rate[kHAT_DODGE_DAMAGE_RATE];
}
}
@ -206,22 +229,19 @@ private:
{
std::shared_ptr<a8::XObject> attr_base_xobj = weapon_dto->At("attr_base");
if (attr_base_xobj && attr_base_xobj->IsArray()) {
AttrHelper::ParseAttr(attr_base_xobj, base_attr_abs);
base_attr_rate = base_attr_abs;
AttrHelper::ParseAttr(attr_base_xobj, base_attr_abs, base_attr_rate);
}
}
{
std::shared_ptr<a8::XObject> attr_pro_xobj = weapon_dto->At("attr_pro");
if (attr_pro_xobj && attr_pro_xobj->IsArray()) {
AttrHelper::ParseAttr(attr_pro_xobj, pro_attr_abs);
pro_attr_rate = pro_attr_abs;
AttrHelper::ParseAttr(attr_pro_xobj, pro_attr_abs, pro_attr_rate);
}
}
{
std::shared_ptr<a8::XObject> attr_chip_xobj = weapon_dto->At("attr_chip");
if (attr_chip_xobj && attr_chip_xobj->IsArray()) {
AttrHelper::ParseAttr(attr_chip_xobj, chip_attr_abs);
chip_attr_rate = chip_attr_abs;
AttrHelper::ParseAttr(attr_chip_xobj, chip_attr_abs, chip_attr_rate);
}
}

View File

@ -182,6 +182,13 @@ enum HumanAttrType_e
kHAT_SkillTime = 32,
kHAT_WeaponThrowRange = 33,
kHAT_LUCKY = 34,
kHAT_HP_RATE = 39,
kHAT_ATK_RATE = 40,
kHAT_DEF_RATE = 41,
kHAT_CRIT = 42,
kHAT_CRIT_DAMAGE_RATE = 43,
kHAT_DODGE = 44,
kHAT_DODGE_DAMAGE_RATE = 45,
kHAT_End
};