diff --git a/src/main/scala/net/psforever/actors/session/support/ChatOperations.scala b/src/main/scala/net/psforever/actors/session/support/ChatOperations.scala index a1e705014..4705b1f23 100644 --- a/src/main/scala/net/psforever/actors/session/support/ChatOperations.scala +++ b/src/main/scala/net/psforever/actors/session/support/ChatOperations.scala @@ -999,10 +999,17 @@ class ChatOperations( private def captureBaseCurrSoi( session: Session ): Iterable[Building] = { - val charId = session.player.CharId - session.zone.Buildings.values.filter { building => - building.PlayersInSOI.exists(_.CharId == charId) - } + val player = session.player + val positionxy = player.Position.xy + session + .zone + .blockMap + .sector(player) + .buildingList + .filter { building => + val radius = building.Definition.SOIRadius + Vector3.DistanceSquared(building.Position.xy, positionxy) < radius * radius + } } private def captureBaseParamFaction( diff --git a/src/main/scala/net/psforever/actors/session/support/ZoningOperations.scala b/src/main/scala/net/psforever/actors/session/support/ZoningOperations.scala index ddae723f0..5e7501c3e 100644 --- a/src/main/scala/net/psforever/actors/session/support/ZoningOperations.scala +++ b/src/main/scala/net/psforever/actors/session/support/ZoningOperations.scala @@ -17,6 +17,7 @@ import net.psforever.objects.serverobject.tube.SpawnTube import net.psforever.objects.serverobject.turret.auto.AutomatedTurret import net.psforever.objects.sourcing.{PlayerSource, SourceEntry, VehicleSource} import net.psforever.objects.vital.{InGameHistory, IncarnationActivity, ReconstructionActivity, SpawningActivity} +import net.psforever.objects.zones.blockmap.BlockMapEntity import net.psforever.packet.game.{CampaignStatistic, ChangeFireStateMessage_Start, HackState7, MailMessage, ObjectDetectedMessage, SessionStatistic, TriggeredSound} import net.psforever.services.chat.DefaultChannel @@ -159,6 +160,18 @@ object ZoningOperations { } } + def findBuildingsBySoiOccupancy(zone: Zone, obj: PlanetSideGameObject with BlockMapEntity): List[Building] = { + val positionxy = obj.Position.xy + zone + .blockMap + .sector(obj) + .buildingList + .filter { building => + val radius = building.Definition.SOIRadius + Vector3.DistanceSquared(building.Position.xy, positionxy) < radius * radius + } + } + def findBuildingsBySoiOccupancy(zone: Zone, position: Vector3): List[Building] = { val positionxy = position.xy zone