diff --git a/server/gameserver/obstacle.cc b/server/gameserver/obstacle.cc index bb8426e..4e2d143 100644 --- a/server/gameserver/obstacle.cc +++ b/server/gameserver/obstacle.cc @@ -648,10 +648,27 @@ bool Obstacle::DoInteraction(Human* sender) void Obstacle::OnCollisionTrigger(Creature* c, OptResult& opt_result) { opt_result = kOptPass; - if (meta->i->thing_type() == kObstacleSpring) { - AddObstacleBuff(c); - a8::SetBitFlag(c->status, CS_Collisioning); - opt_result = kOptBreak; + switch (meta->i->thing_type() == kObstacleSpring) { + case kObstacleSpring: + { + AddObstacleBuff(c); + a8::SetBitFlag(c->status, CS_Collisioning); + opt_result = kOptBreak; + } + break; + case kObstacleMine: + case kObstacleTrap: + { + AddObstacleBuff(c); + Explosion(); + Die(c->room); + BroadcastFullState(c->room); + } + break; + default: + { + } + break; } } diff --git a/server/gameserver/obstacle.h b/server/gameserver/obstacle.h index 54fd6f5..9e9cf8f 100644 --- a/server/gameserver/obstacle.h +++ b/server/gameserver/obstacle.h @@ -46,6 +46,7 @@ class Obstacle : public Entity virtual bool CanThroughable(Bullet* bullet); virtual bool DoInteraction(Human* sender); virtual void OnCollisionTrigger(Creature* c, OptResult& opt_result); + virtual void Explosion() {}; void Explosion(Bullet* bullet); void SetDoorInfo(Building* building, int door_id_x); bool IsDoor(); diff --git a/server/gameserver/roomobstacle.h b/server/gameserver/roomobstacle.h index be7817f..a33219d 100644 --- a/server/gameserver/roomobstacle.h +++ b/server/gameserver/roomobstacle.h @@ -24,9 +24,9 @@ class RoomObstacle : public Obstacle void Active(); void DetachFromMaster(); virtual void Die(Room* room) override; + virtual void Explosion() override; private: - void Explosion(); void SpecExplosion(); void ActiveSelfExplosion(); void ActiveMine();