reorganized the services.base classes; streamlined the class inheritance structure and param requirements for certain classes; messed up all imports

This commit is contained in:
Fate-JH 2026-02-16 16:57:12 -05:00
parent 775d9dca5e
commit 4dc5d7f01e
149 changed files with 460 additions and 506 deletions

View file

@ -16,13 +16,13 @@ import net.psforever.packet.game.{ObjectCreateMessage, PlayerStateMessageUpstrea
import net.psforever.types._ import net.psforever.types._
import net.psforever.services.{RemoverActor, Service, ServiceManager} import net.psforever.services.{RemoverActor, Service, ServiceManager}
import net.psforever.services.avatar._ import net.psforever.services.avatar._
import net.psforever.services.base.messages.{ChangeAmmo, ChangeFireState_Start, ChangeFireState_Stop, ObjectDelete, PlanetsideAttribute, WeaponDryFire} import net.psforever.services.base.message.{ChangeAmmo, ChangeFireState_Start, ChangeFireState_Stop, ConcealPlayer, ObjectDelete, PlanetsideAttribute, ReloadTool, WeaponDryFire}
class AvatarService1Test extends ActorTest { class AvatarService1Test extends ActorTest {
"AvatarService" should { "AvatarService" should {
"construct" in { "construct" in {
ServiceManager.boot(system) ServiceManager.boot(system)
system.actorOf(Props(classOf[AvatarService], Zone.Nowhere), AvatarServiceTest.TestName) system.actorOf(Props(classOf[AvatarService]), AvatarServiceTest.TestName)
assert(true) assert(true)
} }
} }
@ -32,7 +32,7 @@ class AvatarService2Test extends ActorTest {
"AvatarService" should { "AvatarService" should {
"subscribe" in { "subscribe" in {
ServiceManager.boot(system) ServiceManager.boot(system)
val service = system.actorOf(Props(classOf[AvatarService], Zone.Nowhere), AvatarServiceTest.TestName) val service = system.actorOf(Props(classOf[AvatarService]), AvatarServiceTest.TestName)
service ! Service.Join("test") service ! Service.Join("test")
assert(true) assert(true)
} }
@ -43,7 +43,7 @@ class AvatarService3Test extends ActorTest {
"AvatarService" should { "AvatarService" should {
ServiceManager.boot(system) ServiceManager.boot(system)
"subscribe to a specific channel" in { "subscribe to a specific channel" in {
val service = system.actorOf(Props(classOf[AvatarService], Zone.Nowhere), AvatarServiceTest.TestName) val service = system.actorOf(Props(classOf[AvatarService]), AvatarServiceTest.TestName)
service ! Service.Join("test") service ! Service.Join("test")
service ! Service.Leave() service ! Service.Leave()
assert(true) assert(true)
@ -55,7 +55,7 @@ class AvatarService4Test extends ActorTest {
"AvatarService" should { "AvatarService" should {
"subscribe" in { "subscribe" in {
ServiceManager.boot(system) ServiceManager.boot(system)
val service = system.actorOf(Props(classOf[AvatarService], Zone.Nowhere), AvatarServiceTest.TestName) val service = system.actorOf(Props(classOf[AvatarService]), AvatarServiceTest.TestName)
service ! Service.Join("test") service ! Service.Join("test")
service ! Service.LeaveAll() service ! Service.LeaveAll()
assert(true) assert(true)
@ -67,7 +67,7 @@ class AvatarService5Test extends ActorTest {
"AvatarService" should { "AvatarService" should {
"pass an unhandled message" in { "pass an unhandled message" in {
ServiceManager.boot(system) ServiceManager.boot(system)
val service = system.actorOf(Props(classOf[AvatarService], Zone.Nowhere), AvatarServiceTest.TestName) val service = system.actorOf(Props(classOf[AvatarService]), AvatarServiceTest.TestName)
service ! Service.Join("test") service ! Service.Join("test")
service ! "hello" service ! "hello"
expectNoMessage() expectNoMessage()
@ -79,7 +79,7 @@ class ArmorChangedTest extends ActorTest {
"AvatarService" should { "AvatarService" should {
"pass ArmorChanged" in { "pass ArmorChanged" in {
ServiceManager.boot(system) ServiceManager.boot(system)
val service = system.actorOf(Props(classOf[AvatarService], Zone.Nowhere), AvatarServiceTest.TestName) val service = system.actorOf(Props(classOf[AvatarService]), AvatarServiceTest.TestName)
service ! Service.Join("test") service ! Service.Join("test")
service ! AvatarServiceMessage("test", PlanetSideGUID(10), AvatarAction.ArmorChanged(ExoSuitType.Reinforced, 0)) service ! AvatarServiceMessage("test", PlanetSideGUID(10), AvatarAction.ArmorChanged(ExoSuitType.Reinforced, 0))
expectMsg( expectMsg(
@ -97,17 +97,17 @@ class ConcealPlayerTest extends ActorTest {
"AvatarService" should { "AvatarService" should {
"pass ConcealPlayer" in { "pass ConcealPlayer" in {
ServiceManager.boot(system) ServiceManager.boot(system)
val service = system.actorOf(Props(classOf[AvatarService], Zone.Nowhere), AvatarServiceTest.TestName) val service = system.actorOf(Props(classOf[AvatarService]), AvatarServiceTest.TestName)
service ! Service.Join("test") service ! Service.Join("test")
service ! AvatarServiceMessage("test", AvatarAction.ConcealPlayer(PlanetSideGUID(10))) service ! AvatarServiceMessage("test", ConcealPlayer(PlanetSideGUID(10)))
expectMsg(AvatarServiceResponse("/test/Avatar", PlanetSideGUID(10), AvatarAction.ConcealPlayer(PlanetSideGUID(10)))) expectMsg(AvatarServiceResponse("/test/Avatar", PlanetSideGUID(10), ConcealPlayer(PlanetSideGUID(10))))
} }
} }
} }
class EquipmentInHandTest extends ActorTest { class EquipmentInHandTest extends ActorTest {
ServiceManager.boot(system) ServiceManager.boot(system)
val service = system.actorOf(Props(classOf[AvatarService], Zone.Nowhere), "release-test-service") val service = system.actorOf(Props(classOf[AvatarService]), "release-test-service")
val toolDef = GlobalDefinitions.beamer val toolDef = GlobalDefinitions.beamer
val tool = Tool(toolDef) val tool = Tool(toolDef)
tool.GUID = PlanetSideGUID(40) tool.GUID = PlanetSideGUID(40)
@ -134,7 +134,7 @@ class EquipmentInHandTest extends ActorTest {
class DroptItemTest extends ActorTest { class DroptItemTest extends ActorTest {
ServiceManager.boot(system) ServiceManager.boot(system)
val service = system.actorOf(Props(classOf[AvatarService], Zone.Nowhere), "release-test-service") val service = system.actorOf(Props(classOf[AvatarService]), "release-test-service")
val toolDef = GlobalDefinitions.beamer val toolDef = GlobalDefinitions.beamer
val tool = Tool(toolDef) val tool = Tool(toolDef)
tool.Position = Vector3(1, 2, 3) tool.Position = Vector3(1, 2, 3)
@ -173,7 +173,7 @@ class LoadPlayerTest extends ActorTest {
"AvatarService" should { "AvatarService" should {
"pass LoadPlayer" in { "pass LoadPlayer" in {
ServiceManager.boot(system) ServiceManager.boot(system)
val service = system.actorOf(Props(classOf[AvatarService], Zone.Nowhere), AvatarServiceTest.TestName) val service = system.actorOf(Props(classOf[AvatarService]), AvatarServiceTest.TestName)
service ! Service.Join("test") service ! Service.Join("test")
//no parent data //no parent data
service ! AvatarServiceMessage( service ! AvatarServiceMessage(
@ -197,7 +197,7 @@ class ObjectDeleteTest extends ActorTest {
"AvatarService" should { "AvatarService" should {
"pass ObjectDelete" in { "pass ObjectDelete" in {
ServiceManager.boot(system) ServiceManager.boot(system)
val service = system.actorOf(Props(classOf[AvatarService], Zone.Nowhere), AvatarServiceTest.TestName) val service = system.actorOf(Props(classOf[AvatarService]), AvatarServiceTest.TestName)
service ! Service.Join("test") service ! Service.Join("test")
service ! AvatarServiceMessage("test", PlanetSideGUID(10), ObjectDelete(PlanetSideGUID(11))) service ! AvatarServiceMessage("test", PlanetSideGUID(10), ObjectDelete(PlanetSideGUID(11)))
expectMsg( expectMsg(
@ -216,7 +216,7 @@ class ObjectHeldTest extends ActorTest {
"AvatarService" should { "AvatarService" should {
"pass ObjectHeld" in { "pass ObjectHeld" in {
ServiceManager.boot(system) ServiceManager.boot(system)
val service = system.actorOf(Props(classOf[AvatarService], Zone.Nowhere), AvatarServiceTest.TestName) val service = system.actorOf(Props(classOf[AvatarService]), AvatarServiceTest.TestName)
service ! Service.Join("test") service ! Service.Join("test")
service ! AvatarServiceMessage("test", PlanetSideGUID(10), AvatarAction.ObjectHeld(1, 2)) service ! AvatarServiceMessage("test", PlanetSideGUID(10), AvatarAction.ObjectHeld(1, 2))
expectMsg(AvatarServiceResponse("/test/Avatar", PlanetSideGUID(10), AvatarAction.ObjectHeld(1, 2))) expectMsg(AvatarServiceResponse("/test/Avatar", PlanetSideGUID(10), AvatarAction.ObjectHeld(1, 2)))
@ -228,7 +228,7 @@ class PutDownFDUTest extends ActorTest {
"AvatarService" should { "AvatarService" should {
"pass PutDownFDU" in { "pass PutDownFDU" in {
ServiceManager.boot(system) ServiceManager.boot(system)
val service = system.actorOf(Props(classOf[AvatarService], Zone.Nowhere), AvatarServiceTest.TestName) val service = system.actorOf(Props(classOf[AvatarService]), AvatarServiceTest.TestName)
service ! Service.Join("test") service ! Service.Join("test")
service ! AvatarServiceMessage("test", AvatarAction.PutDownFDU(PlanetSideGUID(10))) service ! AvatarServiceMessage("test", AvatarAction.PutDownFDU(PlanetSideGUID(10)))
expectMsg( expectMsg(
@ -242,7 +242,7 @@ class PlanetsideAttributeTest extends ActorTest {
"AvatarService" should { "AvatarService" should {
"pass PlanetsideAttribute" in { "pass PlanetsideAttribute" in {
ServiceManager.boot(system) ServiceManager.boot(system)
val service = system.actorOf(Props(classOf[AvatarService], Zone.Nowhere), AvatarServiceTest.TestName) val service = system.actorOf(Props(classOf[AvatarService]), AvatarServiceTest.TestName)
service ! Service.Join("test") service ! Service.Join("test")
service ! AvatarServiceMessage("test", PlanetSideGUID(10), PlanetsideAttribute(PlanetSideGUID(10), 5, 1200L)) service ! AvatarServiceMessage("test", PlanetSideGUID(10), PlanetsideAttribute(PlanetSideGUID(10), 5, 1200L))
expectMsg(AvatarServiceResponse("/test/Avatar", PlanetSideGUID(10), PlanetsideAttribute(PlanetSideGUID(10), 5, 1200L))) expectMsg(AvatarServiceResponse("/test/Avatar", PlanetSideGUID(10), PlanetsideAttribute(PlanetSideGUID(10), 5, 1200L)))
@ -271,7 +271,7 @@ class PlayerStateTest extends ActorTest {
"AvatarService" should { "AvatarService" should {
"pass PlayerState" in { "pass PlayerState" in {
ServiceManager.boot(system) ServiceManager.boot(system)
val service = system.actorOf(Props(classOf[AvatarService], Zone.Nowhere), AvatarServiceTest.TestName) val service = system.actorOf(Props(classOf[AvatarService]), AvatarServiceTest.TestName)
service ! Service.Join("test") service ! Service.Join("test")
service ! AvatarServiceMessage( service ! AvatarServiceMessage(
"test", "test",
@ -322,7 +322,7 @@ class PickupItemTest extends ActorTest {
"pass PickUpItem" in { "pass PickUpItem" in {
ServiceManager.boot(system) ServiceManager.boot(system)
val service = system.actorOf(Props(classOf[AvatarService], Zone.Nowhere), AvatarServiceTest.TestName) val service = system.actorOf(Props(classOf[AvatarService]), AvatarServiceTest.TestName)
service ! Service.Join("test") service ! Service.Join("test")
service ! PickupItemMessage("test", AvatarAction.PickupItem(tool), Zone.Nowhere) service ! PickupItemMessage("test", AvatarAction.PickupItem(tool), Zone.Nowhere)
expectMsg(AvatarServiceResponse("/test/Avatar", PlanetSideGUID(10), ObjectDelete(tool.GUID, 0))) expectMsg(AvatarServiceResponse("/test/Avatar", PlanetSideGUID(10), ObjectDelete(tool.GUID, 0)))
@ -333,10 +333,10 @@ class ReloadTest extends ActorTest {
"AvatarService" should { "AvatarService" should {
"pass Reload" in { "pass Reload" in {
ServiceManager.boot(system) ServiceManager.boot(system)
val service = system.actorOf(Props(classOf[AvatarService], Zone.Nowhere), AvatarServiceTest.TestName) val service = system.actorOf(Props(classOf[AvatarService]), AvatarServiceTest.TestName)
service ! Service.Join("test") service ! Service.Join("test")
service ! AvatarServiceMessage("test", PlanetSideGUID(10), AvatarAction.Reload(PlanetSideGUID(40))) service ! AvatarServiceMessage("test", PlanetSideGUID(10), ReloadTool(PlanetSideGUID(40)))
expectMsg(AvatarServiceResponse("/test/Avatar", PlanetSideGUID(10), AvatarAction.Reload(PlanetSideGUID(40)))) expectMsg(AvatarServiceResponse("/test/Avatar", PlanetSideGUID(10), ReloadTool(PlanetSideGUID(40))))
} }
} }
} }
@ -348,7 +348,7 @@ class ChangeAmmoTest extends ActorTest {
"AvatarService" should { "AvatarService" should {
"pass ChangeAmmo" in { "pass ChangeAmmo" in {
ServiceManager.boot(system) ServiceManager.boot(system)
val service = system.actorOf(Props(classOf[AvatarService], Zone.Nowhere), AvatarServiceTest.TestName) val service = system.actorOf(Props(classOf[AvatarService]), AvatarServiceTest.TestName)
service ! Service.Join("test") service ! Service.Join("test")
service ! AvatarServiceMessage( service ! AvatarServiceMessage(
"test", "test",
@ -387,7 +387,7 @@ class ChangeFireModeTest extends ActorTest {
"AvatarService" should { "AvatarService" should {
"pass ChangeFireMode" in { "pass ChangeFireMode" in {
ServiceManager.boot(system) ServiceManager.boot(system)
val service = system.actorOf(Props(classOf[AvatarService], Zone.Nowhere), AvatarServiceTest.TestName) val service = system.actorOf(Props(classOf[AvatarService]), AvatarServiceTest.TestName)
service ! Service.Join("test") service ! Service.Join("test")
service ! AvatarServiceMessage("test", PlanetSideGUID(10), AvatarAction.ChangeFireMode(PlanetSideGUID(40), 0)) service ! AvatarServiceMessage("test", PlanetSideGUID(10), AvatarAction.ChangeFireMode(PlanetSideGUID(40), 0))
expectMsg( expectMsg(
@ -401,7 +401,7 @@ class ChangeFireStateStartTest extends ActorTest {
"AvatarService" should { "AvatarService" should {
"pass ChangeFireState_Start" in { "pass ChangeFireState_Start" in {
ServiceManager.boot(system) ServiceManager.boot(system)
val service = system.actorOf(Props(classOf[AvatarService], Zone.Nowhere), AvatarServiceTest.TestName) val service = system.actorOf(Props(classOf[AvatarService]), AvatarServiceTest.TestName)
service ! Service.Join("test") service ! Service.Join("test")
service ! AvatarServiceMessage("test", PlanetSideGUID(10), ChangeFireState_Start(PlanetSideGUID(40))) service ! AvatarServiceMessage("test", PlanetSideGUID(10), ChangeFireState_Start(PlanetSideGUID(40)))
expectMsg( expectMsg(
@ -419,7 +419,7 @@ class ChangeFireStateStopTest extends ActorTest {
"AvatarService" should { "AvatarService" should {
"pass ChangeFireState_Stop" in { "pass ChangeFireState_Stop" in {
ServiceManager.boot(system) ServiceManager.boot(system)
val service = system.actorOf(Props(classOf[AvatarService], Zone.Nowhere), AvatarServiceTest.TestName) val service = system.actorOf(Props(classOf[AvatarService]), AvatarServiceTest.TestName)
service ! Service.Join("test") service ! Service.Join("test")
service ! AvatarServiceMessage("test", PlanetSideGUID(10), ChangeFireState_Stop(PlanetSideGUID(40))) service ! AvatarServiceMessage("test", PlanetSideGUID(10), ChangeFireState_Stop(PlanetSideGUID(40)))
expectMsg( expectMsg(
@ -437,7 +437,7 @@ class WeaponDryFireTest extends ActorTest {
"AvatarService" should { "AvatarService" should {
"pass WeaponDryFire" in { "pass WeaponDryFire" in {
ServiceManager.boot(system) ServiceManager.boot(system)
val service = system.actorOf(Props(classOf[AvatarService], Zone.Nowhere), AvatarServiceTest.TestName) val service = system.actorOf(Props(classOf[AvatarService]), AvatarServiceTest.TestName)
service ! Service.Join("test") service ! Service.Join("test")
service ! AvatarServiceMessage("test", PlanetSideGUID(10), WeaponDryFire(PlanetSideGUID(40))) service ! AvatarServiceMessage("test", PlanetSideGUID(10), WeaponDryFire(PlanetSideGUID(40)))
expectMsg( expectMsg(
@ -453,7 +453,7 @@ class AvatarStowEquipmentTest extends ActorTest {
"AvatarService" should { "AvatarService" should {
"pass StowEquipment" in { "pass StowEquipment" in {
ServiceManager.boot(system) ServiceManager.boot(system)
val service = system.actorOf(Props(classOf[AvatarService], Zone.Nowhere), AvatarServiceTest.TestName) val service = system.actorOf(Props(classOf[AvatarService]), AvatarServiceTest.TestName)
service ! Service.Join("test") service ! Service.Join("test")
service ! AvatarServiceMessage( service ! AvatarServiceMessage(
"test", "test",

View file

@ -49,7 +49,7 @@ import net.psforever.objects.vital.{DamagingActivity, HealFromImplant, HealingAc
import net.psforever.packet.game.objectcreate.{BasicCharacterData, ObjectClass, RibbonBars} import net.psforever.packet.game.objectcreate.{BasicCharacterData, ObjectClass, RibbonBars}
import net.psforever.packet.game.{Friend => GameFriend, _} import net.psforever.packet.game.{Friend => GameFriend, _}
import net.psforever.persistence import net.psforever.persistence
import net.psforever.services.base.messages.{SendResponse, PlanetsideAttribute} import net.psforever.services.base.message.{SendResponse, PlanetsideAttribute}
import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage} import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage}
import net.psforever.types.{ import net.psforever.types.{
CharacterSex, CharacterSex,

View file

@ -18,12 +18,13 @@ import net.psforever.services.CavernRotationService
import net.psforever.services.CavernRotationService.SendCavernRotationUpdates import net.psforever.services.CavernRotationService.SendCavernRotationUpdates
import net.psforever.services.ServiceManager.LookupResult import net.psforever.services.ServiceManager.LookupResult
import net.psforever.services.account.{PlayerToken, ReceiveAccountData} import net.psforever.services.account.{PlayerToken, ReceiveAccountData}
import net.psforever.services.avatar.AvatarServiceResponse import net.psforever.services.avatar.AvatarStamp
import net.psforever.services.base.envelope.{GenericResponseEnvelope, Undelivered}
import net.psforever.services.chat.ChatService import net.psforever.services.chat.ChatService
import net.psforever.services.galaxy.GalaxyServiceResponse import net.psforever.services.galaxy.GalaxyStamp
import net.psforever.services.local.LocalServiceResponse import net.psforever.services.local.LocalStamp
import net.psforever.services.teamwork.SquadServiceResponse import net.psforever.services.teamwork.SquadServiceResponse
import net.psforever.services.vehicle.VehicleServiceResponse import net.psforever.services.vehicle.VehicleStamp
import org.joda.time.LocalDateTime import org.joda.time.LocalDateTime
import org.log4s.MDC import org.log4s.MDC
@ -170,27 +171,32 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con
case packet: PlanetSideGamePacket => case packet: PlanetSideGamePacket =>
handleGamePkt(packet) handleGamePkt(packet)
case AvatarServiceResponse(toChannel, guid, reply) => case SquadServiceResponse(_, excluded, reply) =>
logic.avatarResponse.handle(toChannel, guid, reply) logic.squad.handle(reply, excluded)
case GalaxyServiceResponse(_, reply) => case envelope: GenericResponseEnvelope =>
logic.galaxy.handle(reply) val GenericResponseEnvelope(toChannel, guid, reply) = envelope
envelope.stamp match {
case LocalServiceResponse(toChannel, guid, reply) => case AvatarStamp =>
logic.local.handle(toChannel, guid, reply) logic.avatarResponse.handle(toChannel, guid, reply)
case LocalStamp =>
logic.local.handle(toChannel, guid, reply)
case VehicleStamp =>
logic.vehicleResponse.handle(toChannel, guid, reply)
case GalaxyStamp =>
logic.galaxy.handle(reply)
case Undelivered =>
log.error(s"received a message's response that was not delivered by an event system - $reply")
case unknownStamp =>
log.error(s"received a message's response from an unknown event system - stamp: $unknownStamp")
}
case Mountable.MountMessages(tplayer, reply) => case Mountable.MountMessages(tplayer, reply) =>
logic.mountResponse.handle(tplayer, reply) logic.mountResponse.handle(tplayer, reply)
case SquadServiceResponse(_, excluded, response) =>
logic.squad.handle(response, excluded)
case Terminal.TerminalMessage(tplayer, msg, order) => case Terminal.TerminalMessage(tplayer, msg, order) =>
logic.terminals.handle(tplayer, msg, order) logic.terminals.handle(tplayer, msg, order)
case VehicleServiceResponse(toChannel, guid, reply) =>
logic.vehicleResponse.handle(toChannel, guid, reply)
case ChatService.MessageResponse(fromSession, message, _) => case ChatService.MessageResponse(fromSession, message, _) =>
logic.chat.handleIncomingMessage(message, fromSession) logic.chat.handleIncomingMessage(message, fromSession)

View file

@ -13,8 +13,7 @@ import net.psforever.objects.serverobject.mount.Mountable
import net.psforever.objects.vital.RevivingActivity import net.psforever.objects.vital.RevivingActivity
import net.psforever.packet.game.{AvatarImplantMessage, CreateShortcutMessage, HitHint, ImplantAction} import net.psforever.packet.game.{AvatarImplantMessage, CreateShortcutMessage, HitHint, ImplantAction}
import net.psforever.services.avatar.{AvatarAction, AvatarServiceResponse} import net.psforever.services.avatar.{AvatarAction, AvatarServiceResponse}
import net.psforever.services.base.EventResponse import net.psforever.services.base.message.{ChangeAmmo, ChangeFireState_Start, ChangeFireState_Stop, ConcealPlayer, EventResponse, GenericObjectAction, HintsAtAttacker, ObjectDelete, PlanetsideAttribute, ReloadTool, SendResponse, SetEmpire, WeaponDryFire}
import net.psforever.services.base.messages.{ChangeAmmo, ChangeFireState_Start, ChangeFireState_Stop, GenericObjectAction, HintsAtAttacker, ObjectDelete, PlanetsideAttribute, ReloadTool, SendResponse, SetEmpire, WeaponDryFire}
import net.psforever.types.ImplantType import net.psforever.types.ImplantType
// //
@ -430,9 +429,6 @@ class AvatarHandlerLogic(val ops: SessionAvatarHandlers, implicit val context: A
case SendResponse(msgs) => case SendResponse(msgs) =>
msgs.foreach(sendResponse) msgs.foreach(sendResponse)
case AvatarAction.SendResponseTargeted(targetGuid, msg) if resolvedPlayerGuid == targetGuid =>
sendResponse(msg)
/* common messages (maybe once every respawn) */ /* common messages (maybe once every respawn) */
case ReloadTool(itemGuid) case ReloadTool(itemGuid)
if isNotSameTarget && ops.lastSeenStreamMessage.get(guid.guid).exists { _.visible } => if isNotSameTarget && ops.lastSeenStreamMessage.get(guid.guid).exists { _.visible } =>
@ -505,7 +501,7 @@ class AvatarHandlerLogic(val ops: SessionAvatarHandlers, implicit val context: A
case AvatarAction.ChangeFireMode(itemGuid, mode) if isNotSameTarget => case AvatarAction.ChangeFireMode(itemGuid, mode) if isNotSameTarget =>
sendResponse(ChangeFireModeMessage(itemGuid, mode)) sendResponse(ChangeFireModeMessage(itemGuid, mode))
case AvatarAction.ConcealPlayer(_) => case ConcealPlayer(_) =>
sendResponse(GenericObjectActionMessage(guid, code=9)) sendResponse(GenericObjectActionMessage(guid, code=9))
case AvatarAction.EnvironmentalDamage(_, _, _) => case AvatarAction.EnvironmentalDamage(_, _, _) =>

View file

@ -17,7 +17,7 @@ import net.psforever.objects.zones.Zone
import net.psforever.packet.game.{ChatMsg, SetChatFilterMessage} import net.psforever.packet.game.{ChatMsg, SetChatFilterMessage}
import net.psforever.services.Service import net.psforever.services.Service
import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage} import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage}
import net.psforever.services.base.messages.{ObjectDelete, SetEmpire} import net.psforever.services.base.message.{ObjectDelete, SetEmpire}
import net.psforever.services.chat.{ChatChannel, DefaultChannel, SpectatorChannel, SquadChannel} import net.psforever.services.chat.{ChatChannel, DefaultChannel, SpectatorChannel, SquadChannel}
import net.psforever.types.ChatMessageType.{CMT_TOGGLESPECTATORMODE, CMT_TOGGLE_GM} import net.psforever.types.ChatMessageType.{CMT_TOGGLESPECTATORMODE, CMT_TOGGLE_GM}
import net.psforever.types.{ChatMessageType, PlanetSideEmpire} import net.psforever.types.{ChatMessageType, PlanetSideEmpire}

View file

@ -11,7 +11,7 @@ import net.psforever.objects.zones.Zone
import net.psforever.packet.game.{ChatMsg, ObjectCreateDetailedMessage, PlanetsideAttributeMessage} import net.psforever.packet.game.{ChatMsg, ObjectCreateDetailedMessage, PlanetsideAttributeMessage}
import net.psforever.packet.game.objectcreate.RibbonBars import net.psforever.packet.game.objectcreate.RibbonBars
import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage} import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage}
import net.psforever.services.base.messages.PlanetsideAttribute import net.psforever.services.base.message.PlanetsideAttribute
import net.psforever.services.chat.{CustomerServiceChannel, SpectatorChannel} import net.psforever.services.chat.{CustomerServiceChannel, SpectatorChannel}
import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage} import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage}
import net.psforever.types.{ChatMessageType, MeritCommendation, PlanetSideGUID} import net.psforever.types.{ChatMessageType, MeritCommendation, PlanetSideGUID}

View file

@ -35,7 +35,7 @@ import net.psforever.packet.game.OutfitEventAction.{Initial, OutfitInfo, OutfitR
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.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.RemoverActor
import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage, CorpseEnvelope} import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage, CorpseEnvelope}
import net.psforever.services.base.messages.PlanetsideAttribute import net.psforever.services.base.message.PlanetsideAttribute
import net.psforever.types.{CapacitorStateType, ChatMessageType, Cosmetic, ExoSuitType, PlanetSideEmpire, PlanetSideGUID, Vector3} import net.psforever.types.{CapacitorStateType, ChatMessageType, Cosmetic, ExoSuitType, PlanetSideEmpire, PlanetSideGUID, Vector3}
import scala.concurrent.duration._ import scala.concurrent.duration._

View file

@ -15,7 +15,7 @@ import net.psforever.objects.serverobject.turret.{FacilityTurret, WeaponTurret}
import net.psforever.objects.vehicles.AccessPermissionGroup import net.psforever.objects.vehicles.AccessPermissionGroup
import net.psforever.objects.vital.InGameHistory 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.packet.game.{ChatMsg, DelayedPathMountMsg, DismountVehicleCargoMsg, DismountVehicleMsg, GenericObjectActionMessage, MountVehicleCargoMsg, MountVehicleMsg, ObjectDetachMessage, PlanetsideAttributeMessage, PlayerStasisMessage, PlayerStateShiftMessage, ShiftState}
import net.psforever.services.base.messages.{SendResponse, SetEmpire} import net.psforever.services.base.message.{SendResponse, SetEmpire}
import net.psforever.services.local.LocalServiceMessage import net.psforever.services.local.LocalServiceMessage
import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage} import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage}
import net.psforever.types.{BailType, ChatMessageType, DriveState, PlanetSideGUID, Vector3} import net.psforever.types.{BailType, ChatMessageType, DriveState, PlanetSideGUID, Vector3}

View file

@ -8,7 +8,7 @@ import net.psforever.objects.{Player, Session, Vehicle}
import net.psforever.objects.zones.Zone import net.psforever.objects.zones.Zone
import net.psforever.packet.PlanetSidePacket import net.psforever.packet.PlanetSidePacket
import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage} import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage}
import net.psforever.services.base.messages.ObjectDelete import net.psforever.services.base.message.ObjectDelete
import net.psforever.services.chat.SpectatorChannel import net.psforever.services.chat.SpectatorChannel
import net.psforever.services.teamwork.{SquadAction, SquadServiceMessage} import net.psforever.services.teamwork.{SquadAction, SquadServiceMessage}
import net.psforever.types.{ChatMessageType, SquadRequestType} import net.psforever.types.{ChatMessageType, SquadRequestType}

View file

@ -14,7 +14,7 @@ import net.psforever.objects.zones.interaction.InteractsWithZone
import net.psforever.packet.game.{ChildObjectStateMessage, DeployRequestMessage, FrameVehicleStateMessage, PlanetsideAttributeMessage, VehicleStateMessage, VehicleSubStateMessage} import net.psforever.packet.game.{ChildObjectStateMessage, DeployRequestMessage, FrameVehicleStateMessage, PlanetsideAttributeMessage, VehicleStateMessage, VehicleSubStateMessage}
import net.psforever.services.avatar.AvatarServiceMessage import net.psforever.services.avatar.AvatarServiceMessage
import net.psforever.services.base.CachedMessage import net.psforever.services.base.CachedMessage
import net.psforever.services.base.messages.PlanetsideAttribute import net.psforever.services.base.message.PlanetsideAttribute
import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage} import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage}
import net.psforever.types.{DriveState, Vector3} import net.psforever.types.{DriveState, Vector3}

View file

@ -13,8 +13,7 @@ import net.psforever.objects.vital.RevivingActivity
import net.psforever.objects.vital.interaction.Adversarial import net.psforever.objects.vital.interaction.Adversarial
import net.psforever.packet.game.{AvatarImplantMessage, CreateShortcutMessage, ImplantAction, PlanetsideStringAttributeMessage} import net.psforever.packet.game.{AvatarImplantMessage, CreateShortcutMessage, ImplantAction, PlanetsideStringAttributeMessage}
import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage} import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage}
import net.psforever.services.base.EventResponse import net.psforever.services.base.message.{ChangeAmmo, ChangeFireState_Start, ChangeFireState_Stop, ConcealPlayer, EventResponse, GenericObjectAction, HintsAtAttacker, ObjectDelete, PlanetsideAttribute, ReloadTool, SendResponse, SetEmpire, WeaponDryFire}
import net.psforever.services.base.messages.{ChangeAmmo, ChangeFireState_Start, ChangeFireState_Stop, GenericObjectAction, HintsAtAttacker, ObjectDelete, PlanetsideAttribute, ReloadTool, SendResponse, SetEmpire, WeaponDryFire}
import net.psforever.types.ImplantType import net.psforever.types.ImplantType
import scala.concurrent.duration._ import scala.concurrent.duration._
@ -484,9 +483,6 @@ class AvatarHandlerLogic(val ops: SessionAvatarHandlers, implicit val context: A
case SendResponse(msgs) => case SendResponse(msgs) =>
msgs.foreach(sendResponse) msgs.foreach(sendResponse)
case AvatarAction.SendResponseTargeted(targetGuid, msg) if resolvedPlayerGuid == targetGuid =>
sendResponse(msg)
/* common messages (maybe once every respawn) */ /* common messages (maybe once every respawn) */
case ReloadTool(itemGuid) case ReloadTool(itemGuid)
if isNotSameTarget && ops.lastSeenStreamMessage.get(guid.guid).exists { _.visible } => if isNotSameTarget && ops.lastSeenStreamMessage.get(guid.guid).exists { _.visible } =>
@ -613,7 +609,7 @@ class AvatarHandlerLogic(val ops: SessionAvatarHandlers, implicit val context: A
case AvatarAction.ChangeFireMode(itemGuid, mode) if isNotSameTarget => case AvatarAction.ChangeFireMode(itemGuid, mode) if isNotSameTarget =>
sendResponse(ChangeFireModeMessage(itemGuid, mode)) sendResponse(ChangeFireModeMessage(itemGuid, mode))
case AvatarAction.ConcealPlayer(_) => case ConcealPlayer(_) =>
sendResponse(GenericObjectActionMessage(guid, code=9)) sendResponse(GenericObjectActionMessage(guid, code=9))
case AvatarAction.EnvironmentalDamage(_, _, _) => case AvatarAction.EnvironmentalDamage(_, _, _) =>

View file

@ -5,8 +5,7 @@ import akka.actor.{ActorContext, ActorRef, typed}
import net.psforever.actors.session.AvatarActor import net.psforever.actors.session.AvatarActor
import net.psforever.actors.session.support.{GalaxyHandlerFunctions, SessionData, SessionGalaxyHandlers} import net.psforever.actors.session.support.{GalaxyHandlerFunctions, SessionData, SessionGalaxyHandlers}
import net.psforever.packet.game.{BroadcastWarpgateUpdateMessage, FriendsResponse, HotSpotUpdateMessage, ZoneInfoMessage, ZonePopulationUpdateMessage, HotSpotInfo => PacketHotSpotInfo} import net.psforever.packet.game.{BroadcastWarpgateUpdateMessage, FriendsResponse, HotSpotUpdateMessage, ZoneInfoMessage, ZonePopulationUpdateMessage, HotSpotInfo => PacketHotSpotInfo}
import net.psforever.services.base.EventResponse import net.psforever.services.base.message.{EventResponse, SendResponse}
import net.psforever.services.base.messages.SendResponse
import net.psforever.services.galaxy.{GalaxyAction, GalaxyServiceMessage} import net.psforever.services.galaxy.{GalaxyAction, GalaxyServiceMessage}
import net.psforever.types.{MemberAction, PlanetSideEmpire} import net.psforever.types.{MemberAction, PlanetSideEmpire}

View file

@ -44,7 +44,7 @@ import net.psforever.packet.game.{ActionCancelMessage, ActionResultMessage, Avat
import net.psforever.services.account.{AccountPersistenceService, RetrieveAccountData} import net.psforever.services.account.{AccountPersistenceService, RetrieveAccountData}
import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage} import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage}
import net.psforever.services.base.CachedMessage import net.psforever.services.base.CachedMessage
import net.psforever.services.base.messages.PlanetsideAttribute import net.psforever.services.base.message.PlanetsideAttribute
import net.psforever.services.local.support.CaptureFlagManager import net.psforever.services.local.support.CaptureFlagManager
import net.psforever.types.{CapacitorStateType, ChatMessageType, Cosmetic, ExoSuitType, ImplantType, PlanetSideEmpire, PlanetSideGUID, Vector3} import net.psforever.types.{CapacitorStateType, ChatMessageType, Cosmetic, ExoSuitType, ImplantType, PlanetSideEmpire, PlanetSideGUID, Vector3}
import net.psforever.util.Config import net.psforever.util.Config

View file

@ -9,8 +9,7 @@ import net.psforever.objects.serverobject.doors.Door
import net.psforever.objects.vehicles.MountableWeapons import net.psforever.objects.vehicles.MountableWeapons
import net.psforever.objects.{BoomerDeployable, ExplosiveDeployable, TelepadDeployable, Tool, TurretDeployable} import net.psforever.objects.{BoomerDeployable, ExplosiveDeployable, TelepadDeployable, Tool, TurretDeployable}
import net.psforever.packet.game.{ChatMsg, DeployableObjectsInfoMessage, GenericActionMessage, GenericObjectActionMessage, GenericObjectStateMsg, HackMessage, HackState, HackState1, InventoryStateMessage, ObjectAttachMessage, ObjectCreateMessage, ObjectDeleteMessage, ObjectDetachMessage, OrbitalShuttleTimeMsg, PadAndShuttlePair, PlanetsideAttributeMessage, ProximityTerminalUseMessage, SetEmpireMessage, TriggerEffectMessage, TriggerSoundMessage, TriggeredSound, VehicleStateMessage} import net.psforever.packet.game.{ChatMsg, DeployableObjectsInfoMessage, GenericActionMessage, GenericObjectActionMessage, GenericObjectStateMsg, HackMessage, HackState, HackState1, InventoryStateMessage, ObjectAttachMessage, ObjectCreateMessage, ObjectDeleteMessage, ObjectDetachMessage, OrbitalShuttleTimeMsg, PadAndShuttlePair, PlanetsideAttributeMessage, ProximityTerminalUseMessage, SetEmpireMessage, TriggerEffectMessage, TriggerSoundMessage, TriggeredSound, VehicleStateMessage}
import net.psforever.services.base.EventResponse import net.psforever.services.base.message.{EventResponse, GenericObjectAction, ObjectDelete, PlanetsideAttribute, SendResponse, SetEmpire}
import net.psforever.services.base.messages.{GenericObjectAction, ObjectDelete, PlanetsideAttribute, SendResponse, SetEmpire}
import net.psforever.services.{InterstellarClusterService, Service} import net.psforever.services.{InterstellarClusterService, Service}
import net.psforever.services.local.LocalAction import net.psforever.services.local.LocalAction
import net.psforever.types.{ChatMessageType, PlanetSideGUID, SpawnGroup} import net.psforever.types.{ChatMessageType, PlanetSideGUID, SpawnGroup}
@ -154,9 +153,6 @@ class LocalHandlerLogic(val ops: SessionLocalHandlers, implicit val context: Act
case LocalAction.GenericActionMessage(actionNumber) => case LocalAction.GenericActionMessage(actionNumber) =>
sendResponse(GenericActionMessage(actionNumber)) sendResponse(GenericActionMessage(actionNumber))
case LocalAction.ChatMessage(msg) =>
sendResponse(msg)
case LocalAction.LluSpawned(llu) => case LocalAction.LluSpawned(llu) =>
// Create LLU on client // Create LLU on client
sendResponse(ObjectCreateMessage( sendResponse(ObjectCreateMessage(

View file

@ -16,7 +16,7 @@ import net.psforever.objects.serverobject.turret.{FacilityTurret, WeaponTurret}
import net.psforever.objects.vehicles.AccessPermissionGroup import net.psforever.objects.vehicles.AccessPermissionGroup
import net.psforever.objects.vital.InGameHistory 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.packet.game.{ChatMsg, DelayedPathMountMsg, DismountVehicleCargoMsg, DismountVehicleMsg, GenericObjectActionMessage, MountVehicleCargoMsg, MountVehicleMsg, ObjectDetachMessage, PlanetsideAttributeMessage, PlayerStasisMessage, PlayerStateShiftMessage, ShiftState}
import net.psforever.services.base.messages.{SendResponse, SetEmpire} import net.psforever.services.base.message.{SendResponse, SetEmpire}
import net.psforever.services.local.LocalServiceMessage import net.psforever.services.local.LocalServiceMessage
import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage} import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage}
import net.psforever.types.{BailType, ChatMessageType, DriveState, PlanetSideGUID, Vector3} import net.psforever.types.{BailType, ChatMessageType, DriveState, PlanetSideGUID, Vector3}

View file

@ -14,8 +14,7 @@ import net.psforever.objects.serverobject.pad.VehicleSpawnPad
import net.psforever.packet.game.objectcreate.ObjectCreateMessageParent import net.psforever.packet.game.objectcreate.ObjectCreateMessageParent
import net.psforever.packet.game.{ChangeAmmoMessage, ChangeFireStateMessage_Start, ChangeFireStateMessage_Stop, ChatMsg, ChildObjectStateMessage, DeadState, DeployRequestMessage, DismountVehicleMsg, FrameVehicleStateMessage, GenericObjectActionMessage, HitHint, InventoryStateMessage, ObjectAttachMessage, ObjectCreateDetailedMessage, ObjectCreateMessage, ObjectDeleteMessage, ObjectDetachMessage, PlanetsideAttributeMessage, ReloadMessage, ServerVehicleOverrideMsg, VehicleStateMessage, WeaponDryFireMessage} import net.psforever.packet.game.{ChangeAmmoMessage, ChangeFireStateMessage_Start, ChangeFireStateMessage_Stop, ChatMsg, ChildObjectStateMessage, DeadState, DeployRequestMessage, DismountVehicleMsg, FrameVehicleStateMessage, GenericObjectActionMessage, HitHint, InventoryStateMessage, ObjectAttachMessage, ObjectCreateDetailedMessage, ObjectCreateMessage, ObjectDeleteMessage, ObjectDetachMessage, PlanetsideAttributeMessage, ReloadMessage, ServerVehicleOverrideMsg, VehicleStateMessage, WeaponDryFireMessage}
import net.psforever.services.Service import net.psforever.services.Service
import net.psforever.services.base.EventResponse import net.psforever.services.base.message.{ChangeAmmo, ChangeFireState_Start, ChangeFireState_Stop, EventResponse, GenericObjectAction, HintsAtAttacker, ObjectDelete, PlanetsideAttribute, ReloadTool, SendResponse, WeaponDryFire}
import net.psforever.services.base.messages.{ChangeAmmo, ChangeFireState_Start, ChangeFireState_Stop, GenericObjectAction, HintsAtAttacker, ObjectDelete, PlanetsideAttribute, ReloadTool, SendResponse, WeaponDryFire}
import net.psforever.services.local.support.CaptureFlagManager import net.psforever.services.local.support.CaptureFlagManager
import net.psforever.services.vehicle.{VehicleAction, VehicleServiceResponse} import net.psforever.services.vehicle.{VehicleAction, VehicleServiceResponse}
import net.psforever.types.{BailType, ChatMessageType, PlanetSideGUID, Vector3} import net.psforever.types.{BailType, ChatMessageType, PlanetSideGUID, Vector3}

View file

@ -8,8 +8,7 @@ import net.psforever.objects.Players
import net.psforever.objects.avatar.scoring.Kill import net.psforever.objects.avatar.scoring.Kill
import net.psforever.objects.sourcing.PlayerSource import net.psforever.objects.sourcing.PlayerSource
import net.psforever.packet.game.{AvatarImplantMessage, ImplantAction} import net.psforever.packet.game.{AvatarImplantMessage, ImplantAction}
import net.psforever.services.base.EventResponse import net.psforever.services.base.message.{ChangeAmmo, ChangeFireState_Start, ChangeFireState_Stop, ConcealPlayer, EventResponse, GenericObjectAction, HintsAtAttacker, ObjectDelete, PlanetsideAttribute, ReloadTool, SendResponse, SetEmpire, WeaponDryFire}
import net.psforever.services.base.messages.{ChangeAmmo, ChangeFireState_Start, ChangeFireState_Stop, GenericObjectAction, HintsAtAttacker, ObjectDelete, PlanetsideAttribute, ReloadTool, SendResponse, SetEmpire, WeaponDryFire}
import scala.concurrent.duration._ import scala.concurrent.duration._
// //
@ -416,9 +415,6 @@ class AvatarHandlerLogic(val ops: SessionAvatarHandlers, implicit val context: A
sendResponse(msg) sendResponse(msg)
} }
case AvatarAction.SendResponseTargeted(targetGuid, msg) if resolvedPlayerGuid == targetGuid =>
sendResponse(msg)
/* common messages (maybe once every respawn) */ /* common messages (maybe once every respawn) */
case ReloadTool(itemGuid) case ReloadTool(itemGuid)
if isNotSameTarget && ops.lastSeenStreamMessage.get(guid.guid).exists { _.visible } => if isNotSameTarget && ops.lastSeenStreamMessage.get(guid.guid).exists { _.visible } =>
@ -504,7 +500,7 @@ class AvatarHandlerLogic(val ops: SessionAvatarHandlers, implicit val context: A
case AvatarAction.ChangeFireMode(itemGuid, mode) if isNotSameTarget => case AvatarAction.ChangeFireMode(itemGuid, mode) if isNotSameTarget =>
sendResponse(ChangeFireModeMessage(itemGuid, mode)) sendResponse(ChangeFireModeMessage(itemGuid, mode))
case AvatarAction.ConcealPlayer(_) => case ConcealPlayer(_) =>
sendResponse(GenericObjectActionMessage(guid, code=9)) sendResponse(GenericObjectActionMessage(guid, code=9))
case AvatarAction.EnvironmentalDamage(_, _, _) => case AvatarAction.EnvironmentalDamage(_, _, _) =>

View file

@ -18,7 +18,7 @@ import net.psforever.packet.game.{ActionCancelMessage, AvatarFirstTimeEventMessa
import net.psforever.services.account.AccountPersistenceService import net.psforever.services.account.AccountPersistenceService
import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage} import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage}
import net.psforever.services.base.CachedMessage import net.psforever.services.base.CachedMessage
import net.psforever.services.base.messages.PlanetsideAttribute import net.psforever.services.base.message.PlanetsideAttribute
import net.psforever.types.{ExoSuitType, Vector3} import net.psforever.types.{ExoSuitType, Vector3}
import scala.concurrent.duration.DurationInt import scala.concurrent.duration.DurationInt

View file

@ -12,7 +12,7 @@ import net.psforever.objects.serverobject.mount.Mountable
import net.psforever.objects.serverobject.terminals.implant.ImplantTerminalMech import net.psforever.objects.serverobject.terminals.implant.ImplantTerminalMech
import net.psforever.objects.vital.InGameHistory import net.psforever.objects.vital.InGameHistory
import net.psforever.packet.game.{DelayedPathMountMsg, DismountVehicleCargoMsg, DismountVehicleMsg, GenericObjectActionMessage, MountVehicleCargoMsg, MountVehicleMsg, ObjectDetachMessage, PlayerStasisMessage, PlayerStateShiftMessage, ShiftState} import net.psforever.packet.game.{DelayedPathMountMsg, DismountVehicleCargoMsg, DismountVehicleMsg, GenericObjectActionMessage, MountVehicleCargoMsg, MountVehicleMsg, ObjectDetachMessage, PlayerStasisMessage, PlayerStateShiftMessage, ShiftState}
import net.psforever.services.base.messages.SendResponse import net.psforever.services.base.message.SendResponse
import net.psforever.services.local.LocalServiceMessage import net.psforever.services.local.LocalServiceMessage
import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage} import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage}

View file

@ -12,7 +12,7 @@ import net.psforever.packet.game.{DeployableInfo, DeployableObjectsInfoMessage,
import net.psforever.packet.game.objectcreate.{ObjectClass, ObjectCreateMessageParent, RibbonBars} import net.psforever.packet.game.objectcreate.{ObjectClass, ObjectCreateMessageParent, RibbonBars}
import net.psforever.services.Service import net.psforever.services.Service
import net.psforever.services.avatar.AvatarServiceMessage import net.psforever.services.avatar.AvatarServiceMessage
import net.psforever.services.base.messages.ObjectDelete import net.psforever.services.base.message.ObjectDelete
import net.psforever.services.chat.SpectatorChannel import net.psforever.services.chat.SpectatorChannel
import net.psforever.services.teamwork.{SquadAction, SquadServiceMessage} import net.psforever.services.teamwork.{SquadAction, SquadServiceMessage}
import net.psforever.types.{CapacitorStateType, ChatMessageType, ExoSuitType, MeritCommendation, SquadRequestType} import net.psforever.types.{CapacitorStateType, ChatMessageType, ExoSuitType, MeritCommendation, SquadRequestType}

View file

@ -8,8 +8,7 @@ import net.psforever.objects.equipment.Equipment
import net.psforever.objects.serverobject.pad.VehicleSpawnPad import net.psforever.objects.serverobject.pad.VehicleSpawnPad
import net.psforever.packet.game.objectcreate.ObjectCreateMessageParent import net.psforever.packet.game.objectcreate.ObjectCreateMessageParent
import net.psforever.packet.game.{ChangeAmmoMessage, ChangeFireStateMessage_Start, ChangeFireStateMessage_Stop, ChildObjectStateMessage, DeadState, DeployRequestMessage, DismountVehicleMsg, FrameVehicleStateMessage, GenericObjectActionMessage, InventoryStateMessage, ObjectAttachMessage, ObjectCreateDetailedMessage, ObjectCreateMessage, ObjectDeleteMessage, ObjectDetachMessage, PlanetsideAttributeMessage, ReloadMessage, ServerVehicleOverrideMsg, VehicleStateMessage, WeaponDryFireMessage} import net.psforever.packet.game.{ChangeAmmoMessage, ChangeFireStateMessage_Start, ChangeFireStateMessage_Stop, ChildObjectStateMessage, DeadState, DeployRequestMessage, DismountVehicleMsg, FrameVehicleStateMessage, GenericObjectActionMessage, InventoryStateMessage, ObjectAttachMessage, ObjectCreateDetailedMessage, ObjectCreateMessage, ObjectDeleteMessage, ObjectDetachMessage, PlanetsideAttributeMessage, ReloadMessage, ServerVehicleOverrideMsg, VehicleStateMessage, WeaponDryFireMessage}
import net.psforever.services.base.EventResponse import net.psforever.services.base.message.{ChangeAmmo, ChangeFireState_Start, ChangeFireState_Stop, EventResponse, GenericObjectAction, ObjectDelete, PlanetsideAttribute, ReloadTool, SendResponse, WeaponDryFire}
import net.psforever.services.base.messages.{ChangeAmmo, ChangeFireState_Start, ChangeFireState_Stop, GenericObjectAction, ObjectDelete, PlanetsideAttribute, ReloadTool, SendResponse, WeaponDryFire}
import net.psforever.services.vehicle.{VehicleAction, VehicleServiceResponse} import net.psforever.services.vehicle.{VehicleAction, VehicleServiceResponse}
import net.psforever.types.{BailType, PlanetSideGUID, Vector3} import net.psforever.types.{BailType, PlanetSideGUID, Vector3}

View file

@ -19,7 +19,7 @@ import net.psforever.objects.zones.blockmap.BlockMapEntity
import net.psforever.objects.zones.exp.ToDatabase import net.psforever.objects.zones.exp.ToDatabase
import net.psforever.services.RemoverActor import net.psforever.services.RemoverActor
import net.psforever.services.avatar.GroundEnvelope import net.psforever.services.avatar.GroundEnvelope
import net.psforever.services.base.messages.{PlanetsideAttribute, SendResponse} import net.psforever.services.base.message.{PlanetsideAttribute, SendResponse}
import net.psforever.services.local.support.HackCaptureActor import net.psforever.services.local.support.HackCaptureActor
import net.psforever.services.local.{CaptureMessage, LocalAction, LocalServiceMessage} import net.psforever.services.local.{CaptureMessage, LocalAction, LocalServiceMessage}

View file

@ -9,8 +9,7 @@ import net.psforever.packet.game.objectcreate.ConstructorData
import net.psforever.objects.zones.exp import net.psforever.objects.zones.exp
import net.psforever.services.Service import net.psforever.services.Service
import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage, AvatarServiceResponse} import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage, AvatarServiceResponse}
import net.psforever.services.base.EventResponse import net.psforever.services.base.message.{EventResponse, SendResponse}
import net.psforever.services.base.messages.SendResponse
import net.psforever.services.chat.OutfitChannel import net.psforever.services.chat.OutfitChannel
import scala.collection.mutable import scala.collection.mutable

View file

@ -3,7 +3,7 @@ package net.psforever.actors.session.support
import akka.actor.{ActorContext, ActorRef, typed} import akka.actor.{ActorContext, ActorRef, typed}
import net.psforever.packet.game.FriendsResponse import net.psforever.packet.game.FriendsResponse
import net.psforever.services.base.EventResponse import net.psforever.services.base.message.EventResponse
import scala.annotation.unused import scala.annotation.unused
// //

View file

@ -7,7 +7,7 @@ import net.psforever.objects.ce.Deployable
import net.psforever.objects.guid.{GUIDTask, TaskWorkflow} import net.psforever.objects.guid.{GUIDTask, TaskWorkflow}
import net.psforever.objects.serverobject.interior.Sidedness import net.psforever.objects.serverobject.interior.Sidedness
import net.psforever.packet.game.{GenericObjectActionMessage, ObjectDeleteMessage, PlanetsideAttributeMessage, TriggerEffectMessage} import net.psforever.packet.game.{GenericObjectActionMessage, ObjectDeleteMessage, PlanetsideAttributeMessage, TriggerEffectMessage}
import net.psforever.services.base.EventResponse import net.psforever.services.base.message.EventResponse
import net.psforever.types.{PlanetSideGUID, Vector3} import net.psforever.types.{PlanetSideGUID, Vector3}
trait LocalHandlerFunctions extends CommonSessionInterfacingFunctionality { trait LocalHandlerFunctions extends CommonSessionInterfacingFunctionality {

View file

@ -9,7 +9,7 @@ import net.psforever.objects.vehicles.{CargoBehavior, MountableWeapons}
import net.psforever.objects.vital.InGameHistory import net.psforever.objects.vital.InGameHistory
import net.psforever.packet.game.{DismountVehicleCargoMsg, GenericObjectActionMessage, InventoryStateMessage, MountVehicleCargoMsg, MountVehicleMsg, ObjectAttachMessage, ObjectDetachMessage, PlanetsideAttributeMessage} import net.psforever.packet.game.{DismountVehicleCargoMsg, GenericObjectActionMessage, InventoryStateMessage, MountVehicleCargoMsg, MountVehicleMsg, ObjectAttachMessage, ObjectDetachMessage, PlanetsideAttributeMessage}
import net.psforever.services.base.CachedMessage import net.psforever.services.base.CachedMessage
import net.psforever.services.base.messages.SendResponse import net.psforever.services.base.message.SendResponse
import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage} import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage}
import net.psforever.types.{BailType, PlanetSideGUID, Vector3} import net.psforever.types.{BailType, PlanetSideGUID, Vector3}
// //

View file

@ -9,7 +9,7 @@ import net.psforever.packet.game.OutfitEventAction.{Initial, Leaving, OutfitInfo
import net.psforever.packet.game.OutfitMembershipResponse.PacketType.CreateResponse import net.psforever.packet.game.OutfitMembershipResponse.PacketType.CreateResponse
import net.psforever.packet.game._ import net.psforever.packet.game._
import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage} import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage}
import net.psforever.services.base.messages.PlanetsideAttribute import net.psforever.services.base.message.PlanetsideAttribute
import net.psforever.services.chat.OutfitChannel import net.psforever.services.chat.OutfitChannel
import net.psforever.types.ChatMessageType import net.psforever.types.ChatMessageType
import net.psforever.util.Config import net.psforever.util.Config

View file

@ -2,7 +2,7 @@
package net.psforever.actors.session.support package net.psforever.actors.session.support
import akka.actor.{ActorContext, ActorRef, typed} import akka.actor.{ActorContext, ActorRef, typed}
import net.psforever.services.base.messages.PlanetsideAttribute import net.psforever.services.base.message.PlanetsideAttribute
import net.psforever.services.teamwork.SquadServiceResponse import net.psforever.services.teamwork.SquadServiceResponse
import scala.collection.mutable import scala.collection.mutable

View file

@ -5,7 +5,7 @@ import akka.actor.{ActorContext, ActorRef, typed}
import net.psforever.actors.session.AvatarActor import net.psforever.actors.session.AvatarActor
import net.psforever.objects.Vehicle import net.psforever.objects.Vehicle
import net.psforever.packet.game.ChatMsg import net.psforever.packet.game.ChatMsg
import net.psforever.services.base.EventResponse import net.psforever.services.base.message.EventResponse
import net.psforever.types.{ChatMessageType, DriveState, PlanetSideGUID} import net.psforever.types.{ChatMessageType, DriveState, PlanetSideGUID}
trait VehicleHandlerFunctions extends CommonSessionInterfacingFunctionality { trait VehicleHandlerFunctions extends CommonSessionInterfacingFunctionality {

View file

@ -29,7 +29,7 @@ import net.psforever.objects.zones.exp.ToDatabase
import net.psforever.packet.game.UplinkRequest import net.psforever.packet.game.UplinkRequest
import net.psforever.services.Service import net.psforever.services.Service
import net.psforever.services.base.CachedMessage import net.psforever.services.base.CachedMessage
import net.psforever.services.base.messages.{ChangeAmmo, ChangeFireState_Start, ChangeFireState_Stop, ReloadTool, SendResponse, WeaponDryFire} import net.psforever.services.base.message.{ChangeAmmo, ChangeFireState_Start, ChangeFireState_Stop, ReloadTool, SendResponse, WeaponDryFire}
import net.psforever.services.local.LocalServiceMessage import net.psforever.services.local.LocalServiceMessage
import net.psforever.types.{ChatMessageType, PlanetSideEmpire, ValidPlanetSideGUID, Vector3} import net.psforever.types.{ChatMessageType, PlanetSideEmpire, ValidPlanetSideGUID, Vector3}
import net.psforever.util.Config import net.psforever.util.Config

View file

@ -23,7 +23,7 @@ import net.psforever.objects.zones.blockmap.BlockMapEntity
import net.psforever.packet.game.GenericAction.FirstPersonViewWithEffect 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.packet.game.{CampaignStatistic, ChangeFireStateMessage_Start, CloudInfo, GenericActionMessage, GenericObjectActionEnum, HackState7, MailMessage, ObjectDetectedMessage, SessionStatistic, StormInfo, TriggeredSound, TrainingZoneMessage, WeatherMessage}
import net.psforever.services.avatar.{CorpseEnvelope, ReleaseMessage} import net.psforever.services.avatar.{CorpseEnvelope, ReleaseMessage}
import net.psforever.services.base.messages.{GenericObjectAction, ObjectDelete, PlanetsideAttribute, SendResponse} import net.psforever.services.base.message.{GenericObjectAction, ObjectDelete, PlanetsideAttribute, SendResponse}
import net.psforever.services.chat.DefaultChannel import net.psforever.services.chat.DefaultChannel
import scala.concurrent.duration._ import scala.concurrent.duration._

View file

@ -11,7 +11,7 @@ import net.psforever.objects.zones.Zone
import net.psforever.packet.PlanetSideGamePacket import net.psforever.packet.PlanetSideGamePacket
import net.psforever.packet.game.ContinentalLockUpdateMessage import net.psforever.packet.game.ContinentalLockUpdateMessage
import net.psforever.persistence import net.psforever.persistence
import net.psforever.services.base.messages.{SendResponse, SetEmpire} import net.psforever.services.base.message.{SendResponse, SetEmpire}
import net.psforever.services.galaxy.{GalaxyAction, GalaxyServiceMessage} import net.psforever.services.galaxy.{GalaxyAction, GalaxyServiceMessage}
import net.psforever.services.local.LocalServiceMessage import net.psforever.services.local.LocalServiceMessage
import net.psforever.services.{InterstellarClusterService, ServiceManager} import net.psforever.services.{InterstellarClusterService, ServiceManager}

View file

@ -20,7 +20,7 @@ import net.psforever.objects.zones.exp.{ExperienceCalculator, SupportExperienceC
import net.psforever.packet.game.{BuildingInfoUpdateMessage, PlanetsideAttributeMessage} import net.psforever.packet.game.{BuildingInfoUpdateMessage, PlanetsideAttributeMessage}
import net.psforever.util.Database._ import net.psforever.util.Database._
import net.psforever.persistence import net.psforever.persistence
import net.psforever.services.base.messages.SendResponse import net.psforever.services.base.message.SendResponse
import net.psforever.services.local.LocalServiceMessage import net.psforever.services.local.LocalServiceMessage
import scala.collection.mutable import scala.collection.mutable

View file

@ -16,7 +16,7 @@ import net.psforever.objects.sourcing.PlayerSource
import net.psforever.packet.game.PlanetsideAttributeMessage import net.psforever.packet.game.PlanetsideAttributeMessage
import net.psforever.services.InterstellarClusterService import net.psforever.services.InterstellarClusterService
import net.psforever.services.avatar.AvatarServiceMessage import net.psforever.services.avatar.AvatarServiceMessage
import net.psforever.services.base.messages.{GenericObjectAction, PlanetsideAttribute, SendResponse} import net.psforever.services.base.message.{GenericObjectAction, PlanetsideAttribute, SendResponse}
import net.psforever.services.galaxy.{GalaxyAction, GalaxyServiceMessage} import net.psforever.services.galaxy.{GalaxyAction, GalaxyServiceMessage}
import net.psforever.services.local.{CaptureMessage, HackClearMessage, LocalServiceMessage} import net.psforever.services.local.{CaptureMessage, HackClearMessage, LocalServiceMessage}
import net.psforever.services.local.support.{HackCaptureActor, HackClearActor} import net.psforever.services.local.support.{HackCaptureActor, HackClearActor}

View file

@ -16,7 +16,7 @@ import net.psforever.objects.vital.TerminalUsedActivity
import net.psforever.objects.zones.Zone import net.psforever.objects.zones.Zone
import net.psforever.types.{ExoSuitType, PlanetSideGUID, TransactionType, Vector3} import net.psforever.types.{ExoSuitType, PlanetSideGUID, TransactionType, Vector3}
import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage} import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage}
import net.psforever.services.base.messages.ObjectDelete import net.psforever.services.base.message.ObjectDelete
import scala.concurrent.ExecutionContext.Implicits.global import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.Future import scala.concurrent.Future

View file

@ -12,7 +12,7 @@ import net.psforever.objects.vital.etc.TriggerUsedReason
import net.psforever.objects.vital.interaction.DamageInteraction import net.psforever.objects.vital.interaction.DamageInteraction
import net.psforever.objects.zones.Zone import net.psforever.objects.zones.Zone
import net.psforever.services.avatar.AvatarServiceMessage import net.psforever.services.avatar.AvatarServiceMessage
import net.psforever.services.base.messages.ObjectDelete import net.psforever.services.base.message.ObjectDelete
import net.psforever.services.local.{LocalAction, LocalServiceMessage} import net.psforever.services.local.{LocalAction, LocalServiceMessage}
import net.psforever.types.PlanetSideEmpire import net.psforever.types.PlanetSideEmpire

View file

@ -12,7 +12,7 @@ import net.psforever.objects.serverobject.{CommonMessages, PlanetSideServerObjec
import net.psforever.objects.sourcing.{PlayerSource, SourceEntry, TurretSource} import net.psforever.objects.sourcing.{PlayerSource, SourceEntry, TurretSource}
import net.psforever.objects.vital.{DismountingActivity, InGameActivity, MountingActivity, ShieldCharge} import net.psforever.objects.vital.{DismountingActivity, InGameActivity, MountingActivity, ShieldCharge}
import net.psforever.packet.game.HackState1 import net.psforever.packet.game.HackState1
import net.psforever.services.base.messages.PlanetsideAttribute import net.psforever.services.base.message.PlanetsideAttribute
import net.psforever.services.vehicle.VehicleServiceMessage import net.psforever.services.vehicle.VehicleServiceMessage
import scala.annotation.unused import scala.annotation.unused

View file

@ -21,7 +21,7 @@ import net.psforever.packet.game._
import net.psforever.types.{ChatMessageType, ExoSuitType, PlanetSideGUID, Vector3} import net.psforever.types.{ChatMessageType, ExoSuitType, PlanetSideGUID, Vector3}
import net.psforever.services.Service import net.psforever.services.Service
import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage} import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage}
import net.psforever.services.base.messages.{ObjectDelete, SendResponse} import net.psforever.services.base.message.{ObjectDelete, SendResponse}
import net.psforever.services.local.{LocalAction, LocalServiceMessage} import net.psforever.services.local.{LocalAction, LocalServiceMessage}
import scala.annotation.tailrec import scala.annotation.tailrec

View file

@ -13,7 +13,7 @@ import net.psforever.objects.serverobject.repair.RepairableEntity
import net.psforever.objects.vital.SimpleResolutions import net.psforever.objects.vital.SimpleResolutions
import net.psforever.objects.vital.interaction.DamageResult import net.psforever.objects.vital.interaction.DamageResult
import net.psforever.types.{PlanetSideGUID, Vector3} import net.psforever.types.{PlanetSideGUID, Vector3}
import net.psforever.services.base.messages.PlanetsideAttribute import net.psforever.services.base.message.PlanetsideAttribute
import net.psforever.services.local.{LocalAction, LocalServiceMessage} import net.psforever.services.local.{LocalAction, LocalServiceMessage}
import net.psforever.services.vehicle.VehicleServiceMessage import net.psforever.services.vehicle.VehicleServiceMessage

View file

@ -13,7 +13,7 @@ import net.psforever.objects.serverobject.hackable.Hackable
import net.psforever.objects.serverobject.repair.RepairableEntity import net.psforever.objects.serverobject.repair.RepairableEntity
import net.psforever.objects.vital.interaction.DamageResult import net.psforever.objects.vital.interaction.DamageResult
import net.psforever.objects.vital.resolution.ResolutionCalculations import net.psforever.objects.vital.resolution.ResolutionCalculations
import net.psforever.services.base.messages.PlanetsideAttribute import net.psforever.services.base.message.PlanetsideAttribute
import net.psforever.types.PlanetSideGUID import net.psforever.types.PlanetSideGUID
import net.psforever.services.vehicle.VehicleServiceMessage import net.psforever.services.vehicle.VehicleServiceMessage

View file

@ -4,7 +4,7 @@ package net.psforever.objects
import net.psforever.objects.equipment.ChargeFireModeDefinition import net.psforever.objects.equipment.ChargeFireModeDefinition
import net.psforever.packet.game.QuantityUpdateMessage import net.psforever.packet.game.QuantityUpdateMessage
import net.psforever.services.avatar.AvatarServiceMessage import net.psforever.services.avatar.AvatarServiceMessage
import net.psforever.services.base.messages.SendResponse import net.psforever.services.base.message.SendResponse
object Tools { object Tools {
/** /**

View file

@ -14,7 +14,7 @@ import net.psforever.packet.game.{ChatMsg, FrameVehicleStateMessage, GenericObje
import net.psforever.types.{ChatMessageType, DriveState, PlanetSideEmpire, PlanetSideGUID, Vector3} import net.psforever.types.{ChatMessageType, DriveState, PlanetSideEmpire, PlanetSideGUID, Vector3}
import net.psforever.services.Service import net.psforever.services.Service
import net.psforever.services.avatar.AvatarServiceMessage import net.psforever.services.avatar.AvatarServiceMessage
import net.psforever.services.base.messages.{GenericObjectAction, PlanetsideAttribute, SendResponse, SetEmpire} import net.psforever.services.base.message.{GenericObjectAction, PlanetsideAttribute, SendResponse, SetEmpire}
import net.psforever.services.local.{LocalAction, LocalServiceMessage} import net.psforever.services.local.{LocalAction, LocalServiceMessage}
import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage} import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage}

View file

@ -9,7 +9,7 @@ import net.psforever.packet.game.{ObjectAttachMessage, ObjectCreateDetailedMessa
import net.psforever.packet.game.objectcreate.ObjectCreateMessageParent import net.psforever.packet.game.objectcreate.ObjectCreateMessageParent
import net.psforever.types.{PlanetSideEmpire, Vector3} import net.psforever.types.{PlanetSideEmpire, Vector3}
import net.psforever.services.avatar.AvatarServiceMessage import net.psforever.services.avatar.AvatarServiceMessage
import net.psforever.services.base.messages.{ObjectDelete, SendResponse} import net.psforever.services.base.message.{ObjectDelete, SendResponse}
class CorpseControl(player: Player) extends Actor with ContainableBehavior { class CorpseControl(player: Player) extends Actor with ContainableBehavior {
def ContainerObject = player def ContainerObject = player

View file

@ -36,8 +36,7 @@ import net.psforever.objects.vital.collision.CollisionReason
import net.psforever.objects.vital.etc.{PainboxReason, SuicideReason} import net.psforever.objects.vital.etc.{PainboxReason, SuicideReason}
import net.psforever.objects.vital.interaction.{DamageInteraction, DamageResult} import net.psforever.objects.vital.interaction.{DamageInteraction, DamageResult}
import net.psforever.packet.PlanetSideGamePacket import net.psforever.packet.PlanetSideGamePacket
import net.psforever.services.base.EventMessage import net.psforever.services.base.message.{EventMessage, HintsAtAttacker, ObjectDelete, PlanetsideAttribute, SendResponse}
import net.psforever.services.base.messages.{HintsAtAttacker, ObjectDelete, PlanetsideAttribute, SendResponse}
import org.joda.time.{LocalDateTime, Seconds} import org.joda.time.{LocalDateTime, Seconds}
import scala.concurrent.duration._ import scala.concurrent.duration._

View file

@ -6,7 +6,7 @@ import net.psforever.objects.serverobject.environment.{EnvironmentAttribute, Env
import net.psforever.objects.serverobject.environment.interaction.{InteractionWith, RespondsToZoneEnvironment} import net.psforever.objects.serverobject.environment.interaction.{InteractionWith, RespondsToZoneEnvironment}
import net.psforever.objects.serverobject.interior.{Sidedness, TraditionalInteriorAware} import net.psforever.objects.serverobject.interior.{Sidedness, TraditionalInteriorAware}
import net.psforever.objects.zones.interaction.InteractsWithZone import net.psforever.objects.zones.interaction.InteractsWithZone
import net.psforever.services.base.messages.SendResponse import net.psforever.services.base.message.SendResponse
import net.psforever.types.Vector3 import net.psforever.types.Vector3
import scala.annotation.unused import scala.annotation.unused

View file

@ -8,7 +8,7 @@ import net.psforever.objects.serverobject.shuttle.OrbitalShuttlePad
import net.psforever.objects.zones.interaction.InteractsWithZone import net.psforever.objects.zones.interaction.InteractsWithZone
import net.psforever.packet.game.{ChatMsg, PlayerStateShiftMessage, ShiftState} import net.psforever.packet.game.{ChatMsg, PlayerStateShiftMessage, ShiftState}
import net.psforever.services.avatar.AvatarServiceMessage import net.psforever.services.avatar.AvatarServiceMessage
import net.psforever.services.base.messages.SendResponse import net.psforever.services.base.message.SendResponse
import net.psforever.services.hart.ShuttleState import net.psforever.services.hart.ShuttleState
import net.psforever.types.ChatMessageType import net.psforever.types.ChatMessageType

View file

@ -8,7 +8,7 @@ import net.psforever.objects.zones.Zone
import net.psforever.packet.game._ import net.psforever.packet.game._
import net.psforever.services.Service import net.psforever.services.Service
import net.psforever.services.avatar.AvatarServiceMessage import net.psforever.services.avatar.AvatarServiceMessage
import net.psforever.services.base.messages.SetEmpire import net.psforever.services.base.message.SetEmpire
import net.psforever.services.local.{LocalAction, LocalServiceMessage} import net.psforever.services.local.{LocalAction, LocalServiceMessage}
import net.psforever.types.PlanetSideEmpire import net.psforever.types.PlanetSideEmpire

View file

@ -9,7 +9,7 @@ import net.psforever.objects.vehicles.Utility.InternalTelepad
import net.psforever.objects.zones.Zone import net.psforever.objects.zones.Zone
import net.psforever.packet.game.{GenericObjectActionMessage, ObjectCreateMessage, ObjectDeleteMessage} import net.psforever.packet.game.{GenericObjectActionMessage, ObjectCreateMessage, ObjectDeleteMessage}
import net.psforever.packet.game.objectcreate.ObjectCreateMessageParent import net.psforever.packet.game.objectcreate.ObjectCreateMessageParent
import net.psforever.services.base.messages.SendResponse import net.psforever.services.base.message.SendResponse
import net.psforever.services.local.{LocalAction, LocalServiceMessage} import net.psforever.services.local.{LocalAction, LocalServiceMessage}
import net.psforever.types.PlanetSideGUID import net.psforever.types.PlanetSideGUID

View file

@ -10,7 +10,7 @@ import net.psforever.objects.vital.RepairFromArmorSiphon
import net.psforever.objects.vital.etc.{ArmorSiphonModifiers, ArmorSiphonReason} import net.psforever.objects.vital.etc.{ArmorSiphonModifiers, ArmorSiphonReason}
import net.psforever.objects.vital.interaction.DamageInteraction import net.psforever.objects.vital.interaction.DamageInteraction
import net.psforever.packet.game.QuantityUpdateMessage import net.psforever.packet.game.QuantityUpdateMessage
import net.psforever.services.base.messages.{PlanetsideAttribute, SendResponse} import net.psforever.services.base.message.{PlanetsideAttribute, SendResponse}
import net.psforever.services.vehicle.VehicleServiceMessage import net.psforever.services.vehicle.VehicleServiceMessage
import net.psforever.types.PlanetSideGUID import net.psforever.types.PlanetSideGUID

View file

@ -8,7 +8,7 @@ import net.psforever.objects.vehicles.MountedWeapons
import net.psforever.objects.vital.interaction.DamageResult import net.psforever.objects.vital.interaction.DamageResult
import net.psforever.objects.vital.projectile.ProjectileReason import net.psforever.objects.vital.projectile.ProjectileReason
import net.psforever.objects.zones.{Zone, ZoneAware} import net.psforever.objects.zones.{Zone, ZoneAware}
import net.psforever.services.base.messages.PlanetsideAttribute import net.psforever.services.base.message.PlanetsideAttribute
import net.psforever.types.Vector3 import net.psforever.types.Vector3
import net.psforever.services.vehicle.VehicleServiceMessage import net.psforever.services.vehicle.VehicleServiceMessage

View file

@ -7,7 +7,7 @@ import net.psforever.objects.serverobject.containable.{Containable, ContainableB
import net.psforever.packet.game.objectcreate.ObjectCreateMessageParent import net.psforever.packet.game.objectcreate.ObjectCreateMessageParent
import net.psforever.packet.game.{ObjectAttachMessage, ObjectCreateDetailedMessage, ObjectDetachMessage} import net.psforever.packet.game.{ObjectAttachMessage, ObjectCreateDetailedMessage, ObjectDetachMessage}
import net.psforever.services.avatar.AvatarServiceMessage import net.psforever.services.avatar.AvatarServiceMessage
import net.psforever.services.base.messages.{ObjectDelete, SendResponse} import net.psforever.services.base.message.{ObjectDelete, SendResponse}
import net.psforever.types.{PlanetSideEmpire, Vector3} import net.psforever.types.{PlanetSideEmpire, Vector3}
/** /**

View file

@ -4,7 +4,7 @@ package net.psforever.objects.serverobject.damage
import net.psforever.objects.serverobject.structures.Amenity import net.psforever.objects.serverobject.structures.Amenity
import net.psforever.objects.vital.interaction.DamageResult import net.psforever.objects.vital.interaction.DamageResult
import net.psforever.services.avatar.AvatarServiceMessage import net.psforever.services.avatar.AvatarServiceMessage
import net.psforever.services.base.messages.PlanetsideAttribute import net.psforever.services.base.message.PlanetsideAttribute
/** /**
* The "control" `Actor` mixin for damage-handling code * The "control" `Actor` mixin for damage-handling code

View file

@ -9,7 +9,7 @@ import net.psforever.objects.zones.Zone
import net.psforever.types.PlanetSideGUID import net.psforever.types.PlanetSideGUID
import net.psforever.services.Service import net.psforever.services.Service
import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage} import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage}
import net.psforever.services.base.messages.PlanetsideAttribute import net.psforever.services.base.message.PlanetsideAttribute
/** /**
* The "control" `Actor` mixin for damage-handling code, * The "control" `Actor` mixin for damage-handling code,

View file

@ -8,7 +8,7 @@ import net.psforever.objects.vital.interaction.{DamageInteraction, DamageResult}
import net.psforever.packet.game.DamageWithPositionMessage import net.psforever.packet.game.DamageWithPositionMessage
import net.psforever.services.Service import net.psforever.services.Service
import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage} import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage}
import net.psforever.services.base.messages.{HintsAtAttacker, SendResponse} import net.psforever.services.base.message.{HintsAtAttacker, SendResponse}
/** /**
* Functions to assist other damage-dealing code for objects that contain users. * Functions to assist other damage-dealing code for objects that contain users.

View file

@ -13,7 +13,7 @@ import net.psforever.objects.zones.Zone
import net.psforever.objects.zones.exp.ToDatabase import net.psforever.objects.zones.exp.ToDatabase
import net.psforever.packet.game.DamageWithPositionMessage import net.psforever.packet.game.DamageWithPositionMessage
import net.psforever.services.Service import net.psforever.services.Service
import net.psforever.services.base.messages.{PlanetsideAttribute, SendResponse} import net.psforever.services.base.message.{PlanetsideAttribute, SendResponse}
import net.psforever.services.vehicle.VehicleServiceMessage import net.psforever.services.vehicle.VehicleServiceMessage
import net.psforever.types.Vector3 import net.psforever.types.Vector3

View file

@ -10,7 +10,7 @@ import net.psforever.objects.zones.Zone
import net.psforever.packet.game.DamageWithPositionMessage import net.psforever.packet.game.DamageWithPositionMessage
import net.psforever.types.Vector3 import net.psforever.types.Vector3
import net.psforever.services.avatar.AvatarServiceMessage import net.psforever.services.avatar.AvatarServiceMessage
import net.psforever.services.base.messages.{ObjectDelete, PlanetsideAttribute, SendResponse} import net.psforever.services.base.message.{ObjectDelete, PlanetsideAttribute, SendResponse}
import net.psforever.services.base.support.SupportActor import net.psforever.services.base.support.SupportActor
import net.psforever.services.vehicle.support.TurretUpgrader import net.psforever.services.vehicle.support.TurretUpgrader
import net.psforever.services.vehicle.{TurretMessage, VehicleServiceMessage} import net.psforever.services.vehicle.{TurretMessage, VehicleServiceMessage}

View file

@ -14,7 +14,7 @@ import net.psforever.objects.zones.Zone
import net.psforever.packet.game.TriggerEffectMessage import net.psforever.packet.game.TriggerEffectMessage
import net.psforever.types.{PlanetSideGeneratorState, Vector3} import net.psforever.types.{PlanetSideGeneratorState, Vector3}
import net.psforever.services.avatar.AvatarServiceMessage import net.psforever.services.avatar.AvatarServiceMessage
import net.psforever.services.base.messages.SendResponse import net.psforever.services.base.message.SendResponse
import scala.concurrent.duration._ import scala.concurrent.duration._
import scala.concurrent.ExecutionContext.Implicits.global import scala.concurrent.ExecutionContext.Implicits.global

View file

@ -12,7 +12,7 @@ import net.psforever.objects.zones.blockmap.BlockMapEntity
import net.psforever.packet.game.{GenericObjectActionMessage, HackMessage, HackState, HackState1, HackState7, TriggeredSound} import net.psforever.packet.game.{GenericObjectActionMessage, HackMessage, HackState, HackState1, HackState7, TriggeredSound}
import net.psforever.types.{PlanetSideEmpire, PlanetSideGUID} import net.psforever.types.{PlanetSideEmpire, PlanetSideGUID}
import net.psforever.services.avatar.AvatarServiceMessage import net.psforever.services.avatar.AvatarServiceMessage
import net.psforever.services.base.messages.SendResponse import net.psforever.services.base.message.SendResponse
import net.psforever.services.local.support.HackClearActor import net.psforever.services.local.support.HackClearActor
import net.psforever.services.local.{HackClearMessage, HackEntityMessage, LocalAction, LocalServiceMessage} import net.psforever.services.local.{HackClearMessage, HackEntityMessage, LocalAction, LocalServiceMessage}

View file

@ -5,7 +5,7 @@ import net.psforever.objects.serverobject.interior.Sidedness
import net.psforever.objects.{Player, Vehicle} import net.psforever.objects.{Player, Vehicle}
import net.psforever.objects.serverobject.structures.Amenity import net.psforever.objects.serverobject.structures.Amenity
import net.psforever.objects.serverobject.terminals.Terminal import net.psforever.objects.serverobject.terminals.Terminal
import net.psforever.services.base.SelfRespondingEvent import net.psforever.services.base.message.SelfRespondingEvent
import net.psforever.types.PlanetSideGUID import net.psforever.types.PlanetSideGUID
/** /**

View file

@ -6,7 +6,7 @@ import net.psforever.objects.serverobject.structures.Amenity
import net.psforever.objects.sourcing.{SourceEntry, SourceWithHealthEntry} import net.psforever.objects.sourcing.{SourceEntry, SourceWithHealthEntry}
import net.psforever.objects.vital.{DamagingActivity, RepairFromEquipment, SpawningActivity} import net.psforever.objects.vital.{DamagingActivity, RepairFromEquipment, SpawningActivity}
import net.psforever.services.avatar.AvatarServiceMessage import net.psforever.services.avatar.AvatarServiceMessage
import net.psforever.services.base.messages.PlanetsideAttribute import net.psforever.services.base.message.PlanetsideAttribute
/** /**
* The "control" `Actor` mixin for repair-handling code * The "control" `Actor` mixin for repair-handling code

View file

@ -9,7 +9,7 @@ import net.psforever.objects.{Player, Tool}
import net.psforever.packet.game.{ChatMsg, InventoryStateMessage, RepairMessage} import net.psforever.packet.game.{ChatMsg, InventoryStateMessage, RepairMessage}
import net.psforever.types.{ChatMessageType, PlanetSideEmpire, Vector3} import net.psforever.types.{ChatMessageType, PlanetSideEmpire, Vector3}
import net.psforever.services.avatar.AvatarServiceMessage import net.psforever.services.avatar.AvatarServiceMessage
import net.psforever.services.base.messages.{PlanetsideAttribute, SendResponse} import net.psforever.services.base.message.{PlanetsideAttribute, SendResponse}
/** /**
* The "control" `Actor` mixin for repair-handling code, * The "control" `Actor` mixin for repair-handling code,

View file

@ -12,7 +12,7 @@ import net.psforever.objects.{GlobalDefinitions, Ntu, NtuContainer, NtuStorageBe
import net.psforever.types.{ExperienceType, PlanetSideEmpire} import net.psforever.types.{ExperienceType, PlanetSideEmpire}
import net.psforever.services.Service import net.psforever.services.Service
import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage} import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage}
import net.psforever.services.base.messages.PlanetsideAttribute import net.psforever.services.base.message.PlanetsideAttribute
import net.psforever.services.vehicle.VehicleServiceMessage import net.psforever.services.vehicle.VehicleServiceMessage
import net.psforever.util.Config import net.psforever.util.Config

View file

@ -9,7 +9,7 @@ import net.psforever.objects.serverobject.doors.Door
import net.psforever.objects.zones.Zone import net.psforever.objects.zones.Zone
import net.psforever.packet.game.ChatMsg import net.psforever.packet.game.ChatMsg
import net.psforever.services.avatar.AvatarServiceMessage import net.psforever.services.avatar.AvatarServiceMessage
import net.psforever.services.base.messages.SendResponse import net.psforever.services.base.message.SendResponse
import net.psforever.services.base.support.SupportActor import net.psforever.services.base.support.SupportActor
import net.psforever.services.local.{DoorMessage, LocalAction} import net.psforever.services.local.{DoorMessage, LocalAction}
import net.psforever.services.hart.{HartTimer, HartTimerActions} import net.psforever.services.hart.{HartTimer, HartTimerActions}

View file

@ -4,7 +4,7 @@ package net.psforever.objects.serverobject.structures.participation
import net.psforever.objects.Player import net.psforever.objects.Player
import net.psforever.objects.avatar.scoring.Kill import net.psforever.objects.avatar.scoring.Kill
import net.psforever.objects.sourcing.UniquePlayer import net.psforever.objects.sourcing.UniquePlayer
import net.psforever.services.base.messages.GenericObjectAction import net.psforever.services.base.message.GenericObjectAction
import net.psforever.types.{PlanetSideEmpire, Vector3} import net.psforever.types.{PlanetSideEmpire, Vector3}
import scala.collection.mutable import scala.collection.mutable

View file

@ -15,7 +15,7 @@ import net.psforever.objects.avatar.scoring.Kill
import net.psforever.objects.serverobject.hackable.Hackable import net.psforever.objects.serverobject.hackable.Hackable
import net.psforever.objects.zones.exp.ToDatabase import net.psforever.objects.zones.exp.ToDatabase
import net.psforever.packet.game.ChatMsg import net.psforever.packet.game.ChatMsg
import net.psforever.services.base.messages.SendResponse import net.psforever.services.base.message.SendResponse
import net.psforever.services.local.LocalServiceMessage import net.psforever.services.local.LocalServiceMessage
import scala.collection.mutable import scala.collection.mutable

View file

@ -6,7 +6,7 @@ import net.psforever.objects.serverobject.damage.Damageable
import net.psforever.objects.sourcing.AmenitySource import net.psforever.objects.sourcing.AmenitySource
import net.psforever.objects.vital.interaction.DamageResult import net.psforever.objects.vital.interaction.DamageResult
import net.psforever.packet.game.HackState1 import net.psforever.packet.game.HackState1
import net.psforever.services.base.messages.{PlanetsideAttribute, SendResponse} import net.psforever.services.base.message.{PlanetsideAttribute, SendResponse}
import net.psforever.services.local.HackClearMessage import net.psforever.services.local.HackClearMessage
import net.psforever.services.local.support.HackClearActor import net.psforever.services.local.support.HackClearActor
import org.log4s.Logger import org.log4s.Logger

View file

@ -16,7 +16,7 @@ import net.psforever.objects.vital.interaction.DamageResult
import net.psforever.objects.zones.Zone import net.psforever.objects.zones.Zone
import net.psforever.objects.{GlobalDefinitions, Player, SimpleItem} import net.psforever.objects.{GlobalDefinitions, Player, SimpleItem}
import net.psforever.packet.game.HackState1 import net.psforever.packet.game.HackState1
import net.psforever.services.base.messages.SetEmpire import net.psforever.services.base.message.SetEmpire
import net.psforever.services.local.LocalServiceMessage import net.psforever.services.local.LocalServiceMessage
import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage} import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage}
import net.psforever.types.{PlanetSideEmpire, PlanetSideGUID} import net.psforever.types.{PlanetSideEmpire, PlanetSideGUID}

View file

@ -13,7 +13,7 @@ import net.psforever.objects.serverobject.turret.auto.AutomatedTurret.Target
import net.psforever.objects.serverobject.turret.auto.{AffectedByAutomaticTurretFire, AutomatedTurret, AutomatedTurretBehavior} import net.psforever.objects.serverobject.turret.auto.{AffectedByAutomaticTurretFire, AutomatedTurret, AutomatedTurretBehavior}
import net.psforever.objects.vital.interaction.DamageResult import net.psforever.objects.vital.interaction.DamageResult
import net.psforever.packet.game.{ChangeFireModeMessage, HackState1} import net.psforever.packet.game.{ChangeFireModeMessage, HackState1}
import net.psforever.services.base.messages.SendResponse import net.psforever.services.base.message.SendResponse
import net.psforever.services.vehicle.support.TurretUpgrader import net.psforever.services.vehicle.support.TurretUpgrader
import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage} import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage}
import net.psforever.types.{BailType, PlanetSideEmpire, PlanetSideGUID} import net.psforever.types.{BailType, PlanetSideEmpire, PlanetSideGUID}

View file

@ -9,7 +9,7 @@ import net.psforever.objects.serverobject.damage.{Damageable, DamageableWeaponTu
import net.psforever.objects.serverobject.repair.RepairableWeaponTurret import net.psforever.objects.serverobject.repair.RepairableWeaponTurret
import net.psforever.objects.vital.interaction.DamageResult import net.psforever.objects.vital.interaction.DamageResult
import net.psforever.services.avatar.AvatarServiceMessage import net.psforever.services.avatar.AvatarServiceMessage
import net.psforever.services.base.messages.PlanetsideAttribute import net.psforever.services.base.message.PlanetsideAttribute
trait TurretControl trait TurretControl
extends Actor extends Actor

View file

@ -6,7 +6,7 @@ import net.psforever.objects.ce.Deployable
import net.psforever.objects.{Player, Tool, TurretDeployable} import net.psforever.objects.{Player, Tool, TurretDeployable}
import net.psforever.packet.game.{HackMessage, HackState, HackState1, HackState7, InventoryStateMessage} import net.psforever.packet.game.{HackMessage, HackState, HackState1, HackState7, InventoryStateMessage}
import net.psforever.services.avatar.AvatarServiceMessage import net.psforever.services.avatar.AvatarServiceMessage
import net.psforever.services.base.messages.{SendResponse, SetEmpire} import net.psforever.services.base.message.{SendResponse, SetEmpire}
import net.psforever.services.local.{LocalAction, LocalServiceMessage} import net.psforever.services.local.{LocalAction, LocalServiceMessage}
import net.psforever.services.vehicle.support.TurretUpgrader import net.psforever.services.vehicle.support.TurretUpgrader
import net.psforever.services.vehicle.{TurretMessage, VehicleAction, VehicleServiceMessage} import net.psforever.services.vehicle.{TurretMessage, VehicleAction, VehicleServiceMessage}

View file

@ -18,7 +18,7 @@ import net.psforever.objects.zones.interaction.InteractsWithZone
import net.psforever.objects.{Default, PlanetSideGameObject, Player} import net.psforever.objects.{Default, PlanetSideGameObject, Player}
import net.psforever.packet.game.{ChangeFireStateMessage_Start, ChangeFireStateMessage_Stop, ObjectDetectedMessage} import net.psforever.packet.game.{ChangeFireStateMessage_Start, ChangeFireStateMessage_Stop, ObjectDetectedMessage}
import net.psforever.services.Service import net.psforever.services.Service
import net.psforever.services.base.messages.SendResponse import net.psforever.services.base.message.SendResponse
import net.psforever.services.local.LocalServiceMessage import net.psforever.services.local.LocalServiceMessage
import net.psforever.types.{PlanetSideGUID, Vector3} import net.psforever.types.{PlanetSideGUID, Vector3}

View file

@ -8,12 +8,12 @@ import net.psforever.objects.serverobject.deploy.Deployment
import net.psforever.objects.serverobject.resourcesilo.ResourceSilo import net.psforever.objects.serverobject.resourcesilo.ResourceSilo
import net.psforever.objects.serverobject.structures.WarpGate import net.psforever.objects.serverobject.structures.WarpGate
import net.psforever.objects.serverobject.transfer.{TransferBehavior, TransferContainer} import net.psforever.objects.serverobject.transfer.{TransferBehavior, TransferContainer}
import net.psforever.objects.{NtuContainer, _} import net.psforever.objects._
import net.psforever.types.DriveState import net.psforever.types.DriveState
import net.psforever.services.vehicle.VehicleServiceMessage import net.psforever.services.vehicle.VehicleServiceMessage
import akka.actor.typed.scaladsl.adapter._ import akka.actor.typed.scaladsl.adapter._
import net.psforever.objects.serverobject.transfer.TransferContainer.TransferMaterial import net.psforever.objects.serverobject.transfer.TransferContainer.TransferMaterial
import net.psforever.services.base.messages.PlanetsideAttribute import net.psforever.services.base.message.PlanetsideAttribute
import scala.concurrent.ExecutionContext.Implicits.global import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.duration._ import scala.concurrent.duration._

View file

@ -11,7 +11,7 @@ import net.psforever.packet.game.{CargoMountPointStatusMessage, ObjectAttachMess
import net.psforever.types.{BailType, CargoStatus, PlanetSideGUID, Vector3} import net.psforever.types.{BailType, CargoStatus, PlanetSideGUID, Vector3}
import net.psforever.services.avatar.AvatarServiceMessage import net.psforever.services.avatar.AvatarServiceMessage
import net.psforever.services.Service import net.psforever.services.Service
import net.psforever.services.base.messages.SendResponse import net.psforever.services.base.message.SendResponse
import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage} import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage}
import scala.concurrent.duration._ import scala.concurrent.duration._

View file

@ -2,7 +2,7 @@
package net.psforever.objects.vehicles.control package net.psforever.objects.vehicles.control
import net.psforever.objects._ import net.psforever.objects._
import net.psforever.services.base.messages.PlanetsideAttribute import net.psforever.services.base.message.PlanetsideAttribute
import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage} import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage}
import net.psforever.types.DriveState import net.psforever.types.DriveState

View file

@ -11,7 +11,7 @@ import net.psforever.objects.vital.prop.DamageWithPosition
import net.psforever.objects.zones.Zone import net.psforever.objects.zones.Zone
import net.psforever.packet.game.{TriggerEffectMessage, TriggeredEffectLocation} import net.psforever.packet.game.{TriggerEffectMessage, TriggeredEffectLocation}
import net.psforever.services.Service import net.psforever.services.Service
import net.psforever.services.base.messages.SendResponse import net.psforever.services.base.message.SendResponse
import net.psforever.services.vehicle.VehicleServiceMessage import net.psforever.services.vehicle.VehicleServiceMessage
import net.psforever.types.PlanetSideGUID import net.psforever.types.PlanetSideGUID

View file

@ -17,7 +17,7 @@ import net.psforever.objects.vital.interaction.DamageResult
import net.psforever.objects.zones.Zone import net.psforever.objects.zones.Zone
import net.psforever.packet.game._ import net.psforever.packet.game._
import net.psforever.services.Service import net.psforever.services.Service
import net.psforever.services.base.messages.{GenericObjectAction, PlanetsideAttribute, SendResponse} import net.psforever.services.base.message.{GenericObjectAction, PlanetsideAttribute, SendResponse}
import net.psforever.services.vehicle.VehicleServiceMessage import net.psforever.services.vehicle.VehicleServiceMessage
import net.psforever.types._ import net.psforever.types._

View file

@ -3,7 +3,7 @@ package net.psforever.objects.vehicles.control
import akka.actor.{Actor, Cancellable} import akka.actor.{Actor, Cancellable}
import net.psforever.objects._ import net.psforever.objects._
import net.psforever.services.base.messages.PlanetsideAttribute import net.psforever.services.base.message.PlanetsideAttribute
import net.psforever.services.vehicle.VehicleServiceMessage import net.psforever.services.vehicle.VehicleServiceMessage
import scala.concurrent.ExecutionContext.Implicits.global import scala.concurrent.ExecutionContext.Implicits.global

View file

@ -37,7 +37,7 @@ import net.psforever.packet.game._
import net.psforever.packet.game.objectcreate.ObjectCreateMessageParent import net.psforever.packet.game.objectcreate.ObjectCreateMessageParent
import net.psforever.types._ import net.psforever.types._
import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage} import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage}
import net.psforever.services.base.messages.{ObjectDelete, PlanetsideAttribute, SendResponse} import net.psforever.services.base.message.{ObjectDelete, PlanetsideAttribute, SendResponse}
import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage} import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage}
import scala.annotation.unused import scala.annotation.unused

View file

@ -6,7 +6,7 @@ import net.psforever.objects.avatar.interaction.WithEntrance
import net.psforever.objects.serverobject.doors.InteriorDoorPassage import net.psforever.objects.serverobject.doors.InteriorDoorPassage
import net.psforever.objects.serverobject.environment.PieceOfEnvironment import net.psforever.objects.serverobject.environment.PieceOfEnvironment
import net.psforever.objects.zones.interaction.InteractsWithZone import net.psforever.objects.zones.interaction.InteractsWithZone
import net.psforever.services.base.messages.SendResponse import net.psforever.services.base.message.SendResponse
class WithEntranceInVehicle class WithEntranceInVehicle
extends WithEntrance() { extends WithEntrance() {

View file

@ -4,9 +4,8 @@ import enumeratum.values.{StringEnum, StringEnumEntry}
import net.psforever.objects.{PlanetSideGameObject, Player, Vehicle} import net.psforever.objects.{PlanetSideGameObject, Player, Vehicle}
import net.psforever.objects.serverobject.environment._ import net.psforever.objects.serverobject.environment._
import net.psforever.packet.game.{ChatMsg, OffshoreVehicleMessage} import net.psforever.packet.game.{ChatMsg, OffshoreVehicleMessage}
import net.psforever.services.Service import net.psforever.services.avatar.AvatarServiceMessage
import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage} import net.psforever.services.base.message.SendResponse
import net.psforever.services.base.messages.SendResponse
import net.psforever.services.vehicle.VehicleServiceMessage import net.psforever.services.vehicle.VehicleServiceMessage
import net.psforever.types.{ChatMessageType, PlanetSideEmpire, PlanetSideGUID, Vector3} import net.psforever.types.{ChatMessageType, PlanetSideEmpire, PlanetSideGUID, Vector3}
@ -690,10 +689,7 @@ object MapEnvironment {
val warning = s"Do not travel any further $trespass of the battlefield or you$punishment" val warning = s"Do not travel any further $trespass of the battlefield or you$punishment"
p.Zone.AvatarEvents ! AvatarServiceMessage( p.Zone.AvatarEvents ! AvatarServiceMessage(
p.Name, p.Name,
AvatarAction.SendResponseTargeted( SendResponse(ChatMsg(ChatMessageType.CMT_QUIT, warning))
Service.defaultPlayerGUID,
ChatMsg(ChatMessageType.CMT_QUIT, warning)
)
) )
case _ => ; case _ => ;
} }

View file

@ -1616,7 +1616,7 @@ object Zone {
zone.avatarEvents = context.actorOf(Props(classOf[AvatarService], zone), s"$id-avatar-events") zone.avatarEvents = context.actorOf(Props(classOf[AvatarService], zone), s"$id-avatar-events")
zone.localEvents = context.actorOf(Props(classOf[LocalService], zone), s"$id-local-events") zone.localEvents = context.actorOf(Props(classOf[LocalService], zone), s"$id-local-events")
zone.vehicleEvents = context.actorOf(Props(classOf[VehicleService], zone), s"$id-vehicle-events") zone.vehicleEvents = context.actorOf(Props(classOf[VehicleService]), s"$id-vehicle-events")
zone.timeOfDayOrigin = System.currentTimeMillis() zone.timeOfDayOrigin = System.currentTimeMillis()

View file

@ -10,7 +10,7 @@ import net.psforever.objects.sourcing.ObjectSource
import net.psforever.objects.vehicles.MountedWeapons import net.psforever.objects.vehicles.MountedWeapons
import net.psforever.objects.vital.SpawningActivity import net.psforever.objects.vital.SpawningActivity
import net.psforever.packet.game.ChatMsg import net.psforever.packet.game.ChatMsg
import net.psforever.services.base.messages.SendResponse import net.psforever.services.base.message.SendResponse
import net.psforever.services.local.LocalServiceMessage import net.psforever.services.local.LocalServiceMessage
import net.psforever.types.ChatMessageType import net.psforever.types.ChatMessageType

View file

@ -6,7 +6,7 @@ import net.psforever.objects.ballistics.Projectile
import net.psforever.objects.guid.{GUIDTask, StraightforwardTask, TaskBundle, TaskWorkflow} import net.psforever.objects.guid.{GUIDTask, StraightforwardTask, TaskBundle, TaskWorkflow}
import net.psforever.services.Service import net.psforever.services.Service
import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage} import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage}
import net.psforever.services.base.messages.ObjectDelete import net.psforever.services.base.message.ObjectDelete
import net.psforever.types.PlanetSideGUID import net.psforever.types.PlanetSideGUID
import scala.collection.mutable import scala.collection.mutable

View file

@ -9,7 +9,7 @@ import net.psforever.objects.serverobject.structures.WarpGate
import net.psforever.objects.vital.InGameHistory import net.psforever.objects.vital.InGameHistory
import net.psforever.objects.{Default, GlobalDefinitions, Vehicle} import net.psforever.objects.{Default, GlobalDefinitions, Vehicle}
import net.psforever.packet.game.ChatMsg import net.psforever.packet.game.ChatMsg
import net.psforever.services.base.messages.SendResponse import net.psforever.services.base.message.SendResponse
import net.psforever.services.vehicle.VehicleServiceMessage import net.psforever.services.vehicle.VehicleServiceMessage
import net.psforever.types.{ChatMessageType, DriveState, PlanetSideEmpire, Vector3} import net.psforever.types.{ChatMessageType, DriveState, PlanetSideEmpire, Vector3}

View file

@ -12,7 +12,7 @@ import net.psforever.objects.Default
import net.psforever.objects.serverobject.structures.{Building, WarpGate} import net.psforever.objects.serverobject.structures.{Building, WarpGate}
import net.psforever.objects.zones.Zone import net.psforever.objects.zones.Zone
import net.psforever.packet.game.ChatMsg import net.psforever.packet.game.ChatMsg
import net.psforever.services.base.messages.SendResponse import net.psforever.services.base.message.SendResponse
import net.psforever.services.galaxy.{GalaxyAction, GalaxyServiceMessage, GalaxyServiceResponse} import net.psforever.services.galaxy.{GalaxyAction, GalaxyServiceMessage, GalaxyServiceResponse}
import net.psforever.types.ChatMessageType import net.psforever.types.ChatMessageType
import net.psforever.util.Config import net.psforever.util.Config

View file

@ -16,7 +16,7 @@ import net.psforever.persistence
import net.psforever.types.Vector3 import net.psforever.types.Vector3
import net.psforever.services.{Service, ServiceManager} import net.psforever.services.{Service, ServiceManager}
import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage} import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage}
import net.psforever.services.base.messages.ObjectDelete import net.psforever.services.base.message.ObjectDelete
import net.psforever.services.galaxy.{GalaxyAction, GalaxyServiceMessage} import net.psforever.services.galaxy.{GalaxyAction, GalaxyServiceMessage}
import net.psforever.zones.Zones import net.psforever.zones.Zones

View file

@ -10,11 +10,9 @@ import net.psforever.objects.serverobject.environment.interaction.common.Watery.
import net.psforever.objects.sourcing.{SourceEntry, UniquePlayer} import net.psforever.objects.sourcing.{SourceEntry, UniquePlayer}
import net.psforever.objects.vital.interaction.DamageResult import net.psforever.objects.vital.interaction.DamageResult
import net.psforever.objects.zones.Zone import net.psforever.objects.zones.Zone
import net.psforever.packet.PlanetSideGamePacket
import net.psforever.packet.game.{ImplantAction, ObjectCreateMessage} import net.psforever.packet.game.{ImplantAction, ObjectCreateMessage}
import net.psforever.packet.game.objectcreate.{ConstructorData, DroppedItemData, ObjectCreateMessageParent, PlacementData} import net.psforever.packet.game.objectcreate.{ConstructorData, DroppedItemData, ObjectCreateMessageParent, PlacementData}
import net.psforever.services.base.messages.ObjectDelete import net.psforever.services.base.message.{EventMessage, EventResponse, ObjectDelete, SelfRespondingEvent}
import net.psforever.services.base.{EventMessage, EventResponse, SelfRespondingEvent}
import net.psforever.types.{ExoSuitType, ExperienceType, PlanetSideGUID, TransactionType, Vector3} import net.psforever.types.{ExoSuitType, ExperienceType, PlanetSideGUID, TransactionType, Vector3}
import scala.concurrent.duration.FiniteDuration import scala.concurrent.duration.FiniteDuration
@ -26,8 +24,6 @@ object AvatarAction {
final case class ChangeFireMode(item_guid: PlanetSideGUID, mode: Int) extends SelfRespondingEvent final case class ChangeFireMode(item_guid: PlanetSideGUID, mode: Int) extends SelfRespondingEvent
final case class ConcealPlayer(player_guid: PlanetSideGUID) extends SelfRespondingEvent
final case class EnvironmentalDamage(player_guid: PlanetSideGUID, source_guid: PlanetSideGUID, amount: Int) extends SelfRespondingEvent final case class EnvironmentalDamage(player_guid: PlanetSideGUID, source_guid: PlanetSideGUID, amount: Int) extends SelfRespondingEvent
final case class DeactivateImplantSlot(player_guid: PlanetSideGUID, slot: Int) extends SelfRespondingEvent final case class DeactivateImplantSlot(player_guid: PlanetSideGUID, slot: Int) extends SelfRespondingEvent
@ -153,8 +149,6 @@ object AvatarAction {
final case class StowEquipment(target_guid: PlanetSideGUID, slot: Int, item: Equipment) final case class StowEquipment(target_guid: PlanetSideGUID, slot: Int, item: Equipment)
extends SelfRespondingEvent extends SelfRespondingEvent
final case class SendResponseTargeted(target_guid: PlanetSideGUID, msg: PlanetSideGamePacket) extends SelfRespondingEvent
final case class TerminalOrderResult(terminal_guid: PlanetSideGUID, action: TransactionType.Value, result: Boolean) final case class TerminalOrderResult(terminal_guid: PlanetSideGUID, action: TransactionType.Value, result: Boolean)
extends SelfRespondingEvent extends SelfRespondingEvent

View file

@ -2,9 +2,8 @@
package net.psforever.services.avatar package net.psforever.services.avatar
import akka.actor.{ActorContext, ActorRef, Props} import akka.actor.{ActorContext, ActorRef, Props}
import net.psforever.objects.zones.Zone
import net.psforever.services.avatar.support.{CorpseRemovalActor, DroppedItemRemover} import net.psforever.services.avatar.support.{CorpseRemovalActor, DroppedItemRemover}
import net.psforever.services.base.{EventServiceSupport, GenericEventServiceWithCacheAndSupport, GenericMessageEnvelope} import net.psforever.services.base.{EventServiceSupport, EventSystemStamp, GenericEventServiceWithCacheAndSupport}
case object CorpseRemovalSupport case object CorpseRemovalSupport
extends EventServiceSupport { extends EventServiceSupport {
@ -22,12 +21,10 @@ case object LitterRemovalSupport
} }
} }
class AvatarService(zone: Zone) case object AvatarStamp extends EventSystemStamp
extends GenericEventServiceWithCacheAndSupport[AvatarServiceResponse](
busName = "Avatar", class AvatarService
extends GenericEventServiceWithCacheAndSupport(
stamp = AvatarStamp,
eventSupportServices = List(CorpseRemovalSupport, LitterRemovalSupport) eventSupportServices = List(CorpseRemovalSupport, LitterRemovalSupport)
) { )
protected def composeResponseEnvelope(msg: GenericMessageEnvelope): AvatarServiceResponse = {
AvatarServiceResponse(formatChannelOnBusName(msg.channel), msg.filter, msg.msg.response())
}
}

View file

@ -4,7 +4,9 @@ package net.psforever.services.avatar
import net.psforever.objects.zones.Zone import net.psforever.objects.zones.Zone
import net.psforever.services.{RemoverActor, Service} import net.psforever.services.{RemoverActor, Service}
import net.psforever.services.avatar.AvatarAction.{DropItem, PickupItem, Release} import net.psforever.services.avatar.AvatarAction.{DropItem, PickupItem, Release}
import net.psforever.services.base.{EventMessage, GenericMessageToSupportEnvelope, GenericMessageToSupportEnvelopeOnly, MessageEnvelope} import net.psforever.services.base.envelope.MessageEnvelope
import net.psforever.services.base.message.EventMessage
import net.psforever.services.base.{GenericSupportEnvelope, GenericSupportEnvelopeOnly}
import net.psforever.types.PlanetSideGUID import net.psforever.types.PlanetSideGUID
object AvatarServiceMessage { object AvatarServiceMessage {
@ -16,11 +18,11 @@ object AvatarServiceMessage {
} }
final case class ReleaseMessage( final case class ReleaseMessage(
channel: String, originalChannel: String,
filter: PlanetSideGUID, filter: PlanetSideGUID,
msg: Release msg: Release
) )
extends GenericMessageToSupportEnvelope { extends GenericSupportEnvelope {
def supportLabel: String = "undertaker" def supportLabel: String = "undertaker"
def supportMessage: Any = { def supportMessage: Any = {
val Release(player, zone, time) = msg val Release(player, zone, time) = msg
@ -34,12 +36,12 @@ object ReleaseMessage {
} }
final case class PickupItemMessage( final case class PickupItemMessage(
channel: String, originalChannel: String,
filter: PlanetSideGUID, filter: PlanetSideGUID,
msg: PickupItem, msg: PickupItem,
zone: Zone zone: Zone
) )
extends GenericMessageToSupportEnvelope { extends GenericSupportEnvelope {
def supportLabel: String = "janitor" def supportLabel: String = "janitor"
def supportMessage: Any = { def supportMessage: Any = {
val PickupItem(item, _) = msg val PickupItem(item, _) = msg
@ -53,12 +55,12 @@ object PickupItemMessage {
} }
final case class DropItemMessage( final case class DropItemMessage(
channel: String, originalChannel: String,
filter: PlanetSideGUID, filter: PlanetSideGUID,
msg: DropItem, msg: DropItem,
zone: Zone zone: Zone
) )
extends GenericMessageToSupportEnvelope { extends GenericSupportEnvelope {
def supportLabel: String = "janitor" def supportLabel: String = "janitor"
def supportMessage: Any = { def supportMessage: Any = {
val DropItem(item) = msg val DropItem(item) = msg
@ -72,11 +74,11 @@ object DropItemMessage {
} }
final case class CorpseEnvelope(supportMessage: Any) final case class CorpseEnvelope(supportMessage: Any)
extends GenericMessageToSupportEnvelopeOnly { extends GenericSupportEnvelopeOnly {
def supportLabel: String = "undertaker" def supportLabel: String = "undertaker"
} }
final case class GroundEnvelope(supportMessage: Any) final case class GroundEnvelope(supportMessage: Any)
extends GenericMessageToSupportEnvelopeOnly { extends GenericSupportEnvelopeOnly {
def supportLabel: String = "janitor" def supportLabel: String = "janitor"
} }

View file

@ -1,11 +1,15 @@
// Copyright (c) 2017 PSForever // Copyright (c) 2017 PSForever
package net.psforever.services.avatar package net.psforever.services.avatar
import net.psforever.services.base.message.EventResponse
import net.psforever.types.PlanetSideGUID import net.psforever.types.PlanetSideGUID
import net.psforever.services.base.{EventResponse, GenericResponseEnvelope} import net.psforever.services.base.EventSystemStamp
import net.psforever.services.base.envelope.GenericResponseEnvelope
final case class AvatarServiceResponse( final case class AvatarServiceResponse(
channel: String, channel: String,
filter: PlanetSideGUID, filter: PlanetSideGUID,
reply: EventResponse reply: EventResponse
) extends GenericResponseEnvelope ) extends GenericResponseEnvelope {
def stamp: EventSystemStamp = AvatarStamp
}

View file

@ -6,7 +6,7 @@ import net.psforever.objects.Player
import net.psforever.types.ExoSuitType import net.psforever.types.ExoSuitType
import net.psforever.services.RemoverActor import net.psforever.services.RemoverActor
import net.psforever.services.avatar.AvatarServiceMessage import net.psforever.services.avatar.AvatarServiceMessage
import net.psforever.services.base.messages.ObjectDelete import net.psforever.services.base.message.ObjectDelete
import scala.concurrent.duration._ import scala.concurrent.duration._

View file

@ -5,7 +5,7 @@ import net.psforever.objects.equipment.Equipment
import net.psforever.objects.guid.{GUIDTask, TaskBundle} import net.psforever.objects.guid.{GUIDTask, TaskBundle}
import net.psforever.services.RemoverActor import net.psforever.services.RemoverActor
import net.psforever.services.avatar.AvatarServiceMessage import net.psforever.services.avatar.AvatarServiceMessage
import net.psforever.services.base.messages.ObjectDelete import net.psforever.services.base.message.ObjectDelete
import scala.concurrent.duration._ import scala.concurrent.duration._

View file

@ -3,32 +3,23 @@ package net.psforever.services.base
import akka.actor.Actor import akka.actor.Actor
import net.psforever.services.Service import net.psforever.services.Service
import net.psforever.services.base.bus.{AllGenericBusMsg, GenericEventBus, GenericEventBusResponse} import net.psforever.services.base.bus.GenericEventBus
import net.psforever.services.base.envelope.{GenericMessageEnvelope, GenericResponseEnvelope}
import org.log4s.Logger import org.log4s.Logger
import scala.annotation.unused import scala.annotation.unused
trait GenericResponseEnvelope trait EventSystemStamp
extends GenericEventBusResponse {
def reply: EventResponse
}
trait GenericMessageEnvelope abstract class GenericEventService(stamp: EventSystemStamp)
extends AllGenericBusMsg {
def msg: EventMessage
}
abstract class GenericEventService[OUT <: GenericResponseEnvelope](busName: String)
extends Actor { extends Actor {
protected lazy val log: Logger = org.log4s.getLogger(getClass.getSimpleName) protected lazy val log: Logger = org.log4s.getLogger(getClass.getSimpleName)
protected val eventBus: GenericEventBus[OUT] = new GenericEventBus[OUT] protected val eventBus: GenericEventBus = new GenericEventBus
def BusName: String = busName
private def commonJoinBehavior: Receive = { private def commonJoinBehavior: Receive = {
case Service.Join(channel) => case Service.Join(channel) =>
val path = formatChannelOnBusName(channel) val path = formatChannel(channel)
val who = sender() val who = sender()
eventBus.subscribe(who, path) eventBus.subscribe(who, path)
} }
@ -38,7 +29,7 @@ abstract class GenericEventService[OUT <: GenericResponseEnvelope](busName: Stri
eventBus.unsubscribe(sender()) eventBus.unsubscribe(sender())
case Service.Leave(Some(channel)) => case Service.Leave(Some(channel)) =>
val path = formatChannelOnBusName(channel) val path = formatChannel(channel)
eventBus.unsubscribe(sender(), path) eventBus.unsubscribe(sender(), path)
case Service.LeaveAll() => case Service.LeaveAll() =>
@ -62,7 +53,9 @@ abstract class GenericEventService[OUT <: GenericResponseEnvelope](busName: Stri
eventBus.publish(composeResponseEnvelope(msg)) eventBus.publish(composeResponseEnvelope(msg))
} }
protected def composeResponseEnvelope(@unused msg: GenericMessageEnvelope): OUT protected def composeResponseEnvelope(@unused msg: GenericMessageEnvelope): GenericResponseEnvelope = {
msg.response(stamp, formatChannel)
}
protected def formatChannelOnBusName(channel: String): String = s"/$channel/$busName" protected def formatChannel(channel: String): String = s"/$channel"
} }

View file

@ -2,24 +2,31 @@
package net.psforever.services.base package net.psforever.services.base
import net.psforever.services.Service import net.psforever.services.Service
import net.psforever.services.base.envelope.{GenericMessageEnvelope, MessageEnvelope, MessageTransformationBehavior}
import net.psforever.services.base.message.EventMessage
import net.psforever.types.PlanetSideGUID import net.psforever.types.PlanetSideGUID
import scala.collection.concurrent.{Map => CMap} import scala.collection.concurrent.{Map => CMap}
import scala.jdk.CollectionConverters._ import scala.jdk.CollectionConverters._
import java.util.concurrent.ConcurrentHashMap import java.util.concurrent.ConcurrentHashMap
import scala.concurrent.ExecutionContext.Implicits.global
/* /*
Adapted from the rating limiting code in https://github.com/Pinapse/giant with permission Adapted from the rating limiting code in https://github.com/Pinapse/giant with permission
*/ */
trait CachedGenericEventMessageEnvelope trait CachedGenericEventMessageEnvelope
extends GenericMessageEnvelope { extends MessageTransformationBehavior {
def guid: PlanetSideGUID def guid: PlanetSideGUID
} }
final case class CachedMessage(guid: PlanetSideGUID, channel: String, filter: PlanetSideGUID, msg: EventMessage) final case class CachedMessage(
extends CachedGenericEventMessageEnvelope guid: PlanetSideGUID,
originalChannel: String,
override val filter: PlanetSideGUID,
override val msg: EventMessage
) extends CachedGenericEventMessageEnvelope {
assert(guid != Service.defaultPlayerGUID, "can not cache message under default GUID")
}
object CachedMessage { object CachedMessage {
def apply(channel: String, filter: PlanetSideGUID, msg: EventMessage): GenericMessageEnvelope = { def apply(channel: String, filter: PlanetSideGUID, msg: EventMessage): GenericMessageEnvelope = {
@ -31,31 +38,13 @@ object CachedMessage {
} }
} }
object CachedGenericEventMessageEnvelope {
def apply(channel: String, filter: PlanetSideGUID, msg: EventMessage): GenericMessageEnvelope = {
if (filter == Service.defaultPlayerGUID) {
MessageEnvelope(channel, filter, msg)
} else {
CachedMessage(filter, channel, filter, msg)
}
}
def apply(guid: PlanetSideGUID, channel: String, filter: PlanetSideGUID, msg: EventMessage): GenericMessageEnvelope = {
if (guid == Service.defaultPlayerGUID) {
MessageEnvelope(channel, filter, msg)
} else {
CachedMessage(guid, channel, filter, msg)
}
}
}
private case object FlushCachedMessages private case object FlushCachedMessages
abstract class GenericEventServiceWithCacheAndSupport[OUT <: GenericResponseEnvelope] abstract class GenericEventServiceWithCacheAndSupport
( (
busName: String, stamp: EventSystemStamp,
eventSupportServices: List[EventServiceSupport] eventSupportServices: List[EventServiceSupport]
) extends GenericEventServiceWithSupport[OUT](busName, eventSupportServices) { ) extends GenericEventServiceWithSupport(stamp, eventSupportServices) {
private val flushCacheWait: Long = 50 //milliseconds private val flushCacheWait: Long = 50 //milliseconds
private var hasCachedMessages: Boolean = false private var hasCachedMessages: Boolean = false
private var nextTimeToFlushCache: Long = 0L private var nextTimeToFlushCache: Long = 0L

View file

@ -3,40 +3,58 @@ package net.psforever.services.base
import akka.actor.{ActorContext, ActorRef} import akka.actor.{ActorContext, ActorRef}
import net.psforever.services.Service import net.psforever.services.Service
import net.psforever.services.base.envelope.{GenericMessageEnvelope, GenericResponseEnvelope, MessageTransformationBehavior, NoReply, Undelivered}
import net.psforever.services.base.message.{EventMessage, EventResponse, SelfRespondingEvent}
import net.psforever.types.PlanetSideGUID import net.psforever.types.PlanetSideGUID
import scala.annotation.unused import scala.annotation.unused
case object NoMessage extends SelfRespondingEvent
case object NoResponseEnvelope extends GenericResponseEnvelope {
def reply: EventResponse = NoReply
def stamp: EventSystemStamp = Undelivered
def channel: String = ""
def filter: PlanetSideGUID = Service.defaultPlayerGUID
}
trait EventServiceSupport { trait EventServiceSupport {
def label: String def label: String
def constructor(@unused context: ActorContext): ActorRef def constructor(@unused context: ActorContext): ActorRef
} }
trait GenericMessageToSupportEnvelope sealed trait GenericMessageToSupport {
extends GenericMessageEnvelope {
def supportLabel: String def supportLabel: String
def supportMessage: Any def supportMessage: Any
} }
trait GenericMessageToSupportEnvelopeOnly trait GenericSupportEnvelope
extends GenericMessageToSupportEnvelope { extends GenericMessageToSupport
with MessageTransformationBehavior
trait GenericSupportEnvelopeOnly
extends GenericMessageToSupport
with GenericMessageEnvelope {
def originalChannel: String = ""
def channel: String = "" def channel: String = ""
def filter: PlanetSideGUID = Service.defaultPlayerGUID def filter: PlanetSideGUID = Service.defaultPlayerGUID
def msg: EventMessage = null def msg: EventMessage = NoMessage
def response(@unused stamp: EventSystemStamp, @unused sendToChannel: String => String): GenericResponseEnvelope = NoResponseEnvelope
} }
abstract class GenericEventServiceWithSupport[OUT <: GenericResponseEnvelope] abstract class GenericEventServiceWithSupport
( (
busName: String, stamp: EventSystemStamp,
eventSupportServices: List[EventServiceSupport] eventSupportServices: List[EventServiceSupport]
) extends GenericEventService[OUT](busName) { ) extends GenericEventService(stamp) {
private val supportServices: Map[String, ActorRef] = private val supportServices: Map[String, ActorRef] =
eventSupportServices eventSupportServices
.map { supportService => (supportService.label, supportService.constructor(context)) } .map { supportService => (supportService.label, supportService.constructor(context)) }
.toMap[String, ActorRef] .toMap[String, ActorRef]
private def forwardToSupport(msg: GenericMessageToSupportEnvelope): Unit = { private def forwardToSupport(msg: GenericMessageToSupport): Unit = {
supportServices supportServices
.get(msg.supportLabel) .get(msg.supportLabel)
.map { support => .map { support =>
@ -50,12 +68,12 @@ abstract class GenericEventServiceWithSupport[OUT <: GenericResponseEnvelope]
override protected def handleMessage(event: GenericMessageEnvelope): Unit = { override protected def handleMessage(event: GenericMessageEnvelope): Unit = {
event match { event match {
case msg: GenericMessageToSupportEnvelopeOnly => case msg: GenericSupportEnvelopeOnly =>
forwardToSupport(msg) forwardToSupport(msg)
case msg: GenericMessageToSupportEnvelope => case msg: GenericSupportEnvelope =>
forwardToSupport(msg) forwardToSupport(msg)
eventBus.publish(composeResponseEnvelope(event)) eventBus.publish(composeResponseEnvelope(event))
case _ => case event =>
eventBus.publish(composeResponseEnvelope(event)) eventBus.publish(composeResponseEnvelope(event))
} }
} }

View file

@ -1,7 +0,0 @@
// Copyright (c) 2026 PSForever
package net.psforever.services.base
import net.psforever.types.PlanetSideGUID
case class MessageEnvelope(channel: String, filter: PlanetSideGUID, msg: EventMessage)
extends GenericMessageEnvelope

View file

@ -3,19 +3,11 @@ package net.psforever.services.base.bus
import akka.event.{ActorEventBus, SubchannelClassification} import akka.event.{ActorEventBus, SubchannelClassification}
import akka.util.Subclassification import akka.util.Subclassification
import net.psforever.types.PlanetSideGUID import net.psforever.services.base.envelope.GenericResponseEnvelope
trait AllGenericBusMsg { class GenericEventBus
def channel: String
def filter: PlanetSideGUID
}
trait GenericEventBusResponse
extends AllGenericBusMsg
class GenericEventBus[A <: GenericEventBusResponse]
extends ActorEventBus with SubchannelClassification { extends ActorEventBus with SubchannelClassification {
type Event = A type Event = GenericResponseEnvelope
type Classifier = String type Classifier = String
protected def classify(event: Event): Classifier = event.channel protected def classify(event: Event): Classifier = event.channel

View file

@ -1,105 +0,0 @@
// Copyright (c) 2026 PSForever
package net.psforever.services.base.bus
import net.psforever.types.PlanetSideGUID
import java.util.concurrent.ConcurrentHashMap
import scala.annotation.unused
import scala.collection.concurrent.{Map => CMap}
import scala.jdk.CollectionConverters._
/*
Adapted from the rating limiting code in https://github.com/Pinapse/giant with permission
*/
trait GenericGuidEventBusResponse
extends GenericEventBusResponse {
def guid: PlanetSideGUID
def inner: Any
}
class RateLimitScheduler[A <: GenericGuidEventBusResponse](eventBus: GenericEventBus[A], interval: Long) extends Thread {
private var hasWork: Boolean = false
private var working: Boolean = false
private var timeOfLastFlush: Long = 0L
private val buffer: CMap[String, CMap[String, CMap[PlanetSideGUID, A]]] =
new ConcurrentHashMap[String, CMap[String, CMap[PlanetSideGUID, A]]]().asScala
override def run(): Unit = {
while (working) {
//originally, there was a Thread.sleep(interval) here, replaced by timeOfLastFlush logic
flushBuffer()
}
}
def push(event: A): Unit = {
val eventClassName = event.inner.getClass.getName
val cache =
buffer
.getOrElseUpdate(event.channel, new ConcurrentHashMap[String, CMap[PlanetSideGUID, A]]().asScala)
.getOrElseUpdate(eventClassName, new ConcurrentHashMap[PlanetSideGUID, A]().asScala)
cache.updateWith(event.guid) { _ => Some(event) }
hasWork = true
}
def flushBuffer(): Unit = {
val curr = System.currentTimeMillis()
if (hasWork && timeOfLastFlush + interval <= curr) {
flushBufferNow(curr)
}
}
def flushBufferNow(curr: Long = System.currentTimeMillis()): Unit = {
buffer.foreachEntry { (_, map) =>
map.foreachEntry { (_, map) =>
map.foreachEntry { (_, event) =>
eventBus.truePublish(event)
}
map.clear()
}
}
hasWork = false
timeOfLastFlush = curr
}
override def start(): Unit = {
working = true
timeOfLastFlush = System.currentTimeMillis()
super.start()
}
def isRunning: Boolean = {
working
}
def stopRunning(): Unit = {
working = false
flushBufferNow()
}
}
abstract class GenericGuidEventBus[A <: GenericGuidEventBusResponse](rateLimit: Double)
extends GenericEventBus[A] {
private val rateLimitedDispatch = new RateLimitScheduler[A](
eventBus = this,
scala.math.floor(1000.0 / rateLimit).toInt
)
rateLimitedDispatch.start()
override def publish(event: Event): Unit = {
if (rateLimit > 0 && shouldRateLimit(event) && rateLimitedDispatch.isRunning) {
rateLimitedDispatch.push(event)
} else {
truePublish(event)
}
}
def shouldRateLimit(@unused event: Event): Boolean
// override protected def publish(event: Event, subscriber: Subscriber): Unit = {
// val trimmedEventClassName =
// event.inner.getClass().getName().stripPrefix(event.inner.getClass.getPackageName() + ".").stripSuffix("$")
// GenericGuidEventBus.genericGuidEventBusPublish.labels(event.channel, trimmedEventClassName).inc()
// subscriber ! event
// }
}

View file

@ -0,0 +1,9 @@
// Copyright (c) 2026 PSForever
package net.psforever.services.base.envelope
import net.psforever.types.PlanetSideGUID
trait AllEnvelopes {
def channel: String
def filter: PlanetSideGUID
}

View file

@ -0,0 +1,19 @@
// Copyright (c) 2026 PSForever
package net.psforever.services.base.envelope
import net.psforever.services.base.EventSystemStamp
import net.psforever.services.base.message.EventMessage
import net.psforever.types.PlanetSideGUID
trait GenericMessageEnvelope
extends AllEnvelopes {
def originalChannel: String
def msg: EventMessage
def response(stamp: EventSystemStamp, sendToChannel: String => String): GenericResponseEnvelope
}
object GenericMessageEnvelope {
def unapply(obj: GenericMessageEnvelope): Option[(String, PlanetSideGUID, EventMessage)] = {
Some((obj.originalChannel, obj.filter, obj.msg))
}
}

Some files were not shown because too many files have changed in this diff Show more