From ed3c30052e3f1c9437a87cd48ce2d890d17ae843 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 7 Apr 2021 17:18:31 +0800 Subject: [PATCH] 1 --- server/gameserver/roomobstacle.cc | 9 ++++++--- server/tools/protobuild/metatable.proto | 1 + 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/server/gameserver/roomobstacle.cc b/server/gameserver/roomobstacle.cc index 5b4828d..6e90d8d 100644 --- a/server/gameserver/roomobstacle.cc +++ b/server/gameserver/roomobstacle.cc @@ -273,19 +273,22 @@ void RoomObstacle::SpecExplosion() grid_list_ = new std::set(); room->grid_service->GetAllCellsByXy(room, GetPos().x, GetPos().y, *grid_list_); } + a8::Vec2 bomb_born_offset = a8::Vec2::UP; + bomb_born_offset.Rotate(a8::RandAngle()); + 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; room->grid_service->TouchAllLayerHumanList ( room->GetRoomIdx(), *grid_list_, - [this, &objects] (Human* hum, bool& stop) + [this, &objects, &bomb_pos] (Human* hum, bool& stop) { - float distance = (hum->GetPos() - GetPos()).Norm(); + float distance = (hum->GetPos() - bomb_pos).Norm(); if (master.Get()->team_id != hum->team_id && distance < meta->i->damage_dia()) { objects.insert(hum); } }); - a8::Vec2 bomb_pos = GetPos(); room->frame_event.AddExplosionEx(master, meta->i->thing_id(), bomb_pos, diff --git a/server/tools/protobuild/metatable.proto b/server/tools/protobuild/metatable.proto index 502bc37..10ed484 100755 --- a/server/tools/protobuild/metatable.proto +++ b/server/tools/protobuild/metatable.proto @@ -57,6 +57,7 @@ message MapThing optional int32 explosion_effect = 15; optional int32 explosion_interval = 18; optional int32 explosion_times = 19; + optional int32 explosion_float = 20; } message SafeArea