This commit is contained in:
aozhiwei 2024-01-05 14:37:35 +08:00
parent 541f6fb4ac
commit 044eaaa5a8
4 changed files with 22 additions and 11 deletions

View File

@ -40,6 +40,7 @@ namespace mtb
float vOrigHaste() const { return vOrigHaste_; }; float vOrigHaste() const { return vOrigHaste_; };
float vOrigDrain() const { return vOrigDrain_; }; float vOrigDrain() const { return vOrigDrain_; };
float vOrigTenacity() const { return vOrigTenacity_; }; float vOrigTenacity() const { return vOrigTenacity_; };
float vOrigBloDef() const { return vOrigBloDef_; };
bool has_id() const { return __flags__.test(0);}; bool has_id() const { return __flags__.test(0);};
bool has_pBaseHealth() const { return __flags__.test(1);}; bool has_pBaseHealth() const { return __flags__.test(1);};
@ -71,6 +72,7 @@ namespace mtb
bool has_vOrigHaste() const { return __flags__.test(27);}; bool has_vOrigHaste() const { return __flags__.test(27);};
bool has_vOrigDrain() const { return __flags__.test(28);}; bool has_vOrigDrain() const { return __flags__.test(28);};
bool has_vOrigTenacity() const { return __flags__.test(29);}; bool has_vOrigTenacity() const { return __flags__.test(29);};
bool has_vOrigBloDef() const { return __flags__.test(30);};
protected: protected:
@ -104,9 +106,10 @@ namespace mtb
float vOrigHaste_ = 0.0f; float vOrigHaste_ = 0.0f;
float vOrigDrain_ = 0.0f; float vOrigDrain_ = 0.0f;
float vOrigTenacity_ = 0.0f; float vOrigTenacity_ = 0.0f;
float vOrigBloDef_ = 0.0f;
public: public:
std::bitset<30> __flags__; std::bitset<31> __flags__;
}; };
}; };

View File

@ -901,7 +901,7 @@ namespace mtb
{ {
std::shared_ptr<a8::reflect::Class> meta_class = nullptr; std::shared_ptr<a8::reflect::Class> meta_class = nullptr;
if (!meta_class) { if (!meta_class) {
meta_class = std::make_shared<a8::reflect::Class>("BattleBasicAttribute", 30, 0); meta_class = std::make_shared<a8::reflect::Class>("BattleBasicAttribute", 31, 0);
meta_class->SetSimpleField(0, "id", a8::reflect::ET_INT32, my_offsetof2(BattleBasicAttribute, id_)); meta_class->SetSimpleField(0, "id", a8::reflect::ET_INT32, my_offsetof2(BattleBasicAttribute, id_));
meta_class->SetSimpleField(1, "pBaseHealth", a8::reflect::ET_FLOAT, my_offsetof2(BattleBasicAttribute, pBaseHealth_)); meta_class->SetSimpleField(1, "pBaseHealth", a8::reflect::ET_FLOAT, my_offsetof2(BattleBasicAttribute, pBaseHealth_));
meta_class->SetSimpleField(2, "pOrigHealth", a8::reflect::ET_FLOAT, my_offsetof2(BattleBasicAttribute, pOrigHealth_)); meta_class->SetSimpleField(2, "pOrigHealth", a8::reflect::ET_FLOAT, my_offsetof2(BattleBasicAttribute, pOrigHealth_));
@ -932,6 +932,7 @@ namespace mtb
meta_class->SetSimpleField(27, "vOrigHaste", a8::reflect::ET_FLOAT, my_offsetof2(BattleBasicAttribute, vOrigHaste_)); meta_class->SetSimpleField(27, "vOrigHaste", a8::reflect::ET_FLOAT, my_offsetof2(BattleBasicAttribute, vOrigHaste_));
meta_class->SetSimpleField(28, "vOrigDrain", a8::reflect::ET_FLOAT, my_offsetof2(BattleBasicAttribute, vOrigDrain_)); meta_class->SetSimpleField(28, "vOrigDrain", a8::reflect::ET_FLOAT, my_offsetof2(BattleBasicAttribute, vOrigDrain_));
meta_class->SetSimpleField(29, "vOrigTenacity", a8::reflect::ET_FLOAT, my_offsetof2(BattleBasicAttribute, vOrigTenacity_)); meta_class->SetSimpleField(29, "vOrigTenacity", a8::reflect::ET_FLOAT, my_offsetof2(BattleBasicAttribute, vOrigTenacity_));
meta_class->SetSimpleField(30, "vOrigBloDef", a8::reflect::ET_FLOAT, my_offsetof2(BattleBasicAttribute, vOrigBloDef_));
} }
return meta_class; return meta_class;
} }

View File

@ -745,7 +745,8 @@ static float ProEffect(float p, float b)
float x = std::floor(p) *b; float x = std::floor(p) *b;
float y = std::max(x + b, -1.0f); float y = std::max(x + b, -1.0f);
float q = (p * b - y) / (x - y); float q = (p * b - y) / (x - y);
return 0; float rnd = (float)rand() / (float)RAND_MAX;
return rnd < q ? x : y;
} else { } else {
return 0.0f; return 0.0f;
} }
@ -755,17 +756,24 @@ float BattleDataContext::CalcDmg(Creature* target, IBullet* bullet)
{ {
g_calc_dmg_context = {0}; g_calc_dmg_context = {0};
g_calc_dmg_context.is_crit = 0; g_calc_dmg_context.is_crit = 0;
float vEbc = 1.0f;
float vEd = 1 - target->GetNetData()->GetDef();
float X = (1 + hero_ability_->GetCrit()) * (1 - target->GetNetData()->GetBlock()) - 1; float X = (1 + hero_ability_->GetCrit()) * (1 - target->GetNetData()->GetBlock()) - 1;
if (X > 0.00001f) { if (X > 0.00001f) {
float vCritBon = 0.0f; //触发暴击
float E = ProEffect(X, vCritBon); float vCritBon = hero_ability_->hero_meta->GetBasicMeta()->vOrigCriBon();
float E = ProEffect(X, vCritBon); //E >= 0
if (E > 0.00001f) { if (E > 0.00001f) {
vEbc = 1 + E;
} else {
} }
} else { } else {
//触发格挡 0,-1
float vBlock = hero_ability_->hero_meta->GetBasicMeta()->vOrigBloDef();
float E = ProEffect(X, -vBlock); //E >= 0
if (E < 0.00001f) {
vEbc = 1 + E;
}
} }
float vAttack = GetHeroTotalAtk(); float vAttack = GetHeroTotalAtk();
float vBullet = GetWeaponAtk(bullet); float vBullet = GetWeaponAtk(bullet);
@ -774,8 +782,6 @@ float BattleDataContext::CalcDmg(Creature* target, IBullet* bullet)
float vNormalDamageTakenRateIn = 0.0f; float vNormalDamageTakenRateIn = 0.0f;
float vDmg = vAttack * vBullet / BDM * (1 + vNormalDamageDealtRateIn) * ( 1 + vNormalDamageTakenRateIn); float vDmg = vAttack * vBullet / BDM * (1 + vNormalDamageDealtRateIn) * ( 1 + vNormalDamageTakenRateIn);
float vEbc = 1.0f;
float vEd = 1 - target->GetNetData()->GetDef();
float DDR = 0.0f; float DDR = 0.0f;
float DTR = 0.0f; float DTR = 0.0f;
float finaly_dmg = vDmg * vEbc * vEd * (1 + DDR) * (1 + DTR); float finaly_dmg = vDmg * vEbc * vEd * (1 + DDR) * (1 + DTR);

View File

@ -697,6 +697,7 @@ message BattleBasicAttribute
optional float vOrigHaste = 28; optional float vOrigHaste = 28;
optional float vOrigDrain = 29; optional float vOrigDrain = 29;
optional float vOrigTenacity = 30; optional float vOrigTenacity = 30;
optional float vOrigBloDef = 31;
} }
message BattleLevelAttribute message BattleLevelAttribute