From a593062cb38fb3fc37844e9a898d41eb8ea023af Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Fri, 31 Jul 2020 11:23:57 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=9C=BA=E7=94=B2=E5=B1=9E?= =?UTF-8?q?=E6=80=A7=E5=8A=A0=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/gameserver/bullet.cc | 12 ++++++------ server/gameserver/human.cc | 36 ++++++++++++++++++++++++++++++++++++ server/gameserver/human.h | 2 ++ 3 files changed, 44 insertions(+), 6 deletions(-) diff --git a/server/gameserver/bullet.cc b/server/gameserver/bullet.cc index 196896c..9f9fe37 100644 --- a/server/gameserver/bullet.cc +++ b/server/gameserver/bullet.cc @@ -66,10 +66,10 @@ void Bullet::OnHit(std::set& objects) continue; } if (!hum->dead && (IsBomb() || player->team_id != hum->team_id)) { - float dmg = GetAtk() * (1 + player->GetBuffAttrRate(kHAT_Atk)) + - player->GetBuffAttrAbs(kHAT_Atk); - float def = hum->ability.def * (1 + hum->GetBuffAttrRate(kHAT_Def)) + - hum->GetBuffAttrAbs(kHAT_Def); + float dmg = GetAtk() * (1 + player->GetAttrRate(kHAT_Atk)) + + player->GetAttrAbs(kHAT_Atk); + float def = hum->ability.def * (1 + hum->GetAttrRate(kHAT_Def)) + + hum->GetAttrAbs(kHAT_Def); float finaly_dmg = dmg * (1 - def/MetaMgr::Instance()->K); finaly_dmg = std::max(finaly_dmg, 0.0f); player->stats.damage_amount_out += finaly_dmg; @@ -86,8 +86,8 @@ void Bullet::OnHit(std::set& objects) if (!obstacle->IsDead(room) && obstacle->Attackable() && !obstacle->IsTerminatorAirDropBox(room)) { - float dmg = GetAtk() * (1 + player->GetBuffAttrRate(kHAT_Atk)) + - player->GetBuffAttrAbs(kHAT_Atk); + float dmg = GetAtk() * (1 + player->GetAttrRate(kHAT_Atk)) + + player->GetAttrAbs(kHAT_Atk); float def = 0; float finaly_dmg = dmg * (1 - def/MetaMgr::Instance()->K); obstacle->SetHealth(room, std::max(0.0f, obstacle->GetHealth(room) - finaly_dmg)); diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 9061f60..c32cbff 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -3157,6 +3157,42 @@ float Human::GetBuffAttrRate(int attr_type) return 0; } +float Human::GetAttrAbs(int attr_id) +{ + float attr_abs_val = GetBuffAttrAbs(attr_id); + if (attr_id == kHAT_Atk || attr_id == kHAT_Def) { + Buff* buff = GetBuffByEffectId(kBET_Car); + if (buff) { + MetaData::Equip* equip_meta = MetaMgr::Instance()->GetEquip(buff->meta->param4); + if (equip_meta) { + switch (attr_id) { + case kHAT_Atk: + { + attr_abs_val += equip_meta->i->atk(); + } + break; + case kHAT_Def: + { + attr_abs_val += equip_meta->i->def(); + } + break; + default: + { + } + break; + } + } + } + } + return attr_abs_val; +} + +float Human::GetAttrRate(int attr_id) +{ + float attr_rate_val = GetBuffAttrRate(attr_id); + return attr_rate_val; +} + bool Human::IsPlayer() const { return IsEntitySubType(EST_Player); diff --git a/server/gameserver/human.h b/server/gameserver/human.h index 8b248ab..ec29464 100644 --- a/server/gameserver/human.h +++ b/server/gameserver/human.h @@ -269,6 +269,8 @@ class Human : public MoveableEntity void DecItem(int item_id, int item_num); float GetBuffAttrAbs(int attr_id); float GetBuffAttrRate(int attr_id); + float GetAttrAbs(int attr_id); + float GetAttrRate(int attr_id); bool IsPlayer() const; bool IsAndroid() const; void DropItems(Obstacle* obstacle);