diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 393a6a0..39d647d 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -17,6 +17,7 @@ #include "android.h" #include "gamelog.h" #include "typeconvert.h" +#include "obstacle.h" #include "framework/cpp/utils.h" #include "framework/cpp/httpclientpool.h" @@ -355,6 +356,32 @@ bool Human::IsCollisionInMapService() for (const ColliderComponent* collider : colliders) { switch (collider->owner->entity_type) { case ET_Obstacle: + { + if (!collider->owner->dead && TestCollision((ColliderComponent*)collider)) { + if (last_collision_door != collider->owner) { + Obstacle* obstacle = (Obstacle*)collider->owner; + if (!obstacle->dead && obstacle->meta->i->attack_type() == 1 && + obstacle->meta->i->drop() != 0) { + obstacle->health = 0; + obstacle->dead = obstacle->health <= 0.01f; + obstacle->dead_frameno = room->frame_no; + if (obstacle->dead) { + #if 0 + if (obstacle->meta->i->damage_dia() > 0.01f && + obstacle->meta->i->damage() > 0.01f) { + obstacle->Explosion(this); + } + #endif + room->ScatterDrop(obstacle->pos, obstacle->meta->i->drop()); + } + obstacle->BroadcastFullState(); + } else { + return true; + } + } + } + } + break; case ET_Building: { if (!collider->owner->dead && TestCollision((ColliderComponent*)collider)) {