diff --git a/server/gameserver/metadata.cc b/server/gameserver/metadata.cc index 5d9e15a..9ceed91 100644 --- a/server/gameserver/metadata.cc +++ b/server/gameserver/metadata.cc @@ -794,6 +794,13 @@ namespace MetaData void AirRaid::Init() { + { + std::vector strings; + a8::Split(i->bomb_id(), strings, '|'); + for (auto& str : strings) { + bomb_ids.push_back(a8::XValue(str)); + } + } { std::vector strings; a8::Split(i->raid_wave(), strings, '|'); diff --git a/server/gameserver/metadata.h b/server/gameserver/metadata.h index f091d15..86606b7 100644 --- a/server/gameserver/metadata.h +++ b/server/gameserver/metadata.h @@ -199,6 +199,7 @@ namespace MetaData { const metatable::AirRaid* i = nullptr; std::vector> raid_waves; + std::vector bomb_ids; void Init(); }; diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index fdf5b5d..e84f3b0 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -3790,10 +3790,6 @@ void Room::AirRaid(int airraid_id) if (!raid_meta) { return; } - MetaData::MapThing* thing_meta = MetaMgr::Instance()->GetMapThing(raid_meta->i->bomb_id()); - if (!thing_meta) { - return; - } a8::Vec2 dir = a8::Vec2::UP; dir.Rotate(a8::RandAngle()); float rnd_rad = gas_data_.new_area_meta->i->rad() > 0 ? rand() % gas_data_.new_area_meta->i->rad() : 0; @@ -3838,13 +3834,15 @@ void Room::AirRaid(int airraid_id) dir.Rotate(a8::RandAngle()); a8::Vec2 pos = center + dir * (50 + rand() % 100); if (room->grid_service->CanAdd(pos.x, pos.y)) { - RoomObstacle* obstacle = room->CreateObstacle - ( - raid_meta->i->bomb_id(), - pos.x, - pos.y - ); - obstacle->Active(); + for (auto bomb_id : raid_meta->bomb_ids) { + RoomObstacle* obstacle = room->CreateObstacle + ( + bomb_id, + pos.x, + pos.y + ); + obstacle->Active(); + } } }; Room* room = (Room*)param.sender.GetUserData(); diff --git a/server/tools/protobuild/metatable.proto b/server/tools/protobuild/metatable.proto index 41c567f..53fa69f 100755 --- a/server/tools/protobuild/metatable.proto +++ b/server/tools/protobuild/metatable.proto @@ -333,7 +333,7 @@ message AirRaid optional int32 id = 1; optional int32 time = 2; optional int32 appear_time = 3; - optional int32 bomb_id = 4; + optional string bomb_id = 4; optional string raid_wave = 5; optional float rad = 6; }