From ce41c8a051e6ceae2b7c993b8cf061f3ebc04c4f Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 17 Jun 2021 21:54:15 +0800 Subject: [PATCH] =?UTF-8?q?17.=E7=A9=BA=E8=A2=AD=EF=BC=8C=E5=8F=AC?= =?UTF-8?q?=E5=94=A4=E6=97=A0=E6=B3=95=E7=94=9F=E6=88=90=E7=88=86=E7=82=B8?= =?UTF-8?q?=E7=89=A9=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/gameserver/room.cc | 1 + server/gameserver/roomobstacle.cc | 22 +++++++++++++++------- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index 073d150..21e2fa9 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -3949,6 +3949,7 @@ void Room::AirRaid(int airraid_id) pos.x, pos.y ); + obstacle->Active(); if (obstacle) { } #if 1 diff --git a/server/gameserver/roomobstacle.cc b/server/gameserver/roomobstacle.cc index bd30797..baca6a5 100644 --- a/server/gameserver/roomobstacle.cc +++ b/server/gameserver/roomobstacle.cc @@ -283,21 +283,29 @@ void RoomObstacle::SpecExplosion() bomb_born_offset = bomb_born_offset * a8::RandEx(1, std::max(2, meta->i->explosion_float())); a8::Vec2 bomb_pos = GetPos() + bomb_born_offset; std::set objects; + Creature* dumy_c = nullptr; room->grid_service->TraverseAllLayerHumanList ( room->GetRoomIdx(), *grid_list_, - [this, &objects, &bomb_pos] (Human* hum, bool& stop) + [this, &objects, &bomb_pos, &dumy_c] (Human* hum, bool& stop) { + if (!dumy_c) { + dumy_c = hum; + } float distance = (hum->GetPos() - bomb_pos).Norm(); - if (master.Get()->team_id != hum->team_id && distance < meta->i->damage_dia()) { - objects.insert(hum); + if ((!master.Get() || master.Get()->team_id != hum->team_id) && + distance < meta->i->damage_dia()) { + dumy_c = hum; + objects.insert(hum); } }); - room->frame_event.AddExplosionEx(master, - meta->i->thing_id(), - bomb_pos, - meta->i->explosion_effect()); + if (dumy_c) { + room->frame_event.AddExplosionEx(dumy_c->GetWeakPtrRef(), + meta->i->thing_id(), + bomb_pos, + meta->i->explosion_effect()); + } for (auto& target : objects) { switch (target->GetEntityType()) { case ET_Player: