This commit is contained in:
aozhiwei 2024-04-22 16:36:37 +08:00
parent 40aebe83b6
commit 9df97b3262

View File

@ -124,15 +124,10 @@ public:
void Init(Creature* c)
{
#ifdef NEW_NUM
DefaultInit(c);
#else
if (hero_dto) {
DtoInit(c);
} else {
DefaultInit(c);
}
#endif
}
void RecalcHp()
@ -284,78 +279,6 @@ private:
void DtoInit(Creature* c)
{
std::array<float, kHAT_End> base_attr_abs = {0};
std::array<float, kHAT_End> base_attr_rate = {0};
std::array<float, kHAT_End> pro_attr_abs = {0};
std::array<float, kHAT_End> pro_attr_rate = {0};
std::array<float, kHAT_End> skill_attr_abs = {0};
std::array<float, kHAT_End> skill_attr_rate = {0};
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);
}
}
{
std::shared_ptr<a8::XObject> attr_base_xobj = hero_dto->At("rand_attr");
if (attr_base_xobj && attr_base_xobj->IsArray()) {
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);
}
}
{
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);
}
}
{
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);
}
}
{
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);
}
}
std::array<float, kHAT_End> finaly_attr_abs = base_attr_abs;
std::array<float, kHAT_End> 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] += 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];
}
}
private:
@ -861,8 +784,8 @@ float BattleDataContext::CalcDmg(Creature* target, IBullet* bullet)
vDmg = owner_.Get()->GetAbility()->GetAttr(kHVAT_DirectAtk) * vBullet / BDM * (1 + vNormalDamageDealtRateIn) * ( 1 + vNormalDamageTakenRateIn);
}
float DDR = 0.0f;
float DTR = 0.0f;
float DDR = owner_.Get()->GetAbility()->GetAttr(kHAT_vDamageDealtRateIn);
float DTR = target->GetAbility()->GetAttr(kHAT_vDamageTakenRateIn);
float finaly_dmg = vDmg * vEbc * vEd * (1 + DDR) * (1 + DTR);
#ifdef MYDEBUG
if (owner_.Get()->IsPlayer()) {
@ -1276,7 +1199,7 @@ float BattleDataContext::GetDrugTimePct()
float BattleDataContext::GetDrugEfficacyPct()
{
return hero_ability_->GetDrugEfficacyPct();
return owner_.Get()->GetAbility()->GetAttr(kHAT_vHealthGainRateIn);
}
float BattleDataContext::GetTenacityPct()