From cbf6aa5ebb18452cfed2aebbb92b21da3ae24824 Mon Sep 17 00:00:00 2001 From: Fate-JH Date: Sun, 8 Mar 2026 14:27:25 -0400 Subject: [PATCH] removed event system implied instances of MessageEnvelope overloaded constructors and replaced them directly with MessageEnvelope; included additional places where SendResponse could combine dispatch; support actors have both constructor classes and custom envelopes stored in the same file as the actor itself for better readability --- .codecov.yml | 4 - .../actor/service/AvatarServiceTest.scala | 657 ------------------ .../actors/session/AvatarActor.scala | 33 +- .../actors/session/csr/ChatLogic.scala | 13 +- .../CustomerServiceRepresentativeMode.scala | 14 +- .../actors/session/csr/GeneralLogic.scala | 11 +- .../session/csr/MountHandlerLogic.scala | 16 +- ...eAsCustomerServiceRepresentativeMode.scala | 7 +- .../actors/session/csr/VehicleLogic.scala | 11 +- .../session/normal/AvatarHandlerLogic.scala | 11 +- .../session/normal/GalaxyHandlerLogic.scala | 5 +- .../actors/session/normal/GeneralLogic.scala | 9 +- .../session/normal/MountHandlerLogic.scala | 14 +- .../actors/session/normal/VehicleLogic.scala | 5 +- .../spectator/AvatarHandlerLogic.scala | 5 +- .../session/spectator/GeneralLogic.scala | 7 +- .../session/spectator/MountHandlerLogic.scala | 12 +- .../session/spectator/SpectatorMode.scala | 4 +- .../session/spectator/VehicleLogic.scala | 5 +- .../session/support/GeneralOperations.scala | 35 +- .../support/SessionAvatarHandlers.scala | 7 +- .../actors/session/support/SessionData.scala | 5 +- .../support/SessionMountHandlers.scala | 18 +- .../support/SessionOutfitHandlers.scala | 25 +- .../support/SessionSquadHandlers.scala | 6 +- .../WeaponAndProjectileOperations.scala | 46 +- .../session/support/ZoningOperations.scala | 71 +- .../psforever/actors/zone/BuildingActor.scala | 16 +- .../net/psforever/actors/zone/ZoneActor.scala | 10 +- .../zone/building/CavernFacilityLogic.scala | 5 +- .../actors/zone/building/FacilityLogic.scala | 5 +- .../zone/building/MajorFacilityLogic.scala | 54 +- .../actors/zone/building/WarpGateLogic.scala | 7 +- .../net/psforever/login/WorldSession.scala | 27 +- .../psforever/objects/BoomerDeployable.scala | 10 +- .../net/psforever/objects/Deployables.scala | 5 +- .../objects/ExplosiveDeployable.scala | 11 +- .../objects/FieldTurretDeployable.scala | 4 +- .../scala/net/psforever/objects/Players.scala | 21 +- .../psforever/objects/SensorDeployable.scala | 18 +- .../objects/ShieldGeneratorDeployable.scala | 8 +- .../psforever/objects/TelepadDeployable.scala | 5 +- .../scala/net/psforever/objects/Tools.scala | 4 +- .../psforever/objects/TurretDeployable.scala | 5 +- .../net/psforever/objects/Vehicles.scala | 38 +- .../objects/avatar/CorpseControl.scala | 10 +- .../objects/avatar/PlayerControl.scala | 104 +-- .../avatar/interaction/WithEntrance.scala | 8 +- .../avatar/interaction/WithGantry.scala | 6 +- .../avatar/interaction/WithWater.scala | 5 +- .../objects/avatar/scoring/Statistic.scala | 2 +- .../objects/ce/DeployableBehavior.scala | 18 +- .../psforever/objects/ce/TelepadLike.scala | 15 +- .../equipment/ArmorSiphonBehavior.scala | 8 +- .../objects/equipment/JammingUnit.scala | 9 +- .../locker/LockerContainerControl.scala | 10 +- .../damage/DamageableAmenity.scala | 12 +- .../damage/DamageableEntity.scala | 13 +- .../damage/DamageableMountable.scala | 8 +- .../damage/DamageableVehicle.scala | 21 +- .../damage/DamageableWeaponTurret.scala | 12 +- .../deploy/DeploymentBehavior.scala | 11 +- .../generator/GeneratorControl.scala | 4 +- .../hackable/GenericHackables.scala | 20 +- .../pad/VehicleSpawnControl.scala | 20 +- .../VehicleSpawnControlConcealPlayer.scala | 4 +- .../VehicleSpawnControlDriverControl.scala | 4 +- .../VehicleSpawnControlFinalClearance.scala | 7 +- .../VehicleSpawnControlLoadVehicle.scala | 5 +- .../process/VehicleSpawnControlRailJack.scala | 4 +- .../VehicleSpawnControlSeatDriver.scala | 6 +- ...cleSpawnControlServerVehicleOverride.scala | 8 +- .../repair/RepairableAmenity.scala | 12 +- .../repair/RepairableEntity.scala | 10 +- .../repair/RepairableWeaponTurret.scala | 8 +- .../resourcesilo/ResourceSiloControl.scala | 16 +- .../shuttle/OrbitalShuttlePadControl.scala | 5 +- .../FacilityHackParticipation.scala | 14 +- .../MajorFacilityHackParticipation.scala | 12 +- .../TowerHackParticipation.scala | 7 +- .../terminals/ProximityTerminalControl.scala | 23 +- .../terminals/capture/CaptureTerminals.scala | 5 +- .../implant/ImplantTerminalMechControl.scala | 14 +- .../turret/FacilityTurretControl.scala | 9 +- .../serverobject/turret/TurretControl.scala | 17 +- .../turret/VanuSentryControl.scala | 5 +- .../serverobject/turret/WeaponTurrets.scala | 16 +- .../turret/auto/AutomatedTurretBehavior.scala | 10 +- .../vehicles/AntTransferBehavior.scala | 25 +- .../vehicles/BfrTransferBehavior.scala | 5 +- .../objects/vehicles/CarrierBehavior.scala | 29 +- .../objects/vehicles/control/AmsControl.scala | 11 +- .../objects/vehicles/control/ApcControl.scala | 4 +- .../objects/vehicles/control/BfrControl.scala | 14 +- .../vehicles/control/VehicleCapacitance.scala | 4 +- .../vehicles/control/VehicleControl.scala | 37 +- .../interaction/WithEntranceInVehicle.scala | 4 +- .../net/psforever/objects/zones/MapInfo.scala | 7 +- .../objects/zones/ZoneDeployableActor.scala | 4 +- .../objects/zones/ZoneHotSpotProjector.scala | 5 +- .../objects/zones/ZoneProjectileActor.scala | 11 +- .../objects/zones/ZoneVehicleActor.scala | 4 +- .../objects/zones/exp/KillAssists.scala | 6 +- .../objects/zones/exp/KillContributions.scala | 7 +- .../services/CavernRotationService.scala | 13 +- .../account/AccountPersistenceService.scala | 16 +- .../services/avatar/AvatarService.scala | 22 +- .../avatar/AvatarServiceMessage.scala | 15 - .../avatar/support/CorpseRemovalActor.scala | 18 +- .../avatar/support/DroppedItemRemover.scala | 18 +- .../base/envelope/MessageEnvelope.scala | 9 + .../{ => base/support}/RemoverActor.scala | 3 +- .../galaxy/GalaxyServiceMessage.scala | 12 - .../psforever/services/hart/HartTimer.scala | 14 +- .../services/hart/HartTimerActions.scala | 9 +- .../services/local/LocalService.scala | 37 +- .../services/local/LocalServiceMessage.scala | 15 - .../local/support/CaptureFlagManager.scala | 37 +- .../local/support/DoorCloseActor.scala | 17 +- .../local/support/HackCaptureActor.scala | 21 +- .../local/support/HackClearActor.scala | 22 +- .../services/vehicle/VehicleService.scala | 14 +- .../vehicle/VehicleServiceMessage.scala | 15 - .../vehicle/support/TurretUpgrader.scala | 19 +- 124 files changed, 851 insertions(+), 1518 deletions(-) delete mode 100644 server/src/test/scala/actor/service/AvatarServiceTest.scala delete mode 100644 src/main/scala/net/psforever/services/avatar/AvatarServiceMessage.scala rename src/main/scala/net/psforever/services/{ => base/support}/RemoverActor.scala (98%) delete mode 100644 src/main/scala/net/psforever/services/galaxy/GalaxyServiceMessage.scala delete mode 100644 src/main/scala/net/psforever/services/local/LocalServiceMessage.scala delete mode 100644 src/main/scala/net/psforever/services/vehicle/VehicleServiceMessage.scala diff --git a/.codecov.yml b/.codecov.yml index 80ad89238..3c69d86ed 100644 --- a/.codecov.yml +++ b/.codecov.yml @@ -75,26 +75,22 @@ ignore: - "src/main/scala/net/psforever/services/account/StoreIPAddress.scala" - "src/main/scala/net/psforever/services/avatar/AvatarAction.scala" - "src/main/scala/net/psforever/services/avatar/AvatarService.scala" - - "src/main/scala/net/psforever/services/avatar/AvatarServiceMessage.scala" - "src/main/scala/net/psforever/services/avatar/AvatarServiceResponse.scala" - "src/main/scala/net/psforever/services/base/bus" - "src/main/scala/net/psforever/services/base/envelope" - "src/main/scala/net/psforever/services/chat/ChatChannel.scala" - "src/main/scala/net/psforever/services/galaxy/GalaxyAction" - "src/main/scala/net/psforever/services/galaxy/GalaxyService" - - "src/main/scala/net/psforever/services/galaxy/GalaxyServiceMessage.scala" - "src/main/scala/net/psforever/services/galaxy/GalaxyServiceResponse.scala" - "src/main/scala/net/psforever/services/hart/HartEvent.scala" - "src/main/scala/net/psforever/services/hart/HartTimerActions.scala" - "src/main/scala/net/psforever/services/local/LocalAction" - "src/main/scala/net/psforever/services/local/LocalService" - - "src/main/scala/net/psforever/services/local/LocalServiceMessage.scala" - "src/main/scala/net/psforever/services/local/LocalServiceResponse.scala" - "src/main/scala/net/psforever/services/teamwork/SquadServiceMessage.scala" - "src/main/scala/net/psforever/services/teamwork/SquadServiceResponse.scala" - "src/main/scala/net/psforever/services/vehicle/VehicleAction" - "src/main/scala/net/psforever/services/vehicle/VehicleService" - - "src/main/scala/net/psforever/services/vehicle/VehicleServiceMessage.scala" - "src/main/scala/net/psforever/services/vehicle/VehicleServiceResponse.scala" - "src/main/scala/net/psforever/services/Service.scala" - "src/main/scala/net/psforever/types" diff --git a/server/src/test/scala/actor/service/AvatarServiceTest.scala b/server/src/test/scala/actor/service/AvatarServiceTest.scala deleted file mode 100644 index 001d65d10..000000000 --- a/server/src/test/scala/actor/service/AvatarServiceTest.scala +++ /dev/null @@ -1,657 +0,0 @@ -// Copyright (c) 2017 PSForever -package actor.service - -import akka.actor.Props -import akka.testkit.TestProbe - -import scala.concurrent.duration._ -import actor.base.{ActorTest, FreedContextActorTest} -import net.psforever.objects._ -import net.psforever.objects.avatar.Avatar -import net.psforever.objects.guid.NumberPoolHub -import net.psforever.objects.guid.source.MaxNumberSource -import net.psforever.objects.zones.{Zone, ZoneMap} -import net.psforever.packet.game.objectcreate.{DroppedItemData, ObjectClass, ObjectCreateMessageParent, PlacementData} -import net.psforever.packet.game.{ObjectCreateMessage, PlayerStateMessageUpstream} -import net.psforever.types._ -import net.psforever.services.{RemoverActor, Service, ServiceManager} -import net.psforever.services.avatar._ -import net.psforever.services.avatar.support.{CorpseEnvelope, DropItemEnvelope, PickupItemEnvelope, ReleaseEnvelope} -import net.psforever.services.base.message.{ChangeAmmo, ChangeFireState_Start, ChangeFireState_Stop, ConcealPlayer, ObjectDelete, PlanetsideAttribute, ReloadTool, WeaponDryFire} - -class AvatarService1Test extends ActorTest { - "AvatarService" should { - "construct" in { - ServiceManager.boot(system) - system.actorOf(AvatarService(), AvatarServiceTest.TestName) - assert(true) - } - } -} - -class AvatarService2Test extends ActorTest { - "AvatarService" should { - "subscribe" in { - ServiceManager.boot(system) - val service = system.actorOf(AvatarService(), AvatarServiceTest.TestName) - service ! Service.Join("test") - assert(true) - } - } -} - -class AvatarService3Test extends ActorTest { - "AvatarService" should { - ServiceManager.boot(system) - "subscribe to a specific channel" in { - val service = system.actorOf(AvatarService(), AvatarServiceTest.TestName) - service ! Service.Join("test") - service ! Service.LeaveAll - assert(true) - } - } -} - -class AvatarService4Test extends ActorTest { - "AvatarService" should { - "subscribe" in { - ServiceManager.boot(system) - val service = system.actorOf(AvatarService(), AvatarServiceTest.TestName) - service ! Service.Join("test") - service ! Service.LeaveAll - assert(true) - } - } -} - -class AvatarService5Test extends ActorTest { - "AvatarService" should { - "pass an unhandled message" in { - ServiceManager.boot(system) - val service = system.actorOf(AvatarService(), AvatarServiceTest.TestName) - service ! Service.Join("test") - service ! "hello" - expectNoMessage() - } - } -} - -class ArmorChangedTest extends ActorTest { - "AvatarService" should { - "pass ArmorChanged" in { - ServiceManager.boot(system) - val service = system.actorOf(AvatarService(), AvatarServiceTest.TestName) - service ! Service.Join("test") - service ! AvatarServiceMessage("test", PlanetSideGUID(10), AvatarAction.ArmorChanged(ExoSuitType.Reinforced, 0)) - expectMsg( - AvatarServiceResponse( - "/test/Avatar", - PlanetSideGUID(10), - AvatarAction.ArmorChanged(ExoSuitType.Reinforced, 0) - ) - ) - } - } -} - -class ConcealPlayerTest extends ActorTest { - "AvatarService" should { - "pass ConcealPlayer" in { - ServiceManager.boot(system) - val service = system.actorOf(AvatarService(), AvatarServiceTest.TestName) - service ! Service.Join("test") - service ! AvatarServiceMessage("test", ConcealPlayer(PlanetSideGUID(10))) - expectMsg(AvatarServiceResponse("/test/Avatar", PlanetSideGUID(10), ConcealPlayer(PlanetSideGUID(10)))) - } - } -} - -class EquipmentInHandTest extends ActorTest { - ServiceManager.boot(system) - val service = system.actorOf(AvatarService(), "release-test-service") - val toolDef = GlobalDefinitions.beamer - val tool = Tool(toolDef) - tool.GUID = PlanetSideGUID(40) - tool.AmmoSlots.head.Box.GUID = PlanetSideGUID(41) - val pkt = ObjectCreateMessage( - toolDef.ObjectId, - tool.GUID, - ObjectCreateMessageParent(PlanetSideGUID(11), 2), - toolDef.Packet.ConstructorData(tool).get - ) - - "AvatarService" should { - "pass EquipmentInHand" in { - service ! Service.Join("test") - service ! AvatarServiceMessage( - "test", - PlanetSideGUID(10), - AvatarAction.EquipmentInHand(PlanetSideGUID(11), 2, tool) - ) - expectMsg(AvatarServiceResponse("/test/Avatar", PlanetSideGUID(10), AvatarAction.EquipmentCreatedInHand(pkt))) - } - } -} - -class DroptItemTest extends ActorTest { - ServiceManager.boot(system) - val service = system.actorOf(AvatarService(), "release-test-service") - val toolDef = GlobalDefinitions.beamer - val tool = Tool(toolDef) - tool.Position = Vector3(1, 2, 3) - tool.Orientation = Vector3(4, 5, 6) - tool.GUID = PlanetSideGUID(40) - tool.AmmoSlots.head.Box.GUID = PlanetSideGUID(41) - val pkt = ObjectCreateMessage( - toolDef.ObjectId, - tool.GUID, - DroppedItemData( - PlacementData(tool.Position, tool.Orientation), - toolDef.Packet.ConstructorData(tool).get - ) - ) - - "AvatarService" should { - "pass DropItem" in { - service ! Service.Join("test") - service ! DropItemEnvelope("test", PlanetSideGUID(10), AvatarAction.DropItem(tool), Zone.Nowhere) - expectMsg(AvatarServiceResponse("/test/Avatar", PlanetSideGUID(10), AvatarAction.DropCreatedItem(pkt))) - } - } -} - -class LoadPlayerTest extends ActorTest { - val obj = Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.VS, CharacterSex.Female, 1, CharacterVoice.Voice1)) - obj.GUID = PlanetSideGUID(10) - obj.Slot(5).Equipment.get.GUID = PlanetSideGUID(11) - val c1data = obj.Definition.Packet.DetailedConstructorData(obj).get - val pkt1 = ObjectCreateMessage(ObjectClass.avatar, PlanetSideGUID(10), c1data) - val parent = ObjectCreateMessageParent(PlanetSideGUID(12), 0) - obj.VehicleSeated = PlanetSideGUID(12) - val c2data = obj.Definition.Packet.DetailedConstructorData(obj).get - val pkt2 = ObjectCreateMessage(ObjectClass.avatar, PlanetSideGUID(10), parent, c2data) - - "AvatarService" should { - "pass LoadPlayer" in { - ServiceManager.boot(system) - val service = system.actorOf(AvatarService(), AvatarServiceTest.TestName) - service ! Service.Join("test") - //no parent data - service ! AvatarServiceMessage( - "test", - PlanetSideGUID(20), - AvatarAction.LoadPlayer(ObjectClass.avatar, PlanetSideGUID(10), c1data, None) - ) - expectMsg(AvatarServiceResponse("/test/Avatar", PlanetSideGUID(20), AvatarAction.LoadCreatedPlayer(pkt1))) - //parent data - service ! AvatarServiceMessage( - "test", - PlanetSideGUID(20), - AvatarAction.LoadPlayer(ObjectClass.avatar, PlanetSideGUID(10), c2data, Some(parent)) - ) - expectMsg(AvatarServiceResponse("/test/Avatar", PlanetSideGUID(20), AvatarAction.LoadCreatedPlayer(pkt2))) - } - } -} - -class ObjectDeleteTest extends ActorTest { - "AvatarService" should { - "pass ObjectDelete" in { - ServiceManager.boot(system) - val service = system.actorOf(AvatarService(), AvatarServiceTest.TestName) - service ! Service.Join("test") - service ! AvatarServiceMessage("test", PlanetSideGUID(10), ObjectDelete(PlanetSideGUID(11))) - expectMsg( - AvatarServiceResponse("/test/Avatar", PlanetSideGUID(10), ObjectDelete(PlanetSideGUID(11), 0)) - ) - - service ! AvatarServiceMessage("test", PlanetSideGUID(10), ObjectDelete(PlanetSideGUID(11), 55)) - expectMsg( - AvatarServiceResponse("/test/Avatar", PlanetSideGUID(10), ObjectDelete(PlanetSideGUID(11), 55)) - ) - } - } -} - -class ObjectHeldTest extends ActorTest { - "AvatarService" should { - "pass ObjectHeld" in { - ServiceManager.boot(system) - val service = system.actorOf(AvatarService(), AvatarServiceTest.TestName) - service ! Service.Join("test") - service ! AvatarServiceMessage("test", PlanetSideGUID(10), AvatarAction.ObjectHeld(1, 2)) - expectMsg(AvatarServiceResponse("/test/Avatar", PlanetSideGUID(10), AvatarAction.ObjectHeld(1, 2))) - } - } -} - -class PutDownFDUTest extends ActorTest { - "AvatarService" should { - "pass PutDownFDU" in { - ServiceManager.boot(system) - val service = system.actorOf(AvatarService(), AvatarServiceTest.TestName) - service ! Service.Join("test") - service ! AvatarServiceMessage("test", AvatarAction.PutDownFDU(PlanetSideGUID(10))) - expectMsg( - AvatarServiceResponse("/test/Avatar", PlanetSideGUID(10), AvatarAction.PutDownFDU(PlanetSideGUID(10))) - ) - } - } -} - -class PlanetsideAttributeTest extends ActorTest { - "AvatarService" should { - "pass PlanetsideAttribute" in { - ServiceManager.boot(system) - val service = system.actorOf(AvatarService(), AvatarServiceTest.TestName) - service ! Service.Join("test") - service ! AvatarServiceMessage("test", PlanetSideGUID(10), PlanetsideAttribute(PlanetSideGUID(10), 5, 1200L)) - expectMsg(AvatarServiceResponse("/test/Avatar", PlanetSideGUID(10), PlanetsideAttribute(PlanetSideGUID(10), 5, 1200L))) - } - } -} - -class PlayerStateTest extends ActorTest { - val msg = PlayerStateMessageUpstream( - PlanetSideGUID(75), - Vector3(3694.1094f, 2735.4531f, 90.84375f), - Some(Vector3(4.375f, 2.59375f, 0.0f)), - 61.875f, - 351.5625f, - 0.0f, - 136, - 0, - false, - false, - false, - false, - 112, - 0 - ) - - "AvatarService" should { - "pass PlayerState" in { - ServiceManager.boot(system) - val service = system.actorOf(AvatarService(), AvatarServiceTest.TestName) - service ! Service.Join("test") - service ! AvatarServiceMessage( - "test", - PlanetSideGUID(10), - AvatarAction.PlayerState( - Vector3(3694.1094f, 2735.4531f, 90.84375f), - Some(Vector3(4.375f, 2.59375f, 0.0f)), - 61.875f, - 351.5625f, - 0.0f, - 136, - false, - false, - false, - false, - false, - false - ) - ) - expectMsg( - AvatarServiceResponse( - "/test/Avatar", - PlanetSideGUID(10), - AvatarAction.PlayerState( - Vector3(3694.1094f, 2735.4531f, 90.84375f), - Some(Vector3(4.375f, 2.59375f, 0.0f)), - 61.875f, - 351.5625f, - 0.0f, - 136, - false, - false, - false, - false, - false, - false - ) - ) - ) - } - } -} - -class PickupItemTest extends ActorTest { - val obj = Player(Avatar(0, "TestCharacter", PlanetSideEmpire.VS, CharacterSex.Female, 1, CharacterVoice.Voice1)) - val tool = Tool(GlobalDefinitions.beamer) - tool.GUID = PlanetSideGUID(40) - - "pass PickUpItem" in { - ServiceManager.boot(system) - val service = system.actorOf(AvatarService(), AvatarServiceTest.TestName) - service ! Service.Join("test") - service ! PickupItemEnvelope("test", AvatarAction.PickupItem(tool), Zone.Nowhere) - expectMsg(AvatarServiceResponse("/test/Avatar", PlanetSideGUID(10), ObjectDelete(tool.GUID, 0))) - } -} - -class ReloadTest extends ActorTest { - "AvatarService" should { - "pass Reload" in { - ServiceManager.boot(system) - val service = system.actorOf(AvatarService(), AvatarServiceTest.TestName) - service ! Service.Join("test") - service ! AvatarServiceMessage("test", PlanetSideGUID(10), ReloadTool(PlanetSideGUID(40))) - expectMsg(AvatarServiceResponse("/test/Avatar", PlanetSideGUID(10), ReloadTool(PlanetSideGUID(40)))) - } - } -} - -class ChangeAmmoTest extends ActorTest { - val ammoDef = GlobalDefinitions.energy_cell - val ammoBox = AmmoBox(ammoDef) - - "AvatarService" should { - "pass ChangeAmmo" in { - ServiceManager.boot(system) - val service = system.actorOf(AvatarService(), AvatarServiceTest.TestName) - service ! Service.Join("test") - service ! AvatarServiceMessage( - "test", - PlanetSideGUID(10), - ChangeAmmo( - PlanetSideGUID(40), - 0, - PlanetSideGUID(40), - ammoDef.ObjectId, - PlanetSideGUID(41), - ammoDef.Packet.ConstructorData(ammoBox).get - ) - ) - expectMsg( - AvatarServiceResponse( - "/test/Avatar", - PlanetSideGUID(10), - ChangeAmmo( - PlanetSideGUID(40), - 0, - PlanetSideGUID(40), - ammoDef.ObjectId, - PlanetSideGUID(41), - ammoDef.Packet.ConstructorData(ammoBox).get - ) - ) - ) - } - } -} - -class ChangeFireModeTest extends ActorTest { - val ammoDef = GlobalDefinitions.energy_cell - val ammoBox = AmmoBox(ammoDef) - - "AvatarService" should { - "pass ChangeFireMode" in { - ServiceManager.boot(system) - val service = system.actorOf(AvatarService(), AvatarServiceTest.TestName) - service ! Service.Join("test") - service ! AvatarServiceMessage("test", PlanetSideGUID(10), AvatarAction.ChangeFireMode(PlanetSideGUID(40), 0)) - expectMsg( - AvatarServiceResponse("/test/Avatar", PlanetSideGUID(10), AvatarAction.ChangeFireMode(PlanetSideGUID(40), 0)) - ) - } - } -} - -class ChangeFireStateStartTest extends ActorTest { - "AvatarService" should { - "pass ChangeFireState_Start" in { - ServiceManager.boot(system) - val service = system.actorOf(AvatarService(), AvatarServiceTest.TestName) - service ! Service.Join("test") - service ! AvatarServiceMessage("test", PlanetSideGUID(10), ChangeFireState_Start(PlanetSideGUID(40))) - expectMsg( - AvatarServiceResponse( - "/test/Avatar", - PlanetSideGUID(10), - ChangeFireState_Start(PlanetSideGUID(40)) - ) - ) - } - } -} - -class ChangeFireStateStopTest extends ActorTest { - "AvatarService" should { - "pass ChangeFireState_Stop" in { - ServiceManager.boot(system) - val service = system.actorOf(AvatarService(), AvatarServiceTest.TestName) - service ! Service.Join("test") - service ! AvatarServiceMessage("test", PlanetSideGUID(10), ChangeFireState_Stop(PlanetSideGUID(40))) - expectMsg( - AvatarServiceResponse( - "/test/Avatar", - PlanetSideGUID(10), - ChangeFireState_Stop(PlanetSideGUID(40)) - ) - ) - } - } -} - -class WeaponDryFireTest extends ActorTest { - "AvatarService" should { - "pass WeaponDryFire" in { - ServiceManager.boot(system) - val service = system.actorOf(AvatarService(), AvatarServiceTest.TestName) - service ! Service.Join("test") - service ! AvatarServiceMessage("test", PlanetSideGUID(10), WeaponDryFire(PlanetSideGUID(40))) - expectMsg( - AvatarServiceResponse("/test/Avatar", PlanetSideGUID(10), WeaponDryFire(PlanetSideGUID(40))) - ) - } - } -} - -class AvatarStowEquipmentTest extends ActorTest { - val tool = Tool(GlobalDefinitions.beamer) - - "AvatarService" should { - "pass StowEquipment" in { - ServiceManager.boot(system) - val service = system.actorOf(AvatarService(), AvatarServiceTest.TestName) - service ! Service.Join("test") - service ! AvatarServiceMessage( - "test", - PlanetSideGUID(10), - AvatarAction.StowEquipment(PlanetSideGUID(11), 2, tool) - ) - expectMsg( - AvatarServiceResponse( - "/test/Avatar", - PlanetSideGUID(10), - AvatarAction.StowEquipment(PlanetSideGUID(11), 2, tool) - ) - ) - } - } -} - -/* -Preparation for these three Release tests is involved. -The ServiceManager must be set up correctly. -The Zone needs to be set up and initialized properly with a ZoneActor. -The ZoneActor builds the GUID Actor and the ZonePopulationActor. - -ALL of these Actors will talk to each other. -The lines of communication can short circuit if the next Actor does not have the correct information. -Putting Actor startup in the main class, outside of the body of the test, helps. -Frequent pauses to allow everything to sort their messages also helps. -Even with all this work, the tests have a high chance of failure just due to being asynchronous. - */ -class AvatarReleaseTest extends FreedContextActorTest { - val guid: NumberPoolHub = new NumberPoolHub(new MaxNumberSource(15)) - val zone = new Zone("test", new ZoneMap("test-map"), 0) { - override def SetupNumberPools() : Unit = { } - GUID(guid) - } - zone.init(context) - val obj = Player(Avatar(0, "TestCharacter", PlanetSideEmpire.VS, CharacterSex.Female, 1, CharacterVoice.Voice1)) - guid.register(obj) - guid.register(obj.Slot(5).Equipment.get) - obj.Zone = zone - obj.Release - val subscriber = new TestProbe(system) - - "AvatarService" should { - "pass Release" in { - expectNoMessage(100 milliseconds) //spacer - - zone.AvatarEvents.tell(Service.Join("test"), subscriber.ref) - assert(zone.Corpses.isEmpty) - zone.Population ! Zone.Corpse.Add(obj) - subscriber.expectNoMessage(200 milliseconds) //spacer - - assert(zone.Corpses.size == 1) - assert(obj.HasGUID) - val guid = obj.GUID - zone.AvatarEvents ! ReleaseEnvelope("test", AvatarAction.Release(obj, zone, Some(1 second))) //alive for one second - - val reply1 = subscriber.receiveOne(200 milliseconds) - assert(reply1.isInstanceOf[AvatarServiceResponse]) - val reply1msg = reply1.asInstanceOf[AvatarServiceResponse] - assert(reply1msg.channel == "/test/Avatar") - assert(reply1msg.filter == guid) - assert(reply1msg.reply.isInstanceOf[AvatarAction.Release]) - assert(reply1msg.reply.asInstanceOf[AvatarAction.Release].player == obj) - - val reply2 = subscriber.receiveOne(2 seconds) - assert(reply2.isInstanceOf[AvatarServiceResponse]) - val reply2msg = reply2.asInstanceOf[AvatarServiceResponse] - assert(reply2msg.channel.equals("/test/Avatar")) - assert(reply2msg.filter == Service.defaultPlayerGUID) - assert(reply2msg.reply.isInstanceOf[ObjectDelete]) - assert(reply2msg.reply.asInstanceOf[ObjectDelete].obj_guid == guid) - - subscriber.expectNoMessage(1 seconds) - assert(zone.Corpses.isEmpty) - assert(!obj.HasGUID) - } - } -} - -class AvatarReleaseEarly1Test extends FreedContextActorTest { - val guid: NumberPoolHub = new NumberPoolHub(new MaxNumberSource(15)) - val zone = new Zone("test", new ZoneMap("test-map"), 0) { - override def SetupNumberPools() : Unit = { } - GUID(guid) - } - zone.init(context) - val obj = Player(Avatar(0, "TestCharacter", PlanetSideEmpire.VS, CharacterSex.Female, 1, CharacterVoice.Voice1)) - guid.register(obj) - guid.register(obj.Slot(5).Equipment.get) - obj.Zone = zone - obj.Release - val subscriber = new TestProbe(system) - - "AvatarService" should { - "pass Release" in { - expectNoMessage(100 milliseconds) //spacer - - zone.AvatarEvents.tell(Service.Join("test"), subscriber.ref) - assert(zone.Corpses.isEmpty) - zone.Population ! Zone.Corpse.Add(obj) - subscriber.expectNoMessage(200 milliseconds) //spacer - - assert(zone.Corpses.size == 1) - assert(obj.HasGUID) - val guid = obj.GUID - zone.AvatarEvents ! ReleaseEnvelope("test", AvatarAction.Release(obj, zone)) //3+ minutes! - - val reply1 = subscriber.receiveOne(200 milliseconds) - assert(reply1.isInstanceOf[AvatarServiceResponse]) - val reply1msg = reply1.asInstanceOf[AvatarServiceResponse] - assert(reply1msg.channel == "/test/Avatar") - assert(reply1msg.filter == guid) - assert(reply1msg.reply.isInstanceOf[AvatarAction.Release]) - assert(reply1msg.reply.asInstanceOf[AvatarAction.Release].player == obj) - - zone.AvatarEvents ! CorpseEnvelope(RemoverActor.HurrySpecific(List(obj), zone)) //IMPORTANT: ONE ENTRY - val reply2 = subscriber.receiveOne(200 milliseconds) - assert(reply2.isInstanceOf[AvatarServiceResponse]) - val reply2msg = reply2.asInstanceOf[AvatarServiceResponse] - assert(reply2msg.channel.equals("/test/Avatar")) - assert(reply2msg.filter == Service.defaultPlayerGUID) - assert(reply2msg.reply.isInstanceOf[ObjectDelete]) - assert(reply2msg.reply.asInstanceOf[ObjectDelete].obj_guid == guid) - - subscriber.expectNoMessage(1 seconds) - assert(zone.Corpses.isEmpty) - assert(!obj.HasGUID) - } - } -} - -class AvatarReleaseEarly2Test extends FreedContextActorTest { - val guid: NumberPoolHub = new NumberPoolHub(new MaxNumberSource(15)) - val zone = new Zone("test", new ZoneMap("test-map"), 0) { - override def SetupNumberPools() : Unit = { } - GUID(guid) - } - zone.init(context) - val obj = Player(Avatar(0, "TestCharacter", PlanetSideEmpire.VS, CharacterSex.Female, 1, CharacterVoice.Voice1)) - guid.register(obj) - guid.register(obj.Slot(5).Equipment.get) - obj.Zone = zone - obj.Release - val objAlt = Player( - Avatar(0, "TestCharacter2", PlanetSideEmpire.NC, CharacterSex.Male, 1, CharacterVoice.Voice1) - ) //necessary clutter - objAlt.GUID = PlanetSideGUID(3) - objAlt.Slot(5).Equipment.get.GUID = PlanetSideGUID(4) - objAlt.Zone = zone - val subscriber = new TestProbe(system) - - "AvatarService" should { - "pass Release" in { - expectNoMessage(100 milliseconds) //spacer - - zone.AvatarEvents.tell(Service.Join("test"), subscriber.ref) - assert(zone.Corpses.isEmpty) - zone.Population ! Zone.Corpse.Add(obj) - subscriber.expectNoMessage(200 milliseconds) //spacer - - assert(zone.Corpses.size == 1) - assert(obj.HasGUID) - val guid = obj.GUID - zone.AvatarEvents ! ReleaseEnvelope("test", AvatarAction.Release(obj, zone)) //3+ minutes! - - val reply1 = subscriber.receiveOne(200 milliseconds) - assert(reply1.isInstanceOf[AvatarServiceResponse]) - val reply1msg = reply1.asInstanceOf[AvatarServiceResponse] - assert(reply1msg.channel == "/test/Avatar") - assert(reply1msg.filter == guid) - assert(reply1msg.reply.isInstanceOf[AvatarAction.Release]) - assert(reply1msg.reply.asInstanceOf[AvatarAction.Release].player == obj) - - zone.AvatarEvents ! CorpseEnvelope( - RemoverActor.HurrySpecific(List(objAlt, obj), zone) - ) //IMPORTANT: TWO ENTRIES - val reply2 = subscriber.receiveOne(100 milliseconds) - assert(reply2.isInstanceOf[AvatarServiceResponse]) - val reply2msg = reply2.asInstanceOf[AvatarServiceResponse] - assert(reply2msg.channel.equals("/test/Avatar")) - assert(reply2msg.filter == Service.defaultPlayerGUID) - assert(reply2msg.reply.isInstanceOf[AvatarAction.ObjectDelete]) - assert(reply2msg.reply.asInstanceOf[AvatarAction.ObjectDelete].item_guid == guid) - - subscriber.expectNoMessage(1 seconds) - assert(zone.Corpses.isEmpty) - assert(!obj.HasGUID) - } - } -} - -object AvatarServiceTest { - import java.util.concurrent.atomic.AtomicInteger - private val number = new AtomicInteger(1) - - def TestName: String = { - s"service${number.getAndIncrement()}" - } -} diff --git a/src/main/scala/net/psforever/actors/session/AvatarActor.scala b/src/main/scala/net/psforever/actors/session/AvatarActor.scala index 14d3b827e..96113546a 100644 --- a/src/main/scala/net/psforever/actors/session/AvatarActor.scala +++ b/src/main/scala/net/psforever/actors/session/AvatarActor.scala @@ -48,8 +48,9 @@ import net.psforever.objects.vital.{DamagingActivity, HealFromImplant, HealingAc import net.psforever.packet.game.objectcreate.{BasicCharacterData, ObjectClass, RibbonBars} import net.psforever.packet.game.{Friend => GameFriend, _} import net.psforever.persistence +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.services.base.message.{SendResponse, PlanetsideAttribute} -import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage} +import net.psforever.services.avatar.AvatarAction import net.psforever.types.{ CharacterSex, CharacterVoice, @@ -584,7 +585,7 @@ object AvatarActor { def displayLookingForSquad(session: Session, state: Int): Unit = { val player = session.player - session.zone.AvatarEvents ! AvatarServiceMessage( + session.zone.AvatarEvents ! MessageEnvelope( player.Faction.toString, player.GUID, PlanetsideAttribute(player.GUID, 53, state) @@ -1383,7 +1384,7 @@ class AvatarActor( case SetLookingForSquad(lfs) => avatarCopy(avatar.copy(lookingForSquad = lfs)) sessionActor ! SessionActor.SendResponse(PlanetsideAttributeMessage(session.get.player.GUID, 53, 0)) - session.get.zone.AvatarEvents ! AvatarServiceMessage( + session.get.zone.AvatarEvents ! MessageEnvelope( avatar.faction.toString, session.get.player.GUID, PlanetsideAttribute(session.get.player.GUID, 53, if (lfs) 1 else 0) @@ -1795,7 +1796,7 @@ class AvatarActor( ) val player = session.get.player val zone = player.Zone - zone.AvatarEvents ! AvatarServiceMessage( + zone.AvatarEvents ! MessageEnvelope( zone.id, SendResponse(DisplayedAwardMessage(player.GUID, ribbon, bar)) ) @@ -2074,7 +2075,7 @@ class AvatarActor( case Success(_) => val zone = session.get.zone avatarCopy(avatar.copy(decoration = avatar.decoration.copy(cosmetics = Some(cosmetics)))) - zone.AvatarEvents ! AvatarServiceMessage( + zone.AvatarEvents ! MessageEnvelope( zone.id, PlanetsideAttribute( session.get.player.GUID, @@ -3001,13 +3002,13 @@ class AvatarActor( val next = BattleRank.withExperience(newBep).value val br24 = BattleRank.BR24.value sessionActor ! SessionActor.SendResponse(BattleExperienceMessage(pguid, newBep, localModifier)) - events ! AvatarServiceMessage(zoneId, PlanetsideAttribute(pguid, 17, newBep)) + events ! MessageEnvelope(zoneId, PlanetsideAttribute(pguid, 17, newBep)) if (current < br24 && next >= br24 || current >= br24 && next < br24) { setCosmetics(Set()).onComplete { _ => val evts = events val name = player.Name val guid = pguid - evts ! AvatarServiceMessage(name, PlanetsideAttribute(guid, 106, 1)) //set to no helmet + evts ! MessageEnvelope(name, PlanetsideAttribute(guid, 106, 1)) //set to no helmet } } // when the level is reduced, take away any implants over the implant slot limit @@ -3052,7 +3053,7 @@ class AvatarActor( val sess = session.get val zone = sess.zone avatar = avatar.copy(cep = cep) - zone.AvatarEvents ! AvatarServiceMessage(zone.id, PlanetsideAttribute(sess.player.GUID, 18, cep)) + zone.AvatarEvents ! MessageEnvelope(zone.id, PlanetsideAttribute(sess.player.GUID, 18, cep)) case Failure(exception) => log.error(exception)("db failure") } @@ -3150,7 +3151,7 @@ class AvatarActor( if (exp > 0L) { setBep(exp, msg) zone.actor ! ZoneActor.RewardOurSupporters(playerSource, historyTranscript, killStat, exp) - zone.AvatarEvents ! AvatarServiceMessage( + zone.AvatarEvents ! MessageEnvelope( player.Name, AvatarAction.ShareKillExperienceWithSquad(player, exp)) } } @@ -3161,7 +3162,7 @@ class AvatarActor( val _session = session.get val zone = _session.zone val player = _session.player - zone.AvatarEvents ! AvatarServiceMessage( + zone.AvatarEvents ! MessageEnvelope( player.Name, SendResponse(AvatarStatisticsMessage(DeathStatistic(ScoreCard.deathCount(avatar.scorecard)))) ) @@ -3649,7 +3650,7 @@ class AvatarActor( // Start client-side initialization timer, visible on the character screen // Progress accumulates according to the client's knowledge of the implant initialization time // What is normally a 60s timer that is set to 120s on the server will still visually update as if 60s - session.get.zone.AvatarEvents ! AvatarServiceMessage( + session.get.zone.AvatarEvents ! MessageEnvelope( avatar.name, SendResponse(ActionProgressMessage(slot + 6, actionProgress)) ) @@ -3698,7 +3699,7 @@ class AvatarActor( def stopImplantInitializationTimer(implant: Implant, slot: Int): Implant = { cancelImplantInitializedTimer(slot) //can not formally stop the initialization time on the character information window; set it to 100 to make it look blank - session.get.zone.AvatarEvents ! AvatarServiceMessage( + session.get.zone.AvatarEvents ! MessageEnvelope( avatar.name, SendResponse(ActionProgressMessage(slot + 6, 100)) ) @@ -3768,7 +3769,7 @@ class AvatarActor( private def deactivateImplant(implant: Implant, slot: Int): Implant = { cancelImplantInitializedTimer(slot) // Deactivation sound / effect - session.get.zone.AvatarEvents ! AvatarServiceMessage( + session.get.zone.AvatarEvents ! MessageEnvelope( session.get.zone.id, session.get.player.GUID, PlanetsideAttribute(session.get.player.GUID, 28, implant.definition.implantType.value * 2) @@ -3848,7 +3849,7 @@ class AvatarActor( val newHealth = player.Health = originalHealth + 1 val events = zone.AvatarEvents player.LogActivity(HealFromImplant(implant.definition.implantType, 1)) - events ! AvatarServiceMessage(zone.id, PlanetsideAttribute(guid, 0, newHealth)) + events ! MessageEnvelope(zone.id, PlanetsideAttribute(guid, 0, newHealth)) false } else { !aliveAndWounded @@ -3860,7 +3861,7 @@ class AvatarActor( // Activation sound / effect val sess = session.get val zone = sess.zone - zone.AvatarEvents ! AvatarServiceMessage( + zone.AvatarEvents ! MessageEnvelope( zone.id, sess.player.GUID, PlanetsideAttribute( @@ -3886,7 +3887,7 @@ class AvatarActor( case (implantOpt @ Some(implant), slot) => //update ongoing progress val actionProgress = calculateImplantTimerStats(implant, AvatarActor.initializationTime(implant))._3 - session.get.zone.AvatarEvents ! AvatarServiceMessage( + session.get.zone.AvatarEvents ! MessageEnvelope( avatar.name, SendResponse(ActionProgressMessage(slot + 6, actionProgress)) ) diff --git a/src/main/scala/net/psforever/actors/session/csr/ChatLogic.scala b/src/main/scala/net/psforever/actors/session/csr/ChatLogic.scala index eb02a7a29..71b67bf80 100644 --- a/src/main/scala/net/psforever/actors/session/csr/ChatLogic.scala +++ b/src/main/scala/net/psforever/actors/session/csr/ChatLogic.scala @@ -16,7 +16,8 @@ import net.psforever.objects.serverobject.structures.Building import net.psforever.objects.zones.Zone import net.psforever.packet.game.{ChatMsg, SetChatFilterMessage} import net.psforever.services.Service -import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage} +import net.psforever.services.avatar.AvatarAction +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.services.base.message.{ObjectDelete, SetEmpire} import net.psforever.services.chat.{ChatChannel, DefaultChannel, SpectatorChannel, SquadChannel} import net.psforever.types.ChatMessageType.{CMT_TOGGLESPECTATORMODE, CMT_TOGGLE_GM} @@ -319,7 +320,7 @@ class ChatLogic(val ops: ChatOperations, implicit val context: ActorContext) ext .foreach { spectator => val guid = spectator.GUID val definition = spectator.Definition - events ! AvatarServiceMessage( + events ! MessageEnvelope( channel, guid, AvatarAction.LoadPlayer(definition.ObjectId, guid, definition.Packet.ConstructorData(spectator).get, None) @@ -338,7 +339,7 @@ class ChatLogic(val ops: ChatOperations, implicit val context: ActorContext) ext .filter(_.spectator) .foreach { spectator => val guid = spectator.GUID - events ! AvatarServiceMessage(channel, guid, ObjectDelete(guid)) + events ! MessageEnvelope(channel, guid, ObjectDelete(guid)) } true } @@ -391,7 +392,7 @@ class ChatLogic(val ops: ChatOperations, implicit val context: ActorContext) ext true case o: Deployable => o.Faction = foundFaction - continent.AvatarEvents ! AvatarServiceMessage( + continent.AvatarEvents ! MessageEnvelope( continent.id, SetEmpire(o.GUID, foundFaction) ) @@ -404,7 +405,7 @@ class ChatLogic(val ops: ChatOperations, implicit val context: ActorContext) ext true case o: PlanetSideGameObject with FactionAffinity => o.Faction = foundFaction - continent.AvatarEvents ! AvatarServiceMessage( + continent.AvatarEvents ! MessageEnvelope( continent.id, SetEmpire(o.GUID, foundFaction) ) @@ -511,7 +512,7 @@ class ChatLogic(val ops: ChatOperations, implicit val context: ActorContext) ext .foreach { case (_, false, _) => () case (faction, true, _) => - //events ! AvatarServiceMessage(s"$faction", reloadZoneMsg) + //events ! MessageEnvelope(s"$faction", reloadZoneMsg) } } } diff --git a/src/main/scala/net/psforever/actors/session/csr/CustomerServiceRepresentativeMode.scala b/src/main/scala/net/psforever/actors/session/csr/CustomerServiceRepresentativeMode.scala index e8a15ba1f..0ab1782fc 100644 --- a/src/main/scala/net/psforever/actors/session/csr/CustomerServiceRepresentativeMode.scala +++ b/src/main/scala/net/psforever/actors/session/csr/CustomerServiceRepresentativeMode.scala @@ -10,10 +10,10 @@ import net.psforever.objects.vital.Vitality import net.psforever.objects.zones.Zone import net.psforever.packet.game.{ChatMsg, ObjectCreateDetailedMessage, PlanetsideAttributeMessage} import net.psforever.packet.game.objectcreate.RibbonBars -import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage} +import net.psforever.services.avatar.AvatarAction +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.services.base.message.PlanetsideAttribute import net.psforever.services.chat.{CustomerServiceChannel, SpectatorChannel} -import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage} import net.psforever.types.{ChatMessageType, MeritCommendation, PlanetSideGUID} class CustomerServiceRepresentativeMode(data: SessionData) extends ModeLogic { @@ -149,7 +149,7 @@ case object CustomerServiceRepresentativeMode extends PlayerMode { packet.DetailedConstructorData(player).get )) data.zoning.spawn.HandleSetCurrentAvatar(player) - zone.AvatarEvents ! AvatarServiceMessage( + zone.AvatarEvents ! MessageEnvelope( zone.id, pguid, AvatarAction.LoadPlayer( @@ -182,14 +182,14 @@ case object CustomerServiceRepresentativeMode extends PlayerMode { player.Health = maxHealthOfPlayer.toInt player.LogActivity(player.ClearHistory().head) data.sendResponse(PlanetsideAttributeMessage(guid, 0, maxHealthOfPlayer)) - data.continent.AvatarEvents ! AvatarServiceMessage(zoneid, PlanetsideAttribute(guid, 0, maxHealthOfPlayer)) + data.continent.AvatarEvents ! MessageEnvelope(zoneid, PlanetsideAttribute(guid, 0, maxHealthOfPlayer)) } //below half armor, full armor val maxArmor = player.MaxArmor.toLong if (player.Armor < maxArmor) { player.Armor = maxArmor.toInt data.sendResponse(PlanetsideAttributeMessage(guid, 4, maxArmor)) - data.continent.AvatarEvents ! AvatarServiceMessage(zoneid, PlanetsideAttribute(guid, 4, maxArmor)) + data.continent.AvatarEvents ! MessageEnvelope(zoneid, PlanetsideAttribute(guid, 4, maxArmor)) } } @@ -202,7 +202,7 @@ case object CustomerServiceRepresentativeMode extends PlayerMode { val guid = vehicle.GUID vehicle.Shields = maxShieldsOfVehicle.toInt data.sendResponse(PlanetsideAttributeMessage(guid, shieldsUi, maxShieldsOfVehicle)) - data.continent.VehicleEvents ! VehicleServiceMessage( + data.continent.VehicleEvents ! MessageEnvelope( data.continent.id, PlanetsideAttribute(guid, shieldsUi, maxShieldsOfVehicle) ) @@ -216,7 +216,7 @@ case object CustomerServiceRepresentativeMode extends PlayerMode { if (obj.Health < maxHealthOf) { obj.Health = maxHealthOf.toInt data.sendResponse(PlanetsideAttributeMessage(guid, 0, maxHealthOf)) - data.continent.VehicleEvents ! VehicleServiceMessage( + data.continent.VehicleEvents ! MessageEnvelope( data.continent.id, PlanetsideAttribute(guid, 0, maxHealthOf) ) diff --git a/src/main/scala/net/psforever/actors/session/csr/GeneralLogic.scala b/src/main/scala/net/psforever/actors/session/csr/GeneralLogic.scala index 8d19e2ee2..b795a07b4 100644 --- a/src/main/scala/net/psforever/actors/session/csr/GeneralLogic.scala +++ b/src/main/scala/net/psforever/actors/session/csr/GeneralLogic.scala @@ -33,10 +33,11 @@ import net.psforever.objects.zones.{ZoneProjectile, Zoning} import net.psforever.packet.PlanetSideGamePacket import net.psforever.packet.game.OutfitEventAction.{Initial, OutfitInfo, OutfitRankNames, Unk1} import net.psforever.packet.game.{ActionCancelMessage, AvatarFirstTimeEventMessage, AvatarImplantMessage, AvatarJumpMessage, BattleplanMessage, BindPlayerMessage, BugReportMessage, ChangeFireModeMessage, ChangeShortcutBankMessage, CharacterCreateRequestMessage, CharacterRequestMessage, ChatMsg, CollisionIs, ConnectToWorldRequestMessage, CreateShortcutMessage, DeadState, DeployObjectMessage, DisplayedAwardMessage, DropItemMessage, EmoteMsg, FacilityBenefitShieldChargeRequestMessage, FriendsRequest, GenericAction, GenericActionMessage, GenericCollisionMsg, GenericObjectActionAtPositionMessage, GenericObjectActionMessage, GenericObjectStateMsg, HitHint, InvalidTerrainMessage, LootItemMessage, MoveItemMessage, ObjectDetectedMessage, ObjectHeldMessage, OutfitEvent, OutfitMemberEvent, OutfitMembershipRequest, OutfitMembershipResponse, OutfitRequest, OutfitRequestAction, PickupItemMessage, PlanetsideAttributeMessage, PlayerStateMessageUpstream, RequestDestroyMessage, TargetingImplantRequest, TerrainCondition, TradeMessage, UnuseItemMessage, UseItemMessage, VoiceHostInfo, VoiceHostRequest, ZipLineMessage} -import net.psforever.services.RemoverActor import net.psforever.services.avatar.support.CorpseEnvelope -import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage} +import net.psforever.services.avatar.AvatarAction +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.services.base.message.PlanetsideAttribute +import net.psforever.services.base.support.RemoverActor import net.psforever.types.{CapacitorStateType, ChatMessageType, Cosmetic, ExoSuitType, PlanetSideEmpire, PlanetSideGUID, Vector3} import scala.concurrent.duration._ @@ -133,7 +134,7 @@ class GeneralLogic(val ops: GeneralOperations, implicit val context: ActorContex val eagleEye: Boolean = ops.canSeeReallyFar val isNotVisible: Boolean = sessionLogic.zoning.zoningStatus == Zoning.Status.Deconstructing || (player.isAlive && sessionLogic.zoning.spawn.deadState == DeadState.RespawnTime) - continent.AvatarEvents ! AvatarServiceMessage( + continent.AvatarEvents ! MessageEnvelope( channel, avatarGuid, AvatarAction.PlayerState( @@ -433,7 +434,7 @@ class GeneralLogic(val ops: GeneralOperations, implicit val context: ActorContex ops.dropSpecialSlotItem() case GenericAction.MaxAnchorsExtend_RCV => player.UsingSpecial = SpecialExoSuitDefinition.Mode.Anchored - continent.AvatarEvents ! AvatarServiceMessage( + continent.AvatarEvents ! MessageEnvelope( continent.id, player.GUID, PlanetsideAttribute(player.GUID, 19, 1) @@ -454,7 +455,7 @@ class GeneralLogic(val ops: GeneralOperations, implicit val context: ActorContex } case GenericAction.MaxAnchorsRelease_RCV => player.UsingSpecial = SpecialExoSuitDefinition.Mode.Normal - continent.AvatarEvents ! AvatarServiceMessage( + continent.AvatarEvents ! MessageEnvelope( continent.id, player.GUID, PlanetsideAttribute(player.GUID, 19, 0) diff --git a/src/main/scala/net/psforever/actors/session/csr/MountHandlerLogic.scala b/src/main/scala/net/psforever/actors/session/csr/MountHandlerLogic.scala index 1527495ba..255930467 100644 --- a/src/main/scala/net/psforever/actors/session/csr/MountHandlerLogic.scala +++ b/src/main/scala/net/psforever/actors/session/csr/MountHandlerLogic.scala @@ -15,9 +15,9 @@ import net.psforever.objects.serverobject.turret.{FacilityTurret, WeaponTurret} import net.psforever.objects.vehicles.AccessPermissionGroup import net.psforever.objects.vital.InGameHistory import net.psforever.packet.game.{ChatMsg, DelayedPathMountMsg, DismountVehicleCargoMsg, DismountVehicleMsg, GenericObjectActionMessage, MountVehicleCargoMsg, MountVehicleMsg, ObjectDetachMessage, PlanetsideAttributeMessage, PlayerStasisMessage, PlayerStateShiftMessage, ShiftState} +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.services.base.message.{SendResponse, SetEmpire} -import net.psforever.services.local.LocalServiceMessage -import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage} +import net.psforever.services.vehicle.VehicleAction import net.psforever.types.{BailType, ChatMessageType, DriveState, PlanetSideGUID, Vector3} object MountHandlerLogic { @@ -160,7 +160,7 @@ class MountHandlerLogic(val ops: SessionMountHandlers, implicit val context: Act case Mountable.CanMount(obj: FacilityTurret, seatNumber, _) if obj.Definition == GlobalDefinitions.vanu_sentry_turret => sessionLogic.zoning.CancelZoningProcess() - obj.Zone.LocalEvents ! LocalServiceMessage(obj.Zone.id, SetEmpire(obj.GUID, player.Faction)) + obj.Zone.LocalEvents ! MessageEnvelope(obj.Zone.id, SetEmpire(obj.GUID, player.Faction)) sendResponse(PlanetsideAttributeMessage(obj.GUID, attribute_type=0, obj.Health)) ops.updateWeaponAtSeatPosition(obj, seatNumber) ops.MountingAction(tplayer, obj, seatNumber) @@ -199,7 +199,7 @@ class MountHandlerLogic(val ops: SessionMountHandlers, implicit val context: Act val (pos, zang) = Vehicles.dismountShuttle(obj, mountPoint) tplayer.Position = pos sendResponse(DelayedPathMountMsg(pguid, sguid, u1=60, u2=true)) - continent.LocalEvents ! LocalServiceMessage( + continent.LocalEvents ! MessageEnvelope( continent.id, SendResponse(ObjectDetachMessage(sguid, pguid, pos, roll=0, pitch=0, zang)) ) @@ -213,7 +213,7 @@ class MountHandlerLogic(val ops: SessionMountHandlers, implicit val context: Act ops.DismountAction(tplayer, obj, seatNum) continent.actor ! ZoneActor.RemoveFromBlockMap(player) //character doesn't need it //DismountAction(...) uses vehicle service, so use that service to coordinate the remainder of the messages - events ! VehicleServiceMessage( + events ! MessageEnvelope( player.Name, SendResponse(PlayerStasisMessage(pguid)) //the stasis message ) @@ -221,11 +221,11 @@ class MountHandlerLogic(val ops: SessionMountHandlers, implicit val context: Act //the player will fall to the ground and is perfectly vulnerable in this state //additionally, our player must exist in the current zone //having no in-game avatar target will throw us out of the map screen when deploying and cause softlock - events ! VehicleServiceMessage( + events ! MessageEnvelope( player.Name, SendResponse(PlayerStateShiftMessage(ShiftState(unk=0, obj.Position, obj.Orientation.z, vel=None))) ) - events ! VehicleServiceMessage( + events ! MessageEnvelope( continent.id, pguid, SendResponse(GenericObjectActionMessage(pguid, code=9)) //conceal the player @@ -254,7 +254,7 @@ class MountHandlerLogic(val ops: SessionMountHandlers, implicit val context: Act ops.DismountVehicleAction(tplayer, obj, seatNum) case Mountable.CanDismount(obj: Vehicle, seat_num, _) => - continent.VehicleEvents ! VehicleServiceMessage( + continent.VehicleEvents ! MessageEnvelope( continent.id, tplayer.GUID, VehicleAction.KickPassenger(seat_num, unk2=true, obj.GUID) diff --git a/src/main/scala/net/psforever/actors/session/csr/SpectateAsCustomerServiceRepresentativeMode.scala b/src/main/scala/net/psforever/actors/session/csr/SpectateAsCustomerServiceRepresentativeMode.scala index c5d4eee32..9e6510812 100644 --- a/src/main/scala/net/psforever/actors/session/csr/SpectateAsCustomerServiceRepresentativeMode.scala +++ b/src/main/scala/net/psforever/actors/session/csr/SpectateAsCustomerServiceRepresentativeMode.scala @@ -7,7 +7,8 @@ import net.psforever.objects.serverobject.mount.Mountable import net.psforever.objects.{Player, Session, Vehicle} import net.psforever.objects.zones.Zone import net.psforever.packet.PlanetSidePacket -import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage} +import net.psforever.services.avatar.AvatarAction +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.services.base.message.ObjectDelete import net.psforever.services.chat.SpectatorChannel import net.psforever.services.teamwork.{SquadAction, SquadServiceMessage} @@ -46,7 +47,7 @@ class SpectatorCSRModeLogic(data: SessionData) extends ModeLogic { // player.spectator = true data.chat.JoinChannel(SpectatorChannel) - continent.AvatarEvents ! AvatarServiceMessage(continent.id, pguid, ObjectDelete(pguid)) + continent.AvatarEvents ! MessageEnvelope(continent.id, pguid, ObjectDelete(pguid)) sendResponse(ChatMsg(ChatMessageType.CMT_TOGGLESPECTATORMODE, "on")) sendResponse(ChatMsg(ChatMessageType.UNK_225, "CSR SPECTATOR MODE ON")) } @@ -60,7 +61,7 @@ class SpectatorCSRModeLogic(data: SessionData) extends ModeLogic { // player.spectator = false data.chat.LeaveChannel(SpectatorChannel) - continent.AvatarEvents ! AvatarServiceMessage( + continent.AvatarEvents ! MessageEnvelope( continent.id, pguid, AvatarAction.LoadPlayer(avatarId, pguid, player.Definition.Packet.ConstructorData(player).get, None) diff --git a/src/main/scala/net/psforever/actors/session/csr/VehicleLogic.scala b/src/main/scala/net/psforever/actors/session/csr/VehicleLogic.scala index e345d40d6..f49f3ad01 100644 --- a/src/main/scala/net/psforever/actors/session/csr/VehicleLogic.scala +++ b/src/main/scala/net/psforever/actors/session/csr/VehicleLogic.scala @@ -13,7 +13,8 @@ import net.psforever.objects.zones.Zone import net.psforever.objects.zones.interaction.InteractsWithZone import net.psforever.packet.game.{ChildObjectStateMessage, DeployRequestMessage, FrameVehicleStateMessage, VehicleStateMessage, VehicleSubStateMessage} import net.psforever.services.base.CachedEnvelope -import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage} +import net.psforever.services.vehicle.VehicleAction +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.types.{DriveState, Vector3} object VehicleLogic { @@ -77,7 +78,7 @@ class VehicleLogic(val ops: VehicleOperations, implicit val context: ActorContex obj.Position = position obj.Orientation = angle // - continent.VehicleEvents ! VehicleServiceMessage( + continent.VehicleEvents ! MessageEnvelope( continent.id, player.GUID, VehicleAction.VehicleState( @@ -165,7 +166,7 @@ class VehicleLogic(val ops: VehicleOperations, implicit val context: ActorContex obj.Position = position obj.Orientation = angle obj.DeploymentState = if (is_crouched || !notMountedState) DriveState.Kneeling else DriveState.Mobile - continent.VehicleEvents ! VehicleServiceMessage( + continent.VehicleEvents ! MessageEnvelope( continent.id, player.GUID, VehicleAction.FrameVehicleState(vehicle_guid, unk1, position, angle, velocity, unk2, unk3, unk4, is_crouched, is_airborne, ascending_flight, flight_time, unk9, unkA) @@ -220,7 +221,7 @@ class VehicleLogic(val ops: VehicleOperations, implicit val context: ActorContex val angle = Vector3(0f, pitch, yaw) tool.Orientation = angle player.Orientation = angle - continent.VehicleEvents ! VehicleServiceMessage( + continent.VehicleEvents ! MessageEnvelope( continent.id, player.GUID, VehicleAction.ChildObjectState(object_guid, pitch, yaw) @@ -303,7 +304,7 @@ class VehicleLogic(val ops: VehicleOperations, implicit val context: ActorContex if (obj.DeploymentState != DriveState.Mobile) { obj.DeploymentState = DriveState.Mobile sendResponse(DeployRequestMessage(player.GUID, obj.GUID, DriveState.Mobile, 0, unk3=false, Vector3.Zero)) - continent.VehicleEvents ! VehicleServiceMessage( + continent.VehicleEvents ! MessageEnvelope( continent.id, player.GUID, VehicleAction.DeployRequest(obj.GUID, DriveState.Mobile, 0, unk2=false, Vector3.Zero) diff --git a/src/main/scala/net/psforever/actors/session/normal/AvatarHandlerLogic.scala b/src/main/scala/net/psforever/actors/session/normal/AvatarHandlerLogic.scala index 2fcfe4f3f..b5f188066 100644 --- a/src/main/scala/net/psforever/actors/session/normal/AvatarHandlerLogic.scala +++ b/src/main/scala/net/psforever/actors/session/normal/AvatarHandlerLogic.scala @@ -12,7 +12,8 @@ import net.psforever.objects.sourcing.PlayerSource import net.psforever.objects.vital.RevivingActivity import net.psforever.objects.vital.interaction.Adversarial import net.psforever.packet.game.{AvatarImplantMessage, CreateShortcutMessage, ImplantAction, PlanetsideStringAttributeMessage} -import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage} +import net.psforever.services.avatar.AvatarAction +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.services.base.message.{ChangeAmmo, ChangeFireState_Start, ChangeFireState_Stop, ConcealPlayer, EventResponse, GenericObjectAction, HintsAtAttacker, ObjectDelete, PlanetsideAttribute, ReloadTool, SendResponse, SetEmpire, WeaponDryFire} import net.psforever.types.ImplantType @@ -506,12 +507,12 @@ class AvatarHandlerLogic(val ops: SessionAvatarHandlers, implicit val context: A }.flatten } match { case Some(adversarial) => - events ! AvatarServiceMessage( + events ! MessageEnvelope( zoneChannel, AvatarAction.DestroyDisplay(adversarial.attacker, pentry, adversarial.implement) ) case _ => - events ! AvatarServiceMessage(zoneChannel, AvatarAction.DestroyDisplay(pentry, pentry, 0)) + events ! MessageEnvelope(zoneChannel, AvatarAction.DestroyDisplay(pentry, pentry, 0)) } //events chat and log val excuse = player.LastDamage.flatMap { damage => @@ -689,8 +690,8 @@ class AvatarHandlerLogic(val ops: SessionAvatarHandlers, implicit val context: A val events = continent.AvatarEvents ops.killedWhileMounted(obj, playerGuid) //make player invisible on client - events ! AvatarServiceMessage(player.Name, PlanetsideAttribute(playerGuid, 29, 1)) + events ! MessageEnvelope(player.Name, PlanetsideAttribute(playerGuid, 29, 1)) //only the dead player should "see" their own body, so that the death camera has something to focus on - events ! AvatarServiceMessage(continent.id, playerGuid, ObjectDelete(playerGuid)) + events ! MessageEnvelope(continent.id, playerGuid, ObjectDelete(playerGuid)) } } diff --git a/src/main/scala/net/psforever/actors/session/normal/GalaxyHandlerLogic.scala b/src/main/scala/net/psforever/actors/session/normal/GalaxyHandlerLogic.scala index d3980e8ba..6e87ee521 100644 --- a/src/main/scala/net/psforever/actors/session/normal/GalaxyHandlerLogic.scala +++ b/src/main/scala/net/psforever/actors/session/normal/GalaxyHandlerLogic.scala @@ -5,8 +5,9 @@ import akka.actor.{ActorContext, ActorRef, typed} import net.psforever.actors.session.AvatarActor import net.psforever.actors.session.support.{GalaxyHandlerFunctions, SessionData, SessionGalaxyHandlers} import net.psforever.packet.game.{BroadcastWarpgateUpdateMessage, FriendsResponse, HotSpotUpdateMessage, ZoneInfoMessage, ZonePopulationUpdateMessage, HotSpotInfo => PacketHotSpotInfo} +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.services.base.message.{EventResponse, SendResponse} -import net.psforever.services.galaxy.{GalaxyAction, GalaxyServiceMessage} +import net.psforever.services.galaxy.GalaxyAction import net.psforever.types.{MemberAction, PlanetSideEmpire} object GalaxyHandlerLogic { @@ -27,7 +28,7 @@ class GalaxyHandlerLogic(val ops: SessionGalaxyHandlers, implicit val context: A def handleUpdateIgnoredPlayers(pkt: FriendsResponse): Unit = { sendResponse(pkt) pkt.friends.foreach { f => - galaxyService ! GalaxyServiceMessage(GalaxyAction.LogStatusChange(f.name)) + galaxyService ! MessageEnvelope("", GalaxyAction.LogStatusChange(f.name)) } } diff --git a/src/main/scala/net/psforever/actors/session/normal/GeneralLogic.scala b/src/main/scala/net/psforever/actors/session/normal/GeneralLogic.scala index e0495c652..4227b15aa 100644 --- a/src/main/scala/net/psforever/actors/session/normal/GeneralLogic.scala +++ b/src/main/scala/net/psforever/actors/session/normal/GeneralLogic.scala @@ -42,8 +42,9 @@ import net.psforever.objects.zones.{ZoneProjectile, Zoning} import net.psforever.packet.PlanetSideGamePacket import net.psforever.packet.game.{ActionCancelMessage, ActionResultMessage, AvatarFirstTimeEventMessage, AvatarImplantMessage, AvatarJumpMessage, BattleplanMessage, BindPlayerMessage, BugReportMessage, ChangeFireModeMessage, ChangeShortcutBankMessage, CharacterCreateRequestMessage, CharacterRequestAction, CharacterRequestMessage, ChatMsg, CollisionIs, ConnectToWorldRequestMessage, CreateShortcutMessage, DeadState, DeployObjectMessage, DisplayedAwardMessage, DropItemMessage, EmoteMsg, FacilityBenefitShieldChargeRequestMessage, FriendsRequest, GenericAction, GenericActionMessage, GenericCollisionMsg, GenericObjectActionAtPositionMessage, GenericObjectActionMessage, GenericObjectStateMsg, HitHint, InvalidTerrainMessage, LootItemMessage, MoveItemMessage, ObjectDetectedMessage, ObjectHeldMessage, OutfitMembershipRequest, OutfitMembershipRequestAction, OutfitMembershipResponse, OutfitRequest, OutfitRequestAction, PickupItemMessage, PlanetsideAttributeMessage, PlayerStateMessageUpstream, RequestDestroyMessage, TargetingImplantRequest, TerrainCondition, TradeMessage, UnuseItemMessage, UseItemMessage, VoiceHostInfo, VoiceHostRequest, ZipLineMessage} import net.psforever.services.account.{AccountPersistenceService, RetrieveAccountData} -import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage} +import net.psforever.services.avatar.AvatarAction import net.psforever.services.base.CachedEnvelope +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.services.base.message.PlanetsideAttribute import net.psforever.services.local.support.CaptureFlagManager import net.psforever.types.{CapacitorStateType, ChatMessageType, Cosmetic, ExoSuitType, ImplantType, PlanetSideEmpire, PlanetSideGUID, Vector3} @@ -180,7 +181,7 @@ class GeneralLogic(val ops: GeneralOperations, implicit val context: ActorContex case _ => false }) - continent.AvatarEvents ! AvatarServiceMessage( + continent.AvatarEvents ! MessageEnvelope( continent.id, avatarGuid, AvatarAction.PlayerState( @@ -519,7 +520,7 @@ class GeneralLogic(val ops: GeneralOperations, implicit val context: ActorContex case GenericAction.MaxAnchorsExtend_RCV => log.info(s"${player.Name} has anchored ${player.Sex.pronounObject}self to the ground") player.UsingSpecial = SpecialExoSuitDefinition.Mode.Anchored - continent.AvatarEvents ! AvatarServiceMessage( + continent.AvatarEvents ! MessageEnvelope( continent.id, player.GUID, PlanetsideAttribute(player.GUID, 19, 1) @@ -541,7 +542,7 @@ class GeneralLogic(val ops: GeneralOperations, implicit val context: ActorContex case GenericAction.MaxAnchorsRelease_RCV => log.info(s"${player.Name} has released the anchors") player.UsingSpecial = SpecialExoSuitDefinition.Mode.Normal - continent.AvatarEvents ! AvatarServiceMessage( + continent.AvatarEvents ! MessageEnvelope( continent.id, player.GUID, PlanetsideAttribute(player.GUID, 19, 0) diff --git a/src/main/scala/net/psforever/actors/session/normal/MountHandlerLogic.scala b/src/main/scala/net/psforever/actors/session/normal/MountHandlerLogic.scala index c17a7a884..4efc44ecd 100644 --- a/src/main/scala/net/psforever/actors/session/normal/MountHandlerLogic.scala +++ b/src/main/scala/net/psforever/actors/session/normal/MountHandlerLogic.scala @@ -16,9 +16,9 @@ import net.psforever.objects.serverobject.turret.{FacilityTurret, WeaponTurret} import net.psforever.objects.vehicles.AccessPermissionGroup import net.psforever.objects.vital.InGameHistory import net.psforever.packet.game.{ChatMsg, DelayedPathMountMsg, DismountVehicleCargoMsg, DismountVehicleMsg, GenericObjectActionMessage, MountVehicleCargoMsg, MountVehicleMsg, ObjectDetachMessage, PlanetsideAttributeMessage, PlayerStasisMessage, PlayerStateShiftMessage, ShiftState} +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.services.base.message.{SendResponse, SetEmpire} -import net.psforever.services.local.LocalServiceMessage -import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage} +import net.psforever.services.vehicle.VehicleAction import net.psforever.types.{BailType, ChatMessageType, DriveState, PlanetSideGUID, Vector3} object MountHandlerLogic { @@ -191,7 +191,7 @@ class MountHandlerLogic(val ops: SessionMountHandlers, implicit val context: Act if obj.Definition == GlobalDefinitions.vanu_sentry_turret => log.info(s"${player.Name} mounts the ${obj.Definition.Name}") sessionLogic.zoning.CancelZoningProcessWithDescriptiveReason("cancel_mount") - obj.Zone.LocalEvents ! LocalServiceMessage(obj.Zone.id, SetEmpire(obj.GUID, player.Faction)) + obj.Zone.LocalEvents ! MessageEnvelope(obj.Zone.id, SetEmpire(obj.GUID, player.Faction)) sendResponse(PlanetsideAttributeMessage(obj.GUID, attribute_type=0, obj.Health)) ops.updateWeaponAtSeatPosition(obj, seatNumber) ops.MountingAction(tplayer, obj, seatNumber) @@ -234,7 +234,7 @@ class MountHandlerLogic(val ops: SessionMountHandlers, implicit val context: Act val (pos, zang) = Vehicles.dismountShuttle(obj, mountPoint) tplayer.Position = pos sendResponse(DelayedPathMountMsg(pguid, sguid, u1=60, u2=true)) - continent.LocalEvents ! LocalServiceMessage( + continent.LocalEvents ! MessageEnvelope( continent.id, SendResponse(ObjectDetachMessage(sguid, pguid, pos, roll=0, pitch=0, zang)) ) @@ -253,11 +253,11 @@ class MountHandlerLogic(val ops: SessionMountHandlers, implicit val context: Act //the player will fall to the ground and is perfectly vulnerable in this state //additionally, our player must exist in the current zone //having no in-game avatar target will throw us out of the map screen when deploying and cause softlock - events ! VehicleServiceMessage(player.Name, SendResponse(Seq( + events ! MessageEnvelope(player.Name, SendResponse(Seq( PlayerStasisMessage(pguid), PlayerStateShiftMessage(ShiftState(unk=0, obj.Position, obj.Orientation.z, vel=None)) ))) - events ! VehicleServiceMessage( + events ! MessageEnvelope( continent.id, pguid, SendResponse(GenericObjectActionMessage(pguid, code=9)) //conceal the player @@ -287,7 +287,7 @@ class MountHandlerLogic(val ops: SessionMountHandlers, implicit val context: Act ops.DismountVehicleAction(tplayer, obj, seatNum) case Mountable.CanDismount(obj: Vehicle, seat_num, _) => - continent.VehicleEvents ! VehicleServiceMessage( + continent.VehicleEvents ! MessageEnvelope( continent.id, tplayer.GUID, VehicleAction.KickPassenger(seat_num, unk2=true, obj.GUID) diff --git a/src/main/scala/net/psforever/actors/session/normal/VehicleLogic.scala b/src/main/scala/net/psforever/actors/session/normal/VehicleLogic.scala index 21827dfbb..ac91bc4ca 100644 --- a/src/main/scala/net/psforever/actors/session/normal/VehicleLogic.scala +++ b/src/main/scala/net/psforever/actors/session/normal/VehicleLogic.scala @@ -13,7 +13,8 @@ import net.psforever.objects.zones.Zone import net.psforever.objects.zones.interaction.InteractsWithZone import net.psforever.packet.game.{ChatMsg, ChildObjectStateMessage, DeployRequestMessage, FrameVehicleStateMessage, VehicleStateMessage, VehicleSubStateMessage} import net.psforever.services.base.CachedEnvelope -import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage} +import net.psforever.services.base.envelope.MessageEnvelope +import net.psforever.services.vehicle.VehicleAction import net.psforever.types.{ChatMessageType, DriveState, Vector3} object VehicleLogic { @@ -321,7 +322,7 @@ class VehicleLogic(val ops: VehicleOperations, implicit val context: ActorContex val mobileShift: String = if (obj.DeploymentState != DriveState.Mobile) { obj.DeploymentState = DriveState.Mobile sendResponse(DeployRequestMessage(player.GUID, obj.GUID, DriveState.Mobile, 0, unk3=false, Vector3.Zero)) - continent.VehicleEvents ! VehicleServiceMessage( + continent.VehicleEvents ! MessageEnvelope( continent.id, player.GUID, VehicleAction.DeployRequest(obj.GUID, DriveState.Mobile, 0, unk2=false, Vector3.Zero) diff --git a/src/main/scala/net/psforever/actors/session/spectator/AvatarHandlerLogic.scala b/src/main/scala/net/psforever/actors/session/spectator/AvatarHandlerLogic.scala index b393c0847..6e4b94518 100644 --- a/src/main/scala/net/psforever/actors/session/spectator/AvatarHandlerLogic.scala +++ b/src/main/scala/net/psforever/actors/session/spectator/AvatarHandlerLogic.scala @@ -8,6 +8,7 @@ import net.psforever.objects.Players import net.psforever.objects.avatar.scoring.Kill import net.psforever.objects.sourcing.PlayerSource import net.psforever.packet.game.{AvatarImplantMessage, ImplantAction} +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.services.base.message.{ChangeAmmo, ChangeFireState_Start, ChangeFireState_Stop, ConcealPlayer, EventResponse, GenericObjectAction, HintsAtAttacker, ObjectDelete, PlanetsideAttribute, ReloadTool, SendResponse, SetEmpire, WeaponDryFire} import scala.concurrent.duration._ @@ -24,7 +25,7 @@ import net.psforever.objects.vital.etc.ExplodingEntityReason import net.psforever.objects.zones.Zoning import net.psforever.packet.game.objectcreate.ObjectCreateMessageParent import net.psforever.packet.game.{ArmorChangedMessage, AvatarDeadStateMessage, ChangeAmmoMessage, ChangeFireModeMessage, ChangeFireStateMessage_Start, ChangeFireStateMessage_Stop, ChatMsg, DeadState, DestroyMessage, DrowningTarget, GenericActionMessage, GenericObjectActionMessage, HitHint, ItemTransactionResultMessage, ObjectCreateDetailedMessage, ObjectCreateMessage, ObjectDeleteMessage, ObjectHeldMessage, OxygenStateMessage, PlanetsideAttributeMessage, PlayerStateMessage, ProjectileStateMessage, ReloadMessage, SetEmpireMessage, UseItemMessage, WeaponDryFireMessage} -import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage} +import net.psforever.services.avatar.AvatarAction import net.psforever.services.Service import net.psforever.types.{ChatMessageType, PlanetSideGUID, TransactionType, Vector3} import net.psforever.util.Config @@ -482,7 +483,7 @@ class AvatarHandlerLogic(val ops: SessionAvatarHandlers, implicit val context: A val health = player.Health sendResponse(PlanetsideAttributeMessage(revivalTargetGuid, attribute_type=0, health)) sendResponse(AvatarDeadStateMessage(DeadState.Alive, timer_max=0, timer=0, player.Position, player.Faction, unk5=true)) - continent.AvatarEvents ! AvatarServiceMessage( + continent.AvatarEvents ! MessageEnvelope( continent.id, PlanetsideAttribute(revivalTargetGuid, attribute_type=0, health) ) diff --git a/src/main/scala/net/psforever/actors/session/spectator/GeneralLogic.scala b/src/main/scala/net/psforever/actors/session/spectator/GeneralLogic.scala index 46c737541..ebcf68ba3 100644 --- a/src/main/scala/net/psforever/actors/session/spectator/GeneralLogic.scala +++ b/src/main/scala/net/psforever/actors/session/spectator/GeneralLogic.scala @@ -16,8 +16,9 @@ import net.psforever.objects.zones.ZoneProjectile import net.psforever.packet.PlanetSideGamePacket import net.psforever.packet.game.{ActionCancelMessage, AvatarFirstTimeEventMessage, AvatarImplantMessage, AvatarJumpMessage, BattleplanMessage, BindPlayerMessage, BugReportMessage, ChangeFireModeMessage, ChangeShortcutBankMessage, CharacterCreateRequestMessage, CharacterRequestMessage, CollisionIs, ConnectToWorldRequestMessage, CreateShortcutMessage, DeployObjectMessage, DisplayedAwardMessage, DropItemMessage, EmoteMsg, FacilityBenefitShieldChargeRequestMessage, FriendsRequest, GenericAction, GenericActionMessage, GenericCollisionMsg, GenericObjectActionAtPositionMessage, GenericObjectActionMessage, GenericObjectStateMsg, HitHint, ImplantAction, InvalidTerrainMessage, LootItemMessage, MoveItemMessage, ObjectDetectedMessage, ObjectHeldMessage, OutfitMembershipRequest, OutfitMembershipResponse, OutfitRequest, PickupItemMessage, PlanetsideAttributeMessage, PlayerStateMessageUpstream, RequestDestroyMessage, TargetingImplantRequest, TradeMessage, UnuseItemMessage, UseItemMessage, VoiceHostInfo, VoiceHostRequest, ZipLineMessage} import net.psforever.services.account.AccountPersistenceService -import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage} +import net.psforever.services.avatar.AvatarAction import net.psforever.services.base.CachedEnvelope +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.services.base.message.PlanetsideAttribute import net.psforever.types.{ExoSuitType, Vector3} @@ -229,7 +230,7 @@ class GeneralLogic(val ops: GeneralOperations, implicit val context: ActorContex case GenericAction.MaxAnchorsExtend_RCV => log.info(s"${player.Name} has anchored ${player.Sex.pronounObject}self to the ground") player.UsingSpecial = SpecialExoSuitDefinition.Mode.Anchored - continent.AvatarEvents ! AvatarServiceMessage( + continent.AvatarEvents ! MessageEnvelope( continent.id, player.GUID, PlanetsideAttribute(player.GUID, 19, 1) @@ -251,7 +252,7 @@ class GeneralLogic(val ops: GeneralOperations, implicit val context: ActorContex case GenericAction.MaxAnchorsRelease_RCV => log.info(s"${player.Name} has released the anchors") player.UsingSpecial = SpecialExoSuitDefinition.Mode.Normal - continent.AvatarEvents ! AvatarServiceMessage( + continent.AvatarEvents ! MessageEnvelope( continent.id, player.GUID, PlanetsideAttribute(player.GUID, 19, 0) diff --git a/src/main/scala/net/psforever/actors/session/spectator/MountHandlerLogic.scala b/src/main/scala/net/psforever/actors/session/spectator/MountHandlerLogic.scala index a5f3213a4..89ca48498 100644 --- a/src/main/scala/net/psforever/actors/session/spectator/MountHandlerLogic.scala +++ b/src/main/scala/net/psforever/actors/session/spectator/MountHandlerLogic.scala @@ -12,9 +12,9 @@ import net.psforever.objects.serverobject.mount.Mountable import net.psforever.objects.serverobject.terminals.implant.ImplantTerminalMech import net.psforever.objects.vital.InGameHistory import net.psforever.packet.game.{DelayedPathMountMsg, DismountVehicleCargoMsg, DismountVehicleMsg, GenericObjectActionMessage, MountVehicleCargoMsg, MountVehicleMsg, ObjectDetachMessage, PlayerStasisMessage, PlayerStateShiftMessage, ShiftState} +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.services.base.message.SendResponse -import net.psforever.services.local.LocalServiceMessage -import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage} +import net.psforever.services.vehicle.VehicleAction object MountHandlerLogic { def apply(ops: SessionMountHandlers): MountHandlerLogic = { @@ -61,7 +61,7 @@ class MountHandlerLogic(val ops: SessionMountHandlers, implicit val context: Act val (pos, zang) = Vehicles.dismountShuttle(obj, mountPoint) tplayer.Position = pos sendResponse(DelayedPathMountMsg(pguid, sguid, u1=60, u2=true)) - continent.LocalEvents ! LocalServiceMessage( + continent.LocalEvents ! MessageEnvelope( continent.id, SendResponse(ObjectDetachMessage(sguid, pguid, pos, roll=0, pitch=0, zang)) ) @@ -80,11 +80,11 @@ class MountHandlerLogic(val ops: SessionMountHandlers, implicit val context: Act //the player will fall to the ground and is perfectly vulnerable in this state //additionally, our player must exist in the current zone //having no in-game avatar target will throw us out of the map screen when deploying and cause softlock - events ! VehicleServiceMessage(player.Name, SendResponse(Seq( + events ! MessageEnvelope(player.Name, SendResponse(Seq( PlayerStasisMessage(pguid), PlayerStateShiftMessage(ShiftState(unk=0, obj.Position, obj.Orientation.z, vel=None)) ))) - events ! VehicleServiceMessage( + events ! MessageEnvelope( continent.id, pguid, SendResponse(GenericObjectActionMessage(pguid, code=9)) //conceal the player @@ -105,7 +105,7 @@ class MountHandlerLogic(val ops: SessionMountHandlers, implicit val context: Act ops.DismountVehicleAction(tplayer, obj, seatNum) case Mountable.CanDismount(obj: Vehicle, seat_num, _) => - continent.VehicleEvents ! VehicleServiceMessage( + continent.VehicleEvents ! MessageEnvelope( continent.id, tplayer.GUID, VehicleAction.KickPassenger(seat_num, unk2=true, obj.GUID) diff --git a/src/main/scala/net/psforever/actors/session/spectator/SpectatorMode.scala b/src/main/scala/net/psforever/actors/session/spectator/SpectatorMode.scala index 993735e1d..f30b0d80e 100644 --- a/src/main/scala/net/psforever/actors/session/spectator/SpectatorMode.scala +++ b/src/main/scala/net/psforever/actors/session/spectator/SpectatorMode.scala @@ -11,7 +11,7 @@ import net.psforever.packet.PlanetSidePacket import net.psforever.packet.game.{DeployableInfo, DeployableObjectsInfoMessage, DeploymentAction, ObjectCreateDetailedMessage, ObjectDeleteMessage} import net.psforever.packet.game.objectcreate.{ObjectClass, ObjectCreateMessageParent, RibbonBars} import net.psforever.services.Service -import net.psforever.services.avatar.AvatarServiceMessage +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.services.base.message.ObjectDelete import net.psforever.services.chat.SpectatorChannel import net.psforever.services.teamwork.{SquadAction, SquadServiceMessage} @@ -69,7 +69,7 @@ class SpectatorModeLogic(data: SessionData) extends ModeLogic { player.Inventory.Items .foreach { entry => sendResponse(ObjectDeleteMessage(entry.GUID, 0)) } sendResponse(ObjectDeleteMessage(player.avatar.locker.GUID, 0)) - continent.AvatarEvents ! AvatarServiceMessage(continent.id, pguid, ObjectDelete(pguid)) + continent.AvatarEvents ! MessageEnvelope(continent.id, pguid, ObjectDelete(pguid)) player.Holsters() .collect { case slot if slot.Equipment.nonEmpty => sendResponse(ObjectDeleteMessage(slot.Equipment.get.GUID, 0)) } val vehicleAndSeat = data.vehicles.GetMountableAndSeat(None, player, continent) match { diff --git a/src/main/scala/net/psforever/actors/session/spectator/VehicleLogic.scala b/src/main/scala/net/psforever/actors/session/spectator/VehicleLogic.scala index d56536feb..d20548bd3 100644 --- a/src/main/scala/net/psforever/actors/session/spectator/VehicleLogic.scala +++ b/src/main/scala/net/psforever/actors/session/spectator/VehicleLogic.scala @@ -8,7 +8,8 @@ import net.psforever.objects.Vehicle import net.psforever.objects.serverobject.deploy.Deployment import net.psforever.packet.game.{ChildObjectStateMessage, DeployRequestMessage, FrameVehicleStateMessage, VehicleStateMessage, VehicleSubStateMessage} import net.psforever.services.base.CachedEnvelope -import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage} +import net.psforever.services.base.envelope.MessageEnvelope +import net.psforever.services.vehicle.VehicleAction import net.psforever.types.{DriveState, Vector3} object VehicleLogic { @@ -81,7 +82,7 @@ class VehicleLogic(val ops: VehicleOperations, implicit val context: ActorContex val mobileShift: String = if (obj.DeploymentState != DriveState.Mobile) { obj.DeploymentState = DriveState.Mobile sendResponse(DeployRequestMessage(player.GUID, obj.GUID, DriveState.Mobile, 0, unk3=false, Vector3.Zero)) - continent.VehicleEvents ! VehicleServiceMessage( + continent.VehicleEvents ! MessageEnvelope( continent.id, player.GUID, VehicleAction.DeployRequest(obj.GUID, DriveState.Mobile, 0, unk2=false, Vector3.Zero) diff --git a/src/main/scala/net/psforever/actors/session/support/GeneralOperations.scala b/src/main/scala/net/psforever/actors/session/support/GeneralOperations.scala index 01befe7c9..a3e046ae5 100644 --- a/src/main/scala/net/psforever/actors/session/support/GeneralOperations.scala +++ b/src/main/scala/net/psforever/actors/session/support/GeneralOperations.scala @@ -17,11 +17,12 @@ import net.psforever.objects.sourcing.{DeployableSource, PlayerSource, VehicleSo import net.psforever.objects.vehicles.Utility.InternalTelepad import net.psforever.objects.zones.blockmap.BlockMapEntity import net.psforever.objects.zones.exp.ToDatabase -import net.psforever.services.RemoverActor import net.psforever.services.avatar.support.GroundEnvelope -import net.psforever.services.base.message.{PlanetsideAttribute, SendResponse} +import net.psforever.services.base.envelope.MessageEnvelope +import net.psforever.services.base.message.{ObjectDelete, PlanetsideAttribute, SendResponse} +import net.psforever.services.base.support.RemoverActor import net.psforever.services.local.support.{CaptureEnvelope, HackCaptureActor} -import net.psforever.services.local.{LocalAction, LocalServiceMessage} +import net.psforever.services.local.LocalAction import scala.collection.mutable import scala.concurrent.ExecutionContext.Implicits.global @@ -51,9 +52,9 @@ import net.psforever.packet.game.PlanetsideAttributeEnum.PlanetsideAttributeEnum import net.psforever.packet.game.objectcreate._ import net.psforever.packet.game._ import net.psforever.services.account.AccountPersistenceService -import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage} +import net.psforever.services.avatar.AvatarAction import net.psforever.services.local.support.CaptureFlagManager -import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage} +import net.psforever.services.vehicle.VehicleAction import net.psforever.services.Service import net.psforever.types._ import net.psforever.util.Config @@ -206,7 +207,7 @@ class GeneralOperations( .livePlayerList .filter(_.GUID != guid) .foreach { p => - events ! LocalServiceMessage(p.Name, msg) + events ! MessageEnvelope(p.Name, msg) } //todo better way to collect csr players while utilizing the aforementioned benefit of localSector val position = player.Position @@ -218,7 +219,7 @@ class GeneralOperations( .AllPlayers .filter { p => !p.allowInteraction && p.GUID != guid && Vector3.DistanceSquared(p.Position, position) < rangeSq } .foreach { p => - events ! LocalServiceMessage(p.Name, msg) + events ! MessageEnvelope(p.Name, msg) } } @@ -405,7 +406,7 @@ class GeneralOperations( val detectedTargets = sessionLogic.shooting.FindDetectedProjectileTargets(targets) val mode = 7 + (if (weapon.Projectile == GlobalDefinitions.wasp_rocket_projectile) 1 else 0) detectedTargets.foreach { target => - continent.AvatarEvents ! AvatarServiceMessage(target, AvatarAction.ProjectileAutoLockAwareness(mode)) + continent.AvatarEvents ! MessageEnvelope(target, AvatarAction.ProjectileAutoLockAwareness(mode)) } case _ => () } @@ -485,7 +486,7 @@ class GeneralOperations( case attacker if attacker.Faction != player.Faction && System.currentTimeMillis() - llu.LastCollectionTime >= Config.app.game.experience.cep.lluSlayerCreditDuration.toMillis => - continent.AvatarEvents ! AvatarServiceMessage( + continent.AvatarEvents ! MessageEnvelope( attacker.Name, AvatarAction.AwardCep(attacker.CharId, Config.app.game.experience.cep.lluSlayerCredit) ) @@ -1028,7 +1029,7 @@ class GeneralOperations( sendResponse(ChatMsg(ChatMessageType.UNK_227, "@ArmorShieldOff")) } player.UsingSpecial = SpecialExoSuitDefinition.Mode.Normal - continent.AvatarEvents ! AvatarServiceMessage( + continent.AvatarEvents ! MessageEnvelope( continent.id, PlanetsideAttribute(player.GUID, 8, 0) ) @@ -1037,7 +1038,7 @@ class GeneralOperations( } private def activateMaxSpecialStateMessage(): Unit = { - continent.AvatarEvents ! AvatarServiceMessage( + continent.AvatarEvents ! MessageEnvelope( continent.id, PlanetsideAttribute(player.GUID, 8, 1) ) @@ -1052,7 +1053,7 @@ class GeneralOperations( case (Some(obj), Some(seatNum)) => tplayer.VehicleSeated = None obj.Seats(seatNum).unmount(tplayer) - continent.VehicleEvents ! VehicleServiceMessage( + continent.VehicleEvents ! MessageEnvelope( continent.id, tplayer.GUID, VehicleAction.KickPassenger(seatNum, unk2=false, obj.GUID) @@ -1475,19 +1476,19 @@ class GeneralOperations( val events = continent.AvatarEvents val zoneid = continent.id val destinationPosition = dest.Position - events ! AvatarServiceMessage(zoneid, pguid, AvatarAction.ObjectDelete(pguid)) - events ! AvatarServiceMessage(player.Name, - AvatarAction.SendResponse(PlayerStateShiftMessage(ShiftState(0, destinationPosition, player.Orientation.z))) + events ! MessageEnvelope(zoneid, pguid, ObjectDelete(pguid)) + events ! MessageEnvelope(player.Name, + SendResponse(PlayerStateShiftMessage(ShiftState(0, destinationPosition, player.Orientation.z))) ) player.Position = destinationPosition - events ! AvatarServiceMessage(zoneid, pguid, AvatarAction.LoadPlayer( + events ! MessageEnvelope(zoneid, pguid, AvatarAction.LoadPlayer( player.Definition.ObjectId, pguid, player.Definition.Packet.ConstructorData(player).get, None )) useRouterTelepadEffect(pguid, sguid, dguid) - continent.LocalEvents ! LocalServiceMessage( + events ! MessageEnvelope( continent.id, pguid, LocalAction.RouterTelepadTransport(pguid, sguid, dguid) diff --git a/src/main/scala/net/psforever/actors/session/support/SessionAvatarHandlers.scala b/src/main/scala/net/psforever/actors/session/support/SessionAvatarHandlers.scala index f8214d24b..88298edc1 100644 --- a/src/main/scala/net/psforever/actors/session/support/SessionAvatarHandlers.scala +++ b/src/main/scala/net/psforever/actors/session/support/SessionAvatarHandlers.scala @@ -8,7 +8,8 @@ import net.psforever.objects.sourcing.{PlayerSource, SourceEntry, UniquePlayer} import net.psforever.packet.game.objectcreate.ConstructorData import net.psforever.objects.zones.exp import net.psforever.services.Service -import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage, AvatarServiceResponse} +import net.psforever.services.avatar.{AvatarAction, AvatarServiceResponse} +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.services.base.message.{EventResponse, SendResponse} import net.psforever.services.chat.OutfitChannel @@ -140,7 +141,7 @@ class SessionAvatarHandlers( val playersInZone = killer.Zone.Players.map { avatar => (avatar.id, avatar.basic.name) } val squadMembersHere = playersInZone.filter(member => squadMembers.contains(member._2)) squadMembersHere.foreach { member => - killer.Zone.AvatarEvents ! AvatarServiceMessage( + killer.Zone.AvatarEvents ! MessageEnvelope( member._2, AvatarAction.AwardBep(member._1, expSplit, ExperienceType.Normal)) } @@ -155,7 +156,7 @@ class SessionAvatarHandlers( val playersInZone = vehicle.Zone.Players.map { avatar => (avatar.id, avatar.basic.name) } val squadMembersHere = playersInZone.filter(member => squadMembers.contains(member._2)) squadMembersHere.foreach { member => - vehicle.Zone.AvatarEvents ! AvatarServiceMessage( + vehicle.Zone.AvatarEvents ! MessageEnvelope( member._2, AvatarAction.AwardBep(member._1, exp, ExperienceType.Normal)) } diff --git a/src/main/scala/net/psforever/actors/session/support/SessionData.scala b/src/main/scala/net/psforever/actors/session/support/SessionData.scala index f5c8c95cc..0d43257a8 100644 --- a/src/main/scala/net/psforever/actors/session/support/SessionData.scala +++ b/src/main/scala/net/psforever/actors/session/support/SessionData.scala @@ -4,6 +4,7 @@ package net.psforever.actors.session.support import akka.actor.typed.receptionist.Receptionist import akka.actor.typed.scaladsl.adapter._ import akka.actor.{ActorContext, ActorRef, typed} +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.services.chat.ChatService import scala.collection.mutable @@ -31,7 +32,7 @@ import net.psforever.packet._ import net.psforever.packet.game._ import net.psforever.services.account.AccountPersistenceService import net.psforever.services.ServiceManager.LookupResult -import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage} +import net.psforever.services.vehicle.VehicleAction import net.psforever.services.{Service, InterstellarClusterService => ICS} import net.psforever.types._ import net.psforever.util.Config @@ -567,7 +568,7 @@ class SessionData( case (Some(obj), Some(seatNum)) => tplayer.VehicleSeated = None obj.Seats(seatNum).unmount(tplayer) - continent.VehicleEvents ! VehicleServiceMessage( + continent.VehicleEvents ! MessageEnvelope( continent.id, tplayer.GUID, VehicleAction.KickPassenger(seatNum, unk2=false, obj.GUID) diff --git a/src/main/scala/net/psforever/actors/session/support/SessionMountHandlers.scala b/src/main/scala/net/psforever/actors/session/support/SessionMountHandlers.scala index 346a7f6bf..e8896a491 100644 --- a/src/main/scala/net/psforever/actors/session/support/SessionMountHandlers.scala +++ b/src/main/scala/net/psforever/actors/session/support/SessionMountHandlers.scala @@ -9,8 +9,9 @@ import net.psforever.objects.vehicles.{CargoBehavior, MountableWeapons} import net.psforever.objects.vital.InGameHistory import net.psforever.packet.game.{DismountVehicleCargoMsg, GenericObjectActionMessage, InventoryStateMessage, MountVehicleCargoMsg, MountVehicleMsg, ObjectAttachMessage, ObjectDetachMessage, PlanetsideAttributeMessage} import net.psforever.services.base.CachedEnvelope +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.services.base.message.SendResponse -import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage} +import net.psforever.services.vehicle.VehicleAction import net.psforever.types.{BailType, PlanetSideGUID, Vector3} // import net.psforever.actors.session.AvatarActor @@ -186,7 +187,7 @@ class SessionMountHandlers( avatarActor ! AvatarActor.DeactivateActiveImplants avatarActor ! AvatarActor.SuspendStaminaRegeneration(3.seconds) sendResponse(ObjectAttachMessage(objGuid, playerGuid, seatNum)) - continent.VehicleEvents ! VehicleServiceMessage( + continent.VehicleEvents ! MessageEnvelope( continent.id, playerGuid, VehicleAction.MountVehicle(objGuid, seatNum) @@ -204,13 +205,12 @@ class SessionMountHandlers( if (tplayer.BailProtection) { tplayer.ContributionFrom(obj) sessionLogic.keepAliveFunc = sessionLogic.zoning.NormalKeepAlive - continent.VehicleEvents ! VehicleServiceMessage( + continent.VehicleEvents ! MessageEnvelope( continent.id, - SendResponse(PlanetsideAttributeMessage(obj.GUID, 81, 1)) - ) - continent.VehicleEvents ! VehicleServiceMessage( - continent.id, - SendResponse(ObjectDetachMessage(obj.GUID, tplayer.GUID, tplayer.Position, obj.Orientation)) + SendResponse(List( + PlanetsideAttributeMessage(obj.GUID, 81, 1), + ObjectDetachMessage(obj.GUID, tplayer.GUID, tplayer.Position, obj.Orientation)) + ) ) } else { @@ -250,7 +250,7 @@ class SessionMountHandlers( BailType.Normal } sendResponse(DismountVehicleMsg(playerGuid, bailType, wasKickedByDriver = false)) - continent.VehicleEvents ! VehicleServiceMessage( + continent.VehicleEvents ! MessageEnvelope( continent.id, playerGuid, VehicleAction.DismountVehicle(bailType, unk2 = false) diff --git a/src/main/scala/net/psforever/actors/session/support/SessionOutfitHandlers.scala b/src/main/scala/net/psforever/actors/session/support/SessionOutfitHandlers.scala index a7d5f4bd9..25abda4c5 100644 --- a/src/main/scala/net/psforever/actors/session/support/SessionOutfitHandlers.scala +++ b/src/main/scala/net/psforever/actors/session/support/SessionOutfitHandlers.scala @@ -8,7 +8,8 @@ import net.psforever.objects.Player import net.psforever.packet.game.OutfitEventAction.{Initial, Leaving, OutfitInfo, OutfitRankNames, Unk1, Update, UpdateMemberCount} import net.psforever.packet.game.OutfitMembershipResponse.PacketType.CreateResponse import net.psforever.packet.game._ -import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage} +import net.psforever.services.avatar.AvatarAction +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.services.base.message.PlanetsideAttribute import net.psforever.services.chat.OutfitChannel import net.psforever.types.ChatMessageType @@ -84,12 +85,12 @@ object SessionOutfitHandlers { player.outfit_id = outfit.id player.outfit_name = outfit.name - player.Zone.AvatarEvents ! AvatarServiceMessage( + player.Zone.AvatarEvents ! MessageEnvelope( player.Zone.id, PlanetsideAttribute(player.GUID, 39, outfit.id) ) - player.Zone.AvatarEvents ! AvatarServiceMessage( + player.Zone.AvatarEvents ! MessageEnvelope( player.Zone.id, player.GUID, AvatarAction.PlanetsideStringAttribute(0, outfit.name) @@ -174,12 +175,12 @@ object SessionOutfitHandlers { invited.outfit_id = outfit.id invited.outfit_name = outfit.name - invited.Zone.AvatarEvents ! AvatarServiceMessage( + invited.Zone.AvatarEvents ! MessageEnvelope( invited.Zone.id, PlanetsideAttribute(invited.GUID, 39, outfit.id) ) - invited.Zone.AvatarEvents ! AvatarServiceMessage( + invited.Zone.AvatarEvents ! MessageEnvelope( invited.Zone.id, invited.GUID, AvatarAction.PlanetsideStringAttribute(0, outfit.name) @@ -241,12 +242,12 @@ object SessionOutfitHandlers { OutfitMemberEvent(outfit_id, kickedId, OutfitMemberEventAction.Kicked())) ) - kickedBy.Zone.AvatarEvents ! AvatarServiceMessage( + kickedBy.Zone.AvatarEvents ! MessageEnvelope( kickedBy.Zone.id, PlanetsideAttribute(kickedBy.GUID, 39, 0) ) - kickedBy.Zone.AvatarEvents ! AvatarServiceMessage( + kickedBy.Zone.AvatarEvents ! MessageEnvelope( kickedBy.Zone.id, kickedBy.GUID, AvatarAction.PlanetsideStringAttribute(0, "") @@ -270,18 +271,18 @@ object SessionOutfitHandlers { OutfitMembershipResponse(OutfitMembershipResponse.PacketType.YouGotKicked, 0, 1, kickedBy.CharId, kicked.CharId, kickedBy.Name, kicked.Name, flag = false)) - kicked.Zone.AvatarEvents ! AvatarServiceMessage( + kicked.Zone.AvatarEvents ! MessageEnvelope( kicked.Zone.id, PlanetsideAttribute(kicked.GUID, 39, 0) ) - kicked.Zone.AvatarEvents ! AvatarServiceMessage( + kicked.Zone.AvatarEvents ! MessageEnvelope( kicked.Zone.id, kicked.GUID, AvatarAction.PlanetsideStringAttribute(0, "") ) - kicked.Zone.AvatarEvents ! AvatarServiceMessage( + kicked.Zone.AvatarEvents ! MessageEnvelope( kicked.Name, AvatarAction.RemoveFromOutfitChat(kickedBy.outfit_id)) kicked.outfit_id = 0 @@ -634,12 +635,12 @@ object SessionOutfitHandlers { player.outfit_id = outfit.id player.outfit_name = outfit.name - player.Zone.AvatarEvents ! AvatarServiceMessage( + player.Zone.AvatarEvents ! MessageEnvelope( player.Zone.id, PlanetsideAttribute(player.GUID, 39, outfit.id) ) - player.Zone.AvatarEvents ! AvatarServiceMessage( + player.Zone.AvatarEvents ! MessageEnvelope( player.Zone.id, player.GUID, AvatarAction.PlanetsideStringAttribute(0, outfit.name) diff --git a/src/main/scala/net/psforever/actors/session/support/SessionSquadHandlers.scala b/src/main/scala/net/psforever/actors/session/support/SessionSquadHandlers.scala index 3645b91a2..fa9da51e7 100644 --- a/src/main/scala/net/psforever/actors/session/support/SessionSquadHandlers.scala +++ b/src/main/scala/net/psforever/actors/session/support/SessionSquadHandlers.scala @@ -2,6 +2,7 @@ package net.psforever.actors.session.support import akka.actor.{ActorContext, ActorRef, typed} +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.services.base.message.PlanetsideAttribute import net.psforever.services.teamwork.SquadServiceResponse @@ -11,7 +12,6 @@ import net.psforever.actors.session.AvatarActor import net.psforever.objects.teamwork.Squad import net.psforever.objects.{Default, Player} import net.psforever.packet.game._ -import net.psforever.services.avatar.AvatarServiceMessage import net.psforever.services.teamwork.{SquadResponse, SquadServiceMessage, SquadAction => SquadServiceAction} import net.psforever.types.{PlanetSideEmpire, PlanetSideGUID, Vector3} @@ -106,7 +106,7 @@ class SessionSquadHandlers( squadUI.get(player.CharId) match { case Some(elem) => sendResponse(PlanetsideAttributeMessage(player.GUID, 31, squad_supplement_id)) - continent.AvatarEvents ! AvatarServiceMessage( + continent.AvatarEvents ! MessageEnvelope( s"${player.Faction}", player.GUID, PlanetsideAttribute(player.GUID, 31, squad_supplement_id) @@ -288,7 +288,7 @@ class SessionSquadHandlers( * @param value value to associate the player */ def GiveSquadColorsForOthers(guid: PlanetSideGUID, factionChannel: String, value: Long): Unit = { - continent.AvatarEvents ! AvatarServiceMessage(factionChannel, guid, PlanetsideAttribute(guid, 31, value)) + continent.AvatarEvents ! MessageEnvelope(factionChannel, guid, PlanetsideAttribute(guid, 31, value)) } /** diff --git a/src/main/scala/net/psforever/actors/session/support/WeaponAndProjectileOperations.scala b/src/main/scala/net/psforever/actors/session/support/WeaponAndProjectileOperations.scala index 15197b0f0..0fcfef466 100644 --- a/src/main/scala/net/psforever/actors/session/support/WeaponAndProjectileOperations.scala +++ b/src/main/scala/net/psforever/actors/session/support/WeaponAndProjectileOperations.scala @@ -29,8 +29,8 @@ import net.psforever.objects.zones.exp.ToDatabase import net.psforever.packet.game.UplinkRequest import net.psforever.services.Service import net.psforever.services.base.CachedEnvelope +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.services.base.message.{ChangeAmmo, ChangeFireState_Start, ChangeFireState_Stop, ReloadTool, SendResponse, WeaponDryFire} -import net.psforever.services.local.LocalServiceMessage import net.psforever.types.{ChatMessageType, PlanetSideEmpire, ValidPlanetSideGUID, Vector3} import net.psforever.util.Config @@ -48,8 +48,8 @@ import net.psforever.objects.serverobject.mount.Mountable import net.psforever.objects.serverobject.turret.FacilityTurret import net.psforever.objects._ import net.psforever.packet.game._ -import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage} -import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage} +import net.psforever.services.avatar.AvatarAction +import net.psforever.services.vehicle.VehicleAction import net.psforever.types.{ExoSuitType, PlanetSideGUID} trait WeaponAndProjectileFunctions extends CommonSessionInterfacingFunctionality { @@ -284,9 +284,9 @@ class WeaponAndProjectileOperations( .orElse { continent.GUID(weapon_guid) } .collect { case _: Equipment if containerOpt.exists(_.isInstanceOf[Player]) => - continent.AvatarEvents ! AvatarServiceMessage(continent.id, player.GUID, WeaponDryFire(weapon_guid)) + continent.AvatarEvents ! MessageEnvelope(continent.id, player.GUID, WeaponDryFire(weapon_guid)) case _: Equipment => - continent.VehicleEvents ! VehicleServiceMessage( + continent.VehicleEvents ! MessageEnvelope( continent.id, player.GUID, WeaponDryFire(weapon_guid) @@ -349,7 +349,7 @@ class WeaponAndProjectileOperations( sendResponse(UplinkResponse(code.value, 0)) sendResponse(PlanetsideAttributeMessage(player.GUID, 59, 1200000)) avatarActor ! AvatarActor.UpdateCUDTime("emp_blast") - player.Zone.LocalEvents ! LocalServiceMessage( + player.Zone.LocalEvents ! MessageEnvelope( s"${player.Zone.id}", PlanetSideGUID(-1), SendResponse(TriggerEffectMessage(Service.defaultPlayerGUID, empColor, None, Some(TriggeredEffectLocation(player.Position, Vector3(0, 0, 90))))) @@ -359,7 +359,7 @@ class WeaponAndProjectileOperations( ExplosiveDeployableControl.detectionForExplosiveSource(player), Zone.findAllTargets) } case UplinkRequestType.OrbitalStrike => - player.Zone.LocalEvents ! LocalServiceMessage( + player.Zone.LocalEvents ! MessageEnvelope( s"$playerFaction", PlanetSideGUID(-1), SendResponse(OrbitalStrikeWaypointMessage(player.GUID, pos.get.x, pos.get.y)) @@ -388,12 +388,12 @@ class WeaponAndProjectileOperations( sendResponse(PlanetsideAttributeMessage(player.GUID, 60, 10800000)) avatarActor ! AvatarActor.UpdateCUDTime("orbital_strike") context.system.scheduler.scheduleOnce(delay = 5 seconds) { - player.Zone.LocalEvents ! LocalServiceMessage( + player.Zone.LocalEvents ! MessageEnvelope( s"${player.Zone.id}", PlanetSideGUID(-1), SendResponse(TriggerEffectMessage(ValidPlanetSideGUID(0), strikeType, None, Some(TriggeredEffectLocation(orbitalStrikePos.get, Vector3(0, 0, 90))))) ) - player.Zone.LocalEvents ! LocalServiceMessage( + player.Zone.LocalEvents ! MessageEnvelope( s"$playerFaction", PlanetSideGUID(-1), SendResponse(OrbitalStrikeWaypointMessage(player.GUID, None)) @@ -472,7 +472,7 @@ class WeaponAndProjectileOperations( log.info(s"${player.Name} changed ${player.Sex.possessive} ${obj.Definition.Name}'s fire mode to #$modeIndex") } sendResponse(ChangeFireModeMessage(item_guid, modeIndex)) - continent.AvatarEvents ! AvatarServiceMessage( + continent.AvatarEvents ! MessageEnvelope( sessionLogic.zoning.zoneChannel, player.GUID, AvatarAction.ChangeFireMode(item_guid, modeIndex) @@ -758,7 +758,7 @@ class WeaponAndProjectileOperations( (target.GUID, (target, proxyCopy, proxyCopy.shot_origin, target.Position)) }.unzip //chain lash effect - continent.AvatarEvents ! AvatarServiceMessage( + continent.AvatarEvents ! MessageEnvelope( continent.id, SendResponse(ChainLashMessage(hitPos, projectile.profile.ObjectId, guidRefs.toList)) ) @@ -944,9 +944,9 @@ class WeaponAndProjectileOperations( tool.Magazine = 0 sendResponse(InventoryStateMessage(tool.AmmoSlot.Box.GUID, weapon_guid, 0)) sendResponse(ChangeFireStateMessage_Stop(weapon_guid)) - continent.AvatarEvents ! AvatarServiceMessage(continent.id, player.GUID, ChangeFireState_Stop(weapon_guid)) + continent.AvatarEvents ! MessageEnvelope(continent.id, player.GUID, ChangeFireState_Stop(weapon_guid)) sendResponse(WeaponDryFireMessage(weapon_guid)) - continent.AvatarEvents ! AvatarServiceMessage(continent.id, player.GUID, WeaponDryFire(weapon_guid)) + continent.AvatarEvents ! MessageEnvelope(continent.id, player.GUID, WeaponDryFire(weapon_guid)) } /** @@ -962,7 +962,7 @@ class WeaponAndProjectileOperations( .map { sessionLogic.validObject(_, decorator="FindDetectedProjectileTargets") } .flatMap { case Some(obj: Vehicle) if !obj.Cloaked => - //TODO hint: vehicleService ! VehicleServiceMessage(s"${obj.Actor}", VehicleAction.ProjectileAutoLockAwareness(mode)) + //TODO hint: vehicleService ! MessageEnvelope(s"${obj.Actor}", VehicleAction.ProjectileAutoLockAwareness(mode)) obj.Seats.values.flatMap { seat => seat.occupants.map(_.Name) } case Some(obj: Mountable) => obj.Seats.values.flatMap { seat => seat.occupants.map(_.Name) } @@ -1087,7 +1087,7 @@ class WeaponAndProjectileOperations( } def fireStateStartPlayerMessages(itemGuid: PlanetSideGUID): Unit = { - continent.AvatarEvents ! AvatarServiceMessage( + continent.AvatarEvents ! MessageEnvelope( sessionLogic.zoning.zoneChannel, player.GUID, ChangeFireState_Start(itemGuid) @@ -1099,7 +1099,7 @@ class WeaponAndProjectileOperations( case turret: FacilityTurret if continent.map.cavern => turret.Actor ! VanuSentry.ChangeFireStart } - continent.VehicleEvents ! VehicleServiceMessage( + continent.VehicleEvents ! MessageEnvelope( continent.id, player.GUID, ChangeFireState_Start(itemGuid) @@ -1128,7 +1128,7 @@ class WeaponAndProjectileOperations( } def fireStateStopPlayerMessages(itemGuid: PlanetSideGUID): Unit = { - continent.AvatarEvents ! AvatarServiceMessage( + continent.AvatarEvents ! MessageEnvelope( sessionLogic.zoning.zoneChannel, player.GUID, ChangeFireState_Stop(itemGuid) @@ -1140,7 +1140,7 @@ class WeaponAndProjectileOperations( case turret: FacilityTurret if continent.map.cavern => turret.Actor ! VanuSentry.ChangeFireStop } - continent.VehicleEvents ! VehicleServiceMessage( + continent.VehicleEvents ! MessageEnvelope( continent.id, player.GUID, ChangeFireState_Stop(itemGuid) @@ -1200,11 +1200,11 @@ class WeaponAndProjectileOperations( used by ReloadMessage handling */ def reloadPlayerMessages(itemGuid: PlanetSideGUID): Unit = { - continent.AvatarEvents ! AvatarServiceMessage(sessionLogic.zoning.zoneChannel, player.GUID, ReloadTool(itemGuid)) + continent.AvatarEvents ! MessageEnvelope(sessionLogic.zoning.zoneChannel, player.GUID, ReloadTool(itemGuid)) } def reloadVehicleMessages(itemGuid: PlanetSideGUID): Unit = { - continent.VehicleEvents ! VehicleServiceMessage( + continent.VehicleEvents ! MessageEnvelope( continent.id, player.GUID, ReloadTool(itemGuid) @@ -1381,7 +1381,7 @@ class WeaponAndProjectileOperations( val previous_box_guid = previousBox.GUID val boxDef = box.Definition sendResponse(ChangeAmmoMessage(tool_guid, box.Capacity)) - continent.AvatarEvents ! AvatarServiceMessage( + continent.AvatarEvents ! MessageEnvelope( sessionLogic.zoning.zoneChannel, player.GUID, ChangeAmmo( @@ -1482,7 +1482,7 @@ class WeaponAndProjectileOperations( def modifyAmmunitionInMountable(obj: PlanetSideServerObject with Container)(box: AmmoBox, reloadValue: Int): Unit = { modifyAmmunition(obj)(box, reloadValue) obj.Find(box).collect { index => - continent.VehicleEvents ! VehicleServiceMessage( + continent.VehicleEvents ! MessageEnvelope( s"${obj.Actor}", player.GUID, VehicleAction.InventoryState(box, obj.GUID, index, box.Definition.Packet.DetailedConstructorData(box).get) @@ -1589,7 +1589,7 @@ class WeaponAndProjectileOperations( shootingStop.clear() (prefire ++ shooting).foreach { guid => sendResponse(ChangeFireStateMessage_Stop(guid)) - continent.AvatarEvents ! AvatarServiceMessage(continent.id, player.GUID, ChangeFireState_Stop(guid)) + continent.AvatarEvents ! MessageEnvelope(continent.id, player.GUID, ChangeFireState_Stop(guid)) } prefire.clear() shooting.clear() 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 00ffaf3e5..900d88600 100644 --- a/src/main/scala/net/psforever/actors/session/support/ZoningOperations.scala +++ b/src/main/scala/net/psforever/actors/session/support/ZoningOperations.scala @@ -23,6 +23,7 @@ import net.psforever.objects.zones.blockmap.BlockMapEntity import net.psforever.packet.game.GenericAction.FirstPersonViewWithEffect import net.psforever.packet.game.{CampaignStatistic, ChangeFireStateMessage_Start, CloudInfo, GenericActionMessage, GenericObjectActionEnum, HackState7, MailMessage, ObjectDetectedMessage, SessionStatistic, StormInfo, TriggeredSound, TrainingZoneMessage, WeatherMessage} import net.psforever.services.avatar.support.{CorpseEnvelope, ReleaseEnvelope} +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.services.base.message.{GenericObjectAction, ObjectDelete, PlanetsideAttribute, SendResponse} import net.psforever.services.chat.DefaultChannel @@ -64,16 +65,16 @@ import net.psforever.packet.game.objectcreate.{DroppedItemData, ObjectCreateMess import net.psforever.packet.game.objectcreate.ObjectClass import net.psforever.packet.{PlanetSideGamePacket, game} import net.psforever.persistence.Savedplayer -import net.psforever.services.RemoverActor import net.psforever.services.ServiceManager.{Lookup, LookupResult} import net.psforever.services.account.{AccountPersistenceService, PlayerToken} -import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage} -import net.psforever.services.galaxy.{GalaxyAction, GalaxyServiceMessage} +import net.psforever.services.avatar.AvatarAction +import net.psforever.services.base.support.RemoverActor +import net.psforever.services.galaxy.GalaxyAction import net.psforever.services.hart.HartTimer import net.psforever.services.local.support.HackCaptureActor -import net.psforever.services.local.{LocalAction, LocalServiceMessage} +import net.psforever.services.local.LocalAction import net.psforever.services.properties.PropertyOverrideManager -import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage} +import net.psforever.services.vehicle.VehicleAction import net.psforever.services.{CavernRotationService, Service, ServiceManager, InterstellarClusterService => ICS} import net.psforever.types._ import net.psforever.util.{Config, DefinitionUtil} @@ -128,7 +129,7 @@ object ZoningOperations { .filter(p => Sidedness.equals(side, p.WhichSide)) .map(_.Name) ++ additionalChannels) .foreach { target => - events ! LocalServiceMessage(target, effectMessage) + events ! MessageEnvelope(target, effectMessage) } } @@ -156,11 +157,11 @@ object ZoningOperations { } val effectMessage = LocalAction.TriggerEffectLocation(s"respawn_$faction", position, orientation) (effectTargets.map(_.Name) ++ additionalChannels).foreach { target => - events ! LocalServiceMessage(target, effectMessage) + events ! MessageEnvelope(target, effectMessage) } val soundMessage = LocalAction.TriggerSound(TriggeredSound.SpawnInTube, position, 50, 0.69803923f) (soundTargets.map(_.Name) ++ additionalChannels).foreach { target => - events ! LocalServiceMessage(target, soundMessage) + events ! MessageEnvelope(target, soundMessage) } } @@ -549,7 +550,7 @@ class ZoningOperations( sendResponse(OCM.apply(projectile)) } //spawn point update request - continent.VehicleEvents ! VehicleServiceMessage( + continent.VehicleEvents ! MessageEnvelope( player.Name, VehicleAction.UpdateAmsSpawnPoint(continent) ) @@ -597,7 +598,7 @@ class ZoningOperations( context.self ) LivePlayerList.Add(avatar.id, avatar) - galaxyService.tell(GalaxyServiceMessage(GalaxyAction.LogStatusChange(avatar.name)), context.parent) + galaxyService.tell(MessageEnvelope("", GalaxyAction.LogStatusChange(avatar.name)), context.parent) //PropertyOverrideMessage ServiceManager.serviceManager ! Lookup("propertyOverrideManager") sendResponse(PlanetsideAttributeMessage(PlanetSideGUID(0), 112, 0)) // disable festive backpacks @@ -853,7 +854,7 @@ class ZoningOperations( case None => spawn.deadState = DeadState.Release // cancel movement updates player.Position = position - // continent.AvatarEvents ! AvatarServiceMessage(continent.Id, ObjectDelete(player.GUID, player.GUID)) + // continent.AvatarEvents ! MessageEnvelope(continent.Id, ObjectDelete(player.GUID, player.GUID)) spawn.LoadZonePhysicalSpawnPoint(zoneId, position, Vector3.Zero, 0 seconds, None) case _ => // seated in something that is not a vehicle or the vehicle is cargo, in which case we can't move } @@ -1207,7 +1208,7 @@ class ZoningOperations( sendResponse(OCM.apply(llu)) // Attach it to a player if it has a carrier if (llu.Carrier.nonEmpty) { - continent.LocalEvents ! LocalServiceMessage( + continent.LocalEvents ! MessageEnvelope( continent.id, PlanetSideGUID(-1), SendResponse(ObjectAttachMessage(llu.Carrier.get.GUID, llu.GUID, 252)) @@ -1352,7 +1353,7 @@ class ZoningOperations( val pguid = player.GUID val toChannel = manifest.file val topLevel = interstellarFerryTopLevelGUID.getOrElse(vehicle.GUID) - continent.VehicleEvents ! VehicleServiceMessage( + continent.VehicleEvents ! MessageEnvelope( s"${vehicle.Actor}", pguid, VehicleAction.TransferPassengerChannel(s"${vehicle.Actor}", toChannel, vehicle, topLevel) @@ -1366,7 +1367,7 @@ class ZoningOperations( cargo.Actor ! CargoBehavior.StartCargoDismounting(bailed = false) case entry => val cargo = vehicle.CargoHolds(entry.mount).occupant.get - continent.VehicleEvents ! VehicleServiceMessage( + continent.VehicleEvents ! MessageEnvelope( entry.name, pguid, VehicleAction.TransferPassengerChannel(s"${cargo.Actor}", toChannel, cargo, topLevel) @@ -1398,7 +1399,7 @@ class ZoningOperations( interstellarFerryTopLevelGUID = if (manifest.passengers.isEmpty && manifest.cargo.count { !_.name.equals("MISSING_DRIVER") } == 0) { //do not delete if vehicle has passengers or cargo - continent.VehicleEvents ! VehicleServiceMessage( + continent.VehicleEvents ! MessageEnvelope( continent.id, pguid, VehicleAction.UnloadVehicle(vehicle, topLevel) @@ -1476,14 +1477,14 @@ class ZoningOperations( case Some(manifest) => val toChannel = manifest.file val topLevel = interstellarFerryTopLevelGUID.getOrElse(vehicle.GUID) - galaxyService ! GalaxyServiceMessage(toChannel, GalaxyAction.TransferPassenger(player_guid, toChannel, vehicle, topLevel, manifest)) + galaxyService ! MessageEnvelope(toChannel, GalaxyAction.TransferPassenger(player_guid, toChannel, vehicle, topLevel, manifest)) vehicle.CargoHolds.values .collect { case hold if hold.isOccupied => val cargo = hold.occupant.get cargo.Continent = toZoneId //point to the cargo vehicle to instigate cargo vehicle driver transportation - // galaxyService ! GalaxyServiceMessage( + // galaxyService ! MesdsageEnvelope( // toChannel, // GalaxyAction.TransferPassenger(player_guid, toChannel, vehicle, topLevel, manifest) // ) @@ -2194,7 +2195,7 @@ class ZoningOperations( log.info(s"RestoreInfo: player $name is already logged in zone ${inZone.id}; rejoining that character") sessionLogic.persistFunc = UpdatePersistence(from) //tell the old WorldSessionActor to kill itself by using its own subscriptions against itself - inZone.AvatarEvents ! AvatarServiceMessage(name, AvatarAction.TeardownConnection()) + inZone.AvatarEvents ! MessageEnvelope(name, AvatarAction.TeardownConnection()) spawn.switchAvatarStatisticsFieldToRefreshAfterRespawn() //find and reload previous player ( @@ -2597,7 +2598,7 @@ class ZoningOperations( vehicle.CargoHolds.values .collect { case hold if hold.isOccupied => hold.occupant.get } .foreach { _.MountedIn = vguid } - events ! VehicleServiceMessage( + events ! MessageEnvelope( zoneid, player.GUID, VehicleAction.LoadVehicle(vehicle, vObjectId, vguid, data) @@ -2625,7 +2626,7 @@ class ZoningOperations( //do not dispatch delete action if any hierarchical occupant has not gotten this far through the summoning process val vehicleToDelete = interstellarFerryTopLevelGUID.orElse(originalSeated).getOrElse(PlanetSideGUID(0)) val zone = vehicle.PreviousGatingManifest().get.origin - zone.VehicleEvents ! VehicleServiceMessage( + zone.VehicleEvents ! MessageEnvelope( zone.id, player.GUID, VehicleAction.UnloadVehicle(vehicle, vehicleToDelete) @@ -2643,7 +2644,7 @@ class ZoningOperations( val definition = player.avatar.definition val guid = player.GUID sendResponse(OCM.detailed(player)) - continent.AvatarEvents ! AvatarServiceMessage( + continent.AvatarEvents ! MessageEnvelope( s"spectator", guid, AvatarAction.LoadPlayer(definition.ObjectId, guid, definition.Packet.ConstructorData(player).get, None) @@ -2655,7 +2656,7 @@ class ZoningOperations( val guid = player.GUID usingSpawnTubeAnimation() sendResponse(OCM.detailed(player)) - continent.AvatarEvents ! AvatarServiceMessage( + continent.AvatarEvents ! MessageEnvelope( zoneid, guid, AvatarAction.LoadPlayer(definition.ObjectId, guid, definition.Packet.ConstructorData(player).get, None) @@ -2728,7 +2729,7 @@ class ZoningOperations( interimUngunnedVehicle = Some(vguid) interimUngunnedVehicleSeat = Some(seat) } - continent.AvatarEvents ! AvatarServiceMessage( + continent.AvatarEvents ! MessageEnvelope( continent.id, pguid, AvatarAction.LoadPlayer( @@ -2887,7 +2888,7 @@ class ZoningOperations( case _ => () } if (player.VisibleSlots.contains(index)) { - events ! AvatarServiceMessage( + events ! MessageEnvelope( zoneId, ObjectDelete(obj.GUID) ) @@ -2905,7 +2906,6 @@ class ZoningOperations( * To the game, that is a backpack (or some pastry, festive graphical modification allowing). * @see `AvatarAction.ObjectDelete` * @see `AvatarAction.Release` - * @see `AvatarServiceMessage` * @see `FriskDeadBody` * @see `GUIDTask.unregisterPlayer` * @see `ObjectDeleteMessage` @@ -2923,7 +2923,7 @@ class ZoningOperations( val pguid = tplayer.GUID zone.Population ! Zone.Population.Release(avatar) sendResponse(ObjectDeleteMessage(pguid, 0)) - zone.AvatarEvents ! AvatarServiceMessage(zone.id, pguid, ObjectDelete(pguid)) + zone.AvatarEvents ! MessageEnvelope(zone.id, pguid, ObjectDelete(pguid)) TaskWorkflow.execute(GUIDTask.unregisterPlayer(zone.GUID, tplayer)) } } @@ -2933,7 +2933,6 @@ class ZoningOperations( * To the game, that is a backpack (or some pastry, festive graphical modification allowing). * A player who has been kicked may not turn into a corpse. * @see `AvatarAction.Release` - * @see `AvatarServiceMessage` * @see `CorpseConverter.converter` * @see `DepictPlayerAsCorpse` * @see `Player.Release` @@ -3179,7 +3178,7 @@ class ZoningOperations( // entering or exiting VR zones uses a fade-out effect for the player instead of the usual green cloud deconstruction effect val effect = if (player.IsInVRZone || zoneId.startsWith("tz")) 2 else 1 sendResponse(ObjectDeleteMessage(player_guid, unk1=effect)) - continent.AvatarEvents ! AvatarServiceMessage( + continent.AvatarEvents ! MessageEnvelope( continent.id, player_guid, ObjectDelete(player_guid, unk=effect) @@ -3346,7 +3345,7 @@ class ZoningOperations( //looking for squad (members) if (tplayer.avatar.lookingForSquad) { sendResponse(PlanetsideAttributeMessage(guid, 53, 1)) - continent.AvatarEvents ! AvatarServiceMessage(continent.id, guid, PlanetsideAttribute(guid, 53, 1)) + continent.AvatarEvents ! MessageEnvelope(continent.id, guid, PlanetsideAttribute(guid, 53, 1)) } sendResponse(AvatarSearchCriteriaMessage(guid, List(0, 0, 0, 0, 0, 0))) //these are facilities and towers and bunkers in the zone, but not necessarily all of them for some reason @@ -3372,7 +3371,7 @@ class ZoningOperations( if (tplayer.ExoSuit == ExoSuitType.MAX) { sendResponse(PlanetsideAttributeMessage(guid, 7, tplayer.Capacitor.toLong)) sendResponse(PlanetsideAttributeMessage(guid, 4, tplayer.Armor)) - continent.AvatarEvents ! AvatarServiceMessage(continent.id, PlanetsideAttribute(guid, 4, tplayer.Armor)) + continent.AvatarEvents ! MessageEnvelope(continent.id, PlanetsideAttribute(guid, 4, tplayer.Armor)) } // for issue #1269 continent.AllPlayers.filter(_.ExoSuit == ExoSuitType.MAX).foreach(max => sendResponse(PlanetsideAttributeMessage(max.GUID, 4, max.Armor))) @@ -3396,7 +3395,7 @@ class ZoningOperations( continent.GUID(tplayer.avatar.vehicle) match { case Some(vehicle: Vehicle) if vehicle.OwnerName.contains(tplayer.Name) => vehicle.OwnerGuid = guid - continent.VehicleEvents ! VehicleServiceMessage( + continent.VehicleEvents ! MessageEnvelope( s"${tplayer.Faction}", guid, VehicleAction.Ownership(vehicle.GUID) @@ -3500,8 +3499,10 @@ class ZoningOperations( val zone = tplayer.Zone val channel = zone.id val events = zone.AvatarEvents - events ! AvatarServiceMessage(channel, PlanetsideAttribute(guid, 0, 120)) - events ! AvatarServiceMessage(channel, PlanetsideAttribute(guid, 1, 120)) + events ! MessageEnvelope( + channel, + SendResponse(List(PlanetsideAttributeMessage(guid, 0, 120), PlanetsideAttributeMessage(guid, 1, 120))) + ) case _ => () } doorsThatShouldBeOpenInRange(pos, range = 100f) @@ -4005,14 +4006,14 @@ class ZoningOperations( val pZone = player.Zone sendResponse(GenericActionMessage(FirstPersonViewWithEffect)) pZone.blockMap.sector(player).livePlayerList.collect { case t if t.GUID != player.GUID => - pZone.LocalEvents ! LocalServiceMessage( + pZone.LocalEvents ! MessageEnvelope( t.Name, t.GUID, GenericObjectAction(player.GUID, GenericObjectActionEnum.PlayerDeconstructs.id) ) } pZone.AllPlayers.collect { case t if t.GUID != player.GUID && !t.allowInteraction => - pZone.LocalEvents ! LocalServiceMessage( + pZone.LocalEvents ! MessageEnvelope( t.Name, t.GUID, GenericObjectAction(player.GUID, GenericObjectActionEnum.PlayerDeconstructs.id) diff --git a/src/main/scala/net/psforever/actors/zone/BuildingActor.scala b/src/main/scala/net/psforever/actors/zone/BuildingActor.scala index 48cff7c6d..9afecac87 100644 --- a/src/main/scala/net/psforever/actors/zone/BuildingActor.scala +++ b/src/main/scala/net/psforever/actors/zone/BuildingActor.scala @@ -11,9 +11,9 @@ import net.psforever.objects.zones.Zone import net.psforever.packet.PlanetSideGamePacket import net.psforever.packet.game.ContinentalLockUpdateMessage import net.psforever.persistence +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.services.base.message.{SendResponse, SetEmpire} -import net.psforever.services.galaxy.{GalaxyAction, GalaxyServiceMessage} -import net.psforever.services.local.LocalServiceMessage +import net.psforever.services.galaxy.GalaxyAction import net.psforever.services.{InterstellarClusterService, ServiceManager} import net.psforever.types.PlanetSideEmpire import net.psforever.util.Database.ctx @@ -168,7 +168,7 @@ object BuildingActor { val building = details.building val zone = building.Zone building.Faction = faction - zone.LocalEvents ! LocalServiceMessage(zone.id, SetEmpire(building.GUID, faction)) + zone.LocalEvents ! MessageEnvelope(zone.id, SetEmpire(building.GUID, faction)) } } @@ -232,8 +232,8 @@ class BuildingActor( Behaviors.same case MapUpdate() => - details.galaxyService ! GalaxyServiceMessage(GalaxyAction.MapUpdate(details.building.infoUpdateMessage())) - details.galaxyService ! GalaxyServiceMessage(SendResponse(details.building.densityLevelUpdateMessage(building))) + details.galaxyService ! MessageEnvelope("", GalaxyAction.MapUpdate(details.building.infoUpdateMessage())) + details.galaxyService ! MessageEnvelope("", SendResponse(details.building.densityLevelUpdateMessage(building))) Behaviors.same case AmenityStateChange(amenity, data) => @@ -255,15 +255,15 @@ class BuildingActor( logic.ntu(details, msg) case DensityLevelUpdate(building) => - details.galaxyService ! GalaxyServiceMessage(SendResponse(details.building.densityLevelUpdateMessage(building))) + details.galaxyService ! MessageEnvelope("", SendResponse(details.building.densityLevelUpdateMessage(building))) Behaviors.same case ContinentalLock(zone) => - details.galaxyService ! GalaxyServiceMessage(SendResponse(ContinentalLockUpdateMessage(zone.Number, zone.lockedBy))) + details.galaxyService ! MessageEnvelope("", SendResponse(ContinentalLockUpdateMessage(zone.Number, zone.lockedBy))) Behaviors.same case HomeLockBenefits(msg) => - details.galaxyService ! GalaxyServiceMessage(SendResponse(msg)) + details.galaxyService ! MessageEnvelope("", SendResponse(msg)) Behaviors.same } } diff --git a/src/main/scala/net/psforever/actors/zone/ZoneActor.scala b/src/main/scala/net/psforever/actors/zone/ZoneActor.scala index a6d7206cd..f781db5c5 100644 --- a/src/main/scala/net/psforever/actors/zone/ZoneActor.scala +++ b/src/main/scala/net/psforever/actors/zone/ZoneActor.scala @@ -20,8 +20,8 @@ import net.psforever.objects.zones.exp.{ExperienceCalculator, SupportExperienceC import net.psforever.packet.game.{BuildingInfoUpdateMessage, PlanetsideAttributeMessage} import net.psforever.util.Database._ import net.psforever.persistence +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.services.base.message.SendResponse -import net.psforever.services.local.LocalServiceMessage import scala.collection.mutable import scala.util.{Failure, Success} @@ -235,24 +235,24 @@ class ZoneActor( } buildingOpt.foreach { building => if (msg.generator_state == PlanetSideGeneratorState.Normal && building.hasCavernLockBenefit) { - zone.LocalEvents ! LocalServiceMessage( + zone.LocalEvents ! MessageEnvelope( zone.id, SendResponse(PlanetsideAttributeMessage(building.GUID, 67, 1)) ) } msg.is_hacked match { case true if building.BuildingType == StructureType.Facility && !zone.map.cavern => - zone.LocalEvents ! LocalServiceMessage( + zone.LocalEvents ! MessageEnvelope( zone.id, SendResponse(PlanetsideAttributeMessage(building.GUID, 67, 0)) ) case false if building.hasCavernLockBenefit => - zone.LocalEvents ! LocalServiceMessage( + zone.LocalEvents ! MessageEnvelope( zone.id, SendResponse(PlanetsideAttributeMessage(building.GUID, 67, 1)) ) case false if building.BuildingType == StructureType.Facility && !zone.map.cavern && !building.hasCavernLockBenefit => - zone.LocalEvents ! LocalServiceMessage( + zone.LocalEvents ! MessageEnvelope( zone.id, SendResponse(PlanetsideAttributeMessage(building.GUID, 67, 0)) ) diff --git a/src/main/scala/net/psforever/actors/zone/building/CavernFacilityLogic.scala b/src/main/scala/net/psforever/actors/zone/building/CavernFacilityLogic.scala index c6a0d0e1e..b09d15dea 100644 --- a/src/main/scala/net/psforever/actors/zone/building/CavernFacilityLogic.scala +++ b/src/main/scala/net/psforever/actors/zone/building/CavernFacilityLogic.scala @@ -7,7 +7,8 @@ import net.psforever.actors.commands.NtuCommand import net.psforever.actors.zone.{BuildingActor, BuildingControlDetails, ZoneActor} import net.psforever.objects.serverobject.structures.{Amenity, Building, StructureType} import net.psforever.objects.serverobject.terminals.capture.{CaptureTerminal, CaptureTerminalAware, CaptureTerminalAwareBehavior} -import net.psforever.services.galaxy.{GalaxyAction, GalaxyServiceMessage} +import net.psforever.services.base.envelope.MessageEnvelope +import net.psforever.services.galaxy.GalaxyAction import net.psforever.services.local.support.{HackClearActor, HackClearEnvelope} import net.psforever.types.PlanetSideEmpire @@ -57,7 +58,7 @@ case object CavernFacilityLogic }) // No map update needed - will be sent by `HackCaptureActor` when required case _ => - details.galaxyService ! GalaxyServiceMessage(GalaxyAction.MapUpdate(details.building.infoUpdateMessage())) + details.galaxyService ! MessageEnvelope("", GalaxyAction.MapUpdate(details.building.infoUpdateMessage())) } Behaviors.same } diff --git a/src/main/scala/net/psforever/actors/zone/building/FacilityLogic.scala b/src/main/scala/net/psforever/actors/zone/building/FacilityLogic.scala index 2998750a9..db12a7555 100644 --- a/src/main/scala/net/psforever/actors/zone/building/FacilityLogic.scala +++ b/src/main/scala/net/psforever/actors/zone/building/FacilityLogic.scala @@ -7,7 +7,8 @@ import net.psforever.actors.commands.NtuCommand import net.psforever.actors.zone.{BuildingActor, BuildingControlDetails} import net.psforever.objects.serverobject.structures.{Amenity, Building} import net.psforever.objects.serverobject.terminals.capture.{CaptureTerminal, CaptureTerminalAware, CaptureTerminalAwareBehavior} -import net.psforever.services.galaxy.{GalaxyAction, GalaxyServiceMessage} +import net.psforever.services.base.envelope.MessageEnvelope +import net.psforever.services.galaxy.GalaxyAction import net.psforever.services.local.support.{HackClearActor, HackClearEnvelope} import net.psforever.types.PlanetSideEmpire @@ -57,7 +58,7 @@ case object FacilityLogic }) // No map update needed - will be sent by `HackCaptureActor` when required case _ => - details.galaxyService ! GalaxyServiceMessage(GalaxyAction.MapUpdate(details.building.infoUpdateMessage())) + details.galaxyService ! MessageEnvelope("", GalaxyAction.MapUpdate(details.building.infoUpdateMessage())) } Behaviors.same } diff --git a/src/main/scala/net/psforever/actors/zone/building/MajorFacilityLogic.scala b/src/main/scala/net/psforever/actors/zone/building/MajorFacilityLogic.scala index b12bf2ab9..c53f8406d 100644 --- a/src/main/scala/net/psforever/actors/zone/building/MajorFacilityLogic.scala +++ b/src/main/scala/net/psforever/actors/zone/building/MajorFacilityLogic.scala @@ -13,14 +13,14 @@ import net.psforever.objects.serverobject.resourcesilo.ResourceSiloControl import net.psforever.objects.serverobject.structures.{Amenity, Building} import net.psforever.objects.serverobject.terminals.capture.{CaptureTerminal, CaptureTerminalAware, CaptureTerminalAwareBehavior} import net.psforever.objects.sourcing.PlayerSource -import net.psforever.packet.game.PlanetsideAttributeMessage +import net.psforever.packet.game.{GenericObjectActionMessage, PlanetsideAttributeMessage} import net.psforever.services.InterstellarClusterService -import net.psforever.services.avatar.AvatarServiceMessage +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.services.base.message.{GenericObjectAction, PlanetsideAttribute, SendResponse} -import net.psforever.services.galaxy.{GalaxyAction, GalaxyServiceMessage} -import net.psforever.services.local.LocalServiceMessage +import net.psforever.services.galaxy.GalaxyAction import net.psforever.services.local.support.{CaptureEnvelope, HackCaptureActor, HackClearActor, HackClearEnvelope} -import net.psforever.types.PlanetSideEmpire +import net.psforever.services.local.LocalAction +import net.psforever.types.{PlanetSideEmpire, PlanetSideGeneratorState} /** * A package class that conveys the important information for handling facility updates. @@ -119,7 +119,7 @@ case object MajorFacilityLogic .filter(amenity => applicable.contains(amenity.Definition)) .foreach { _.Actor ! msg } case _ => - details.galaxyService ! GalaxyServiceMessage(GalaxyAction.MapUpdate(details.building.infoUpdateMessage())) + details.galaxyService ! MessageEnvelope("", GalaxyAction.MapUpdate(details.building.infoUpdateMessage())) } Behaviors.same } @@ -206,7 +206,7 @@ case object MajorFacilityLogic val guid = building.GUID val msg = GenericObjectAction(guid, 15) building.PlayersInSOI.foreach { player => - events ! AvatarServiceMessage(player.Name, msg) + events ! MessageEnvelope(player.Name, msg) } false case Some(GeneratorControl.Event.Critical) => @@ -214,7 +214,7 @@ case object MajorFacilityLogic val guid = building.GUID val msg = PlanetsideAttribute(guid, 46, 1) building.PlayersInSOI.foreach { player => - events ! AvatarServiceMessage(player.Name, msg) + events ! MessageEnvelope(player.Name, msg) } true case Some(GeneratorControl.Event.Destabilized) => @@ -222,10 +222,10 @@ case object MajorFacilityLogic val guid = building.GUID val msg = GenericObjectAction(guid, 16) building.PlayersInSOI.foreach { player => - events ! AvatarServiceMessage(player.Name, msg) + events ! MessageEnvelope(player.Name, msg) } if (building.hasCavernLockBenefit) { - zone.LocalEvents ! LocalServiceMessage( + zone.LocalEvents ! MessageEnvelope( zone.id, SendResponse(PlanetsideAttributeMessage(building.GUID, 67, 0)) ) @@ -238,7 +238,7 @@ case object MajorFacilityLogic val zone = building.Zone val msg = PlanetsideAttribute(building.GUID, 46, 2) building.PlayersInSOI.foreach { player => - zone.AvatarEvents ! AvatarServiceMessage(player.Name, msg) + zone.AvatarEvents ! MessageEnvelope(player.Name, msg) } //??? true case Some(GeneratorControl.Event.Normal) => @@ -248,12 +248,14 @@ case object MajorFacilityLogic powerRestored(details) val events = zone.AvatarEvents val guid = building.GUID - val msg1 = PlanetsideAttribute(guid, 46, 0) - val msg2 = GenericObjectAction(guid, 17) + //1. reset ???; might be global? + //2. This facility's generator is back on line + val list = SendResponse(List( + PlanetsideAttributeMessage(guid, 46, 0), + GenericObjectActionMessage(guid, 17) + )) building.PlayersInSOI.foreach { player => - val name = player.Name - events ! AvatarServiceMessage(name, msg1) //reset ???; might be global? - events ! AvatarServiceMessage(name, msg2) //This facility's generator is back on line + events ! MessageEnvelope(player.Name, list) } true case _ => @@ -304,10 +306,12 @@ case object MajorFacilityLogic building.Amenities.foreach { amenity => amenity.Actor ! powerMsg } - //amenities disabled; red warning lights - events ! AvatarServiceMessage(zoneId, PlanetsideAttribute(guid, 48, 1)) - //disable spawn target on deployment map - events ! AvatarServiceMessage(zoneId, PlanetsideAttribute(guid, 38, 0)) + //1. amenities disabled; red warning lights + //2 .disable spawn target on deployment map + events ! MessageEnvelope( + zoneId, + SendResponse(List(PlanetsideAttributeMessage(guid, 48, 1), PlanetsideAttributeMessage(guid, 38, 0))) + ) Behaviors.same } @@ -327,10 +331,12 @@ case object MajorFacilityLogic building.Amenities.foreach { amenity => amenity.Actor ! powerMsg } - //amenities enabled; normal lights - events ! AvatarServiceMessage(zoneId, PlanetsideAttribute(guid, 48, 0)) - //enable spawn target on deployment map - events ! AvatarServiceMessage(zoneId, PlanetsideAttribute(guid, 38, 1)) + //1. amenities enabled; normal lights + //2. enable spawn target on deployment map + events ! MessageEnvelope( + zoneId, + SendResponse(List(PlanetsideAttributeMessage(guid, 48, 0), PlanetsideAttributeMessage(guid, 38, 1))) + ) Behaviors.same } diff --git a/src/main/scala/net/psforever/actors/zone/building/WarpGateLogic.scala b/src/main/scala/net/psforever/actors/zone/building/WarpGateLogic.scala index 05cad4278..2553a30fd 100644 --- a/src/main/scala/net/psforever/actors/zone/building/WarpGateLogic.scala +++ b/src/main/scala/net/psforever/actors/zone/building/WarpGateLogic.scala @@ -6,7 +6,8 @@ import akka.actor.typed.scaladsl.Behaviors import net.psforever.actors.commands.NtuCommand import net.psforever.actors.zone.BuildingActor import net.psforever.objects.serverobject.structures.{Amenity, Building, WarpGate} -import net.psforever.services.galaxy.{GalaxyAction, GalaxyServiceMessage} +import net.psforever.services.base.envelope.MessageEnvelope +import net.psforever.services.galaxy.GalaxyAction import net.psforever.types.PlanetSideEmpire import net.psforever.util.Config @@ -182,7 +183,7 @@ case object WarpGateLogic val pairedWgFaction = pairedWg.Faction if (pairedWgFaction != terminalWgFaction) { pairedWg.Faction = terminalWgFaction - details.galaxyService ! GalaxyServiceMessage(GalaxyAction.MapUpdate(pairedWg.infoUpdateMessage())) + details.galaxyService ! MessageEnvelope("", GalaxyAction.MapUpdate(pairedWg.infoUpdateMessage())) } //the terminal warpgate can not be considered broadcast for other faction if (terminalWg.AllowBroadcastFor.contains(pairedWgFaction)) { @@ -209,7 +210,7 @@ case object WarpGateLogic ) warpgate.AllowBroadcastFor = setBroadcastTo (setBroadcastTo ++ previousAllowances).foreach { faction => - events ! GalaxyServiceMessage(faction.toString, msg) + events ! MessageEnvelope(faction.toString, msg) } } diff --git a/src/main/scala/net/psforever/login/WorldSession.scala b/src/main/scala/net/psforever/login/WorldSession.scala index dd9a137c0..25ebec529 100644 --- a/src/main/scala/net/psforever/login/WorldSession.scala +++ b/src/main/scala/net/psforever/login/WorldSession.scala @@ -15,7 +15,8 @@ import net.psforever.objects.sourcing.AmenitySource import net.psforever.objects.vital.TerminalUsedActivity import net.psforever.objects.zones.Zone import net.psforever.types.{ExoSuitType, PlanetSideGUID, TransactionType, Vector3} -import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage} +import net.psforever.services.avatar.AvatarAction +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.services.base.message.ObjectDelete import scala.concurrent.ExecutionContext.Implicits.global @@ -326,7 +327,7 @@ object WorldSession { case _ => forcedTolowerRaisedArm(localPlayer, localPlayer.GUID, localZone) localPlayer.DrawnSlot = localSlot - localZone.AvatarEvents ! AvatarServiceMessage(localZone.id, localGUID, AvatarAction.ObjectHeld(localSlot, localSlot)) + localZone.AvatarEvents ! MessageEnvelope(localZone.id, localGUID, AvatarAction.ObjectHeld(localSlot, localSlot)) } Future(this) } @@ -367,7 +368,7 @@ object WorldSession { localZone.GUID(item_guid) match { case Some(_) => () case None => //acting on old data? - localZone.AvatarEvents ! AvatarServiceMessage(localZone.id, ObjectDelete(item_guid)) + localZone.AvatarEvents ! MessageEnvelope(localZone.id, ObjectDelete(item_guid)) } case _ => () } @@ -526,7 +527,6 @@ object WorldSession { * Failure of this process is not supported and may lead to irregular behavior. * @see `ActorRef` * @see `AvatarAction.ObjectDelete` - * @see `AvatarServiceMessage` * @see `Containable.MoveItem` * @see `Container` * @see `Equipment` @@ -591,7 +591,7 @@ object WorldSession { localGUID match { case Some(guid) => //see LockerContainerControl.RemoveItemFromSlotCallback - localSource.Zone.AvatarEvents ! AvatarServiceMessage(localChannel, ObjectDelete(guid)) + localSource.Zone.AvatarEvents ! MessageEnvelope(localChannel, ObjectDelete(guid)) case None => () } val moveResult = ask(localDestination.Actor, Containable.PutItemInSlotOrAway(localItem, Some(localDestSlot))) @@ -616,8 +616,7 @@ object WorldSession { * Remove an item from a player's locker inventory. * Failure of this process is not supported and may lead to irregular behavior. * @see `ActorRef` - * @see `AvatarAction.ObjectDelete` - * @see `AvatarServiceMessage` + * @see `ObjectDelete` * @see `Containable.MoveItem` * @see `Container` * @see `Equipment` @@ -693,7 +692,7 @@ object WorldSession { localGUID match { case Some(guid) => //see LockerContainerControl.RemoveItemFromSlotCallback - localSource.Zone.AvatarEvents ! AvatarServiceMessage(localChannel, ObjectDelete(guid)) + localSource.Zone.AvatarEvents ! MessageEnvelope(localChannel, ObjectDelete(guid)) case None => () } val moveResult = ask(localDestination.Actor, Containable.PutItemInSlotOrAway(localItem, Some(localDestSlot))) @@ -730,8 +729,7 @@ object WorldSession { * If the player's already-drawn hand is the same as the one that will hold the grenade (first sidearm holster), * treat it like the sidearm occupier rather than the already-drawn weapon - * the old weapon goes into the backpack or onto the ground. - * @see `AvatarAction.ObjectHeld` - * @see `AvatarServiceMessage` + * @see `ObjectHeld` * @see `Containable.RemoveItemFromSlot` * @see `countRestrictAttempts` * @see `forcedTolowerRaisedArm` @@ -783,7 +781,7 @@ object WorldSession { } //put up hand with grenade in it tplayer.DrawnSlot = slotNum - zone.AvatarEvents ! AvatarServiceMessage(zone.id, guid, AvatarAction.ObjectHeld(slotNum, slotNum)) + zone.AvatarEvents ! MessageEnvelope(zone.id, guid, AvatarAction.ObjectHeld(slotNum, slotNum)) log.info(s"${tplayer.Name} has quickly drawn a ${grenade.Definition.Name}") None case None => @@ -857,8 +855,7 @@ object WorldSession { /** * If the player has a raised arm, lower it. * Do it manually, bypassing the checks in the normal procedure. - * @see `AvatarAction.ObjectHeld` - * @see `AvatarServiceMessage` + * @see `ObjectHeld` * @see `Player.DrawnSlot` * @see `Player.HandsDownSlot` * @param tplayer the player @@ -870,7 +867,7 @@ object WorldSession { val slot = tplayer.DrawnSlot if (slot != Player.HandsDownSlot) { tplayer.DrawnSlot = Player.HandsDownSlot - zone.AvatarEvents ! AvatarServiceMessage(zone.id, guid, AvatarAction.ObjectHeld(Player.HandsDownSlot, slot)) + zone.AvatarEvents ! MessageEnvelope(zone.id, guid, AvatarAction.ObjectHeld(Player.HandsDownSlot, slot)) true } else { false @@ -933,7 +930,7 @@ object WorldSession { player.ContributionFrom(term) } } - player.Zone.AvatarEvents ! AvatarServiceMessage( + player.Zone.AvatarEvents ! MessageEnvelope( player.Name, AvatarAction.TerminalOrderResult(guid, transaction, result) ) diff --git a/src/main/scala/net/psforever/objects/BoomerDeployable.scala b/src/main/scala/net/psforever/objects/BoomerDeployable.scala index 4e9f4cf3e..84285db2c 100644 --- a/src/main/scala/net/psforever/objects/BoomerDeployable.scala +++ b/src/main/scala/net/psforever/objects/BoomerDeployable.scala @@ -11,9 +11,9 @@ import net.psforever.objects.vital.Vitality import net.psforever.objects.vital.etc.TriggerUsedReason import net.psforever.objects.vital.interaction.DamageInteraction import net.psforever.objects.zones.Zone -import net.psforever.services.avatar.AvatarServiceMessage +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.services.base.message.ObjectDelete -import net.psforever.services.local.{LocalAction, LocalServiceMessage} +import net.psforever.services.local.LocalAction import net.psforever.types.PlanetSideEmpire import scala.annotation.unused @@ -87,9 +87,9 @@ class BoomerDeployableControl(mine: BoomerDeployable) val events = mine.Zone.LocalEvents val msg = LocalAction.DeployItem(mine) originalOwner.collect { name => - events ! LocalServiceMessage(name, msg) + events ! MessageEnvelope(name, msg) } - events ! LocalServiceMessage(player.Name, msg) + events ! MessageEnvelope(player.Name, msg) } override def dismissDeployable() : Unit = { @@ -107,7 +107,7 @@ class BoomerDeployableControl(mine: BoomerDeployable) zone.Ground ! Zone.Ground.RemoveItem(guid) case _ => () } - zone.AvatarEvents! AvatarServiceMessage( + zone.AvatarEvents! MessageEnvelope( zone.id, ObjectDelete(guid) ) diff --git a/src/main/scala/net/psforever/objects/Deployables.scala b/src/main/scala/net/psforever/objects/Deployables.scala index 961ba941d..6fa64bd33 100644 --- a/src/main/scala/net/psforever/objects/Deployables.scala +++ b/src/main/scala/net/psforever/objects/Deployables.scala @@ -9,8 +9,9 @@ import net.psforever.objects.ce.{Deployable, DeployedItem} import net.psforever.objects.sourcing.{PlayerSource, SourceEntry} import net.psforever.objects.zones.Zone import net.psforever.packet.game._ +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.types.PlanetSideGUID -import net.psforever.services.local.{LocalAction, LocalServiceMessage} +import net.psforever.services.local.LocalAction object Deployables { //private val log = org.log4s.getLogger("Deployables") @@ -92,7 +93,7 @@ object Deployables { } target.AssignOwnership(None) } - events ! LocalServiceMessage( + events ! MessageEnvelope( s"${target.Faction}", LocalAction.DeployableMapIcon(DeploymentAction.Dismiss, DeployableInfo(target.GUID, Deployable.Icon(item), target.Position, PlanetSideGUID(0))) ) diff --git a/src/main/scala/net/psforever/objects/ExplosiveDeployable.scala b/src/main/scala/net/psforever/objects/ExplosiveDeployable.scala index adf103058..91f3883f1 100644 --- a/src/main/scala/net/psforever/objects/ExplosiveDeployable.scala +++ b/src/main/scala/net/psforever/objects/ExplosiveDeployable.scala @@ -18,8 +18,9 @@ import net.psforever.objects.vital.projectile.ProjectileReason import net.psforever.objects.zones.Zone import net.psforever.types.Vector3 import net.psforever.services.Service -import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage} -import net.psforever.services.local.{LocalAction, LocalServiceMessage} +import net.psforever.services.avatar.AvatarAction +import net.psforever.services.base.envelope.MessageEnvelope +import net.psforever.services.local.LocalAction import scala.annotation.unused import scala.concurrent.duration._ @@ -182,7 +183,7 @@ object ExplosiveDeployableControl { target.Health = 1 // short-circuit logic in DestructionAwareness val zone = target.Zone zone.Activity ! Zone.HotSpot.Activity(cause) - zone.LocalEvents ! LocalServiceMessage(zone.id, LocalAction.Detonate(target.GUID, target)) + zone.LocalEvents ! MessageEnvelope(zone.id, LocalAction.Detonate(target.GUID, target)) Zone.serverSideDamage( zone, target, @@ -210,12 +211,12 @@ object ExplosiveDeployableControl { Some(if (target.Jammed || target.Destroyed) 0 seconds else 500 milliseconds) ) target.Destroyed = true - zone.AvatarEvents ! AvatarServiceMessage( + zone.AvatarEvents ! MessageEnvelope( zone.id, AvatarAction.Destroy(target.GUID, attribution, Service.defaultPlayerGUID, target.Position) ) if (target.Health == 0) { - zone.LocalEvents ! LocalServiceMessage( + zone.LocalEvents ! MessageEnvelope( zone.id, LocalAction.TriggerEffect("detonate_damaged_mine", target.GUID) ) diff --git a/src/main/scala/net/psforever/objects/FieldTurretDeployable.scala b/src/main/scala/net/psforever/objects/FieldTurretDeployable.scala index b098e17f0..2ebf81e88 100644 --- a/src/main/scala/net/psforever/objects/FieldTurretDeployable.scala +++ b/src/main/scala/net/psforever/objects/FieldTurretDeployable.scala @@ -12,8 +12,8 @@ import net.psforever.objects.serverobject.{CommonMessages, PlanetSideServerObjec import net.psforever.objects.sourcing.{PlayerSource, SourceEntry, TurretSource} import net.psforever.objects.vital.{DismountingActivity, InGameActivity, MountingActivity, ShieldCharge} import net.psforever.packet.game.HackState1 +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.services.base.message.PlanetsideAttribute -import net.psforever.services.vehicle.VehicleServiceMessage import scala.annotation.unused @@ -98,7 +98,7 @@ class FieldTurretControl(turret: TurretDeployable) if (canChargeShields) { turret.LogActivity(ShieldCharge(amount, motivator)) turret.Shields = turret.Shields + amount - turret.Zone.VehicleEvents ! VehicleServiceMessage( + turret.Zone.VehicleEvents ! MessageEnvelope( s"${turret.Actor}", PlanetsideAttribute(turret.GUID, turret.Definition.shieldUiAttribute, turret.Shields) ) diff --git a/src/main/scala/net/psforever/objects/Players.scala b/src/main/scala/net/psforever/objects/Players.scala index 337491e3d..c5df2a0cb 100644 --- a/src/main/scala/net/psforever/objects/Players.scala +++ b/src/main/scala/net/psforever/objects/Players.scala @@ -20,9 +20,10 @@ import net.psforever.objects.zones.Zone import net.psforever.packet.game._ import net.psforever.types.{ChatMessageType, ExoSuitType, PlanetSideGUID, Vector3} import net.psforever.services.Service -import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage} +import net.psforever.services.avatar.AvatarAction +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.services.base.message.{ObjectDelete, SendResponse} -import net.psforever.services.local.{LocalAction, LocalServiceMessage} +import net.psforever.services.local.LocalAction import scala.annotation.tailrec @@ -49,7 +50,7 @@ object Players { ) { val events = target.Zone.AvatarEvents val uname = user.Name - events ! AvatarServiceMessage( + events ! MessageEnvelope( uname, SendResponse(RepairMessage(target.GUID, progress.toInt)) ) @@ -317,7 +318,7 @@ object Players { ): Boolean = { if (player.Zone == obj.Zone && addFunc(obj)) { obj.Actor ! Deployable.Ownership(player) - player.Zone.LocalEvents ! LocalServiceMessage(player.Name, LocalAction.DeployableUIFor(obj.Definition.Item)) + player.Zone.LocalEvents ! MessageEnvelope(player.Name, LocalAction.DeployableUIFor(obj.Definition.Item)) true } else { false @@ -334,7 +335,7 @@ object Players { //sent to avatar event bus to preempt additional tool management buildCooldownReset(zone, channel, obj.GUID) //sent to local event bus to cooperate with deployable management - zone.LocalEvents ! LocalServiceMessage( + zone.LocalEvents ! MessageEnvelope( channel, LocalAction.DeployableUIFor(obj.Definition.Item) ) @@ -348,7 +349,7 @@ object Players { */ def buildCooldownReset(zone: Zone, channel: String, guid: PlanetSideGUID): Unit = { //sent to avatar event bus to preempt additional tool management - zone.AvatarEvents ! AvatarServiceMessage(channel, SendResponse(GenericObjectActionMessage(guid, 21))) + zone.AvatarEvents ! MessageEnvelope(channel, SendResponse(GenericObjectActionMessage(guid, 21))) } /** @@ -404,7 +405,7 @@ object Players { } }) { val zone = player.Zone - zone.AvatarEvents ! AvatarServiceMessage(zone.id, ObjectDelete(tool.GUID)) + zone.AvatarEvents ! MessageEnvelope(zone.id, ObjectDelete(tool.GUID)) true } else { false @@ -442,20 +443,20 @@ object Players { player.Inventory -= x.start obj.FireModeIndex = fireMode //TODO any penalty for being handed an OCM version of the tool? - events ! AvatarServiceMessage( + events ! MessageEnvelope( zone.id, AvatarAction.EquipmentInHand(pguid, index, obj) ) if (obj.AmmoTypeIndex != ammoType) { obj.AmmoTypeIndex = ammoType - events ! AvatarServiceMessage( + events ! MessageEnvelope( name, SendResponse(ChangeAmmoMessage(obj.GUID, ammoType)) ) } if (player.DrawnSlot == Player.HandsDownSlot) { player.DrawnSlot = index - events ! AvatarServiceMessage(zone.id, pguid, AvatarAction.ObjectHeld(index, index)) + events ! MessageEnvelope(zone.id, pguid, AvatarAction.ObjectHeld(index, index)) } } case Nil => ; //no replacements found diff --git a/src/main/scala/net/psforever/objects/SensorDeployable.scala b/src/main/scala/net/psforever/objects/SensorDeployable.scala index ce7fd8a74..77e812a23 100644 --- a/src/main/scala/net/psforever/objects/SensorDeployable.scala +++ b/src/main/scala/net/psforever/objects/SensorDeployable.scala @@ -12,10 +12,10 @@ import net.psforever.objects.serverobject.hackable.Hackable import net.psforever.objects.serverobject.repair.RepairableEntity import net.psforever.objects.vital.SimpleResolutions import net.psforever.objects.vital.interaction.DamageResult +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.types.{PlanetSideGUID, Vector3} import net.psforever.services.base.message.PlanetsideAttribute -import net.psforever.services.local.{LocalAction, LocalServiceMessage} -import net.psforever.services.vehicle.VehicleServiceMessage +import net.psforever.services.local.LocalAction import scala.annotation.unused import scala.concurrent.duration._ @@ -75,7 +75,7 @@ class SensorDeployableControl(sensor: SensorDeployable) override def StartJammeredSound(target: Any, dur: Int): Unit = target match { case obj: PlanetSideServerObject if !jammedSound => - obj.Zone.VehicleEvents ! VehicleServiceMessage( + obj.Zone.VehicleEvents ! MessageEnvelope( obj.Zone.id, PlanetsideAttribute(obj.GUID, 54, 1) ) @@ -87,7 +87,7 @@ class SensorDeployableControl(sensor: SensorDeployable) target match { case obj: PlanetSideServerObject with JammableUnit => val zone = obj.Zone - zone.LocalEvents ! LocalServiceMessage( + zone.LocalEvents ! MessageEnvelope( zone.id, LocalAction.TriggerEffectInfo(obj.GUID, "on", unk1=false, 1000) ) @@ -99,7 +99,7 @@ class SensorDeployableControl(sensor: SensorDeployable) target match { case obj: PlanetSideServerObject if jammedSound => val zone = obj.Zone - zone.VehicleEvents ! VehicleServiceMessage( + zone.VehicleEvents ! MessageEnvelope( zone.id, PlanetsideAttribute(obj.GUID, 54, 0) ) @@ -112,7 +112,7 @@ class SensorDeployableControl(sensor: SensorDeployable) target match { case obj: PlanetSideServerObject with JammableUnit if obj.Jammed => val zone = sensor.Zone - zone.LocalEvents ! LocalServiceMessage( + zone.LocalEvents ! MessageEnvelope( zone.id, LocalAction.TriggerEffectInfo(obj.GUID, "on", unk1=true, 1000) ) @@ -124,7 +124,7 @@ class SensorDeployableControl(sensor: SensorDeployable) override def finalizeDeployable(callback: ActorRef) : Unit = { super.finalizeDeployable(callback) val zone = sensor.Zone - zone.LocalEvents ! LocalServiceMessage( + zone.LocalEvents ! MessageEnvelope( zone.id, LocalAction.TriggerEffectInfo(sensor.GUID, "on", unk1=true, 1000) ) @@ -141,7 +141,7 @@ object SensorDeployableControl { def DestructionAwareness(target: Deployable, attribution: PlanetSideGUID): Unit = { Deployables.AnnounceDestroyDeployable(target, Some(1 seconds)) val zone = target.Zone - zone.LocalEvents ! LocalServiceMessage( + zone.LocalEvents ! MessageEnvelope( zone.id, LocalAction.TriggerEffectInfo(target.GUID, "on", unk1=false, 1000) ) @@ -157,7 +157,7 @@ object SensorDeployableControl { pos.z + math.cos(yRadians).toFloat * 0.875f ) } - zone.LocalEvents ! LocalServiceMessage( + zone.LocalEvents ! MessageEnvelope( zone.id, LocalAction.TriggerEffectLocation("motion_sensor_destroyed", explosionPos, ang) ) diff --git a/src/main/scala/net/psforever/objects/ShieldGeneratorDeployable.scala b/src/main/scala/net/psforever/objects/ShieldGeneratorDeployable.scala index 96a80ef25..42282ca57 100644 --- a/src/main/scala/net/psforever/objects/ShieldGeneratorDeployable.scala +++ b/src/main/scala/net/psforever/objects/ShieldGeneratorDeployable.scala @@ -13,9 +13,9 @@ import net.psforever.objects.serverobject.hackable.Hackable import net.psforever.objects.serverobject.repair.RepairableEntity import net.psforever.objects.vital.interaction.DamageResult import net.psforever.objects.vital.resolution.ResolutionCalculations +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.services.base.message.PlanetsideAttribute import net.psforever.types.PlanetSideGUID -import net.psforever.services.vehicle.VehicleServiceMessage class ShieldGeneratorDeployable(cdef: ShieldGeneratorDefinition) extends Deployable(cdef) @@ -125,7 +125,7 @@ class ShieldGeneratorControl(gen: ShieldGeneratorDeployable) override def StartJammeredStatus(target: Any, dur: Int): Unit = target match { case obj: PlanetSideServerObject with JammableUnit => - obj.Zone.VehicleEvents ! VehicleServiceMessage( + obj.Zone.VehicleEvents ! MessageEnvelope( obj.Zone.id, PlanetsideAttribute(obj.GUID, 27, 1) ) @@ -138,7 +138,7 @@ class ShieldGeneratorControl(gen: ShieldGeneratorDeployable) override def CancelJammeredStatus(target: Any): Unit = { target match { case obj: PlanetSideServerObject with JammableUnit if obj.Jammed => - obj.Zone.VehicleEvents ! VehicleServiceMessage( + obj.Zone.VehicleEvents ! MessageEnvelope( obj.Zone.id, PlanetsideAttribute(obj.GUID, 27, 0) ) @@ -160,7 +160,7 @@ object ShieldGeneratorControl { //shields if (damageToShields) { val zone = target.Zone - zone.VehicleEvents ! VehicleServiceMessage( + zone.VehicleEvents ! MessageEnvelope( zone.id, PlanetsideAttribute(target.GUID, 68, target.Shields) ) diff --git a/src/main/scala/net/psforever/objects/TelepadDeployable.scala b/src/main/scala/net/psforever/objects/TelepadDeployable.scala index a0cfa954a..c524f7f24 100644 --- a/src/main/scala/net/psforever/objects/TelepadDeployable.scala +++ b/src/main/scala/net/psforever/objects/TelepadDeployable.scala @@ -11,7 +11,8 @@ import net.psforever.objects.vehicles.Utility.InternalTelepad import net.psforever.objects.vital.SimpleResolutions import net.psforever.objects.vital.interaction.DamageResult import net.psforever.objects.zones.Zone -import net.psforever.services.local.{LocalAction, LocalServiceMessage} +import net.psforever.services.base.envelope.MessageEnvelope +import net.psforever.services.local.LocalAction import scala.concurrent.duration._ @@ -133,6 +134,6 @@ object TelepadControl { } def TelepadError(zone: Zone, channel: String, msg: String): Unit = { - zone.LocalEvents ! LocalServiceMessage(channel, LocalAction.RouterTelepadMessage(msg)) + zone.LocalEvents ! MessageEnvelope(channel, LocalAction.RouterTelepadMessage(msg)) } } diff --git a/src/main/scala/net/psforever/objects/Tools.scala b/src/main/scala/net/psforever/objects/Tools.scala index 4c4ca573c..459e4f4ce 100644 --- a/src/main/scala/net/psforever/objects/Tools.scala +++ b/src/main/scala/net/psforever/objects/Tools.scala @@ -3,7 +3,7 @@ package net.psforever.objects import net.psforever.objects.equipment.ChargeFireModeDefinition import net.psforever.packet.game.QuantityUpdateMessage -import net.psforever.services.avatar.AvatarServiceMessage +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.services.base.message.SendResponse object Tools { @@ -22,7 +22,7 @@ object Tools { tool.FireMode match { case mode: ChargeFireModeDefinition if tool.Magazine > 0 => val magazine = tool.Magazine -= mode.RoundsPerInterval - player.Zone.AvatarEvents ! AvatarServiceMessage( + player.Zone.AvatarEvents ! MessageEnvelope( player.Name, SendResponse(QuantityUpdateMessage(tool.AmmoSlot.Box.GUID, magazine)) ) diff --git a/src/main/scala/net/psforever/objects/TurretDeployable.scala b/src/main/scala/net/psforever/objects/TurretDeployable.scala index 576a1629c..7b0cc5f3e 100644 --- a/src/main/scala/net/psforever/objects/TurretDeployable.scala +++ b/src/main/scala/net/psforever/objects/TurretDeployable.scala @@ -20,7 +20,8 @@ import net.psforever.objects.vital.resistance.StandardResistanceProfile import net.psforever.objects.vital.{SimpleResolutions, StandardVehicleResistance} import net.psforever.objects.zones.interaction.InteractsWithZone import net.psforever.packet.game.TriggeredSound -import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage} +import net.psforever.services.base.envelope.MessageEnvelope +import net.psforever.services.vehicle.VehicleAction import scala.concurrent.duration.FiniteDuration @@ -109,7 +110,7 @@ abstract class TurretDeployableControl case player: Player => seat.unmount(player) player.VehicleSeated = None - zone.VehicleEvents ! VehicleServiceMessage( + zone.VehicleEvents ! MessageEnvelope( zone.id, player.GUID, VehicleAction.KickPassenger(4, wasKickedByDriver, TurretObject.GUID) diff --git a/src/main/scala/net/psforever/objects/Vehicles.scala b/src/main/scala/net/psforever/objects/Vehicles.scala index 6c21b1bf3..8b0a43f6b 100644 --- a/src/main/scala/net/psforever/objects/Vehicles.scala +++ b/src/main/scala/net/psforever/objects/Vehicles.scala @@ -13,10 +13,10 @@ import net.psforever.objects.zones.Zone import net.psforever.packet.game.{ChatMsg, FrameVehicleStateMessage, GenericObjectActionEnum, HackMessage, HackState, HackState1, HackState7, TriggeredSound, VehicleStateMessage} import net.psforever.types.{ChatMessageType, DriveState, PlanetSideEmpire, PlanetSideGUID, Vector3} import net.psforever.services.Service -import net.psforever.services.avatar.AvatarServiceMessage +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.services.base.message.{GenericObjectAction, PlanetsideAttribute, SendResponse, SetEmpire} -import net.psforever.services.local.{LocalAction, LocalServiceMessage} -import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage} +import net.psforever.services.local.LocalAction +import net.psforever.services.vehicle.VehicleAction //import scala.concurrent.duration._ @@ -46,7 +46,7 @@ object Vehicles { val locked = VehicleLockState.Locked.id Array(0, 3).foreach(group => vehicle.PermissionGroup(group, locked)) Vehicles.ReloadAccessPermissions(vehicle, tplayer.Faction.toString) - vehicle.Zone.VehicleEvents ! VehicleServiceMessage( + vehicle.Zone.VehicleEvents ! MessageEnvelope( vehicle.Zone.id, tplayer.GUID, VehicleAction.Ownership(vehicle.GUID) @@ -90,7 +90,7 @@ object Vehicles { val empire = VehicleLockState.Empire.id (0 to 2).foreach(group => vehicle.PermissionGroup(group, empire)) ReloadAccessPermissions(vehicle, vehicle.Faction.toString) - zone.VehicleEvents ! VehicleServiceMessage( + zone.VehicleEvents ! MessageEnvelope( zone.id, VehicleAction.LoseOwnership(ownerGuid.getOrElse(Service.defaultPlayerGUID), guid) ) @@ -140,12 +140,12 @@ object Vehicles { val pguid = player.GUID if (vehicle.OwnerGuid.contains(pguid)) { vehicle.AssignOwnership(None) - //vehicle.Zone.VehicleEvents ! VehicleServiceMessage(player.Name, pguid, VehicleAction.Ownership(pguid, PlanetSideGUID(0))) + //vehicle.Zone.VehicleEvents ! MessageEnvelope(player.Name, pguid, VehicleAction.Ownership(pguid, PlanetSideGUID(0))) //val vguid = vehicle.GUID val empire = VehicleLockState.Empire.id (0 to 2).foreach(group => { vehicle.PermissionGroup(group, empire) - /*vehicle.Zone.VehicleEvents ! VehicleServiceMessage( + /*vehicle.Zone.VehicleEvents ! MessageEnvelope( s"${vehicle.Faction}", pguid, VehicleAction.SeatPermissions(pguid, vguid, group, empire) @@ -170,7 +170,7 @@ object Vehicles { def ReloadAccessPermissions(vehicle: Vehicle, toChannel: String): Unit = { val vehicle_guid = vehicle.GUID (0 to 3).foreach(group => { - vehicle.Zone.AvatarEvents ! AvatarServiceMessage( + vehicle.Zone.AvatarEvents ! MessageEnvelope( toChannel, PlanetsideAttribute(vehicle_guid, group + 10, vehicle.PermissionGroup(group).get.id) ) @@ -252,7 +252,7 @@ object Vehicles { val vehicleEvents = zone.VehicleEvents val localEvents = zone.LocalEvents val previousOwnerName = target.OwnerName.getOrElse("") - vehicleEvents ! VehicleServiceMessage( + vehicleEvents ! MessageEnvelope( zoneid, SendResponse(HackMessage(HackState1.Unk2, tGuid, hGuid, 100, 0f, HackState.Hacked, HackState7.Unk8)) ) @@ -269,7 +269,7 @@ object Vehicles { player: Player => seat.unmount(player) player.VehicleSeated = None - vehicleEvents ! VehicleServiceMessage( + vehicleEvents ! MessageEnvelope( zoneid, player.GUID, VehicleAction.KickPassenger(4, unk2 = false, tGuid) @@ -277,16 +277,16 @@ object Vehicles { } // In case BFR is occupied and may or may not be crouched if (GlobalDefinitions.isBattleFrameVehicle(target.Definition) && target.Seat(0).isDefined) { - zone.LocalEvents ! LocalServiceMessage( + zone.LocalEvents ! MessageEnvelope( zoneid, PlanetSideGUID(-1), GenericObjectAction(target.GUID, GenericObjectActionEnum.BFRShieldsDown.id) ) - zone.LocalEvents ! LocalServiceMessage( + zone.LocalEvents ! MessageEnvelope( zoneid, SendResponse( FrameVehicleStateMessage(target.GUID, 0, target.Position, target.Orientation, Some(Vector3(0f, 0f, 0f)), unk2=false, 0, 0, is_crouched=true, is_airborne=false, ascending_flight=false, 10, 0, 0))) - zone.LocalEvents ! LocalServiceMessage( + zone.LocalEvents ! MessageEnvelope( zoneid, SendResponse( VehicleStateMessage(target.GUID, 0, target.Position, target.Orientation, Some(Vector3(0f, 0f, 0f)), None, 0, 0, 15, is_decelerating=false, is_cloaked=false))) @@ -314,23 +314,23 @@ object Vehicles { Vehicles.Own(target, hacker) //todo: Send HackMessage -> HackCleared to vehicle? can be found in packet captures. Not sure if necessary. // And broadcast the faction change to other clients - zone.AvatarEvents ! AvatarServiceMessage( + zone.AvatarEvents ! MessageEnvelope( zoneid, SetEmpire(tGuid, hFaction) ) } - localEvents ! LocalServiceMessage( + localEvents ! MessageEnvelope( zoneid, hGuid, LocalAction.TriggerSound(TriggeredSound.HackVehicle, target.Position, 30, 0.49803925f) ) if (zone.Players.exists(_.name.equals(previousOwnerName))) { - localEvents ! LocalServiceMessage( + localEvents ! MessageEnvelope( previousOwnerName, SendResponse(ChatMsg(ChatMessageType.UNK_226, "@JackStolen")) ) } - localEvents ! LocalServiceMessage( + localEvents ! MessageEnvelope( hacker.Name, SendResponse(ChatMsg(ChatMessageType.UNK_226, "@JackVehicleOwned")) ) @@ -345,10 +345,10 @@ object Vehicles { util.Actor ! TelepadLike.Activate(util) } case GlobalDefinitions.ams if target.DeploymentState == DriveState.Deployed => - vehicleEvents ! VehicleServiceMessage(zone.id, VehicleAction.AMSDeploymentChange(zone)) + vehicleEvents ! MessageEnvelope(zone.id, VehicleAction.AMSDeploymentChange(zone)) case _ => () } - vehicleEvents ! VehicleServiceMessage( + vehicleEvents ! MessageEnvelope( zoneid, SendResponse(HackMessage(HackState1.Unk2, tGuid, tGuid, 0, 1L, HackState.HackCleared, HackState7.Unk8)) ) diff --git a/src/main/scala/net/psforever/objects/avatar/CorpseControl.scala b/src/main/scala/net/psforever/objects/avatar/CorpseControl.scala index aad190d15..3537cfbd7 100644 --- a/src/main/scala/net/psforever/objects/avatar/CorpseControl.scala +++ b/src/main/scala/net/psforever/objects/avatar/CorpseControl.scala @@ -8,7 +8,7 @@ import net.psforever.objects.serverobject.containable.{Containable, ContainableB import net.psforever.packet.game.{ObjectAttachMessage, ObjectCreateDetailedMessage, ObjectDetachMessage} import net.psforever.packet.game.objectcreate.ObjectCreateMessageParent import net.psforever.types.{PlanetSideEmpire, Vector3} -import net.psforever.services.avatar.AvatarServiceMessage +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.services.base.message.{ObjectDelete, SendResponse} class CorpseControl(player: Player) extends Actor with ContainableBehavior { @@ -25,7 +25,7 @@ class CorpseControl(player: Player) extends Actor with ContainableBehavior { val obj = ContainerObject obj.Find(item) match { case Some(slot) => - obj.Zone.AvatarEvents ! AvatarServiceMessage( + obj.Zone.AvatarEvents ! MessageEnvelope( player.Zone.id, SendResponse(ObjectAttachMessage(obj.GUID, item.GUID, slot)) ) @@ -40,7 +40,7 @@ class CorpseControl(player: Player) extends Actor with ContainableBehavior { val zone = obj.Zone val events = zone.AvatarEvents item.Faction = PlanetSideEmpire.NEUTRAL - events ! AvatarServiceMessage(zone.id, ObjectDelete(item.GUID)) + events ! MessageEnvelope(zone.id, ObjectDelete(item.GUID)) } def PutItemInSlotCallback(item: Equipment, slot: Int): Unit = { @@ -48,7 +48,7 @@ class CorpseControl(player: Player) extends Actor with ContainableBehavior { val zone = obj.Zone val events = zone.AvatarEvents val definition = item.Definition - events ! AvatarServiceMessage( + events ! MessageEnvelope( zone.id, SendResponse( ObjectCreateDetailedMessage( @@ -64,7 +64,7 @@ class CorpseControl(player: Player) extends Actor with ContainableBehavior { def SwapItemCallback(item: Equipment, fromSlot: Int): Unit = { val obj = ContainerObject val zone = obj.Zone - zone.AvatarEvents ! AvatarServiceMessage( + zone.AvatarEvents ! MessageEnvelope( zone.id, SendResponse(ObjectDetachMessage(obj.GUID, item.GUID, Vector3.Zero, 0f)) ) diff --git a/src/main/scala/net/psforever/objects/avatar/PlayerControl.scala b/src/main/scala/net/psforever/objects/avatar/PlayerControl.scala index 156deb8c9..f66ae7cab 100644 --- a/src/main/scala/net/psforever/objects/avatar/PlayerControl.scala +++ b/src/main/scala/net/psforever/objects/avatar/PlayerControl.scala @@ -26,8 +26,8 @@ import net.psforever.packet.game._ import net.psforever.packet.game.objectcreate.ObjectCreateMessageParent import net.psforever.types._ import net.psforever.services.Service -import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage} -import net.psforever.services.local.{LocalAction, LocalServiceMessage} +import net.psforever.services.avatar.AvatarAction +import net.psforever.services.local.LocalAction import net.psforever.objects.locker.LockerContainerControl import net.psforever.objects.serverobject.environment.interaction.RespondsToZoneEnvironment import net.psforever.objects.serverobject.repair.Repairable @@ -36,6 +36,7 @@ import net.psforever.objects.vital.collision.CollisionReason import net.psforever.objects.vital.etc.{PainboxReason, SuicideReason} import net.psforever.objects.vital.interaction.{DamageInteraction, DamageResult} import net.psforever.packet.PlanetSideGamePacket +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.services.base.message.{EventMessage, HintsAtAttacker, ObjectDelete, PlanetsideAttribute, SendResponse} import org.joda.time.{LocalDateTime, Seconds} @@ -148,11 +149,11 @@ class PlayerControl(player: Player, avatarActor: typed.ActorRef[AvatarActor.Comm if (!(player.isMoving || user.isMoving)) { //only allow stationary heals val newHealth = player.Health = originalHealth + 10 val magazine = item.Discharge() - events ! AvatarServiceMessage( + events ! MessageEnvelope( uname, SendResponse(InventoryStateMessage(item.AmmoSlot.Box.GUID, item.GUID, magazine.toLong)) ) - events ! AvatarServiceMessage(zone.id, PlanetsideAttribute(guid, 0, newHealth)) + events ! MessageEnvelope(zone.id, PlanetsideAttribute(guid, 0, newHealth)) player.LogActivity( HealFromEquipment( PlayerSource(user), @@ -172,9 +173,9 @@ class PlayerControl(player: Player, avatarActor: typed.ActorRef[AvatarActor.Comm } if (player != user) { //"Someone is trying to heal you" - events ! AvatarServiceMessage(player.Name, PlanetsideAttribute(guid, 55, 1)) + events ! MessageEnvelope(player.Name, PlanetsideAttribute(guid, 55, 1)) //progress bar remains visible for all heal attempts - events ! AvatarServiceMessage( + events ! MessageEnvelope( uname, SendResponse(RepairMessage(guid, player.Health * 100 / definition.MaxHealth)) ) @@ -214,11 +215,11 @@ class PlayerControl(player: Player, avatarActor: typed.ActorRef[AvatarActor.Comm val newArmor = player.Armor = originalArmor + Repairable.applyLevelModifier(user, item, RepairToolValue(item)).toInt + definition.RepairMod val magazine = item.Discharge() - events ! AvatarServiceMessage( + events ! MessageEnvelope( uname, SendResponse(InventoryStateMessage(item.AmmoSlot.Box.GUID, item.GUID, magazine.toLong)) ) - events ! AvatarServiceMessage(zone.id, PlanetsideAttribute(guid, 4, player.Armor)) + events ! MessageEnvelope(zone.id, PlanetsideAttribute(guid, 4, player.Armor)) player.LogActivity( RepairFromEquipment( PlayerSource(user), @@ -239,13 +240,13 @@ class PlayerControl(player: Player, avatarActor: typed.ActorRef[AvatarActor.Comm if (player != user) { if (player.isAlive) { //"Someone is trying to repair you" gets strobed twice for visibility - val msg = AvatarServiceMessage(player.Name, PlanetsideAttribute(guid, 56, 1)) + val msg = MessageEnvelope(player.Name, PlanetsideAttribute(guid, 56, 1)) events ! msg import scala.concurrent.ExecutionContext.Implicits.global context.system.scheduler.scheduleOnce(250 milliseconds, events, msg) } //progress bar remains visible for all repair attempts - events ! AvatarServiceMessage( + events ! MessageEnvelope( uname, SendResponse(RepairMessage(guid, player.Armor * 100 / player.MaxArmor)) ) @@ -312,16 +313,16 @@ class PlayerControl(player: Player, avatarActor: typed.ActorRef[AvatarActor.Comm avatarActor ! AvatarActor.UpdateUseTime(kdef) player.Slot(slot).Equipment = None //remove from slot immediately; must exist on client for now TaskWorkflow.execute(GUIDTask.unregisterEquipment(zone.GUID, kit)) - zone.AvatarEvents ! AvatarServiceMessage( + zone.AvatarEvents ! MessageEnvelope( zone.id, PlanetsideAttribute(player.GUID, attribute, value) ) - zone.AvatarEvents ! AvatarServiceMessage( + zone.AvatarEvents ! MessageEnvelope( player.Name, AvatarAction.UseKit(kguid, kdef.ObjectId) ) case _ => - player.Zone.AvatarEvents ! AvatarServiceMessage( + player.Zone.AvatarEvents ! MessageEnvelope( player.Name, AvatarAction.KitNotUsed(kit.GUID, msg) ) @@ -335,14 +336,14 @@ class PlayerControl(player: Player, avatarActor: typed.ActorRef[AvatarActor.Comm val events = player.Zone.AvatarEvents val resistance = player.TestArmMotion(slot) if (resistance && !updateMyHolsterArm) { - events ! AvatarServiceMessage( + events ! MessageEnvelope( player.Name, player.GUID, AvatarAction.ObjectHeld(before, -1) ) } else if ((!resistance && before != slot && (player.DrawnSlot = slot) != before) && ItemSwapSlot != before) { val mySlot = if (updateMyHolsterArm) slot else -1 //use as a short-circuit - events ! AvatarServiceMessage( + events ! MessageEnvelope( Players.ZoneChannelIfSpectating(player), player.GUID, AvatarAction.ObjectHeld(mySlot, player.LastDrawnSlot) @@ -355,7 +356,7 @@ class PlayerControl(player: Player, avatarActor: typed.ActorRef[AvatarActor.Comm log.info(s"${player.Name} has drawn a ${unholsteredItem.Definition.Name} from its holster") if (unholsteredItem.Definition == GlobalDefinitions.remote_electronics_kit) { //rek beam/icon colour must match the player's correct hack level - events ! AvatarServiceMessage( + events ! MessageEnvelope( Players.ZoneChannelIfSpectating(player), unholsteredItem.GUID, PlanetsideAttribute(unholsteredItem.GUID, 116, player.avatar.hackingSkillLevel()) @@ -370,7 +371,7 @@ class PlayerControl(player: Player, avatarActor: typed.ActorRef[AvatarActor.Comm //make sure the player didn't just initialte an orbital strike. If not (the if below is true), make sure waypoint is removed if (holsteredEquipment.Definition == GlobalDefinitions.command_detonater && player.avatar.cr.value > 3 && !player.avatar.cooldowns.purchase.exists(os => os._1 == "orbital_strike" && Seconds.secondsBetween(os._2, LocalDateTime.now()).getSeconds < 12)) { - player.Zone.LocalEvents ! LocalServiceMessage( + player.Zone.LocalEvents ! MessageEnvelope( s"${player.Faction}", PlanetSideGUID(-1), SendResponse(OrbitalStrikeWaypointMessage(player.GUID, None)) @@ -398,7 +399,7 @@ class PlayerControl(player: Player, avatarActor: typed.ActorRef[AvatarActor.Comm if (exosuit == ExoSuitType.MAX) { player.ResistArmMotion(PlayerControl.maxRestriction) } - player.Zone.AvatarEvents ! AvatarServiceMessage( + player.Zone.AvatarEvents ! MessageEnvelope( player.Name, AvatarAction.TerminalOrderResult(msg.terminal_guid, msg.transaction_type, result) ) @@ -530,7 +531,7 @@ class PlayerControl(player: Player, avatarActor: typed.ActorRef[AvatarActor.Comm Deployables.initializeConstructionItem(player.avatar.certifications, citem) } val zone = player.Zone - zone.AvatarEvents ! AvatarServiceMessage( + zone.AvatarEvents ! MessageEnvelope( Players.ZoneChannelIfSpectating(player), AvatarAction.ChangeLoadout( player.GUID, @@ -546,7 +547,7 @@ class PlayerControl(player: Player, avatarActor: typed.ActorRef[AvatarActor.Comm itemsToDrop ) ) - zone.AvatarEvents ! AvatarServiceMessage( + zone.AvatarEvents ! MessageEnvelope( player.Name, AvatarAction.TerminalOrderResult(msg.terminal_guid, msg.transaction_type, result=true) ) @@ -575,7 +576,7 @@ class PlayerControl(player: Player, avatarActor: typed.ActorRef[AvatarActor.Comm case Zone.Ground.CanNotPickupItem(_, item_guid, reason) => log.warn(s"${player.Name} failed to pick up an item ($item_guid) from the ground because $reason") if (reason.startsWith("@")) { - player.Zone.AvatarEvents ! AvatarServiceMessage( + player.Zone.AvatarEvents ! MessageEnvelope( player.Name, SendResponse(ChatMsg(ChatMessageType.UNK_227, reason)) ) @@ -595,7 +596,7 @@ class PlayerControl(player: Player, avatarActor: typed.ActorRef[AvatarActor.Comm val trigger = new BoomerTrigger trigger.Companion = obj.GUID obj.Trigger = trigger - zone.AvatarEvents ! AvatarServiceMessage(zone.id, ObjectDelete(tool.GUID)) + zone.AvatarEvents ! MessageEnvelope(zone.id, ObjectDelete(tool.GUID)) TaskWorkflow.execute(GUIDTask.unregisterEquipment(zone.GUID, tool)) player.Find(tool) match { case Some(index) if player.VisibleSlots.contains(index) => @@ -647,7 +648,7 @@ class PlayerControl(player: Player, avatarActor: typed.ActorRef[AvatarActor.Comm case Player.LoseDeployable(obj) => if (player.avatar.deployables.Remove(obj)) { - player.Zone.LocalEvents ! LocalServiceMessage(player.Name, LocalAction.DeployableUIFor(obj.Definition.Item)) + player.Zone.LocalEvents ! MessageEnvelope(player.Name, LocalAction.DeployableUIFor(obj.Definition.Item)) } case _ => ; @@ -720,7 +721,7 @@ class PlayerControl(player: Player, avatarActor: typed.ActorRef[AvatarActor.Comm //insert afterHolsters.foreach(elem => player.Slot(elem.start).Equipment = elem.obj) afterInventory.foreach(elem => player.Inventory.InsertQuickly(elem.start, elem.obj)) - player.Zone.AvatarEvents ! AvatarServiceMessage( + player.Zone.AvatarEvents ! MessageEnvelope( Players.ZoneChannelIfSpectating(player), AvatarAction.ChangeExosuit( player.GUID, @@ -746,7 +747,7 @@ class PlayerControl(player: Player, avatarActor: typed.ActorRef[AvatarActor.Comm def loseDeployableOwnership(obj: Deployable): Boolean = { if (player.avatar.deployables.Remove(obj)) { obj.Actor ! Deployable.Ownership(None) - player.Zone.LocalEvents ! LocalServiceMessage(player.Name, LocalAction.DeployableUIFor(obj.Definition.Item)) + player.Zone.LocalEvents ! MessageEnvelope(player.Name, LocalAction.DeployableUIFor(obj.Definition.Item)) true } else { @@ -768,14 +769,14 @@ class PlayerControl(player: Player, avatarActor: typed.ActorRef[AvatarActor.Comm case GlobalDefinitions.ace if obj.Definition.deployAnimation == DeployAnimation.Standard => val ownerGuid = obj.OwnerGuid.getOrElse(Service.defaultPlayerGUID) - zone.LocalEvents ! LocalServiceMessage( + zone.LocalEvents ! MessageEnvelope( zone.id, ownerGuid, LocalAction.TriggerEffectLocation("spawn_object_effect", obj.Position, obj.Orientation) ) case GlobalDefinitions.advanced_ace if obj.Definition.deployAnimation == DeployAnimation.Fdu => - zone.AvatarEvents ! AvatarServiceMessage(zone.id, AvatarAction.PutDownFDU(player.GUID)) + zone.AvatarEvents ! MessageEnvelope(zone.id, AvatarAction.PutDownFDU(player.GUID)) case _ => org.log4s .getLogger(name = "Deployables") @@ -878,7 +879,7 @@ class PlayerControl(player: Player, avatarActor: typed.ActorRef[AvatarActor.Comm //always do armor update if (damageToArmor > 0) { val zone = target.Zone - zone.AvatarEvents ! AvatarServiceMessage( + zone.AvatarEvents ! MessageEnvelope( zone.id, PlanetsideAttribute(target.GUID, 4, target.Armor) ) @@ -936,7 +937,7 @@ class PlayerControl(player: Player, avatarActor: typed.ActorRef[AvatarActor.Comm target.LogActivity(cause) //stat changes if (damageToCapacitor > 0) { - events ! AvatarServiceMessage(target.Name, PlanetsideAttribute(targetGUID, 7, target.Capacitor.toLong)) + events ! MessageEnvelope(target.Name, PlanetsideAttribute(targetGUID, 7, target.Capacitor.toLong)) announceConfrontation = true //TODO should we? } if (damageToStamina > 0) { @@ -944,13 +945,13 @@ class PlayerControl(player: Player, avatarActor: typed.ActorRef[AvatarActor.Comm announceConfrontation = true //TODO should we? } if (damageToHealth > 0) { - events ! AvatarServiceMessage(zoneId, PlanetsideAttribute(targetGUID, 0, health)) + events ! MessageEnvelope(zoneId, PlanetsideAttribute(targetGUID, 0, health)) announceConfrontation = true } val countableDamage = damageToHealth + damageToArmor if(announceConfrontation) { if (aggravated) { - events ! AvatarServiceMessage( + events ! MessageEnvelope( zoneId, SendResponse(AggravatedDamageMessage(targetGUID, countableDamage)) ) @@ -965,19 +966,19 @@ class PlayerControl(player: Player, avatarActor: typed.ActorRef[AvatarActor.Comm val name = pSource.Name zone.LivePlayers.find(_.Name == name).orElse(zone.Corpses.find(_.Name == name)) match { case Some(tplayer) => - zone.AvatarEvents ! AvatarServiceMessage( + zone.AvatarEvents ! MessageEnvelope( target.Name, target.GUID, HintsAtAttacker(tplayer.GUID) ) case None => - zone.AvatarEvents ! AvatarServiceMessage( + zone.AvatarEvents ! MessageEnvelope( target.Name, SendResponse(DamageWithPositionMessage(countableDamage, pSource.Position)) ) } case source => - zone.AvatarEvents ! AvatarServiceMessage( + zone.AvatarEvents ! MessageEnvelope( target.Name, SendResponse(DamageWithPositionMessage(countableDamage, source.Position)) ) @@ -985,17 +986,17 @@ class PlayerControl(player: Player, avatarActor: typed.ActorRef[AvatarActor.Comm case None => cause.interaction.cause match { case o: PainboxReason => - zone.AvatarEvents ! AvatarServiceMessage( + zone.AvatarEvents ! MessageEnvelope( target.Name, AvatarAction.EnvironmentalDamage(target.GUID, o.entity.GUID, countableDamage) ) case _: CollisionReason => - events ! AvatarServiceMessage( + events ! MessageEnvelope( zoneId, SendResponse(AggravatedDamageMessage(targetGUID, countableDamage)) ) case _ => - zone.AvatarEvents ! AvatarServiceMessage( + zone.AvatarEvents ! MessageEnvelope( target.Name, AvatarAction.EnvironmentalDamage(target.GUID, ValidPlanetSideGUID(0), countableDamage) ) @@ -1051,14 +1052,14 @@ class PlayerControl(player: Player, avatarActor: typed.ActorRef[AvatarActor.Comm damageLog.info(s"${player.Name} killed ${player.Sex.pronounObject}self") } - events ! AvatarServiceMessage(nameChannel, player_guid, AvatarAction.Killed(cause, target.VehicleSeated)) //align client interface fields with state - events ! AvatarServiceMessage(zoneChannel, PlanetsideAttribute(player_guid, 0, 0)) //health + events ! MessageEnvelope(nameChannel, player_guid, AvatarAction.Killed(cause, target.VehicleSeated)) //align client interface fields with state + events ! MessageEnvelope(zoneChannel, PlanetsideAttribute(player_guid, 0, 0)) //health if (target.Capacitor > 0) { target.Capacitor = 0 - events ! AvatarServiceMessage(nameChannel, PlanetsideAttribute(player_guid, 7, 0)) // capacitor + events ! MessageEnvelope(nameChannel, PlanetsideAttribute(player_guid, 7, 0)) // capacitor } val attribute = DamageableEntity.attributionTo(cause, target.Zone, player_guid) - events ! AvatarServiceMessage( + events ! MessageEnvelope( nameChannel, SendResponse(DestroyMessage(player_guid, attribute, Service.defaultPlayerGUID, pos)) //how many players get this message? ) @@ -1089,7 +1090,7 @@ class PlayerControl(player: Player, avatarActor: typed.ActorRef[AvatarActor.Comm override def StartJammeredSound(target: Any, dur: Int): Unit = target match { case obj: Player if !jammedSound => - obj.Zone.AvatarEvents ! AvatarServiceMessage( + obj.Zone.AvatarEvents ! MessageEnvelope( obj.Zone.id, PlanetsideAttribute(obj.GUID, 27, 1) ) @@ -1125,7 +1126,7 @@ class PlayerControl(player: Player, avatarActor: typed.ActorRef[AvatarActor.Comm override def CancelJammeredSound(target: Any): Unit = target match { case obj: Player if jammedSound => - obj.Zone.AvatarEvents ! AvatarServiceMessage( + obj.Zone.AvatarEvents ! MessageEnvelope( obj.Zone.id, PlanetsideAttribute(obj.GUID, 27, 0) ) @@ -1172,7 +1173,7 @@ class PlayerControl(player: Player, avatarActor: typed.ActorRef[AvatarActor.Comm if (slot == obj.DrawnSlot) { obj.DrawnSlot = Player.HandsDownSlot } - events ! AvatarServiceMessage(toChannel, ObjectDelete(item.GUID)) + events ! MessageEnvelope(toChannel, ObjectDelete(item.GUID)) } def PutItemInSlotCallback(item: Equipment, slot: Int): Unit = { @@ -1193,7 +1194,7 @@ class PlayerControl(player: Player, avatarActor: typed.ActorRef[AvatarActor.Comm case Some(obj: BoomerDeployable) => val deployables = player.avatar.deployables if (!deployables.Contains(obj) && deployables.Valid(obj)) { - events ! AvatarServiceMessage( + events ! MessageEnvelope( toChannel, SendResponse(GenericObjectAction2Message(1, player.GUID, trigger.GUID)) ) @@ -1212,12 +1213,12 @@ class PlayerControl(player: Player, avatarActor: typed.ActorRef[AvatarActor.Comm case _ => () } - events ! AvatarServiceMessage( + events ! MessageEnvelope( toChannel, SendResponse(OCM.detailed(item, ObjectCreateMessageParent(guid, slot))) ) if (!player.isBackpack && willBeVisible) { - events ! AvatarServiceMessage(zone.id, guid, AvatarAction.EquipmentInHand(guid, slot, item)) + events ! MessageEnvelope(zone.id, guid, AvatarAction.EquipmentInHand(guid, slot, item)) } } @@ -1231,17 +1232,16 @@ class PlayerControl(player: Player, avatarActor: typed.ActorRef[AvatarActor.Comm } else { player.Name } - zone.AvatarEvents ! AvatarServiceMessage( + zone.AvatarEvents ! MessageEnvelope( toChannel, ObjectDelete(item.GUID) ) } def UpdateAuraEffect(target: AuraEffectBehavior.Target) : Unit = { - import net.psforever.services.avatar.AvatarServiceMessage val zone = target.Zone val value = target.Aura.foldLeft(0)(_ + PlayerControl.auraEffectToAttributeValue(_)) - zone.AvatarEvents ! AvatarServiceMessage(zone.id, PlanetsideAttribute(target.GUID, 54, value)) + zone.AvatarEvents ! MessageEnvelope(zone.id, PlanetsideAttribute(target.GUID, 54, value)) } } @@ -1271,11 +1271,11 @@ object PlayerControl { } def sendResponse(zone: Zone, channel: String, msg: PlanetSideGamePacket): Unit = { - zone.AvatarEvents ! AvatarServiceMessage(channel, SendResponse(msg)) + zone.AvatarEvents ! MessageEnvelope(channel, SendResponse(msg)) } def sendResponse(zone: Zone, channel: String, filter: PlanetSideGUID, msg: EventMessage): Unit = { - zone.AvatarEvents ! AvatarServiceMessage(channel, filter, msg) + zone.AvatarEvents ! MessageEnvelope(channel, filter, msg) } def maxRestriction(player: Player, slot: Int): Boolean = { diff --git a/src/main/scala/net/psforever/objects/avatar/interaction/WithEntrance.scala b/src/main/scala/net/psforever/objects/avatar/interaction/WithEntrance.scala index 7fc2c8aaa..0e475b85f 100644 --- a/src/main/scala/net/psforever/objects/avatar/interaction/WithEntrance.scala +++ b/src/main/scala/net/psforever/objects/avatar/interaction/WithEntrance.scala @@ -6,6 +6,7 @@ import net.psforever.objects.serverobject.environment.{EnvironmentAttribute, Env import net.psforever.objects.serverobject.environment.interaction.{InteractionWith, RespondsToZoneEnvironment} import net.psforever.objects.serverobject.interior.{Sidedness, TraditionalInteriorAware} import net.psforever.objects.zones.interaction.InteractsWithZone +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.services.base.message.SendResponse import net.psforever.types.Vector3 @@ -91,7 +92,6 @@ class WithEntrance() ): Sidedness = { import net.psforever.objects.{Player, Vehicle} import net.psforever.packet.game.ChatMsg - import net.psforever.services.avatar.AvatarServiceMessage import net.psforever.types.ChatMessageType val channel = obj match { case p: Player => p.Name @@ -99,7 +99,7 @@ class WithEntrance() case _ => "" } if (door.Outwards == Vector3.Zero) { - obj.Zone.AvatarEvents ! AvatarServiceMessage( + obj.Zone.AvatarEvents ! MessageEnvelope( channel, SendResponse(ChatMsg(ChatMessageType.UNK_229, "Door not configured.")) ) @@ -108,14 +108,14 @@ class WithEntrance() val result = Vector3.DotProduct(Vector3.Unit(obj.Position - door.Position), door.Outwards) > 0f if (result && WhichSide != Sidedness.OutsideOf) { //outside - obj.Zone.AvatarEvents ! AvatarServiceMessage( + obj.Zone.AvatarEvents ! MessageEnvelope( channel, SendResponse(ChatMsg(ChatMessageType.UNK_229, "You are now outside")) ) Sidedness.OutsideOf } else if (!result && WhichSide != Sidedness.InsideOf) { //inside - obj.Zone.AvatarEvents ! AvatarServiceMessage( + obj.Zone.AvatarEvents ! MessageEnvelope( channel, SendResponse(ChatMsg(ChatMessageType.UNK_229, "You are now inside")) ) diff --git a/src/main/scala/net/psforever/objects/avatar/interaction/WithGantry.scala b/src/main/scala/net/psforever/objects/avatar/interaction/WithGantry.scala index 452cd5bf9..dc20521f6 100644 --- a/src/main/scala/net/psforever/objects/avatar/interaction/WithGantry.scala +++ b/src/main/scala/net/psforever/objects/avatar/interaction/WithGantry.scala @@ -7,7 +7,7 @@ import net.psforever.objects.serverobject.environment.{EnvironmentAttribute, Env import net.psforever.objects.serverobject.shuttle.OrbitalShuttlePad import net.psforever.objects.zones.interaction.InteractsWithZone import net.psforever.packet.game.{ChatMsg, PlayerStateShiftMessage, ShiftState} -import net.psforever.services.avatar.AvatarServiceMessage +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.services.base.message.SendResponse import net.psforever.services.hart.ShuttleState import net.psforever.types.ChatMessageType @@ -35,10 +35,10 @@ class WithGantry(val channel: String) player.VehicleSeated.isEmpty => val (pos, ang) = Vehicles.dismountShuttle(shuttle, field.mountPoint) val events = shuttle.Zone.AvatarEvents - events ! AvatarServiceMessage( + events ! MessageEnvelope( channel, SendResponse(PlayerStateShiftMessage(ShiftState(0, pos, ang, None)))) - events ! AvatarServiceMessage( + events ! MessageEnvelope( channel, SendResponse(ChatMsg(ChatMessageType.UNK_227, "@Vehicle_OS_PlacedOutsideHallway")) ) diff --git a/src/main/scala/net/psforever/objects/avatar/interaction/WithWater.scala b/src/main/scala/net/psforever/objects/avatar/interaction/WithWater.scala index 73af2ad60..ae2ca54af 100644 --- a/src/main/scala/net/psforever/objects/avatar/interaction/WithWater.scala +++ b/src/main/scala/net/psforever/objects/avatar/interaction/WithWater.scala @@ -7,7 +7,8 @@ import net.psforever.objects.serverobject.environment.interaction.common.Watery import net.psforever.objects.serverobject.environment.interaction.common.Watery.OxygenStateTarget import net.psforever.objects.serverobject.environment.{EnvironmentTrait, PieceOfEnvironment, interaction} import net.psforever.objects.zones.interaction.InteractsWithZone -import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage} +import net.psforever.services.avatar.AvatarAction +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.types.OxygenState import scala.concurrent.duration._ @@ -299,7 +300,7 @@ class WithWater(val channel: String) cond: OxygenStateTarget, data: Option[OxygenStateTarget] ): Unit = { - obj.Zone.AvatarEvents ! AvatarServiceMessage(channel, AvatarAction.OxygenState(cond, data)) + obj.Zone.AvatarEvents ! MessageEnvelope(channel, AvatarAction.OxygenState(cond, data)) } } diff --git a/src/main/scala/net/psforever/objects/avatar/scoring/Statistic.scala b/src/main/scala/net/psforever/objects/avatar/scoring/Statistic.scala index e6b5b03a3..10dcd36b9 100644 --- a/src/main/scala/net/psforever/objects/avatar/scoring/Statistic.scala +++ b/src/main/scala/net/psforever/objects/avatar/scoring/Statistic.scala @@ -2,7 +2,7 @@ package net.psforever.objects.avatar.scoring /** - * Organizes the eight fields one would find in an `AvatarServiceMessage` statistic field. + * Organizes the eight fields one would find in an statistic field. * The `_c` fields and the `_s` fields are paired when the values populate the packet * where `c` stands for "campaign" and `s` stands for "session". * "Session" values reflect on the UI as the K in K/D diff --git a/src/main/scala/net/psforever/objects/ce/DeployableBehavior.scala b/src/main/scala/net/psforever/objects/ce/DeployableBehavior.scala index fc8215fd0..f1bba9f3b 100644 --- a/src/main/scala/net/psforever/objects/ce/DeployableBehavior.scala +++ b/src/main/scala/net/psforever/objects/ce/DeployableBehavior.scala @@ -7,9 +7,9 @@ import net.psforever.objects._ import net.psforever.objects.zones.Zone import net.psforever.packet.game._ import net.psforever.services.Service -import net.psforever.services.avatar.AvatarServiceMessage +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.services.base.message.SetEmpire -import net.psforever.services.local.{LocalAction, LocalServiceMessage} +import net.psforever.services.local.LocalAction import net.psforever.types.PlanetSideEmpire import scala.concurrent.duration._ @@ -199,9 +199,9 @@ trait DeployableBehavior { None } //zone build - localEvents ! LocalServiceMessage(zone.id, LocalAction.DeployItem(obj)) + localEvents ! MessageEnvelope(zone.id, LocalAction.DeployItem(obj)) //zone map icon - localEvents ! LocalServiceMessage( + localEvents ! MessageEnvelope( obj.Faction.toString, LocalAction.DeployableMapIcon(DeploymentAction.Build, DeployableInfo(obj.GUID, Deployable.Icon(obj.Definition.Item), obj.Position, obj.OwnerGuid.getOrElse(Service.defaultPlayerGUID))) ) @@ -247,7 +247,7 @@ trait DeployableBehavior { //there's no special meaning behind directing any replies from from zone governance straight back to zone governance //this deployable control agency, however, will be expiring and can not be a recipient zone.Deployables ! Zone.Deployable.Dismiss(obj) - zone.LocalEvents ! LocalServiceMessage( + zone.LocalEvents ! MessageEnvelope( zone.id, LocalAction.EliminateDeployable(obj, obj.GUID, obj.Position, deletionType) ) @@ -283,12 +283,12 @@ object DeployableBehavior { if (originalFaction != toFaction) { obj.Faction = toFaction //visual tells in regards to ownership by faction - zone.AvatarEvents ! AvatarServiceMessage( + zone.AvatarEvents ! MessageEnvelope( zone.id, SetEmpire(dGuid, toFaction) ) //remove knowledge by the previous owner's faction - localEvents ! LocalServiceMessage( + localEvents ! MessageEnvelope( originalFaction.toString, LocalAction.DeployableMapIcon(DeploymentAction.Dismiss, info) ) @@ -296,10 +296,10 @@ object DeployableBehavior { zone.AllPlayers.filter(p => obj.OriginalOwnerName.contains(p.Name)) .foreach { originalOwner => originalOwner.avatar.deployables.Remove(obj) - originalOwner.Zone.LocalEvents ! LocalServiceMessage(originalOwner.Name, LocalAction.DeployableUIFor(obj.Definition.Item)) + originalOwner.Zone.LocalEvents ! MessageEnvelope(originalOwner.Name, LocalAction.DeployableUIFor(obj.Definition.Item)) } //display to the given faction - localEvents ! LocalServiceMessage( + localEvents ! MessageEnvelope( toFaction.toString, LocalAction.DeployableMapIcon(DeploymentAction.Build, info) ) diff --git a/src/main/scala/net/psforever/objects/ce/TelepadLike.scala b/src/main/scala/net/psforever/objects/ce/TelepadLike.scala index e730cfef8..3ac01cfb9 100644 --- a/src/main/scala/net/psforever/objects/ce/TelepadLike.scala +++ b/src/main/scala/net/psforever/objects/ce/TelepadLike.scala @@ -9,8 +9,9 @@ import net.psforever.objects.vehicles.Utility.InternalTelepad import net.psforever.objects.zones.Zone import net.psforever.packet.game.{GenericObjectActionMessage, ObjectCreateMessage, ObjectDeleteMessage} import net.psforever.packet.game.objectcreate.ObjectCreateMessageParent +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.services.base.message.SendResponse -import net.psforever.services.local.{LocalAction, LocalServiceMessage} +import net.psforever.services.local.LocalAction import net.psforever.types.PlanetSideGUID trait TelepadLike { @@ -114,7 +115,7 @@ object TelepadLike { normally dispatched while the Router is transitioned into its Deploying state it is safe, however, to perform these actions at any time during and after the Deploying state */ - events ! LocalServiceMessage( + events ! MessageEnvelope( zoneId, SendResponse( ObjectCreateMessage( @@ -125,7 +126,7 @@ object TelepadLike { ) ) ) - events ! LocalServiceMessage(zoneId, SendResponse(Seq( + events ! MessageEnvelope(zoneId, SendResponse(Seq( GenericObjectActionMessage(utilityGUID, 27), GenericObjectActionMessage(utilityGUID, 30) ))) @@ -135,7 +136,7 @@ object TelepadLike { def LinkTelepad(zone: Zone, telepadGUID: PlanetSideGUID): Unit = { val events = zone.LocalEvents val zoneId = zone.id - events ! LocalServiceMessage(zoneId, SendResponse(Seq( + events ! MessageEnvelope(zoneId, SendResponse(Seq( GenericObjectActionMessage(telepadGUID, 27), GenericObjectActionMessage(telepadGUID, 28) ))) @@ -168,7 +169,7 @@ class TelepadControl(obj: InternalTelepad) extends akka.actor.Actor { oldTpad.Actor ! TelepadLike.SeverLink(obj) } obj.Telepad = None - zone.LocalEvents ! LocalServiceMessage(zone.id, SendResponse(ObjectDeleteMessage(obj.GUID, 0))) + zone.LocalEvents ! MessageEnvelope(zone.id, SendResponse(ObjectDeleteMessage(obj.GUID, 0))) case TelepadLike.RequestLink(tpad: TelepadDeployable) => val zone = obj.Zone @@ -189,7 +190,7 @@ class TelepadControl(obj: InternalTelepad) extends akka.actor.Actor { } } else { val channel = obj.Owner.asInstanceOf[Vehicle].OwnerName.getOrElse("") - zone.LocalEvents ! LocalServiceMessage(channel, LocalAction.RouterTelepadMessage("@Teleport_NotDeployed")) + zone.LocalEvents ! MessageEnvelope(channel, LocalAction.RouterTelepadMessage("@Teleport_NotDeployed")) tpad.Actor ! TelepadLike.SeverLink(obj) } @@ -197,7 +198,7 @@ class TelepadControl(obj: InternalTelepad) extends akka.actor.Actor { if (obj.Telepad.contains(tpad.GUID)) { obj.Telepad = None val zone = obj.Zone - zone.LocalEvents ! LocalServiceMessage(zone.id, SendResponse(ObjectDeleteMessage(obj.GUID, 0))) + zone.LocalEvents ! MessageEnvelope(zone.id, SendResponse(ObjectDeleteMessage(obj.GUID, 0))) } case _ => () diff --git a/src/main/scala/net/psforever/objects/equipment/ArmorSiphonBehavior.scala b/src/main/scala/net/psforever/objects/equipment/ArmorSiphonBehavior.scala index 73355c951..9341e324d 100644 --- a/src/main/scala/net/psforever/objects/equipment/ArmorSiphonBehavior.scala +++ b/src/main/scala/net/psforever/objects/equipment/ArmorSiphonBehavior.scala @@ -10,8 +10,8 @@ import net.psforever.objects.vital.RepairFromArmorSiphon import net.psforever.objects.vital.etc.{ArmorSiphonModifiers, ArmorSiphonReason} import net.psforever.objects.vital.interaction.DamageInteraction import net.psforever.packet.game.QuantityUpdateMessage +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.services.base.message.{PlanetsideAttribute, SendResponse} -import net.psforever.services.vehicle.VehicleServiceMessage import net.psforever.types.PlanetSideGUID import scala.collection.mutable @@ -78,7 +78,7 @@ object ArmorSiphonBehavior { if(before < after) { obj.LogActivity(RepairFromArmorSiphon(asr.siphon.Definition, VehicleSource(obj), before - after)) val zone = obj.Zone - zone.VehicleEvents ! VehicleServiceMessage( + zone.VehicleEvents ! MessageEnvelope( zone.id, PlanetsideAttribute(obj.GUID, 0, after) ) @@ -97,7 +97,7 @@ object ArmorSiphonBehavior { val siphon = siphonSlot.Equipment.get.asInstanceOf[Tool] val zone = obj.Zone //update current charge level - zone.VehicleEvents ! VehicleServiceMessage( + zone.VehicleEvents ! MessageEnvelope( obj.Actor.toString, SendResponse(QuantityUpdateMessage(siphon.AmmoSlot.Box.GUID, siphon.Magazine)) ) @@ -119,7 +119,7 @@ object ArmorSiphonBehavior { val before = siphon.Magazine val after = siphon.Magazine = before + 1 if (after > before) { - zone.VehicleEvents ! VehicleServiceMessage( + zone.VehicleEvents ! MessageEnvelope( obj.Actor.toString, SendResponse(QuantityUpdateMessage(siphon.AmmoSlot.Box.GUID, after)) ) diff --git a/src/main/scala/net/psforever/objects/equipment/JammingUnit.scala b/src/main/scala/net/psforever/objects/equipment/JammingUnit.scala index 126a44efb..cd50540b2 100644 --- a/src/main/scala/net/psforever/objects/equipment/JammingUnit.scala +++ b/src/main/scala/net/psforever/objects/equipment/JammingUnit.scala @@ -8,9 +8,9 @@ import net.psforever.objects.vehicles.MountedWeapons import net.psforever.objects.vital.interaction.DamageResult import net.psforever.objects.vital.projectile.ProjectileReason import net.psforever.objects.zones.{Zone, ZoneAware} +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.services.base.message.PlanetsideAttribute import net.psforever.types.Vector3 -import net.psforever.services.vehicle.VehicleServiceMessage import scala.collection.mutable import scala.concurrent.duration._ @@ -234,7 +234,6 @@ trait JammableBehavior { * @see `Service` * @see `VehicleAction` * @see `VehicleService` - * @see `VehicleServiceMessage` * @see `Zone.VehicleEvents` */ trait JammableMountedWeapons extends JammableBehavior { @@ -243,7 +242,7 @@ trait JammableMountedWeapons extends JammableBehavior { override def StartJammeredSound(target: Any, dur: Int): Unit = { target match { case obj: PlanetSideServerObject with MountedWeapons with JammableUnit if !jammedSound => - obj.Zone.VehicleEvents ! VehicleServiceMessage( + obj.Zone.VehicleEvents ! MessageEnvelope( obj.Zone.id, PlanetsideAttribute(obj.GUID, 27, 1) ) @@ -264,7 +263,7 @@ trait JammableMountedWeapons extends JammableBehavior { override def CancelJammeredSound(target: Any): Unit = { target match { case obj: PlanetSideServerObject if jammedSound => - obj.Zone.VehicleEvents ! VehicleServiceMessage( + obj.Zone.VehicleEvents ! MessageEnvelope( obj.Zone.id, PlanetsideAttribute(obj.GUID, 27, 0) ) @@ -308,7 +307,7 @@ object JammableMountedWeapons { def JammedWeaponStatus(zone: Zone, target: Equipment with JammableUnit, statusCode: Int): Unit = { target.Jammed = statusCode == 1 - zone.VehicleEvents ! VehicleServiceMessage( + zone.VehicleEvents ! MessageEnvelope( zone.id, PlanetsideAttribute(target.GUID, 27, statusCode) ) diff --git a/src/main/scala/net/psforever/objects/locker/LockerContainerControl.scala b/src/main/scala/net/psforever/objects/locker/LockerContainerControl.scala index 19a1e388f..bef430721 100644 --- a/src/main/scala/net/psforever/objects/locker/LockerContainerControl.scala +++ b/src/main/scala/net/psforever/objects/locker/LockerContainerControl.scala @@ -6,7 +6,7 @@ import net.psforever.objects.equipment.Equipment import net.psforever.objects.serverobject.containable.{Containable, ContainableBehavior} import net.psforever.packet.game.objectcreate.ObjectCreateMessageParent import net.psforever.packet.game.{ObjectAttachMessage, ObjectCreateDetailedMessage, ObjectDetachMessage} -import net.psforever.services.avatar.AvatarServiceMessage +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.services.base.message.{ObjectDelete, SendResponse} import net.psforever.types.{PlanetSideEmpire, Vector3} @@ -34,7 +34,7 @@ class LockerContainerControl(locker: LockerContainer, toChannel: String) val obj = ContainerObject obj.Find(item) match { case Some(slot) => - obj.Zone.AvatarEvents ! AvatarServiceMessage( + obj.Zone.AvatarEvents ! MessageEnvelope( toChannel, SendResponse(ObjectAttachMessage(obj.GUID, item.GUID, slot)) ) @@ -46,14 +46,14 @@ class LockerContainerControl(locker: LockerContainer, toChannel: String) def RemoveItemFromSlotCallback(item: Equipment, slot: Int): Unit = { val zone = locker.Zone - zone.AvatarEvents ! AvatarServiceMessage(toChannel, ObjectDelete(item.GUID)) + zone.AvatarEvents ! MessageEnvelope(toChannel, ObjectDelete(item.GUID)) } def PutItemInSlotCallback(item: Equipment, slot: Int): Unit = { val zone = locker.Zone val definition = item.Definition item.Faction = PlanetSideEmpire.NEUTRAL - zone.AvatarEvents ! AvatarServiceMessage( + zone.AvatarEvents ! MessageEnvelope( toChannel, SendResponse( ObjectCreateDetailedMessage( @@ -68,7 +68,7 @@ class LockerContainerControl(locker: LockerContainer, toChannel: String) def SwapItemCallback(item: Equipment, fromSlot: Int): Unit = { val zone = locker.Zone - zone.AvatarEvents ! AvatarServiceMessage( + zone.AvatarEvents ! MessageEnvelope( toChannel, SendResponse(ObjectDetachMessage(locker.GUID, item.GUID, Vector3.Zero, 0f)) ) diff --git a/src/main/scala/net/psforever/objects/serverobject/damage/DamageableAmenity.scala b/src/main/scala/net/psforever/objects/serverobject/damage/DamageableAmenity.scala index b0ba85a90..74cf26a10 100644 --- a/src/main/scala/net/psforever/objects/serverobject/damage/DamageableAmenity.scala +++ b/src/main/scala/net/psforever/objects/serverobject/damage/DamageableAmenity.scala @@ -3,8 +3,9 @@ package net.psforever.objects.serverobject.damage import net.psforever.objects.serverobject.structures.Amenity import net.psforever.objects.vital.interaction.DamageResult -import net.psforever.services.avatar.AvatarServiceMessage -import net.psforever.services.base.message.PlanetsideAttribute +import net.psforever.packet.game.PlanetsideAttributeMessage +import net.psforever.services.base.envelope.MessageEnvelope +import net.psforever.services.base.message.SendResponse /** * The "control" `Actor` mixin for damage-handling code @@ -27,7 +28,6 @@ object DamageableAmenity { * The common manifestation is a sparking entity that will no longer report being accessible. * These `PlanetSideAttributeMessage` attributes are the same as reported during zone load client configuration. * @see `PlanetsideAttribute` - * @see `AvatarServiceMessage` * @see `Zone.AvatarEvents` * @param target the entity being destroyed * @param cause historical information about the damage @@ -37,7 +37,9 @@ object DamageableAmenity { val zoneId = zone.id val events = zone.AvatarEvents val targetGUID = target.GUID - events ! AvatarServiceMessage(zoneId, PlanetsideAttribute(targetGUID, 50, 1)) - events ! AvatarServiceMessage(zoneId, PlanetsideAttribute(targetGUID, 51, 1)) + events ! MessageEnvelope( + zoneId, + SendResponse(List(PlanetsideAttributeMessage(targetGUID, 50, 1), PlanetsideAttributeMessage(targetGUID, 51, 1))) + ) } } diff --git a/src/main/scala/net/psforever/objects/serverobject/damage/DamageableEntity.scala b/src/main/scala/net/psforever/objects/serverobject/damage/DamageableEntity.scala index b4dea9b97..9209e5764 100644 --- a/src/main/scala/net/psforever/objects/serverobject/damage/DamageableEntity.scala +++ b/src/main/scala/net/psforever/objects/serverobject/damage/DamageableEntity.scala @@ -8,7 +8,8 @@ import net.psforever.objects.vital.resolution.ResolutionCalculations import net.psforever.objects.zones.Zone import net.psforever.types.PlanetSideGUID import net.psforever.services.Service -import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage} +import net.psforever.services.avatar.AvatarAction +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.services.base.message.PlanetsideAttribute /** @@ -143,7 +144,6 @@ object DamageableEntity { * - provide a feedback message regarding the damage. * @see `PlanetsideAttribute` * @see `SendResponse` - * @see `AvatarServiceMessage` * @see `DamageFeedbackMessage` * @see `JammableUnit.Jammered` * @see `Service.defaultPlayerGUID` @@ -166,7 +166,7 @@ object DamageableEntity { def DamageToHealth(target: Damageable.Target, cause: DamageResult, amount: Int): Boolean = { if (amount > 0 && !target.Destroyed) { val zone = target.Zone - zone.AvatarEvents ! AvatarServiceMessage( + zone.AvatarEvents ! MessageEnvelope( zone.id, PlanetsideAttribute(target.GUID, 0, target.Health) ) @@ -182,8 +182,7 @@ object DamageableEntity { * - reports its adjusted its health; and, * - report about its destruction. * @see `AvatarAction.Destroy` - * @see `AvatarAction.PlanetsideAttribute` - * @see `AvatarServiceMessage` + * @see `PlanetsideAttribute` * @see `DamageFeedbackMessage` * @see `JammableUnit.ClearJammeredSound` * @see `JammableUnit.ClearJammeredStatus` @@ -200,10 +199,10 @@ object DamageableEntity { val zoneId = zone.id val tguid = target.GUID val attribution = attributionTo(cause, target.Zone) - zone.AvatarEvents ! AvatarServiceMessage(zoneId, PlanetsideAttribute(tguid, 0, target.Health)) + zone.AvatarEvents ! MessageEnvelope(zoneId, PlanetsideAttribute(tguid, 0, target.Health)) if (target.isInstanceOf[SpawnTube]) {}//do nothing to prevent issue #1057 else { - zone.AvatarEvents ! AvatarServiceMessage( + zone.AvatarEvents ! MessageEnvelope( zoneId, AvatarAction.Destroy(tguid, attribution, Service.defaultPlayerGUID, target.Position) ) diff --git a/src/main/scala/net/psforever/objects/serverobject/damage/DamageableMountable.scala b/src/main/scala/net/psforever/objects/serverobject/damage/DamageableMountable.scala index 6ae266790..99c076071 100644 --- a/src/main/scala/net/psforever/objects/serverobject/damage/DamageableMountable.scala +++ b/src/main/scala/net/psforever/objects/serverobject/damage/DamageableMountable.scala @@ -7,7 +7,8 @@ import net.psforever.objects.sourcing.{PlayerSource, SourceEntry} import net.psforever.objects.vital.interaction.{DamageInteraction, DamageResult} import net.psforever.packet.game.DamageWithPositionMessage import net.psforever.services.Service -import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage} +import net.psforever.services.avatar.AvatarAction +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.services.base.message.{HintsAtAttacker, SendResponse} /** @@ -20,7 +21,6 @@ object DamageableMountable { * * @see `HitHint` * @see `SendResponse` - * @see `AvatarServiceMessage` * @see `DamageWithPositionMessage` * @see `Mountable.Seats` * @see `Service.defaultPlayerGUID` @@ -62,7 +62,7 @@ object DamageableMountable { List.empty }).foreach { case (channel, filter, msg) => - events ! AvatarServiceMessage(channel, filter, msg) + events ! MessageEnvelope(channel, filter, msg) } } @@ -79,7 +79,7 @@ object DamageableMountable { val targets = target.Seats.values.flatMap(_.occupant).filter(_.isAlive) targets.foreach { player => //make llu visible to others in zone if passenger is carrying one - player.Zone.AvatarEvents ! AvatarServiceMessage(player.Name, AvatarAction.DropSpecialItem()) + player.Zone.AvatarEvents ! MessageEnvelope(player.Name, AvatarAction.DropSpecialItem()) //player.LogActivity(cause) player.Actor ! Player.Die( DamageInteraction(interaction.resolution, SourceEntry(player), interaction.cause, interaction.hitPos) diff --git a/src/main/scala/net/psforever/objects/serverobject/damage/DamageableVehicle.scala b/src/main/scala/net/psforever/objects/serverobject/damage/DamageableVehicle.scala index b948c0f80..ced4764d0 100644 --- a/src/main/scala/net/psforever/objects/serverobject/damage/DamageableVehicle.scala +++ b/src/main/scala/net/psforever/objects/serverobject/damage/DamageableVehicle.scala @@ -13,8 +13,8 @@ import net.psforever.objects.zones.Zone import net.psforever.objects.zones.exp.ToDatabase import net.psforever.packet.game.DamageWithPositionMessage import net.psforever.services.Service +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.services.base.message.{PlanetsideAttribute, SendResponse} -import net.psforever.services.vehicle.VehicleServiceMessage import net.psforever.types.Vector3 import scala.concurrent.duration._ @@ -105,8 +105,7 @@ trait DamageableVehicle * If this vehicle has shields that were affected by previous damage, that is also reported to the clients. * @see `Service.defaultPlayerGUID` * @see `Vehicle.CargoHolds` - * @see `VehicleAction.PlanetsideAttribute` - * @see `VehicleServiceMessage` + * @see `PlanetsideAttribute` * @param target the entity being destroyed * @param cause historical information about the damage * @param amount how much damage was performed @@ -143,14 +142,14 @@ trait DamageableVehicle } //stat changes if (damageToShields > 0) { - events ! VehicleServiceMessage( + events ! MessageEnvelope( shieldChannel, PlanetsideAttribute(targetGUID, obj.Definition.shieldUiAttribute, obj.Shields) ) announceConfrontation = true } if (damageToHealth > 0) { - events ! VehicleServiceMessage( + events ! MessageEnvelope( healthChannel, PlanetsideAttribute(targetGUID, 0, obj.Health) ) @@ -163,7 +162,7 @@ trait DamageableVehicle obj.Seats.values .collect { case seat if seat.occupant.nonEmpty => seat.occupant.get.Name } .foreach { channel => - events ! VehicleServiceMessage(channel, msg) + events ! MessageEnvelope(channel, msg) } } else { @@ -183,11 +182,9 @@ trait DamageableVehicle * @see `DriveState.Undeploying` * @see `Service.defaultPlayerGUID` * @see `Vehicle.CargoHolds` - * @see `VehicleAction.PlanetsideAttribute` + * @see `PlanetsideAttribute` * @see `RemoverActor.AddTask` * @see `RemoverActor.ClearSpecific` - * @see `VehicleServiceMessage` - * @see `VehicleServiceMessage.Decon` * @see `Zone.VehicleEvents` * @param target the entity being destroyed * @param cause historical information about the damage @@ -218,7 +215,7 @@ trait DamageableVehicle //shields if (obj.Shields > 0) { obj.Shields = 0 - zone.VehicleEvents ! VehicleServiceMessage( + zone.VehicleEvents ! MessageEnvelope( zone.id, PlanetsideAttribute(target.GUID, obj.Definition.shieldUiAttribute, 0) ) @@ -251,13 +248,13 @@ trait DamageableVehicle //health to 1, shields to 0 obj.Health = 1 val guid = obj.GUID - events ! VehicleServiceMessage( + events ! MessageEnvelope( zoneid, PlanetsideAttribute(guid, 0, 1) ) if (obj.Shields > 0) { obj.Shields = 0 - zone.VehicleEvents ! VehicleServiceMessage( + zone.VehicleEvents ! MessageEnvelope( zone.id, PlanetsideAttribute(obj.GUID, obj.Definition.shieldUiAttribute, 0) ) diff --git a/src/main/scala/net/psforever/objects/serverobject/damage/DamageableWeaponTurret.scala b/src/main/scala/net/psforever/objects/serverobject/damage/DamageableWeaponTurret.scala index 1e172174f..70dcae811 100644 --- a/src/main/scala/net/psforever/objects/serverobject/damage/DamageableWeaponTurret.scala +++ b/src/main/scala/net/psforever/objects/serverobject/damage/DamageableWeaponTurret.scala @@ -9,11 +9,10 @@ import net.psforever.objects.vital.interaction.DamageResult import net.psforever.objects.zones.Zone import net.psforever.packet.game.DamageWithPositionMessage import net.psforever.types.Vector3 -import net.psforever.services.avatar.AvatarServiceMessage +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.services.base.message.{ObjectDelete, PlanetsideAttribute, SendResponse} import net.psforever.services.base.support.SupportActor import net.psforever.services.vehicle.support.{TurretEnvelope, TurretUpgrader} -import net.psforever.services.vehicle.VehicleServiceMessage /** * The "control" `Actor` mixin for damage-handling code for `WeaponTurret` objects. @@ -63,7 +62,7 @@ trait DamageableWeaponTurret //TODO some turrets have shields if (damageToHealth > 0) { DamageableMountable.DamageAwareness(DamageableObject, cause, damageToHealth) - events ! VehicleServiceMessage( + events ! MessageEnvelope( zoneId, PlanetsideAttribute(targetGUID, 0, obj.Health) ) @@ -76,7 +75,7 @@ trait DamageableWeaponTurret obj.Seats.values .collect { case seat if seat.occupant.nonEmpty => seat.occupant.get.Name } .foreach { channel => - events ! VehicleServiceMessage(channel, msg) + events ! MessageEnvelope(channel, msg) } } else { @@ -104,8 +103,7 @@ object DamageableWeaponTurret { * A destroyed target dispatches a message to conceal (delete) its weapons from users. * If affected by a jammer property, the jammer propoerty will be removed. * If the type of entity is a `WeaponTurret`, the weapons are converted to their "normal" upgrade state. - * @see `AvatarAction.DeleteObject` - * @see `AvatarServiceMessage` + * @see `DeleteObject` * @see `MountedWeapons` * @see `MountedWeapons.Weapons` * @see `Service.defaultPlayerGUID` @@ -132,7 +130,7 @@ object DamageableWeaponTurret { } .foreach(slot => { val wep = slot.Equipment.get - avatarEvents ! AvatarServiceMessage(zoneId, ObjectDelete(wep.GUID)) + avatarEvents ! MessageEnvelope(zoneId, ObjectDelete(wep.GUID)) }) target match { case turret: WeaponTurret => diff --git a/src/main/scala/net/psforever/objects/serverobject/deploy/DeploymentBehavior.scala b/src/main/scala/net/psforever/objects/serverobject/deploy/DeploymentBehavior.scala index 49df2465a..be644a067 100644 --- a/src/main/scala/net/psforever/objects/serverobject/deploy/DeploymentBehavior.scala +++ b/src/main/scala/net/psforever/objects/serverobject/deploy/DeploymentBehavior.scala @@ -5,7 +5,8 @@ import akka.actor.{Actor, ActorRef, Cancellable} import net.psforever.objects.Default import net.psforever.types.{DriveState, Vector3} import net.psforever.services.Service -import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage} +import net.psforever.services.base.envelope.MessageEnvelope +import net.psforever.services.vehicle.VehicleAction import scala.concurrent.ExecutionContext.Implicits.global import scala.concurrent.duration._ @@ -104,7 +105,7 @@ trait DeploymentBehavior { prevState } else if (state == DriveState.Deploying) { obj.Velocity = Some(Vector3.Zero) //no velocity - zone.VehicleEvents ! VehicleServiceMessage( + zone.VehicleEvents ! MessageEnvelope( zoneChannel, VehicleAction.DeployRequest(guid, state, 0, unk2=false, Vector3.Zero) ) @@ -115,7 +116,7 @@ trait DeploymentBehavior { state } else if (state == DriveState.Deployed) { obj.Velocity = Some(Vector3.Zero) //no velocity - zone.VehicleEvents ! VehicleServiceMessage( + zone.VehicleEvents ! MessageEnvelope( zoneChannel, VehicleAction.DeployRequest(guid, state, 0, unk2=false, Vector3.Zero) ) @@ -136,7 +137,7 @@ trait DeploymentBehavior { val zoneChannel = zone.id val GUID0 = Service.defaultPlayerGUID if (state == DriveState.Undeploying) { - zone.VehicleEvents ! VehicleServiceMessage( + zone.VehicleEvents ! MessageEnvelope( zoneChannel, VehicleAction.DeployRequest(guid, state, 0, unk2=false, Vector3.Zero) ) @@ -147,7 +148,7 @@ trait DeploymentBehavior { }) state } else if (state == DriveState.Mobile) { - zone.VehicleEvents ! VehicleServiceMessage( + zone.VehicleEvents ! MessageEnvelope( zoneChannel, VehicleAction.DeployRequest(guid, state, 0, unk2=false, Vector3.Zero) ) diff --git a/src/main/scala/net/psforever/objects/serverobject/generator/GeneratorControl.scala b/src/main/scala/net/psforever/objects/serverobject/generator/GeneratorControl.scala index 42e561f2c..223354272 100644 --- a/src/main/scala/net/psforever/objects/serverobject/generator/GeneratorControl.scala +++ b/src/main/scala/net/psforever/objects/serverobject/generator/GeneratorControl.scala @@ -12,8 +12,8 @@ import net.psforever.objects.serverobject.terminals.{GeneratorTerminalDefinition import net.psforever.objects.vital.interaction.DamageResult import net.psforever.objects.zones.Zone import net.psforever.packet.game.TriggerEffectMessage +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.types.{PlanetSideGeneratorState, Vector3} -import net.psforever.services.avatar.AvatarServiceMessage import net.psforever.services.base.message.SendResponse import scala.concurrent.duration._ @@ -111,7 +111,7 @@ class GeneratorControl(gen: Generator) super.DestructionAwareness(gen, gen.LastDamage.get) GeneratorControl.UpdateOwner(gen, Some(GeneratorControl.Event.Destroyed)) //kaboom - zone.AvatarEvents ! AvatarServiceMessage( + zone.AvatarEvents ! MessageEnvelope( zone.id, SendResponse(TriggerEffectMessage(gen.GUID, "explosion_generator", None, None)) ) 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 50ac0796a..bc957d9c4 100644 --- a/src/main/scala/net/psforever/objects/serverobject/hackable/GenericHackables.scala +++ b/src/main/scala/net/psforever/objects/serverobject/hackable/GenericHackables.scala @@ -11,10 +11,10 @@ import net.psforever.objects.serverobject.{CommonMessages, PlanetSideServerObjec import net.psforever.objects.zones.blockmap.BlockMapEntity import net.psforever.packet.game.{GenericObjectActionMessage, HackMessage, HackState, HackState1, HackState7, TriggeredSound} import net.psforever.types.{PlanetSideEmpire, PlanetSideGUID} -import net.psforever.services.avatar.AvatarServiceMessage +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.services.base.message.SendResponse import net.psforever.services.local.support.{HackClearActor, HackClearEnvelope, HackEntityEnvelope} -import net.psforever.services.local.{LocalAction, LocalServiceMessage} +import net.psforever.services.local.LocalAction import scala.annotation.unused import scala.util.{Failure, Success} @@ -89,7 +89,7 @@ object GenericHackables { } else { (HackState.Ongoing, progress.toInt) } - target.Zone.AvatarEvents ! AvatarServiceMessage( + target.Zone.AvatarEvents ! MessageEnvelope( hacker.Name, SendResponse( HackMessage(progressType, target.GUID, hacker.GUID, progressGrade, 0L, progressState, HackState7.Unk8) @@ -171,7 +171,7 @@ object GenericHackables { val zoneId = zone.id val pguid = tplayer.GUID log.info(s"${user.Name} hacked a ${target.Definition.Name}") - zone.LocalEvents ! LocalServiceMessage( + zone.LocalEvents ! MessageEnvelope( zoneId, pguid, LocalAction.TriggerSound(target.HackSound, tplayer.Position, 30, 0.49803925f) @@ -207,7 +207,7 @@ object GenericHackables { building.virusId = 8 building.virusInstalledBy = None zone.LocalEvents ! HackClearEnvelope(HackClearActor.ObjectIsResecured(target)) - zone.LocalEvents ! LocalServiceMessage( + zone.LocalEvents ! MessageEnvelope( zone.id, SendResponse(GenericObjectActionMessage(target.GUID, 60)) ) @@ -261,7 +261,7 @@ object GenericHackables { val hackState = hackStateMap.getOrElse(virus, HackState7.Unk8) building.virusId = virus building.virusInstalledBy = Some(tplayer.Faction.id) - zone.LocalEvents ! LocalServiceMessage( + zone.LocalEvents ! MessageEnvelope( zoneId, pguid, LocalAction.TriggerSound(TriggeredSound.TREKSuccessful, tplayer.Position, 30, 0.49803925f) @@ -272,13 +272,9 @@ object GenericHackables { LocalAction.HackObject(target.GUID, installedVirusDuration.toLong, hackState), HackClearActor.ObjectIsHacked(target, zone, hackClearValue, hackState, installedVirusDuration) ) - zone.LocalEvents ! LocalServiceMessage( + zone.LocalEvents ! MessageEnvelope( zone.id, - SendResponse(GenericObjectActionMessage(target.GUID, 61)) - ) - zone.LocalEvents ! LocalServiceMessage( - zone.id, - SendResponse(GenericObjectActionMessage(target.GUID, 58)) + SendResponse(List(GenericObjectActionMessage(target.GUID, 61), GenericObjectActionMessage(target.GUID, 58))) ) //amenities if applicable virus match { diff --git a/src/main/scala/net/psforever/objects/serverobject/pad/VehicleSpawnControl.scala b/src/main/scala/net/psforever/objects/serverobject/pad/VehicleSpawnControl.scala index 4eb50c1e1..21a78ed9b 100644 --- a/src/main/scala/net/psforever/objects/serverobject/pad/VehicleSpawnControl.scala +++ b/src/main/scala/net/psforever/objects/serverobject/pad/VehicleSpawnControl.scala @@ -11,7 +11,7 @@ import net.psforever.objects.sourcing.AmenitySource import net.psforever.objects.vital.TerminalUsedActivity import net.psforever.objects.zones.{Zone, ZoneAware, Zoning} import net.psforever.objects.{Default, PlanetSideGameObject, Player, Vehicle} -import net.psforever.services.vehicle.VehicleServiceMessage +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.types.{PlanetSideGUID, TransactionType, Vector3} import scala.annotation.tailrec @@ -129,7 +129,7 @@ class VehicleSpawnControl(pad: VehicleSpawnPad) } trackedOrder = None handleOrderFunc = NewTasking - pad.Zone.VehicleEvents ! VehicleServiceMessage(pad.Zone.id, VehicleSpawnPad.ResetSpawnPad(pad)) //cautious animation reset + pad.Zone.VehicleEvents ! MessageEnvelope(pad.Zone.id, VehicleSpawnPad.ResetSpawnPad(pad)) //cautious animation reset self ! akka.actor.Kill //should cause the actor to restart, which will abort any trapped messages case _ => () @@ -165,7 +165,7 @@ class VehicleSpawnControl(pad: VehicleSpawnPad) //first queued order orders = List(order) queueManagementTask() - pad.Zone.VehicleEvents ! VehicleServiceMessage( + pad.Zone.VehicleEvents ! MessageEnvelope( name, VehicleSpawnPad.PeriodicReminder(VehicleSpawnPad.Reminders.Queue, Some(s"@SVCP_PositionInQueue^2~^2~")) ) @@ -173,7 +173,7 @@ class VehicleSpawnControl(pad: VehicleSpawnPad) //new order orders = orders :+ order val size = orders.size + 1 - pad.Zone.VehicleEvents ! VehicleServiceMessage( + pad.Zone.VehicleEvents ! MessageEnvelope( name, VehicleSpawnPad.PeriodicReminder(VehicleSpawnPad.Reminders.Queue, Some(s"@SVCP_PositionInQueue^$size~^$size~")) ) @@ -184,7 +184,7 @@ class VehicleSpawnControl(pad: VehicleSpawnPad) val originalVehicle = originalOrder.vehicle.Definition.Name orders = (orders.take(n) :+ order) ++ orders.drop(n+1) VehicleSpawnControl.DisposeVehicle(originalOrder.vehicle, zone) - zone.VehicleEvents ! VehicleServiceMessage( + zone.VehicleEvents ! MessageEnvelope( name, VehicleSpawnPad.PeriodicReminder(VehicleSpawnPad.Reminders.Queue, Some(s"@SVCP_ReplacedVehicleWithVehicle^@$originalVehicle~^@${order.vehicle.Definition.Name}~")) ) @@ -243,7 +243,7 @@ class VehicleSpawnControl(pad: VehicleSpawnPad) val newOrder = VehicleSpawnControl.Order(driver, vehicle) recursiveOrderReminder(orders.iterator, size) trace(s"processing next order - a ${vehicle.Definition.Name} for $name") - pad.Zone.VehicleEvents ! VehicleServiceMessage( + pad.Zone.VehicleEvents ! MessageEnvelope( name, VehicleSpawnPad.PeriodicReminder(VehicleSpawnPad.Reminders.Queue, Some(s"@SVCP_PositionInQueue^1~^$size~")) ) @@ -321,7 +321,7 @@ class VehicleSpawnControl(pad: VehicleSpawnPad) private def CancelOrder(vehicle: Vehicle, player: Player, msg: Option[String]): Unit = { if (vehicle.Seats.values.count(_.isOccupied) == 0) { VehicleSpawnControl.DisposeSpawnedVehicle(vehicle, player, pad.Zone) - pad.Zone.VehicleEvents ! VehicleServiceMessage( + pad.Zone.VehicleEvents ! MessageEnvelope( player.Name, VehicleSpawnPad.PeriodicReminder(VehicleSpawnPad.Reminders.Cancelled, msg) ) @@ -451,7 +451,7 @@ class VehicleSpawnControl(pad: VehicleSpawnPad) entry: VehicleSpawnPad.VehicleOrder, cause: Option[Any] ): Unit = { - pad.Zone.VehicleEvents ! VehicleServiceMessage( + pad.Zone.VehicleEvents ! MessageEnvelope( entry.player.Name, VehicleSpawnPad.PeriodicReminder(VehicleSpawnPad.Reminders.Blocked, cause) ) @@ -464,7 +464,7 @@ class VehicleSpawnControl(pad: VehicleSpawnPad) ): Unit = { if (iter.hasNext) { val recipient = iter.next() - pad.Zone.VehicleEvents ! VehicleServiceMessage( + pad.Zone.VehicleEvents ! MessageEnvelope( recipient.player.Name, VehicleSpawnPad.PeriodicReminder(VehicleSpawnPad.Reminders.Queue, Some(s"@SVCP_PositionInQueue^$position~^$size~")) ) @@ -562,7 +562,7 @@ object VehicleSpawnControl { */ private def DisposeSpawnedVehicle(vehicle: Vehicle, player: Player, zone: Zone): Unit = { DisposeVehicle(vehicle, zone) - zone.VehicleEvents ! VehicleServiceMessage(zone.id, VehicleSpawnPad.RevealPlayer(player.GUID)) + zone.VehicleEvents ! MessageEnvelope(zone.id, VehicleSpawnPad.RevealPlayer(player.GUID)) } /** diff --git a/src/main/scala/net/psforever/objects/serverobject/pad/process/VehicleSpawnControlConcealPlayer.scala b/src/main/scala/net/psforever/objects/serverobject/pad/process/VehicleSpawnControlConcealPlayer.scala index 3f3813584..dc8391395 100644 --- a/src/main/scala/net/psforever/objects/serverobject/pad/process/VehicleSpawnControlConcealPlayer.scala +++ b/src/main/scala/net/psforever/objects/serverobject/pad/process/VehicleSpawnControlConcealPlayer.scala @@ -3,7 +3,7 @@ package net.psforever.objects.serverobject.pad.process import akka.actor.Props import net.psforever.objects.serverobject.pad.{VehicleSpawnControl, VehicleSpawnPad} -import net.psforever.services.vehicle.VehicleServiceMessage +import net.psforever.services.base.envelope.MessageEnvelope import scala.concurrent.ExecutionContext.Implicits.global import scala.concurrent.duration._ @@ -29,7 +29,7 @@ class VehicleSpawnControlConcealPlayer(pad: VehicleSpawnPad) extends VehicleSpaw case order @ VehicleSpawnControl.Order(driver, vehicle) => if (VehicleSpawnControl.validateOrderCredentials(pad, driver, vehicle).isEmpty) { trace(s"hiding ${driver.Name}") - pad.Zone.VehicleEvents ! VehicleServiceMessage(pad.Zone.id, VehicleSpawnPad.ConcealPlayer(driver.GUID)) + pad.Zone.VehicleEvents ! MessageEnvelope(pad.Zone.id, VehicleSpawnPad.ConcealPlayer(driver.GUID)) context.system.scheduler.scheduleOnce(2000 milliseconds, loadVehicle, order) } else { trace(s"integral component lost; abort order fulfillment") diff --git a/src/main/scala/net/psforever/objects/serverobject/pad/process/VehicleSpawnControlDriverControl.scala b/src/main/scala/net/psforever/objects/serverobject/pad/process/VehicleSpawnControlDriverControl.scala index d43d36a43..8632a10f9 100644 --- a/src/main/scala/net/psforever/objects/serverobject/pad/process/VehicleSpawnControlDriverControl.scala +++ b/src/main/scala/net/psforever/objects/serverobject/pad/process/VehicleSpawnControlDriverControl.scala @@ -3,7 +3,7 @@ package net.psforever.objects.serverobject.pad.process import akka.actor.Props import net.psforever.objects.serverobject.pad.{VehicleSpawnControl, VehicleSpawnPad} -import net.psforever.services.vehicle.VehicleServiceMessage +import net.psforever.services.base.envelope.MessageEnvelope /** * An `Actor` that handles vehicle spawning orders for a `VehicleSpawnPad`. @@ -25,7 +25,7 @@ class VehicleSpawnControlDriverControl(pad: VehicleSpawnPad) extends VehicleSpaw case order @ VehicleSpawnControl.Order(driver, vehicle) => trace(s"returning control of ${vehicle.Definition.Name} to its current driver") if (vehicle.PassengerInSeat(driver).nonEmpty) { - pad.Zone.VehicleEvents ! VehicleServiceMessage(driver.Name, VehicleSpawnPad.ServerVehicleOverrideEnd(vehicle, pad)) + pad.Zone.VehicleEvents ! MessageEnvelope(driver.Name, VehicleSpawnPad.ServerVehicleOverrideEnd(vehicle, pad)) } finalClear ! order diff --git a/src/main/scala/net/psforever/objects/serverobject/pad/process/VehicleSpawnControlFinalClearance.scala b/src/main/scala/net/psforever/objects/serverobject/pad/process/VehicleSpawnControlFinalClearance.scala index d8ab0a7c5..d67eff488 100644 --- a/src/main/scala/net/psforever/objects/serverobject/pad/process/VehicleSpawnControlFinalClearance.scala +++ b/src/main/scala/net/psforever/objects/serverobject/pad/process/VehicleSpawnControlFinalClearance.scala @@ -4,8 +4,9 @@ package net.psforever.objects.serverobject.pad.process import akka.actor.Cancellable import net.psforever.objects.Default import net.psforever.objects.serverobject.pad.{VehicleSpawnControl, VehicleSpawnPad} +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.types.Vector3 -import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage} +import net.psforever.services.vehicle.VehicleAction import scala.concurrent.ExecutionContext.Implicits.global import scala.concurrent.duration._ @@ -35,7 +36,7 @@ class VehicleSpawnControlFinalClearance(pad: VehicleSpawnPad) extends VehicleSpa //ensure the vacant vehicle is above the trench and the doors vehicle.Position = pad.Position + Vector3.z(pad.Definition.VehicleCreationZOffset) val definition = vehicle.Definition - pad.Zone.VehicleEvents ! VehicleServiceMessage( + pad.Zone.VehicleEvents ! MessageEnvelope( s"${pad.Continent}", VehicleAction.LoadVehicle(vehicle, definition.ObjectId, vehicle.GUID, definition.Packet.ConstructorData(vehicle).get) ) @@ -64,7 +65,7 @@ class VehicleSpawnControlFinalClearance(pad: VehicleSpawnPad) extends VehicleSpa } case VehicleSpawnControlFinalClearance.NextOrder => - pad.Zone.VehicleEvents ! VehicleServiceMessage(pad.Zone.id, VehicleSpawnPad.ResetSpawnPad(pad)) + pad.Zone.VehicleEvents ! MessageEnvelope(pad.Zone.id, VehicleSpawnPad.ResetSpawnPad(pad)) context.parent ! VehicleSpawnControl.ProcessControl.GetNewOrder case _ => () diff --git a/src/main/scala/net/psforever/objects/serverobject/pad/process/VehicleSpawnControlLoadVehicle.scala b/src/main/scala/net/psforever/objects/serverobject/pad/process/VehicleSpawnControlLoadVehicle.scala index bf2a90b48..3460b4fd8 100644 --- a/src/main/scala/net/psforever/objects/serverobject/pad/process/VehicleSpawnControlLoadVehicle.scala +++ b/src/main/scala/net/psforever/objects/serverobject/pad/process/VehicleSpawnControlLoadVehicle.scala @@ -7,7 +7,8 @@ import akka.util.Timeout import net.psforever.objects.GlobalDefinitions import net.psforever.objects.serverobject.pad.{VehicleSpawnControl, VehicleSpawnPad} import net.psforever.objects.zones.Zone -import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage} +import net.psforever.services.base.envelope.MessageEnvelope +import net.psforever.services.vehicle.VehicleAction import net.psforever.types.Vector3 import net.psforever.zones.Zones @@ -67,7 +68,7 @@ class VehicleSpawnControlLoadVehicle(pad: VehicleSpawnPad) extends VehicleSpawnC val vtype = definition.ObjectId val vguid = v.GUID val vdata = definition.Packet.ConstructorData(v).get - zone.VehicleEvents ! VehicleServiceMessage( + zone.VehicleEvents ! MessageEnvelope( zone.id, VehicleAction.LoadVehicle(v, vtype, vguid, vdata) ) diff --git a/src/main/scala/net/psforever/objects/serverobject/pad/process/VehicleSpawnControlRailJack.scala b/src/main/scala/net/psforever/objects/serverobject/pad/process/VehicleSpawnControlRailJack.scala index f3142039b..4dda6e120 100644 --- a/src/main/scala/net/psforever/objects/serverobject/pad/process/VehicleSpawnControlRailJack.scala +++ b/src/main/scala/net/psforever/objects/serverobject/pad/process/VehicleSpawnControlRailJack.scala @@ -11,7 +11,7 @@ import net.psforever.objects.vital.interaction.{DamageInteraction, DamageResult} import net.psforever.objects.vital.prop.DamageProperties import net.psforever.objects.vital.Vitality import net.psforever.objects.zones.Zone -import net.psforever.services.vehicle.VehicleServiceMessage +import net.psforever.services.base.envelope.MessageEnvelope import scala.concurrent.ExecutionContext.Implicits.global import scala.concurrent.duration._ @@ -41,7 +41,7 @@ class VehicleSpawnControlRailJack(pad: VehicleSpawnPad) extends VehicleSpawnCont pad.Definition.killBox(pad, vehicle.Definition.CanFly), Zone.findAllTargets ) - pad.Zone.VehicleEvents ! VehicleServiceMessage(pad.Zone.id, VehicleSpawnPad.AttachToRails(vehicle, pad)) + pad.Zone.VehicleEvents ! MessageEnvelope(pad.Zone.id, VehicleSpawnPad.AttachToRails(vehicle, pad)) context.system.scheduler.scheduleOnce(10 milliseconds, seatDriver, order) case msg @ (VehicleSpawnControl.ProcessControl.Reminder | VehicleSpawnControl.ProcessControl.GetNewOrder) => diff --git a/src/main/scala/net/psforever/objects/serverobject/pad/process/VehicleSpawnControlSeatDriver.scala b/src/main/scala/net/psforever/objects/serverobject/pad/process/VehicleSpawnControlSeatDriver.scala index 92ca1f010..6c7218b17 100644 --- a/src/main/scala/net/psforever/objects/serverobject/pad/process/VehicleSpawnControlSeatDriver.scala +++ b/src/main/scala/net/psforever/objects/serverobject/pad/process/VehicleSpawnControlSeatDriver.scala @@ -4,7 +4,7 @@ package net.psforever.objects.serverobject.pad.process import akka.actor.{ActorRef, Props} import net.psforever.objects.{Default, Vehicle} import net.psforever.objects.serverobject.pad.{VehicleSpawnControl, VehicleSpawnPad} -import net.psforever.services.vehicle.VehicleServiceMessage +import net.psforever.services.base.envelope.MessageEnvelope import scala.concurrent.ExecutionContext.Implicits.global import scala.concurrent.duration._ @@ -47,7 +47,7 @@ class VehicleSpawnControlSeatDriver(pad: VehicleSpawnPad) extends VehicleSpawnCo vehicle.Actor ! Vehicle.Deconstruct(Some(pad.Definition.VehicleCreationDeconstructTime.seconds)) if (VehicleSpawnControl.validateOrderCredentials(pad, driver, vehicle).isEmpty) { trace("driver to be made seated in vehicle") - pad.Zone.VehicleEvents ! VehicleServiceMessage(driver.Name, VehicleSpawnPad.StartPlayerSeatedInVehicle(vehicle, pad)) + pad.Zone.VehicleEvents ! MessageEnvelope(driver.Name, VehicleSpawnPad.StartPlayerSeatedInVehicle(vehicle, pad)) } else { trace("driver lost; vehicle stranded on pad") } @@ -59,7 +59,7 @@ class VehicleSpawnControlSeatDriver(pad: VehicleSpawnPad) extends VehicleSpawnCo if (VehicleSpawnControl.validateOrderCredentials(pad, driver, vehicle).isEmpty && entry.vehicle.PassengerInSeat(entry.driver).contains(0)) { trace(s"driver ${entry.driver.Name} has taken the wheel") - pad.Zone.VehicleEvents ! VehicleServiceMessage(entry.driver.Name, VehicleSpawnPad.PlayerSeatedInVehicle(entry.vehicle, pad)) + pad.Zone.VehicleEvents ! MessageEnvelope(entry.driver.Name, VehicleSpawnPad.PlayerSeatedInVehicle(entry.vehicle, pad)) } else { trace("driver lost, but operations can continue") } diff --git a/src/main/scala/net/psforever/objects/serverobject/pad/process/VehicleSpawnControlServerVehicleOverride.scala b/src/main/scala/net/psforever/objects/serverobject/pad/process/VehicleSpawnControlServerVehicleOverride.scala index 0dabf4807..496d06938 100644 --- a/src/main/scala/net/psforever/objects/serverobject/pad/process/VehicleSpawnControlServerVehicleOverride.scala +++ b/src/main/scala/net/psforever/objects/serverobject/pad/process/VehicleSpawnControlServerVehicleOverride.scala @@ -3,7 +3,7 @@ package net.psforever.objects.serverobject.pad.process import akka.actor.Props import net.psforever.objects.serverobject.pad.{VehicleSpawnControl, VehicleSpawnPad} -import net.psforever.services.vehicle.VehicleServiceMessage +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.types.Vector3 import scala.concurrent.ExecutionContext.Implicits.global @@ -32,18 +32,18 @@ class VehicleSpawnControlServerVehicleOverride(pad: VehicleSpawnPad) extends Veh val driverFailState = !driver.isAlive || driver.Continent != pad.Continent || !vehicle.PassengerInSeat(driver).contains(0) vehicle.MountedIn = None - pad.Zone.VehicleEvents ! VehicleServiceMessage(pad.Zone.id, VehicleSpawnPad.DetachFromRails(vehicle, pad)) + pad.Zone.VehicleEvents ! MessageEnvelope(pad.Zone.id, VehicleSpawnPad.DetachFromRails(vehicle, pad)) if (vehicleFailState || driverFailState) { if (vehicleFailState) { trace(s"vehicle was already destroyed") } else { trace(s"driver is not ready") } - pad.Zone.VehicleEvents ! VehicleServiceMessage(pad.Zone.id, VehicleSpawnPad.RevealPlayer(order.DriverGUID)) + pad.Zone.VehicleEvents ! MessageEnvelope(pad.Zone.id, VehicleSpawnPad.RevealPlayer(order.DriverGUID)) driverControl ! order } else { trace(s"telling ${driver.Name} that the server is assuming control of the ${vehicle.Definition.Name}") - pad.Zone.VehicleEvents ! VehicleServiceMessage(driver.Name, VehicleSpawnPad.ServerVehicleOverrideStart(vehicle, pad)) + pad.Zone.VehicleEvents ! MessageEnvelope(driver.Name, VehicleSpawnPad.ServerVehicleOverrideStart(vehicle, pad)) context.system.scheduler.scheduleOnce(4000 milliseconds, driverControl, order) } diff --git a/src/main/scala/net/psforever/objects/serverobject/repair/RepairableAmenity.scala b/src/main/scala/net/psforever/objects/serverobject/repair/RepairableAmenity.scala index 0a09a5251..14fde4811 100644 --- a/src/main/scala/net/psforever/objects/serverobject/repair/RepairableAmenity.scala +++ b/src/main/scala/net/psforever/objects/serverobject/repair/RepairableAmenity.scala @@ -5,8 +5,9 @@ import net.psforever.objects.Tool import net.psforever.objects.serverobject.structures.Amenity import net.psforever.objects.sourcing.{SourceEntry, SourceWithHealthEntry} import net.psforever.objects.vital.{DamagingActivity, RepairFromEquipment, SpawningActivity} -import net.psforever.services.avatar.AvatarServiceMessage -import net.psforever.services.base.message.PlanetsideAttribute +import net.psforever.packet.game.PlanetsideAttributeMessage +import net.psforever.services.base.envelope.MessageEnvelope +import net.psforever.services.base.message.SendResponse /** * The "control" `Actor` mixin for repair-handling code @@ -29,7 +30,6 @@ object RepairableAmenity { * A restored `Amenity` target dispatches two messages to chance its model and operational states. * These `PlanetSideAttributeMessage` attributes are the same as reported during zone load client configuration. * @see `PlanetsideAttribute` - * @see `AvatarServiceMessage` * @see `Zone.AvatarEvents` * @param target the entity being destroyed */ @@ -38,8 +38,10 @@ object RepairableAmenity { val zoneId = zone.id val events = zone.AvatarEvents val targetGUID = target.GUID - events ! AvatarServiceMessage(zoneId, PlanetsideAttribute(targetGUID, 50, 0)) - events ! AvatarServiceMessage(zoneId, PlanetsideAttribute(targetGUID, 51, 0)) + events ! MessageEnvelope( + zoneId, + SendResponse(List(PlanetsideAttributeMessage(targetGUID, 50, 0), PlanetsideAttributeMessage(targetGUID, 51, 0))) + ) RestorationOfHistory(target) } diff --git a/src/main/scala/net/psforever/objects/serverobject/repair/RepairableEntity.scala b/src/main/scala/net/psforever/objects/serverobject/repair/RepairableEntity.scala index 07b4fe238..a9f436a63 100644 --- a/src/main/scala/net/psforever/objects/serverobject/repair/RepairableEntity.scala +++ b/src/main/scala/net/psforever/objects/serverobject/repair/RepairableEntity.scala @@ -8,7 +8,7 @@ import net.psforever.objects.vital.RepairFromEquipment import net.psforever.objects.{Player, Tool} import net.psforever.packet.game.{ChatMsg, InventoryStateMessage, RepairMessage} import net.psforever.types.{ChatMessageType, PlanetSideEmpire, Vector3} -import net.psforever.services.avatar.AvatarServiceMessage +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.services.base.message.{PlanetsideAttribute, SendResponse} /** @@ -89,7 +89,7 @@ trait RepairableEntity extends Repairable { if (!(player.isMoving(test = 1f) || target.isMoving(test = 1f))) { //only allow stationary repairs within margin of error val repairValue = Repairable.applyLevelModifier(player, item, RepairToolValue(item)).toInt + target.Definition.RepairMod val magazine = item.Discharge() - events ! AvatarServiceMessage( + events ! MessageEnvelope( player.Name, SendResponse(InventoryStateMessage(item.AmmoSlot.Box.GUID, item.GUID, magazine.toLong)) ) @@ -105,7 +105,7 @@ trait RepairableEntity extends Repairable { originalHealth } //progress bar remains visible - events ! AvatarServiceMessage( + events ! MessageEnvelope( name, SendResponse(RepairMessage(target.GUID, updatedHealth * 100 / definition.MaxHealth)) ) @@ -140,11 +140,11 @@ trait RepairableEntity extends Repairable { val newHealth = target.Health = target.Health + amount if (target.Destroyed) { if (newHealth >= target.Definition.RepairRestoresAt) { - events ! AvatarServiceMessage(zoneId, PlanetsideAttribute(tguid, 0, newHealth)) + events ! MessageEnvelope(zoneId, PlanetsideAttribute(tguid, 0, newHealth)) Restoration(target) } } else { - events ! AvatarServiceMessage(zoneId, PlanetsideAttribute(tguid, 0, newHealth)) + events ! MessageEnvelope(zoneId, PlanetsideAttribute(tguid, 0, newHealth)) } newHealth } diff --git a/src/main/scala/net/psforever/objects/serverobject/repair/RepairableWeaponTurret.scala b/src/main/scala/net/psforever/objects/serverobject/repair/RepairableWeaponTurret.scala index 64e4b5ced..b712fb957 100644 --- a/src/main/scala/net/psforever/objects/serverobject/repair/RepairableWeaponTurret.scala +++ b/src/main/scala/net/psforever/objects/serverobject/repair/RepairableWeaponTurret.scala @@ -5,7 +5,8 @@ import net.psforever.objects.Tool import net.psforever.objects.equipment.EquipmentSlot import net.psforever.objects.serverobject.turret.WeaponTurret import net.psforever.objects.vehicles.MountedWeapons -import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage} +import net.psforever.services.base.envelope.MessageEnvelope +import net.psforever.services.vehicle.VehicleAction /** * The "control" `Actor` mixin for repair-handling code for `WeaponTurret` objects. @@ -29,8 +30,7 @@ object RepairableWeaponTurret { * @see `MountedWeapons.Weapons` * @see `Service.defaultPlayerGUID` * @see `WeaponTurret` - * @see `VehicleAction.EquipmentInSlot` - * @see `VehicleServiceMessage` + * @see `EquipmentInSlot` * @see `Zone.VehicleEvents` * @param target the entity being destroyed; * note: `MountedWeapons` is a parent of `WeaponTurret` @@ -45,7 +45,7 @@ object RepairableWeaponTurret { .map({ case (index, slot: EquipmentSlot) => (index, slot.Equipment) }) .collect { case (index: Int, Some(tool: Tool)) => - events ! VehicleServiceMessage( + events ! MessageEnvelope( zoneId, VehicleAction.EquipmentInSlot(tguid, index, tool) ) diff --git a/src/main/scala/net/psforever/objects/serverobject/resourcesilo/ResourceSiloControl.scala b/src/main/scala/net/psforever/objects/serverobject/resourcesilo/ResourceSiloControl.scala index c9a2104ff..5b8f7d5b2 100644 --- a/src/main/scala/net/psforever/objects/serverobject/resourcesilo/ResourceSiloControl.scala +++ b/src/main/scala/net/psforever/objects/serverobject/resourcesilo/ResourceSiloControl.scala @@ -11,9 +11,9 @@ import net.psforever.objects.zones import net.psforever.objects.{GlobalDefinitions, Ntu, NtuContainer, NtuStorageBehavior, Vehicle} import net.psforever.types.{ExperienceType, PlanetSideEmpire} import net.psforever.services.Service -import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage} +import net.psforever.services.avatar.AvatarAction +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.services.base.message.PlanetsideAttribute -import net.psforever.services.vehicle.VehicleServiceMessage import net.psforever.util.Config import scala.concurrent.ExecutionContext.Implicits.global @@ -107,7 +107,7 @@ class ResourceSiloControl(resourceSilo: ResourceSilo) log.trace(s"LowNtuWarning: Silo ${resourceSilo.GUID} low ntu warning set to $enabled") val building = resourceSilo.Owner val zone = building.Zone - building.Zone.AvatarEvents ! AvatarServiceMessage( + building.Zone.AvatarEvents ! MessageEnvelope( zone.id, building.GUID, PlanetsideAttribute(building.GUID, 47, if (resourceSilo.LowNtuWarningOn) 1 else 0) @@ -131,7 +131,7 @@ class ResourceSiloControl(resourceSilo: ResourceSilo) log.trace( s"UpdateChargeLevel: silo ${resourceSilo.GUID} NTU bar level has changed from $siloDisplayBeforeChange to ${resourceSilo.CapacitorDisplay}" ) - zone.AvatarEvents ! AvatarServiceMessage( + zone.AvatarEvents ! MessageEnvelope( zone.id, resourceSilo.GUID, PlanetsideAttribute(resourceSilo.GUID, 45, resourceSilo.CapacitorDisplay) @@ -205,11 +205,11 @@ class ResourceSiloControl(resourceSilo: ResourceSilo) (Config.app.game.experience.sep.ntuSiloDepositReward.toFloat * amount * resourceSilo.Definition.ChargeTime.toSeconds.toFloat / resourceSilo.MaxNtuCapacitor ).toLong - vehicle.Zone.AvatarEvents ! AvatarServiceMessage( + vehicle.Zone.AvatarEvents ! MessageEnvelope( owner.name, AvatarAction.AwardBep(owner.charId, deposit, ExperienceType.Normal) ) - vehicle.Zone.AvatarEvents ! AvatarServiceMessage( + vehicle.Zone.AvatarEvents ! MessageEnvelope( owner.name, AvatarAction.ShareAntExperienceWithSquad(owner, deposit, vehicle)) zones.exp.ToDatabase.reportNtuActivity(owner.charId, resourceSilo.Zone.Number, resourceSilo.Owner.GUID.guid, deposit) } @@ -232,7 +232,7 @@ class ResourceSiloControl(resourceSilo: ResourceSilo) val amount = (if (trigger > 0) { // panel glow & orb particles on val zone = resourceSilo.Zone - zone.VehicleEvents ! VehicleServiceMessage( + zone.VehicleEvents ! MessageEnvelope( zone.id, PlanetsideAttribute(resourceSilo.GUID, 49, 1) ) @@ -243,7 +243,7 @@ class ResourceSiloControl(resourceSilo: ResourceSilo) } else { // panel glow & orb particles off val zone = resourceSilo.Zone - zone.VehicleEvents ! VehicleServiceMessage( + zone.VehicleEvents ! MessageEnvelope( zone.id, PlanetsideAttribute(resourceSilo.GUID, 49, 0) ) diff --git a/src/main/scala/net/psforever/objects/serverobject/shuttle/OrbitalShuttlePadControl.scala b/src/main/scala/net/psforever/objects/serverobject/shuttle/OrbitalShuttlePadControl.scala index 2d9cc5e29..380d7b95c 100644 --- a/src/main/scala/net/psforever/objects/serverobject/shuttle/OrbitalShuttlePadControl.scala +++ b/src/main/scala/net/psforever/objects/serverobject/shuttle/OrbitalShuttlePadControl.scala @@ -8,7 +8,7 @@ import net.psforever.objects.serverobject.PlanetSideServerObject import net.psforever.objects.serverobject.doors.Door import net.psforever.objects.zones.Zone import net.psforever.packet.game.ChatMsg -import net.psforever.services.avatar.AvatarServiceMessage +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.services.base.message.SendResponse import net.psforever.services.base.support.SupportActor import net.psforever.services.local.LocalAction @@ -184,7 +184,6 @@ object OrbitalShuttlePadControl { * A message flashes onscreen to explain this reason. * The message will not flash if the door has no expectation of ever opening for a user. * @see `SendResponse` - * @see `AvatarServiceMessage` * @see `ChatMessageType` * @see `ChatMsg` * @see `Player` @@ -198,7 +197,7 @@ object OrbitalShuttlePadControl { val zone = door.Zone obj match { case p: Player if p.Faction == door.Faction => - zone.AvatarEvents ! AvatarServiceMessage( + zone.AvatarEvents ! MessageEnvelope( p.Name, SendResponse( ChatMsg(ChatMessageType.UNK_225, wideContents=false, "", "@DoorWillOpenWhenShuttleReturns", None) diff --git a/src/main/scala/net/psforever/objects/serverobject/structures/participation/FacilityHackParticipation.scala b/src/main/scala/net/psforever/objects/serverobject/structures/participation/FacilityHackParticipation.scala index 0a6be53e7..27500e6ec 100644 --- a/src/main/scala/net/psforever/objects/serverobject/structures/participation/FacilityHackParticipation.scala +++ b/src/main/scala/net/psforever/objects/serverobject/structures/participation/FacilityHackParticipation.scala @@ -4,7 +4,9 @@ package net.psforever.objects.serverobject.structures.participation import net.psforever.objects.Player import net.psforever.objects.avatar.scoring.Kill import net.psforever.objects.sourcing.UniquePlayer -import net.psforever.services.base.message.GenericObjectAction +import net.psforever.packet.game.GenericObjectActionMessage +import net.psforever.services.base.envelope.MessageEnvelope +import net.psforever.services.base.message.SendResponse import net.psforever.types.{PlanetSideEmpire, Vector3} import scala.collection.mutable @@ -107,14 +109,14 @@ trait FacilityHackParticipation extends ParticipationLogic { if (building.virusId != 8) { import net.psforever.objects.serverobject.terminals.Terminal import net.psforever.objects.GlobalDefinitions - import net.psforever.services.avatar.AvatarServiceMessage val mainTerm = building.Amenities.filter(x => x.isInstanceOf[Terminal] && x.Definition == GlobalDefinitions.main_terminal).head.GUID - val msg1 = GenericObjectAction(mainTerm, 61) - val msg2 = GenericObjectAction(mainTerm, 58) + val pkts = SendResponse(List( + GenericObjectActionMessage(mainTerm, 61), + GenericObjectActionMessage(mainTerm, 58) + )) val events = building.Zone.AvatarEvents list.foreach { p => - events ! AvatarServiceMessage(p.Name, msg1) - events ! AvatarServiceMessage(p.Name, msg2) + events ! MessageEnvelope(p.Name, pkts) } } } diff --git a/src/main/scala/net/psforever/objects/serverobject/structures/participation/MajorFacilityHackParticipation.scala b/src/main/scala/net/psforever/objects/serverobject/structures/participation/MajorFacilityHackParticipation.scala index 73f1df132..47724f48c 100644 --- a/src/main/scala/net/psforever/objects/serverobject/structures/participation/MajorFacilityHackParticipation.scala +++ b/src/main/scala/net/psforever/objects/serverobject/structures/participation/MajorFacilityHackParticipation.scala @@ -4,7 +4,7 @@ package net.psforever.objects.serverobject.structures.participation import net.psforever.objects.serverobject.structures.{Building, StructureType} import net.psforever.objects.sourcing.{PlayerSource, UniquePlayer} import net.psforever.objects.zones.{HotSpotInfo, ZoneHotSpotProjector} -import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage} +import net.psforever.services.avatar.AvatarAction import net.psforever.types.{ChatMessageType, PlanetSideEmpire, Vector3} import net.psforever.util.Config import akka.pattern.ask @@ -15,8 +15,8 @@ import net.psforever.objects.avatar.scoring.Kill import net.psforever.objects.serverobject.hackable.Hackable import net.psforever.objects.zones.exp.ToDatabase import net.psforever.packet.game.ChatMsg +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.services.base.message.SendResponse -import net.psforever.services.local.LocalServiceMessage import scala.collection.mutable import scala.concurrent.duration._ @@ -304,7 +304,7 @@ final case class MajorFacilityHackParticipation(building: Building) extends Faci finalCep, expType = "cep" ) - events ! AvatarServiceMessage(hacker.Name, AvatarAction.AwardCep(hackerId, finalCep)) + events ! MessageEnvelope(hacker.Name, AvatarAction.AwardCep(hackerId, finalCep)) }*/ //bystanders (cep if squad leader, bep otherwise) contributingPlayers @@ -313,7 +313,7 @@ final case class MajorFacilityHackParticipation(building: Building) extends Faci val charId = player.CharId val contributionMultiplier = contributionPerPlayerByTime.getOrElse(charId, 1f) val outputValue = (finalCep * contributionMultiplier).toLong - events ! AvatarServiceMessage(player.Name, AvatarAction.FacilityCaptureRewards(buildingId, zoneNumber, outputValue)) + events ! MessageEnvelope(player.Name, AvatarAction.FacilityCaptureRewards(buildingId, zoneNumber, outputValue)) } //flag carrier (won't be in soi, but earns cep from capture) flagCarrier.collect { @@ -338,7 +338,7 @@ final case class MajorFacilityHackParticipation(building: Building) extends Faci finalModifiedCep, expType = "llu" ) - events ! AvatarServiceMessage(player.Name, AvatarAction.AwardCep(charId, finalModifiedCep)) + events ! MessageEnvelope(player.Name, AvatarAction.AwardCep(charId, finalModifiedCep)) } } else { //no need to calculate a fancy score @@ -441,7 +441,7 @@ object MajorFacilityHackParticipation { val events = building.Zone.LocalEvents val message = SendResponse(msg) targets.foreach { player => - events ! LocalServiceMessage(player.Name, message) + events ! MessageEnvelope(player.Name, message) } } } diff --git a/src/main/scala/net/psforever/objects/serverobject/structures/participation/TowerHackParticipation.scala b/src/main/scala/net/psforever/objects/serverobject/structures/participation/TowerHackParticipation.scala index 505c401ae..7c65c07bd 100644 --- a/src/main/scala/net/psforever/objects/serverobject/structures/participation/TowerHackParticipation.scala +++ b/src/main/scala/net/psforever/objects/serverobject/structures/participation/TowerHackParticipation.scala @@ -4,7 +4,8 @@ package net.psforever.objects.serverobject.structures.participation import net.psforever.objects.serverobject.structures.Building import net.psforever.objects.sourcing.PlayerSource import net.psforever.objects.zones.exp.ToDatabase -import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage} +import net.psforever.services.avatar.AvatarAction +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.types.{PlanetSideEmpire, Vector3} import net.psforever.util.Config @@ -144,7 +145,7 @@ final case class TowerHackParticipation(building: Building) extends FacilityHack //7. reward participants //Classically, only players in the SOI are rewarded //terminal hacker (always cep) - events ! AvatarServiceMessage(hacker.Name, AvatarAction.AwardCep(hacker.CharId, finalCep)) + events ! MessageEnvelope(hacker.Name, AvatarAction.AwardCep(hacker.CharId, finalCep)) ToDatabase.reportFacilityCapture( hackerId, zoneNumber, @@ -160,7 +161,7 @@ final case class TowerHackParticipation(building: Building) extends FacilityHack val contributionTimeMultiplier = contributionPerPlayerByTime.getOrElse(charId, 0.5f) val contributionDistanceMultiplier = contributionPerPlayerByDistanceFromGoal.getOrElse(charId, 0.5f) val outputValue = (finalCep * contributionTimeMultiplier * contributionDistanceMultiplier).toLong - events ! AvatarServiceMessage( + events ! MessageEnvelope( player.Name, AvatarAction.FacilityCaptureRewards(buildingId, zoneNumber, outputValue) ) diff --git a/src/main/scala/net/psforever/objects/serverobject/terminals/ProximityTerminalControl.scala b/src/main/scala/net/psforever/objects/serverobject/terminals/ProximityTerminalControl.scala index f1b95da07..a68ca6548 100644 --- a/src/main/scala/net/psforever/objects/serverobject/terminals/ProximityTerminalControl.scala +++ b/src/main/scala/net/psforever/objects/serverobject/terminals/ProximityTerminalControl.scala @@ -6,6 +6,7 @@ import net.psforever.objects.serverobject.damage.Damageable import net.psforever.objects.sourcing.AmenitySource import net.psforever.objects.vital.interaction.DamageResult import net.psforever.packet.game.HackState1 +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.services.base.message.{PlanetsideAttribute, SendResponse} import net.psforever.services.local.support.{HackClearActor, HackClearEnvelope} import org.log4s.Logger @@ -26,9 +27,7 @@ import net.psforever.objects.serverobject.structures.{Building, PoweredAmenityCo import net.psforever.objects.vital.{HealFromTerminal, RepairFromTerminal, Vitality} import net.psforever.objects.zones.ZoneAware import net.psforever.packet.game.InventoryStateMessage -import net.psforever.services.avatar.AvatarServiceMessage -import net.psforever.services.local.{LocalAction, LocalServiceMessage} -import net.psforever.services.vehicle.VehicleServiceMessage +import net.psforever.services.local.LocalAction /** * An `Actor` that handles messages being dispatched to a specific `ProximityTerminal`. @@ -183,7 +182,7 @@ class ProximityTerminalControl(term: Terminal with ProximityUnit) ProximityTerminalControl.TerminalAction() ) val zone = TerminalObject.Zone - zone.LocalEvents ! LocalServiceMessage(zone.id, LocalAction.ProximityTerminalEffect(TerminalObject.GUID, effectState = true)) + zone.LocalEvents ! MessageEnvelope(zone.id, LocalAction.ProximityTerminalEffect(TerminalObject.GUID, effectState = true)) } } else { log.warn(s"ProximityTerminal.Use: $target was rejected by unit ${term.Definition.Name}@${term.GUID.guid}") @@ -204,7 +203,7 @@ class ProximityTerminalControl(term: Terminal with ProximityUnit) if (term.NumberUsers == 0 && hadUsers) { terminalAction.cancel() val zone = TerminalObject.Zone - zone.LocalEvents ! LocalServiceMessage(zone.id, LocalAction.ProximityTerminalEffect(TerminalObject.GUID, effectState = false)) + zone.LocalEvents ! MessageEnvelope(zone.id, LocalAction.ProximityTerminalEffect(TerminalObject.GUID, effectState = false)) } } else { log.debug( @@ -220,7 +219,7 @@ class ProximityTerminalControl(term: Terminal with ProximityUnit) if (callbacks.nonEmpty) { callbacks.clear() val zone = TerminalObject.Zone - zone.LocalEvents ! LocalServiceMessage(zone.id, LocalAction.ProximityTerminalEffect(TerminalObject.GUID, effectState = true)) + zone.LocalEvents ! MessageEnvelope(zone.id, LocalAction.ProximityTerminalEffect(TerminalObject.GUID, effectState = true)) } //clear hack state if (term.HackedBy.nonEmpty) { @@ -351,7 +350,7 @@ object ProximityTerminalControl { if (oldMax < maxHealthCap) { target.MaxHealth = newMax - zone.AvatarEvents ! AvatarServiceMessage( + zone.AvatarEvents ! MessageEnvelope( zone.id, PlanetsideAttribute(target.GUID, 1, newMax) ) @@ -366,7 +365,7 @@ object ProximityTerminalControl { def PlayerHealthCallback(target: PlanetSideGameObject with Vitality with ZoneAware): Unit = { val zone = target.Zone - zone.AvatarEvents ! AvatarServiceMessage( + zone.AvatarEvents ! MessageEnvelope( zone.id, PlanetsideAttribute(target.GUID, 0, target.Health) ) @@ -374,7 +373,7 @@ object ProximityTerminalControl { def VehicleHealthCallback(target: PlanetSideGameObject with Vitality with ZoneAware): Unit = { val zone = target.Zone - zone.VehicleEvents ! VehicleServiceMessage( + zone.VehicleEvents ! MessageEnvelope( zone.id, PlanetsideAttribute(target.GUID, 0, target.Health) ) @@ -405,7 +404,7 @@ object ProximityTerminalControl { target.Armor = armor + finalRepairAmount target.LogActivity(RepairFromTerminal(AmenitySource(terminal), finalRepairAmount)) val zone = target.Zone - zone.AvatarEvents ! AvatarServiceMessage( + zone.AvatarEvents ! MessageEnvelope( zone.id, PlanetsideAttribute(target.GUID, 4, target.Armor) ) @@ -434,7 +433,7 @@ object ProximityTerminalControl { val channel = target.Name ancient.foreach { case (weapon, slots) => slots.foreach { slot => - events ! AvatarServiceMessage( + events ! MessageEnvelope( channel, SendResponse(InventoryStateMessage(slot.Box.GUID, weapon.GUID, slot.Box.Capacity)) ) @@ -460,7 +459,7 @@ object ProximityTerminalControl { val channel = target.Actor.toString result.foreach { case (weapon, slots) => slots.foreach { slot => - events ! VehicleServiceMessage( + events ! MessageEnvelope( channel, SendResponse(InventoryStateMessage(slot.Box.GUID, weapon.GUID, slot.Box.Capacity)) ) diff --git a/src/main/scala/net/psforever/objects/serverobject/terminals/capture/CaptureTerminals.scala b/src/main/scala/net/psforever/objects/serverobject/terminals/capture/CaptureTerminals.scala index 2fcb492d5..d8cbe03f9 100644 --- a/src/main/scala/net/psforever/objects/serverobject/terminals/capture/CaptureTerminals.scala +++ b/src/main/scala/net/psforever/objects/serverobject/terminals/capture/CaptureTerminals.scala @@ -6,10 +6,11 @@ import net.psforever.objects.serverobject.hackable.GenericHackables import net.psforever.objects.serverobject.structures.{Building, StructureType, WarpGate} import net.psforever.objects.serverobject.{CommonMessages, PlanetSideServerObject} import net.psforever.objects.sourcing.PlayerSource -import net.psforever.services.local.{LocalAction, LocalServiceMessage} +import net.psforever.services.local.LocalAction import net.psforever.services.local.support.HackCaptureActor import net.psforever.services.local.support.CaptureEnvelope import net.psforever.types.PlanetSideEmpire +import net.psforever.services.base.envelope.MessageEnvelope import scala.concurrent.duration._ import scala.util.{Failure, Success} @@ -41,7 +42,7 @@ object CaptureTerminals { val zoneid = zone.id val events = zone.LocalEvents val isResecured = hackingPlayer.Faction == target.Faction - events ! LocalServiceMessage( + events ! MessageEnvelope( zoneid, hackingPlayer.GUID, LocalAction.TriggerSound(target.HackSound, hackingPlayer.Position, 30, 0.49803925f) diff --git a/src/main/scala/net/psforever/objects/serverobject/terminals/implant/ImplantTerminalMechControl.scala b/src/main/scala/net/psforever/objects/serverobject/terminals/implant/ImplantTerminalMechControl.scala index 5417d1d8b..fe4096b29 100644 --- a/src/main/scala/net/psforever/objects/serverobject/terminals/implant/ImplantTerminalMechControl.scala +++ b/src/main/scala/net/psforever/objects/serverobject/terminals/implant/ImplantTerminalMechControl.scala @@ -16,9 +16,9 @@ import net.psforever.objects.vital.interaction.DamageResult import net.psforever.objects.zones.Zone import net.psforever.objects.{GlobalDefinitions, Player, SimpleItem} import net.psforever.packet.game.HackState1 +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.services.base.message.SetEmpire -import net.psforever.services.local.LocalServiceMessage -import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage} +import net.psforever.services.vehicle.VehicleAction import net.psforever.types.{PlanetSideEmpire, PlanetSideGUID} import scala.annotation.unused @@ -150,7 +150,7 @@ class ImplantTerminalMechControl(mech: ImplantTerminalMech) case player => seat.unmount(player) player.VehicleSeated = None - events ! VehicleServiceMessage(zoneId, player.GUID, VehicleAction.KickPassenger(4, unk2=false, guid)) + events ! MessageEnvelope(zoneId, player.GUID, VehicleAction.KickPassenger(4, unk2=false, guid)) } ) } @@ -174,7 +174,7 @@ class ImplantTerminalMechControl(mech: ImplantTerminalMech) if (player.Faction == localFaction) { if (mech.Owner.asInstanceOf[Building].CaptureTerminalIsHacked) { //this is actually futile, as a hacked base does not grant access to the terminal - events ! LocalServiceMessage(localFaction.toString, SetEmpire(guid, localFaction)) + events ! MessageEnvelope(localFaction.toString, SetEmpire(guid, localFaction)) } kickAllOccupantsNotOfFaction(zone, guid, mech, localFaction) } else { @@ -226,7 +226,7 @@ class ImplantTerminalMechControl(mech: ImplantTerminalMech) ): Unit = { val events = zone.LocalEvents opposingFactionsAre(setToFaction).foreach { faction => - events ! LocalServiceMessage(faction.toString, SetEmpire(guid, faction)) + events ! MessageEnvelope(faction.toString, SetEmpire(guid, faction)) } } @@ -237,7 +237,7 @@ class ImplantTerminalMechControl(mech: ImplantTerminalMech) ): Unit = { val events = zone.LocalEvents opposingFactionsAre(setToFaction).foreach { faction => - events ! LocalServiceMessage(faction.toString, SetEmpire(guid, setToFaction)) + events ! MessageEnvelope(faction.toString, SetEmpire(guid, setToFaction)) } } @@ -278,7 +278,7 @@ class ImplantTerminalMechControl(mech: ImplantTerminalMech) case player if test(player.Faction) => seat.unmount(player) player.VehicleSeated = None - events ! VehicleServiceMessage(zoneId, player.GUID, VehicleAction.KickPassenger(4, unk2 = false, guid)) + events ! MessageEnvelope(zoneId, player.GUID, VehicleAction.KickPassenger(4, unk2 = false, guid)) } ) } diff --git a/src/main/scala/net/psforever/objects/serverobject/turret/FacilityTurretControl.scala b/src/main/scala/net/psforever/objects/serverobject/turret/FacilityTurretControl.scala index f7541edf9..54425f7e6 100644 --- a/src/main/scala/net/psforever/objects/serverobject/turret/FacilityTurretControl.scala +++ b/src/main/scala/net/psforever/objects/serverobject/turret/FacilityTurretControl.scala @@ -13,9 +13,10 @@ import net.psforever.objects.serverobject.turret.auto.AutomatedTurret.Target import net.psforever.objects.serverobject.turret.auto.{AffectedByAutomaticTurretFire, AutomatedTurret, AutomatedTurretBehavior} import net.psforever.objects.vital.interaction.DamageResult import net.psforever.packet.game.{ChangeFireModeMessage, HackState1} +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.services.base.message.SendResponse import net.psforever.services.vehicle.support.TurretUpgrader -import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage} +import net.psforever.services.vehicle.VehicleAction import net.psforever.types.{BailType, PlanetSideEmpire, PlanetSideGUID} /** @@ -179,7 +180,7 @@ class FacilityTurretControl(turret: FacilityTurret) seat.unmount(player) player.VehicleSeated = None if (player.HasGUID) { - events ! VehicleServiceMessage(zoneId, player.GUID, VehicleAction.KickPassenger(4, unk2=false, guid)) + events ! MessageEnvelope(zoneId, player.GUID, VehicleAction.KickPassenger(4, unk2=false, guid)) } case None => () } @@ -237,7 +238,7 @@ class FacilityTurretControl(turret: FacilityTurret) .flatMap(_.Equipment) .collect { case weapon: Tool if weapon.FireModeIndex > 0 => weapon.FireModeIndex = 0 - events ! VehicleServiceMessage( + events ! MessageEnvelope( zoneid, SendResponse(ChangeFireModeMessage(weapon.GUID, 0)) ) @@ -341,7 +342,7 @@ class FacilityTurretControl(turret: FacilityTurret) case player => seat.unmount(player) player.VehicleSeated = None - events ! VehicleServiceMessage(zoneId, player.GUID, VehicleAction.KickPassenger(seat_num, unk2=true, guid)) + events ! MessageEnvelope(zoneId, player.GUID, VehicleAction.KickPassenger(seat_num, unk2=true, guid)) } } captureTerminalChanges(terminal, super.captureTerminalIsHacked, actionDelays = 3000L) diff --git a/src/main/scala/net/psforever/objects/serverobject/turret/TurretControl.scala b/src/main/scala/net/psforever/objects/serverobject/turret/TurretControl.scala index d1ec9dbe4..bd43ed550 100644 --- a/src/main/scala/net/psforever/objects/serverobject/turret/TurretControl.scala +++ b/src/main/scala/net/psforever/objects/serverobject/turret/TurretControl.scala @@ -8,8 +8,9 @@ import net.psforever.objects.serverobject.affinity.FactionAffinityBehavior import net.psforever.objects.serverobject.damage.{Damageable, DamageableWeaponTurret} import net.psforever.objects.serverobject.repair.RepairableWeaponTurret import net.psforever.objects.vital.interaction.DamageResult -import net.psforever.services.avatar.AvatarServiceMessage -import net.psforever.services.base.message.PlanetsideAttribute +import net.psforever.packet.game.PlanetsideAttributeMessage +import net.psforever.services.base.envelope.MessageEnvelope +import net.psforever.services.base.message.SendResponse trait TurretControl extends Actor @@ -40,8 +41,10 @@ trait TurretControl val zoneId = zone.id val events = zone.AvatarEvents val tguid = TurretObject.GUID - events ! AvatarServiceMessage(zoneId, PlanetsideAttribute(tguid, 50, 0)) - events ! AvatarServiceMessage(zoneId, PlanetsideAttribute(tguid, 51, 0)) + events ! MessageEnvelope( + zoneId, + SendResponse(List(PlanetsideAttributeMessage(tguid, 50, 0), PlanetsideAttributeMessage(tguid, 51, 0))) + ) } /** @@ -57,7 +60,9 @@ trait TurretControl val tguid = target.GUID CancelJammeredSound(target) CancelJammeredStatus(target) - events ! AvatarServiceMessage(zoneId, PlanetsideAttribute(tguid, 50, 1)) - events ! AvatarServiceMessage(zoneId, PlanetsideAttribute(tguid, 51, 1)) + events ! MessageEnvelope( + zoneId, + SendResponse(List(PlanetsideAttributeMessage(tguid, 50, 1), PlanetsideAttributeMessage(tguid, 51, 1))) + ) } } diff --git a/src/main/scala/net/psforever/objects/serverobject/turret/VanuSentryControl.scala b/src/main/scala/net/psforever/objects/serverobject/turret/VanuSentryControl.scala index ed408438e..89c661277 100644 --- a/src/main/scala/net/psforever/objects/serverobject/turret/VanuSentryControl.scala +++ b/src/main/scala/net/psforever/objects/serverobject/turret/VanuSentryControl.scala @@ -4,7 +4,8 @@ package net.psforever.objects.serverobject.turret import akka.actor.Cancellable import net.psforever.objects.serverobject.ServerObjectControl import net.psforever.objects.{Default, Player, Tool} -import net.psforever.services.local.{LocalAction, LocalServiceMessage} +import net.psforever.services.base.envelope.MessageEnvelope +import net.psforever.services.local.LocalAction import net.psforever.types.Vector3 import scala.concurrent.ExecutionContext.Implicits.global @@ -51,7 +52,7 @@ class VanuSentryControl(turret: FacilityTurret) val seat = TurretObject.Seat(0).get seat.occupant.collect { case player: Player => - TurretObject.Zone.LocalEvents ! LocalServiceMessage( + TurretObject.Zone.LocalEvents ! MessageEnvelope( TurretObject.Zone.id, player.GUID, LocalAction.RechargeVehicleWeapon(TurretObject.GUID, weapon.GUID) diff --git a/src/main/scala/net/psforever/objects/serverobject/turret/WeaponTurrets.scala b/src/main/scala/net/psforever/objects/serverobject/turret/WeaponTurrets.scala index c0aedc2e1..a42ab78f2 100644 --- a/src/main/scala/net/psforever/objects/serverobject/turret/WeaponTurrets.scala +++ b/src/main/scala/net/psforever/objects/serverobject/turret/WeaponTurrets.scala @@ -5,11 +5,11 @@ import net.psforever.objects.avatar.Certification import net.psforever.objects.ce.Deployable import net.psforever.objects.{Player, Tool, TurretDeployable} import net.psforever.packet.game.{HackMessage, HackState, HackState1, HackState7, InventoryStateMessage} -import net.psforever.services.avatar.AvatarServiceMessage +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.services.base.message.{SendResponse, SetEmpire} -import net.psforever.services.local.{LocalAction, LocalServiceMessage} +import net.psforever.services.local.LocalAction import net.psforever.services.vehicle.support.{TurretEnvelope, TurretUpgrader} -import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage} +import net.psforever.services.vehicle.VehicleAction import net.psforever.types.PlanetSideGUID object WeaponTurrets { @@ -31,7 +31,7 @@ object WeaponTurrets { upgrade: TurretUpgrade.Value )(): Unit = { tool.Magazine = 0 - target.Zone.AvatarEvents ! AvatarServiceMessage( + target.Zone.AvatarEvents ! MessageEnvelope( user.Name, SendResponse(InventoryStateMessage(tool.AmmoSlot.Box.GUID, tool.GUID, 0)) ) @@ -85,7 +85,7 @@ object WeaponTurrets { turret.UpdateTurretUpgradeTime() (HackState.Ongoing, progress.toInt) } - turret.Zone.AvatarEvents ! AvatarServiceMessage( + turret.Zone.AvatarEvents ! MessageEnvelope( tplayer.Name, SendResponse( HackMessage(progressType, turret.GUID, tplayer.GUID, progressGrade, -1f, progressState, HackState7.Unk8) @@ -105,7 +105,7 @@ object WeaponTurrets { player: Player => seat.unmount(player) player.VehicleSeated = None - zone.VehicleEvents ! VehicleServiceMessage( + zone.VehicleEvents ! MessageEnvelope( zone.id, player.GUID, VehicleAction.KickPassenger(4, unk2 = false, target.GUID) @@ -116,11 +116,11 @@ object WeaponTurrets { target.OwnerGuid = None target.Actor ! Deployable.Ownership(hacker) //convert faction - zone.AvatarEvents ! AvatarServiceMessage( + zone.AvatarEvents ! MessageEnvelope( zone.id, SetEmpire(target.GUID, hacker.Faction) ) - zone.LocalEvents ! LocalServiceMessage( + zone.LocalEvents ! MessageEnvelope( zone.id, hacker.GUID, LocalAction.TriggerSound(target.HackSound, target.Position, 30, 0.49803925f) diff --git a/src/main/scala/net/psforever/objects/serverobject/turret/auto/AutomatedTurretBehavior.scala b/src/main/scala/net/psforever/objects/serverobject/turret/auto/AutomatedTurretBehavior.scala index 08e5fcabd..53221f7b8 100644 --- a/src/main/scala/net/psforever/objects/serverobject/turret/auto/AutomatedTurretBehavior.scala +++ b/src/main/scala/net/psforever/objects/serverobject/turret/auto/AutomatedTurretBehavior.scala @@ -18,8 +18,8 @@ import net.psforever.objects.zones.interaction.InteractsWithZone import net.psforever.objects.{Default, PlanetSideGameObject, Player} import net.psforever.packet.game.{ChangeFireStateMessage_Start, ChangeFireStateMessage_Stop, ObjectDetectedMessage} import net.psforever.services.Service +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.services.base.message.SendResponse -import net.psforever.services.local.LocalServiceMessage import net.psforever.types.{PlanetSideGUID, Vector3} import scala.concurrent.ExecutionContext.Implicits.global @@ -890,7 +890,7 @@ object AutomatedTurretBehavior { * @param list target's globally unique identifier, in list form */ def startTracking(zone: Zone, channel: String, turretGuid: PlanetSideGUID, list: List[PlanetSideGUID]): Unit = { - zone.LocalEvents ! LocalServiceMessage( + zone.LocalEvents ! MessageEnvelope( channel, SendResponse(ObjectDetectedMessage(turretGuid, turretGuid, 0, list)) ) @@ -903,7 +903,7 @@ object AutomatedTurretBehavior { * @param turretGuid turret */ def stopTracking(zone: Zone, channel: String, turretGuid: PlanetSideGUID): Unit = { - zone.LocalEvents ! LocalServiceMessage( + zone.LocalEvents ! MessageEnvelope( channel, SendResponse(ObjectDetectedMessage(turretGuid, turretGuid, 0, noTargets)) ) @@ -916,7 +916,7 @@ object AutomatedTurretBehavior { * @param weaponGuid turret's weapon */ def startShooting(zone: Zone, channel: String, weaponGuid: PlanetSideGUID): Unit = { - zone.LocalEvents ! LocalServiceMessage( + zone.LocalEvents ! MessageEnvelope( channel, SendResponse(ChangeFireStateMessage_Start(weaponGuid)) ) @@ -929,7 +929,7 @@ object AutomatedTurretBehavior { * @param weaponGuid turret's weapon */ def stopShooting(zone: Zone, channel: String, weaponGuid: PlanetSideGUID): Unit = { - zone.LocalEvents ! LocalServiceMessage( + zone.LocalEvents ! MessageEnvelope( channel, SendResponse(ChangeFireStateMessage_Stop(weaponGuid)) ) diff --git a/src/main/scala/net/psforever/objects/vehicles/AntTransferBehavior.scala b/src/main/scala/net/psforever/objects/vehicles/AntTransferBehavior.scala index fb78e30aa..353f7f062 100644 --- a/src/main/scala/net/psforever/objects/vehicles/AntTransferBehavior.scala +++ b/src/main/scala/net/psforever/objects/vehicles/AntTransferBehavior.scala @@ -10,10 +10,11 @@ import net.psforever.objects.serverobject.structures.WarpGate import net.psforever.objects.serverobject.transfer.{TransferBehavior, TransferContainer} import net.psforever.objects._ import net.psforever.types.DriveState -import net.psforever.services.vehicle.VehicleServiceMessage import akka.actor.typed.scaladsl.adapter._ import net.psforever.objects.serverobject.transfer.TransferContainer.TransferMaterial -import net.psforever.services.base.message.PlanetsideAttribute +import net.psforever.packet.game.PlanetsideAttributeMessage +import net.psforever.services.base.envelope.MessageEnvelope +import net.psforever.services.base.message.{PlanetsideAttribute, SendResponse} import scala.concurrent.ExecutionContext.Implicits.global import scala.concurrent.duration._ @@ -33,7 +34,7 @@ trait AntTransferBehavior extends TransferBehavior with NtuStorageBehavior { def ActivatePanelsForChargingEvent(vehicle: NtuContainer): Unit = { val obj = ChargeTransferObject val zone = obj.Zone - zone.VehicleEvents ! VehicleServiceMessage( + zone.VehicleEvents ! MessageEnvelope( zone.id, PlanetsideAttribute(vehicle.GUID, 52, 1L) ) // panel glow on @@ -43,7 +44,7 @@ trait AntTransferBehavior extends TransferBehavior with NtuStorageBehavior { def StartNtuChargingEvent(vehicle: NtuContainer): Unit = { val obj = ChargeTransferObject val zone = obj.Zone - zone.VehicleEvents ! VehicleServiceMessage( + zone.VehicleEvents ! MessageEnvelope( zone.id, PlanetsideAttribute(vehicle.GUID, 49, 1L) ) // orb particle effect on @@ -52,7 +53,7 @@ trait AntTransferBehavior extends TransferBehavior with NtuStorageBehavior { def UpdateNtuUI(vehicle: Vehicle with NtuContainer): Unit = { if (vehicle.Seats.values.exists(_.isOccupied)) { val display = vehicle.NtuCapacitorScaled.toLong - vehicle.Zone.VehicleEvents ! VehicleServiceMessage( + vehicle.Zone.VehicleEvents ! MessageEnvelope( vehicle.Actor.toString, PlanetsideAttribute(vehicle.GUID, 45, display) ) @@ -158,16 +159,14 @@ trait AntTransferBehavior extends TransferBehavior with NtuStorageBehavior { val zoneId = zone.id val events = zone.VehicleEvents if (transferEvent == TransferBehavior.Event.Charging) { - events ! VehicleServiceMessage( + //1. panel glow off + //2. orb particle effect off + events ! MessageEnvelope( zoneId, - PlanetsideAttribute(vguid, 52, 0L) - ) // panel glow off - events ! VehicleServiceMessage( - zoneId, - PlanetsideAttribute(vguid, 49, 0L) - ) // orb particle effect off + SendResponse(List(PlanetsideAttributeMessage(vguid, 52, 0L), PlanetsideAttributeMessage(vguid, 49, 0L))) + ) } else if (transferEvent == TransferBehavior.Event.Discharging) { - events ! VehicleServiceMessage( + events ! MessageEnvelope( zoneId, PlanetsideAttribute(vguid, 52, 0L) ) // panel glow off diff --git a/src/main/scala/net/psforever/objects/vehicles/BfrTransferBehavior.scala b/src/main/scala/net/psforever/objects/vehicles/BfrTransferBehavior.scala index 96bd4ed86..3a4ef01dd 100644 --- a/src/main/scala/net/psforever/objects/vehicles/BfrTransferBehavior.scala +++ b/src/main/scala/net/psforever/objects/vehicles/BfrTransferBehavior.scala @@ -11,8 +11,9 @@ import net.psforever.objects.equipment.EquipmentSlot import net.psforever.objects.serverobject.resourcesilo.ResourceSilo import net.psforever.objects.serverobject.structures.WarpGate import net.psforever.objects.serverobject.transfer.{TransferBehavior, TransferContainer} +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.types.{PlanetSideEmpire, PlanetSideGUID, Vector3} -import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage} +import net.psforever.services.vehicle.VehicleAction import scala.concurrent.ExecutionContext.Implicits.global import scala.concurrent.duration._ @@ -116,7 +117,7 @@ trait BfrTransferBehavior def UpdateNtuUI(vehicle: Vehicle with NtuContainer, siphon: NtuContainer): Unit = { siphon match { case equip: NtuSiphon => - vehicle.Zone.VehicleEvents ! VehicleServiceMessage( + vehicle.Zone.VehicleEvents ! MessageEnvelope( vehicle.Actor.toString, VehicleAction.InventoryState2(equip.storageGUID, siphon.GUID, siphon.NtuCapacitor.toInt) ) diff --git a/src/main/scala/net/psforever/objects/vehicles/CarrierBehavior.scala b/src/main/scala/net/psforever/objects/vehicles/CarrierBehavior.scala index 10da95dc9..84c96de5f 100644 --- a/src/main/scala/net/psforever/objects/vehicles/CarrierBehavior.scala +++ b/src/main/scala/net/psforever/objects/vehicles/CarrierBehavior.scala @@ -9,10 +9,10 @@ import net.psforever.objects.sourcing.VehicleSource import net.psforever.objects.vital.VehicleCargoMountActivity import net.psforever.packet.game.{CargoMountPointStatusMessage, ObjectAttachMessage, ObjectDetachMessage, PlanetsideAttributeMessage} import net.psforever.types.{BailType, CargoStatus, PlanetSideGUID, Vector3} -import net.psforever.services.avatar.AvatarServiceMessage import net.psforever.services.Service +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.services.base.message.SendResponse -import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage} +import net.psforever.services.vehicle.VehicleAction import scala.concurrent.duration._ @@ -59,7 +59,7 @@ trait CarrierBehavior { ) { if (iteration == 0) { //open the cargo bay door - obj.Zone.AvatarEvents ! AvatarServiceMessage( + obj.Zone.AvatarEvents ! MessageEnvelope( obj.Zone.id, SendResponse( CargoMountPointStatusMessage( @@ -206,7 +206,7 @@ object CarrierBehavior { log.debug(s"HandleCheckCargoMounting: mounting cargo vehicle in carrier at distance of $distance") CargoMountAction(carrier, cargo, hold, carrierGUID) cargo.Velocity = None - zone.VehicleEvents ! VehicleServiceMessage(s"${cargo.Actor}", SendResponse(Seq( + zone.VehicleEvents ! MessageEnvelope(s"${cargo.Actor}", SendResponse(Seq( PlanetsideAttributeMessage(cargoGUID, 0, cargo.Health), PlanetsideAttributeMessage(cargoGUID, cargo.Definition.shieldUiAttribute, cargo.Shields) ))) @@ -220,7 +220,7 @@ object CarrierBehavior { ) cargo.Actor ! CargoBehavior.EndCargoMounting(carrierGUID) val cargoDriverGUID = cargo.Seats(0).occupant.get.GUID - zone.VehicleEvents ! VehicleServiceMessage( + zone.VehicleEvents ! MessageEnvelope( zone.id, cargoDriverGUID, SendResponse(CargoMountPointStatusMessage( @@ -320,7 +320,7 @@ object CarrierBehavior { ) cargo.Actor ! CargoBehavior.EndCargoDismounting(carrierGUID) val cargoDriverGUID = cargo.Seats(0).occupant.get.GUID - zone.VehicleEvents ! VehicleServiceMessage( + zone.VehicleEvents ! MessageEnvelope( zone.id, cargoDriverGUID, SendResponse(CargoMountPointStatusMessage( @@ -444,7 +444,7 @@ object CarrierBehavior { val zoneId = zone.id val events = zone.VehicleEvents val cargoActor = cargo.Actor - events ! VehicleServiceMessage(s"$cargoActor", SendResponse(Seq( + events ! MessageEnvelope(s"$cargoActor", SendResponse(Seq( PlanetsideAttributeMessage(cargoGUID, 0, cargo.Health), PlanetsideAttributeMessage(cargoGUID, cargo.Definition.shieldUiAttribute, cargo.Shields) ))) @@ -456,7 +456,7 @@ object CarrierBehavior { val detachCargoMsg = ObjectDetachMessage(carrierGUID, cargoGUID, cargoHoldPosition - Vector3.z(1), rotation) val resetCargoMsg = CargoMountPointStatusMessage(carrierGUID, GUID0, GUID0, cargoGUID, mountPoint, CargoStatus.Empty, 0) - events ! VehicleServiceMessage(zoneId, SendResponse(Seq(ejectCargoMsg, detachCargoMsg, resetCargoMsg))) + events ! MessageEnvelope(zoneId, SendResponse(Seq(ejectCargoMsg, detachCargoMsg, resetCargoMsg))) log.debug(s"HandleVehicleCargoDismount: eject - $ejectCargoMsg, detach - $detachCargoMsg") if (driverOpt.isEmpty) { //TODO cargo should drop like a rock like normal; until then, deconstruct it @@ -469,17 +469,17 @@ object CarrierBehavior { CargoMountPointStatusMessage(carrierGUID, GUID0, cargoGUID, GUID0, mountPoint, CargoStatus.InProgress, 0) val cargoDetachMessage = ObjectDetachMessage(carrierGUID, cargoGUID, cargoHoldPosition + Vector3.z(1f), rotation) - events ! VehicleServiceMessage(zoneId, SendResponse(Seq(cargoStatusMessage, cargoDetachMessage))) + events ! MessageEnvelope(zoneId, SendResponse(Seq(cargoStatusMessage, cargoDetachMessage))) driverOpt match { case Some(driver) => - events ! VehicleServiceMessage( + events ! MessageEnvelope( s"${driver.Name}", VehicleAction.KickCargo(cargo, cargo.Definition.AutoPilotSpeed2, 2500) ) case None => val resetCargoMsg = CargoMountPointStatusMessage(carrierGUID, GUID0, GUID0, cargoGUID, mountPoint, CargoStatus.Empty, 0) - events ! VehicleServiceMessage(zoneId, SendResponse(resetCargoMsg)) //lazy + events ! MessageEnvelope(zoneId, SendResponse(resetCargoMsg)) //lazy //TODO cargo should back out like normal; until then, deconstruct it cargoActor ! Vehicle.Deconstruct() } @@ -595,7 +595,7 @@ object CarrierBehavior { attachMessage: ObjectAttachMessage, mountPointStatusMessage: CargoMountPointStatusMessage ): Unit = { - zone.VehicleEvents ! VehicleServiceMessage(zone.id, exclude, SendResponse(Seq(attachMessage, mountPointStatusMessage))) + zone.VehicleEvents ! MessageEnvelope(zone.id, exclude, SendResponse(Seq(attachMessage, mountPointStatusMessage))) } /** @@ -615,10 +615,7 @@ object CarrierBehavior { val zone = carrier.Zone val zoneId = zone.id val msgs @ (attachMessage, mountPointStatusMessage) = CargoMountMessages(carrier, cargo, mountPoint) - zone.VehicleEvents ! VehicleServiceMessage(zoneId, SendResponse(Seq( - attachMessage, - mountPointStatusMessage - ))) + zone.VehicleEvents ! MessageEnvelope(zoneId, SendResponse(Seq(attachMessage, mountPointStatusMessage))) msgs } diff --git a/src/main/scala/net/psforever/objects/vehicles/control/AmsControl.scala b/src/main/scala/net/psforever/objects/vehicles/control/AmsControl.scala index 5a24daec4..f30cddc14 100644 --- a/src/main/scala/net/psforever/objects/vehicles/control/AmsControl.scala +++ b/src/main/scala/net/psforever/objects/vehicles/control/AmsControl.scala @@ -2,8 +2,9 @@ package net.psforever.objects.vehicles.control import net.psforever.objects._ +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.services.base.message.PlanetsideAttribute -import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage} +import net.psforever.services.vehicle.VehicleAction import net.psforever.types.DriveState /** @@ -29,8 +30,8 @@ class AmsControl(vehicle: Vehicle) case None => "" } val events = zone.VehicleEvents - events ! VehicleServiceMessage(zone.id, VehicleAction.AMSDeploymentChange(zone)) - events ! VehicleServiceMessage(driverChannel, PlanetsideAttribute(vehicle.GUID, 81, 1)) + events ! MessageEnvelope(zone.id, VehicleAction.AMSDeploymentChange(zone)) + events ! MessageEnvelope(driverChannel, PlanetsideAttribute(vehicle.GUID, 81, 1)) case _ => ; } } @@ -49,8 +50,8 @@ class AmsControl(vehicle: Vehicle) case None => "" } val events = zone.VehicleEvents - events ! VehicleServiceMessage(zone.id, VehicleAction.AMSDeploymentChange(zone)) - events ! VehicleServiceMessage(driverChannel, PlanetsideAttribute(vehicle.GUID, 81, 0)) + events ! MessageEnvelope(zone.id, VehicleAction.AMSDeploymentChange(zone)) + events ! MessageEnvelope(driverChannel, PlanetsideAttribute(vehicle.GUID, 81, 0)) case _ => ; } } diff --git a/src/main/scala/net/psforever/objects/vehicles/control/ApcControl.scala b/src/main/scala/net/psforever/objects/vehicles/control/ApcControl.scala index 3ec15a33c..1650d6657 100644 --- a/src/main/scala/net/psforever/objects/vehicles/control/ApcControl.scala +++ b/src/main/scala/net/psforever/objects/vehicles/control/ApcControl.scala @@ -11,8 +11,8 @@ import net.psforever.objects.vital.prop.DamageWithPosition import net.psforever.objects.zones.Zone import net.psforever.packet.game.{TriggerEffectMessage, TriggeredEffectLocation} import net.psforever.services.Service +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.services.base.message.SendResponse -import net.psforever.services.vehicle.VehicleServiceMessage import net.psforever.types.PlanetSideGUID /** @@ -53,7 +53,7 @@ class ApcControl(vehicle: Vehicle) //drain the capacitor capacitorCharge(-vehicle.Capacitor) //cause the emp - events ! VehicleServiceMessage( + events ! MessageEnvelope( zone.id, SendResponse(TriggerEffectMessage( GUID0, diff --git a/src/main/scala/net/psforever/objects/vehicles/control/BfrControl.scala b/src/main/scala/net/psforever/objects/vehicles/control/BfrControl.scala index 1edfdadbe..ff73708ab 100644 --- a/src/main/scala/net/psforever/objects/vehicles/control/BfrControl.scala +++ b/src/main/scala/net/psforever/objects/vehicles/control/BfrControl.scala @@ -17,8 +17,8 @@ import net.psforever.objects.vital.interaction.DamageResult import net.psforever.objects.zones.Zone import net.psforever.packet.game._ import net.psforever.services.Service +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.services.base.message.{GenericObjectAction, PlanetsideAttribute, SendResponse} -import net.psforever.services.vehicle.VehicleServiceMessage import net.psforever.types._ import scala.annotation.unused @@ -270,7 +270,7 @@ class BfrControl(vehicle: Vehicle) def disableShield(): Unit = { val zone = vehicle.Zone - zone.VehicleEvents ! VehicleServiceMessage( + zone.VehicleEvents ! MessageEnvelope( s"${zone.id}", SendResponse(GenericObjectActionMessage(vehicle.GUID, 45)) ) @@ -284,7 +284,7 @@ class BfrControl(vehicle: Vehicle) def enableShield(): Unit = { val zone = vehicle.Zone - zone.VehicleEvents ! VehicleServiceMessage( + zone.VehicleEvents ! MessageEnvelope( s"${zone.id}", SendResponse(GenericObjectActionMessage(vehicle.GUID, 44)) ) @@ -335,7 +335,7 @@ class BfrControl(vehicle: Vehicle) val vguid = vehicle.GUID val zone = vehicle.Zone val shields = vehicle.Shields - zone.VehicleEvents ! VehicleServiceMessage( + zone.VehicleEvents ! MessageEnvelope( zone.id, PlanetsideAttribute(vguid, vehicle.Definition.shieldUiAttribute, shields) ) @@ -415,7 +415,7 @@ class BfrControl(vehicle: Vehicle) }) match { case Some(useThisGuid) => val zone = vehicle.Zone - zone.VehicleEvents ! VehicleServiceMessage( + zone.VehicleEvents ! MessageEnvelope( zone.id, doNotSendTo, GenericObjectAction(useThisGuid, action) @@ -565,7 +565,7 @@ class BfrControl(vehicle: Vehicle) //cause the emp siphon.equipment.lastDischarge = now //TODO this is the apc emp effect; is there an ntu siphon emp effect? - events ! VehicleServiceMessage( + events ! MessageEnvelope( zone.id, SendResponse(TriggerEffectMessage( GUID0, @@ -587,7 +587,7 @@ class BfrControl(vehicle: Vehicle) //the siphon is not ready to dispatch another emp; chat message borrowed from kit use logic //the client actually enforces a hard limit of 30s before it will react to use of the siphon emp mode //it does not even dispatch the packet before that, making it rare if this precautionary message is seen - events ! VehicleServiceMessage( + events ! MessageEnvelope( obj.Seats(0).occupant.get.Name, SendResponse(ChatMsg(ChatMessageType.UNK_225, wideContents = false, "", s"@TimeUntilNextUse^${30000 - elapsedWait}", None)) ) diff --git a/src/main/scala/net/psforever/objects/vehicles/control/VehicleCapacitance.scala b/src/main/scala/net/psforever/objects/vehicles/control/VehicleCapacitance.scala index d0303d72e..42bb8a01b 100644 --- a/src/main/scala/net/psforever/objects/vehicles/control/VehicleCapacitance.scala +++ b/src/main/scala/net/psforever/objects/vehicles/control/VehicleCapacitance.scala @@ -3,8 +3,8 @@ package net.psforever.objects.vehicles.control import akka.actor.{Actor, Cancellable} import net.psforever.objects._ +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.services.base.message.PlanetsideAttribute -import net.psforever.services.vehicle.VehicleServiceMessage import scala.concurrent.ExecutionContext.Implicits.global import scala.concurrent.duration._ @@ -59,7 +59,7 @@ trait VehicleCapacitance { protected def showCapacitorCharge(): Unit = { val obj = CapacitanceObject - obj.Zone.VehicleEvents ! VehicleServiceMessage( + obj.Zone.VehicleEvents ! MessageEnvelope( self.toString(), PlanetsideAttribute(obj.GUID, 113, obj.Capacitor) ) diff --git a/src/main/scala/net/psforever/objects/vehicles/control/VehicleControl.scala b/src/main/scala/net/psforever/objects/vehicles/control/VehicleControl.scala index 3d3a6b0f2..6940e3c27 100644 --- a/src/main/scala/net/psforever/objects/vehicles/control/VehicleControl.scala +++ b/src/main/scala/net/psforever/objects/vehicles/control/VehicleControl.scala @@ -36,9 +36,10 @@ import net.psforever.packet.PlanetSideGamePacket import net.psforever.packet.game._ import net.psforever.packet.game.objectcreate.ObjectCreateMessageParent import net.psforever.types._ -import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage} +import net.psforever.services.avatar.AvatarAction +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.services.base.message.{ObjectDelete, PlanetsideAttribute, SendResponse} -import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage} +import net.psforever.services.vehicle.VehicleAction import scala.annotation.unused import scala.concurrent.ExecutionContext.Implicits.global @@ -212,7 +213,7 @@ class VehicleControl(vehicle: Vehicle) }) .flatMap { _.getMessage(vehicle) } .foreach { pkt => - events ! VehicleServiceMessage(toChannel, SendResponse(pkt)) + events ! MessageEnvelope(toChannel, SendResponse(pkt)) } case FactionAffinity.ConvertFactionAffinity(faction) => @@ -243,11 +244,11 @@ class VehicleControl(vehicle: Vehicle) log.info(s"changing vehicle equipment loadout to ${player.Name}'s option #${msg.unk1 + 1}") val (oldWeapons, newWeapons, oldInventory, finalInventory) = handleTerminalMessageVehicleLoadout(player, definition, weapons, inventory) - zone.VehicleEvents ! VehicleServiceMessage( + zone.VehicleEvents ! MessageEnvelope( zone.id, VehicleAction.ChangeLoadout(vehicle.GUID, oldWeapons, newWeapons, oldInventory, finalInventory) ) - zone.AvatarEvents ! AvatarServiceMessage( + zone.AvatarEvents ! MessageEnvelope( player.Name, AvatarAction.TerminalOrderResult(msg.terminal_guid, msg.transaction_type, result = true) ) @@ -255,7 +256,7 @@ class VehicleControl(vehicle: Vehicle) case _ => () } } else { - zone.AvatarEvents ! AvatarServiceMessage( + zone.AvatarEvents ! MessageEnvelope( player.Name, AvatarAction.TerminalOrderResult(msg.terminal_guid, msg.transaction_type, result = false) ) @@ -329,7 +330,7 @@ class VehicleControl(vehicle: Vehicle) .orElse { case VehicleControl.Deletion() => val zone = vehicle.Zone - zone.VehicleEvents ! VehicleServiceMessage( + zone.VehicleEvents ! MessageEnvelope( zone.id, VehicleAction.UnloadVehicle(vehicle, vehicle.GUID) ) @@ -450,7 +451,7 @@ class VehicleControl(vehicle: Vehicle) zone.actor ! ZoneActor.AddToBlockMap(player, vehicle.Position) } if (player.HasGUID) { - events ! VehicleServiceMessage(zoneId, player.GUID, VehicleAction.KickPassenger(4, unk2 = true, guid)) + events ! MessageEnvelope(zoneId, player.GUID, VehicleAction.KickPassenger(4, unk2 = true, guid)) } } } @@ -520,7 +521,7 @@ class VehicleControl(vehicle: Vehicle) val obj = ContainerObject obj.Find(item) match { case Some(slot) => - obj.Zone.AvatarEvents ! AvatarServiceMessage( + obj.Zone.AvatarEvents ! MessageEnvelope( self.toString, SendResponse(ObjectAttachMessage(obj.GUID, item.GUID, slot)) ) @@ -532,7 +533,7 @@ class VehicleControl(vehicle: Vehicle) def RemoveItemFromSlotCallback(item: Equipment, slot: Int): Unit = { val zone = ContainerObject.Zone - zone.VehicleEvents ! VehicleServiceMessage( + zone.VehicleEvents ! MessageEnvelope( self.toString, VehicleAction.UnstowEquipment(item.GUID) ) @@ -546,20 +547,20 @@ class VehicleControl(vehicle: Vehicle) val events = zone.VehicleEvents val iguid = item.GUID item.Faction = obj.Faction - events ! VehicleServiceMessage( + events ! MessageEnvelope( //TODO when a new weapon, the equipment slot ui goes blank, but the weapon functions; remount vehicle to correct it if (obj.VisibleSlots.contains(slot)) zone.id else channel, SendResponse(OCM.detailed(item, ObjectCreateMessageParent(oguid, slot))) ) item match { case box: AmmoBox => - events ! VehicleServiceMessage( + events ! MessageEnvelope( channel, VehicleAction.InventoryState2(iguid, oguid, box.Capacity) ) case weapon: Tool => weapon.AmmoSlots.map { slot => slot.Box }.foreach { box => - events ! VehicleServiceMessage( + events ! MessageEnvelope( channel, VehicleAction.InventoryState2(box.GUID, iguid, box.Capacity) ) @@ -572,7 +573,7 @@ class VehicleControl(vehicle: Vehicle) val obj = ContainerObject val zone = obj.Zone val toChannel = if (obj.VisibleSlots.contains(fromSlot)) zone.id else self.toString - zone.VehicleEvents ! VehicleServiceMessage( + zone.VehicleEvents ! MessageEnvelope( toChannel, ObjectDelete(item.GUID) ) @@ -635,7 +636,7 @@ class VehicleControl(vehicle: Vehicle) if (canChargeShields) { vehicle.LogActivity(ShieldCharge(amount, motivator)) vehicle.Shields = vehicle.Shields + amount - vehicle.Zone.VehicleEvents ! VehicleServiceMessage( + vehicle.Zone.VehicleEvents ! MessageEnvelope( s"${vehicle.Actor}", PlanetsideAttribute(vehicle.GUID, vehicle.Definition.shieldUiAttribute, vehicle.Shields) ) @@ -690,7 +691,7 @@ class VehicleControl(vehicle: Vehicle) case Some(allow) => val group = AccessPermissionGroup(attribute - 10) log.info(s"$dname changed ${vehicle.Definition.Name}'s access permission $group to $allow") - zone.VehicleEvents ! VehicleServiceMessage( + zone.VehicleEvents ! MessageEnvelope( zone.id, dguid, VehicleAction.SeatPermissions(vguid, attribute, value) @@ -704,7 +705,7 @@ class VehicleControl(vehicle: Vehicle) if (vehicle.SeatPermissionGroup(seatIndex).contains(group) && !tplayer.Name.equals(dname)) { //can not kick self seat.unmount(tplayer) tplayer.VehicleSeated = None - zone.VehicleEvents ! VehicleServiceMessage( + zone.VehicleEvents ! MessageEnvelope( zone.id, tplayer.GUID, VehicleAction.KickPassenger(4, unk2 = false, vguid) @@ -753,7 +754,7 @@ class VehicleControl(vehicle: Vehicle) def vehicleSubsystemMessages(messages: List[PlanetSideGamePacket]): Unit = { val zone = vehicle.Zone - zone.VehicleEvents ! VehicleServiceMessage( + zone.VehicleEvents ! MessageEnvelope( zone.id, SendResponse(messages) ) diff --git a/src/main/scala/net/psforever/objects/vehicles/interaction/WithEntranceInVehicle.scala b/src/main/scala/net/psforever/objects/vehicles/interaction/WithEntranceInVehicle.scala index 874438a84..10009f7dd 100644 --- a/src/main/scala/net/psforever/objects/vehicles/interaction/WithEntranceInVehicle.scala +++ b/src/main/scala/net/psforever/objects/vehicles/interaction/WithEntranceInVehicle.scala @@ -6,6 +6,7 @@ import net.psforever.objects.avatar.interaction.WithEntrance import net.psforever.objects.serverobject.doors.InteriorDoorPassage import net.psforever.objects.serverobject.environment.PieceOfEnvironment import net.psforever.objects.zones.interaction.InteractsWithZone +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.services.base.message.SendResponse class WithEntranceInVehicle @@ -40,9 +41,8 @@ class WithEntranceInVehicle private def warnAboutProximity(obj: InteractsWithZone, msg: String): Unit = { import net.psforever.packet.game.ChatMsg - import net.psforever.services.avatar.AvatarServiceMessage import net.psforever.types.ChatMessageType - obj.Zone.AvatarEvents ! AvatarServiceMessage( + obj.Zone.AvatarEvents ! MessageEnvelope( obj.Actor.toString(), SendResponse(ChatMsg(ChatMessageType.UNK_227, msg)) ) diff --git a/src/main/scala/net/psforever/objects/zones/MapInfo.scala b/src/main/scala/net/psforever/objects/zones/MapInfo.scala index a005a2fb8..2f85c696b 100644 --- a/src/main/scala/net/psforever/objects/zones/MapInfo.scala +++ b/src/main/scala/net/psforever/objects/zones/MapInfo.scala @@ -4,9 +4,8 @@ import enumeratum.values.{StringEnum, StringEnumEntry} import net.psforever.objects.{PlanetSideGameObject, Player, Vehicle} import net.psforever.objects.serverobject.environment._ import net.psforever.packet.game.{ChatMsg, OffshoreVehicleMessage} -import net.psforever.services.avatar.AvatarServiceMessage +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.services.base.message.SendResponse -import net.psforever.services.vehicle.VehicleServiceMessage import net.psforever.types.{ChatMessageType, PlanetSideEmpire, PlanetSideGUID, Vector3} sealed abstract class MapInfo( @@ -687,7 +686,7 @@ object MapEnvironment { " will be executed for treason." //TODO for bops, eventually } val warning = s"Do not travel any further $trespass of the battlefield or you$punishment" - p.Zone.AvatarEvents ! AvatarServiceMessage( + p.Zone.AvatarEvents ! MessageEnvelope( p.Name, SendResponse(ChatMsg(ChatMessageType.CMT_QUIT, warning)) ) @@ -695,7 +694,7 @@ object MapEnvironment { } obj match { case v: Vehicle => - v.Zone.VehicleEvents ! VehicleServiceMessage( + v.Zone.VehicleEvents ! MessageEnvelope( v.Actor.toString(), SendResponse(OffshoreVehicleMessage(v.Seats(0).occupant.get.GUID, v.GUID, msg)) ) diff --git a/src/main/scala/net/psforever/objects/zones/ZoneDeployableActor.scala b/src/main/scala/net/psforever/objects/zones/ZoneDeployableActor.scala index b840e2e02..431f67e14 100644 --- a/src/main/scala/net/psforever/objects/zones/ZoneDeployableActor.scala +++ b/src/main/scala/net/psforever/objects/zones/ZoneDeployableActor.scala @@ -10,8 +10,8 @@ import net.psforever.objects.sourcing.ObjectSource import net.psforever.objects.vehicles.MountedWeapons import net.psforever.objects.vital.SpawningActivity import net.psforever.packet.game.ChatMsg +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.services.base.message.SendResponse -import net.psforever.services.local.LocalServiceMessage import net.psforever.types.ChatMessageType import scala.annotation.tailrec @@ -108,7 +108,7 @@ object ZoneDeployableActor { val position = obj.Position deployableList.find(_ eq obj) match { case _ if Interference.Test(zone, obj).nonEmpty => - zone.LocalEvents ! LocalServiceMessage( + zone.LocalEvents ! MessageEnvelope( obj.OwnerName.getOrElse(""), SendResponse(ChatMsg(ChatMessageType.UNK_227, "@nomove_intersecting")) ) //may not be the correct message but is sufficient at explaining why the deployable can not be built diff --git a/src/main/scala/net/psforever/objects/zones/ZoneHotSpotProjector.scala b/src/main/scala/net/psforever/objects/zones/ZoneHotSpotProjector.scala index 09c67d47b..5d4efe87d 100644 --- a/src/main/scala/net/psforever/objects/zones/ZoneHotSpotProjector.scala +++ b/src/main/scala/net/psforever/objects/zones/ZoneHotSpotProjector.scala @@ -5,7 +5,8 @@ import akka.actor.{Actor, ActorRef, Cancellable, Props} import net.psforever.objects.Default import net.psforever.types.{PlanetSideEmpire, Vector3} import net.psforever.services.ServiceManager -import net.psforever.services.galaxy.{GalaxyAction, GalaxyServiceMessage} +import net.psforever.services.base.envelope.MessageEnvelope +import net.psforever.services.galaxy.GalaxyAction import scala.collection.mutable.ListBuffer import scala.concurrent.duration._ @@ -305,7 +306,7 @@ class ZoneHotSpotProjector(zone: Zone, hotspots: ListBuffer[HotSpotInfo], blanki val zoneNumber = zone.Number val hotSpotInfoList = hotSpotInfos.toList affectedFactions.foreach(faction => - galaxy ! GalaxyServiceMessage(faction.toString, GalaxyAction.HotSpotUpdate( + galaxy ! MessageEnvelope(faction.toString, GalaxyAction.HotSpotUpdate( zoneNumber, 1, ZoneHotSpotProjector.SpecificHotSpotInfo(faction, hotSpotInfoList) diff --git a/src/main/scala/net/psforever/objects/zones/ZoneProjectileActor.scala b/src/main/scala/net/psforever/objects/zones/ZoneProjectileActor.scala index 485915bd0..cb6f751fb 100644 --- a/src/main/scala/net/psforever/objects/zones/ZoneProjectileActor.scala +++ b/src/main/scala/net/psforever/objects/zones/ZoneProjectileActor.scala @@ -5,7 +5,8 @@ import akka.actor.{Actor, Cancellable} import net.psforever.objects.ballistics.Projectile import net.psforever.objects.guid.{GUIDTask, StraightforwardTask, TaskBundle, TaskWorkflow} import net.psforever.services.Service -import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage} +import net.psforever.services.avatar.AvatarAction +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.services.base.message.ObjectDelete import net.psforever.types.PlanetSideGUID @@ -157,7 +158,7 @@ class ZoneProjectileActor( projectileGuid, context.system.scheduler.scheduleOnce(duration, self, ZoneProjectile.Remove(projectileGuid)) ) - zone.AvatarEvents ! AvatarServiceMessage( + zone.AvatarEvents ! MessageEnvelope( zone.id, clarifiedFilterGuid, AvatarAction.LoadProjectile( @@ -189,17 +190,17 @@ class ZoneProjectileActor( projectileList.remove(projectileList.indexOf(projectile)) if (projectile.Definition.radiation_cloud) { zone.blockMap.removeFrom(projectile) - zone.AvatarEvents ! AvatarServiceMessage( + zone.AvatarEvents ! MessageEnvelope( zone.id, ObjectDelete(projectile_guid, 2) ) } else if (projectile.Definition.RemoteClientData == (0,0)) { - zone.AvatarEvents ! AvatarServiceMessage( + zone.AvatarEvents ! MessageEnvelope( zone.id, ObjectDelete(projectile_guid, 2) ) } else { - zone.AvatarEvents ! AvatarServiceMessage( + zone.AvatarEvents ! MessageEnvelope( zone.id, AvatarAction.ProjectileExplodes(projectile_guid, projectile) ) diff --git a/src/main/scala/net/psforever/objects/zones/ZoneVehicleActor.scala b/src/main/scala/net/psforever/objects/zones/ZoneVehicleActor.scala index 834f47e19..eba37613a 100644 --- a/src/main/scala/net/psforever/objects/zones/ZoneVehicleActor.scala +++ b/src/main/scala/net/psforever/objects/zones/ZoneVehicleActor.scala @@ -9,8 +9,8 @@ import net.psforever.objects.serverobject.structures.WarpGate import net.psforever.objects.vital.InGameHistory import net.psforever.objects.{Default, GlobalDefinitions, Vehicle} import net.psforever.packet.game.ChatMsg +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.services.base.message.SendResponse -import net.psforever.services.vehicle.VehicleServiceMessage import net.psforever.types.{ChatMessageType, DriveState, PlanetSideEmpire, Vector3} import scala.annotation.tailrec @@ -204,7 +204,7 @@ object ZoneVehicleActor { else None } msgOpt.foreach { msg => - zone.VehicleEvents ! VehicleServiceMessage( + zone.VehicleEvents ! MessageEnvelope( vehicle.Seats.headOption.flatMap(_._2.occupant).map(_.Name).getOrElse(""), SendResponse(ChatMsg(ChatMessageType.UNK_227, msg)) ) diff --git a/src/main/scala/net/psforever/objects/zones/exp/KillAssists.scala b/src/main/scala/net/psforever/objects/zones/exp/KillAssists.scala index 91a4d3a67..10a94effb 100644 --- a/src/main/scala/net/psforever/objects/zones/exp/KillAssists.scala +++ b/src/main/scala/net/psforever/objects/zones/exp/KillAssists.scala @@ -6,7 +6,8 @@ import net.psforever.objects.avatar.scoring.{Assist, Death, KDAStat, Kill} import net.psforever.objects.sourcing.{PlayerSource, SourceEntry} import net.psforever.objects.vital.interaction.{Adversarial, DamageResult} import net.psforever.objects.vital.{DamagingActivity, HealingActivity, InGameActivity, RepairingActivity, RevivingActivity, SpawningActivity} -import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage} +import net.psforever.services.avatar.AvatarAction +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.types.PlanetSideEmpire import net.psforever.util.Config @@ -42,7 +43,6 @@ object KillAssists { * @param eventBus where to send the results of the experience determination(s) * @see `ActorRef` * @see `AvatarAction.UpdateKillsDeathsAssists` - * @see `AvatarServiceMessage` * @see `DamageResult` * @see `rewardThisPlayerDeath` */ @@ -53,7 +53,7 @@ object KillAssists { eventBus: ActorRef ): Unit = { rewardThisPlayerDeath(victim, lastDamage, history).foreach { case (p, kda) => - eventBus ! AvatarServiceMessage(p.Name, AvatarAction.UpdateKillsDeathsAssists(p.CharId, kda)) + eventBus ! MessageEnvelope(p.Name, AvatarAction.UpdateKillsDeathsAssists(p.CharId, kda)) } } diff --git a/src/main/scala/net/psforever/objects/zones/exp/KillContributions.scala b/src/main/scala/net/psforever/objects/zones/exp/KillContributions.scala index 441d28f8c..25e79e3bf 100644 --- a/src/main/scala/net/psforever/objects/zones/exp/KillContributions.scala +++ b/src/main/scala/net/psforever/objects/zones/exp/KillContributions.scala @@ -8,7 +8,8 @@ import net.psforever.objects.sourcing.{BuildingSource, MountableEntry, PlayerSou import net.psforever.objects.vital.{Contribution, InGameActivity, RevivingActivity, TelepadUseActivity, TerminalUsedActivity, VehicleCargoDismountActivity, VehicleCargoMountActivity, DismountingActivity, MountingActivity} import net.psforever.objects.vital.projectile.ProjectileReason import net.psforever.objects.zones.exp.rec.{CombinedHealthAndArmorContributionProcess, MachineRecoveryExperienceContributionProcess} -import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage} +import net.psforever.services.avatar.AvatarAction +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.types.{PlanetSideEmpire, Vector3} import net.psforever.util.Config @@ -73,7 +74,6 @@ object KillContributions { * @param eventBus where to send the results of the experience determination(s) * @see `ActorRef` * @see `AvatarAction.UpdateKillsDeathsAssists` - * @see `AvatarServiceMessage` * @see `rewardTheseSupporters` * @see `SupportActivity` */ @@ -88,7 +88,7 @@ object KillContributions { //take the output and transform that into contribution distribution data rewardTheseSupporters(target, history, kill, bep) .foreach { case (charId, ContributionStatsOutput(player, weapons, exp)) => - eventBus ! AvatarServiceMessage( + eventBus ! MessageEnvelope( player.Name, AvatarAction.UpdateKillsDeathsAssists(charId, SupportActivity(victim, weapons, exp.toLong)) ) @@ -108,7 +108,6 @@ object KillContributions { * @see `ActorRef` * @see `additionalContributionSources` * @see `AvatarAction.UpdateKillsDeathsAssists` - * @see `AvatarServiceMessage` * @see `CombinedHealthAndArmorContributionProcess` * @see `composeContributionOutput` * @see `initialScoring` diff --git a/src/main/scala/net/psforever/services/CavernRotationService.scala b/src/main/scala/net/psforever/services/CavernRotationService.scala index 7e3d76581..d912d427f 100644 --- a/src/main/scala/net/psforever/services/CavernRotationService.scala +++ b/src/main/scala/net/psforever/services/CavernRotationService.scala @@ -12,8 +12,9 @@ import net.psforever.objects.Default import net.psforever.objects.serverobject.structures.{Building, WarpGate} import net.psforever.objects.zones.Zone import net.psforever.packet.game.ChatMsg +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.services.base.message.SendResponse -import net.psforever.services.galaxy.{GalaxyAction, GalaxyServiceMessage, GalaxyServiceResponse} +import net.psforever.services.galaxy.{GalaxyAction, GalaxyServiceResponse} import net.psforever.types.ChatMessageType import net.psforever.util.Config import net.psforever.zones.Zones @@ -90,7 +91,7 @@ object CavernRotationService { */ private def closedCavernWarning(zone: ZoneMonitor, counter: Int, galaxyService: ActorRef): Boolean = { if (!zone.locked) { - galaxyService ! GalaxyServiceMessage(SendResponse( + galaxyService ! MessageEnvelope("", SendResponse( ChatMsg(ChatMessageType.UNK_229, s"@cavern_closing_warning^@${zone.zone.id}~^@$counter~") )) true @@ -573,14 +574,14 @@ class CavernRotationService( val curr = System.currentTimeMillis() val (lockedZones, unlockedZones) = managedZones.partition(_.locked) unlockedZones.foreach { z => - galaxyService ! GalaxyServiceMessage(GalaxyAction.UnlockedZoneUpdate(z.zone)) + galaxyService ! MessageEnvelope("", GalaxyAction.UnlockedZoneUpdate(z.zone)) } val sortedLocked = lockedZones.sortBy(z => z.start) sortedLocked.take(2).foreach { z => - galaxyService ! GalaxyServiceMessage(GalaxyAction.LockedZoneUpdate(z.zone, z.start + z.duration - curr)) + galaxyService ! MessageEnvelope("", GalaxyAction.LockedZoneUpdate(z.zone, z.start + z.duration - curr)) } sortedLocked.takeRight(2).foreach { z => - galaxyService ! GalaxyServiceMessage(GalaxyAction.LockedZoneUpdate(z.zone, 0L)) + galaxyService ! MessageEnvelope("", GalaxyAction.LockedZoneUpdate(z.zone, 0L)) } } @@ -665,7 +666,7 @@ class CavernRotationService( lockTimerToDisplayWarning(hoursBetweenRotationsAsHours - firstClosingWarningAtMinutes.minutes) //alert clients to change if (lockingZone ne unlockingZone) { - galaxyService ! GalaxyServiceMessage(SendResponse( + galaxyService ! MessageEnvelope("", SendResponse( ChatMsg(ChatMessageType.UNK_229, s"@cavern_switched^@${lockingZone.id}~^@${unlockingZone.id}") )) //change warp gate statuses to reflect zone lock state diff --git a/src/main/scala/net/psforever/services/account/AccountPersistenceService.scala b/src/main/scala/net/psforever/services/account/AccountPersistenceService.scala index 69b01c40d..6c452e91d 100644 --- a/src/main/scala/net/psforever/services/account/AccountPersistenceService.scala +++ b/src/main/scala/net/psforever/services/account/AccountPersistenceService.scala @@ -15,9 +15,10 @@ import net.psforever.objects.zones.Zone import net.psforever.persistence import net.psforever.types.Vector3 import net.psforever.services.{Service, ServiceManager} -import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage} +import net.psforever.services.avatar.AvatarAction +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.services.base.message.ObjectDelete -import net.psforever.services.galaxy.{GalaxyAction, GalaxyServiceMessage} +import net.psforever.services.galaxy.GalaxyAction import net.psforever.zones.Zones import scala.util.Success @@ -368,7 +369,7 @@ class PersistenceMonitor( (inZone.Players.find(p => p.name == name), inZone.AllPlayers.find(p => p.Name == name)) match { case (Some(avatar), Some(player)) if player.VehicleSeated.nonEmpty => //in case the player is holding the llu and disconnects - player.Zone.AvatarEvents ! AvatarServiceMessage(player.Name, AvatarAction.DropSpecialItem()) + player.Zone.AvatarEvents ! MessageEnvelope(player.Name, AvatarAction.DropSpecialItem()) //alive or dead in a vehicle //if the avatar is dead while in a vehicle, they haven't released yet AvatarActor.saveAvatarData(avatar) @@ -386,7 +387,7 @@ class PersistenceMonitor( case (Some(avatar), Some(player)) => //in case the player is holding the llu and disconnects - player.Zone.AvatarEvents ! AvatarServiceMessage(player.Name, AvatarAction.DropSpecialItem()) + player.Zone.AvatarEvents ! MessageEnvelope(player.Name, AvatarAction.DropSpecialItem()) //alive or dead, as standard Infantry AvatarActor.saveAvatarData(avatar) AvatarActor.finalSavePlayerData(player) @@ -415,8 +416,7 @@ class PersistenceMonitor( * As this persistence monitor is about to become invalid, * any messages sent in response to what we are sending are received by the monitor's parent. * @see `Avatar` - * @see `AvatarAction.ObjectDelete` - * @see `AvatarServiceMessage` + * @see `ObjectDelete` * @see `GUIDTask.UnregisterPlayer` * @see `Player` * @see `Zone.AvatarEvents` @@ -435,7 +435,7 @@ class PersistenceMonitor( case _ => ; } inZone.Population.tell(Zone.Population.Release(avatar), parent) - inZone.AvatarEvents.tell(AvatarServiceMessage(inZone.id, pguid, ObjectDelete(pguid)), parent) + inZone.AvatarEvents.tell(MessageEnvelope(inZone.id, pguid, ObjectDelete(pguid)), parent) TaskWorkflow.execute(GUIDTask.unregisterPlayer(inZone.GUID, player)) //inZone.tasks.tell(GUIDTask.UnregisterPlayer(player)(inZone.GUID), parent) AvatarLogout(avatar) @@ -454,7 +454,7 @@ class PersistenceMonitor( def AvatarLogout(avatar: Avatar): Unit = { LivePlayerList.Remove(avatar.id) squadService.tell(Service.Leave(avatar.id.toString), context.parent) - galaxyService.tell(GalaxyServiceMessage(GalaxyAction.LogStatusChange(avatar.name)), context.parent) + galaxyService.tell(MessageEnvelope(GalaxyAction.LogStatusChange(avatar.name)), context.parent) Deployables.Disown(inZone, avatar, context.parent) inZone.Population.tell(Zone.Population.Leave(avatar), context.parent) TaskWorkflow.execute(GUIDTask.unregisterObject(inZone.GUID, avatar.locker)) diff --git a/src/main/scala/net/psforever/services/avatar/AvatarService.scala b/src/main/scala/net/psforever/services/avatar/AvatarService.scala index 0aa2db81d..9c56bf9c0 100644 --- a/src/main/scala/net/psforever/services/avatar/AvatarService.scala +++ b/src/main/scala/net/psforever/services/avatar/AvatarService.scala @@ -1,25 +1,9 @@ // Copyright (c) 2017 PSForever package net.psforever.services.avatar -import akka.actor.{ActorContext, ActorRef, Props} -import net.psforever.services.avatar.support.{CorpseRemovalActor, DroppedItemRemover} -import net.psforever.services.base.{EventServiceSupport, EventSystemStamp, GenericEventServiceWithCacheAndSupport} - -case object CorpseRemovalSupport - extends EventServiceSupport { - def label: String = "undertaker" - def constructor(context: ActorContext): ActorRef = { - context.actorOf(Props[CorpseRemovalActor](), name = "CorpseRemoval") - } -} - -case object LitterRemovalSupport - extends EventServiceSupport { - def label: String = "janitor" - def constructor(context: ActorContext): ActorRef = { - context.actorOf(Props[DroppedItemRemover](), name = "DroppedItemRemover") - } -} +import akka.actor.Props +import net.psforever.services.avatar.support.{CorpseRemovalSupport, LitterRemovalSupport} +import net.psforever.services.base.{EventSystemStamp, GenericEventServiceWithCacheAndSupport} case object AvatarStamp extends EventSystemStamp diff --git a/src/main/scala/net/psforever/services/avatar/AvatarServiceMessage.scala b/src/main/scala/net/psforever/services/avatar/AvatarServiceMessage.scala deleted file mode 100644 index d7415c59a..000000000 --- a/src/main/scala/net/psforever/services/avatar/AvatarServiceMessage.scala +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright (c) 2017-2026 PSForever -package net.psforever.services.avatar - -import net.psforever.services.Service -import net.psforever.services.base.envelope.MessageEnvelope -import net.psforever.services.base.message.EventMessage -import net.psforever.types.PlanetSideGUID - -object AvatarServiceMessage { - def apply(channel: String, msg: EventMessage): MessageEnvelope = - MessageEnvelope(channel, Service.defaultPlayerGUID, msg) - - def apply(channel: String, filter: PlanetSideGUID, msg: EventMessage): MessageEnvelope = - MessageEnvelope(channel, filter, msg) -} diff --git a/src/main/scala/net/psforever/services/avatar/support/CorpseRemovalActor.scala b/src/main/scala/net/psforever/services/avatar/support/CorpseRemovalActor.scala index 4f86597e8..842ccdab4 100644 --- a/src/main/scala/net/psforever/services/avatar/support/CorpseRemovalActor.scala +++ b/src/main/scala/net/psforever/services/avatar/support/CorpseRemovalActor.scala @@ -1,17 +1,27 @@ // Copyright (c) 2017 PSForever package net.psforever.services.avatar.support +import akka.actor.{ActorContext, ActorRef, Props} import net.psforever.objects.guid.{GUIDTask, TaskBundle} import net.psforever.objects.Player import net.psforever.types.{ExoSuitType, PlanetSideGUID} -import net.psforever.services.{RemoverActor, Service} +import net.psforever.services.Service import net.psforever.services.avatar.AvatarAction.Release -import net.psforever.services.avatar.AvatarServiceMessage -import net.psforever.services.base.{GenericSupportEnvelope, GenericSupportEnvelopeOnly} +import net.psforever.services.base.envelope.MessageEnvelope +import net.psforever.services.base.{EventServiceSupport, GenericSupportEnvelope, GenericSupportEnvelopeOnly} import net.psforever.services.base.message.ObjectDelete +import net.psforever.services.base.support.RemoverActor import scala.concurrent.duration._ +case object CorpseRemovalSupport + extends EventServiceSupport { + def label: String = "undertaker" + def constructor(context: ActorContext): ActorRef = { + context.actorOf(Props[CorpseRemovalActor](), name = "CorpseRemoval") + } +} + final case class ReleaseEnvelope( channel: String, filter: PlanetSideGUID, @@ -49,7 +59,7 @@ class CorpseRemovalActor extends RemoverActor() { def FirstJob(entry: RemoverActor.Entry): Unit = { import net.psforever.objects.zones.Zone entry.zone.Population ! Zone.Corpse.Remove(entry.obj.asInstanceOf[Player]) - context.parent ! AvatarServiceMessage( + context.parent ! MessageEnvelope( entry.zone.id, ObjectDelete(entry.obj.GUID, unk=1) ) diff --git a/src/main/scala/net/psforever/services/avatar/support/DroppedItemRemover.scala b/src/main/scala/net/psforever/services/avatar/support/DroppedItemRemover.scala index bb74a68e6..d745a04dc 100644 --- a/src/main/scala/net/psforever/services/avatar/support/DroppedItemRemover.scala +++ b/src/main/scala/net/psforever/services/avatar/support/DroppedItemRemover.scala @@ -1,18 +1,28 @@ // Copyright (c) 2017 PSForever package net.psforever.services.avatar.support +import akka.actor.{ActorContext, ActorRef, Props} import net.psforever.objects.equipment.Equipment import net.psforever.objects.guid.{GUIDTask, TaskBundle} import net.psforever.objects.zones.Zone import net.psforever.services.avatar.AvatarAction.{DropItem, PickupItem} -import net.psforever.services.{RemoverActor, Service} -import net.psforever.services.avatar.AvatarServiceMessage -import net.psforever.services.base.{GenericSupportEnvelope, GenericSupportEnvelopeOnly} +import net.psforever.services.Service +import net.psforever.services.base.envelope.MessageEnvelope +import net.psforever.services.base.{EventServiceSupport, GenericSupportEnvelope, GenericSupportEnvelopeOnly} import net.psforever.services.base.message.ObjectDelete +import net.psforever.services.base.support.RemoverActor import net.psforever.types.PlanetSideGUID import scala.concurrent.duration._ +case object LitterRemovalSupport + extends EventServiceSupport { + def label: String = "janitor" + def constructor(context: ActorContext): ActorRef = { + context.actorOf(Props[DroppedItemRemover](), name = "DroppedItemRemover") + } +} + final case class PickupItemEnvelope( channel: String, filter: PlanetSideGUID, @@ -70,7 +80,7 @@ class DroppedItemRemover extends RemoverActor() { def FirstJob(entry: RemoverActor.Entry): Unit = { import net.psforever.objects.zones.Zone entry.zone.Ground ! Zone.Ground.RemoveItem(entry.obj.GUID) - context.parent ! AvatarServiceMessage( + context.parent ! MessageEnvelope( entry.zone.id, ObjectDelete(entry.obj.GUID) ) diff --git a/src/main/scala/net/psforever/services/base/envelope/MessageEnvelope.scala b/src/main/scala/net/psforever/services/base/envelope/MessageEnvelope.scala index 9ab7f8a09..398c752cf 100644 --- a/src/main/scala/net/psforever/services/base/envelope/MessageEnvelope.scala +++ b/src/main/scala/net/psforever/services/base/envelope/MessageEnvelope.scala @@ -1,6 +1,7 @@ // Copyright (c) 2026 PSForever package net.psforever.services.base.envelope +import net.psforever.services.Service import net.psforever.services.base.EventSystemStamp import net.psforever.services.base.message.{EventMessage, EventResponse} import net.psforever.types.PlanetSideGUID @@ -53,3 +54,11 @@ trait MessageTransformationBehavior */ case class MessageEnvelope(channel: String, filter: PlanetSideGUID, msg: EventMessage) extends MessageTransformationBehavior + +object MessageEnvelope { + def apply(msg: EventMessage): MessageEnvelope = + MessageEnvelope("", Service.defaultPlayerGUID, msg) + + def apply(channel: String, msg: EventMessage): MessageEnvelope = + MessageEnvelope(channel, Service.defaultPlayerGUID, msg) +} diff --git a/src/main/scala/net/psforever/services/RemoverActor.scala b/src/main/scala/net/psforever/services/base/support/RemoverActor.scala similarity index 98% rename from src/main/scala/net/psforever/services/RemoverActor.scala rename to src/main/scala/net/psforever/services/base/support/RemoverActor.scala index 6b7ecb9a7..2de317768 100644 --- a/src/main/scala/net/psforever/services/RemoverActor.scala +++ b/src/main/scala/net/psforever/services/base/support/RemoverActor.scala @@ -1,11 +1,10 @@ // Copyright (c) 2017 PSForever -package net.psforever.services +package net.psforever.services.base.support import akka.actor.Cancellable import net.psforever.objects.guid.{StraightforwardTask, TaskBundle, TaskWorkflow} import net.psforever.objects.zones.Zone import net.psforever.objects.{Default, PlanetSideGameObject} -import net.psforever.services.base.support.{SimilarityComparator, SupportActor, SupportActorCaseConversions} import net.psforever.types.Vector3 import scala.concurrent.Future diff --git a/src/main/scala/net/psforever/services/galaxy/GalaxyServiceMessage.scala b/src/main/scala/net/psforever/services/galaxy/GalaxyServiceMessage.scala deleted file mode 100644 index c0cc087fd..000000000 --- a/src/main/scala/net/psforever/services/galaxy/GalaxyServiceMessage.scala +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright (c) 2017 PSForever -package net.psforever.services.galaxy - -import net.psforever.services.Service -import net.psforever.services.base.envelope.MessageEnvelope -import net.psforever.services.base.message.EventMessage - -object GalaxyServiceMessage { - def apply(msg: EventMessage): MessageEnvelope = MessageEnvelope("", Service.defaultPlayerGUID, msg) - - def apply(channel: String, msg: EventMessage): MessageEnvelope = MessageEnvelope(channel, Service.defaultPlayerGUID, msg) -} diff --git a/src/main/scala/net/psforever/services/hart/HartTimer.scala b/src/main/scala/net/psforever/services/hart/HartTimer.scala index 2086c43b1..67f9f63f8 100644 --- a/src/main/scala/net/psforever/services/hart/HartTimer.scala +++ b/src/main/scala/net/psforever/services/hart/HartTimer.scala @@ -7,9 +7,9 @@ import net.psforever.objects.zones.Zone import net.psforever.services.Service import net.psforever.services.base.EventSystemStamp import net.psforever.services.base.bus.GenericEventBus -import net.psforever.services.base.envelope.{GenericResponseEnvelope, NoReply} +import net.psforever.services.base.envelope.{GenericResponseEnvelope, MessageEnvelope, NoReply} import net.psforever.services.base.message.EventResponse -import net.psforever.services.local.{LocalAction, LocalServiceMessage} +import net.psforever.services.local.LocalAction import net.psforever.types.{HartSequence, PlanetSideGUID} import scala.concurrent.duration._ @@ -109,7 +109,7 @@ class HartTimer(zone: Zone) extends Actor { event.prerequisiteUpdate match { case Some(fields) => val times = event.timeFields(time) - zone.LocalEvents ! LocalServiceMessage( + zone.LocalEvents ! MessageEnvelope( forChannel, LocalAction.ShuttleEvent(HartTimer.OrbitalShuttleEvent( fields.u1, fields.u2, times.t1, times.t2, times.t3, padAndShuttlePairs zip Seq(20, 20, 20) @@ -117,7 +117,7 @@ class HartTimer(zone: Zone) extends Actor { ) case None => ; } - zone.LocalEvents ! LocalServiceMessage( + zone.LocalEvents ! MessageEnvelope( forChannel, LocalAction.ShuttleEvent( HartTimer.analyzeEvent(event, padAndShuttlePairs, time) @@ -157,17 +157,17 @@ class HartTimer(zone: Zone) extends Actor { val evt = HartTimer.analyzeEvent(event, padAndShuttlePairs) event.docked match { case Some(true) if currEvent.docked.isEmpty => - zone.LocalEvents ! LocalServiceMessage(zoneId, LocalAction.ShuttleEvent(evt)) + zone.LocalEvents ! MessageEnvelope(zoneId, LocalAction.ShuttleEvent(evt)) padEvents.publish( shuttleDockedInThisZone ) case Some(false) if currEvent.docked.contains(true) => padEvents.publish( shuttleFreeFromDockInThisZone ) context.system.scheduler.scheduleOnce( delay = 10 milliseconds, zone.LocalEvents, - LocalServiceMessage(zoneId, LocalAction.ShuttleEvent(evt)) + MessageEnvelope(zoneId, LocalAction.ShuttleEvent(evt)) ) case _ => - zone.LocalEvents ! LocalServiceMessage(zoneId, LocalAction.ShuttleEvent(evt)) + zone.LocalEvents ! MessageEnvelope(zoneId, LocalAction.ShuttleEvent(evt)) } if (currEvent.lockedDoors != event.lockedDoors) { padEvents.publish( if(event.lockedDoors) HartTimer.LockDoors else HartTimer.UnlockDoors ) diff --git a/src/main/scala/net/psforever/services/hart/HartTimerActions.scala b/src/main/scala/net/psforever/services/hart/HartTimerActions.scala index 291c4bbc3..442f60c4b 100644 --- a/src/main/scala/net/psforever/services/hart/HartTimerActions.scala +++ b/src/main/scala/net/psforever/services/hart/HartTimerActions.scala @@ -3,7 +3,8 @@ package net.psforever.services.hart import net.psforever.objects.Vehicle import net.psforever.objects.serverobject.shuttle.OrbitalShuttlePad -import net.psforever.services.local.{LocalAction, LocalServiceMessage} +import net.psforever.services.base.envelope.MessageEnvelope +import net.psforever.services.local.LocalAction object HartTimerActions { /** @@ -17,7 +18,7 @@ object HartTimerActions { if(toChannel.equals(zone.id)) { shuttle.MountedIn = pad.GUID } - zone.LocalEvents ! LocalServiceMessage( + zone.LocalEvents ! MessageEnvelope( toChannel, LocalAction.ShuttleDock(pad.GUID, shuttle.GUID, 3) ) @@ -34,7 +35,7 @@ object HartTimerActions { if(toChannel.equals(zone.id)) { shuttle.MountedIn = None } - zone.LocalEvents ! LocalServiceMessage( + zone.LocalEvents ! MessageEnvelope( toChannel, LocalAction.ShuttleUndock(pad.GUID, shuttle.GUID, shuttle.Position, shuttle.Orientation) ) @@ -51,7 +52,7 @@ object HartTimerActions { if(toChannel.equals(zone.id)) { shuttle.Flying = state } - zone.LocalEvents ! LocalServiceMessage( + zone.LocalEvents ! MessageEnvelope( toChannel, LocalAction.ShuttleState(shuttle.GUID, shuttle.Position, shuttle.Orientation, state) ) diff --git a/src/main/scala/net/psforever/services/local/LocalService.scala b/src/main/scala/net/psforever/services/local/LocalService.scala index 395e5ec03..e6aad046f 100644 --- a/src/main/scala/net/psforever/services/local/LocalService.scala +++ b/src/main/scala/net/psforever/services/local/LocalService.scala @@ -1,43 +1,10 @@ // Copyright (c) 2017 PSForever package net.psforever.services.local -import akka.actor.{ActorContext, ActorRef, Props} +import akka.actor.Props import net.psforever.objects.zones.Zone -import net.psforever.services.local.support.CaptureFlagManager import net.psforever.services.local.support._ -import net.psforever.services.base.{EventServiceSupport, EventSystemStamp, GenericEventServiceWithSupport} - -case object DoorCloserSupport - extends EventServiceSupport { - def label: String = "doorCloser" - def constructor(context: ActorContext): ActorRef = { - context.actorOf(Props[DoorCloseActor](), name = "DoorCloser") - } -} - -case object HackClearSupport - extends EventServiceSupport { - def label: String = "hackClearer" - def constructor(context: ActorContext): ActorRef = { - context.actorOf(Props[HackClearActor](), name = "HackClearer") - } -} - -case object HackCaptureSupport - extends EventServiceSupport { - def label: String = "hackCapturer" - def constructor(context: ActorContext): ActorRef = { - context.actorOf(Props[HackCaptureActor](), name = "HackCapturer") - } -} - -case class CaptureFlagSupport(zone: Zone) - extends EventServiceSupport { - def label: String = "captureFlagManager" - def constructor(context: ActorContext): ActorRef = { - context.actorOf(Props(classOf[CaptureFlagManager], zone), name = "CaptureFlagManager") - } -} +import net.psforever.services.base.{EventSystemStamp, GenericEventServiceWithSupport} case object LocalStamp extends EventSystemStamp diff --git a/src/main/scala/net/psforever/services/local/LocalServiceMessage.scala b/src/main/scala/net/psforever/services/local/LocalServiceMessage.scala deleted file mode 100644 index 005610369..000000000 --- a/src/main/scala/net/psforever/services/local/LocalServiceMessage.scala +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright (c) 2017 PSForever -package net.psforever.services.local - -import net.psforever.services.Service -import net.psforever.services.base.envelope.MessageEnvelope -import net.psforever.services.base.message.EventMessage -import net.psforever.types.PlanetSideGUID - -object LocalServiceMessage { - def apply(channel: String, localMessage: EventMessage): MessageEnvelope = - MessageEnvelope(channel, Service.defaultPlayerGUID, localMessage) - - def apply(channel: String, filter: PlanetSideGUID, msg: EventMessage): MessageEnvelope = - MessageEnvelope(channel, filter, msg) -} diff --git a/src/main/scala/net/psforever/services/local/support/CaptureFlagManager.scala b/src/main/scala/net/psforever/services/local/support/CaptureFlagManager.scala index d08d1e207..231ca3104 100644 --- a/src/main/scala/net/psforever/services/local/support/CaptureFlagManager.scala +++ b/src/main/scala/net/psforever/services/local/support/CaptureFlagManager.scala @@ -1,7 +1,7 @@ // Copyright (c) 2021 PSForever package net.psforever.services.local.support -import akka.actor.{Actor, ActorRef, Cancellable} +import akka.actor.{Actor, ActorContext, ActorRef, Cancellable, Props} import net.psforever.login.WorldSession import net.psforever.objects.{Default, PlanetSideGameObject, Player} import net.psforever.objects.guid.{GUIDTask, TaskWorkflow} @@ -15,14 +15,23 @@ import net.psforever.objects.zones.interaction.InteractsWithZone import net.psforever.packet.game._ import net.psforever.services.ServiceManager import net.psforever.services.ServiceManager.{Lookup, LookupResult} -import net.psforever.services.base.GenericSupportEnvelopeOnly +import net.psforever.services.base.{EventServiceSupport, GenericSupportEnvelopeOnly} +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.services.base.message.{GenericObjectAction, SendResponse} -import net.psforever.services.galaxy.{GalaxyAction, GalaxyServiceMessage} -import net.psforever.services.local.{LocalAction, LocalServiceMessage} +import net.psforever.services.galaxy.GalaxyAction +import net.psforever.services.local.LocalAction import net.psforever.types.{ChatMessageType, PlanetSideEmpire, PlanetSideGUID, Vector3} import scala.concurrent.duration.DurationInt +case class CaptureFlagSupport(zone: Zone) + extends EventServiceSupport { + def label: String = "captureFlagManager" + def constructor(context: ActorContext): ActorRef = { + context.actorOf(Props(classOf[CaptureFlagManager], zone), name = "CaptureFlagManager") + } +} + final case class FlagEnvelope(supportMessage: CaptureFlagManager.Command) extends GenericSupportEnvelopeOnly { def supportLabel: String = "captureFlagManager" @@ -52,7 +61,7 @@ class CaptureFlagManager(zone: Zone) extends Actor { case CaptureFlagManager.SpawnCaptureFlag(capture_terminal, target, hackingFaction) => val socket = capture_terminal.Owner.asInstanceOf[Building].GetFlagSocket.get // Override CC message when looked at - zone.LocalEvents ! LocalServiceMessage( + zone.LocalEvents ! MessageEnvelope( zone.id, PlanetSideGUID(-1), GenericObjectAction( @@ -74,7 +83,7 @@ class CaptureFlagManager(zone: Zone) extends Actor { TaskWorkflow.execute(WorldSession.CallBackForTask( GUIDTask.registerObject(zone.GUID, flag), zone.LocalEvents, - LocalServiceMessage( + MessageEnvelope( zone.id, LocalAction.LluSpawned(flag) ) @@ -89,7 +98,7 @@ class CaptureFlagManager(zone: Zone) extends Actor { case None => "A soldier" } // Trigger Install sound - zone.LocalEvents ! LocalServiceMessage( + zone.LocalEvents ! MessageEnvelope( zone.id, PlanetSideGUID(-1), LocalAction.TriggerSound(TriggeredSound.LLUInstall, flag.Target.CaptureTerminal.get.Position, 20, 0.8000001f) @@ -126,12 +135,12 @@ class CaptureFlagManager(zone: Zone) extends Actor { case CaptureFlagManager.PickupFlag(flag: CaptureFlag, player: Player) => flag.Carrier = Some(player) - zone.LocalEvents ! LocalServiceMessage( + zone.LocalEvents ! MessageEnvelope( zone.id, PlanetSideGUID(-1), SendResponse(ObjectAttachMessage(player.GUID, flag.GUID, 252)) ) - zone.LocalEvents ! LocalServiceMessage( + zone.LocalEvents ! MessageEnvelope( zone.id, PlanetSideGUID(-1), LocalAction.TriggerSound(TriggeredSound.LLUPickup, player.Position, 15, volume = 0.8f) @@ -151,7 +160,7 @@ class CaptureFlagManager(zone: Zone) extends Actor { // Remove attached player from flag flag.Carrier = None // Send drop packet - zone.LocalEvents ! LocalServiceMessage( + zone.LocalEvents ! MessageEnvelope( zone.id, PlanetSideGUID(-1), SendResponse(ObjectDetachMessage(player.GUID, flag.GUID, player.Position, 0, 0, 0)) @@ -178,7 +187,7 @@ class CaptureFlagManager(zone: Zone) extends Actor { TaskWorkflow.execute(WorldSession.CallBackForTask( GUIDTask.registerObject(zone.GUID, replacementLlu), zone.LocalEvents, - LocalServiceMessage( + MessageEnvelope( zone.id, LocalAction.LluSpawned(replacementLlu) ) @@ -212,7 +221,7 @@ class CaptureFlagManager(zone: Zone) extends Actor { is_monolith_unit = false ) } - galaxyService ! GalaxyServiceMessage(GalaxyAction.FlagMapUpdate(CaptureFlagUpdateMessage(zone.Number, flagInfo))) + galaxyService ! MessageEnvelope("", GalaxyAction.FlagMapUpdate(CaptureFlagUpdateMessage(zone.Number, flagInfo))) } private def TrackFlag(flag: CaptureFlag): Unit = { @@ -239,7 +248,7 @@ class CaptureFlagManager(zone: Zone) extends Actor { flag.Owner.asInstanceOf[Building].GetFlagSocket.get.captureFlag = None UntrackFlag(flag) // Unregister LLU from clients, - zone.LocalEvents ! LocalServiceMessage(zone.id, PlanetSideGUID(-1), LocalAction.LluDespawned(flag.GUID, flag.Position)) + zone.LocalEvents ! MessageEnvelope(zone.id, PlanetSideGUID(-1), LocalAction.LluDespawned(flag.GUID, flag.Position)) // Then unregister it from the GUID pool TaskWorkflow.execute(GUIDTask.unregisterObject(zone.GUID, flag)) } @@ -269,7 +278,7 @@ object CaptureFlagManager { } else { ChatMessageType.UNK_229 } - zone.LocalEvents ! LocalServiceMessage( + zone.LocalEvents ! MessageEnvelope( zone.id, PlanetSideGUID(-1), SendResponse(ChatMsg(messageType, wideContents = true, "", message, None)) diff --git a/src/main/scala/net/psforever/services/local/support/DoorCloseActor.scala b/src/main/scala/net/psforever/services/local/support/DoorCloseActor.scala index 67387b6f7..d99a134ac 100644 --- a/src/main/scala/net/psforever/services/local/support/DoorCloseActor.scala +++ b/src/main/scala/net/psforever/services/local/support/DoorCloseActor.scala @@ -1,19 +1,28 @@ // Copyright (c) 2017 PSForever package net.psforever.services.local.support -import akka.actor.{Actor, Cancellable} +import akka.actor.{Actor, ActorContext, ActorRef, Cancellable, Props} import net.psforever.objects.{Default, Doors} import net.psforever.objects.serverobject.doors.Door import net.psforever.objects.zones.Zone import net.psforever.services.Service -import net.psforever.services.base.GenericSupportEnvelope +import net.psforever.services.base.{EventServiceSupport, GenericSupportEnvelope} +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.services.local.LocalAction.IsADoorMessage -import net.psforever.services.local.{LocalAction, LocalServiceMessage} +import net.psforever.services.local.LocalAction import net.psforever.types.PlanetSideGUID import scala.annotation.tailrec import scala.concurrent.duration._ +case object DoorCloserSupport + extends EventServiceSupport { + def label: String = "doorCloser" + def constructor(context: ActorContext): ActorRef = { + context.actorOf(Props[DoorCloseActor](), name = "DoorCloser") + } +} + final case class DoorMessage( channel: String, msg: IsADoorMessage, @@ -58,7 +67,7 @@ class DoorCloseActor() extends Actor { ).sortBy(_.time) doorsToClose2.foreach { case DoorCloseActor.DoorEntry(door, zone, _) => door.Open = None //permissible break from synchronization - zone.LocalEvents ! LocalServiceMessage(zone.id, LocalAction.DoorCloses(door.GUID)) //call up to the main event system + zone.LocalEvents ! MessageEnvelope(zone.id, LocalAction.DoorCloses(door.GUID)) //call up to the main event system } if (openDoors.nonEmpty) { diff --git a/src/main/scala/net/psforever/services/local/support/HackCaptureActor.scala b/src/main/scala/net/psforever/services/local/support/HackCaptureActor.scala index b6f825950..06c606f30 100644 --- a/src/main/scala/net/psforever/services/local/support/HackCaptureActor.scala +++ b/src/main/scala/net/psforever/services/local/support/HackCaptureActor.scala @@ -1,7 +1,7 @@ // Copyright (c) 2021 PSForever package net.psforever.services.local.support -import akka.actor.{Actor, Cancellable} +import akka.actor.{Actor, ActorContext, ActorRef, Cancellable, Props} import net.psforever.actors.zone.{BuildingActor, ZoneActor} import net.psforever.objects.serverobject.CommonMessages import net.psforever.objects.serverobject.hackable.Hackable @@ -13,10 +13,11 @@ import net.psforever.objects.Default import net.psforever.objects.serverobject.structures.participation.MajorFacilityHackParticipation import net.psforever.packet.game.{ChatMsg, GenericAction, HackState7, PlanetsideAttributeEnum} import net.psforever.objects.sourcing.PlayerSource -import net.psforever.services.base.GenericSupportEnvelopeOnly +import net.psforever.services.base.{EventServiceSupport, GenericSupportEnvelopeOnly} +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.services.base.message.PlanetsideAttribute import net.psforever.services.local.support.HackCaptureActor.GetHackingFaction -import net.psforever.services.local.{LocalAction, LocalServiceMessage} +import net.psforever.services.local.LocalAction import net.psforever.types.{ChatMessageType, PlanetSideEmpire, PlanetSideGUID} import java.util.concurrent.{Executors, TimeUnit} @@ -24,6 +25,14 @@ import scala.collection.Seq import scala.concurrent.duration.{FiniteDuration, _} import scala.util.Random +case object HackCaptureSupport + extends EventServiceSupport { + def label: String = "hackCapturer" + def constructor(context: ActorContext): ActorRef = { + context.actorOf(Props[HackCaptureActor](), name = "HackCapturer") + } +} + final case class CaptureEnvelope(supportMessage: Any) extends GenericSupportEnvelopeOnly { def supportLabel: String = "hackCapturer" @@ -235,7 +244,7 @@ class HackCaptureActor extends Actor { ): Unit = { val attributeValue = HackCaptureActor.GetHackUpdateAttributeValue(terminal, isResecured) // Notify all clients that CC has had its hack state changed - terminal.Zone.LocalEvents ! LocalServiceMessage( + terminal.Zone.LocalEvents ! MessageEnvelope( terminal.Zone.id, PlanetSideGUID(-1), PlanetsideAttribute( @@ -278,7 +287,7 @@ class HackCaptureActor extends Actor { building .PlayersInSOI .collect { case p if p.Faction == hackedByFaction => - events ! LocalServiceMessage(p.Name, msg) + events ! MessageEnvelope(p.Name, msg) } val buildings = building.Zone.Buildings.values val hackedBaseId = building.GUID @@ -314,7 +323,7 @@ class HackCaptureActor extends Actor { NotifyHackStateChange(terminal, isResecured = true) // todo: this appears to be the way to reset the base warning lights after the hack finishes but it doesn't seem to work. val zone = building.Zone - zone.LocalEvents ! LocalServiceMessage(zone.id, LocalAction.HackClear(building.GUID, 3212836864L, HackState7.Unk8)) + zone.LocalEvents ! MessageEnvelope(zone.id, LocalAction.HackClear(building.GUID, 3212836864L, HackState7.Unk8)) } private def RestartTimer(): Unit = { diff --git a/src/main/scala/net/psforever/services/local/support/HackClearActor.scala b/src/main/scala/net/psforever/services/local/support/HackClearActor.scala index 92b02dec2..1d7796984 100644 --- a/src/main/scala/net/psforever/services/local/support/HackClearActor.scala +++ b/src/main/scala/net/psforever/services/local/support/HackClearActor.scala @@ -2,21 +2,30 @@ package net.psforever.services.local.support import java.util.concurrent.TimeUnit -import akka.actor.{Actor, Cancellable} +import akka.actor.{Actor, ActorContext, ActorRef, Cancellable, Props} import net.psforever.objects.{Default, GlobalDefinitions} import net.psforever.objects.serverobject.hackable.Hackable import net.psforever.objects.serverobject.{CommonMessages, PlanetSideServerObject} import net.psforever.objects.zones.Zone import net.psforever.packet.game.HackState7 -import net.psforever.services.base.{GenericSupportEnvelope, GenericSupportEnvelopeOnly} +import net.psforever.services.base.envelope.MessageEnvelope +import net.psforever.services.base.{EventServiceSupport, GenericSupportEnvelope, GenericSupportEnvelopeOnly} import net.psforever.services.base.message.GenericObjectAction import net.psforever.services.local.LocalAction.IsAHackMessage -import net.psforever.services.local.{LocalAction, LocalServiceMessage} +import net.psforever.services.local.LocalAction import net.psforever.types.PlanetSideGUID import scala.annotation.tailrec import scala.concurrent.duration._ +case object HackClearSupport + extends EventServiceSupport { + def label: String = "hackClearer" + def constructor(context: ActorContext): ActorRef = { + context.actorOf(Props[HackClearActor](), name = "HackClearer") + } +} + final case class HackEntityEnvelope( channel: String, filter: PlanetSideGUID, @@ -65,7 +74,7 @@ class HackClearActor() extends Actor { hackedObjects = stillHackedObjects unhackObjects.foreach { case HackClearActor.HackEntry(target, zone, unk1, unk2, _, _) => target.Actor ! CommonMessages.ClearHack() - zone.LocalEvents ! LocalServiceMessage(zone.id, LocalAction.HackClear(target.GUID, unk1, unk2)) + zone.LocalEvents ! MessageEnvelope(zone.id, LocalAction.HackClear(target.GUID, unk1, unk2)) if (target.Definition == GlobalDefinitions.main_terminal) { ClearVirusFromBuilding(target) } @@ -78,7 +87,7 @@ class HackClearActor() extends Actor { case Some(HackClearActor.HackEntry(target, zone, unk1, unk2, _, _)) => hackedObjects = hackedObjects.filterNot(x => x.target == target) target.Actor ! CommonMessages.ClearHack() - zone.LocalEvents ! LocalServiceMessage(zone.id, LocalAction.HackClear(target.GUID, 3212836864L, HackState7.Unk8)) + zone.LocalEvents ! MessageEnvelope(zone.id, LocalAction.HackClear(target.GUID, 3212836864L, HackState7.Unk8)) // Restart the timer in case the object we just removed was the next one scheduled RestartTimer() @@ -117,7 +126,6 @@ class HackClearActor() extends Actor { import net.psforever.objects.serverobject.structures.Building import net.psforever.objects.serverobject.terminals.Terminal import net.psforever.actors.zone.BuildingActor - import net.psforever.services.avatar.AvatarServiceMessage val building = target.asInstanceOf[Terminal].Owner.asInstanceOf[Building] building.virusId = 8 @@ -125,7 +133,7 @@ class HackClearActor() extends Actor { val msg = GenericObjectAction(target.GUID, 60) val events = building.Zone.AvatarEvents building.PlayersInSOI.foreach { player => - events ! AvatarServiceMessage(player.Name, msg) + events ! MessageEnvelope(player.Name, msg) } building.Actor ! BuildingActor.MapUpdate() } diff --git a/src/main/scala/net/psforever/services/vehicle/VehicleService.scala b/src/main/scala/net/psforever/services/vehicle/VehicleService.scala index 7ab4ccf0f..26f130f43 100644 --- a/src/main/scala/net/psforever/services/vehicle/VehicleService.scala +++ b/src/main/scala/net/psforever/services/vehicle/VehicleService.scala @@ -1,17 +1,9 @@ // Copyright (c) 2017-2026 PSForever package net.psforever.services.vehicle -import akka.actor.{ActorContext, ActorRef, Props} -import net.psforever.services.base.{EventServiceSupport, EventSystemStamp, GenericEventServiceWithCacheAndSupport} -import net.psforever.services.vehicle.support.TurretUpgrader - -case object TurretUpgradeSupport - extends EventServiceSupport { - def label: String = "turretUpgrader" - def constructor(context: ActorContext): ActorRef = { - context.actorOf(Props[TurretUpgrader](), name = "TurretUpgrader") - } -} +import akka.actor.Props +import net.psforever.services.base.{EventSystemStamp, GenericEventServiceWithCacheAndSupport} +import net.psforever.services.vehicle.support.TurretUpgradeSupport case object VehicleStamp extends EventSystemStamp diff --git a/src/main/scala/net/psforever/services/vehicle/VehicleServiceMessage.scala b/src/main/scala/net/psforever/services/vehicle/VehicleServiceMessage.scala deleted file mode 100644 index f6aae9a32..000000000 --- a/src/main/scala/net/psforever/services/vehicle/VehicleServiceMessage.scala +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright (c) 2017 PSForever -package net.psforever.services.vehicle - -import net.psforever.services.Service -import net.psforever.services.base.message.EventMessage -import net.psforever.services.base.envelope.MessageEnvelope -import net.psforever.types.PlanetSideGUID - -object VehicleServiceMessage { - def apply(channel: String, localMessage: EventMessage): MessageEnvelope = - MessageEnvelope(channel, Service.defaultPlayerGUID, localMessage) - - def apply(channel: String, filter: PlanetSideGUID, msg: EventMessage): MessageEnvelope = - MessageEnvelope(channel, filter, msg) -} diff --git a/src/main/scala/net/psforever/services/vehicle/support/TurretUpgrader.scala b/src/main/scala/net/psforever/services/vehicle/support/TurretUpgrader.scala index 1b81938c7..df81cb0ff 100644 --- a/src/main/scala/net/psforever/services/vehicle/support/TurretUpgrader.scala +++ b/src/main/scala/net/psforever/services/vehicle/support/TurretUpgrader.scala @@ -1,7 +1,7 @@ // Copyright (c) 2017 PSForever package net.psforever.services.vehicle.support -import akka.actor.Cancellable +import akka.actor.{ActorContext, ActorRef, Cancellable, Props} import net.psforever.objects.equipment.EquipmentSlot import net.psforever.objects.{AmmoBox, Default, PlanetSideGameObject, Tool} import net.psforever.objects.guid._ @@ -9,15 +9,24 @@ import net.psforever.objects.serverobject.PlanetSideServerObject import net.psforever.objects.serverobject.turret.{FacilityTurret, TurretUpgrade, WeaponTurret} import net.psforever.objects.vehicles.MountedWeapons import net.psforever.objects.zones.Zone -import net.psforever.services.base.GenericSupportEnvelopeOnly +import net.psforever.services.base.{EventServiceSupport, GenericSupportEnvelopeOnly} +import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.types.PlanetSideGUID import net.psforever.services.base.support.{SimilarityComparator, SupportActor, SupportActorCaseConversions} -import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage} +import net.psforever.services.vehicle.VehicleAction import scala.concurrent.Future import scala.concurrent.duration._ import scala.concurrent.ExecutionContext.Implicits.global +case object TurretUpgradeSupport + extends EventServiceSupport { + def label: String = "turretUpgrader" + def constructor(context: ActorContext): ActorRef = { + context.actorOf(Props[TurretUpgrader](), name = "TurretUpgrader") + } +} + final case class TurretEnvelope(supportMessage: Any) extends GenericSupportEnvelopeOnly { def supportLabel: String = "turretUpgrader" @@ -165,7 +174,7 @@ class TurretUpgrader extends SupportActor[TurretUpgrader.Entry] { seat.unmount(tplayer) tplayer.VehicleSeated = None if (tplayer.HasGUID) { - context.parent ! VehicleServiceMessage( + context.parent ! MessageEnvelope( zoneId, tplayer.GUID, VehicleAction.KickPassenger(4, unk2=false, turretGUID) @@ -240,7 +249,7 @@ class TurretUpgrader extends SupportActor[TurretUpgrader.Entry] { .map { case (index: Int, slot: EquipmentSlot) => (index, slot.Equipment) } .collect { case (index, Some(tool: Tool)) => - context.parent ! VehicleServiceMessage( + context.parent ! MessageEnvelope( zone.id, VehicleAction.EquipmentInSlot(targetGUID, index, tool) )