diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index a1c706e6..c345cb4b 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -586,16 +586,12 @@ bool Human::IsCollisionInMapService() case ET_Obstacle: { Obstacle* obstacle = (Obstacle*)collider->owner; -#if 1 if (!obstacle->IsDead(room) && ( (collider->type == CT_Aabb && aabb_box.Intersect((ColliderComponent*)collider)) || (collider->type == CT_Circle && self_collider_->Intersect((ColliderComponent*)collider)) - ) - ) { -#else - if (!collider->owner->dead && TestCollision((ColliderComponent*)collider)) { -#endif + ) && + !obstacle->CanThroughable(this)) { if (last_collision_door_ != collider->owner) { if (!obstacle->IsDead(room) && obstacle->Attackable() && diff --git a/server/gameserver/obstacle.h b/server/gameserver/obstacle.h index cb55fd7c..84272656 100644 --- a/server/gameserver/obstacle.h +++ b/server/gameserver/obstacle.h @@ -37,6 +37,7 @@ class Obstacle : public Entity virtual long long GetDeadFrameNo(Room* room) override; virtual void OnPreCollision(Room* room) override; virtual bool IsTerminatorAirDropBox(Room* room) { return false; } + virtual bool CanThroughable(Human* num) { return false; } void Explosion(Bullet* bullet); void SetDoorInfo(Building* building, int door_id_x); bool IsDoor(); diff --git a/server/gameserver/roomobstacle.cc b/server/gameserver/roomobstacle.cc index 0fcb50a4..b0df082a 100644 --- a/server/gameserver/roomobstacle.cc +++ b/server/gameserver/roomobstacle.cc @@ -82,3 +82,8 @@ void RoomObstacle::RecalcSelfCollider() #endif } } + +bool RoomObstacle::CanThroughable(Human* num) +{ + return true; +} diff --git a/server/gameserver/roomobstacle.h b/server/gameserver/roomobstacle.h index e4df4d38..96a4df87 100644 --- a/server/gameserver/roomobstacle.h +++ b/server/gameserver/roomobstacle.h @@ -14,6 +14,7 @@ class RoomObstacle : public Obstacle virtual void Initialize() override; virtual void RecalcSelfCollider() override; virtual bool IsTerminatorAirDropBox(Room* room) override { return is_terminator_airdrop_box; } + virtual bool CanThroughable(Human* num) override; protected: RoomObstacle(); diff --git a/server/tools/protobuild/metatable.proto b/server/tools/protobuild/metatable.proto index dd497ab8..d06f46df 100755 --- a/server/tools/protobuild/metatable.proto +++ b/server/tools/protobuild/metatable.proto @@ -102,6 +102,7 @@ message Equip optional string param1 = 43; optional int32 reloadtype = 46; optional float Recoil_force = 47; + optional float missiles_time = 48; optional string inventory_slot = 31; //库存槽位 optional int32 _inventory_slot = 32; //库存槽位