diff --git a/server/gameserver/airraid.cc b/server/gameserver/airraid.cc index caa75aed..ea8f6a0a 100644 --- a/server/gameserver/airraid.cc +++ b/server/gameserver/airraid.cc @@ -5,6 +5,7 @@ #include "player.h" #include "obstacle.h" #include "roomobstacle.h" +#include "mapinstance.h" #include "mt/AirRaid.h" #include "mt/SafeArea.h" @@ -85,6 +86,24 @@ bool AirRaid::GenAirRaidPos(const mt::AirRaid* raid_meta, glm::vec3& center) } #endif } + { + glm::vec3 ref_point = center; + room_->map_instance->PtInHouse(center, ref_point); + room_->map_instance->Scale(ref_point); + glm::vec3 point; + bool ok = false; + for (int i = 0; i < 10; ++i) { + ok = room_->map_instance->FindNearestPoint(ref_point, 1.0f + 10 * i, point); + if (ok) { + break; + } + } + if (!ok) { + return false; + } + room_->map_instance->UnScale(point); + center = point; + } room_->frame_event.AddAirRaid(raid_meta->appear_time(), center, raid_meta->rad()); return true; }