From 0a4ceb85ab1cd434bff33d495b9443be2c8b76d3 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 17 Jun 2021 23:33:10 +0800 Subject: [PATCH] 1 --- server/gameserver/obstacle.cc | 25 +++++++++++++++++++++---- server/gameserver/obstacle.h | 1 + server/gameserver/roomobstacle.h | 2 +- 3 files changed, 23 insertions(+), 5 deletions(-) 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();