diff --git a/src/main/scala/net/psforever/actors/session/normal/LocalHandlerLogic.scala b/src/main/scala/net/psforever/actors/session/normal/LocalHandlerLogic.scala index 1b1764743..857c44dff 100644 --- a/src/main/scala/net/psforever/actors/session/normal/LocalHandlerLogic.scala +++ b/src/main/scala/net/psforever/actors/session/normal/LocalHandlerLogic.scala @@ -2,7 +2,8 @@ package net.psforever.actors.session.normal import akka.actor.ActorContext -import net.psforever.actors.session.support.{LocalHandlerFunctions, SessionData, SessionLocalHandlers} +import net.psforever.actors.session.support.SpawnOperations.ActivityQueuedTask +import net.psforever.actors.session.support.{LocalHandlerFunctions, SessionData, SessionLocalHandlers, SpawnOperations} import net.psforever.objects.ce.Deployable import net.psforever.objects.serverobject.doors.Door import net.psforever.objects.vehicles.MountableWeapons @@ -191,7 +192,17 @@ class LocalHandlerLogic(val ops: SessionLocalHandlers, implicit val context: Act sessionLogic.general.useRouterTelepadEffect(passengerGuid, srcGuid, destGuid) case LocalResponse.SendResponse(msg) => - sendResponse(msg) + msg match { + case m: GenericObjectActionMessage => + // delay building virus alert if player is dead/respawning + if ((m.code == 58 || m.code == 60) && !sessionLogic.zoning.spawn.startEnqueueSquadMessages) { + sessionLogic.zoning.spawn.enqueueNewActivity(ActivityQueuedTask( + SpawnOperations.delaySendGenericObjectActionMessage(msg), 1)) + } + else sendResponse(msg) + case _ => + sendResponse(msg) + } case LocalResponse.SetEmpire(objectGuid, empire) => sendResponse(SetEmpireMessage(objectGuid, empire)) 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 b7b2e99bf..cece947a7 100644 --- a/src/main/scala/net/psforever/actors/session/support/ZoningOperations.scala +++ b/src/main/scala/net/psforever/actors/session/support/ZoningOperations.scala @@ -193,6 +193,10 @@ object SpawnOperations { def sendEventMessage(msg: ChatMsg)(sessionLogic: SessionData): Unit = { sessionLogic.sendResponse(msg) } + + def delaySendGenericObjectActionMessage(msg: PlanetSideGamePacket)(sessionLogic: SessionData): Unit = { + sessionLogic.sendResponse(msg) + } } class ZoningOperations( diff --git a/src/main/scala/net/psforever/objects/serverobject/hackable/GenericHackables.scala b/src/main/scala/net/psforever/objects/serverobject/hackable/GenericHackables.scala index 8f654ded9..b7cb50172 100644 --- a/src/main/scala/net/psforever/objects/serverobject/hackable/GenericHackables.scala +++ b/src/main/scala/net/psforever/objects/serverobject/hackable/GenericHackables.scala @@ -7,7 +7,7 @@ import net.psforever.objects.serverobject.terminals.Terminal import net.psforever.objects.serverobject.terminals.capture.CaptureTerminal import net.psforever.objects.{GlobalDefinitions, Player, Vehicle} import net.psforever.objects.serverobject.{CommonMessages, PlanetSideServerObject} -import net.psforever.packet.game.{HackMessage, HackState, HackState1, HackState7, TriggeredSound} +import net.psforever.packet.game.{GenericObjectActionMessage, HackMessage, HackState, HackState1, HackState7, TriggeredSound} import net.psforever.types.{PlanetSideEmpire, PlanetSideGUID} import net.psforever.services.Service import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage} @@ -165,11 +165,10 @@ object GenericHackables { LocalAction .ClearTemporaryHack(pguid, target) ) - val msg = AvatarAction.GenericObjectAction(Service.defaultPlayerGUID, target.GUID, 60) - val events = zone.AvatarEvents - building.PlayersInSOI.foreach { player => - events ! AvatarServiceMessage(player.Name, msg) - } + zone.LocalEvents ! LocalServiceMessage( + zone.id, + LocalAction.SendResponse(GenericObjectActionMessage(target.GUID, 60)) + ) currVirus match { case 0L => building.HackableAmenities.filter(d => d.Definition == GlobalDefinitions.lock_external).foreach { iff => @@ -218,11 +217,10 @@ object GenericHackables { LocalAction .HackTemporarily(pguid, zone, target, installedVirusDuration, hackClearValue, installedVirusDuration, unk2=hackState) ) - val msg = AvatarAction.GenericObjectAction(Service.defaultPlayerGUID, target.GUID, 58) - val events = zone.AvatarEvents - building.PlayersInSOI.foreach { player => - events ! AvatarServiceMessage(player.Name, msg) - } + zone.LocalEvents ! LocalServiceMessage( + zone.id, + LocalAction.SendResponse(GenericObjectActionMessage(target.GUID, 58)) + ) //amenities if applicable virus match { case 0L =>