完成伤害公式
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 = 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)
|
void Car::OnBulletHit(Bullet* bullet)
|
||||||
{
|
{
|
||||||
if (!IsDead(room)) {
|
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 dmg = bullet->GetAtk() + bullet->gun_meta->i->atk_mech();
|
||||||
float def = GetDef() * (1 + GetAbility()->GetAttrRate(kHAT_Def)) +
|
float def = GetDef() * (1 + GetAbility()->GetAttrRate(kHAT_Def)) +
|
||||||
GetAbility()->GetAttrAbs(kHAT_Def);
|
GetAbility()->GetAttrAbs(kHAT_Def);
|
||||||
float finaly_dmg = dmg * (1 - def/MetaMgr::Instance()->K);
|
float finaly_dmg = dmg * (1 - def/MetaMgr::Instance()->K);
|
||||||
finaly_dmg = std::max(finaly_dmg, 0.0f);
|
finaly_dmg = std::max(finaly_dmg, 0.0f);
|
||||||
|
#endif
|
||||||
if (bullet->meta->buff_meta) {
|
if (bullet->meta->buff_meta) {
|
||||||
MustBeAddBuff(bullet->sender.Get(), bullet->meta->i->buffid());
|
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 GetAabbBox(AabbCollider& aabb_box) override;
|
||||||
virtual void GetHitAabbBox(AabbCollider& aabb_box) override;
|
virtual void GetHitAabbBox(AabbCollider& aabb_box) override;
|
||||||
virtual std::string GetName() override;
|
virtual std::string GetName() override;
|
||||||
|
virtual float GetBaseAtk() override;
|
||||||
|
virtual float GetBaseDef() override;
|
||||||
|
|
||||||
bool IsDriver(Human* hum) { return driver_ == hum && driver_; }
|
bool IsDriver(Human* hum) { return driver_ == hum && driver_; }
|
||||||
Human* GetPassengerBySeat(int seat);
|
Human* GetPassengerBySeat(int seat);
|
||||||
|
@ -260,13 +260,3 @@ float Entity::GetBaseDef()
|
|||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
float Entity::GetTotalAtk()
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
float Entity::GetTotalDef()
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
@ -82,8 +82,6 @@ class Entity
|
|||||||
bool CanClientCache(Human* hum);
|
bool CanClientCache(Human* hum);
|
||||||
virtual float GetBaseAtk();
|
virtual float GetBaseAtk();
|
||||||
virtual float GetBaseDef();
|
virtual float GetBaseDef();
|
||||||
virtual float GetTotalAtk();
|
|
||||||
virtual float GetTotalDef();
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void AddClientCache(Human* hum);
|
void AddClientCache(Human* hum);
|
||||||
|
@ -128,11 +128,18 @@ void Hero::OnBulletHit(Bullet* bullet)
|
|||||||
|
|
||||||
RemoveBuffByEffectId(kBET_PeaceMode);
|
RemoveBuffByEffectId(kBET_PeaceMode);
|
||||||
if (!IsDead(room) && (bullet->IsBomb() || bullet->sender.Get()->team_id != team_id)) {
|
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 dmg = bullet->GetAtk();
|
||||||
float def = GetDef() * (1 + GetAbility()->GetAttrRate(kHAT_Def)) +
|
float def = GetDef() * (1 + GetAbility()->GetAttrRate(kHAT_Def)) +
|
||||||
GetAbility()->GetAttrAbs(kHAT_Def);
|
GetAbility()->GetAttrAbs(kHAT_Def);
|
||||||
float finaly_dmg = dmg * (1 - def/MetaMgr::Instance()->K);
|
float finaly_dmg = dmg * (1 - def/MetaMgr::Instance()->K);
|
||||||
finaly_dmg = std::max(finaly_dmg, 0.0f);
|
finaly_dmg = std::max(finaly_dmg, 0.0f);
|
||||||
|
#endif
|
||||||
if (bullet->sender.Get()->IsHuman()) {
|
if (bullet->sender.Get()->IsHuman()) {
|
||||||
bullet->sender.Get()->AsHuman()->stats.damage_amount_out += finaly_dmg;
|
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);
|
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 void DecHP(float dec_hp, int killer_id, const std::string& killer_name, int weapon_id) override;
|
||||||
virtual std::string GetName() override;
|
virtual std::string GetName() override;
|
||||||
virtual void DropItems(Obstacle* obstacle) override;
|
virtual void DropItems(Obstacle* obstacle) override;
|
||||||
|
virtual float GetBaseAtk() override;
|
||||||
|
virtual float GetBaseDef() override;
|
||||||
|
|
||||||
virtual float GetSpeed() override;
|
virtual float GetSpeed() override;
|
||||||
virtual float GetRadius() 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)) {
|
if (!dead && (bullet->IsBomb() || bullet->sender.Get()->team_id != team_id)) {
|
||||||
float old_hp = GetHP();
|
float old_hp = GetHP();
|
||||||
float old_max_hp = GetMaxHP();
|
float old_max_hp = GetMaxHP();
|
||||||
#ifdef NEWGS
|
#ifdef NEWGS
|
||||||
float def = 0;
|
|
||||||
float finaly_dmg = 0;
|
float finaly_dmg = 0;
|
||||||
//bullet->CalcDmg(this, finaly_dmg, def);
|
float atk_rate = 0;
|
||||||
#else
|
float def_rate = 0;
|
||||||
|
bullet->CalcDmg(this, finaly_dmg, atk_rate, def_rate);
|
||||||
|
#else
|
||||||
float dmg = bullet->GetAtk();
|
float dmg = bullet->GetAtk();
|
||||||
float def = GetDef() * (1 + GetAbility()->GetAttrRate(kHAT_Def)) +
|
float def = GetDef() * (1 + GetAbility()->GetAttrRate(kHAT_Def)) +
|
||||||
GetAbility()->GetAttrAbs(kHAT_Def);
|
GetAbility()->GetAttrAbs(kHAT_Def);
|
||||||
float finaly_dmg = dmg * (1 - def/MetaMgr::Instance()->K);
|
float finaly_dmg = dmg * (1 - def/MetaMgr::Instance()->K);
|
||||||
finaly_dmg = std::max(finaly_dmg, 0.0f);
|
finaly_dmg = std::max(finaly_dmg, 0.0f);
|
||||||
#endif
|
#endif
|
||||||
if (bullet->sender.Get()->IsHuman()) {
|
if (bullet->sender.Get()->IsHuman()) {
|
||||||
bullet->sender.Get()->AsHuman()->stats.damage_amount_out += finaly_dmg;
|
bullet->sender.Get()->AsHuman()->stats.damage_amount_out += finaly_dmg;
|
||||||
}
|
}
|
||||||
@ -3321,6 +3322,22 @@ void Human::OnBulletHit(Bullet* bullet)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#ifdef DEBUG
|
#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
|
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",
|
(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()
|
GetHP()
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -4039,3 +4057,13 @@ void Human::DecOxygen(int val)
|
|||||||
oxygen_ -= val;
|
oxygen_ -= val;
|
||||||
oxygen_ = std::max(0, oxygen_);
|
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 SetOxygen(int oxygen) { oxygen_ = oxygen; };
|
||||||
void AddOxygen(int val);
|
void AddOxygen(int val);
|
||||||
void DecOxygen(int val);
|
void DecOxygen(int val);
|
||||||
|
virtual float GetBaseAtk() override;
|
||||||
|
virtual float GetBaseDef() override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void _InternalUpdateMove(float speed);
|
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 dmg = bullet->GetAtk();
|
||||||
float def = 0;
|
float def = 0;
|
||||||
float finaly_dmg = dmg * (1 - def/MetaMgr::Instance()->K);
|
float finaly_dmg = dmg * (1 - def/MetaMgr::Instance()->K);
|
||||||
|
#endif
|
||||||
SetHealth(bullet->room, std::max(0.0f, GetHealth(bullet->room) - finaly_dmg));
|
SetHealth(bullet->room, std::max(0.0f, GetHealth(bullet->room) - finaly_dmg));
|
||||||
if (GetHealth(bullet->room) <= 0.01f) {
|
if (GetHealth(bullet->room) <= 0.01f) {
|
||||||
Die(bullet->room);
|
Die(bullet->room);
|
||||||
|
@ -237,6 +237,9 @@ message Player
|
|||||||
optional int32 delay_remove = 47;
|
optional int32 delay_remove = 47;
|
||||||
optional int32 skinlist = 48;
|
optional int32 skinlist = 48;
|
||||||
optional string pre_appear_effect = 50;
|
optional string pre_appear_effect = 50;
|
||||||
|
|
||||||
|
optional int32 damage = 51;
|
||||||
|
optional int32 defence = 52;
|
||||||
}
|
}
|
||||||
|
|
||||||
message Robot
|
message Robot
|
||||||
|
Loading…
x
Reference in New Issue
Block a user