diff --git a/server/gameserver/battledatacontext.cc b/server/gameserver/battledatacontext.cc index c191c8b6..7c10255c 100644 --- a/server/gameserver/battledatacontext.cc +++ b/server/gameserver/battledatacontext.cc @@ -57,15 +57,11 @@ public: void Init() { - #if 0 - DefaultInit(); - #else if (hero_dto) { DtoInit(); } else { DefaultInit(); } - #endif } private: @@ -195,15 +191,11 @@ public: void Init() { - #if 1 - DefaultInit(); - #else if (weapon_dto) { DtoInit(); } else { DefaultInit(); } - #endif } private: @@ -226,6 +218,9 @@ private: std::array chip_attr_abs = {0}; std::array chip_attr_rate = {0}; + std::array core_attr_abs = {0}; + std::array core_attr_rate = {0}; + { std::shared_ptr attr_base_xobj = weapon_dto->At("attr_base"); if (attr_base_xobj && attr_base_xobj->IsArray()) { @@ -244,7 +239,33 @@ private: AttrHelper::ParseAttr(attr_chip_xobj, chip_attr_abs, chip_attr_rate); } } + { + std::shared_ptr attr_core_xobj = weapon_dto->At("attr_core"); + if (attr_core_xobj && attr_core_xobj->IsArray()) { + AttrHelper::ParseAttr(attr_core_xobj, core_attr_abs, core_attr_rate); + } + } + std::array finaly_attr_abs = base_attr_abs; + std::array finaly_attr_rate = base_attr_rate; + for (int i = 0; i < kHAT_End; ++i) { + if (pro_attr_abs[i] > 0.000f) { + finaly_attr_abs[i] = pro_attr_abs[i]; + } + if (pro_attr_rate[i] > 0.000f) { + finaly_attr_rate[i] = pro_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]; + } + + 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]; } private: