完成伤害公式
This commit is contained in:
parent
411041a792
commit
143882b2a6
@ -709,5 +709,6 @@ void Bullet::CalcDmg(Entity* entity,
|
||||
}
|
||||
}
|
||||
finaly_dmg = atk * (1 + hero_atk_rate) * (1 - target_def_rate);
|
||||
finaly_dmg = std::max(finaly_dmg, 0.0f);
|
||||
}
|
||||
}
|
||||
|
@ -293,11 +293,21 @@ float Car::GetSpeed()
|
||||
void Car::OnBulletHit(Bullet* bullet)
|
||||
{
|
||||
if (!IsDead(room)) {
|
||||
#ifdef NEWGS
|
||||
float finaly_dmg = 0;
|
||||
float atk_rate = 0;
|
||||
float def_rate = 0;
|
||||
bullet->CalcDmg(this, finaly_dmg, atk_rate, def_rate);
|
||||
#if 1
|
||||
finaly_dmg += bullet->gun_meta->i->atk_mech();
|
||||
#endif
|
||||
#else
|
||||
float dmg = bullet->GetAtk() + bullet->gun_meta->i->atk_mech();
|
||||
float def = GetDef() * (1 + GetAbility()->GetAttrRate(kHAT_Def)) +
|
||||
GetAbility()->GetAttrAbs(kHAT_Def);
|
||||
float finaly_dmg = dmg * (1 - def/MetaMgr::Instance()->K);
|
||||
finaly_dmg = std::max(finaly_dmg, 0.0f);
|
||||
#endif
|
||||
if (bullet->meta->buff_meta) {
|
||||
MustBeAddBuff(bullet->sender.Get(), bullet->meta->i->buffid());
|
||||
}
|
||||
@ -543,3 +553,13 @@ void Car::OnKillTarget(Creature* target)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
float Car::GetBaseAtk()
|
||||
{
|
||||
return hero_meta_->i->damage();
|
||||
}
|
||||
|
||||
float Car::GetBaseDef()
|
||||
{
|
||||
return hero_meta_->i->defence();
|
||||
}
|
||||
|
@ -30,6 +30,8 @@ class Car : public Creature
|
||||
virtual void GetAabbBox(AabbCollider& aabb_box) override;
|
||||
virtual void GetHitAabbBox(AabbCollider& aabb_box) override;
|
||||
virtual std::string GetName() override;
|
||||
virtual float GetBaseAtk() override;
|
||||
virtual float GetBaseDef() override;
|
||||
|
||||
bool IsDriver(Human* hum) { return driver_ == hum && driver_; }
|
||||
Human* GetPassengerBySeat(int seat);
|
||||
|
@ -260,13 +260,3 @@ float Entity::GetBaseDef()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
float Entity::GetTotalAtk()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
float Entity::GetTotalDef()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
@ -82,8 +82,6 @@ class Entity
|
||||
bool CanClientCache(Human* hum);
|
||||
virtual float GetBaseAtk();
|
||||
virtual float GetBaseDef();
|
||||
virtual float GetTotalAtk();
|
||||
virtual float GetTotalDef();
|
||||
|
||||
protected:
|
||||
void AddClientCache(Human* hum);
|
||||
|
@ -128,11 +128,18 @@ void Hero::OnBulletHit(Bullet* bullet)
|
||||
|
||||
RemoveBuffByEffectId(kBET_PeaceMode);
|
||||
if (!IsDead(room) && (bullet->IsBomb() || bullet->sender.Get()->team_id != team_id)) {
|
||||
#ifdef NEWGS
|
||||
float finaly_dmg = 0;
|
||||
float atk_rate = 0;
|
||||
float def_rate = 0;
|
||||
bullet->CalcDmg(this, finaly_dmg, atk_rate, def_rate);
|
||||
#else
|
||||
float dmg = bullet->GetAtk();
|
||||
float def = GetDef() * (1 + GetAbility()->GetAttrRate(kHAT_Def)) +
|
||||
GetAbility()->GetAttrAbs(kHAT_Def);
|
||||
float finaly_dmg = dmg * (1 - def/MetaMgr::Instance()->K);
|
||||
finaly_dmg = std::max(finaly_dmg, 0.0f);
|
||||
#endif
|
||||
if (bullet->sender.Get()->IsHuman()) {
|
||||
bullet->sender.Get()->AsHuman()->stats.damage_amount_out += finaly_dmg;
|
||||
}
|
||||
@ -395,3 +402,13 @@ void Hero::DropItems(Obstacle* obstacle)
|
||||
}
|
||||
room->ScatterDrop(obstacle->GetPos(), drop_id);
|
||||
}
|
||||
|
||||
float Hero::GetBaseAtk()
|
||||
{
|
||||
return meta->i->damage();
|
||||
}
|
||||
|
||||
float Hero::GetBaseDef()
|
||||
{
|
||||
return meta->i->defence();
|
||||
}
|
||||
|
@ -32,6 +32,8 @@ public:
|
||||
virtual void DecHP(float dec_hp, int killer_id, const std::string& killer_name, int weapon_id) override;
|
||||
virtual std::string GetName() override;
|
||||
virtual void DropItems(Obstacle* obstacle) override;
|
||||
virtual float GetBaseAtk() override;
|
||||
virtual float GetBaseDef() override;
|
||||
|
||||
virtual float GetSpeed() override;
|
||||
virtual float GetRadius() override;
|
||||
|
@ -3284,17 +3284,18 @@ void Human::OnBulletHit(Bullet* bullet)
|
||||
if (!dead && (bullet->IsBomb() || bullet->sender.Get()->team_id != team_id)) {
|
||||
float old_hp = GetHP();
|
||||
float old_max_hp = GetMaxHP();
|
||||
#ifdef NEWGS
|
||||
float def = 0;
|
||||
#ifdef NEWGS
|
||||
float finaly_dmg = 0;
|
||||
//bullet->CalcDmg(this, finaly_dmg, def);
|
||||
#else
|
||||
float atk_rate = 0;
|
||||
float def_rate = 0;
|
||||
bullet->CalcDmg(this, finaly_dmg, atk_rate, def_rate);
|
||||
#else
|
||||
float dmg = bullet->GetAtk();
|
||||
float def = GetDef() * (1 + GetAbility()->GetAttrRate(kHAT_Def)) +
|
||||
GetAbility()->GetAttrAbs(kHAT_Def);
|
||||
float finaly_dmg = dmg * (1 - def/MetaMgr::Instance()->K);
|
||||
finaly_dmg = std::max(finaly_dmg, 0.0f);
|
||||
#endif
|
||||
#endif
|
||||
if (bullet->sender.Get()->IsHuman()) {
|
||||
bullet->sender.Get()->AsHuman()->stats.damage_amount_out += finaly_dmg;
|
||||
}
|
||||
@ -3321,6 +3322,22 @@ void Human::OnBulletHit(Bullet* bullet)
|
||||
}
|
||||
}
|
||||
#ifdef DEBUG
|
||||
#ifdef NEWGS
|
||||
bullet->sender.Get()->SendDebugMsg
|
||||
(a8::Format("bullet uniid:%d weapon_id:%d atk:%f atk_rate:%f def_rate:%f finaly_dmg:%f old_hp:%f old_maxhp:%f cur_hp:%f",
|
||||
{
|
||||
bullet->GetUniId(),
|
||||
bullet->gun_meta->i->id(),
|
||||
bullet->GetAtk(),
|
||||
atk_rate,
|
||||
def_rate,
|
||||
finaly_dmg,
|
||||
old_hp,
|
||||
old_max_hp,
|
||||
GetHP()
|
||||
})
|
||||
);
|
||||
#else
|
||||
bullet->sender.Get()->SendDebugMsg
|
||||
(a8::Format("bullet uniid:%d weapon_id:%d atk:%f def:%f finaly_dmg:%f old_hp:%f old_maxhp:%f cur_hp:%f",
|
||||
{
|
||||
@ -3334,6 +3351,7 @@ void Human::OnBulletHit(Bullet* bullet)
|
||||
GetHP()
|
||||
})
|
||||
);
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
}
|
||||
@ -4039,3 +4057,13 @@ void Human::DecOxygen(int val)
|
||||
oxygen_ -= val;
|
||||
oxygen_ = std::max(0, oxygen_);
|
||||
}
|
||||
|
||||
float Human::GetBaseAtk()
|
||||
{
|
||||
return meta->i->damage();
|
||||
}
|
||||
|
||||
float Human::GetBaseDef()
|
||||
{
|
||||
return meta->i->defence();
|
||||
}
|
||||
|
@ -337,6 +337,8 @@ class Human : public Creature
|
||||
void SetOxygen(int oxygen) { oxygen_ = oxygen; };
|
||||
void AddOxygen(int val);
|
||||
void DecOxygen(int val);
|
||||
virtual float GetBaseAtk() override;
|
||||
virtual float GetBaseDef() override;
|
||||
|
||||
protected:
|
||||
void _InternalUpdateMove(float speed);
|
||||
|
@ -504,9 +504,16 @@ void Obstacle::OnBulletHit(Bullet* bullet)
|
||||
}
|
||||
}
|
||||
}
|
||||
#ifdef NEWGS
|
||||
float finaly_dmg = 0;
|
||||
float atk_rate = 0;
|
||||
float def_rate = 0;
|
||||
bullet->CalcDmg(this, finaly_dmg, atk_rate, def_rate);
|
||||
#else
|
||||
float dmg = bullet->GetAtk();
|
||||
float def = 0;
|
||||
float finaly_dmg = dmg * (1 - def/MetaMgr::Instance()->K);
|
||||
#endif
|
||||
SetHealth(bullet->room, std::max(0.0f, GetHealth(bullet->room) - finaly_dmg));
|
||||
if (GetHealth(bullet->room) <= 0.01f) {
|
||||
Die(bullet->room);
|
||||
|
@ -237,6 +237,9 @@ message Player
|
||||
optional int32 delay_remove = 47;
|
||||
optional int32 skinlist = 48;
|
||||
optional string pre_appear_effect = 50;
|
||||
|
||||
optional int32 damage = 51;
|
||||
optional int32 defence = 52;
|
||||
}
|
||||
|
||||
message Robot
|
||||
|
Loading…
x
Reference in New Issue
Block a user