From a8df40d69422ebb4596599a71bf4f0739a536d0f Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Mon, 6 Jul 2020 16:15:37 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=20attack=5Ftype?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/gameserver/bullet.cc | 2 +- server/gameserver/human.cc | 2 +- server/gameserver/obstacle.cc | 14 ++++++++++++-- server/gameserver/obstacle.h | 2 ++ server/gameserver/roomobstacle.cc | 2 +- 5 files changed, 17 insertions(+), 5 deletions(-) diff --git a/server/gameserver/bullet.cc b/server/gameserver/bullet.cc index e0eaea8..2fd43b7 100644 --- a/server/gameserver/bullet.cc +++ b/server/gameserver/bullet.cc @@ -77,7 +77,7 @@ void Bullet::OnHit(std::set& objects) case ET_Obstacle: { Obstacle* obstacle = (Obstacle*)target; - if (!obstacle->IsDead(room) && obstacle->meta->i->attack_type() == 1) { + if (!obstacle->IsDead(room) && obstacle->Attackable()) { float dmg = GetAtk() * (1 + player->GetBuffAttrRate(kHAT_Atk)) + player->GetBuffAttrAbs(kHAT_Atk); float def = 0; diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 1a8706a..e8ffda0 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -495,7 +495,7 @@ bool Human::IsCollisionInMapService() #endif if (last_collision_door_ != collider->owner) { if (!obstacle->IsDead(room) && - obstacle->meta->i->attack_type() == 1 && + obstacle->Attackable() && obstacle->meta->i->drop() != 0 && room->GetGasData().gas_mode != GasInactive ) { diff --git a/server/gameserver/obstacle.cc b/server/gameserver/obstacle.cc index 94f3cc0..5e08112 100644 --- a/server/gameserver/obstacle.cc +++ b/server/gameserver/obstacle.cc @@ -62,7 +62,7 @@ void Obstacle::RecalcSelfCollider() } SetPos(old_pos); } - } else if (meta->i->attack_type() != 2){ + } else if (!Throughable()){ switch (meta->i->type()) { case 1: { @@ -284,7 +284,7 @@ void Obstacle::Explosion(Bullet* bullet) case ET_Obstacle: { Obstacle* obstacle = (Obstacle*)target; - if (!obstacle->IsDead(room) && obstacle->meta->i->attack_type() == 1) { + if (!obstacle->IsDead(room) && obstacle->Attackable()) { float dmg = meta->i->damage(); float def = 0; float finaly_dmg = dmg * (1 - def/MetaMgr::Instance()->K); @@ -424,3 +424,13 @@ bool Obstacle::IsPermanent() } return is_permanent; } + +bool Obstacle::Attackable() +{ + return meta->i->attack_type() == 1; +} + +bool Obstacle::Throughable() +{ + return meta->i->attack_type() == 2; +} diff --git a/server/gameserver/obstacle.h b/server/gameserver/obstacle.h index 4722a48..d272d68 100644 --- a/server/gameserver/obstacle.h +++ b/server/gameserver/obstacle.h @@ -50,6 +50,8 @@ class Obstacle : public Entity void SetHealth(Room* room, float value); void Die(Room* room); bool IsPermanent(); + bool Attackable(); + bool Throughable(); protected: Obstacle(); diff --git a/server/gameserver/roomobstacle.cc b/server/gameserver/roomobstacle.cc index 643a93d..d166b1b 100644 --- a/server/gameserver/roomobstacle.cc +++ b/server/gameserver/roomobstacle.cc @@ -39,7 +39,7 @@ void RoomObstacle::Initialize() void RoomObstacle::RecalcSelfCollider() { - if (meta->i->attack_type() != 2){ + if (!Throughable()){ switch (meta->i->type()) { case 1: {