mirror of
https://github.com/psforever/PSF-LoginServer.git
synced 2026-07-14 07:55:33 +00:00
removed event system implied instances of MessageEnvelope overloaded constructors and replaced them directly with MessageEnvelope; included additional places where SendResponse could combine dispatch; support actors have both constructor classes and custom envelopes stored in the same file as the actor itself for better readability
This commit is contained in:
parent
dbd90e6eb1
commit
cbf6aa5ebb
124 changed files with 851 additions and 1518 deletions
|
|
@ -75,26 +75,22 @@ ignore:
|
||||||
- "src/main/scala/net/psforever/services/account/StoreIPAddress.scala"
|
- "src/main/scala/net/psforever/services/account/StoreIPAddress.scala"
|
||||||
- "src/main/scala/net/psforever/services/avatar/AvatarAction.scala"
|
- "src/main/scala/net/psforever/services/avatar/AvatarAction.scala"
|
||||||
- "src/main/scala/net/psforever/services/avatar/AvatarService.scala"
|
- "src/main/scala/net/psforever/services/avatar/AvatarService.scala"
|
||||||
- "src/main/scala/net/psforever/services/avatar/AvatarServiceMessage.scala"
|
|
||||||
- "src/main/scala/net/psforever/services/avatar/AvatarServiceResponse.scala"
|
- "src/main/scala/net/psforever/services/avatar/AvatarServiceResponse.scala"
|
||||||
- "src/main/scala/net/psforever/services/base/bus"
|
- "src/main/scala/net/psforever/services/base/bus"
|
||||||
- "src/main/scala/net/psforever/services/base/envelope"
|
- "src/main/scala/net/psforever/services/base/envelope"
|
||||||
- "src/main/scala/net/psforever/services/chat/ChatChannel.scala"
|
- "src/main/scala/net/psforever/services/chat/ChatChannel.scala"
|
||||||
- "src/main/scala/net/psforever/services/galaxy/GalaxyAction"
|
- "src/main/scala/net/psforever/services/galaxy/GalaxyAction"
|
||||||
- "src/main/scala/net/psforever/services/galaxy/GalaxyService"
|
- "src/main/scala/net/psforever/services/galaxy/GalaxyService"
|
||||||
- "src/main/scala/net/psforever/services/galaxy/GalaxyServiceMessage.scala"
|
|
||||||
- "src/main/scala/net/psforever/services/galaxy/GalaxyServiceResponse.scala"
|
- "src/main/scala/net/psforever/services/galaxy/GalaxyServiceResponse.scala"
|
||||||
- "src/main/scala/net/psforever/services/hart/HartEvent.scala"
|
- "src/main/scala/net/psforever/services/hart/HartEvent.scala"
|
||||||
- "src/main/scala/net/psforever/services/hart/HartTimerActions.scala"
|
- "src/main/scala/net/psforever/services/hart/HartTimerActions.scala"
|
||||||
- "src/main/scala/net/psforever/services/local/LocalAction"
|
- "src/main/scala/net/psforever/services/local/LocalAction"
|
||||||
- "src/main/scala/net/psforever/services/local/LocalService"
|
- "src/main/scala/net/psforever/services/local/LocalService"
|
||||||
- "src/main/scala/net/psforever/services/local/LocalServiceMessage.scala"
|
|
||||||
- "src/main/scala/net/psforever/services/local/LocalServiceResponse.scala"
|
- "src/main/scala/net/psforever/services/local/LocalServiceResponse.scala"
|
||||||
- "src/main/scala/net/psforever/services/teamwork/SquadServiceMessage.scala"
|
- "src/main/scala/net/psforever/services/teamwork/SquadServiceMessage.scala"
|
||||||
- "src/main/scala/net/psforever/services/teamwork/SquadServiceResponse.scala"
|
- "src/main/scala/net/psforever/services/teamwork/SquadServiceResponse.scala"
|
||||||
- "src/main/scala/net/psforever/services/vehicle/VehicleAction"
|
- "src/main/scala/net/psforever/services/vehicle/VehicleAction"
|
||||||
- "src/main/scala/net/psforever/services/vehicle/VehicleService"
|
- "src/main/scala/net/psforever/services/vehicle/VehicleService"
|
||||||
- "src/main/scala/net/psforever/services/vehicle/VehicleServiceMessage.scala"
|
|
||||||
- "src/main/scala/net/psforever/services/vehicle/VehicleServiceResponse.scala"
|
- "src/main/scala/net/psforever/services/vehicle/VehicleServiceResponse.scala"
|
||||||
- "src/main/scala/net/psforever/services/Service.scala"
|
- "src/main/scala/net/psforever/services/Service.scala"
|
||||||
- "src/main/scala/net/psforever/types"
|
- "src/main/scala/net/psforever/types"
|
||||||
|
|
|
||||||
|
|
@ -1,657 +0,0 @@
|
||||||
// Copyright (c) 2017 PSForever
|
|
||||||
package actor.service
|
|
||||||
|
|
||||||
import akka.actor.Props
|
|
||||||
import akka.testkit.TestProbe
|
|
||||||
|
|
||||||
import scala.concurrent.duration._
|
|
||||||
import actor.base.{ActorTest, FreedContextActorTest}
|
|
||||||
import net.psforever.objects._
|
|
||||||
import net.psforever.objects.avatar.Avatar
|
|
||||||
import net.psforever.objects.guid.NumberPoolHub
|
|
||||||
import net.psforever.objects.guid.source.MaxNumberSource
|
|
||||||
import net.psforever.objects.zones.{Zone, ZoneMap}
|
|
||||||
import net.psforever.packet.game.objectcreate.{DroppedItemData, ObjectClass, ObjectCreateMessageParent, PlacementData}
|
|
||||||
import net.psforever.packet.game.{ObjectCreateMessage, PlayerStateMessageUpstream}
|
|
||||||
import net.psforever.types._
|
|
||||||
import net.psforever.services.{RemoverActor, Service, ServiceManager}
|
|
||||||
import net.psforever.services.avatar._
|
|
||||||
import net.psforever.services.avatar.support.{CorpseEnvelope, DropItemEnvelope, PickupItemEnvelope, ReleaseEnvelope}
|
|
||||||
import net.psforever.services.base.message.{ChangeAmmo, ChangeFireState_Start, ChangeFireState_Stop, ConcealPlayer, ObjectDelete, PlanetsideAttribute, ReloadTool, WeaponDryFire}
|
|
||||||
|
|
||||||
class AvatarService1Test extends ActorTest {
|
|
||||||
"AvatarService" should {
|
|
||||||
"construct" in {
|
|
||||||
ServiceManager.boot(system)
|
|
||||||
system.actorOf(AvatarService(), AvatarServiceTest.TestName)
|
|
||||||
assert(true)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class AvatarService2Test extends ActorTest {
|
|
||||||
"AvatarService" should {
|
|
||||||
"subscribe" in {
|
|
||||||
ServiceManager.boot(system)
|
|
||||||
val service = system.actorOf(AvatarService(), AvatarServiceTest.TestName)
|
|
||||||
service ! Service.Join("test")
|
|
||||||
assert(true)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class AvatarService3Test extends ActorTest {
|
|
||||||
"AvatarService" should {
|
|
||||||
ServiceManager.boot(system)
|
|
||||||
"subscribe to a specific channel" in {
|
|
||||||
val service = system.actorOf(AvatarService(), AvatarServiceTest.TestName)
|
|
||||||
service ! Service.Join("test")
|
|
||||||
service ! Service.LeaveAll
|
|
||||||
assert(true)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class AvatarService4Test extends ActorTest {
|
|
||||||
"AvatarService" should {
|
|
||||||
"subscribe" in {
|
|
||||||
ServiceManager.boot(system)
|
|
||||||
val service = system.actorOf(AvatarService(), AvatarServiceTest.TestName)
|
|
||||||
service ! Service.Join("test")
|
|
||||||
service ! Service.LeaveAll
|
|
||||||
assert(true)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class AvatarService5Test extends ActorTest {
|
|
||||||
"AvatarService" should {
|
|
||||||
"pass an unhandled message" in {
|
|
||||||
ServiceManager.boot(system)
|
|
||||||
val service = system.actorOf(AvatarService(), AvatarServiceTest.TestName)
|
|
||||||
service ! Service.Join("test")
|
|
||||||
service ! "hello"
|
|
||||||
expectNoMessage()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class ArmorChangedTest extends ActorTest {
|
|
||||||
"AvatarService" should {
|
|
||||||
"pass ArmorChanged" in {
|
|
||||||
ServiceManager.boot(system)
|
|
||||||
val service = system.actorOf(AvatarService(), AvatarServiceTest.TestName)
|
|
||||||
service ! Service.Join("test")
|
|
||||||
service ! AvatarServiceMessage("test", PlanetSideGUID(10), AvatarAction.ArmorChanged(ExoSuitType.Reinforced, 0))
|
|
||||||
expectMsg(
|
|
||||||
AvatarServiceResponse(
|
|
||||||
"/test/Avatar",
|
|
||||||
PlanetSideGUID(10),
|
|
||||||
AvatarAction.ArmorChanged(ExoSuitType.Reinforced, 0)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class ConcealPlayerTest extends ActorTest {
|
|
||||||
"AvatarService" should {
|
|
||||||
"pass ConcealPlayer" in {
|
|
||||||
ServiceManager.boot(system)
|
|
||||||
val service = system.actorOf(AvatarService(), AvatarServiceTest.TestName)
|
|
||||||
service ! Service.Join("test")
|
|
||||||
service ! AvatarServiceMessage("test", ConcealPlayer(PlanetSideGUID(10)))
|
|
||||||
expectMsg(AvatarServiceResponse("/test/Avatar", PlanetSideGUID(10), ConcealPlayer(PlanetSideGUID(10))))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class EquipmentInHandTest extends ActorTest {
|
|
||||||
ServiceManager.boot(system)
|
|
||||||
val service = system.actorOf(AvatarService(), "release-test-service")
|
|
||||||
val toolDef = GlobalDefinitions.beamer
|
|
||||||
val tool = Tool(toolDef)
|
|
||||||
tool.GUID = PlanetSideGUID(40)
|
|
||||||
tool.AmmoSlots.head.Box.GUID = PlanetSideGUID(41)
|
|
||||||
val pkt = ObjectCreateMessage(
|
|
||||||
toolDef.ObjectId,
|
|
||||||
tool.GUID,
|
|
||||||
ObjectCreateMessageParent(PlanetSideGUID(11), 2),
|
|
||||||
toolDef.Packet.ConstructorData(tool).get
|
|
||||||
)
|
|
||||||
|
|
||||||
"AvatarService" should {
|
|
||||||
"pass EquipmentInHand" in {
|
|
||||||
service ! Service.Join("test")
|
|
||||||
service ! AvatarServiceMessage(
|
|
||||||
"test",
|
|
||||||
PlanetSideGUID(10),
|
|
||||||
AvatarAction.EquipmentInHand(PlanetSideGUID(11), 2, tool)
|
|
||||||
)
|
|
||||||
expectMsg(AvatarServiceResponse("/test/Avatar", PlanetSideGUID(10), AvatarAction.EquipmentCreatedInHand(pkt)))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class DroptItemTest extends ActorTest {
|
|
||||||
ServiceManager.boot(system)
|
|
||||||
val service = system.actorOf(AvatarService(), "release-test-service")
|
|
||||||
val toolDef = GlobalDefinitions.beamer
|
|
||||||
val tool = Tool(toolDef)
|
|
||||||
tool.Position = Vector3(1, 2, 3)
|
|
||||||
tool.Orientation = Vector3(4, 5, 6)
|
|
||||||
tool.GUID = PlanetSideGUID(40)
|
|
||||||
tool.AmmoSlots.head.Box.GUID = PlanetSideGUID(41)
|
|
||||||
val pkt = ObjectCreateMessage(
|
|
||||||
toolDef.ObjectId,
|
|
||||||
tool.GUID,
|
|
||||||
DroppedItemData(
|
|
||||||
PlacementData(tool.Position, tool.Orientation),
|
|
||||||
toolDef.Packet.ConstructorData(tool).get
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
"AvatarService" should {
|
|
||||||
"pass DropItem" in {
|
|
||||||
service ! Service.Join("test")
|
|
||||||
service ! DropItemEnvelope("test", PlanetSideGUID(10), AvatarAction.DropItem(tool), Zone.Nowhere)
|
|
||||||
expectMsg(AvatarServiceResponse("/test/Avatar", PlanetSideGUID(10), AvatarAction.DropCreatedItem(pkt)))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class LoadPlayerTest extends ActorTest {
|
|
||||||
val obj = Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.VS, CharacterSex.Female, 1, CharacterVoice.Voice1))
|
|
||||||
obj.GUID = PlanetSideGUID(10)
|
|
||||||
obj.Slot(5).Equipment.get.GUID = PlanetSideGUID(11)
|
|
||||||
val c1data = obj.Definition.Packet.DetailedConstructorData(obj).get
|
|
||||||
val pkt1 = ObjectCreateMessage(ObjectClass.avatar, PlanetSideGUID(10), c1data)
|
|
||||||
val parent = ObjectCreateMessageParent(PlanetSideGUID(12), 0)
|
|
||||||
obj.VehicleSeated = PlanetSideGUID(12)
|
|
||||||
val c2data = obj.Definition.Packet.DetailedConstructorData(obj).get
|
|
||||||
val pkt2 = ObjectCreateMessage(ObjectClass.avatar, PlanetSideGUID(10), parent, c2data)
|
|
||||||
|
|
||||||
"AvatarService" should {
|
|
||||||
"pass LoadPlayer" in {
|
|
||||||
ServiceManager.boot(system)
|
|
||||||
val service = system.actorOf(AvatarService(), AvatarServiceTest.TestName)
|
|
||||||
service ! Service.Join("test")
|
|
||||||
//no parent data
|
|
||||||
service ! AvatarServiceMessage(
|
|
||||||
"test",
|
|
||||||
PlanetSideGUID(20),
|
|
||||||
AvatarAction.LoadPlayer(ObjectClass.avatar, PlanetSideGUID(10), c1data, None)
|
|
||||||
)
|
|
||||||
expectMsg(AvatarServiceResponse("/test/Avatar", PlanetSideGUID(20), AvatarAction.LoadCreatedPlayer(pkt1)))
|
|
||||||
//parent data
|
|
||||||
service ! AvatarServiceMessage(
|
|
||||||
"test",
|
|
||||||
PlanetSideGUID(20),
|
|
||||||
AvatarAction.LoadPlayer(ObjectClass.avatar, PlanetSideGUID(10), c2data, Some(parent))
|
|
||||||
)
|
|
||||||
expectMsg(AvatarServiceResponse("/test/Avatar", PlanetSideGUID(20), AvatarAction.LoadCreatedPlayer(pkt2)))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class ObjectDeleteTest extends ActorTest {
|
|
||||||
"AvatarService" should {
|
|
||||||
"pass ObjectDelete" in {
|
|
||||||
ServiceManager.boot(system)
|
|
||||||
val service = system.actorOf(AvatarService(), AvatarServiceTest.TestName)
|
|
||||||
service ! Service.Join("test")
|
|
||||||
service ! AvatarServiceMessage("test", PlanetSideGUID(10), ObjectDelete(PlanetSideGUID(11)))
|
|
||||||
expectMsg(
|
|
||||||
AvatarServiceResponse("/test/Avatar", PlanetSideGUID(10), ObjectDelete(PlanetSideGUID(11), 0))
|
|
||||||
)
|
|
||||||
|
|
||||||
service ! AvatarServiceMessage("test", PlanetSideGUID(10), ObjectDelete(PlanetSideGUID(11), 55))
|
|
||||||
expectMsg(
|
|
||||||
AvatarServiceResponse("/test/Avatar", PlanetSideGUID(10), ObjectDelete(PlanetSideGUID(11), 55))
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class ObjectHeldTest extends ActorTest {
|
|
||||||
"AvatarService" should {
|
|
||||||
"pass ObjectHeld" in {
|
|
||||||
ServiceManager.boot(system)
|
|
||||||
val service = system.actorOf(AvatarService(), AvatarServiceTest.TestName)
|
|
||||||
service ! Service.Join("test")
|
|
||||||
service ! AvatarServiceMessage("test", PlanetSideGUID(10), AvatarAction.ObjectHeld(1, 2))
|
|
||||||
expectMsg(AvatarServiceResponse("/test/Avatar", PlanetSideGUID(10), AvatarAction.ObjectHeld(1, 2)))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class PutDownFDUTest extends ActorTest {
|
|
||||||
"AvatarService" should {
|
|
||||||
"pass PutDownFDU" in {
|
|
||||||
ServiceManager.boot(system)
|
|
||||||
val service = system.actorOf(AvatarService(), AvatarServiceTest.TestName)
|
|
||||||
service ! Service.Join("test")
|
|
||||||
service ! AvatarServiceMessage("test", AvatarAction.PutDownFDU(PlanetSideGUID(10)))
|
|
||||||
expectMsg(
|
|
||||||
AvatarServiceResponse("/test/Avatar", PlanetSideGUID(10), AvatarAction.PutDownFDU(PlanetSideGUID(10)))
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class PlanetsideAttributeTest extends ActorTest {
|
|
||||||
"AvatarService" should {
|
|
||||||
"pass PlanetsideAttribute" in {
|
|
||||||
ServiceManager.boot(system)
|
|
||||||
val service = system.actorOf(AvatarService(), AvatarServiceTest.TestName)
|
|
||||||
service ! Service.Join("test")
|
|
||||||
service ! AvatarServiceMessage("test", PlanetSideGUID(10), PlanetsideAttribute(PlanetSideGUID(10), 5, 1200L))
|
|
||||||
expectMsg(AvatarServiceResponse("/test/Avatar", PlanetSideGUID(10), PlanetsideAttribute(PlanetSideGUID(10), 5, 1200L)))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class PlayerStateTest extends ActorTest {
|
|
||||||
val msg = PlayerStateMessageUpstream(
|
|
||||||
PlanetSideGUID(75),
|
|
||||||
Vector3(3694.1094f, 2735.4531f, 90.84375f),
|
|
||||||
Some(Vector3(4.375f, 2.59375f, 0.0f)),
|
|
||||||
61.875f,
|
|
||||||
351.5625f,
|
|
||||||
0.0f,
|
|
||||||
136,
|
|
||||||
0,
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
112,
|
|
||||||
0
|
|
||||||
)
|
|
||||||
|
|
||||||
"AvatarService" should {
|
|
||||||
"pass PlayerState" in {
|
|
||||||
ServiceManager.boot(system)
|
|
||||||
val service = system.actorOf(AvatarService(), AvatarServiceTest.TestName)
|
|
||||||
service ! Service.Join("test")
|
|
||||||
service ! AvatarServiceMessage(
|
|
||||||
"test",
|
|
||||||
PlanetSideGUID(10),
|
|
||||||
AvatarAction.PlayerState(
|
|
||||||
Vector3(3694.1094f, 2735.4531f, 90.84375f),
|
|
||||||
Some(Vector3(4.375f, 2.59375f, 0.0f)),
|
|
||||||
61.875f,
|
|
||||||
351.5625f,
|
|
||||||
0.0f,
|
|
||||||
136,
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
false
|
|
||||||
)
|
|
||||||
)
|
|
||||||
expectMsg(
|
|
||||||
AvatarServiceResponse(
|
|
||||||
"/test/Avatar",
|
|
||||||
PlanetSideGUID(10),
|
|
||||||
AvatarAction.PlayerState(
|
|
||||||
Vector3(3694.1094f, 2735.4531f, 90.84375f),
|
|
||||||
Some(Vector3(4.375f, 2.59375f, 0.0f)),
|
|
||||||
61.875f,
|
|
||||||
351.5625f,
|
|
||||||
0.0f,
|
|
||||||
136,
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
false
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class PickupItemTest extends ActorTest {
|
|
||||||
val obj = Player(Avatar(0, "TestCharacter", PlanetSideEmpire.VS, CharacterSex.Female, 1, CharacterVoice.Voice1))
|
|
||||||
val tool = Tool(GlobalDefinitions.beamer)
|
|
||||||
tool.GUID = PlanetSideGUID(40)
|
|
||||||
|
|
||||||
"pass PickUpItem" in {
|
|
||||||
ServiceManager.boot(system)
|
|
||||||
val service = system.actorOf(AvatarService(), AvatarServiceTest.TestName)
|
|
||||||
service ! Service.Join("test")
|
|
||||||
service ! PickupItemEnvelope("test", AvatarAction.PickupItem(tool), Zone.Nowhere)
|
|
||||||
expectMsg(AvatarServiceResponse("/test/Avatar", PlanetSideGUID(10), ObjectDelete(tool.GUID, 0)))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class ReloadTest extends ActorTest {
|
|
||||||
"AvatarService" should {
|
|
||||||
"pass Reload" in {
|
|
||||||
ServiceManager.boot(system)
|
|
||||||
val service = system.actorOf(AvatarService(), AvatarServiceTest.TestName)
|
|
||||||
service ! Service.Join("test")
|
|
||||||
service ! AvatarServiceMessage("test", PlanetSideGUID(10), ReloadTool(PlanetSideGUID(40)))
|
|
||||||
expectMsg(AvatarServiceResponse("/test/Avatar", PlanetSideGUID(10), ReloadTool(PlanetSideGUID(40))))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class ChangeAmmoTest extends ActorTest {
|
|
||||||
val ammoDef = GlobalDefinitions.energy_cell
|
|
||||||
val ammoBox = AmmoBox(ammoDef)
|
|
||||||
|
|
||||||
"AvatarService" should {
|
|
||||||
"pass ChangeAmmo" in {
|
|
||||||
ServiceManager.boot(system)
|
|
||||||
val service = system.actorOf(AvatarService(), AvatarServiceTest.TestName)
|
|
||||||
service ! Service.Join("test")
|
|
||||||
service ! AvatarServiceMessage(
|
|
||||||
"test",
|
|
||||||
PlanetSideGUID(10),
|
|
||||||
ChangeAmmo(
|
|
||||||
PlanetSideGUID(40),
|
|
||||||
0,
|
|
||||||
PlanetSideGUID(40),
|
|
||||||
ammoDef.ObjectId,
|
|
||||||
PlanetSideGUID(41),
|
|
||||||
ammoDef.Packet.ConstructorData(ammoBox).get
|
|
||||||
)
|
|
||||||
)
|
|
||||||
expectMsg(
|
|
||||||
AvatarServiceResponse(
|
|
||||||
"/test/Avatar",
|
|
||||||
PlanetSideGUID(10),
|
|
||||||
ChangeAmmo(
|
|
||||||
PlanetSideGUID(40),
|
|
||||||
0,
|
|
||||||
PlanetSideGUID(40),
|
|
||||||
ammoDef.ObjectId,
|
|
||||||
PlanetSideGUID(41),
|
|
||||||
ammoDef.Packet.ConstructorData(ammoBox).get
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class ChangeFireModeTest extends ActorTest {
|
|
||||||
val ammoDef = GlobalDefinitions.energy_cell
|
|
||||||
val ammoBox = AmmoBox(ammoDef)
|
|
||||||
|
|
||||||
"AvatarService" should {
|
|
||||||
"pass ChangeFireMode" in {
|
|
||||||
ServiceManager.boot(system)
|
|
||||||
val service = system.actorOf(AvatarService(), AvatarServiceTest.TestName)
|
|
||||||
service ! Service.Join("test")
|
|
||||||
service ! AvatarServiceMessage("test", PlanetSideGUID(10), AvatarAction.ChangeFireMode(PlanetSideGUID(40), 0))
|
|
||||||
expectMsg(
|
|
||||||
AvatarServiceResponse("/test/Avatar", PlanetSideGUID(10), AvatarAction.ChangeFireMode(PlanetSideGUID(40), 0))
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class ChangeFireStateStartTest extends ActorTest {
|
|
||||||
"AvatarService" should {
|
|
||||||
"pass ChangeFireState_Start" in {
|
|
||||||
ServiceManager.boot(system)
|
|
||||||
val service = system.actorOf(AvatarService(), AvatarServiceTest.TestName)
|
|
||||||
service ! Service.Join("test")
|
|
||||||
service ! AvatarServiceMessage("test", PlanetSideGUID(10), ChangeFireState_Start(PlanetSideGUID(40)))
|
|
||||||
expectMsg(
|
|
||||||
AvatarServiceResponse(
|
|
||||||
"/test/Avatar",
|
|
||||||
PlanetSideGUID(10),
|
|
||||||
ChangeFireState_Start(PlanetSideGUID(40))
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class ChangeFireStateStopTest extends ActorTest {
|
|
||||||
"AvatarService" should {
|
|
||||||
"pass ChangeFireState_Stop" in {
|
|
||||||
ServiceManager.boot(system)
|
|
||||||
val service = system.actorOf(AvatarService(), AvatarServiceTest.TestName)
|
|
||||||
service ! Service.Join("test")
|
|
||||||
service ! AvatarServiceMessage("test", PlanetSideGUID(10), ChangeFireState_Stop(PlanetSideGUID(40)))
|
|
||||||
expectMsg(
|
|
||||||
AvatarServiceResponse(
|
|
||||||
"/test/Avatar",
|
|
||||||
PlanetSideGUID(10),
|
|
||||||
ChangeFireState_Stop(PlanetSideGUID(40))
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class WeaponDryFireTest extends ActorTest {
|
|
||||||
"AvatarService" should {
|
|
||||||
"pass WeaponDryFire" in {
|
|
||||||
ServiceManager.boot(system)
|
|
||||||
val service = system.actorOf(AvatarService(), AvatarServiceTest.TestName)
|
|
||||||
service ! Service.Join("test")
|
|
||||||
service ! AvatarServiceMessage("test", PlanetSideGUID(10), WeaponDryFire(PlanetSideGUID(40)))
|
|
||||||
expectMsg(
|
|
||||||
AvatarServiceResponse("/test/Avatar", PlanetSideGUID(10), WeaponDryFire(PlanetSideGUID(40)))
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class AvatarStowEquipmentTest extends ActorTest {
|
|
||||||
val tool = Tool(GlobalDefinitions.beamer)
|
|
||||||
|
|
||||||
"AvatarService" should {
|
|
||||||
"pass StowEquipment" in {
|
|
||||||
ServiceManager.boot(system)
|
|
||||||
val service = system.actorOf(AvatarService(), AvatarServiceTest.TestName)
|
|
||||||
service ! Service.Join("test")
|
|
||||||
service ! AvatarServiceMessage(
|
|
||||||
"test",
|
|
||||||
PlanetSideGUID(10),
|
|
||||||
AvatarAction.StowEquipment(PlanetSideGUID(11), 2, tool)
|
|
||||||
)
|
|
||||||
expectMsg(
|
|
||||||
AvatarServiceResponse(
|
|
||||||
"/test/Avatar",
|
|
||||||
PlanetSideGUID(10),
|
|
||||||
AvatarAction.StowEquipment(PlanetSideGUID(11), 2, tool)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
Preparation for these three Release tests is involved.
|
|
||||||
The ServiceManager must be set up correctly.
|
|
||||||
The Zone needs to be set up and initialized properly with a ZoneActor.
|
|
||||||
The ZoneActor builds the GUID Actor and the ZonePopulationActor.
|
|
||||||
|
|
||||||
ALL of these Actors will talk to each other.
|
|
||||||
The lines of communication can short circuit if the next Actor does not have the correct information.
|
|
||||||
Putting Actor startup in the main class, outside of the body of the test, helps.
|
|
||||||
Frequent pauses to allow everything to sort their messages also helps.
|
|
||||||
Even with all this work, the tests have a high chance of failure just due to being asynchronous.
|
|
||||||
*/
|
|
||||||
class AvatarReleaseTest extends FreedContextActorTest {
|
|
||||||
val guid: NumberPoolHub = new NumberPoolHub(new MaxNumberSource(15))
|
|
||||||
val zone = new Zone("test", new ZoneMap("test-map"), 0) {
|
|
||||||
override def SetupNumberPools() : Unit = { }
|
|
||||||
GUID(guid)
|
|
||||||
}
|
|
||||||
zone.init(context)
|
|
||||||
val obj = Player(Avatar(0, "TestCharacter", PlanetSideEmpire.VS, CharacterSex.Female, 1, CharacterVoice.Voice1))
|
|
||||||
guid.register(obj)
|
|
||||||
guid.register(obj.Slot(5).Equipment.get)
|
|
||||||
obj.Zone = zone
|
|
||||||
obj.Release
|
|
||||||
val subscriber = new TestProbe(system)
|
|
||||||
|
|
||||||
"AvatarService" should {
|
|
||||||
"pass Release" in {
|
|
||||||
expectNoMessage(100 milliseconds) //spacer
|
|
||||||
|
|
||||||
zone.AvatarEvents.tell(Service.Join("test"), subscriber.ref)
|
|
||||||
assert(zone.Corpses.isEmpty)
|
|
||||||
zone.Population ! Zone.Corpse.Add(obj)
|
|
||||||
subscriber.expectNoMessage(200 milliseconds) //spacer
|
|
||||||
|
|
||||||
assert(zone.Corpses.size == 1)
|
|
||||||
assert(obj.HasGUID)
|
|
||||||
val guid = obj.GUID
|
|
||||||
zone.AvatarEvents ! ReleaseEnvelope("test", AvatarAction.Release(obj, zone, Some(1 second))) //alive for one second
|
|
||||||
|
|
||||||
val reply1 = subscriber.receiveOne(200 milliseconds)
|
|
||||||
assert(reply1.isInstanceOf[AvatarServiceResponse])
|
|
||||||
val reply1msg = reply1.asInstanceOf[AvatarServiceResponse]
|
|
||||||
assert(reply1msg.channel == "/test/Avatar")
|
|
||||||
assert(reply1msg.filter == guid)
|
|
||||||
assert(reply1msg.reply.isInstanceOf[AvatarAction.Release])
|
|
||||||
assert(reply1msg.reply.asInstanceOf[AvatarAction.Release].player == obj)
|
|
||||||
|
|
||||||
val reply2 = subscriber.receiveOne(2 seconds)
|
|
||||||
assert(reply2.isInstanceOf[AvatarServiceResponse])
|
|
||||||
val reply2msg = reply2.asInstanceOf[AvatarServiceResponse]
|
|
||||||
assert(reply2msg.channel.equals("/test/Avatar"))
|
|
||||||
assert(reply2msg.filter == Service.defaultPlayerGUID)
|
|
||||||
assert(reply2msg.reply.isInstanceOf[ObjectDelete])
|
|
||||||
assert(reply2msg.reply.asInstanceOf[ObjectDelete].obj_guid == guid)
|
|
||||||
|
|
||||||
subscriber.expectNoMessage(1 seconds)
|
|
||||||
assert(zone.Corpses.isEmpty)
|
|
||||||
assert(!obj.HasGUID)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class AvatarReleaseEarly1Test extends FreedContextActorTest {
|
|
||||||
val guid: NumberPoolHub = new NumberPoolHub(new MaxNumberSource(15))
|
|
||||||
val zone = new Zone("test", new ZoneMap("test-map"), 0) {
|
|
||||||
override def SetupNumberPools() : Unit = { }
|
|
||||||
GUID(guid)
|
|
||||||
}
|
|
||||||
zone.init(context)
|
|
||||||
val obj = Player(Avatar(0, "TestCharacter", PlanetSideEmpire.VS, CharacterSex.Female, 1, CharacterVoice.Voice1))
|
|
||||||
guid.register(obj)
|
|
||||||
guid.register(obj.Slot(5).Equipment.get)
|
|
||||||
obj.Zone = zone
|
|
||||||
obj.Release
|
|
||||||
val subscriber = new TestProbe(system)
|
|
||||||
|
|
||||||
"AvatarService" should {
|
|
||||||
"pass Release" in {
|
|
||||||
expectNoMessage(100 milliseconds) //spacer
|
|
||||||
|
|
||||||
zone.AvatarEvents.tell(Service.Join("test"), subscriber.ref)
|
|
||||||
assert(zone.Corpses.isEmpty)
|
|
||||||
zone.Population ! Zone.Corpse.Add(obj)
|
|
||||||
subscriber.expectNoMessage(200 milliseconds) //spacer
|
|
||||||
|
|
||||||
assert(zone.Corpses.size == 1)
|
|
||||||
assert(obj.HasGUID)
|
|
||||||
val guid = obj.GUID
|
|
||||||
zone.AvatarEvents ! ReleaseEnvelope("test", AvatarAction.Release(obj, zone)) //3+ minutes!
|
|
||||||
|
|
||||||
val reply1 = subscriber.receiveOne(200 milliseconds)
|
|
||||||
assert(reply1.isInstanceOf[AvatarServiceResponse])
|
|
||||||
val reply1msg = reply1.asInstanceOf[AvatarServiceResponse]
|
|
||||||
assert(reply1msg.channel == "/test/Avatar")
|
|
||||||
assert(reply1msg.filter == guid)
|
|
||||||
assert(reply1msg.reply.isInstanceOf[AvatarAction.Release])
|
|
||||||
assert(reply1msg.reply.asInstanceOf[AvatarAction.Release].player == obj)
|
|
||||||
|
|
||||||
zone.AvatarEvents ! CorpseEnvelope(RemoverActor.HurrySpecific(List(obj), zone)) //IMPORTANT: ONE ENTRY
|
|
||||||
val reply2 = subscriber.receiveOne(200 milliseconds)
|
|
||||||
assert(reply2.isInstanceOf[AvatarServiceResponse])
|
|
||||||
val reply2msg = reply2.asInstanceOf[AvatarServiceResponse]
|
|
||||||
assert(reply2msg.channel.equals("/test/Avatar"))
|
|
||||||
assert(reply2msg.filter == Service.defaultPlayerGUID)
|
|
||||||
assert(reply2msg.reply.isInstanceOf[ObjectDelete])
|
|
||||||
assert(reply2msg.reply.asInstanceOf[ObjectDelete].obj_guid == guid)
|
|
||||||
|
|
||||||
subscriber.expectNoMessage(1 seconds)
|
|
||||||
assert(zone.Corpses.isEmpty)
|
|
||||||
assert(!obj.HasGUID)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class AvatarReleaseEarly2Test extends FreedContextActorTest {
|
|
||||||
val guid: NumberPoolHub = new NumberPoolHub(new MaxNumberSource(15))
|
|
||||||
val zone = new Zone("test", new ZoneMap("test-map"), 0) {
|
|
||||||
override def SetupNumberPools() : Unit = { }
|
|
||||||
GUID(guid)
|
|
||||||
}
|
|
||||||
zone.init(context)
|
|
||||||
val obj = Player(Avatar(0, "TestCharacter", PlanetSideEmpire.VS, CharacterSex.Female, 1, CharacterVoice.Voice1))
|
|
||||||
guid.register(obj)
|
|
||||||
guid.register(obj.Slot(5).Equipment.get)
|
|
||||||
obj.Zone = zone
|
|
||||||
obj.Release
|
|
||||||
val objAlt = Player(
|
|
||||||
Avatar(0, "TestCharacter2", PlanetSideEmpire.NC, CharacterSex.Male, 1, CharacterVoice.Voice1)
|
|
||||||
) //necessary clutter
|
|
||||||
objAlt.GUID = PlanetSideGUID(3)
|
|
||||||
objAlt.Slot(5).Equipment.get.GUID = PlanetSideGUID(4)
|
|
||||||
objAlt.Zone = zone
|
|
||||||
val subscriber = new TestProbe(system)
|
|
||||||
|
|
||||||
"AvatarService" should {
|
|
||||||
"pass Release" in {
|
|
||||||
expectNoMessage(100 milliseconds) //spacer
|
|
||||||
|
|
||||||
zone.AvatarEvents.tell(Service.Join("test"), subscriber.ref)
|
|
||||||
assert(zone.Corpses.isEmpty)
|
|
||||||
zone.Population ! Zone.Corpse.Add(obj)
|
|
||||||
subscriber.expectNoMessage(200 milliseconds) //spacer
|
|
||||||
|
|
||||||
assert(zone.Corpses.size == 1)
|
|
||||||
assert(obj.HasGUID)
|
|
||||||
val guid = obj.GUID
|
|
||||||
zone.AvatarEvents ! ReleaseEnvelope("test", AvatarAction.Release(obj, zone)) //3+ minutes!
|
|
||||||
|
|
||||||
val reply1 = subscriber.receiveOne(200 milliseconds)
|
|
||||||
assert(reply1.isInstanceOf[AvatarServiceResponse])
|
|
||||||
val reply1msg = reply1.asInstanceOf[AvatarServiceResponse]
|
|
||||||
assert(reply1msg.channel == "/test/Avatar")
|
|
||||||
assert(reply1msg.filter == guid)
|
|
||||||
assert(reply1msg.reply.isInstanceOf[AvatarAction.Release])
|
|
||||||
assert(reply1msg.reply.asInstanceOf[AvatarAction.Release].player == obj)
|
|
||||||
|
|
||||||
zone.AvatarEvents ! CorpseEnvelope(
|
|
||||||
RemoverActor.HurrySpecific(List(objAlt, obj), zone)
|
|
||||||
) //IMPORTANT: TWO ENTRIES
|
|
||||||
val reply2 = subscriber.receiveOne(100 milliseconds)
|
|
||||||
assert(reply2.isInstanceOf[AvatarServiceResponse])
|
|
||||||
val reply2msg = reply2.asInstanceOf[AvatarServiceResponse]
|
|
||||||
assert(reply2msg.channel.equals("/test/Avatar"))
|
|
||||||
assert(reply2msg.filter == Service.defaultPlayerGUID)
|
|
||||||
assert(reply2msg.reply.isInstanceOf[AvatarAction.ObjectDelete])
|
|
||||||
assert(reply2msg.reply.asInstanceOf[AvatarAction.ObjectDelete].item_guid == guid)
|
|
||||||
|
|
||||||
subscriber.expectNoMessage(1 seconds)
|
|
||||||
assert(zone.Corpses.isEmpty)
|
|
||||||
assert(!obj.HasGUID)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
object AvatarServiceTest {
|
|
||||||
import java.util.concurrent.atomic.AtomicInteger
|
|
||||||
private val number = new AtomicInteger(1)
|
|
||||||
|
|
||||||
def TestName: String = {
|
|
||||||
s"service${number.getAndIncrement()}"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -48,8 +48,9 @@ import net.psforever.objects.vital.{DamagingActivity, HealFromImplant, HealingAc
|
||||||
import net.psforever.packet.game.objectcreate.{BasicCharacterData, ObjectClass, RibbonBars}
|
import net.psforever.packet.game.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.envelope.MessageEnvelope
|
||||||
import net.psforever.services.base.message.{SendResponse, PlanetsideAttribute}
|
import net.psforever.services.base.message.{SendResponse, PlanetsideAttribute}
|
||||||
import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage}
|
import net.psforever.services.avatar.AvatarAction
|
||||||
import net.psforever.types.{
|
import net.psforever.types.{
|
||||||
CharacterSex,
|
CharacterSex,
|
||||||
CharacterVoice,
|
CharacterVoice,
|
||||||
|
|
@ -584,7 +585,7 @@ object AvatarActor {
|
||||||
|
|
||||||
def displayLookingForSquad(session: Session, state: Int): Unit = {
|
def displayLookingForSquad(session: Session, state: Int): Unit = {
|
||||||
val player = session.player
|
val player = session.player
|
||||||
session.zone.AvatarEvents ! AvatarServiceMessage(
|
session.zone.AvatarEvents ! MessageEnvelope(
|
||||||
player.Faction.toString,
|
player.Faction.toString,
|
||||||
player.GUID,
|
player.GUID,
|
||||||
PlanetsideAttribute(player.GUID, 53, state)
|
PlanetsideAttribute(player.GUID, 53, state)
|
||||||
|
|
@ -1383,7 +1384,7 @@ class AvatarActor(
|
||||||
case SetLookingForSquad(lfs) =>
|
case SetLookingForSquad(lfs) =>
|
||||||
avatarCopy(avatar.copy(lookingForSquad = lfs))
|
avatarCopy(avatar.copy(lookingForSquad = lfs))
|
||||||
sessionActor ! SessionActor.SendResponse(PlanetsideAttributeMessage(session.get.player.GUID, 53, 0))
|
sessionActor ! SessionActor.SendResponse(PlanetsideAttributeMessage(session.get.player.GUID, 53, 0))
|
||||||
session.get.zone.AvatarEvents ! AvatarServiceMessage(
|
session.get.zone.AvatarEvents ! MessageEnvelope(
|
||||||
avatar.faction.toString,
|
avatar.faction.toString,
|
||||||
session.get.player.GUID,
|
session.get.player.GUID,
|
||||||
PlanetsideAttribute(session.get.player.GUID, 53, if (lfs) 1 else 0)
|
PlanetsideAttribute(session.get.player.GUID, 53, if (lfs) 1 else 0)
|
||||||
|
|
@ -1795,7 +1796,7 @@ class AvatarActor(
|
||||||
)
|
)
|
||||||
val player = session.get.player
|
val player = session.get.player
|
||||||
val zone = player.Zone
|
val zone = player.Zone
|
||||||
zone.AvatarEvents ! AvatarServiceMessage(
|
zone.AvatarEvents ! MessageEnvelope(
|
||||||
zone.id,
|
zone.id,
|
||||||
SendResponse(DisplayedAwardMessage(player.GUID, ribbon, bar))
|
SendResponse(DisplayedAwardMessage(player.GUID, ribbon, bar))
|
||||||
)
|
)
|
||||||
|
|
@ -2074,7 +2075,7 @@ class AvatarActor(
|
||||||
case Success(_) =>
|
case Success(_) =>
|
||||||
val zone = session.get.zone
|
val zone = session.get.zone
|
||||||
avatarCopy(avatar.copy(decoration = avatar.decoration.copy(cosmetics = Some(cosmetics))))
|
avatarCopy(avatar.copy(decoration = avatar.decoration.copy(cosmetics = Some(cosmetics))))
|
||||||
zone.AvatarEvents ! AvatarServiceMessage(
|
zone.AvatarEvents ! MessageEnvelope(
|
||||||
zone.id,
|
zone.id,
|
||||||
PlanetsideAttribute(
|
PlanetsideAttribute(
|
||||||
session.get.player.GUID,
|
session.get.player.GUID,
|
||||||
|
|
@ -3001,13 +3002,13 @@ class AvatarActor(
|
||||||
val next = BattleRank.withExperience(newBep).value
|
val next = BattleRank.withExperience(newBep).value
|
||||||
val br24 = BattleRank.BR24.value
|
val br24 = BattleRank.BR24.value
|
||||||
sessionActor ! SessionActor.SendResponse(BattleExperienceMessage(pguid, newBep, localModifier))
|
sessionActor ! SessionActor.SendResponse(BattleExperienceMessage(pguid, newBep, localModifier))
|
||||||
events ! AvatarServiceMessage(zoneId, PlanetsideAttribute(pguid, 17, newBep))
|
events ! MessageEnvelope(zoneId, PlanetsideAttribute(pguid, 17, newBep))
|
||||||
if (current < br24 && next >= br24 || current >= br24 && next < br24) {
|
if (current < br24 && next >= br24 || current >= br24 && next < br24) {
|
||||||
setCosmetics(Set()).onComplete { _ =>
|
setCosmetics(Set()).onComplete { _ =>
|
||||||
val evts = events
|
val evts = events
|
||||||
val name = player.Name
|
val name = player.Name
|
||||||
val guid = pguid
|
val guid = pguid
|
||||||
evts ! AvatarServiceMessage(name, PlanetsideAttribute(guid, 106, 1)) //set to no helmet
|
evts ! MessageEnvelope(name, PlanetsideAttribute(guid, 106, 1)) //set to no helmet
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// when the level is reduced, take away any implants over the implant slot limit
|
// when the level is reduced, take away any implants over the implant slot limit
|
||||||
|
|
@ -3052,7 +3053,7 @@ class AvatarActor(
|
||||||
val sess = session.get
|
val sess = session.get
|
||||||
val zone = sess.zone
|
val zone = sess.zone
|
||||||
avatar = avatar.copy(cep = cep)
|
avatar = avatar.copy(cep = cep)
|
||||||
zone.AvatarEvents ! AvatarServiceMessage(zone.id, PlanetsideAttribute(sess.player.GUID, 18, cep))
|
zone.AvatarEvents ! MessageEnvelope(zone.id, PlanetsideAttribute(sess.player.GUID, 18, cep))
|
||||||
case Failure(exception) =>
|
case Failure(exception) =>
|
||||||
log.error(exception)("db failure")
|
log.error(exception)("db failure")
|
||||||
}
|
}
|
||||||
|
|
@ -3150,7 +3151,7 @@ class AvatarActor(
|
||||||
if (exp > 0L) {
|
if (exp > 0L) {
|
||||||
setBep(exp, msg)
|
setBep(exp, msg)
|
||||||
zone.actor ! ZoneActor.RewardOurSupporters(playerSource, historyTranscript, killStat, exp)
|
zone.actor ! ZoneActor.RewardOurSupporters(playerSource, historyTranscript, killStat, exp)
|
||||||
zone.AvatarEvents ! AvatarServiceMessage(
|
zone.AvatarEvents ! MessageEnvelope(
|
||||||
player.Name, AvatarAction.ShareKillExperienceWithSquad(player, exp))
|
player.Name, AvatarAction.ShareKillExperienceWithSquad(player, exp))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -3161,7 +3162,7 @@ class AvatarActor(
|
||||||
val _session = session.get
|
val _session = session.get
|
||||||
val zone = _session.zone
|
val zone = _session.zone
|
||||||
val player = _session.player
|
val player = _session.player
|
||||||
zone.AvatarEvents ! AvatarServiceMessage(
|
zone.AvatarEvents ! MessageEnvelope(
|
||||||
player.Name,
|
player.Name,
|
||||||
SendResponse(AvatarStatisticsMessage(DeathStatistic(ScoreCard.deathCount(avatar.scorecard))))
|
SendResponse(AvatarStatisticsMessage(DeathStatistic(ScoreCard.deathCount(avatar.scorecard))))
|
||||||
)
|
)
|
||||||
|
|
@ -3649,7 +3650,7 @@ class AvatarActor(
|
||||||
// Start client-side initialization timer, visible on the character screen
|
// Start client-side initialization timer, visible on the character screen
|
||||||
// Progress accumulates according to the client's knowledge of the implant initialization time
|
// Progress accumulates according to the client's knowledge of the implant initialization time
|
||||||
// What is normally a 60s timer that is set to 120s on the server will still visually update as if 60s
|
// What is normally a 60s timer that is set to 120s on the server will still visually update as if 60s
|
||||||
session.get.zone.AvatarEvents ! AvatarServiceMessage(
|
session.get.zone.AvatarEvents ! MessageEnvelope(
|
||||||
avatar.name,
|
avatar.name,
|
||||||
SendResponse(ActionProgressMessage(slot + 6, actionProgress))
|
SendResponse(ActionProgressMessage(slot + 6, actionProgress))
|
||||||
)
|
)
|
||||||
|
|
@ -3698,7 +3699,7 @@ class AvatarActor(
|
||||||
def stopImplantInitializationTimer(implant: Implant, slot: Int): Implant = {
|
def stopImplantInitializationTimer(implant: Implant, slot: Int): Implant = {
|
||||||
cancelImplantInitializedTimer(slot)
|
cancelImplantInitializedTimer(slot)
|
||||||
//can not formally stop the initialization time on the character information window; set it to 100 to make it look blank
|
//can not formally stop the initialization time on the character information window; set it to 100 to make it look blank
|
||||||
session.get.zone.AvatarEvents ! AvatarServiceMessage(
|
session.get.zone.AvatarEvents ! MessageEnvelope(
|
||||||
avatar.name,
|
avatar.name,
|
||||||
SendResponse(ActionProgressMessage(slot + 6, 100))
|
SendResponse(ActionProgressMessage(slot + 6, 100))
|
||||||
)
|
)
|
||||||
|
|
@ -3768,7 +3769,7 @@ class AvatarActor(
|
||||||
private def deactivateImplant(implant: Implant, slot: Int): Implant = {
|
private def deactivateImplant(implant: Implant, slot: Int): Implant = {
|
||||||
cancelImplantInitializedTimer(slot)
|
cancelImplantInitializedTimer(slot)
|
||||||
// Deactivation sound / effect
|
// Deactivation sound / effect
|
||||||
session.get.zone.AvatarEvents ! AvatarServiceMessage(
|
session.get.zone.AvatarEvents ! MessageEnvelope(
|
||||||
session.get.zone.id,
|
session.get.zone.id,
|
||||||
session.get.player.GUID,
|
session.get.player.GUID,
|
||||||
PlanetsideAttribute(session.get.player.GUID, 28, implant.definition.implantType.value * 2)
|
PlanetsideAttribute(session.get.player.GUID, 28, implant.definition.implantType.value * 2)
|
||||||
|
|
@ -3848,7 +3849,7 @@ class AvatarActor(
|
||||||
val newHealth = player.Health = originalHealth + 1
|
val newHealth = player.Health = originalHealth + 1
|
||||||
val events = zone.AvatarEvents
|
val events = zone.AvatarEvents
|
||||||
player.LogActivity(HealFromImplant(implant.definition.implantType, 1))
|
player.LogActivity(HealFromImplant(implant.definition.implantType, 1))
|
||||||
events ! AvatarServiceMessage(zone.id, PlanetsideAttribute(guid, 0, newHealth))
|
events ! MessageEnvelope(zone.id, PlanetsideAttribute(guid, 0, newHealth))
|
||||||
false
|
false
|
||||||
} else {
|
} else {
|
||||||
!aliveAndWounded
|
!aliveAndWounded
|
||||||
|
|
@ -3860,7 +3861,7 @@ class AvatarActor(
|
||||||
// Activation sound / effect
|
// Activation sound / effect
|
||||||
val sess = session.get
|
val sess = session.get
|
||||||
val zone = sess.zone
|
val zone = sess.zone
|
||||||
zone.AvatarEvents ! AvatarServiceMessage(
|
zone.AvatarEvents ! MessageEnvelope(
|
||||||
zone.id,
|
zone.id,
|
||||||
sess.player.GUID,
|
sess.player.GUID,
|
||||||
PlanetsideAttribute(
|
PlanetsideAttribute(
|
||||||
|
|
@ -3886,7 +3887,7 @@ class AvatarActor(
|
||||||
case (implantOpt @ Some(implant), slot) =>
|
case (implantOpt @ Some(implant), slot) =>
|
||||||
//update ongoing progress
|
//update ongoing progress
|
||||||
val actionProgress = calculateImplantTimerStats(implant, AvatarActor.initializationTime(implant))._3
|
val actionProgress = calculateImplantTimerStats(implant, AvatarActor.initializationTime(implant))._3
|
||||||
session.get.zone.AvatarEvents ! AvatarServiceMessage(
|
session.get.zone.AvatarEvents ! MessageEnvelope(
|
||||||
avatar.name,
|
avatar.name,
|
||||||
SendResponse(ActionProgressMessage(slot + 6, actionProgress))
|
SendResponse(ActionProgressMessage(slot + 6, actionProgress))
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,8 @@ import net.psforever.objects.serverobject.structures.Building
|
||||||
import net.psforever.objects.zones.Zone
|
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
|
||||||
|
import net.psforever.services.base.envelope.MessageEnvelope
|
||||||
import net.psforever.services.base.message.{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}
|
||||||
|
|
@ -319,7 +320,7 @@ class ChatLogic(val ops: ChatOperations, implicit val context: ActorContext) ext
|
||||||
.foreach { spectator =>
|
.foreach { spectator =>
|
||||||
val guid = spectator.GUID
|
val guid = spectator.GUID
|
||||||
val definition = spectator.Definition
|
val definition = spectator.Definition
|
||||||
events ! AvatarServiceMessage(
|
events ! MessageEnvelope(
|
||||||
channel,
|
channel,
|
||||||
guid,
|
guid,
|
||||||
AvatarAction.LoadPlayer(definition.ObjectId, guid, definition.Packet.ConstructorData(spectator).get, None)
|
AvatarAction.LoadPlayer(definition.ObjectId, guid, definition.Packet.ConstructorData(spectator).get, None)
|
||||||
|
|
@ -338,7 +339,7 @@ class ChatLogic(val ops: ChatOperations, implicit val context: ActorContext) ext
|
||||||
.filter(_.spectator)
|
.filter(_.spectator)
|
||||||
.foreach { spectator =>
|
.foreach { spectator =>
|
||||||
val guid = spectator.GUID
|
val guid = spectator.GUID
|
||||||
events ! AvatarServiceMessage(channel, guid, ObjectDelete(guid))
|
events ! MessageEnvelope(channel, guid, ObjectDelete(guid))
|
||||||
}
|
}
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
|
|
@ -391,7 +392,7 @@ class ChatLogic(val ops: ChatOperations, implicit val context: ActorContext) ext
|
||||||
true
|
true
|
||||||
case o: Deployable =>
|
case o: Deployable =>
|
||||||
o.Faction = foundFaction
|
o.Faction = foundFaction
|
||||||
continent.AvatarEvents ! AvatarServiceMessage(
|
continent.AvatarEvents ! MessageEnvelope(
|
||||||
continent.id,
|
continent.id,
|
||||||
SetEmpire(o.GUID, foundFaction)
|
SetEmpire(o.GUID, foundFaction)
|
||||||
)
|
)
|
||||||
|
|
@ -404,7 +405,7 @@ class ChatLogic(val ops: ChatOperations, implicit val context: ActorContext) ext
|
||||||
true
|
true
|
||||||
case o: PlanetSideGameObject with FactionAffinity =>
|
case o: PlanetSideGameObject with FactionAffinity =>
|
||||||
o.Faction = foundFaction
|
o.Faction = foundFaction
|
||||||
continent.AvatarEvents ! AvatarServiceMessage(
|
continent.AvatarEvents ! MessageEnvelope(
|
||||||
continent.id,
|
continent.id,
|
||||||
SetEmpire(o.GUID, foundFaction)
|
SetEmpire(o.GUID, foundFaction)
|
||||||
)
|
)
|
||||||
|
|
@ -511,7 +512,7 @@ class ChatLogic(val ops: ChatOperations, implicit val context: ActorContext) ext
|
||||||
.foreach {
|
.foreach {
|
||||||
case (_, false, _) => ()
|
case (_, false, _) => ()
|
||||||
case (faction, true, _) =>
|
case (faction, true, _) =>
|
||||||
//events ! AvatarServiceMessage(s"$faction", reloadZoneMsg)
|
//events ! MessageEnvelope(s"$faction", reloadZoneMsg)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -10,10 +10,10 @@ import net.psforever.objects.vital.Vitality
|
||||||
import net.psforever.objects.zones.Zone
|
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
|
||||||
|
import net.psforever.services.base.envelope.MessageEnvelope
|
||||||
import net.psforever.services.base.message.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.types.{ChatMessageType, MeritCommendation, PlanetSideGUID}
|
import net.psforever.types.{ChatMessageType, MeritCommendation, PlanetSideGUID}
|
||||||
|
|
||||||
class CustomerServiceRepresentativeMode(data: SessionData) extends ModeLogic {
|
class CustomerServiceRepresentativeMode(data: SessionData) extends ModeLogic {
|
||||||
|
|
@ -149,7 +149,7 @@ case object CustomerServiceRepresentativeMode extends PlayerMode {
|
||||||
packet.DetailedConstructorData(player).get
|
packet.DetailedConstructorData(player).get
|
||||||
))
|
))
|
||||||
data.zoning.spawn.HandleSetCurrentAvatar(player)
|
data.zoning.spawn.HandleSetCurrentAvatar(player)
|
||||||
zone.AvatarEvents ! AvatarServiceMessage(
|
zone.AvatarEvents ! MessageEnvelope(
|
||||||
zone.id,
|
zone.id,
|
||||||
pguid,
|
pguid,
|
||||||
AvatarAction.LoadPlayer(
|
AvatarAction.LoadPlayer(
|
||||||
|
|
@ -182,14 +182,14 @@ case object CustomerServiceRepresentativeMode extends PlayerMode {
|
||||||
player.Health = maxHealthOfPlayer.toInt
|
player.Health = maxHealthOfPlayer.toInt
|
||||||
player.LogActivity(player.ClearHistory().head)
|
player.LogActivity(player.ClearHistory().head)
|
||||||
data.sendResponse(PlanetsideAttributeMessage(guid, 0, maxHealthOfPlayer))
|
data.sendResponse(PlanetsideAttributeMessage(guid, 0, maxHealthOfPlayer))
|
||||||
data.continent.AvatarEvents ! AvatarServiceMessage(zoneid, PlanetsideAttribute(guid, 0, maxHealthOfPlayer))
|
data.continent.AvatarEvents ! MessageEnvelope(zoneid, PlanetsideAttribute(guid, 0, maxHealthOfPlayer))
|
||||||
}
|
}
|
||||||
//below half armor, full armor
|
//below half armor, full armor
|
||||||
val maxArmor = player.MaxArmor.toLong
|
val maxArmor = player.MaxArmor.toLong
|
||||||
if (player.Armor < maxArmor) {
|
if (player.Armor < maxArmor) {
|
||||||
player.Armor = maxArmor.toInt
|
player.Armor = maxArmor.toInt
|
||||||
data.sendResponse(PlanetsideAttributeMessage(guid, 4, maxArmor))
|
data.sendResponse(PlanetsideAttributeMessage(guid, 4, maxArmor))
|
||||||
data.continent.AvatarEvents ! AvatarServiceMessage(zoneid, PlanetsideAttribute(guid, 4, maxArmor))
|
data.continent.AvatarEvents ! MessageEnvelope(zoneid, PlanetsideAttribute(guid, 4, maxArmor))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -202,7 +202,7 @@ case object CustomerServiceRepresentativeMode extends PlayerMode {
|
||||||
val guid = vehicle.GUID
|
val guid = vehicle.GUID
|
||||||
vehicle.Shields = maxShieldsOfVehicle.toInt
|
vehicle.Shields = maxShieldsOfVehicle.toInt
|
||||||
data.sendResponse(PlanetsideAttributeMessage(guid, shieldsUi, maxShieldsOfVehicle))
|
data.sendResponse(PlanetsideAttributeMessage(guid, shieldsUi, maxShieldsOfVehicle))
|
||||||
data.continent.VehicleEvents ! VehicleServiceMessage(
|
data.continent.VehicleEvents ! MessageEnvelope(
|
||||||
data.continent.id,
|
data.continent.id,
|
||||||
PlanetsideAttribute(guid, shieldsUi, maxShieldsOfVehicle)
|
PlanetsideAttribute(guid, shieldsUi, maxShieldsOfVehicle)
|
||||||
)
|
)
|
||||||
|
|
@ -216,7 +216,7 @@ case object CustomerServiceRepresentativeMode extends PlayerMode {
|
||||||
if (obj.Health < maxHealthOf) {
|
if (obj.Health < maxHealthOf) {
|
||||||
obj.Health = maxHealthOf.toInt
|
obj.Health = maxHealthOf.toInt
|
||||||
data.sendResponse(PlanetsideAttributeMessage(guid, 0, maxHealthOf))
|
data.sendResponse(PlanetsideAttributeMessage(guid, 0, maxHealthOf))
|
||||||
data.continent.VehicleEvents ! VehicleServiceMessage(
|
data.continent.VehicleEvents ! MessageEnvelope(
|
||||||
data.continent.id,
|
data.continent.id,
|
||||||
PlanetsideAttribute(guid, 0, maxHealthOf)
|
PlanetsideAttribute(guid, 0, maxHealthOf)
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -33,10 +33,11 @@ import net.psforever.objects.zones.{ZoneProjectile, Zoning}
|
||||||
import net.psforever.packet.PlanetSideGamePacket
|
import net.psforever.packet.PlanetSideGamePacket
|
||||||
import net.psforever.packet.game.OutfitEventAction.{Initial, OutfitInfo, OutfitRankNames, Unk1}
|
import net.psforever.packet.game.OutfitEventAction.{Initial, OutfitInfo, OutfitRankNames, Unk1}
|
||||||
import net.psforever.packet.game.{ActionCancelMessage, AvatarFirstTimeEventMessage, AvatarImplantMessage, AvatarJumpMessage, BattleplanMessage, BindPlayerMessage, BugReportMessage, ChangeFireModeMessage, ChangeShortcutBankMessage, CharacterCreateRequestMessage, CharacterRequestMessage, ChatMsg, CollisionIs, ConnectToWorldRequestMessage, CreateShortcutMessage, DeadState, DeployObjectMessage, DisplayedAwardMessage, DropItemMessage, EmoteMsg, FacilityBenefitShieldChargeRequestMessage, FriendsRequest, GenericAction, GenericActionMessage, GenericCollisionMsg, GenericObjectActionAtPositionMessage, GenericObjectActionMessage, GenericObjectStateMsg, HitHint, InvalidTerrainMessage, LootItemMessage, MoveItemMessage, ObjectDetectedMessage, ObjectHeldMessage, OutfitEvent, OutfitMemberEvent, OutfitMembershipRequest, OutfitMembershipResponse, OutfitRequest, OutfitRequestAction, PickupItemMessage, PlanetsideAttributeMessage, PlayerStateMessageUpstream, RequestDestroyMessage, TargetingImplantRequest, TerrainCondition, TradeMessage, UnuseItemMessage, UseItemMessage, VoiceHostInfo, VoiceHostRequest, ZipLineMessage}
|
import net.psforever.packet.game.{ActionCancelMessage, AvatarFirstTimeEventMessage, AvatarImplantMessage, AvatarJumpMessage, BattleplanMessage, BindPlayerMessage, BugReportMessage, ChangeFireModeMessage, ChangeShortcutBankMessage, CharacterCreateRequestMessage, CharacterRequestMessage, ChatMsg, CollisionIs, ConnectToWorldRequestMessage, CreateShortcutMessage, DeadState, DeployObjectMessage, DisplayedAwardMessage, DropItemMessage, EmoteMsg, FacilityBenefitShieldChargeRequestMessage, FriendsRequest, GenericAction, GenericActionMessage, GenericCollisionMsg, GenericObjectActionAtPositionMessage, GenericObjectActionMessage, GenericObjectStateMsg, HitHint, InvalidTerrainMessage, LootItemMessage, MoveItemMessage, ObjectDetectedMessage, ObjectHeldMessage, OutfitEvent, OutfitMemberEvent, OutfitMembershipRequest, OutfitMembershipResponse, OutfitRequest, OutfitRequestAction, PickupItemMessage, PlanetsideAttributeMessage, PlayerStateMessageUpstream, RequestDestroyMessage, TargetingImplantRequest, TerrainCondition, TradeMessage, UnuseItemMessage, UseItemMessage, VoiceHostInfo, VoiceHostRequest, ZipLineMessage}
|
||||||
import net.psforever.services.RemoverActor
|
|
||||||
import net.psforever.services.avatar.support.CorpseEnvelope
|
import net.psforever.services.avatar.support.CorpseEnvelope
|
||||||
import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage}
|
import net.psforever.services.avatar.AvatarAction
|
||||||
|
import net.psforever.services.base.envelope.MessageEnvelope
|
||||||
import net.psforever.services.base.message.PlanetsideAttribute
|
import net.psforever.services.base.message.PlanetsideAttribute
|
||||||
|
import net.psforever.services.base.support.RemoverActor
|
||||||
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._
|
||||||
|
|
@ -133,7 +134,7 @@ class GeneralLogic(val ops: GeneralOperations, implicit val context: ActorContex
|
||||||
val eagleEye: Boolean = ops.canSeeReallyFar
|
val eagleEye: Boolean = ops.canSeeReallyFar
|
||||||
val isNotVisible: Boolean = sessionLogic.zoning.zoningStatus == Zoning.Status.Deconstructing ||
|
val isNotVisible: Boolean = sessionLogic.zoning.zoningStatus == Zoning.Status.Deconstructing ||
|
||||||
(player.isAlive && sessionLogic.zoning.spawn.deadState == DeadState.RespawnTime)
|
(player.isAlive && sessionLogic.zoning.spawn.deadState == DeadState.RespawnTime)
|
||||||
continent.AvatarEvents ! AvatarServiceMessage(
|
continent.AvatarEvents ! MessageEnvelope(
|
||||||
channel,
|
channel,
|
||||||
avatarGuid,
|
avatarGuid,
|
||||||
AvatarAction.PlayerState(
|
AvatarAction.PlayerState(
|
||||||
|
|
@ -433,7 +434,7 @@ class GeneralLogic(val ops: GeneralOperations, implicit val context: ActorContex
|
||||||
ops.dropSpecialSlotItem()
|
ops.dropSpecialSlotItem()
|
||||||
case GenericAction.MaxAnchorsExtend_RCV =>
|
case GenericAction.MaxAnchorsExtend_RCV =>
|
||||||
player.UsingSpecial = SpecialExoSuitDefinition.Mode.Anchored
|
player.UsingSpecial = SpecialExoSuitDefinition.Mode.Anchored
|
||||||
continent.AvatarEvents ! AvatarServiceMessage(
|
continent.AvatarEvents ! MessageEnvelope(
|
||||||
continent.id,
|
continent.id,
|
||||||
player.GUID,
|
player.GUID,
|
||||||
PlanetsideAttribute(player.GUID, 19, 1)
|
PlanetsideAttribute(player.GUID, 19, 1)
|
||||||
|
|
@ -454,7 +455,7 @@ class GeneralLogic(val ops: GeneralOperations, implicit val context: ActorContex
|
||||||
}
|
}
|
||||||
case GenericAction.MaxAnchorsRelease_RCV =>
|
case GenericAction.MaxAnchorsRelease_RCV =>
|
||||||
player.UsingSpecial = SpecialExoSuitDefinition.Mode.Normal
|
player.UsingSpecial = SpecialExoSuitDefinition.Mode.Normal
|
||||||
continent.AvatarEvents ! AvatarServiceMessage(
|
continent.AvatarEvents ! MessageEnvelope(
|
||||||
continent.id,
|
continent.id,
|
||||||
player.GUID,
|
player.GUID,
|
||||||
PlanetsideAttribute(player.GUID, 19, 0)
|
PlanetsideAttribute(player.GUID, 19, 0)
|
||||||
|
|
|
||||||
|
|
@ -15,9 +15,9 @@ 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.envelope.MessageEnvelope
|
||||||
import net.psforever.services.base.message.{SendResponse, SetEmpire}
|
import net.psforever.services.base.message.{SendResponse, SetEmpire}
|
||||||
import net.psforever.services.local.LocalServiceMessage
|
import net.psforever.services.vehicle.VehicleAction
|
||||||
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}
|
||||||
|
|
||||||
object MountHandlerLogic {
|
object MountHandlerLogic {
|
||||||
|
|
@ -160,7 +160,7 @@ class MountHandlerLogic(val ops: SessionMountHandlers, implicit val context: Act
|
||||||
case Mountable.CanMount(obj: FacilityTurret, seatNumber, _)
|
case Mountable.CanMount(obj: FacilityTurret, seatNumber, _)
|
||||||
if obj.Definition == GlobalDefinitions.vanu_sentry_turret =>
|
if obj.Definition == GlobalDefinitions.vanu_sentry_turret =>
|
||||||
sessionLogic.zoning.CancelZoningProcess()
|
sessionLogic.zoning.CancelZoningProcess()
|
||||||
obj.Zone.LocalEvents ! LocalServiceMessage(obj.Zone.id, SetEmpire(obj.GUID, player.Faction))
|
obj.Zone.LocalEvents ! MessageEnvelope(obj.Zone.id, SetEmpire(obj.GUID, player.Faction))
|
||||||
sendResponse(PlanetsideAttributeMessage(obj.GUID, attribute_type=0, obj.Health))
|
sendResponse(PlanetsideAttributeMessage(obj.GUID, attribute_type=0, obj.Health))
|
||||||
ops.updateWeaponAtSeatPosition(obj, seatNumber)
|
ops.updateWeaponAtSeatPosition(obj, seatNumber)
|
||||||
ops.MountingAction(tplayer, obj, seatNumber)
|
ops.MountingAction(tplayer, obj, seatNumber)
|
||||||
|
|
@ -199,7 +199,7 @@ class MountHandlerLogic(val ops: SessionMountHandlers, implicit val context: Act
|
||||||
val (pos, zang) = Vehicles.dismountShuttle(obj, mountPoint)
|
val (pos, zang) = Vehicles.dismountShuttle(obj, mountPoint)
|
||||||
tplayer.Position = pos
|
tplayer.Position = pos
|
||||||
sendResponse(DelayedPathMountMsg(pguid, sguid, u1=60, u2=true))
|
sendResponse(DelayedPathMountMsg(pguid, sguid, u1=60, u2=true))
|
||||||
continent.LocalEvents ! LocalServiceMessage(
|
continent.LocalEvents ! MessageEnvelope(
|
||||||
continent.id,
|
continent.id,
|
||||||
SendResponse(ObjectDetachMessage(sguid, pguid, pos, roll=0, pitch=0, zang))
|
SendResponse(ObjectDetachMessage(sguid, pguid, pos, roll=0, pitch=0, zang))
|
||||||
)
|
)
|
||||||
|
|
@ -213,7 +213,7 @@ class MountHandlerLogic(val ops: SessionMountHandlers, implicit val context: Act
|
||||||
ops.DismountAction(tplayer, obj, seatNum)
|
ops.DismountAction(tplayer, obj, seatNum)
|
||||||
continent.actor ! ZoneActor.RemoveFromBlockMap(player) //character doesn't need it
|
continent.actor ! ZoneActor.RemoveFromBlockMap(player) //character doesn't need it
|
||||||
//DismountAction(...) uses vehicle service, so use that service to coordinate the remainder of the messages
|
//DismountAction(...) uses vehicle service, so use that service to coordinate the remainder of the messages
|
||||||
events ! VehicleServiceMessage(
|
events ! MessageEnvelope(
|
||||||
player.Name,
|
player.Name,
|
||||||
SendResponse(PlayerStasisMessage(pguid)) //the stasis message
|
SendResponse(PlayerStasisMessage(pguid)) //the stasis message
|
||||||
)
|
)
|
||||||
|
|
@ -221,11 +221,11 @@ class MountHandlerLogic(val ops: SessionMountHandlers, implicit val context: Act
|
||||||
//the player will fall to the ground and is perfectly vulnerable in this state
|
//the player will fall to the ground and is perfectly vulnerable in this state
|
||||||
//additionally, our player must exist in the current zone
|
//additionally, our player must exist in the current zone
|
||||||
//having no in-game avatar target will throw us out of the map screen when deploying and cause softlock
|
//having no in-game avatar target will throw us out of the map screen when deploying and cause softlock
|
||||||
events ! VehicleServiceMessage(
|
events ! MessageEnvelope(
|
||||||
player.Name,
|
player.Name,
|
||||||
SendResponse(PlayerStateShiftMessage(ShiftState(unk=0, obj.Position, obj.Orientation.z, vel=None)))
|
SendResponse(PlayerStateShiftMessage(ShiftState(unk=0, obj.Position, obj.Orientation.z, vel=None)))
|
||||||
)
|
)
|
||||||
events ! VehicleServiceMessage(
|
events ! MessageEnvelope(
|
||||||
continent.id,
|
continent.id,
|
||||||
pguid,
|
pguid,
|
||||||
SendResponse(GenericObjectActionMessage(pguid, code=9)) //conceal the player
|
SendResponse(GenericObjectActionMessage(pguid, code=9)) //conceal the player
|
||||||
|
|
@ -254,7 +254,7 @@ class MountHandlerLogic(val ops: SessionMountHandlers, implicit val context: Act
|
||||||
ops.DismountVehicleAction(tplayer, obj, seatNum)
|
ops.DismountVehicleAction(tplayer, obj, seatNum)
|
||||||
|
|
||||||
case Mountable.CanDismount(obj: Vehicle, seat_num, _) =>
|
case Mountable.CanDismount(obj: Vehicle, seat_num, _) =>
|
||||||
continent.VehicleEvents ! VehicleServiceMessage(
|
continent.VehicleEvents ! MessageEnvelope(
|
||||||
continent.id,
|
continent.id,
|
||||||
tplayer.GUID,
|
tplayer.GUID,
|
||||||
VehicleAction.KickPassenger(seat_num, unk2=true, obj.GUID)
|
VehicleAction.KickPassenger(seat_num, unk2=true, obj.GUID)
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,8 @@ import net.psforever.objects.serverobject.mount.Mountable
|
||||||
import net.psforever.objects.{Player, Session, Vehicle}
|
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
|
||||||
|
import net.psforever.services.base.envelope.MessageEnvelope
|
||||||
import net.psforever.services.base.message.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}
|
||||||
|
|
@ -46,7 +47,7 @@ class SpectatorCSRModeLogic(data: SessionData) extends ModeLogic {
|
||||||
//
|
//
|
||||||
player.spectator = true
|
player.spectator = true
|
||||||
data.chat.JoinChannel(SpectatorChannel)
|
data.chat.JoinChannel(SpectatorChannel)
|
||||||
continent.AvatarEvents ! AvatarServiceMessage(continent.id, pguid, ObjectDelete(pguid))
|
continent.AvatarEvents ! MessageEnvelope(continent.id, pguid, ObjectDelete(pguid))
|
||||||
sendResponse(ChatMsg(ChatMessageType.CMT_TOGGLESPECTATORMODE, "on"))
|
sendResponse(ChatMsg(ChatMessageType.CMT_TOGGLESPECTATORMODE, "on"))
|
||||||
sendResponse(ChatMsg(ChatMessageType.UNK_225, "CSR SPECTATOR MODE ON"))
|
sendResponse(ChatMsg(ChatMessageType.UNK_225, "CSR SPECTATOR MODE ON"))
|
||||||
}
|
}
|
||||||
|
|
@ -60,7 +61,7 @@ class SpectatorCSRModeLogic(data: SessionData) extends ModeLogic {
|
||||||
//
|
//
|
||||||
player.spectator = false
|
player.spectator = false
|
||||||
data.chat.LeaveChannel(SpectatorChannel)
|
data.chat.LeaveChannel(SpectatorChannel)
|
||||||
continent.AvatarEvents ! AvatarServiceMessage(
|
continent.AvatarEvents ! MessageEnvelope(
|
||||||
continent.id,
|
continent.id,
|
||||||
pguid,
|
pguid,
|
||||||
AvatarAction.LoadPlayer(avatarId, pguid, player.Definition.Packet.ConstructorData(player).get, None)
|
AvatarAction.LoadPlayer(avatarId, pguid, player.Definition.Packet.ConstructorData(player).get, None)
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,8 @@ import net.psforever.objects.zones.Zone
|
||||||
import net.psforever.objects.zones.interaction.InteractsWithZone
|
import net.psforever.objects.zones.interaction.InteractsWithZone
|
||||||
import net.psforever.packet.game.{ChildObjectStateMessage, DeployRequestMessage, FrameVehicleStateMessage, VehicleStateMessage, VehicleSubStateMessage}
|
import net.psforever.packet.game.{ChildObjectStateMessage, DeployRequestMessage, FrameVehicleStateMessage, VehicleStateMessage, VehicleSubStateMessage}
|
||||||
import net.psforever.services.base.CachedEnvelope
|
import net.psforever.services.base.CachedEnvelope
|
||||||
import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage}
|
import net.psforever.services.vehicle.VehicleAction
|
||||||
|
import net.psforever.services.base.envelope.MessageEnvelope
|
||||||
import net.psforever.types.{DriveState, Vector3}
|
import net.psforever.types.{DriveState, Vector3}
|
||||||
|
|
||||||
object VehicleLogic {
|
object VehicleLogic {
|
||||||
|
|
@ -77,7 +78,7 @@ class VehicleLogic(val ops: VehicleOperations, implicit val context: ActorContex
|
||||||
obj.Position = position
|
obj.Position = position
|
||||||
obj.Orientation = angle
|
obj.Orientation = angle
|
||||||
//
|
//
|
||||||
continent.VehicleEvents ! VehicleServiceMessage(
|
continent.VehicleEvents ! MessageEnvelope(
|
||||||
continent.id,
|
continent.id,
|
||||||
player.GUID,
|
player.GUID,
|
||||||
VehicleAction.VehicleState(
|
VehicleAction.VehicleState(
|
||||||
|
|
@ -165,7 +166,7 @@ class VehicleLogic(val ops: VehicleOperations, implicit val context: ActorContex
|
||||||
obj.Position = position
|
obj.Position = position
|
||||||
obj.Orientation = angle
|
obj.Orientation = angle
|
||||||
obj.DeploymentState = if (is_crouched || !notMountedState) DriveState.Kneeling else DriveState.Mobile
|
obj.DeploymentState = if (is_crouched || !notMountedState) DriveState.Kneeling else DriveState.Mobile
|
||||||
continent.VehicleEvents ! VehicleServiceMessage(
|
continent.VehicleEvents ! MessageEnvelope(
|
||||||
continent.id,
|
continent.id,
|
||||||
player.GUID,
|
player.GUID,
|
||||||
VehicleAction.FrameVehicleState(vehicle_guid, unk1, position, angle, velocity, unk2, unk3, unk4, is_crouched, is_airborne, ascending_flight, flight_time, unk9, unkA)
|
VehicleAction.FrameVehicleState(vehicle_guid, unk1, position, angle, velocity, unk2, unk3, unk4, is_crouched, is_airborne, ascending_flight, flight_time, unk9, unkA)
|
||||||
|
|
@ -220,7 +221,7 @@ class VehicleLogic(val ops: VehicleOperations, implicit val context: ActorContex
|
||||||
val angle = Vector3(0f, pitch, yaw)
|
val angle = Vector3(0f, pitch, yaw)
|
||||||
tool.Orientation = angle
|
tool.Orientation = angle
|
||||||
player.Orientation = angle
|
player.Orientation = angle
|
||||||
continent.VehicleEvents ! VehicleServiceMessage(
|
continent.VehicleEvents ! MessageEnvelope(
|
||||||
continent.id,
|
continent.id,
|
||||||
player.GUID,
|
player.GUID,
|
||||||
VehicleAction.ChildObjectState(object_guid, pitch, yaw)
|
VehicleAction.ChildObjectState(object_guid, pitch, yaw)
|
||||||
|
|
@ -303,7 +304,7 @@ class VehicleLogic(val ops: VehicleOperations, implicit val context: ActorContex
|
||||||
if (obj.DeploymentState != DriveState.Mobile) {
|
if (obj.DeploymentState != DriveState.Mobile) {
|
||||||
obj.DeploymentState = DriveState.Mobile
|
obj.DeploymentState = DriveState.Mobile
|
||||||
sendResponse(DeployRequestMessage(player.GUID, obj.GUID, DriveState.Mobile, 0, unk3=false, Vector3.Zero))
|
sendResponse(DeployRequestMessage(player.GUID, obj.GUID, DriveState.Mobile, 0, unk3=false, Vector3.Zero))
|
||||||
continent.VehicleEvents ! VehicleServiceMessage(
|
continent.VehicleEvents ! MessageEnvelope(
|
||||||
continent.id,
|
continent.id,
|
||||||
player.GUID,
|
player.GUID,
|
||||||
VehicleAction.DeployRequest(obj.GUID, DriveState.Mobile, 0, unk2=false, Vector3.Zero)
|
VehicleAction.DeployRequest(obj.GUID, DriveState.Mobile, 0, unk2=false, Vector3.Zero)
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,8 @@ import net.psforever.objects.sourcing.PlayerSource
|
||||||
import net.psforever.objects.vital.RevivingActivity
|
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
|
||||||
|
import net.psforever.services.base.envelope.MessageEnvelope
|
||||||
import net.psforever.services.base.message.{ChangeAmmo, ChangeFireState_Start, ChangeFireState_Stop, ConcealPlayer, EventResponse, GenericObjectAction, HintsAtAttacker, ObjectDelete, PlanetsideAttribute, ReloadTool, SendResponse, SetEmpire, WeaponDryFire}
|
import net.psforever.services.base.message.{ChangeAmmo, ChangeFireState_Start, ChangeFireState_Stop, ConcealPlayer, EventResponse, GenericObjectAction, HintsAtAttacker, ObjectDelete, PlanetsideAttribute, ReloadTool, SendResponse, SetEmpire, WeaponDryFire}
|
||||||
import net.psforever.types.ImplantType
|
import net.psforever.types.ImplantType
|
||||||
|
|
||||||
|
|
@ -506,12 +507,12 @@ class AvatarHandlerLogic(val ops: SessionAvatarHandlers, implicit val context: A
|
||||||
}.flatten
|
}.flatten
|
||||||
} match {
|
} match {
|
||||||
case Some(adversarial) =>
|
case Some(adversarial) =>
|
||||||
events ! AvatarServiceMessage(
|
events ! MessageEnvelope(
|
||||||
zoneChannel,
|
zoneChannel,
|
||||||
AvatarAction.DestroyDisplay(adversarial.attacker, pentry, adversarial.implement)
|
AvatarAction.DestroyDisplay(adversarial.attacker, pentry, adversarial.implement)
|
||||||
)
|
)
|
||||||
case _ =>
|
case _ =>
|
||||||
events ! AvatarServiceMessage(zoneChannel, AvatarAction.DestroyDisplay(pentry, pentry, 0))
|
events ! MessageEnvelope(zoneChannel, AvatarAction.DestroyDisplay(pentry, pentry, 0))
|
||||||
}
|
}
|
||||||
//events chat and log
|
//events chat and log
|
||||||
val excuse = player.LastDamage.flatMap { damage =>
|
val excuse = player.LastDamage.flatMap { damage =>
|
||||||
|
|
@ -689,8 +690,8 @@ class AvatarHandlerLogic(val ops: SessionAvatarHandlers, implicit val context: A
|
||||||
val events = continent.AvatarEvents
|
val events = continent.AvatarEvents
|
||||||
ops.killedWhileMounted(obj, playerGuid)
|
ops.killedWhileMounted(obj, playerGuid)
|
||||||
//make player invisible on client
|
//make player invisible on client
|
||||||
events ! AvatarServiceMessage(player.Name, PlanetsideAttribute(playerGuid, 29, 1))
|
events ! MessageEnvelope(player.Name, PlanetsideAttribute(playerGuid, 29, 1))
|
||||||
//only the dead player should "see" their own body, so that the death camera has something to focus on
|
//only the dead player should "see" their own body, so that the death camera has something to focus on
|
||||||
events ! AvatarServiceMessage(continent.id, playerGuid, ObjectDelete(playerGuid))
|
events ! MessageEnvelope(continent.id, playerGuid, ObjectDelete(playerGuid))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,8 +5,9 @@ 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.envelope.MessageEnvelope
|
||||||
import net.psforever.services.base.message.{EventResponse, SendResponse}
|
import net.psforever.services.base.message.{EventResponse, SendResponse}
|
||||||
import net.psforever.services.galaxy.{GalaxyAction, GalaxyServiceMessage}
|
import net.psforever.services.galaxy.GalaxyAction
|
||||||
import net.psforever.types.{MemberAction, PlanetSideEmpire}
|
import net.psforever.types.{MemberAction, PlanetSideEmpire}
|
||||||
|
|
||||||
object GalaxyHandlerLogic {
|
object GalaxyHandlerLogic {
|
||||||
|
|
@ -27,7 +28,7 @@ class GalaxyHandlerLogic(val ops: SessionGalaxyHandlers, implicit val context: A
|
||||||
def handleUpdateIgnoredPlayers(pkt: FriendsResponse): Unit = {
|
def handleUpdateIgnoredPlayers(pkt: FriendsResponse): Unit = {
|
||||||
sendResponse(pkt)
|
sendResponse(pkt)
|
||||||
pkt.friends.foreach { f =>
|
pkt.friends.foreach { f =>
|
||||||
galaxyService ! GalaxyServiceMessage(GalaxyAction.LogStatusChange(f.name))
|
galaxyService ! MessageEnvelope("", GalaxyAction.LogStatusChange(f.name))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -42,8 +42,9 @@ import net.psforever.objects.zones.{ZoneProjectile, Zoning}
|
||||||
import net.psforever.packet.PlanetSideGamePacket
|
import net.psforever.packet.PlanetSideGamePacket
|
||||||
import net.psforever.packet.game.{ActionCancelMessage, ActionResultMessage, AvatarFirstTimeEventMessage, AvatarImplantMessage, AvatarJumpMessage, BattleplanMessage, BindPlayerMessage, BugReportMessage, ChangeFireModeMessage, ChangeShortcutBankMessage, CharacterCreateRequestMessage, CharacterRequestAction, CharacterRequestMessage, ChatMsg, CollisionIs, ConnectToWorldRequestMessage, CreateShortcutMessage, DeadState, DeployObjectMessage, DisplayedAwardMessage, DropItemMessage, EmoteMsg, FacilityBenefitShieldChargeRequestMessage, FriendsRequest, GenericAction, GenericActionMessage, GenericCollisionMsg, GenericObjectActionAtPositionMessage, GenericObjectActionMessage, GenericObjectStateMsg, HitHint, InvalidTerrainMessage, LootItemMessage, MoveItemMessage, ObjectDetectedMessage, ObjectHeldMessage, OutfitMembershipRequest, OutfitMembershipRequestAction, OutfitMembershipResponse, OutfitRequest, OutfitRequestAction, PickupItemMessage, PlanetsideAttributeMessage, PlayerStateMessageUpstream, RequestDestroyMessage, TargetingImplantRequest, TerrainCondition, TradeMessage, UnuseItemMessage, UseItemMessage, VoiceHostInfo, VoiceHostRequest, ZipLineMessage}
|
import net.psforever.packet.game.{ActionCancelMessage, ActionResultMessage, AvatarFirstTimeEventMessage, AvatarImplantMessage, AvatarJumpMessage, BattleplanMessage, BindPlayerMessage, BugReportMessage, ChangeFireModeMessage, ChangeShortcutBankMessage, CharacterCreateRequestMessage, CharacterRequestAction, CharacterRequestMessage, ChatMsg, CollisionIs, ConnectToWorldRequestMessage, CreateShortcutMessage, DeadState, DeployObjectMessage, DisplayedAwardMessage, DropItemMessage, EmoteMsg, FacilityBenefitShieldChargeRequestMessage, FriendsRequest, GenericAction, GenericActionMessage, GenericCollisionMsg, GenericObjectActionAtPositionMessage, GenericObjectActionMessage, GenericObjectStateMsg, HitHint, InvalidTerrainMessage, LootItemMessage, MoveItemMessage, ObjectDetectedMessage, ObjectHeldMessage, OutfitMembershipRequest, OutfitMembershipRequestAction, OutfitMembershipResponse, OutfitRequest, OutfitRequestAction, PickupItemMessage, PlanetsideAttributeMessage, PlayerStateMessageUpstream, RequestDestroyMessage, TargetingImplantRequest, TerrainCondition, TradeMessage, UnuseItemMessage, UseItemMessage, VoiceHostInfo, VoiceHostRequest, ZipLineMessage}
|
||||||
import net.psforever.services.account.{AccountPersistenceService, RetrieveAccountData}
|
import net.psforever.services.account.{AccountPersistenceService, RetrieveAccountData}
|
||||||
import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage}
|
import net.psforever.services.avatar.AvatarAction
|
||||||
import net.psforever.services.base.CachedEnvelope
|
import net.psforever.services.base.CachedEnvelope
|
||||||
|
import net.psforever.services.base.envelope.MessageEnvelope
|
||||||
import net.psforever.services.base.message.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}
|
||||||
|
|
@ -180,7 +181,7 @@ class GeneralLogic(val ops: GeneralOperations, implicit val context: ActorContex
|
||||||
case _ =>
|
case _ =>
|
||||||
false
|
false
|
||||||
})
|
})
|
||||||
continent.AvatarEvents ! AvatarServiceMessage(
|
continent.AvatarEvents ! MessageEnvelope(
|
||||||
continent.id,
|
continent.id,
|
||||||
avatarGuid,
|
avatarGuid,
|
||||||
AvatarAction.PlayerState(
|
AvatarAction.PlayerState(
|
||||||
|
|
@ -519,7 +520,7 @@ class GeneralLogic(val ops: GeneralOperations, implicit val context: ActorContex
|
||||||
case GenericAction.MaxAnchorsExtend_RCV =>
|
case GenericAction.MaxAnchorsExtend_RCV =>
|
||||||
log.info(s"${player.Name} has anchored ${player.Sex.pronounObject}self to the ground")
|
log.info(s"${player.Name} has anchored ${player.Sex.pronounObject}self to the ground")
|
||||||
player.UsingSpecial = SpecialExoSuitDefinition.Mode.Anchored
|
player.UsingSpecial = SpecialExoSuitDefinition.Mode.Anchored
|
||||||
continent.AvatarEvents ! AvatarServiceMessage(
|
continent.AvatarEvents ! MessageEnvelope(
|
||||||
continent.id,
|
continent.id,
|
||||||
player.GUID,
|
player.GUID,
|
||||||
PlanetsideAttribute(player.GUID, 19, 1)
|
PlanetsideAttribute(player.GUID, 19, 1)
|
||||||
|
|
@ -541,7 +542,7 @@ class GeneralLogic(val ops: GeneralOperations, implicit val context: ActorContex
|
||||||
case GenericAction.MaxAnchorsRelease_RCV =>
|
case GenericAction.MaxAnchorsRelease_RCV =>
|
||||||
log.info(s"${player.Name} has released the anchors")
|
log.info(s"${player.Name} has released the anchors")
|
||||||
player.UsingSpecial = SpecialExoSuitDefinition.Mode.Normal
|
player.UsingSpecial = SpecialExoSuitDefinition.Mode.Normal
|
||||||
continent.AvatarEvents ! AvatarServiceMessage(
|
continent.AvatarEvents ! MessageEnvelope(
|
||||||
continent.id,
|
continent.id,
|
||||||
player.GUID,
|
player.GUID,
|
||||||
PlanetsideAttribute(player.GUID, 19, 0)
|
PlanetsideAttribute(player.GUID, 19, 0)
|
||||||
|
|
|
||||||
|
|
@ -16,9 +16,9 @@ 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.envelope.MessageEnvelope
|
||||||
import net.psforever.services.base.message.{SendResponse, SetEmpire}
|
import net.psforever.services.base.message.{SendResponse, SetEmpire}
|
||||||
import net.psforever.services.local.LocalServiceMessage
|
import net.psforever.services.vehicle.VehicleAction
|
||||||
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}
|
||||||
|
|
||||||
object MountHandlerLogic {
|
object MountHandlerLogic {
|
||||||
|
|
@ -191,7 +191,7 @@ class MountHandlerLogic(val ops: SessionMountHandlers, implicit val context: Act
|
||||||
if obj.Definition == GlobalDefinitions.vanu_sentry_turret =>
|
if obj.Definition == GlobalDefinitions.vanu_sentry_turret =>
|
||||||
log.info(s"${player.Name} mounts the ${obj.Definition.Name}")
|
log.info(s"${player.Name} mounts the ${obj.Definition.Name}")
|
||||||
sessionLogic.zoning.CancelZoningProcessWithDescriptiveReason("cancel_mount")
|
sessionLogic.zoning.CancelZoningProcessWithDescriptiveReason("cancel_mount")
|
||||||
obj.Zone.LocalEvents ! LocalServiceMessage(obj.Zone.id, SetEmpire(obj.GUID, player.Faction))
|
obj.Zone.LocalEvents ! MessageEnvelope(obj.Zone.id, SetEmpire(obj.GUID, player.Faction))
|
||||||
sendResponse(PlanetsideAttributeMessage(obj.GUID, attribute_type=0, obj.Health))
|
sendResponse(PlanetsideAttributeMessage(obj.GUID, attribute_type=0, obj.Health))
|
||||||
ops.updateWeaponAtSeatPosition(obj, seatNumber)
|
ops.updateWeaponAtSeatPosition(obj, seatNumber)
|
||||||
ops.MountingAction(tplayer, obj, seatNumber)
|
ops.MountingAction(tplayer, obj, seatNumber)
|
||||||
|
|
@ -234,7 +234,7 @@ class MountHandlerLogic(val ops: SessionMountHandlers, implicit val context: Act
|
||||||
val (pos, zang) = Vehicles.dismountShuttle(obj, mountPoint)
|
val (pos, zang) = Vehicles.dismountShuttle(obj, mountPoint)
|
||||||
tplayer.Position = pos
|
tplayer.Position = pos
|
||||||
sendResponse(DelayedPathMountMsg(pguid, sguid, u1=60, u2=true))
|
sendResponse(DelayedPathMountMsg(pguid, sguid, u1=60, u2=true))
|
||||||
continent.LocalEvents ! LocalServiceMessage(
|
continent.LocalEvents ! MessageEnvelope(
|
||||||
continent.id,
|
continent.id,
|
||||||
SendResponse(ObjectDetachMessage(sguid, pguid, pos, roll=0, pitch=0, zang))
|
SendResponse(ObjectDetachMessage(sguid, pguid, pos, roll=0, pitch=0, zang))
|
||||||
)
|
)
|
||||||
|
|
@ -253,11 +253,11 @@ class MountHandlerLogic(val ops: SessionMountHandlers, implicit val context: Act
|
||||||
//the player will fall to the ground and is perfectly vulnerable in this state
|
//the player will fall to the ground and is perfectly vulnerable in this state
|
||||||
//additionally, our player must exist in the current zone
|
//additionally, our player must exist in the current zone
|
||||||
//having no in-game avatar target will throw us out of the map screen when deploying and cause softlock
|
//having no in-game avatar target will throw us out of the map screen when deploying and cause softlock
|
||||||
events ! VehicleServiceMessage(player.Name, SendResponse(Seq(
|
events ! MessageEnvelope(player.Name, SendResponse(Seq(
|
||||||
PlayerStasisMessage(pguid),
|
PlayerStasisMessage(pguid),
|
||||||
PlayerStateShiftMessage(ShiftState(unk=0, obj.Position, obj.Orientation.z, vel=None))
|
PlayerStateShiftMessage(ShiftState(unk=0, obj.Position, obj.Orientation.z, vel=None))
|
||||||
)))
|
)))
|
||||||
events ! VehicleServiceMessage(
|
events ! MessageEnvelope(
|
||||||
continent.id,
|
continent.id,
|
||||||
pguid,
|
pguid,
|
||||||
SendResponse(GenericObjectActionMessage(pguid, code=9)) //conceal the player
|
SendResponse(GenericObjectActionMessage(pguid, code=9)) //conceal the player
|
||||||
|
|
@ -287,7 +287,7 @@ class MountHandlerLogic(val ops: SessionMountHandlers, implicit val context: Act
|
||||||
ops.DismountVehicleAction(tplayer, obj, seatNum)
|
ops.DismountVehicleAction(tplayer, obj, seatNum)
|
||||||
|
|
||||||
case Mountable.CanDismount(obj: Vehicle, seat_num, _) =>
|
case Mountable.CanDismount(obj: Vehicle, seat_num, _) =>
|
||||||
continent.VehicleEvents ! VehicleServiceMessage(
|
continent.VehicleEvents ! MessageEnvelope(
|
||||||
continent.id,
|
continent.id,
|
||||||
tplayer.GUID,
|
tplayer.GUID,
|
||||||
VehicleAction.KickPassenger(seat_num, unk2=true, obj.GUID)
|
VehicleAction.KickPassenger(seat_num, unk2=true, obj.GUID)
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,8 @@ import net.psforever.objects.zones.Zone
|
||||||
import net.psforever.objects.zones.interaction.InteractsWithZone
|
import net.psforever.objects.zones.interaction.InteractsWithZone
|
||||||
import net.psforever.packet.game.{ChatMsg, ChildObjectStateMessage, DeployRequestMessage, FrameVehicleStateMessage, VehicleStateMessage, VehicleSubStateMessage}
|
import net.psforever.packet.game.{ChatMsg, ChildObjectStateMessage, DeployRequestMessage, FrameVehicleStateMessage, VehicleStateMessage, VehicleSubStateMessage}
|
||||||
import net.psforever.services.base.CachedEnvelope
|
import net.psforever.services.base.CachedEnvelope
|
||||||
import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage}
|
import net.psforever.services.base.envelope.MessageEnvelope
|
||||||
|
import net.psforever.services.vehicle.VehicleAction
|
||||||
import net.psforever.types.{ChatMessageType, DriveState, Vector3}
|
import net.psforever.types.{ChatMessageType, DriveState, Vector3}
|
||||||
|
|
||||||
object VehicleLogic {
|
object VehicleLogic {
|
||||||
|
|
@ -321,7 +322,7 @@ class VehicleLogic(val ops: VehicleOperations, implicit val context: ActorContex
|
||||||
val mobileShift: String = if (obj.DeploymentState != DriveState.Mobile) {
|
val mobileShift: String = if (obj.DeploymentState != DriveState.Mobile) {
|
||||||
obj.DeploymentState = DriveState.Mobile
|
obj.DeploymentState = DriveState.Mobile
|
||||||
sendResponse(DeployRequestMessage(player.GUID, obj.GUID, DriveState.Mobile, 0, unk3=false, Vector3.Zero))
|
sendResponse(DeployRequestMessage(player.GUID, obj.GUID, DriveState.Mobile, 0, unk3=false, Vector3.Zero))
|
||||||
continent.VehicleEvents ! VehicleServiceMessage(
|
continent.VehicleEvents ! MessageEnvelope(
|
||||||
continent.id,
|
continent.id,
|
||||||
player.GUID,
|
player.GUID,
|
||||||
VehicleAction.DeployRequest(obj.GUID, DriveState.Mobile, 0, unk2=false, Vector3.Zero)
|
VehicleAction.DeployRequest(obj.GUID, DriveState.Mobile, 0, unk2=false, Vector3.Zero)
|
||||||
|
|
|
||||||
|
|
@ -8,6 +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.envelope.MessageEnvelope
|
||||||
import net.psforever.services.base.message.{ChangeAmmo, ChangeFireState_Start, ChangeFireState_Stop, ConcealPlayer, EventResponse, GenericObjectAction, HintsAtAttacker, ObjectDelete, PlanetsideAttribute, ReloadTool, SendResponse, SetEmpire, WeaponDryFire}
|
import net.psforever.services.base.message.{ChangeAmmo, ChangeFireState_Start, ChangeFireState_Stop, ConcealPlayer, EventResponse, GenericObjectAction, HintsAtAttacker, ObjectDelete, PlanetsideAttribute, ReloadTool, SendResponse, SetEmpire, WeaponDryFire}
|
||||||
|
|
||||||
import scala.concurrent.duration._
|
import scala.concurrent.duration._
|
||||||
|
|
@ -24,7 +25,7 @@ import net.psforever.objects.vital.etc.ExplodingEntityReason
|
||||||
import net.psforever.objects.zones.Zoning
|
import net.psforever.objects.zones.Zoning
|
||||||
import net.psforever.packet.game.objectcreate.ObjectCreateMessageParent
|
import net.psforever.packet.game.objectcreate.ObjectCreateMessageParent
|
||||||
import net.psforever.packet.game.{ArmorChangedMessage, AvatarDeadStateMessage, ChangeAmmoMessage, ChangeFireModeMessage, ChangeFireStateMessage_Start, ChangeFireStateMessage_Stop, ChatMsg, DeadState, DestroyMessage, DrowningTarget, GenericActionMessage, GenericObjectActionMessage, HitHint, ItemTransactionResultMessage, ObjectCreateDetailedMessage, ObjectCreateMessage, ObjectDeleteMessage, ObjectHeldMessage, OxygenStateMessage, PlanetsideAttributeMessage, PlayerStateMessage, ProjectileStateMessage, ReloadMessage, SetEmpireMessage, UseItemMessage, WeaponDryFireMessage}
|
import net.psforever.packet.game.{ArmorChangedMessage, AvatarDeadStateMessage, ChangeAmmoMessage, ChangeFireModeMessage, ChangeFireStateMessage_Start, ChangeFireStateMessage_Stop, ChatMsg, DeadState, DestroyMessage, DrowningTarget, GenericActionMessage, GenericObjectActionMessage, HitHint, ItemTransactionResultMessage, ObjectCreateDetailedMessage, ObjectCreateMessage, ObjectDeleteMessage, ObjectHeldMessage, OxygenStateMessage, PlanetsideAttributeMessage, PlayerStateMessage, ProjectileStateMessage, ReloadMessage, SetEmpireMessage, UseItemMessage, WeaponDryFireMessage}
|
||||||
import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage}
|
import net.psforever.services.avatar.AvatarAction
|
||||||
import net.psforever.services.Service
|
import net.psforever.services.Service
|
||||||
import net.psforever.types.{ChatMessageType, PlanetSideGUID, TransactionType, Vector3}
|
import net.psforever.types.{ChatMessageType, PlanetSideGUID, TransactionType, Vector3}
|
||||||
import net.psforever.util.Config
|
import net.psforever.util.Config
|
||||||
|
|
@ -482,7 +483,7 @@ class AvatarHandlerLogic(val ops: SessionAvatarHandlers, implicit val context: A
|
||||||
val health = player.Health
|
val health = player.Health
|
||||||
sendResponse(PlanetsideAttributeMessage(revivalTargetGuid, attribute_type=0, health))
|
sendResponse(PlanetsideAttributeMessage(revivalTargetGuid, attribute_type=0, health))
|
||||||
sendResponse(AvatarDeadStateMessage(DeadState.Alive, timer_max=0, timer=0, player.Position, player.Faction, unk5=true))
|
sendResponse(AvatarDeadStateMessage(DeadState.Alive, timer_max=0, timer=0, player.Position, player.Faction, unk5=true))
|
||||||
continent.AvatarEvents ! AvatarServiceMessage(
|
continent.AvatarEvents ! MessageEnvelope(
|
||||||
continent.id,
|
continent.id,
|
||||||
PlanetsideAttribute(revivalTargetGuid, attribute_type=0, health)
|
PlanetsideAttribute(revivalTargetGuid, attribute_type=0, health)
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -16,8 +16,9 @@ import net.psforever.objects.zones.ZoneProjectile
|
||||||
import net.psforever.packet.PlanetSideGamePacket
|
import net.psforever.packet.PlanetSideGamePacket
|
||||||
import net.psforever.packet.game.{ActionCancelMessage, AvatarFirstTimeEventMessage, AvatarImplantMessage, AvatarJumpMessage, BattleplanMessage, BindPlayerMessage, BugReportMessage, ChangeFireModeMessage, ChangeShortcutBankMessage, CharacterCreateRequestMessage, CharacterRequestMessage, CollisionIs, ConnectToWorldRequestMessage, CreateShortcutMessage, DeployObjectMessage, DisplayedAwardMessage, DropItemMessage, EmoteMsg, FacilityBenefitShieldChargeRequestMessage, FriendsRequest, GenericAction, GenericActionMessage, GenericCollisionMsg, GenericObjectActionAtPositionMessage, GenericObjectActionMessage, GenericObjectStateMsg, HitHint, ImplantAction, InvalidTerrainMessage, LootItemMessage, MoveItemMessage, ObjectDetectedMessage, ObjectHeldMessage, OutfitMembershipRequest, OutfitMembershipResponse, OutfitRequest, PickupItemMessage, PlanetsideAttributeMessage, PlayerStateMessageUpstream, RequestDestroyMessage, TargetingImplantRequest, TradeMessage, UnuseItemMessage, UseItemMessage, VoiceHostInfo, VoiceHostRequest, ZipLineMessage}
|
import net.psforever.packet.game.{ActionCancelMessage, AvatarFirstTimeEventMessage, AvatarImplantMessage, AvatarJumpMessage, BattleplanMessage, BindPlayerMessage, BugReportMessage, ChangeFireModeMessage, ChangeShortcutBankMessage, CharacterCreateRequestMessage, CharacterRequestMessage, CollisionIs, ConnectToWorldRequestMessage, CreateShortcutMessage, DeployObjectMessage, DisplayedAwardMessage, DropItemMessage, EmoteMsg, FacilityBenefitShieldChargeRequestMessage, FriendsRequest, GenericAction, GenericActionMessage, GenericCollisionMsg, GenericObjectActionAtPositionMessage, GenericObjectActionMessage, GenericObjectStateMsg, HitHint, ImplantAction, InvalidTerrainMessage, LootItemMessage, MoveItemMessage, ObjectDetectedMessage, ObjectHeldMessage, OutfitMembershipRequest, OutfitMembershipResponse, OutfitRequest, PickupItemMessage, PlanetsideAttributeMessage, PlayerStateMessageUpstream, RequestDestroyMessage, TargetingImplantRequest, TradeMessage, UnuseItemMessage, UseItemMessage, VoiceHostInfo, VoiceHostRequest, ZipLineMessage}
|
||||||
import net.psforever.services.account.AccountPersistenceService
|
import net.psforever.services.account.AccountPersistenceService
|
||||||
import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage}
|
import net.psforever.services.avatar.AvatarAction
|
||||||
import net.psforever.services.base.CachedEnvelope
|
import net.psforever.services.base.CachedEnvelope
|
||||||
|
import net.psforever.services.base.envelope.MessageEnvelope
|
||||||
import net.psforever.services.base.message.PlanetsideAttribute
|
import net.psforever.services.base.message.PlanetsideAttribute
|
||||||
import net.psforever.types.{ExoSuitType, Vector3}
|
import net.psforever.types.{ExoSuitType, Vector3}
|
||||||
|
|
||||||
|
|
@ -229,7 +230,7 @@ class GeneralLogic(val ops: GeneralOperations, implicit val context: ActorContex
|
||||||
case GenericAction.MaxAnchorsExtend_RCV =>
|
case GenericAction.MaxAnchorsExtend_RCV =>
|
||||||
log.info(s"${player.Name} has anchored ${player.Sex.pronounObject}self to the ground")
|
log.info(s"${player.Name} has anchored ${player.Sex.pronounObject}self to the ground")
|
||||||
player.UsingSpecial = SpecialExoSuitDefinition.Mode.Anchored
|
player.UsingSpecial = SpecialExoSuitDefinition.Mode.Anchored
|
||||||
continent.AvatarEvents ! AvatarServiceMessage(
|
continent.AvatarEvents ! MessageEnvelope(
|
||||||
continent.id,
|
continent.id,
|
||||||
player.GUID,
|
player.GUID,
|
||||||
PlanetsideAttribute(player.GUID, 19, 1)
|
PlanetsideAttribute(player.GUID, 19, 1)
|
||||||
|
|
@ -251,7 +252,7 @@ class GeneralLogic(val ops: GeneralOperations, implicit val context: ActorContex
|
||||||
case GenericAction.MaxAnchorsRelease_RCV =>
|
case GenericAction.MaxAnchorsRelease_RCV =>
|
||||||
log.info(s"${player.Name} has released the anchors")
|
log.info(s"${player.Name} has released the anchors")
|
||||||
player.UsingSpecial = SpecialExoSuitDefinition.Mode.Normal
|
player.UsingSpecial = SpecialExoSuitDefinition.Mode.Normal
|
||||||
continent.AvatarEvents ! AvatarServiceMessage(
|
continent.AvatarEvents ! MessageEnvelope(
|
||||||
continent.id,
|
continent.id,
|
||||||
player.GUID,
|
player.GUID,
|
||||||
PlanetsideAttribute(player.GUID, 19, 0)
|
PlanetsideAttribute(player.GUID, 19, 0)
|
||||||
|
|
|
||||||
|
|
@ -12,9 +12,9 @@ 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.envelope.MessageEnvelope
|
||||||
import net.psforever.services.base.message.SendResponse
|
import net.psforever.services.base.message.SendResponse
|
||||||
import net.psforever.services.local.LocalServiceMessage
|
import net.psforever.services.vehicle.VehicleAction
|
||||||
import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage}
|
|
||||||
|
|
||||||
object MountHandlerLogic {
|
object MountHandlerLogic {
|
||||||
def apply(ops: SessionMountHandlers): MountHandlerLogic = {
|
def apply(ops: SessionMountHandlers): MountHandlerLogic = {
|
||||||
|
|
@ -61,7 +61,7 @@ class MountHandlerLogic(val ops: SessionMountHandlers, implicit val context: Act
|
||||||
val (pos, zang) = Vehicles.dismountShuttle(obj, mountPoint)
|
val (pos, zang) = Vehicles.dismountShuttle(obj, mountPoint)
|
||||||
tplayer.Position = pos
|
tplayer.Position = pos
|
||||||
sendResponse(DelayedPathMountMsg(pguid, sguid, u1=60, u2=true))
|
sendResponse(DelayedPathMountMsg(pguid, sguid, u1=60, u2=true))
|
||||||
continent.LocalEvents ! LocalServiceMessage(
|
continent.LocalEvents ! MessageEnvelope(
|
||||||
continent.id,
|
continent.id,
|
||||||
SendResponse(ObjectDetachMessage(sguid, pguid, pos, roll=0, pitch=0, zang))
|
SendResponse(ObjectDetachMessage(sguid, pguid, pos, roll=0, pitch=0, zang))
|
||||||
)
|
)
|
||||||
|
|
@ -80,11 +80,11 @@ class MountHandlerLogic(val ops: SessionMountHandlers, implicit val context: Act
|
||||||
//the player will fall to the ground and is perfectly vulnerable in this state
|
//the player will fall to the ground and is perfectly vulnerable in this state
|
||||||
//additionally, our player must exist in the current zone
|
//additionally, our player must exist in the current zone
|
||||||
//having no in-game avatar target will throw us out of the map screen when deploying and cause softlock
|
//having no in-game avatar target will throw us out of the map screen when deploying and cause softlock
|
||||||
events ! VehicleServiceMessage(player.Name, SendResponse(Seq(
|
events ! MessageEnvelope(player.Name, SendResponse(Seq(
|
||||||
PlayerStasisMessage(pguid),
|
PlayerStasisMessage(pguid),
|
||||||
PlayerStateShiftMessage(ShiftState(unk=0, obj.Position, obj.Orientation.z, vel=None))
|
PlayerStateShiftMessage(ShiftState(unk=0, obj.Position, obj.Orientation.z, vel=None))
|
||||||
)))
|
)))
|
||||||
events ! VehicleServiceMessage(
|
events ! MessageEnvelope(
|
||||||
continent.id,
|
continent.id,
|
||||||
pguid,
|
pguid,
|
||||||
SendResponse(GenericObjectActionMessage(pguid, code=9)) //conceal the player
|
SendResponse(GenericObjectActionMessage(pguid, code=9)) //conceal the player
|
||||||
|
|
@ -105,7 +105,7 @@ class MountHandlerLogic(val ops: SessionMountHandlers, implicit val context: Act
|
||||||
ops.DismountVehicleAction(tplayer, obj, seatNum)
|
ops.DismountVehicleAction(tplayer, obj, seatNum)
|
||||||
|
|
||||||
case Mountable.CanDismount(obj: Vehicle, seat_num, _) =>
|
case Mountable.CanDismount(obj: Vehicle, seat_num, _) =>
|
||||||
continent.VehicleEvents ! VehicleServiceMessage(
|
continent.VehicleEvents ! MessageEnvelope(
|
||||||
continent.id,
|
continent.id,
|
||||||
tplayer.GUID,
|
tplayer.GUID,
|
||||||
VehicleAction.KickPassenger(seat_num, unk2=true, obj.GUID)
|
VehicleAction.KickPassenger(seat_num, unk2=true, obj.GUID)
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ import net.psforever.packet.PlanetSidePacket
|
||||||
import net.psforever.packet.game.{DeployableInfo, DeployableObjectsInfoMessage, DeploymentAction, ObjectCreateDetailedMessage, ObjectDeleteMessage}
|
import net.psforever.packet.game.{DeployableInfo, DeployableObjectsInfoMessage, DeploymentAction, ObjectCreateDetailedMessage, ObjectDeleteMessage}
|
||||||
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.base.envelope.MessageEnvelope
|
||||||
import net.psforever.services.base.message.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}
|
||||||
|
|
@ -69,7 +69,7 @@ class SpectatorModeLogic(data: SessionData) extends ModeLogic {
|
||||||
player.Inventory.Items
|
player.Inventory.Items
|
||||||
.foreach { entry => sendResponse(ObjectDeleteMessage(entry.GUID, 0)) }
|
.foreach { entry => sendResponse(ObjectDeleteMessage(entry.GUID, 0)) }
|
||||||
sendResponse(ObjectDeleteMessage(player.avatar.locker.GUID, 0))
|
sendResponse(ObjectDeleteMessage(player.avatar.locker.GUID, 0))
|
||||||
continent.AvatarEvents ! AvatarServiceMessage(continent.id, pguid, ObjectDelete(pguid))
|
continent.AvatarEvents ! MessageEnvelope(continent.id, pguid, ObjectDelete(pguid))
|
||||||
player.Holsters()
|
player.Holsters()
|
||||||
.collect { case slot if slot.Equipment.nonEmpty => sendResponse(ObjectDeleteMessage(slot.Equipment.get.GUID, 0)) }
|
.collect { case slot if slot.Equipment.nonEmpty => sendResponse(ObjectDeleteMessage(slot.Equipment.get.GUID, 0)) }
|
||||||
val vehicleAndSeat = data.vehicles.GetMountableAndSeat(None, player, continent) match {
|
val vehicleAndSeat = data.vehicles.GetMountableAndSeat(None, player, continent) match {
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,8 @@ import net.psforever.objects.Vehicle
|
||||||
import net.psforever.objects.serverobject.deploy.Deployment
|
import net.psforever.objects.serverobject.deploy.Deployment
|
||||||
import net.psforever.packet.game.{ChildObjectStateMessage, DeployRequestMessage, FrameVehicleStateMessage, VehicleStateMessage, VehicleSubStateMessage}
|
import net.psforever.packet.game.{ChildObjectStateMessage, DeployRequestMessage, FrameVehicleStateMessage, VehicleStateMessage, VehicleSubStateMessage}
|
||||||
import net.psforever.services.base.CachedEnvelope
|
import net.psforever.services.base.CachedEnvelope
|
||||||
import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage}
|
import net.psforever.services.base.envelope.MessageEnvelope
|
||||||
|
import net.psforever.services.vehicle.VehicleAction
|
||||||
import net.psforever.types.{DriveState, Vector3}
|
import net.psforever.types.{DriveState, Vector3}
|
||||||
|
|
||||||
object VehicleLogic {
|
object VehicleLogic {
|
||||||
|
|
@ -81,7 +82,7 @@ class VehicleLogic(val ops: VehicleOperations, implicit val context: ActorContex
|
||||||
val mobileShift: String = if (obj.DeploymentState != DriveState.Mobile) {
|
val mobileShift: String = if (obj.DeploymentState != DriveState.Mobile) {
|
||||||
obj.DeploymentState = DriveState.Mobile
|
obj.DeploymentState = DriveState.Mobile
|
||||||
sendResponse(DeployRequestMessage(player.GUID, obj.GUID, DriveState.Mobile, 0, unk3=false, Vector3.Zero))
|
sendResponse(DeployRequestMessage(player.GUID, obj.GUID, DriveState.Mobile, 0, unk3=false, Vector3.Zero))
|
||||||
continent.VehicleEvents ! VehicleServiceMessage(
|
continent.VehicleEvents ! MessageEnvelope(
|
||||||
continent.id,
|
continent.id,
|
||||||
player.GUID,
|
player.GUID,
|
||||||
VehicleAction.DeployRequest(obj.GUID, DriveState.Mobile, 0, unk2=false, Vector3.Zero)
|
VehicleAction.DeployRequest(obj.GUID, DriveState.Mobile, 0, unk2=false, Vector3.Zero)
|
||||||
|
|
|
||||||
|
|
@ -17,11 +17,12 @@ import net.psforever.objects.sourcing.{DeployableSource, PlayerSource, VehicleSo
|
||||||
import net.psforever.objects.vehicles.Utility.InternalTelepad
|
import net.psforever.objects.vehicles.Utility.InternalTelepad
|
||||||
import net.psforever.objects.zones.blockmap.BlockMapEntity
|
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.avatar.support.GroundEnvelope
|
import net.psforever.services.avatar.support.GroundEnvelope
|
||||||
import net.psforever.services.base.message.{PlanetsideAttribute, SendResponse}
|
import net.psforever.services.base.envelope.MessageEnvelope
|
||||||
|
import net.psforever.services.base.message.{ObjectDelete, PlanetsideAttribute, SendResponse}
|
||||||
|
import net.psforever.services.base.support.RemoverActor
|
||||||
import net.psforever.services.local.support.{CaptureEnvelope, HackCaptureActor}
|
import net.psforever.services.local.support.{CaptureEnvelope, HackCaptureActor}
|
||||||
import net.psforever.services.local.{LocalAction, LocalServiceMessage}
|
import net.psforever.services.local.LocalAction
|
||||||
|
|
||||||
import scala.collection.mutable
|
import scala.collection.mutable
|
||||||
import scala.concurrent.ExecutionContext.Implicits.global
|
import scala.concurrent.ExecutionContext.Implicits.global
|
||||||
|
|
@ -51,9 +52,9 @@ import net.psforever.packet.game.PlanetsideAttributeEnum.PlanetsideAttributeEnum
|
||||||
import net.psforever.packet.game.objectcreate._
|
import net.psforever.packet.game.objectcreate._
|
||||||
import net.psforever.packet.game._
|
import net.psforever.packet.game._
|
||||||
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
|
||||||
import net.psforever.services.local.support.CaptureFlagManager
|
import net.psforever.services.local.support.CaptureFlagManager
|
||||||
import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage}
|
import net.psforever.services.vehicle.VehicleAction
|
||||||
import net.psforever.services.Service
|
import net.psforever.services.Service
|
||||||
import net.psforever.types._
|
import net.psforever.types._
|
||||||
import net.psforever.util.Config
|
import net.psforever.util.Config
|
||||||
|
|
@ -206,7 +207,7 @@ class GeneralOperations(
|
||||||
.livePlayerList
|
.livePlayerList
|
||||||
.filter(_.GUID != guid)
|
.filter(_.GUID != guid)
|
||||||
.foreach { p =>
|
.foreach { p =>
|
||||||
events ! LocalServiceMessage(p.Name, msg)
|
events ! MessageEnvelope(p.Name, msg)
|
||||||
}
|
}
|
||||||
//todo better way to collect csr players while utilizing the aforementioned benefit of localSector
|
//todo better way to collect csr players while utilizing the aforementioned benefit of localSector
|
||||||
val position = player.Position
|
val position = player.Position
|
||||||
|
|
@ -218,7 +219,7 @@ class GeneralOperations(
|
||||||
.AllPlayers
|
.AllPlayers
|
||||||
.filter { p => !p.allowInteraction && p.GUID != guid && Vector3.DistanceSquared(p.Position, position) < rangeSq }
|
.filter { p => !p.allowInteraction && p.GUID != guid && Vector3.DistanceSquared(p.Position, position) < rangeSq }
|
||||||
.foreach { p =>
|
.foreach { p =>
|
||||||
events ! LocalServiceMessage(p.Name, msg)
|
events ! MessageEnvelope(p.Name, msg)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -405,7 +406,7 @@ class GeneralOperations(
|
||||||
val detectedTargets = sessionLogic.shooting.FindDetectedProjectileTargets(targets)
|
val detectedTargets = sessionLogic.shooting.FindDetectedProjectileTargets(targets)
|
||||||
val mode = 7 + (if (weapon.Projectile == GlobalDefinitions.wasp_rocket_projectile) 1 else 0)
|
val mode = 7 + (if (weapon.Projectile == GlobalDefinitions.wasp_rocket_projectile) 1 else 0)
|
||||||
detectedTargets.foreach { target =>
|
detectedTargets.foreach { target =>
|
||||||
continent.AvatarEvents ! AvatarServiceMessage(target, AvatarAction.ProjectileAutoLockAwareness(mode))
|
continent.AvatarEvents ! MessageEnvelope(target, AvatarAction.ProjectileAutoLockAwareness(mode))
|
||||||
}
|
}
|
||||||
case _ => ()
|
case _ => ()
|
||||||
}
|
}
|
||||||
|
|
@ -485,7 +486,7 @@ class GeneralOperations(
|
||||||
case attacker
|
case attacker
|
||||||
if attacker.Faction != player.Faction &&
|
if attacker.Faction != player.Faction &&
|
||||||
System.currentTimeMillis() - llu.LastCollectionTime >= Config.app.game.experience.cep.lluSlayerCreditDuration.toMillis =>
|
System.currentTimeMillis() - llu.LastCollectionTime >= Config.app.game.experience.cep.lluSlayerCreditDuration.toMillis =>
|
||||||
continent.AvatarEvents ! AvatarServiceMessage(
|
continent.AvatarEvents ! MessageEnvelope(
|
||||||
attacker.Name,
|
attacker.Name,
|
||||||
AvatarAction.AwardCep(attacker.CharId, Config.app.game.experience.cep.lluSlayerCredit)
|
AvatarAction.AwardCep(attacker.CharId, Config.app.game.experience.cep.lluSlayerCredit)
|
||||||
)
|
)
|
||||||
|
|
@ -1028,7 +1029,7 @@ class GeneralOperations(
|
||||||
sendResponse(ChatMsg(ChatMessageType.UNK_227, "@ArmorShieldOff"))
|
sendResponse(ChatMsg(ChatMessageType.UNK_227, "@ArmorShieldOff"))
|
||||||
}
|
}
|
||||||
player.UsingSpecial = SpecialExoSuitDefinition.Mode.Normal
|
player.UsingSpecial = SpecialExoSuitDefinition.Mode.Normal
|
||||||
continent.AvatarEvents ! AvatarServiceMessage(
|
continent.AvatarEvents ! MessageEnvelope(
|
||||||
continent.id,
|
continent.id,
|
||||||
PlanetsideAttribute(player.GUID, 8, 0)
|
PlanetsideAttribute(player.GUID, 8, 0)
|
||||||
)
|
)
|
||||||
|
|
@ -1037,7 +1038,7 @@ class GeneralOperations(
|
||||||
}
|
}
|
||||||
|
|
||||||
private def activateMaxSpecialStateMessage(): Unit = {
|
private def activateMaxSpecialStateMessage(): Unit = {
|
||||||
continent.AvatarEvents ! AvatarServiceMessage(
|
continent.AvatarEvents ! MessageEnvelope(
|
||||||
continent.id,
|
continent.id,
|
||||||
PlanetsideAttribute(player.GUID, 8, 1)
|
PlanetsideAttribute(player.GUID, 8, 1)
|
||||||
)
|
)
|
||||||
|
|
@ -1052,7 +1053,7 @@ class GeneralOperations(
|
||||||
case (Some(obj), Some(seatNum)) =>
|
case (Some(obj), Some(seatNum)) =>
|
||||||
tplayer.VehicleSeated = None
|
tplayer.VehicleSeated = None
|
||||||
obj.Seats(seatNum).unmount(tplayer)
|
obj.Seats(seatNum).unmount(tplayer)
|
||||||
continent.VehicleEvents ! VehicleServiceMessage(
|
continent.VehicleEvents ! MessageEnvelope(
|
||||||
continent.id,
|
continent.id,
|
||||||
tplayer.GUID,
|
tplayer.GUID,
|
||||||
VehicleAction.KickPassenger(seatNum, unk2=false, obj.GUID)
|
VehicleAction.KickPassenger(seatNum, unk2=false, obj.GUID)
|
||||||
|
|
@ -1475,19 +1476,19 @@ class GeneralOperations(
|
||||||
val events = continent.AvatarEvents
|
val events = continent.AvatarEvents
|
||||||
val zoneid = continent.id
|
val zoneid = continent.id
|
||||||
val destinationPosition = dest.Position
|
val destinationPosition = dest.Position
|
||||||
events ! AvatarServiceMessage(zoneid, pguid, AvatarAction.ObjectDelete(pguid))
|
events ! MessageEnvelope(zoneid, pguid, ObjectDelete(pguid))
|
||||||
events ! AvatarServiceMessage(player.Name,
|
events ! MessageEnvelope(player.Name,
|
||||||
AvatarAction.SendResponse(PlayerStateShiftMessage(ShiftState(0, destinationPosition, player.Orientation.z)))
|
SendResponse(PlayerStateShiftMessage(ShiftState(0, destinationPosition, player.Orientation.z)))
|
||||||
)
|
)
|
||||||
player.Position = destinationPosition
|
player.Position = destinationPosition
|
||||||
events ! AvatarServiceMessage(zoneid, pguid, AvatarAction.LoadPlayer(
|
events ! MessageEnvelope(zoneid, pguid, AvatarAction.LoadPlayer(
|
||||||
player.Definition.ObjectId,
|
player.Definition.ObjectId,
|
||||||
pguid,
|
pguid,
|
||||||
player.Definition.Packet.ConstructorData(player).get,
|
player.Definition.Packet.ConstructorData(player).get,
|
||||||
None
|
None
|
||||||
))
|
))
|
||||||
useRouterTelepadEffect(pguid, sguid, dguid)
|
useRouterTelepadEffect(pguid, sguid, dguid)
|
||||||
continent.LocalEvents ! LocalServiceMessage(
|
events ! MessageEnvelope(
|
||||||
continent.id,
|
continent.id,
|
||||||
pguid,
|
pguid,
|
||||||
LocalAction.RouterTelepadTransport(pguid, sguid, dguid)
|
LocalAction.RouterTelepadTransport(pguid, sguid, dguid)
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,8 @@ import net.psforever.objects.sourcing.{PlayerSource, SourceEntry, UniquePlayer}
|
||||||
import net.psforever.packet.game.objectcreate.ConstructorData
|
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, AvatarServiceResponse}
|
||||||
|
import net.psforever.services.base.envelope.MessageEnvelope
|
||||||
import net.psforever.services.base.message.{EventResponse, SendResponse}
|
import net.psforever.services.base.message.{EventResponse, SendResponse}
|
||||||
import net.psforever.services.chat.OutfitChannel
|
import net.psforever.services.chat.OutfitChannel
|
||||||
|
|
||||||
|
|
@ -140,7 +141,7 @@ class SessionAvatarHandlers(
|
||||||
val playersInZone = killer.Zone.Players.map { avatar => (avatar.id, avatar.basic.name) }
|
val playersInZone = killer.Zone.Players.map { avatar => (avatar.id, avatar.basic.name) }
|
||||||
val squadMembersHere = playersInZone.filter(member => squadMembers.contains(member._2))
|
val squadMembersHere = playersInZone.filter(member => squadMembers.contains(member._2))
|
||||||
squadMembersHere.foreach { member =>
|
squadMembersHere.foreach { member =>
|
||||||
killer.Zone.AvatarEvents ! AvatarServiceMessage(
|
killer.Zone.AvatarEvents ! MessageEnvelope(
|
||||||
member._2,
|
member._2,
|
||||||
AvatarAction.AwardBep(member._1, expSplit, ExperienceType.Normal))
|
AvatarAction.AwardBep(member._1, expSplit, ExperienceType.Normal))
|
||||||
}
|
}
|
||||||
|
|
@ -155,7 +156,7 @@ class SessionAvatarHandlers(
|
||||||
val playersInZone = vehicle.Zone.Players.map { avatar => (avatar.id, avatar.basic.name) }
|
val playersInZone = vehicle.Zone.Players.map { avatar => (avatar.id, avatar.basic.name) }
|
||||||
val squadMembersHere = playersInZone.filter(member => squadMembers.contains(member._2))
|
val squadMembersHere = playersInZone.filter(member => squadMembers.contains(member._2))
|
||||||
squadMembersHere.foreach { member =>
|
squadMembersHere.foreach { member =>
|
||||||
vehicle.Zone.AvatarEvents ! AvatarServiceMessage(
|
vehicle.Zone.AvatarEvents ! MessageEnvelope(
|
||||||
member._2,
|
member._2,
|
||||||
AvatarAction.AwardBep(member._1, exp, ExperienceType.Normal))
|
AvatarAction.AwardBep(member._1, exp, ExperienceType.Normal))
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ package net.psforever.actors.session.support
|
||||||
import akka.actor.typed.receptionist.Receptionist
|
import akka.actor.typed.receptionist.Receptionist
|
||||||
import akka.actor.typed.scaladsl.adapter._
|
import akka.actor.typed.scaladsl.adapter._
|
||||||
import akka.actor.{ActorContext, ActorRef, typed}
|
import akka.actor.{ActorContext, ActorRef, typed}
|
||||||
|
import net.psforever.services.base.envelope.MessageEnvelope
|
||||||
import net.psforever.services.chat.ChatService
|
import net.psforever.services.chat.ChatService
|
||||||
|
|
||||||
import scala.collection.mutable
|
import scala.collection.mutable
|
||||||
|
|
@ -31,7 +32,7 @@ import net.psforever.packet._
|
||||||
import net.psforever.packet.game._
|
import net.psforever.packet.game._
|
||||||
import net.psforever.services.account.AccountPersistenceService
|
import net.psforever.services.account.AccountPersistenceService
|
||||||
import net.psforever.services.ServiceManager.LookupResult
|
import net.psforever.services.ServiceManager.LookupResult
|
||||||
import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage}
|
import net.psforever.services.vehicle.VehicleAction
|
||||||
import net.psforever.services.{Service, InterstellarClusterService => ICS}
|
import net.psforever.services.{Service, InterstellarClusterService => ICS}
|
||||||
import net.psforever.types._
|
import net.psforever.types._
|
||||||
import net.psforever.util.Config
|
import net.psforever.util.Config
|
||||||
|
|
@ -567,7 +568,7 @@ class SessionData(
|
||||||
case (Some(obj), Some(seatNum)) =>
|
case (Some(obj), Some(seatNum)) =>
|
||||||
tplayer.VehicleSeated = None
|
tplayer.VehicleSeated = None
|
||||||
obj.Seats(seatNum).unmount(tplayer)
|
obj.Seats(seatNum).unmount(tplayer)
|
||||||
continent.VehicleEvents ! VehicleServiceMessage(
|
continent.VehicleEvents ! MessageEnvelope(
|
||||||
continent.id,
|
continent.id,
|
||||||
tplayer.GUID,
|
tplayer.GUID,
|
||||||
VehicleAction.KickPassenger(seatNum, unk2=false, obj.GUID)
|
VehicleAction.KickPassenger(seatNum, unk2=false, obj.GUID)
|
||||||
|
|
|
||||||
|
|
@ -9,8 +9,9 @@ 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.CachedEnvelope
|
import net.psforever.services.base.CachedEnvelope
|
||||||
|
import net.psforever.services.base.envelope.MessageEnvelope
|
||||||
import net.psforever.services.base.message.SendResponse
|
import net.psforever.services.base.message.SendResponse
|
||||||
import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage}
|
import net.psforever.services.vehicle.VehicleAction
|
||||||
import net.psforever.types.{BailType, PlanetSideGUID, Vector3}
|
import net.psforever.types.{BailType, PlanetSideGUID, Vector3}
|
||||||
//
|
//
|
||||||
import net.psforever.actors.session.AvatarActor
|
import net.psforever.actors.session.AvatarActor
|
||||||
|
|
@ -186,7 +187,7 @@ class SessionMountHandlers(
|
||||||
avatarActor ! AvatarActor.DeactivateActiveImplants
|
avatarActor ! AvatarActor.DeactivateActiveImplants
|
||||||
avatarActor ! AvatarActor.SuspendStaminaRegeneration(3.seconds)
|
avatarActor ! AvatarActor.SuspendStaminaRegeneration(3.seconds)
|
||||||
sendResponse(ObjectAttachMessage(objGuid, playerGuid, seatNum))
|
sendResponse(ObjectAttachMessage(objGuid, playerGuid, seatNum))
|
||||||
continent.VehicleEvents ! VehicleServiceMessage(
|
continent.VehicleEvents ! MessageEnvelope(
|
||||||
continent.id,
|
continent.id,
|
||||||
playerGuid,
|
playerGuid,
|
||||||
VehicleAction.MountVehicle(objGuid, seatNum)
|
VehicleAction.MountVehicle(objGuid, seatNum)
|
||||||
|
|
@ -204,13 +205,12 @@ class SessionMountHandlers(
|
||||||
if (tplayer.BailProtection) {
|
if (tplayer.BailProtection) {
|
||||||
tplayer.ContributionFrom(obj)
|
tplayer.ContributionFrom(obj)
|
||||||
sessionLogic.keepAliveFunc = sessionLogic.zoning.NormalKeepAlive
|
sessionLogic.keepAliveFunc = sessionLogic.zoning.NormalKeepAlive
|
||||||
continent.VehicleEvents ! VehicleServiceMessage(
|
continent.VehicleEvents ! MessageEnvelope(
|
||||||
continent.id,
|
continent.id,
|
||||||
SendResponse(PlanetsideAttributeMessage(obj.GUID, 81, 1))
|
SendResponse(List(
|
||||||
)
|
PlanetsideAttributeMessage(obj.GUID, 81, 1),
|
||||||
continent.VehicleEvents ! VehicleServiceMessage(
|
ObjectDetachMessage(obj.GUID, tplayer.GUID, tplayer.Position, obj.Orientation))
|
||||||
continent.id,
|
)
|
||||||
SendResponse(ObjectDetachMessage(obj.GUID, tplayer.GUID, tplayer.Position, obj.Orientation))
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
@ -250,7 +250,7 @@ class SessionMountHandlers(
|
||||||
BailType.Normal
|
BailType.Normal
|
||||||
}
|
}
|
||||||
sendResponse(DismountVehicleMsg(playerGuid, bailType, wasKickedByDriver = false))
|
sendResponse(DismountVehicleMsg(playerGuid, bailType, wasKickedByDriver = false))
|
||||||
continent.VehicleEvents ! VehicleServiceMessage(
|
continent.VehicleEvents ! MessageEnvelope(
|
||||||
continent.id,
|
continent.id,
|
||||||
playerGuid,
|
playerGuid,
|
||||||
VehicleAction.DismountVehicle(bailType, unk2 = false)
|
VehicleAction.DismountVehicle(bailType, unk2 = false)
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,8 @@ import net.psforever.objects.Player
|
||||||
import net.psforever.packet.game.OutfitEventAction.{Initial, Leaving, OutfitInfo, OutfitRankNames, Unk1, Update, UpdateMemberCount}
|
import net.psforever.packet.game.OutfitEventAction.{Initial, Leaving, OutfitInfo, OutfitRankNames, Unk1, Update, UpdateMemberCount}
|
||||||
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
|
||||||
|
import net.psforever.services.base.envelope.MessageEnvelope
|
||||||
import net.psforever.services.base.message.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
|
||||||
|
|
@ -84,12 +85,12 @@ object SessionOutfitHandlers {
|
||||||
player.outfit_id = outfit.id
|
player.outfit_id = outfit.id
|
||||||
player.outfit_name = outfit.name
|
player.outfit_name = outfit.name
|
||||||
|
|
||||||
player.Zone.AvatarEvents ! AvatarServiceMessage(
|
player.Zone.AvatarEvents ! MessageEnvelope(
|
||||||
player.Zone.id,
|
player.Zone.id,
|
||||||
PlanetsideAttribute(player.GUID, 39, outfit.id)
|
PlanetsideAttribute(player.GUID, 39, outfit.id)
|
||||||
)
|
)
|
||||||
|
|
||||||
player.Zone.AvatarEvents ! AvatarServiceMessage(
|
player.Zone.AvatarEvents ! MessageEnvelope(
|
||||||
player.Zone.id,
|
player.Zone.id,
|
||||||
player.GUID,
|
player.GUID,
|
||||||
AvatarAction.PlanetsideStringAttribute(0, outfit.name)
|
AvatarAction.PlanetsideStringAttribute(0, outfit.name)
|
||||||
|
|
@ -174,12 +175,12 @@ object SessionOutfitHandlers {
|
||||||
invited.outfit_id = outfit.id
|
invited.outfit_id = outfit.id
|
||||||
invited.outfit_name = outfit.name
|
invited.outfit_name = outfit.name
|
||||||
|
|
||||||
invited.Zone.AvatarEvents ! AvatarServiceMessage(
|
invited.Zone.AvatarEvents ! MessageEnvelope(
|
||||||
invited.Zone.id,
|
invited.Zone.id,
|
||||||
PlanetsideAttribute(invited.GUID, 39, outfit.id)
|
PlanetsideAttribute(invited.GUID, 39, outfit.id)
|
||||||
)
|
)
|
||||||
|
|
||||||
invited.Zone.AvatarEvents ! AvatarServiceMessage(
|
invited.Zone.AvatarEvents ! MessageEnvelope(
|
||||||
invited.Zone.id,
|
invited.Zone.id,
|
||||||
invited.GUID,
|
invited.GUID,
|
||||||
AvatarAction.PlanetsideStringAttribute(0, outfit.name)
|
AvatarAction.PlanetsideStringAttribute(0, outfit.name)
|
||||||
|
|
@ -241,12 +242,12 @@ object SessionOutfitHandlers {
|
||||||
OutfitMemberEvent(outfit_id, kickedId, OutfitMemberEventAction.Kicked()))
|
OutfitMemberEvent(outfit_id, kickedId, OutfitMemberEventAction.Kicked()))
|
||||||
)
|
)
|
||||||
|
|
||||||
kickedBy.Zone.AvatarEvents ! AvatarServiceMessage(
|
kickedBy.Zone.AvatarEvents ! MessageEnvelope(
|
||||||
kickedBy.Zone.id,
|
kickedBy.Zone.id,
|
||||||
PlanetsideAttribute(kickedBy.GUID, 39, 0)
|
PlanetsideAttribute(kickedBy.GUID, 39, 0)
|
||||||
)
|
)
|
||||||
|
|
||||||
kickedBy.Zone.AvatarEvents ! AvatarServiceMessage(
|
kickedBy.Zone.AvatarEvents ! MessageEnvelope(
|
||||||
kickedBy.Zone.id,
|
kickedBy.Zone.id,
|
||||||
kickedBy.GUID,
|
kickedBy.GUID,
|
||||||
AvatarAction.PlanetsideStringAttribute(0, "")
|
AvatarAction.PlanetsideStringAttribute(0, "")
|
||||||
|
|
@ -270,18 +271,18 @@ object SessionOutfitHandlers {
|
||||||
OutfitMembershipResponse(OutfitMembershipResponse.PacketType.YouGotKicked, 0, 1,
|
OutfitMembershipResponse(OutfitMembershipResponse.PacketType.YouGotKicked, 0, 1,
|
||||||
kickedBy.CharId, kicked.CharId, kickedBy.Name, kicked.Name, flag = false))
|
kickedBy.CharId, kicked.CharId, kickedBy.Name, kicked.Name, flag = false))
|
||||||
|
|
||||||
kicked.Zone.AvatarEvents ! AvatarServiceMessage(
|
kicked.Zone.AvatarEvents ! MessageEnvelope(
|
||||||
kicked.Zone.id,
|
kicked.Zone.id,
|
||||||
PlanetsideAttribute(kicked.GUID, 39, 0)
|
PlanetsideAttribute(kicked.GUID, 39, 0)
|
||||||
)
|
)
|
||||||
|
|
||||||
kicked.Zone.AvatarEvents ! AvatarServiceMessage(
|
kicked.Zone.AvatarEvents ! MessageEnvelope(
|
||||||
kicked.Zone.id,
|
kicked.Zone.id,
|
||||||
kicked.GUID,
|
kicked.GUID,
|
||||||
AvatarAction.PlanetsideStringAttribute(0, "")
|
AvatarAction.PlanetsideStringAttribute(0, "")
|
||||||
)
|
)
|
||||||
|
|
||||||
kicked.Zone.AvatarEvents ! AvatarServiceMessage(
|
kicked.Zone.AvatarEvents ! MessageEnvelope(
|
||||||
kicked.Name, AvatarAction.RemoveFromOutfitChat(kickedBy.outfit_id))
|
kicked.Name, AvatarAction.RemoveFromOutfitChat(kickedBy.outfit_id))
|
||||||
|
|
||||||
kicked.outfit_id = 0
|
kicked.outfit_id = 0
|
||||||
|
|
@ -634,12 +635,12 @@ object SessionOutfitHandlers {
|
||||||
player.outfit_id = outfit.id
|
player.outfit_id = outfit.id
|
||||||
player.outfit_name = outfit.name
|
player.outfit_name = outfit.name
|
||||||
|
|
||||||
player.Zone.AvatarEvents ! AvatarServiceMessage(
|
player.Zone.AvatarEvents ! MessageEnvelope(
|
||||||
player.Zone.id,
|
player.Zone.id,
|
||||||
PlanetsideAttribute(player.GUID, 39, outfit.id)
|
PlanetsideAttribute(player.GUID, 39, outfit.id)
|
||||||
)
|
)
|
||||||
|
|
||||||
player.Zone.AvatarEvents ! AvatarServiceMessage(
|
player.Zone.AvatarEvents ! MessageEnvelope(
|
||||||
player.Zone.id,
|
player.Zone.id,
|
||||||
player.GUID,
|
player.GUID,
|
||||||
AvatarAction.PlanetsideStringAttribute(0, outfit.name)
|
AvatarAction.PlanetsideStringAttribute(0, outfit.name)
|
||||||
|
|
|
||||||
|
|
@ -2,6 +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.envelope.MessageEnvelope
|
||||||
import net.psforever.services.base.message.PlanetsideAttribute
|
import net.psforever.services.base.message.PlanetsideAttribute
|
||||||
import net.psforever.services.teamwork.SquadServiceResponse
|
import net.psforever.services.teamwork.SquadServiceResponse
|
||||||
|
|
||||||
|
|
@ -11,7 +12,6 @@ import net.psforever.actors.session.AvatarActor
|
||||||
import net.psforever.objects.teamwork.Squad
|
import net.psforever.objects.teamwork.Squad
|
||||||
import net.psforever.objects.{Default, Player}
|
import net.psforever.objects.{Default, Player}
|
||||||
import net.psforever.packet.game._
|
import net.psforever.packet.game._
|
||||||
import net.psforever.services.avatar.AvatarServiceMessage
|
|
||||||
import net.psforever.services.teamwork.{SquadResponse, SquadServiceMessage, SquadAction => SquadServiceAction}
|
import net.psforever.services.teamwork.{SquadResponse, SquadServiceMessage, SquadAction => SquadServiceAction}
|
||||||
import net.psforever.types.{PlanetSideEmpire, PlanetSideGUID, Vector3}
|
import net.psforever.types.{PlanetSideEmpire, PlanetSideGUID, Vector3}
|
||||||
|
|
||||||
|
|
@ -106,7 +106,7 @@ class SessionSquadHandlers(
|
||||||
squadUI.get(player.CharId) match {
|
squadUI.get(player.CharId) match {
|
||||||
case Some(elem) =>
|
case Some(elem) =>
|
||||||
sendResponse(PlanetsideAttributeMessage(player.GUID, 31, squad_supplement_id))
|
sendResponse(PlanetsideAttributeMessage(player.GUID, 31, squad_supplement_id))
|
||||||
continent.AvatarEvents ! AvatarServiceMessage(
|
continent.AvatarEvents ! MessageEnvelope(
|
||||||
s"${player.Faction}",
|
s"${player.Faction}",
|
||||||
player.GUID,
|
player.GUID,
|
||||||
PlanetsideAttribute(player.GUID, 31, squad_supplement_id)
|
PlanetsideAttribute(player.GUID, 31, squad_supplement_id)
|
||||||
|
|
@ -288,7 +288,7 @@ class SessionSquadHandlers(
|
||||||
* @param value value to associate the player
|
* @param value value to associate the player
|
||||||
*/
|
*/
|
||||||
def GiveSquadColorsForOthers(guid: PlanetSideGUID, factionChannel: String, value: Long): Unit = {
|
def GiveSquadColorsForOthers(guid: PlanetSideGUID, factionChannel: String, value: Long): Unit = {
|
||||||
continent.AvatarEvents ! AvatarServiceMessage(factionChannel, guid, PlanetsideAttribute(guid, 31, value))
|
continent.AvatarEvents ! MessageEnvelope(factionChannel, guid, PlanetsideAttribute(guid, 31, value))
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -29,8 +29,8 @@ 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.CachedEnvelope
|
import net.psforever.services.base.CachedEnvelope
|
||||||
|
import net.psforever.services.base.envelope.MessageEnvelope
|
||||||
import net.psforever.services.base.message.{ChangeAmmo, ChangeFireState_Start, ChangeFireState_Stop, ReloadTool, SendResponse, WeaponDryFire}
|
import net.psforever.services.base.message.{ChangeAmmo, ChangeFireState_Start, ChangeFireState_Stop, ReloadTool, SendResponse, WeaponDryFire}
|
||||||
import net.psforever.services.local.LocalServiceMessage
|
|
||||||
import net.psforever.types.{ChatMessageType, PlanetSideEmpire, ValidPlanetSideGUID, Vector3}
|
import net.psforever.types.{ChatMessageType, PlanetSideEmpire, ValidPlanetSideGUID, Vector3}
|
||||||
import net.psforever.util.Config
|
import net.psforever.util.Config
|
||||||
|
|
||||||
|
|
@ -48,8 +48,8 @@ import net.psforever.objects.serverobject.mount.Mountable
|
||||||
import net.psforever.objects.serverobject.turret.FacilityTurret
|
import net.psforever.objects.serverobject.turret.FacilityTurret
|
||||||
import net.psforever.objects._
|
import net.psforever.objects._
|
||||||
import net.psforever.packet.game._
|
import net.psforever.packet.game._
|
||||||
import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage}
|
import net.psforever.services.avatar.AvatarAction
|
||||||
import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage}
|
import net.psforever.services.vehicle.VehicleAction
|
||||||
import net.psforever.types.{ExoSuitType, PlanetSideGUID}
|
import net.psforever.types.{ExoSuitType, PlanetSideGUID}
|
||||||
|
|
||||||
trait WeaponAndProjectileFunctions extends CommonSessionInterfacingFunctionality {
|
trait WeaponAndProjectileFunctions extends CommonSessionInterfacingFunctionality {
|
||||||
|
|
@ -284,9 +284,9 @@ class WeaponAndProjectileOperations(
|
||||||
.orElse { continent.GUID(weapon_guid) }
|
.orElse { continent.GUID(weapon_guid) }
|
||||||
.collect {
|
.collect {
|
||||||
case _: Equipment if containerOpt.exists(_.isInstanceOf[Player]) =>
|
case _: Equipment if containerOpt.exists(_.isInstanceOf[Player]) =>
|
||||||
continent.AvatarEvents ! AvatarServiceMessage(continent.id, player.GUID, WeaponDryFire(weapon_guid))
|
continent.AvatarEvents ! MessageEnvelope(continent.id, player.GUID, WeaponDryFire(weapon_guid))
|
||||||
case _: Equipment =>
|
case _: Equipment =>
|
||||||
continent.VehicleEvents ! VehicleServiceMessage(
|
continent.VehicleEvents ! MessageEnvelope(
|
||||||
continent.id,
|
continent.id,
|
||||||
player.GUID,
|
player.GUID,
|
||||||
WeaponDryFire(weapon_guid)
|
WeaponDryFire(weapon_guid)
|
||||||
|
|
@ -349,7 +349,7 @@ class WeaponAndProjectileOperations(
|
||||||
sendResponse(UplinkResponse(code.value, 0))
|
sendResponse(UplinkResponse(code.value, 0))
|
||||||
sendResponse(PlanetsideAttributeMessage(player.GUID, 59, 1200000))
|
sendResponse(PlanetsideAttributeMessage(player.GUID, 59, 1200000))
|
||||||
avatarActor ! AvatarActor.UpdateCUDTime("emp_blast")
|
avatarActor ! AvatarActor.UpdateCUDTime("emp_blast")
|
||||||
player.Zone.LocalEvents ! LocalServiceMessage(
|
player.Zone.LocalEvents ! MessageEnvelope(
|
||||||
s"${player.Zone.id}",
|
s"${player.Zone.id}",
|
||||||
PlanetSideGUID(-1),
|
PlanetSideGUID(-1),
|
||||||
SendResponse(TriggerEffectMessage(Service.defaultPlayerGUID, empColor, None, Some(TriggeredEffectLocation(player.Position, Vector3(0, 0, 90)))))
|
SendResponse(TriggerEffectMessage(Service.defaultPlayerGUID, empColor, None, Some(TriggeredEffectLocation(player.Position, Vector3(0, 0, 90)))))
|
||||||
|
|
@ -359,7 +359,7 @@ class WeaponAndProjectileOperations(
|
||||||
ExplosiveDeployableControl.detectionForExplosiveSource(player), Zone.findAllTargets)
|
ExplosiveDeployableControl.detectionForExplosiveSource(player), Zone.findAllTargets)
|
||||||
}
|
}
|
||||||
case UplinkRequestType.OrbitalStrike =>
|
case UplinkRequestType.OrbitalStrike =>
|
||||||
player.Zone.LocalEvents ! LocalServiceMessage(
|
player.Zone.LocalEvents ! MessageEnvelope(
|
||||||
s"$playerFaction",
|
s"$playerFaction",
|
||||||
PlanetSideGUID(-1),
|
PlanetSideGUID(-1),
|
||||||
SendResponse(OrbitalStrikeWaypointMessage(player.GUID, pos.get.x, pos.get.y))
|
SendResponse(OrbitalStrikeWaypointMessage(player.GUID, pos.get.x, pos.get.y))
|
||||||
|
|
@ -388,12 +388,12 @@ class WeaponAndProjectileOperations(
|
||||||
sendResponse(PlanetsideAttributeMessage(player.GUID, 60, 10800000))
|
sendResponse(PlanetsideAttributeMessage(player.GUID, 60, 10800000))
|
||||||
avatarActor ! AvatarActor.UpdateCUDTime("orbital_strike")
|
avatarActor ! AvatarActor.UpdateCUDTime("orbital_strike")
|
||||||
context.system.scheduler.scheduleOnce(delay = 5 seconds) {
|
context.system.scheduler.scheduleOnce(delay = 5 seconds) {
|
||||||
player.Zone.LocalEvents ! LocalServiceMessage(
|
player.Zone.LocalEvents ! MessageEnvelope(
|
||||||
s"${player.Zone.id}",
|
s"${player.Zone.id}",
|
||||||
PlanetSideGUID(-1),
|
PlanetSideGUID(-1),
|
||||||
SendResponse(TriggerEffectMessage(ValidPlanetSideGUID(0), strikeType, None, Some(TriggeredEffectLocation(orbitalStrikePos.get, Vector3(0, 0, 90)))))
|
SendResponse(TriggerEffectMessage(ValidPlanetSideGUID(0), strikeType, None, Some(TriggeredEffectLocation(orbitalStrikePos.get, Vector3(0, 0, 90)))))
|
||||||
)
|
)
|
||||||
player.Zone.LocalEvents ! LocalServiceMessage(
|
player.Zone.LocalEvents ! MessageEnvelope(
|
||||||
s"$playerFaction",
|
s"$playerFaction",
|
||||||
PlanetSideGUID(-1),
|
PlanetSideGUID(-1),
|
||||||
SendResponse(OrbitalStrikeWaypointMessage(player.GUID, None))
|
SendResponse(OrbitalStrikeWaypointMessage(player.GUID, None))
|
||||||
|
|
@ -472,7 +472,7 @@ class WeaponAndProjectileOperations(
|
||||||
log.info(s"${player.Name} changed ${player.Sex.possessive} ${obj.Definition.Name}'s fire mode to #$modeIndex")
|
log.info(s"${player.Name} changed ${player.Sex.possessive} ${obj.Definition.Name}'s fire mode to #$modeIndex")
|
||||||
}
|
}
|
||||||
sendResponse(ChangeFireModeMessage(item_guid, modeIndex))
|
sendResponse(ChangeFireModeMessage(item_guid, modeIndex))
|
||||||
continent.AvatarEvents ! AvatarServiceMessage(
|
continent.AvatarEvents ! MessageEnvelope(
|
||||||
sessionLogic.zoning.zoneChannel,
|
sessionLogic.zoning.zoneChannel,
|
||||||
player.GUID,
|
player.GUID,
|
||||||
AvatarAction.ChangeFireMode(item_guid, modeIndex)
|
AvatarAction.ChangeFireMode(item_guid, modeIndex)
|
||||||
|
|
@ -758,7 +758,7 @@ class WeaponAndProjectileOperations(
|
||||||
(target.GUID, (target, proxyCopy, proxyCopy.shot_origin, target.Position))
|
(target.GUID, (target, proxyCopy, proxyCopy.shot_origin, target.Position))
|
||||||
}.unzip
|
}.unzip
|
||||||
//chain lash effect
|
//chain lash effect
|
||||||
continent.AvatarEvents ! AvatarServiceMessage(
|
continent.AvatarEvents ! MessageEnvelope(
|
||||||
continent.id,
|
continent.id,
|
||||||
SendResponse(ChainLashMessage(hitPos, projectile.profile.ObjectId, guidRefs.toList))
|
SendResponse(ChainLashMessage(hitPos, projectile.profile.ObjectId, guidRefs.toList))
|
||||||
)
|
)
|
||||||
|
|
@ -944,9 +944,9 @@ class WeaponAndProjectileOperations(
|
||||||
tool.Magazine = 0
|
tool.Magazine = 0
|
||||||
sendResponse(InventoryStateMessage(tool.AmmoSlot.Box.GUID, weapon_guid, 0))
|
sendResponse(InventoryStateMessage(tool.AmmoSlot.Box.GUID, weapon_guid, 0))
|
||||||
sendResponse(ChangeFireStateMessage_Stop(weapon_guid))
|
sendResponse(ChangeFireStateMessage_Stop(weapon_guid))
|
||||||
continent.AvatarEvents ! AvatarServiceMessage(continent.id, player.GUID, ChangeFireState_Stop(weapon_guid))
|
continent.AvatarEvents ! MessageEnvelope(continent.id, player.GUID, ChangeFireState_Stop(weapon_guid))
|
||||||
sendResponse(WeaponDryFireMessage(weapon_guid))
|
sendResponse(WeaponDryFireMessage(weapon_guid))
|
||||||
continent.AvatarEvents ! AvatarServiceMessage(continent.id, player.GUID, WeaponDryFire(weapon_guid))
|
continent.AvatarEvents ! MessageEnvelope(continent.id, player.GUID, WeaponDryFire(weapon_guid))
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -962,7 +962,7 @@ class WeaponAndProjectileOperations(
|
||||||
.map { sessionLogic.validObject(_, decorator="FindDetectedProjectileTargets") }
|
.map { sessionLogic.validObject(_, decorator="FindDetectedProjectileTargets") }
|
||||||
.flatMap {
|
.flatMap {
|
||||||
case Some(obj: Vehicle) if !obj.Cloaked =>
|
case Some(obj: Vehicle) if !obj.Cloaked =>
|
||||||
//TODO hint: vehicleService ! VehicleServiceMessage(s"${obj.Actor}", VehicleAction.ProjectileAutoLockAwareness(mode))
|
//TODO hint: vehicleService ! MessageEnvelope(s"${obj.Actor}", VehicleAction.ProjectileAutoLockAwareness(mode))
|
||||||
obj.Seats.values.flatMap { seat => seat.occupants.map(_.Name) }
|
obj.Seats.values.flatMap { seat => seat.occupants.map(_.Name) }
|
||||||
case Some(obj: Mountable) =>
|
case Some(obj: Mountable) =>
|
||||||
obj.Seats.values.flatMap { seat => seat.occupants.map(_.Name) }
|
obj.Seats.values.flatMap { seat => seat.occupants.map(_.Name) }
|
||||||
|
|
@ -1087,7 +1087,7 @@ class WeaponAndProjectileOperations(
|
||||||
}
|
}
|
||||||
|
|
||||||
def fireStateStartPlayerMessages(itemGuid: PlanetSideGUID): Unit = {
|
def fireStateStartPlayerMessages(itemGuid: PlanetSideGUID): Unit = {
|
||||||
continent.AvatarEvents ! AvatarServiceMessage(
|
continent.AvatarEvents ! MessageEnvelope(
|
||||||
sessionLogic.zoning.zoneChannel,
|
sessionLogic.zoning.zoneChannel,
|
||||||
player.GUID,
|
player.GUID,
|
||||||
ChangeFireState_Start(itemGuid)
|
ChangeFireState_Start(itemGuid)
|
||||||
|
|
@ -1099,7 +1099,7 @@ class WeaponAndProjectileOperations(
|
||||||
case turret: FacilityTurret if continent.map.cavern =>
|
case turret: FacilityTurret if continent.map.cavern =>
|
||||||
turret.Actor ! VanuSentry.ChangeFireStart
|
turret.Actor ! VanuSentry.ChangeFireStart
|
||||||
}
|
}
|
||||||
continent.VehicleEvents ! VehicleServiceMessage(
|
continent.VehicleEvents ! MessageEnvelope(
|
||||||
continent.id,
|
continent.id,
|
||||||
player.GUID,
|
player.GUID,
|
||||||
ChangeFireState_Start(itemGuid)
|
ChangeFireState_Start(itemGuid)
|
||||||
|
|
@ -1128,7 +1128,7 @@ class WeaponAndProjectileOperations(
|
||||||
}
|
}
|
||||||
|
|
||||||
def fireStateStopPlayerMessages(itemGuid: PlanetSideGUID): Unit = {
|
def fireStateStopPlayerMessages(itemGuid: PlanetSideGUID): Unit = {
|
||||||
continent.AvatarEvents ! AvatarServiceMessage(
|
continent.AvatarEvents ! MessageEnvelope(
|
||||||
sessionLogic.zoning.zoneChannel,
|
sessionLogic.zoning.zoneChannel,
|
||||||
player.GUID,
|
player.GUID,
|
||||||
ChangeFireState_Stop(itemGuid)
|
ChangeFireState_Stop(itemGuid)
|
||||||
|
|
@ -1140,7 +1140,7 @@ class WeaponAndProjectileOperations(
|
||||||
case turret: FacilityTurret if continent.map.cavern =>
|
case turret: FacilityTurret if continent.map.cavern =>
|
||||||
turret.Actor ! VanuSentry.ChangeFireStop
|
turret.Actor ! VanuSentry.ChangeFireStop
|
||||||
}
|
}
|
||||||
continent.VehicleEvents ! VehicleServiceMessage(
|
continent.VehicleEvents ! MessageEnvelope(
|
||||||
continent.id,
|
continent.id,
|
||||||
player.GUID,
|
player.GUID,
|
||||||
ChangeFireState_Stop(itemGuid)
|
ChangeFireState_Stop(itemGuid)
|
||||||
|
|
@ -1200,11 +1200,11 @@ class WeaponAndProjectileOperations(
|
||||||
used by ReloadMessage handling
|
used by ReloadMessage handling
|
||||||
*/
|
*/
|
||||||
def reloadPlayerMessages(itemGuid: PlanetSideGUID): Unit = {
|
def reloadPlayerMessages(itemGuid: PlanetSideGUID): Unit = {
|
||||||
continent.AvatarEvents ! AvatarServiceMessage(sessionLogic.zoning.zoneChannel, player.GUID, ReloadTool(itemGuid))
|
continent.AvatarEvents ! MessageEnvelope(sessionLogic.zoning.zoneChannel, player.GUID, ReloadTool(itemGuid))
|
||||||
}
|
}
|
||||||
|
|
||||||
def reloadVehicleMessages(itemGuid: PlanetSideGUID): Unit = {
|
def reloadVehicleMessages(itemGuid: PlanetSideGUID): Unit = {
|
||||||
continent.VehicleEvents ! VehicleServiceMessage(
|
continent.VehicleEvents ! MessageEnvelope(
|
||||||
continent.id,
|
continent.id,
|
||||||
player.GUID,
|
player.GUID,
|
||||||
ReloadTool(itemGuid)
|
ReloadTool(itemGuid)
|
||||||
|
|
@ -1381,7 +1381,7 @@ class WeaponAndProjectileOperations(
|
||||||
val previous_box_guid = previousBox.GUID
|
val previous_box_guid = previousBox.GUID
|
||||||
val boxDef = box.Definition
|
val boxDef = box.Definition
|
||||||
sendResponse(ChangeAmmoMessage(tool_guid, box.Capacity))
|
sendResponse(ChangeAmmoMessage(tool_guid, box.Capacity))
|
||||||
continent.AvatarEvents ! AvatarServiceMessage(
|
continent.AvatarEvents ! MessageEnvelope(
|
||||||
sessionLogic.zoning.zoneChannel,
|
sessionLogic.zoning.zoneChannel,
|
||||||
player.GUID,
|
player.GUID,
|
||||||
ChangeAmmo(
|
ChangeAmmo(
|
||||||
|
|
@ -1482,7 +1482,7 @@ class WeaponAndProjectileOperations(
|
||||||
def modifyAmmunitionInMountable(obj: PlanetSideServerObject with Container)(box: AmmoBox, reloadValue: Int): Unit = {
|
def modifyAmmunitionInMountable(obj: PlanetSideServerObject with Container)(box: AmmoBox, reloadValue: Int): Unit = {
|
||||||
modifyAmmunition(obj)(box, reloadValue)
|
modifyAmmunition(obj)(box, reloadValue)
|
||||||
obj.Find(box).collect { index =>
|
obj.Find(box).collect { index =>
|
||||||
continent.VehicleEvents ! VehicleServiceMessage(
|
continent.VehicleEvents ! MessageEnvelope(
|
||||||
s"${obj.Actor}",
|
s"${obj.Actor}",
|
||||||
player.GUID,
|
player.GUID,
|
||||||
VehicleAction.InventoryState(box, obj.GUID, index, box.Definition.Packet.DetailedConstructorData(box).get)
|
VehicleAction.InventoryState(box, obj.GUID, index, box.Definition.Packet.DetailedConstructorData(box).get)
|
||||||
|
|
@ -1589,7 +1589,7 @@ class WeaponAndProjectileOperations(
|
||||||
shootingStop.clear()
|
shootingStop.clear()
|
||||||
(prefire ++ shooting).foreach { guid =>
|
(prefire ++ shooting).foreach { guid =>
|
||||||
sendResponse(ChangeFireStateMessage_Stop(guid))
|
sendResponse(ChangeFireStateMessage_Stop(guid))
|
||||||
continent.AvatarEvents ! AvatarServiceMessage(continent.id, player.GUID, ChangeFireState_Stop(guid))
|
continent.AvatarEvents ! MessageEnvelope(continent.id, player.GUID, ChangeFireState_Stop(guid))
|
||||||
}
|
}
|
||||||
prefire.clear()
|
prefire.clear()
|
||||||
shooting.clear()
|
shooting.clear()
|
||||||
|
|
|
||||||
|
|
@ -23,6 +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.support.{CorpseEnvelope, ReleaseEnvelope}
|
import net.psforever.services.avatar.support.{CorpseEnvelope, ReleaseEnvelope}
|
||||||
|
import net.psforever.services.base.envelope.MessageEnvelope
|
||||||
import net.psforever.services.base.message.{GenericObjectAction, ObjectDelete, PlanetsideAttribute, SendResponse}
|
import net.psforever.services.base.message.{GenericObjectAction, ObjectDelete, PlanetsideAttribute, SendResponse}
|
||||||
import net.psforever.services.chat.DefaultChannel
|
import net.psforever.services.chat.DefaultChannel
|
||||||
|
|
||||||
|
|
@ -64,16 +65,16 @@ import net.psforever.packet.game.objectcreate.{DroppedItemData, ObjectCreateMess
|
||||||
import net.psforever.packet.game.objectcreate.ObjectClass
|
import net.psforever.packet.game.objectcreate.ObjectClass
|
||||||
import net.psforever.packet.{PlanetSideGamePacket, game}
|
import net.psforever.packet.{PlanetSideGamePacket, game}
|
||||||
import net.psforever.persistence.Savedplayer
|
import net.psforever.persistence.Savedplayer
|
||||||
import net.psforever.services.RemoverActor
|
|
||||||
import net.psforever.services.ServiceManager.{Lookup, LookupResult}
|
import net.psforever.services.ServiceManager.{Lookup, LookupResult}
|
||||||
import net.psforever.services.account.{AccountPersistenceService, PlayerToken}
|
import net.psforever.services.account.{AccountPersistenceService, PlayerToken}
|
||||||
import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage}
|
import net.psforever.services.avatar.AvatarAction
|
||||||
import net.psforever.services.galaxy.{GalaxyAction, GalaxyServiceMessage}
|
import net.psforever.services.base.support.RemoverActor
|
||||||
|
import net.psforever.services.galaxy.GalaxyAction
|
||||||
import net.psforever.services.hart.HartTimer
|
import net.psforever.services.hart.HartTimer
|
||||||
import net.psforever.services.local.support.HackCaptureActor
|
import net.psforever.services.local.support.HackCaptureActor
|
||||||
import net.psforever.services.local.{LocalAction, LocalServiceMessage}
|
import net.psforever.services.local.LocalAction
|
||||||
import net.psforever.services.properties.PropertyOverrideManager
|
import net.psforever.services.properties.PropertyOverrideManager
|
||||||
import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage}
|
import net.psforever.services.vehicle.VehicleAction
|
||||||
import net.psforever.services.{CavernRotationService, Service, ServiceManager, InterstellarClusterService => ICS}
|
import net.psforever.services.{CavernRotationService, Service, ServiceManager, InterstellarClusterService => ICS}
|
||||||
import net.psforever.types._
|
import net.psforever.types._
|
||||||
import net.psforever.util.{Config, DefinitionUtil}
|
import net.psforever.util.{Config, DefinitionUtil}
|
||||||
|
|
@ -128,7 +129,7 @@ object ZoningOperations {
|
||||||
.filter(p => Sidedness.equals(side, p.WhichSide))
|
.filter(p => Sidedness.equals(side, p.WhichSide))
|
||||||
.map(_.Name) ++ additionalChannels)
|
.map(_.Name) ++ additionalChannels)
|
||||||
.foreach { target =>
|
.foreach { target =>
|
||||||
events ! LocalServiceMessage(target, effectMessage)
|
events ! MessageEnvelope(target, effectMessage)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -156,11 +157,11 @@ object ZoningOperations {
|
||||||
}
|
}
|
||||||
val effectMessage = LocalAction.TriggerEffectLocation(s"respawn_$faction", position, orientation)
|
val effectMessage = LocalAction.TriggerEffectLocation(s"respawn_$faction", position, orientation)
|
||||||
(effectTargets.map(_.Name) ++ additionalChannels).foreach { target =>
|
(effectTargets.map(_.Name) ++ additionalChannels).foreach { target =>
|
||||||
events ! LocalServiceMessage(target, effectMessage)
|
events ! MessageEnvelope(target, effectMessage)
|
||||||
}
|
}
|
||||||
val soundMessage = LocalAction.TriggerSound(TriggeredSound.SpawnInTube, position, 50, 0.69803923f)
|
val soundMessage = LocalAction.TriggerSound(TriggeredSound.SpawnInTube, position, 50, 0.69803923f)
|
||||||
(soundTargets.map(_.Name) ++ additionalChannels).foreach { target =>
|
(soundTargets.map(_.Name) ++ additionalChannels).foreach { target =>
|
||||||
events ! LocalServiceMessage(target, soundMessage)
|
events ! MessageEnvelope(target, soundMessage)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -549,7 +550,7 @@ class ZoningOperations(
|
||||||
sendResponse(OCM.apply(projectile))
|
sendResponse(OCM.apply(projectile))
|
||||||
}
|
}
|
||||||
//spawn point update request
|
//spawn point update request
|
||||||
continent.VehicleEvents ! VehicleServiceMessage(
|
continent.VehicleEvents ! MessageEnvelope(
|
||||||
player.Name,
|
player.Name,
|
||||||
VehicleAction.UpdateAmsSpawnPoint(continent)
|
VehicleAction.UpdateAmsSpawnPoint(continent)
|
||||||
)
|
)
|
||||||
|
|
@ -597,7 +598,7 @@ class ZoningOperations(
|
||||||
context.self
|
context.self
|
||||||
)
|
)
|
||||||
LivePlayerList.Add(avatar.id, avatar)
|
LivePlayerList.Add(avatar.id, avatar)
|
||||||
galaxyService.tell(GalaxyServiceMessage(GalaxyAction.LogStatusChange(avatar.name)), context.parent)
|
galaxyService.tell(MessageEnvelope("", GalaxyAction.LogStatusChange(avatar.name)), context.parent)
|
||||||
//PropertyOverrideMessage
|
//PropertyOverrideMessage
|
||||||
ServiceManager.serviceManager ! Lookup("propertyOverrideManager")
|
ServiceManager.serviceManager ! Lookup("propertyOverrideManager")
|
||||||
sendResponse(PlanetsideAttributeMessage(PlanetSideGUID(0), 112, 0)) // disable festive backpacks
|
sendResponse(PlanetsideAttributeMessage(PlanetSideGUID(0), 112, 0)) // disable festive backpacks
|
||||||
|
|
@ -853,7 +854,7 @@ class ZoningOperations(
|
||||||
case None =>
|
case None =>
|
||||||
spawn.deadState = DeadState.Release // cancel movement updates
|
spawn.deadState = DeadState.Release // cancel movement updates
|
||||||
player.Position = position
|
player.Position = position
|
||||||
// continent.AvatarEvents ! AvatarServiceMessage(continent.Id, ObjectDelete(player.GUID, player.GUID))
|
// continent.AvatarEvents ! MessageEnvelope(continent.Id, ObjectDelete(player.GUID, player.GUID))
|
||||||
spawn.LoadZonePhysicalSpawnPoint(zoneId, position, Vector3.Zero, 0 seconds, None)
|
spawn.LoadZonePhysicalSpawnPoint(zoneId, position, Vector3.Zero, 0 seconds, None)
|
||||||
case _ => // seated in something that is not a vehicle or the vehicle is cargo, in which case we can't move
|
case _ => // seated in something that is not a vehicle or the vehicle is cargo, in which case we can't move
|
||||||
}
|
}
|
||||||
|
|
@ -1207,7 +1208,7 @@ class ZoningOperations(
|
||||||
sendResponse(OCM.apply(llu))
|
sendResponse(OCM.apply(llu))
|
||||||
// Attach it to a player if it has a carrier
|
// Attach it to a player if it has a carrier
|
||||||
if (llu.Carrier.nonEmpty) {
|
if (llu.Carrier.nonEmpty) {
|
||||||
continent.LocalEvents ! LocalServiceMessage(
|
continent.LocalEvents ! MessageEnvelope(
|
||||||
continent.id,
|
continent.id,
|
||||||
PlanetSideGUID(-1),
|
PlanetSideGUID(-1),
|
||||||
SendResponse(ObjectAttachMessage(llu.Carrier.get.GUID, llu.GUID, 252))
|
SendResponse(ObjectAttachMessage(llu.Carrier.get.GUID, llu.GUID, 252))
|
||||||
|
|
@ -1352,7 +1353,7 @@ class ZoningOperations(
|
||||||
val pguid = player.GUID
|
val pguid = player.GUID
|
||||||
val toChannel = manifest.file
|
val toChannel = manifest.file
|
||||||
val topLevel = interstellarFerryTopLevelGUID.getOrElse(vehicle.GUID)
|
val topLevel = interstellarFerryTopLevelGUID.getOrElse(vehicle.GUID)
|
||||||
continent.VehicleEvents ! VehicleServiceMessage(
|
continent.VehicleEvents ! MessageEnvelope(
|
||||||
s"${vehicle.Actor}",
|
s"${vehicle.Actor}",
|
||||||
pguid,
|
pguid,
|
||||||
VehicleAction.TransferPassengerChannel(s"${vehicle.Actor}", toChannel, vehicle, topLevel)
|
VehicleAction.TransferPassengerChannel(s"${vehicle.Actor}", toChannel, vehicle, topLevel)
|
||||||
|
|
@ -1366,7 +1367,7 @@ class ZoningOperations(
|
||||||
cargo.Actor ! CargoBehavior.StartCargoDismounting(bailed = false)
|
cargo.Actor ! CargoBehavior.StartCargoDismounting(bailed = false)
|
||||||
case entry =>
|
case entry =>
|
||||||
val cargo = vehicle.CargoHolds(entry.mount).occupant.get
|
val cargo = vehicle.CargoHolds(entry.mount).occupant.get
|
||||||
continent.VehicleEvents ! VehicleServiceMessage(
|
continent.VehicleEvents ! MessageEnvelope(
|
||||||
entry.name,
|
entry.name,
|
||||||
pguid,
|
pguid,
|
||||||
VehicleAction.TransferPassengerChannel(s"${cargo.Actor}", toChannel, cargo, topLevel)
|
VehicleAction.TransferPassengerChannel(s"${cargo.Actor}", toChannel, cargo, topLevel)
|
||||||
|
|
@ -1398,7 +1399,7 @@ class ZoningOperations(
|
||||||
interstellarFerryTopLevelGUID =
|
interstellarFerryTopLevelGUID =
|
||||||
if (manifest.passengers.isEmpty && manifest.cargo.count { !_.name.equals("MISSING_DRIVER") } == 0) {
|
if (manifest.passengers.isEmpty && manifest.cargo.count { !_.name.equals("MISSING_DRIVER") } == 0) {
|
||||||
//do not delete if vehicle has passengers or cargo
|
//do not delete if vehicle has passengers or cargo
|
||||||
continent.VehicleEvents ! VehicleServiceMessage(
|
continent.VehicleEvents ! MessageEnvelope(
|
||||||
continent.id,
|
continent.id,
|
||||||
pguid,
|
pguid,
|
||||||
VehicleAction.UnloadVehicle(vehicle, topLevel)
|
VehicleAction.UnloadVehicle(vehicle, topLevel)
|
||||||
|
|
@ -1476,14 +1477,14 @@ class ZoningOperations(
|
||||||
case Some(manifest) =>
|
case Some(manifest) =>
|
||||||
val toChannel = manifest.file
|
val toChannel = manifest.file
|
||||||
val topLevel = interstellarFerryTopLevelGUID.getOrElse(vehicle.GUID)
|
val topLevel = interstellarFerryTopLevelGUID.getOrElse(vehicle.GUID)
|
||||||
galaxyService ! GalaxyServiceMessage(toChannel, GalaxyAction.TransferPassenger(player_guid, toChannel, vehicle, topLevel, manifest))
|
galaxyService ! MessageEnvelope(toChannel, GalaxyAction.TransferPassenger(player_guid, toChannel, vehicle, topLevel, manifest))
|
||||||
vehicle.CargoHolds.values
|
vehicle.CargoHolds.values
|
||||||
.collect {
|
.collect {
|
||||||
case hold if hold.isOccupied =>
|
case hold if hold.isOccupied =>
|
||||||
val cargo = hold.occupant.get
|
val cargo = hold.occupant.get
|
||||||
cargo.Continent = toZoneId
|
cargo.Continent = toZoneId
|
||||||
//point to the cargo vehicle to instigate cargo vehicle driver transportation
|
//point to the cargo vehicle to instigate cargo vehicle driver transportation
|
||||||
// galaxyService ! GalaxyServiceMessage(
|
// galaxyService ! MesdsageEnvelope(
|
||||||
// toChannel,
|
// toChannel,
|
||||||
// GalaxyAction.TransferPassenger(player_guid, toChannel, vehicle, topLevel, manifest)
|
// GalaxyAction.TransferPassenger(player_guid, toChannel, vehicle, topLevel, manifest)
|
||||||
// )
|
// )
|
||||||
|
|
@ -2194,7 +2195,7 @@ class ZoningOperations(
|
||||||
log.info(s"RestoreInfo: player $name is already logged in zone ${inZone.id}; rejoining that character")
|
log.info(s"RestoreInfo: player $name is already logged in zone ${inZone.id}; rejoining that character")
|
||||||
sessionLogic.persistFunc = UpdatePersistence(from)
|
sessionLogic.persistFunc = UpdatePersistence(from)
|
||||||
//tell the old WorldSessionActor to kill itself by using its own subscriptions against itself
|
//tell the old WorldSessionActor to kill itself by using its own subscriptions against itself
|
||||||
inZone.AvatarEvents ! AvatarServiceMessage(name, AvatarAction.TeardownConnection())
|
inZone.AvatarEvents ! MessageEnvelope(name, AvatarAction.TeardownConnection())
|
||||||
spawn.switchAvatarStatisticsFieldToRefreshAfterRespawn()
|
spawn.switchAvatarStatisticsFieldToRefreshAfterRespawn()
|
||||||
//find and reload previous player
|
//find and reload previous player
|
||||||
(
|
(
|
||||||
|
|
@ -2597,7 +2598,7 @@ class ZoningOperations(
|
||||||
vehicle.CargoHolds.values
|
vehicle.CargoHolds.values
|
||||||
.collect { case hold if hold.isOccupied => hold.occupant.get }
|
.collect { case hold if hold.isOccupied => hold.occupant.get }
|
||||||
.foreach { _.MountedIn = vguid }
|
.foreach { _.MountedIn = vguid }
|
||||||
events ! VehicleServiceMessage(
|
events ! MessageEnvelope(
|
||||||
zoneid,
|
zoneid,
|
||||||
player.GUID,
|
player.GUID,
|
||||||
VehicleAction.LoadVehicle(vehicle, vObjectId, vguid, data)
|
VehicleAction.LoadVehicle(vehicle, vObjectId, vguid, data)
|
||||||
|
|
@ -2625,7 +2626,7 @@ class ZoningOperations(
|
||||||
//do not dispatch delete action if any hierarchical occupant has not gotten this far through the summoning process
|
//do not dispatch delete action if any hierarchical occupant has not gotten this far through the summoning process
|
||||||
val vehicleToDelete = interstellarFerryTopLevelGUID.orElse(originalSeated).getOrElse(PlanetSideGUID(0))
|
val vehicleToDelete = interstellarFerryTopLevelGUID.orElse(originalSeated).getOrElse(PlanetSideGUID(0))
|
||||||
val zone = vehicle.PreviousGatingManifest().get.origin
|
val zone = vehicle.PreviousGatingManifest().get.origin
|
||||||
zone.VehicleEvents ! VehicleServiceMessage(
|
zone.VehicleEvents ! MessageEnvelope(
|
||||||
zone.id,
|
zone.id,
|
||||||
player.GUID,
|
player.GUID,
|
||||||
VehicleAction.UnloadVehicle(vehicle, vehicleToDelete)
|
VehicleAction.UnloadVehicle(vehicle, vehicleToDelete)
|
||||||
|
|
@ -2643,7 +2644,7 @@ class ZoningOperations(
|
||||||
val definition = player.avatar.definition
|
val definition = player.avatar.definition
|
||||||
val guid = player.GUID
|
val guid = player.GUID
|
||||||
sendResponse(OCM.detailed(player))
|
sendResponse(OCM.detailed(player))
|
||||||
continent.AvatarEvents ! AvatarServiceMessage(
|
continent.AvatarEvents ! MessageEnvelope(
|
||||||
s"spectator",
|
s"spectator",
|
||||||
guid,
|
guid,
|
||||||
AvatarAction.LoadPlayer(definition.ObjectId, guid, definition.Packet.ConstructorData(player).get, None)
|
AvatarAction.LoadPlayer(definition.ObjectId, guid, definition.Packet.ConstructorData(player).get, None)
|
||||||
|
|
@ -2655,7 +2656,7 @@ class ZoningOperations(
|
||||||
val guid = player.GUID
|
val guid = player.GUID
|
||||||
usingSpawnTubeAnimation()
|
usingSpawnTubeAnimation()
|
||||||
sendResponse(OCM.detailed(player))
|
sendResponse(OCM.detailed(player))
|
||||||
continent.AvatarEvents ! AvatarServiceMessage(
|
continent.AvatarEvents ! MessageEnvelope(
|
||||||
zoneid,
|
zoneid,
|
||||||
guid,
|
guid,
|
||||||
AvatarAction.LoadPlayer(definition.ObjectId, guid, definition.Packet.ConstructorData(player).get, None)
|
AvatarAction.LoadPlayer(definition.ObjectId, guid, definition.Packet.ConstructorData(player).get, None)
|
||||||
|
|
@ -2728,7 +2729,7 @@ class ZoningOperations(
|
||||||
interimUngunnedVehicle = Some(vguid)
|
interimUngunnedVehicle = Some(vguid)
|
||||||
interimUngunnedVehicleSeat = Some(seat)
|
interimUngunnedVehicleSeat = Some(seat)
|
||||||
}
|
}
|
||||||
continent.AvatarEvents ! AvatarServiceMessage(
|
continent.AvatarEvents ! MessageEnvelope(
|
||||||
continent.id,
|
continent.id,
|
||||||
pguid,
|
pguid,
|
||||||
AvatarAction.LoadPlayer(
|
AvatarAction.LoadPlayer(
|
||||||
|
|
@ -2887,7 +2888,7 @@ class ZoningOperations(
|
||||||
case _ => ()
|
case _ => ()
|
||||||
}
|
}
|
||||||
if (player.VisibleSlots.contains(index)) {
|
if (player.VisibleSlots.contains(index)) {
|
||||||
events ! AvatarServiceMessage(
|
events ! MessageEnvelope(
|
||||||
zoneId,
|
zoneId,
|
||||||
ObjectDelete(obj.GUID)
|
ObjectDelete(obj.GUID)
|
||||||
)
|
)
|
||||||
|
|
@ -2905,7 +2906,6 @@ class ZoningOperations(
|
||||||
* To the game, that is a backpack (or some pastry, festive graphical modification allowing).
|
* To the game, that is a backpack (or some pastry, festive graphical modification allowing).
|
||||||
* @see `AvatarAction.ObjectDelete`
|
* @see `AvatarAction.ObjectDelete`
|
||||||
* @see `AvatarAction.Release`
|
* @see `AvatarAction.Release`
|
||||||
* @see `AvatarServiceMessage`
|
|
||||||
* @see `FriskDeadBody`
|
* @see `FriskDeadBody`
|
||||||
* @see `GUIDTask.unregisterPlayer`
|
* @see `GUIDTask.unregisterPlayer`
|
||||||
* @see `ObjectDeleteMessage`
|
* @see `ObjectDeleteMessage`
|
||||||
|
|
@ -2923,7 +2923,7 @@ class ZoningOperations(
|
||||||
val pguid = tplayer.GUID
|
val pguid = tplayer.GUID
|
||||||
zone.Population ! Zone.Population.Release(avatar)
|
zone.Population ! Zone.Population.Release(avatar)
|
||||||
sendResponse(ObjectDeleteMessage(pguid, 0))
|
sendResponse(ObjectDeleteMessage(pguid, 0))
|
||||||
zone.AvatarEvents ! AvatarServiceMessage(zone.id, pguid, ObjectDelete(pguid))
|
zone.AvatarEvents ! MessageEnvelope(zone.id, pguid, ObjectDelete(pguid))
|
||||||
TaskWorkflow.execute(GUIDTask.unregisterPlayer(zone.GUID, tplayer))
|
TaskWorkflow.execute(GUIDTask.unregisterPlayer(zone.GUID, tplayer))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -2933,7 +2933,6 @@ class ZoningOperations(
|
||||||
* To the game, that is a backpack (or some pastry, festive graphical modification allowing).
|
* To the game, that is a backpack (or some pastry, festive graphical modification allowing).
|
||||||
* A player who has been kicked may not turn into a corpse.
|
* A player who has been kicked may not turn into a corpse.
|
||||||
* @see `AvatarAction.Release`
|
* @see `AvatarAction.Release`
|
||||||
* @see `AvatarServiceMessage`
|
|
||||||
* @see `CorpseConverter.converter`
|
* @see `CorpseConverter.converter`
|
||||||
* @see `DepictPlayerAsCorpse`
|
* @see `DepictPlayerAsCorpse`
|
||||||
* @see `Player.Release`
|
* @see `Player.Release`
|
||||||
|
|
@ -3179,7 +3178,7 @@ class ZoningOperations(
|
||||||
// entering or exiting VR zones uses a fade-out effect for the player instead of the usual green cloud deconstruction effect
|
// entering or exiting VR zones uses a fade-out effect for the player instead of the usual green cloud deconstruction effect
|
||||||
val effect = if (player.IsInVRZone || zoneId.startsWith("tz")) 2 else 1
|
val effect = if (player.IsInVRZone || zoneId.startsWith("tz")) 2 else 1
|
||||||
sendResponse(ObjectDeleteMessage(player_guid, unk1=effect))
|
sendResponse(ObjectDeleteMessage(player_guid, unk1=effect))
|
||||||
continent.AvatarEvents ! AvatarServiceMessage(
|
continent.AvatarEvents ! MessageEnvelope(
|
||||||
continent.id,
|
continent.id,
|
||||||
player_guid,
|
player_guid,
|
||||||
ObjectDelete(player_guid, unk=effect)
|
ObjectDelete(player_guid, unk=effect)
|
||||||
|
|
@ -3346,7 +3345,7 @@ class ZoningOperations(
|
||||||
//looking for squad (members)
|
//looking for squad (members)
|
||||||
if (tplayer.avatar.lookingForSquad) {
|
if (tplayer.avatar.lookingForSquad) {
|
||||||
sendResponse(PlanetsideAttributeMessage(guid, 53, 1))
|
sendResponse(PlanetsideAttributeMessage(guid, 53, 1))
|
||||||
continent.AvatarEvents ! AvatarServiceMessage(continent.id, guid, PlanetsideAttribute(guid, 53, 1))
|
continent.AvatarEvents ! MessageEnvelope(continent.id, guid, PlanetsideAttribute(guid, 53, 1))
|
||||||
}
|
}
|
||||||
sendResponse(AvatarSearchCriteriaMessage(guid, List(0, 0, 0, 0, 0, 0)))
|
sendResponse(AvatarSearchCriteriaMessage(guid, List(0, 0, 0, 0, 0, 0)))
|
||||||
//these are facilities and towers and bunkers in the zone, but not necessarily all of them for some reason
|
//these are facilities and towers and bunkers in the zone, but not necessarily all of them for some reason
|
||||||
|
|
@ -3372,7 +3371,7 @@ class ZoningOperations(
|
||||||
if (tplayer.ExoSuit == ExoSuitType.MAX) {
|
if (tplayer.ExoSuit == ExoSuitType.MAX) {
|
||||||
sendResponse(PlanetsideAttributeMessage(guid, 7, tplayer.Capacitor.toLong))
|
sendResponse(PlanetsideAttributeMessage(guid, 7, tplayer.Capacitor.toLong))
|
||||||
sendResponse(PlanetsideAttributeMessage(guid, 4, tplayer.Armor))
|
sendResponse(PlanetsideAttributeMessage(guid, 4, tplayer.Armor))
|
||||||
continent.AvatarEvents ! AvatarServiceMessage(continent.id, PlanetsideAttribute(guid, 4, tplayer.Armor))
|
continent.AvatarEvents ! MessageEnvelope(continent.id, PlanetsideAttribute(guid, 4, tplayer.Armor))
|
||||||
}
|
}
|
||||||
// for issue #1269
|
// for issue #1269
|
||||||
continent.AllPlayers.filter(_.ExoSuit == ExoSuitType.MAX).foreach(max => sendResponse(PlanetsideAttributeMessage(max.GUID, 4, max.Armor)))
|
continent.AllPlayers.filter(_.ExoSuit == ExoSuitType.MAX).foreach(max => sendResponse(PlanetsideAttributeMessage(max.GUID, 4, max.Armor)))
|
||||||
|
|
@ -3396,7 +3395,7 @@ class ZoningOperations(
|
||||||
continent.GUID(tplayer.avatar.vehicle) match {
|
continent.GUID(tplayer.avatar.vehicle) match {
|
||||||
case Some(vehicle: Vehicle) if vehicle.OwnerName.contains(tplayer.Name) =>
|
case Some(vehicle: Vehicle) if vehicle.OwnerName.contains(tplayer.Name) =>
|
||||||
vehicle.OwnerGuid = guid
|
vehicle.OwnerGuid = guid
|
||||||
continent.VehicleEvents ! VehicleServiceMessage(
|
continent.VehicleEvents ! MessageEnvelope(
|
||||||
s"${tplayer.Faction}",
|
s"${tplayer.Faction}",
|
||||||
guid,
|
guid,
|
||||||
VehicleAction.Ownership(vehicle.GUID)
|
VehicleAction.Ownership(vehicle.GUID)
|
||||||
|
|
@ -3500,8 +3499,10 @@ class ZoningOperations(
|
||||||
val zone = tplayer.Zone
|
val zone = tplayer.Zone
|
||||||
val channel = zone.id
|
val channel = zone.id
|
||||||
val events = zone.AvatarEvents
|
val events = zone.AvatarEvents
|
||||||
events ! AvatarServiceMessage(channel, PlanetsideAttribute(guid, 0, 120))
|
events ! MessageEnvelope(
|
||||||
events ! AvatarServiceMessage(channel, PlanetsideAttribute(guid, 1, 120))
|
channel,
|
||||||
|
SendResponse(List(PlanetsideAttributeMessage(guid, 0, 120), PlanetsideAttributeMessage(guid, 1, 120)))
|
||||||
|
)
|
||||||
case _ => ()
|
case _ => ()
|
||||||
}
|
}
|
||||||
doorsThatShouldBeOpenInRange(pos, range = 100f)
|
doorsThatShouldBeOpenInRange(pos, range = 100f)
|
||||||
|
|
@ -4005,14 +4006,14 @@ class ZoningOperations(
|
||||||
val pZone = player.Zone
|
val pZone = player.Zone
|
||||||
sendResponse(GenericActionMessage(FirstPersonViewWithEffect))
|
sendResponse(GenericActionMessage(FirstPersonViewWithEffect))
|
||||||
pZone.blockMap.sector(player).livePlayerList.collect { case t if t.GUID != player.GUID =>
|
pZone.blockMap.sector(player).livePlayerList.collect { case t if t.GUID != player.GUID =>
|
||||||
pZone.LocalEvents ! LocalServiceMessage(
|
pZone.LocalEvents ! MessageEnvelope(
|
||||||
t.Name,
|
t.Name,
|
||||||
t.GUID,
|
t.GUID,
|
||||||
GenericObjectAction(player.GUID, GenericObjectActionEnum.PlayerDeconstructs.id)
|
GenericObjectAction(player.GUID, GenericObjectActionEnum.PlayerDeconstructs.id)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
pZone.AllPlayers.collect { case t if t.GUID != player.GUID && !t.allowInteraction =>
|
pZone.AllPlayers.collect { case t if t.GUID != player.GUID && !t.allowInteraction =>
|
||||||
pZone.LocalEvents ! LocalServiceMessage(
|
pZone.LocalEvents ! MessageEnvelope(
|
||||||
t.Name,
|
t.Name,
|
||||||
t.GUID,
|
t.GUID,
|
||||||
GenericObjectAction(player.GUID, GenericObjectActionEnum.PlayerDeconstructs.id)
|
GenericObjectAction(player.GUID, GenericObjectActionEnum.PlayerDeconstructs.id)
|
||||||
|
|
|
||||||
|
|
@ -11,9 +11,9 @@ 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.envelope.MessageEnvelope
|
||||||
import net.psforever.services.base.message.{SendResponse, SetEmpire}
|
import net.psforever.services.base.message.{SendResponse, SetEmpire}
|
||||||
import net.psforever.services.galaxy.{GalaxyAction, GalaxyServiceMessage}
|
import net.psforever.services.galaxy.GalaxyAction
|
||||||
import net.psforever.services.local.LocalServiceMessage
|
|
||||||
import net.psforever.services.{InterstellarClusterService, ServiceManager}
|
import net.psforever.services.{InterstellarClusterService, ServiceManager}
|
||||||
import net.psforever.types.PlanetSideEmpire
|
import net.psforever.types.PlanetSideEmpire
|
||||||
import net.psforever.util.Database.ctx
|
import net.psforever.util.Database.ctx
|
||||||
|
|
@ -168,7 +168,7 @@ object BuildingActor {
|
||||||
val building = details.building
|
val building = details.building
|
||||||
val zone = building.Zone
|
val zone = building.Zone
|
||||||
building.Faction = faction
|
building.Faction = faction
|
||||||
zone.LocalEvents ! LocalServiceMessage(zone.id, SetEmpire(building.GUID, faction))
|
zone.LocalEvents ! MessageEnvelope(zone.id, SetEmpire(building.GUID, faction))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -232,8 +232,8 @@ class BuildingActor(
|
||||||
Behaviors.same
|
Behaviors.same
|
||||||
|
|
||||||
case MapUpdate() =>
|
case MapUpdate() =>
|
||||||
details.galaxyService ! GalaxyServiceMessage(GalaxyAction.MapUpdate(details.building.infoUpdateMessage()))
|
details.galaxyService ! MessageEnvelope("", GalaxyAction.MapUpdate(details.building.infoUpdateMessage()))
|
||||||
details.galaxyService ! GalaxyServiceMessage(SendResponse(details.building.densityLevelUpdateMessage(building)))
|
details.galaxyService ! MessageEnvelope("", SendResponse(details.building.densityLevelUpdateMessage(building)))
|
||||||
Behaviors.same
|
Behaviors.same
|
||||||
|
|
||||||
case AmenityStateChange(amenity, data) =>
|
case AmenityStateChange(amenity, data) =>
|
||||||
|
|
@ -255,15 +255,15 @@ class BuildingActor(
|
||||||
logic.ntu(details, msg)
|
logic.ntu(details, msg)
|
||||||
|
|
||||||
case DensityLevelUpdate(building) =>
|
case DensityLevelUpdate(building) =>
|
||||||
details.galaxyService ! GalaxyServiceMessage(SendResponse(details.building.densityLevelUpdateMessage(building)))
|
details.galaxyService ! MessageEnvelope("", SendResponse(details.building.densityLevelUpdateMessage(building)))
|
||||||
Behaviors.same
|
Behaviors.same
|
||||||
|
|
||||||
case ContinentalLock(zone) =>
|
case ContinentalLock(zone) =>
|
||||||
details.galaxyService ! GalaxyServiceMessage(SendResponse(ContinentalLockUpdateMessage(zone.Number, zone.lockedBy)))
|
details.galaxyService ! MessageEnvelope("", SendResponse(ContinentalLockUpdateMessage(zone.Number, zone.lockedBy)))
|
||||||
Behaviors.same
|
Behaviors.same
|
||||||
|
|
||||||
case HomeLockBenefits(msg) =>
|
case HomeLockBenefits(msg) =>
|
||||||
details.galaxyService ! GalaxyServiceMessage(SendResponse(msg))
|
details.galaxyService ! MessageEnvelope("", SendResponse(msg))
|
||||||
Behaviors.same
|
Behaviors.same
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -20,8 +20,8 @@ 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.envelope.MessageEnvelope
|
||||||
import net.psforever.services.base.message.SendResponse
|
import net.psforever.services.base.message.SendResponse
|
||||||
import net.psforever.services.local.LocalServiceMessage
|
|
||||||
|
|
||||||
import scala.collection.mutable
|
import scala.collection.mutable
|
||||||
import scala.util.{Failure, Success}
|
import scala.util.{Failure, Success}
|
||||||
|
|
@ -235,24 +235,24 @@ class ZoneActor(
|
||||||
}
|
}
|
||||||
buildingOpt.foreach { building =>
|
buildingOpt.foreach { building =>
|
||||||
if (msg.generator_state == PlanetSideGeneratorState.Normal && building.hasCavernLockBenefit) {
|
if (msg.generator_state == PlanetSideGeneratorState.Normal && building.hasCavernLockBenefit) {
|
||||||
zone.LocalEvents ! LocalServiceMessage(
|
zone.LocalEvents ! MessageEnvelope(
|
||||||
zone.id,
|
zone.id,
|
||||||
SendResponse(PlanetsideAttributeMessage(building.GUID, 67, 1))
|
SendResponse(PlanetsideAttributeMessage(building.GUID, 67, 1))
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
msg.is_hacked match {
|
msg.is_hacked match {
|
||||||
case true if building.BuildingType == StructureType.Facility && !zone.map.cavern =>
|
case true if building.BuildingType == StructureType.Facility && !zone.map.cavern =>
|
||||||
zone.LocalEvents ! LocalServiceMessage(
|
zone.LocalEvents ! MessageEnvelope(
|
||||||
zone.id,
|
zone.id,
|
||||||
SendResponse(PlanetsideAttributeMessage(building.GUID, 67, 0))
|
SendResponse(PlanetsideAttributeMessage(building.GUID, 67, 0))
|
||||||
)
|
)
|
||||||
case false if building.hasCavernLockBenefit =>
|
case false if building.hasCavernLockBenefit =>
|
||||||
zone.LocalEvents ! LocalServiceMessage(
|
zone.LocalEvents ! MessageEnvelope(
|
||||||
zone.id,
|
zone.id,
|
||||||
SendResponse(PlanetsideAttributeMessage(building.GUID, 67, 1))
|
SendResponse(PlanetsideAttributeMessage(building.GUID, 67, 1))
|
||||||
)
|
)
|
||||||
case false if building.BuildingType == StructureType.Facility && !zone.map.cavern && !building.hasCavernLockBenefit =>
|
case false if building.BuildingType == StructureType.Facility && !zone.map.cavern && !building.hasCavernLockBenefit =>
|
||||||
zone.LocalEvents ! LocalServiceMessage(
|
zone.LocalEvents ! MessageEnvelope(
|
||||||
zone.id,
|
zone.id,
|
||||||
SendResponse(PlanetsideAttributeMessage(building.GUID, 67, 0))
|
SendResponse(PlanetsideAttributeMessage(building.GUID, 67, 0))
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,8 @@ import net.psforever.actors.commands.NtuCommand
|
||||||
import net.psforever.actors.zone.{BuildingActor, BuildingControlDetails, ZoneActor}
|
import net.psforever.actors.zone.{BuildingActor, BuildingControlDetails, ZoneActor}
|
||||||
import net.psforever.objects.serverobject.structures.{Amenity, Building, StructureType}
|
import net.psforever.objects.serverobject.structures.{Amenity, Building, StructureType}
|
||||||
import net.psforever.objects.serverobject.terminals.capture.{CaptureTerminal, CaptureTerminalAware, CaptureTerminalAwareBehavior}
|
import net.psforever.objects.serverobject.terminals.capture.{CaptureTerminal, CaptureTerminalAware, CaptureTerminalAwareBehavior}
|
||||||
import net.psforever.services.galaxy.{GalaxyAction, GalaxyServiceMessage}
|
import net.psforever.services.base.envelope.MessageEnvelope
|
||||||
|
import net.psforever.services.galaxy.GalaxyAction
|
||||||
import net.psforever.services.local.support.{HackClearActor, HackClearEnvelope}
|
import net.psforever.services.local.support.{HackClearActor, HackClearEnvelope}
|
||||||
import net.psforever.types.PlanetSideEmpire
|
import net.psforever.types.PlanetSideEmpire
|
||||||
|
|
||||||
|
|
@ -57,7 +58,7 @@ case object CavernFacilityLogic
|
||||||
})
|
})
|
||||||
// No map update needed - will be sent by `HackCaptureActor` when required
|
// No map update needed - will be sent by `HackCaptureActor` when required
|
||||||
case _ =>
|
case _ =>
|
||||||
details.galaxyService ! GalaxyServiceMessage(GalaxyAction.MapUpdate(details.building.infoUpdateMessage()))
|
details.galaxyService ! MessageEnvelope("", GalaxyAction.MapUpdate(details.building.infoUpdateMessage()))
|
||||||
}
|
}
|
||||||
Behaviors.same
|
Behaviors.same
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,8 @@ import net.psforever.actors.commands.NtuCommand
|
||||||
import net.psforever.actors.zone.{BuildingActor, BuildingControlDetails}
|
import net.psforever.actors.zone.{BuildingActor, BuildingControlDetails}
|
||||||
import net.psforever.objects.serverobject.structures.{Amenity, Building}
|
import net.psforever.objects.serverobject.structures.{Amenity, Building}
|
||||||
import net.psforever.objects.serverobject.terminals.capture.{CaptureTerminal, CaptureTerminalAware, CaptureTerminalAwareBehavior}
|
import net.psforever.objects.serverobject.terminals.capture.{CaptureTerminal, CaptureTerminalAware, CaptureTerminalAwareBehavior}
|
||||||
import net.psforever.services.galaxy.{GalaxyAction, GalaxyServiceMessage}
|
import net.psforever.services.base.envelope.MessageEnvelope
|
||||||
|
import net.psforever.services.galaxy.GalaxyAction
|
||||||
import net.psforever.services.local.support.{HackClearActor, HackClearEnvelope}
|
import net.psforever.services.local.support.{HackClearActor, HackClearEnvelope}
|
||||||
import net.psforever.types.PlanetSideEmpire
|
import net.psforever.types.PlanetSideEmpire
|
||||||
|
|
||||||
|
|
@ -57,7 +58,7 @@ case object FacilityLogic
|
||||||
})
|
})
|
||||||
// No map update needed - will be sent by `HackCaptureActor` when required
|
// No map update needed - will be sent by `HackCaptureActor` when required
|
||||||
case _ =>
|
case _ =>
|
||||||
details.galaxyService ! GalaxyServiceMessage(GalaxyAction.MapUpdate(details.building.infoUpdateMessage()))
|
details.galaxyService ! MessageEnvelope("", GalaxyAction.MapUpdate(details.building.infoUpdateMessage()))
|
||||||
}
|
}
|
||||||
Behaviors.same
|
Behaviors.same
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -13,14 +13,14 @@ import net.psforever.objects.serverobject.resourcesilo.ResourceSiloControl
|
||||||
import net.psforever.objects.serverobject.structures.{Amenity, Building}
|
import net.psforever.objects.serverobject.structures.{Amenity, Building}
|
||||||
import net.psforever.objects.serverobject.terminals.capture.{CaptureTerminal, CaptureTerminalAware, CaptureTerminalAwareBehavior}
|
import net.psforever.objects.serverobject.terminals.capture.{CaptureTerminal, CaptureTerminalAware, CaptureTerminalAwareBehavior}
|
||||||
import net.psforever.objects.sourcing.PlayerSource
|
import net.psforever.objects.sourcing.PlayerSource
|
||||||
import net.psforever.packet.game.PlanetsideAttributeMessage
|
import net.psforever.packet.game.{GenericObjectActionMessage, PlanetsideAttributeMessage}
|
||||||
import net.psforever.services.InterstellarClusterService
|
import net.psforever.services.InterstellarClusterService
|
||||||
import net.psforever.services.avatar.AvatarServiceMessage
|
import net.psforever.services.base.envelope.MessageEnvelope
|
||||||
import net.psforever.services.base.message.{GenericObjectAction, PlanetsideAttribute, SendResponse}
|
import net.psforever.services.base.message.{GenericObjectAction, PlanetsideAttribute, SendResponse}
|
||||||
import net.psforever.services.galaxy.{GalaxyAction, GalaxyServiceMessage}
|
import net.psforever.services.galaxy.GalaxyAction
|
||||||
import net.psforever.services.local.LocalServiceMessage
|
|
||||||
import net.psforever.services.local.support.{CaptureEnvelope, HackCaptureActor, HackClearActor, HackClearEnvelope}
|
import net.psforever.services.local.support.{CaptureEnvelope, HackCaptureActor, HackClearActor, HackClearEnvelope}
|
||||||
import net.psforever.types.PlanetSideEmpire
|
import net.psforever.services.local.LocalAction
|
||||||
|
import net.psforever.types.{PlanetSideEmpire, PlanetSideGeneratorState}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A package class that conveys the important information for handling facility updates.
|
* A package class that conveys the important information for handling facility updates.
|
||||||
|
|
@ -119,7 +119,7 @@ case object MajorFacilityLogic
|
||||||
.filter(amenity => applicable.contains(amenity.Definition))
|
.filter(amenity => applicable.contains(amenity.Definition))
|
||||||
.foreach { _.Actor ! msg }
|
.foreach { _.Actor ! msg }
|
||||||
case _ =>
|
case _ =>
|
||||||
details.galaxyService ! GalaxyServiceMessage(GalaxyAction.MapUpdate(details.building.infoUpdateMessage()))
|
details.galaxyService ! MessageEnvelope("", GalaxyAction.MapUpdate(details.building.infoUpdateMessage()))
|
||||||
}
|
}
|
||||||
Behaviors.same
|
Behaviors.same
|
||||||
}
|
}
|
||||||
|
|
@ -206,7 +206,7 @@ case object MajorFacilityLogic
|
||||||
val guid = building.GUID
|
val guid = building.GUID
|
||||||
val msg = GenericObjectAction(guid, 15)
|
val msg = GenericObjectAction(guid, 15)
|
||||||
building.PlayersInSOI.foreach { player =>
|
building.PlayersInSOI.foreach { player =>
|
||||||
events ! AvatarServiceMessage(player.Name, msg)
|
events ! MessageEnvelope(player.Name, msg)
|
||||||
}
|
}
|
||||||
false
|
false
|
||||||
case Some(GeneratorControl.Event.Critical) =>
|
case Some(GeneratorControl.Event.Critical) =>
|
||||||
|
|
@ -214,7 +214,7 @@ case object MajorFacilityLogic
|
||||||
val guid = building.GUID
|
val guid = building.GUID
|
||||||
val msg = PlanetsideAttribute(guid, 46, 1)
|
val msg = PlanetsideAttribute(guid, 46, 1)
|
||||||
building.PlayersInSOI.foreach { player =>
|
building.PlayersInSOI.foreach { player =>
|
||||||
events ! AvatarServiceMessage(player.Name, msg)
|
events ! MessageEnvelope(player.Name, msg)
|
||||||
}
|
}
|
||||||
true
|
true
|
||||||
case Some(GeneratorControl.Event.Destabilized) =>
|
case Some(GeneratorControl.Event.Destabilized) =>
|
||||||
|
|
@ -222,10 +222,10 @@ case object MajorFacilityLogic
|
||||||
val guid = building.GUID
|
val guid = building.GUID
|
||||||
val msg = GenericObjectAction(guid, 16)
|
val msg = GenericObjectAction(guid, 16)
|
||||||
building.PlayersInSOI.foreach { player =>
|
building.PlayersInSOI.foreach { player =>
|
||||||
events ! AvatarServiceMessage(player.Name, msg)
|
events ! MessageEnvelope(player.Name, msg)
|
||||||
}
|
}
|
||||||
if (building.hasCavernLockBenefit) {
|
if (building.hasCavernLockBenefit) {
|
||||||
zone.LocalEvents ! LocalServiceMessage(
|
zone.LocalEvents ! MessageEnvelope(
|
||||||
zone.id,
|
zone.id,
|
||||||
SendResponse(PlanetsideAttributeMessage(building.GUID, 67, 0))
|
SendResponse(PlanetsideAttributeMessage(building.GUID, 67, 0))
|
||||||
)
|
)
|
||||||
|
|
@ -238,7 +238,7 @@ case object MajorFacilityLogic
|
||||||
val zone = building.Zone
|
val zone = building.Zone
|
||||||
val msg = PlanetsideAttribute(building.GUID, 46, 2)
|
val msg = PlanetsideAttribute(building.GUID, 46, 2)
|
||||||
building.PlayersInSOI.foreach { player =>
|
building.PlayersInSOI.foreach { player =>
|
||||||
zone.AvatarEvents ! AvatarServiceMessage(player.Name, msg)
|
zone.AvatarEvents ! MessageEnvelope(player.Name, msg)
|
||||||
} //???
|
} //???
|
||||||
true
|
true
|
||||||
case Some(GeneratorControl.Event.Normal) =>
|
case Some(GeneratorControl.Event.Normal) =>
|
||||||
|
|
@ -248,12 +248,14 @@ case object MajorFacilityLogic
|
||||||
powerRestored(details)
|
powerRestored(details)
|
||||||
val events = zone.AvatarEvents
|
val events = zone.AvatarEvents
|
||||||
val guid = building.GUID
|
val guid = building.GUID
|
||||||
val msg1 = PlanetsideAttribute(guid, 46, 0)
|
//1. reset ???; might be global?
|
||||||
val msg2 = GenericObjectAction(guid, 17)
|
//2. This facility's generator is back on line
|
||||||
|
val list = SendResponse(List(
|
||||||
|
PlanetsideAttributeMessage(guid, 46, 0),
|
||||||
|
GenericObjectActionMessage(guid, 17)
|
||||||
|
))
|
||||||
building.PlayersInSOI.foreach { player =>
|
building.PlayersInSOI.foreach { player =>
|
||||||
val name = player.Name
|
events ! MessageEnvelope(player.Name, list)
|
||||||
events ! AvatarServiceMessage(name, msg1) //reset ???; might be global?
|
|
||||||
events ! AvatarServiceMessage(name, msg2) //This facility's generator is back on line
|
|
||||||
}
|
}
|
||||||
true
|
true
|
||||||
case _ =>
|
case _ =>
|
||||||
|
|
@ -304,10 +306,12 @@ case object MajorFacilityLogic
|
||||||
building.Amenities.foreach { amenity =>
|
building.Amenities.foreach { amenity =>
|
||||||
amenity.Actor ! powerMsg
|
amenity.Actor ! powerMsg
|
||||||
}
|
}
|
||||||
//amenities disabled; red warning lights
|
//1. amenities disabled; red warning lights
|
||||||
events ! AvatarServiceMessage(zoneId, PlanetsideAttribute(guid, 48, 1))
|
//2 .disable spawn target on deployment map
|
||||||
//disable spawn target on deployment map
|
events ! MessageEnvelope(
|
||||||
events ! AvatarServiceMessage(zoneId, PlanetsideAttribute(guid, 38, 0))
|
zoneId,
|
||||||
|
SendResponse(List(PlanetsideAttributeMessage(guid, 48, 1), PlanetsideAttributeMessage(guid, 38, 0)))
|
||||||
|
)
|
||||||
Behaviors.same
|
Behaviors.same
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -327,10 +331,12 @@ case object MajorFacilityLogic
|
||||||
building.Amenities.foreach { amenity =>
|
building.Amenities.foreach { amenity =>
|
||||||
amenity.Actor ! powerMsg
|
amenity.Actor ! powerMsg
|
||||||
}
|
}
|
||||||
//amenities enabled; normal lights
|
//1. amenities enabled; normal lights
|
||||||
events ! AvatarServiceMessage(zoneId, PlanetsideAttribute(guid, 48, 0))
|
//2. enable spawn target on deployment map
|
||||||
//enable spawn target on deployment map
|
events ! MessageEnvelope(
|
||||||
events ! AvatarServiceMessage(zoneId, PlanetsideAttribute(guid, 38, 1))
|
zoneId,
|
||||||
|
SendResponse(List(PlanetsideAttributeMessage(guid, 48, 0), PlanetsideAttributeMessage(guid, 38, 1)))
|
||||||
|
)
|
||||||
Behaviors.same
|
Behaviors.same
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,8 @@ import akka.actor.typed.scaladsl.Behaviors
|
||||||
import net.psforever.actors.commands.NtuCommand
|
import net.psforever.actors.commands.NtuCommand
|
||||||
import net.psforever.actors.zone.BuildingActor
|
import net.psforever.actors.zone.BuildingActor
|
||||||
import net.psforever.objects.serverobject.structures.{Amenity, Building, WarpGate}
|
import net.psforever.objects.serverobject.structures.{Amenity, Building, WarpGate}
|
||||||
import net.psforever.services.galaxy.{GalaxyAction, GalaxyServiceMessage}
|
import net.psforever.services.base.envelope.MessageEnvelope
|
||||||
|
import net.psforever.services.galaxy.GalaxyAction
|
||||||
import net.psforever.types.PlanetSideEmpire
|
import net.psforever.types.PlanetSideEmpire
|
||||||
import net.psforever.util.Config
|
import net.psforever.util.Config
|
||||||
|
|
||||||
|
|
@ -182,7 +183,7 @@ case object WarpGateLogic
|
||||||
val pairedWgFaction = pairedWg.Faction
|
val pairedWgFaction = pairedWg.Faction
|
||||||
if (pairedWgFaction != terminalWgFaction) {
|
if (pairedWgFaction != terminalWgFaction) {
|
||||||
pairedWg.Faction = terminalWgFaction
|
pairedWg.Faction = terminalWgFaction
|
||||||
details.galaxyService ! GalaxyServiceMessage(GalaxyAction.MapUpdate(pairedWg.infoUpdateMessage()))
|
details.galaxyService ! MessageEnvelope("", GalaxyAction.MapUpdate(pairedWg.infoUpdateMessage()))
|
||||||
}
|
}
|
||||||
//the terminal warpgate can not be considered broadcast for other faction
|
//the terminal warpgate can not be considered broadcast for other faction
|
||||||
if (terminalWg.AllowBroadcastFor.contains(pairedWgFaction)) {
|
if (terminalWg.AllowBroadcastFor.contains(pairedWgFaction)) {
|
||||||
|
|
@ -209,7 +210,7 @@ case object WarpGateLogic
|
||||||
)
|
)
|
||||||
warpgate.AllowBroadcastFor = setBroadcastTo
|
warpgate.AllowBroadcastFor = setBroadcastTo
|
||||||
(setBroadcastTo ++ previousAllowances).foreach { faction =>
|
(setBroadcastTo ++ previousAllowances).foreach { faction =>
|
||||||
events ! GalaxyServiceMessage(faction.toString, msg)
|
events ! MessageEnvelope(faction.toString, msg)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,8 @@ import net.psforever.objects.sourcing.AmenitySource
|
||||||
import net.psforever.objects.vital.TerminalUsedActivity
|
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
|
||||||
|
import net.psforever.services.base.envelope.MessageEnvelope
|
||||||
import net.psforever.services.base.message.ObjectDelete
|
import net.psforever.services.base.message.ObjectDelete
|
||||||
|
|
||||||
import scala.concurrent.ExecutionContext.Implicits.global
|
import scala.concurrent.ExecutionContext.Implicits.global
|
||||||
|
|
@ -326,7 +327,7 @@ object WorldSession {
|
||||||
case _ =>
|
case _ =>
|
||||||
forcedTolowerRaisedArm(localPlayer, localPlayer.GUID, localZone)
|
forcedTolowerRaisedArm(localPlayer, localPlayer.GUID, localZone)
|
||||||
localPlayer.DrawnSlot = localSlot
|
localPlayer.DrawnSlot = localSlot
|
||||||
localZone.AvatarEvents ! AvatarServiceMessage(localZone.id, localGUID, AvatarAction.ObjectHeld(localSlot, localSlot))
|
localZone.AvatarEvents ! MessageEnvelope(localZone.id, localGUID, AvatarAction.ObjectHeld(localSlot, localSlot))
|
||||||
}
|
}
|
||||||
Future(this)
|
Future(this)
|
||||||
}
|
}
|
||||||
|
|
@ -367,7 +368,7 @@ object WorldSession {
|
||||||
localZone.GUID(item_guid) match {
|
localZone.GUID(item_guid) match {
|
||||||
case Some(_) => ()
|
case Some(_) => ()
|
||||||
case None => //acting on old data?
|
case None => //acting on old data?
|
||||||
localZone.AvatarEvents ! AvatarServiceMessage(localZone.id, ObjectDelete(item_guid))
|
localZone.AvatarEvents ! MessageEnvelope(localZone.id, ObjectDelete(item_guid))
|
||||||
}
|
}
|
||||||
case _ => ()
|
case _ => ()
|
||||||
}
|
}
|
||||||
|
|
@ -526,7 +527,6 @@ object WorldSession {
|
||||||
* Failure of this process is not supported and may lead to irregular behavior.
|
* Failure of this process is not supported and may lead to irregular behavior.
|
||||||
* @see `ActorRef`
|
* @see `ActorRef`
|
||||||
* @see `AvatarAction.ObjectDelete`
|
* @see `AvatarAction.ObjectDelete`
|
||||||
* @see `AvatarServiceMessage`
|
|
||||||
* @see `Containable.MoveItem`
|
* @see `Containable.MoveItem`
|
||||||
* @see `Container`
|
* @see `Container`
|
||||||
* @see `Equipment`
|
* @see `Equipment`
|
||||||
|
|
@ -591,7 +591,7 @@ object WorldSession {
|
||||||
localGUID match {
|
localGUID match {
|
||||||
case Some(guid) =>
|
case Some(guid) =>
|
||||||
//see LockerContainerControl.RemoveItemFromSlotCallback
|
//see LockerContainerControl.RemoveItemFromSlotCallback
|
||||||
localSource.Zone.AvatarEvents ! AvatarServiceMessage(localChannel, ObjectDelete(guid))
|
localSource.Zone.AvatarEvents ! MessageEnvelope(localChannel, ObjectDelete(guid))
|
||||||
case None => ()
|
case None => ()
|
||||||
}
|
}
|
||||||
val moveResult = ask(localDestination.Actor, Containable.PutItemInSlotOrAway(localItem, Some(localDestSlot)))
|
val moveResult = ask(localDestination.Actor, Containable.PutItemInSlotOrAway(localItem, Some(localDestSlot)))
|
||||||
|
|
@ -616,8 +616,7 @@ object WorldSession {
|
||||||
* Remove an item from a player's locker inventory.
|
* Remove an item from a player's locker inventory.
|
||||||
* Failure of this process is not supported and may lead to irregular behavior.
|
* Failure of this process is not supported and may lead to irregular behavior.
|
||||||
* @see `ActorRef`
|
* @see `ActorRef`
|
||||||
* @see `AvatarAction.ObjectDelete`
|
* @see `ObjectDelete`
|
||||||
* @see `AvatarServiceMessage`
|
|
||||||
* @see `Containable.MoveItem`
|
* @see `Containable.MoveItem`
|
||||||
* @see `Container`
|
* @see `Container`
|
||||||
* @see `Equipment`
|
* @see `Equipment`
|
||||||
|
|
@ -693,7 +692,7 @@ object WorldSession {
|
||||||
localGUID match {
|
localGUID match {
|
||||||
case Some(guid) =>
|
case Some(guid) =>
|
||||||
//see LockerContainerControl.RemoveItemFromSlotCallback
|
//see LockerContainerControl.RemoveItemFromSlotCallback
|
||||||
localSource.Zone.AvatarEvents ! AvatarServiceMessage(localChannel, ObjectDelete(guid))
|
localSource.Zone.AvatarEvents ! MessageEnvelope(localChannel, ObjectDelete(guid))
|
||||||
case None => ()
|
case None => ()
|
||||||
}
|
}
|
||||||
val moveResult = ask(localDestination.Actor, Containable.PutItemInSlotOrAway(localItem, Some(localDestSlot)))
|
val moveResult = ask(localDestination.Actor, Containable.PutItemInSlotOrAway(localItem, Some(localDestSlot)))
|
||||||
|
|
@ -730,8 +729,7 @@ object WorldSession {
|
||||||
* If the player's already-drawn hand is the same as the one that will hold the grenade (first sidearm holster),
|
* If the player's already-drawn hand is the same as the one that will hold the grenade (first sidearm holster),
|
||||||
* treat it like the sidearm occupier rather than the already-drawn weapon -
|
* treat it like the sidearm occupier rather than the already-drawn weapon -
|
||||||
* the old weapon goes into the backpack or onto the ground.
|
* the old weapon goes into the backpack or onto the ground.
|
||||||
* @see `AvatarAction.ObjectHeld`
|
* @see `ObjectHeld`
|
||||||
* @see `AvatarServiceMessage`
|
|
||||||
* @see `Containable.RemoveItemFromSlot`
|
* @see `Containable.RemoveItemFromSlot`
|
||||||
* @see `countRestrictAttempts`
|
* @see `countRestrictAttempts`
|
||||||
* @see `forcedTolowerRaisedArm`
|
* @see `forcedTolowerRaisedArm`
|
||||||
|
|
@ -783,7 +781,7 @@ object WorldSession {
|
||||||
}
|
}
|
||||||
//put up hand with grenade in it
|
//put up hand with grenade in it
|
||||||
tplayer.DrawnSlot = slotNum
|
tplayer.DrawnSlot = slotNum
|
||||||
zone.AvatarEvents ! AvatarServiceMessage(zone.id, guid, AvatarAction.ObjectHeld(slotNum, slotNum))
|
zone.AvatarEvents ! MessageEnvelope(zone.id, guid, AvatarAction.ObjectHeld(slotNum, slotNum))
|
||||||
log.info(s"${tplayer.Name} has quickly drawn a ${grenade.Definition.Name}")
|
log.info(s"${tplayer.Name} has quickly drawn a ${grenade.Definition.Name}")
|
||||||
None
|
None
|
||||||
case None =>
|
case None =>
|
||||||
|
|
@ -857,8 +855,7 @@ object WorldSession {
|
||||||
/**
|
/**
|
||||||
* If the player has a raised arm, lower it.
|
* If the player has a raised arm, lower it.
|
||||||
* Do it manually, bypassing the checks in the normal procedure.
|
* Do it manually, bypassing the checks in the normal procedure.
|
||||||
* @see `AvatarAction.ObjectHeld`
|
* @see `ObjectHeld`
|
||||||
* @see `AvatarServiceMessage`
|
|
||||||
* @see `Player.DrawnSlot`
|
* @see `Player.DrawnSlot`
|
||||||
* @see `Player.HandsDownSlot`
|
* @see `Player.HandsDownSlot`
|
||||||
* @param tplayer the player
|
* @param tplayer the player
|
||||||
|
|
@ -870,7 +867,7 @@ object WorldSession {
|
||||||
val slot = tplayer.DrawnSlot
|
val slot = tplayer.DrawnSlot
|
||||||
if (slot != Player.HandsDownSlot) {
|
if (slot != Player.HandsDownSlot) {
|
||||||
tplayer.DrawnSlot = Player.HandsDownSlot
|
tplayer.DrawnSlot = Player.HandsDownSlot
|
||||||
zone.AvatarEvents ! AvatarServiceMessage(zone.id, guid, AvatarAction.ObjectHeld(Player.HandsDownSlot, slot))
|
zone.AvatarEvents ! MessageEnvelope(zone.id, guid, AvatarAction.ObjectHeld(Player.HandsDownSlot, slot))
|
||||||
true
|
true
|
||||||
} else {
|
} else {
|
||||||
false
|
false
|
||||||
|
|
@ -933,7 +930,7 @@ object WorldSession {
|
||||||
player.ContributionFrom(term)
|
player.ContributionFrom(term)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
player.Zone.AvatarEvents ! AvatarServiceMessage(
|
player.Zone.AvatarEvents ! MessageEnvelope(
|
||||||
player.Name,
|
player.Name,
|
||||||
AvatarAction.TerminalOrderResult(guid, transaction, result)
|
AvatarAction.TerminalOrderResult(guid, transaction, result)
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -11,9 +11,9 @@ import net.psforever.objects.vital.Vitality
|
||||||
import net.psforever.objects.vital.etc.TriggerUsedReason
|
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.base.envelope.MessageEnvelope
|
||||||
import net.psforever.services.base.message.ObjectDelete
|
import net.psforever.services.base.message.ObjectDelete
|
||||||
import net.psforever.services.local.{LocalAction, LocalServiceMessage}
|
import net.psforever.services.local.LocalAction
|
||||||
import net.psforever.types.PlanetSideEmpire
|
import net.psforever.types.PlanetSideEmpire
|
||||||
|
|
||||||
import scala.annotation.unused
|
import scala.annotation.unused
|
||||||
|
|
@ -87,9 +87,9 @@ class BoomerDeployableControl(mine: BoomerDeployable)
|
||||||
val events = mine.Zone.LocalEvents
|
val events = mine.Zone.LocalEvents
|
||||||
val msg = LocalAction.DeployItem(mine)
|
val msg = LocalAction.DeployItem(mine)
|
||||||
originalOwner.collect { name =>
|
originalOwner.collect { name =>
|
||||||
events ! LocalServiceMessage(name, msg)
|
events ! MessageEnvelope(name, msg)
|
||||||
}
|
}
|
||||||
events ! LocalServiceMessage(player.Name, msg)
|
events ! MessageEnvelope(player.Name, msg)
|
||||||
}
|
}
|
||||||
|
|
||||||
override def dismissDeployable() : Unit = {
|
override def dismissDeployable() : Unit = {
|
||||||
|
|
@ -107,7 +107,7 @@ class BoomerDeployableControl(mine: BoomerDeployable)
|
||||||
zone.Ground ! Zone.Ground.RemoveItem(guid)
|
zone.Ground ! Zone.Ground.RemoveItem(guid)
|
||||||
case _ => ()
|
case _ => ()
|
||||||
}
|
}
|
||||||
zone.AvatarEvents! AvatarServiceMessage(
|
zone.AvatarEvents! MessageEnvelope(
|
||||||
zone.id,
|
zone.id,
|
||||||
ObjectDelete(guid)
|
ObjectDelete(guid)
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -9,8 +9,9 @@ import net.psforever.objects.ce.{Deployable, DeployedItem}
|
||||||
import net.psforever.objects.sourcing.{PlayerSource, SourceEntry}
|
import net.psforever.objects.sourcing.{PlayerSource, SourceEntry}
|
||||||
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.base.envelope.MessageEnvelope
|
||||||
import net.psforever.types.PlanetSideGUID
|
import net.psforever.types.PlanetSideGUID
|
||||||
import net.psforever.services.local.{LocalAction, LocalServiceMessage}
|
import net.psforever.services.local.LocalAction
|
||||||
|
|
||||||
object Deployables {
|
object Deployables {
|
||||||
//private val log = org.log4s.getLogger("Deployables")
|
//private val log = org.log4s.getLogger("Deployables")
|
||||||
|
|
@ -92,7 +93,7 @@ object Deployables {
|
||||||
}
|
}
|
||||||
target.AssignOwnership(None)
|
target.AssignOwnership(None)
|
||||||
}
|
}
|
||||||
events ! LocalServiceMessage(
|
events ! MessageEnvelope(
|
||||||
s"${target.Faction}",
|
s"${target.Faction}",
|
||||||
LocalAction.DeployableMapIcon(DeploymentAction.Dismiss, DeployableInfo(target.GUID, Deployable.Icon(item), target.Position, PlanetSideGUID(0)))
|
LocalAction.DeployableMapIcon(DeploymentAction.Dismiss, DeployableInfo(target.GUID, Deployable.Icon(item), target.Position, PlanetSideGUID(0)))
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -18,8 +18,9 @@ import net.psforever.objects.vital.projectile.ProjectileReason
|
||||||
import net.psforever.objects.zones.Zone
|
import net.psforever.objects.zones.Zone
|
||||||
import net.psforever.types.Vector3
|
import net.psforever.types.Vector3
|
||||||
import net.psforever.services.Service
|
import net.psforever.services.Service
|
||||||
import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage}
|
import net.psforever.services.avatar.AvatarAction
|
||||||
import net.psforever.services.local.{LocalAction, LocalServiceMessage}
|
import net.psforever.services.base.envelope.MessageEnvelope
|
||||||
|
import net.psforever.services.local.LocalAction
|
||||||
|
|
||||||
import scala.annotation.unused
|
import scala.annotation.unused
|
||||||
import scala.concurrent.duration._
|
import scala.concurrent.duration._
|
||||||
|
|
@ -182,7 +183,7 @@ object ExplosiveDeployableControl {
|
||||||
target.Health = 1 // short-circuit logic in DestructionAwareness
|
target.Health = 1 // short-circuit logic in DestructionAwareness
|
||||||
val zone = target.Zone
|
val zone = target.Zone
|
||||||
zone.Activity ! Zone.HotSpot.Activity(cause)
|
zone.Activity ! Zone.HotSpot.Activity(cause)
|
||||||
zone.LocalEvents ! LocalServiceMessage(zone.id, LocalAction.Detonate(target.GUID, target))
|
zone.LocalEvents ! MessageEnvelope(zone.id, LocalAction.Detonate(target.GUID, target))
|
||||||
Zone.serverSideDamage(
|
Zone.serverSideDamage(
|
||||||
zone,
|
zone,
|
||||||
target,
|
target,
|
||||||
|
|
@ -210,12 +211,12 @@ object ExplosiveDeployableControl {
|
||||||
Some(if (target.Jammed || target.Destroyed) 0 seconds else 500 milliseconds)
|
Some(if (target.Jammed || target.Destroyed) 0 seconds else 500 milliseconds)
|
||||||
)
|
)
|
||||||
target.Destroyed = true
|
target.Destroyed = true
|
||||||
zone.AvatarEvents ! AvatarServiceMessage(
|
zone.AvatarEvents ! MessageEnvelope(
|
||||||
zone.id,
|
zone.id,
|
||||||
AvatarAction.Destroy(target.GUID, attribution, Service.defaultPlayerGUID, target.Position)
|
AvatarAction.Destroy(target.GUID, attribution, Service.defaultPlayerGUID, target.Position)
|
||||||
)
|
)
|
||||||
if (target.Health == 0) {
|
if (target.Health == 0) {
|
||||||
zone.LocalEvents ! LocalServiceMessage(
|
zone.LocalEvents ! MessageEnvelope(
|
||||||
zone.id,
|
zone.id,
|
||||||
LocalAction.TriggerEffect("detonate_damaged_mine", target.GUID)
|
LocalAction.TriggerEffect("detonate_damaged_mine", target.GUID)
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -12,8 +12,8 @@ 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.envelope.MessageEnvelope
|
||||||
import net.psforever.services.base.message.PlanetsideAttribute
|
import net.psforever.services.base.message.PlanetsideAttribute
|
||||||
import net.psforever.services.vehicle.VehicleServiceMessage
|
|
||||||
|
|
||||||
import scala.annotation.unused
|
import scala.annotation.unused
|
||||||
|
|
||||||
|
|
@ -98,7 +98,7 @@ class FieldTurretControl(turret: TurretDeployable)
|
||||||
if (canChargeShields) {
|
if (canChargeShields) {
|
||||||
turret.LogActivity(ShieldCharge(amount, motivator))
|
turret.LogActivity(ShieldCharge(amount, motivator))
|
||||||
turret.Shields = turret.Shields + amount
|
turret.Shields = turret.Shields + amount
|
||||||
turret.Zone.VehicleEvents ! VehicleServiceMessage(
|
turret.Zone.VehicleEvents ! MessageEnvelope(
|
||||||
s"${turret.Actor}",
|
s"${turret.Actor}",
|
||||||
PlanetsideAttribute(turret.GUID, turret.Definition.shieldUiAttribute, turret.Shields)
|
PlanetsideAttribute(turret.GUID, turret.Definition.shieldUiAttribute, turret.Shields)
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -20,9 +20,10 @@ import net.psforever.objects.zones.Zone
|
||||||
import net.psforever.packet.game._
|
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
|
||||||
|
import net.psforever.services.base.envelope.MessageEnvelope
|
||||||
import net.psforever.services.base.message.{ObjectDelete, SendResponse}
|
import net.psforever.services.base.message.{ObjectDelete, SendResponse}
|
||||||
import net.psforever.services.local.{LocalAction, LocalServiceMessage}
|
import net.psforever.services.local.LocalAction
|
||||||
|
|
||||||
import scala.annotation.tailrec
|
import scala.annotation.tailrec
|
||||||
|
|
||||||
|
|
@ -49,7 +50,7 @@ object Players {
|
||||||
) {
|
) {
|
||||||
val events = target.Zone.AvatarEvents
|
val events = target.Zone.AvatarEvents
|
||||||
val uname = user.Name
|
val uname = user.Name
|
||||||
events ! AvatarServiceMessage(
|
events ! MessageEnvelope(
|
||||||
uname,
|
uname,
|
||||||
SendResponse(RepairMessage(target.GUID, progress.toInt))
|
SendResponse(RepairMessage(target.GUID, progress.toInt))
|
||||||
)
|
)
|
||||||
|
|
@ -317,7 +318,7 @@ object Players {
|
||||||
): Boolean = {
|
): Boolean = {
|
||||||
if (player.Zone == obj.Zone && addFunc(obj)) {
|
if (player.Zone == obj.Zone && addFunc(obj)) {
|
||||||
obj.Actor ! Deployable.Ownership(player)
|
obj.Actor ! Deployable.Ownership(player)
|
||||||
player.Zone.LocalEvents ! LocalServiceMessage(player.Name, LocalAction.DeployableUIFor(obj.Definition.Item))
|
player.Zone.LocalEvents ! MessageEnvelope(player.Name, LocalAction.DeployableUIFor(obj.Definition.Item))
|
||||||
true
|
true
|
||||||
} else {
|
} else {
|
||||||
false
|
false
|
||||||
|
|
@ -334,7 +335,7 @@ object Players {
|
||||||
//sent to avatar event bus to preempt additional tool management
|
//sent to avatar event bus to preempt additional tool management
|
||||||
buildCooldownReset(zone, channel, obj.GUID)
|
buildCooldownReset(zone, channel, obj.GUID)
|
||||||
//sent to local event bus to cooperate with deployable management
|
//sent to local event bus to cooperate with deployable management
|
||||||
zone.LocalEvents ! LocalServiceMessage(
|
zone.LocalEvents ! MessageEnvelope(
|
||||||
channel,
|
channel,
|
||||||
LocalAction.DeployableUIFor(obj.Definition.Item)
|
LocalAction.DeployableUIFor(obj.Definition.Item)
|
||||||
)
|
)
|
||||||
|
|
@ -348,7 +349,7 @@ object Players {
|
||||||
*/
|
*/
|
||||||
def buildCooldownReset(zone: Zone, channel: String, guid: PlanetSideGUID): Unit = {
|
def buildCooldownReset(zone: Zone, channel: String, guid: PlanetSideGUID): Unit = {
|
||||||
//sent to avatar event bus to preempt additional tool management
|
//sent to avatar event bus to preempt additional tool management
|
||||||
zone.AvatarEvents ! AvatarServiceMessage(channel, SendResponse(GenericObjectActionMessage(guid, 21)))
|
zone.AvatarEvents ! MessageEnvelope(channel, SendResponse(GenericObjectActionMessage(guid, 21)))
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -404,7 +405,7 @@ object Players {
|
||||||
}
|
}
|
||||||
}) {
|
}) {
|
||||||
val zone = player.Zone
|
val zone = player.Zone
|
||||||
zone.AvatarEvents ! AvatarServiceMessage(zone.id, ObjectDelete(tool.GUID))
|
zone.AvatarEvents ! MessageEnvelope(zone.id, ObjectDelete(tool.GUID))
|
||||||
true
|
true
|
||||||
} else {
|
} else {
|
||||||
false
|
false
|
||||||
|
|
@ -442,20 +443,20 @@ object Players {
|
||||||
player.Inventory -= x.start
|
player.Inventory -= x.start
|
||||||
obj.FireModeIndex = fireMode
|
obj.FireModeIndex = fireMode
|
||||||
//TODO any penalty for being handed an OCM version of the tool?
|
//TODO any penalty for being handed an OCM version of the tool?
|
||||||
events ! AvatarServiceMessage(
|
events ! MessageEnvelope(
|
||||||
zone.id,
|
zone.id,
|
||||||
AvatarAction.EquipmentInHand(pguid, index, obj)
|
AvatarAction.EquipmentInHand(pguid, index, obj)
|
||||||
)
|
)
|
||||||
if (obj.AmmoTypeIndex != ammoType) {
|
if (obj.AmmoTypeIndex != ammoType) {
|
||||||
obj.AmmoTypeIndex = ammoType
|
obj.AmmoTypeIndex = ammoType
|
||||||
events ! AvatarServiceMessage(
|
events ! MessageEnvelope(
|
||||||
name,
|
name,
|
||||||
SendResponse(ChangeAmmoMessage(obj.GUID, ammoType))
|
SendResponse(ChangeAmmoMessage(obj.GUID, ammoType))
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
if (player.DrawnSlot == Player.HandsDownSlot) {
|
if (player.DrawnSlot == Player.HandsDownSlot) {
|
||||||
player.DrawnSlot = index
|
player.DrawnSlot = index
|
||||||
events ! AvatarServiceMessage(zone.id, pguid, AvatarAction.ObjectHeld(index, index))
|
events ! MessageEnvelope(zone.id, pguid, AvatarAction.ObjectHeld(index, index))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
case Nil => ; //no replacements found
|
case Nil => ; //no replacements found
|
||||||
|
|
|
||||||
|
|
@ -12,10 +12,10 @@ 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.SimpleResolutions
|
import net.psforever.objects.vital.SimpleResolutions
|
||||||
import net.psforever.objects.vital.interaction.DamageResult
|
import net.psforever.objects.vital.interaction.DamageResult
|
||||||
|
import net.psforever.services.base.envelope.MessageEnvelope
|
||||||
import net.psforever.types.{PlanetSideGUID, Vector3}
|
import net.psforever.types.{PlanetSideGUID, Vector3}
|
||||||
import net.psforever.services.base.message.PlanetsideAttribute
|
import net.psforever.services.base.message.PlanetsideAttribute
|
||||||
import net.psforever.services.local.{LocalAction, LocalServiceMessage}
|
import net.psforever.services.local.LocalAction
|
||||||
import net.psforever.services.vehicle.VehicleServiceMessage
|
|
||||||
|
|
||||||
import scala.annotation.unused
|
import scala.annotation.unused
|
||||||
import scala.concurrent.duration._
|
import scala.concurrent.duration._
|
||||||
|
|
@ -75,7 +75,7 @@ class SensorDeployableControl(sensor: SensorDeployable)
|
||||||
override def StartJammeredSound(target: Any, dur: Int): Unit =
|
override def StartJammeredSound(target: Any, dur: Int): Unit =
|
||||||
target match {
|
target match {
|
||||||
case obj: PlanetSideServerObject if !jammedSound =>
|
case obj: PlanetSideServerObject if !jammedSound =>
|
||||||
obj.Zone.VehicleEvents ! VehicleServiceMessage(
|
obj.Zone.VehicleEvents ! MessageEnvelope(
|
||||||
obj.Zone.id,
|
obj.Zone.id,
|
||||||
PlanetsideAttribute(obj.GUID, 54, 1)
|
PlanetsideAttribute(obj.GUID, 54, 1)
|
||||||
)
|
)
|
||||||
|
|
@ -87,7 +87,7 @@ class SensorDeployableControl(sensor: SensorDeployable)
|
||||||
target match {
|
target match {
|
||||||
case obj: PlanetSideServerObject with JammableUnit =>
|
case obj: PlanetSideServerObject with JammableUnit =>
|
||||||
val zone = obj.Zone
|
val zone = obj.Zone
|
||||||
zone.LocalEvents ! LocalServiceMessage(
|
zone.LocalEvents ! MessageEnvelope(
|
||||||
zone.id,
|
zone.id,
|
||||||
LocalAction.TriggerEffectInfo(obj.GUID, "on", unk1=false, 1000)
|
LocalAction.TriggerEffectInfo(obj.GUID, "on", unk1=false, 1000)
|
||||||
)
|
)
|
||||||
|
|
@ -99,7 +99,7 @@ class SensorDeployableControl(sensor: SensorDeployable)
|
||||||
target match {
|
target match {
|
||||||
case obj: PlanetSideServerObject if jammedSound =>
|
case obj: PlanetSideServerObject if jammedSound =>
|
||||||
val zone = obj.Zone
|
val zone = obj.Zone
|
||||||
zone.VehicleEvents ! VehicleServiceMessage(
|
zone.VehicleEvents ! MessageEnvelope(
|
||||||
zone.id,
|
zone.id,
|
||||||
PlanetsideAttribute(obj.GUID, 54, 0)
|
PlanetsideAttribute(obj.GUID, 54, 0)
|
||||||
)
|
)
|
||||||
|
|
@ -112,7 +112,7 @@ class SensorDeployableControl(sensor: SensorDeployable)
|
||||||
target match {
|
target match {
|
||||||
case obj: PlanetSideServerObject with JammableUnit if obj.Jammed =>
|
case obj: PlanetSideServerObject with JammableUnit if obj.Jammed =>
|
||||||
val zone = sensor.Zone
|
val zone = sensor.Zone
|
||||||
zone.LocalEvents ! LocalServiceMessage(
|
zone.LocalEvents ! MessageEnvelope(
|
||||||
zone.id,
|
zone.id,
|
||||||
LocalAction.TriggerEffectInfo(obj.GUID, "on", unk1=true, 1000)
|
LocalAction.TriggerEffectInfo(obj.GUID, "on", unk1=true, 1000)
|
||||||
)
|
)
|
||||||
|
|
@ -124,7 +124,7 @@ class SensorDeployableControl(sensor: SensorDeployable)
|
||||||
override def finalizeDeployable(callback: ActorRef) : Unit = {
|
override def finalizeDeployable(callback: ActorRef) : Unit = {
|
||||||
super.finalizeDeployable(callback)
|
super.finalizeDeployable(callback)
|
||||||
val zone = sensor.Zone
|
val zone = sensor.Zone
|
||||||
zone.LocalEvents ! LocalServiceMessage(
|
zone.LocalEvents ! MessageEnvelope(
|
||||||
zone.id,
|
zone.id,
|
||||||
LocalAction.TriggerEffectInfo(sensor.GUID, "on", unk1=true, 1000)
|
LocalAction.TriggerEffectInfo(sensor.GUID, "on", unk1=true, 1000)
|
||||||
)
|
)
|
||||||
|
|
@ -141,7 +141,7 @@ object SensorDeployableControl {
|
||||||
def DestructionAwareness(target: Deployable, attribution: PlanetSideGUID): Unit = {
|
def DestructionAwareness(target: Deployable, attribution: PlanetSideGUID): Unit = {
|
||||||
Deployables.AnnounceDestroyDeployable(target, Some(1 seconds))
|
Deployables.AnnounceDestroyDeployable(target, Some(1 seconds))
|
||||||
val zone = target.Zone
|
val zone = target.Zone
|
||||||
zone.LocalEvents ! LocalServiceMessage(
|
zone.LocalEvents ! MessageEnvelope(
|
||||||
zone.id,
|
zone.id,
|
||||||
LocalAction.TriggerEffectInfo(target.GUID, "on", unk1=false, 1000)
|
LocalAction.TriggerEffectInfo(target.GUID, "on", unk1=false, 1000)
|
||||||
)
|
)
|
||||||
|
|
@ -157,7 +157,7 @@ object SensorDeployableControl {
|
||||||
pos.z + math.cos(yRadians).toFloat * 0.875f
|
pos.z + math.cos(yRadians).toFloat * 0.875f
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
zone.LocalEvents ! LocalServiceMessage(
|
zone.LocalEvents ! MessageEnvelope(
|
||||||
zone.id,
|
zone.id,
|
||||||
LocalAction.TriggerEffectLocation("motion_sensor_destroyed", explosionPos, ang)
|
LocalAction.TriggerEffectLocation("motion_sensor_destroyed", explosionPos, ang)
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -13,9 +13,9 @@ 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.envelope.MessageEnvelope
|
||||||
import net.psforever.services.base.message.PlanetsideAttribute
|
import net.psforever.services.base.message.PlanetsideAttribute
|
||||||
import net.psforever.types.PlanetSideGUID
|
import net.psforever.types.PlanetSideGUID
|
||||||
import net.psforever.services.vehicle.VehicleServiceMessage
|
|
||||||
|
|
||||||
class ShieldGeneratorDeployable(cdef: ShieldGeneratorDefinition)
|
class ShieldGeneratorDeployable(cdef: ShieldGeneratorDefinition)
|
||||||
extends Deployable(cdef)
|
extends Deployable(cdef)
|
||||||
|
|
@ -125,7 +125,7 @@ class ShieldGeneratorControl(gen: ShieldGeneratorDeployable)
|
||||||
override def StartJammeredStatus(target: Any, dur: Int): Unit =
|
override def StartJammeredStatus(target: Any, dur: Int): Unit =
|
||||||
target match {
|
target match {
|
||||||
case obj: PlanetSideServerObject with JammableUnit =>
|
case obj: PlanetSideServerObject with JammableUnit =>
|
||||||
obj.Zone.VehicleEvents ! VehicleServiceMessage(
|
obj.Zone.VehicleEvents ! MessageEnvelope(
|
||||||
obj.Zone.id,
|
obj.Zone.id,
|
||||||
PlanetsideAttribute(obj.GUID, 27, 1)
|
PlanetsideAttribute(obj.GUID, 27, 1)
|
||||||
)
|
)
|
||||||
|
|
@ -138,7 +138,7 @@ class ShieldGeneratorControl(gen: ShieldGeneratorDeployable)
|
||||||
override def CancelJammeredStatus(target: Any): Unit = {
|
override def CancelJammeredStatus(target: Any): Unit = {
|
||||||
target match {
|
target match {
|
||||||
case obj: PlanetSideServerObject with JammableUnit if obj.Jammed =>
|
case obj: PlanetSideServerObject with JammableUnit if obj.Jammed =>
|
||||||
obj.Zone.VehicleEvents ! VehicleServiceMessage(
|
obj.Zone.VehicleEvents ! MessageEnvelope(
|
||||||
obj.Zone.id,
|
obj.Zone.id,
|
||||||
PlanetsideAttribute(obj.GUID, 27, 0)
|
PlanetsideAttribute(obj.GUID, 27, 0)
|
||||||
)
|
)
|
||||||
|
|
@ -160,7 +160,7 @@ object ShieldGeneratorControl {
|
||||||
//shields
|
//shields
|
||||||
if (damageToShields) {
|
if (damageToShields) {
|
||||||
val zone = target.Zone
|
val zone = target.Zone
|
||||||
zone.VehicleEvents ! VehicleServiceMessage(
|
zone.VehicleEvents ! MessageEnvelope(
|
||||||
zone.id,
|
zone.id,
|
||||||
PlanetsideAttribute(target.GUID, 68, target.Shields)
|
PlanetsideAttribute(target.GUID, 68, target.Shields)
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,8 @@ import net.psforever.objects.vehicles.Utility.InternalTelepad
|
||||||
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.objects.zones.Zone
|
import net.psforever.objects.zones.Zone
|
||||||
import net.psforever.services.local.{LocalAction, LocalServiceMessage}
|
import net.psforever.services.base.envelope.MessageEnvelope
|
||||||
|
import net.psforever.services.local.LocalAction
|
||||||
|
|
||||||
import scala.concurrent.duration._
|
import scala.concurrent.duration._
|
||||||
|
|
||||||
|
|
@ -133,6 +134,6 @@ object TelepadControl {
|
||||||
}
|
}
|
||||||
|
|
||||||
def TelepadError(zone: Zone, channel: String, msg: String): Unit = {
|
def TelepadError(zone: Zone, channel: String, msg: String): Unit = {
|
||||||
zone.LocalEvents ! LocalServiceMessage(channel, LocalAction.RouterTelepadMessage(msg))
|
zone.LocalEvents ! MessageEnvelope(channel, LocalAction.RouterTelepadMessage(msg))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,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.base.envelope.MessageEnvelope
|
||||||
import net.psforever.services.base.message.SendResponse
|
import net.psforever.services.base.message.SendResponse
|
||||||
|
|
||||||
object Tools {
|
object Tools {
|
||||||
|
|
@ -22,7 +22,7 @@ object Tools {
|
||||||
tool.FireMode match {
|
tool.FireMode match {
|
||||||
case mode: ChargeFireModeDefinition if tool.Magazine > 0 =>
|
case mode: ChargeFireModeDefinition if tool.Magazine > 0 =>
|
||||||
val magazine = tool.Magazine -= mode.RoundsPerInterval
|
val magazine = tool.Magazine -= mode.RoundsPerInterval
|
||||||
player.Zone.AvatarEvents ! AvatarServiceMessage(
|
player.Zone.AvatarEvents ! MessageEnvelope(
|
||||||
player.Name,
|
player.Name,
|
||||||
SendResponse(QuantityUpdateMessage(tool.AmmoSlot.Box.GUID, magazine))
|
SendResponse(QuantityUpdateMessage(tool.AmmoSlot.Box.GUID, magazine))
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,8 @@ import net.psforever.objects.vital.resistance.StandardResistanceProfile
|
||||||
import net.psforever.objects.vital.{SimpleResolutions, StandardVehicleResistance}
|
import net.psforever.objects.vital.{SimpleResolutions, StandardVehicleResistance}
|
||||||
import net.psforever.objects.zones.interaction.InteractsWithZone
|
import net.psforever.objects.zones.interaction.InteractsWithZone
|
||||||
import net.psforever.packet.game.TriggeredSound
|
import net.psforever.packet.game.TriggeredSound
|
||||||
import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage}
|
import net.psforever.services.base.envelope.MessageEnvelope
|
||||||
|
import net.psforever.services.vehicle.VehicleAction
|
||||||
|
|
||||||
import scala.concurrent.duration.FiniteDuration
|
import scala.concurrent.duration.FiniteDuration
|
||||||
|
|
||||||
|
|
@ -109,7 +110,7 @@ abstract class TurretDeployableControl
|
||||||
case player: Player =>
|
case player: Player =>
|
||||||
seat.unmount(player)
|
seat.unmount(player)
|
||||||
player.VehicleSeated = None
|
player.VehicleSeated = None
|
||||||
zone.VehicleEvents ! VehicleServiceMessage(
|
zone.VehicleEvents ! MessageEnvelope(
|
||||||
zone.id,
|
zone.id,
|
||||||
player.GUID,
|
player.GUID,
|
||||||
VehicleAction.KickPassenger(4, wasKickedByDriver, TurretObject.GUID)
|
VehicleAction.KickPassenger(4, wasKickedByDriver, TurretObject.GUID)
|
||||||
|
|
|
||||||
|
|
@ -13,10 +13,10 @@ import net.psforever.objects.zones.Zone
|
||||||
import net.psforever.packet.game.{ChatMsg, FrameVehicleStateMessage, GenericObjectActionEnum, HackMessage, HackState, HackState1, HackState7, TriggeredSound, VehicleStateMessage}
|
import net.psforever.packet.game.{ChatMsg, FrameVehicleStateMessage, GenericObjectActionEnum, HackMessage, HackState, HackState1, HackState7, TriggeredSound, VehicleStateMessage}
|
||||||
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.base.envelope.MessageEnvelope
|
||||||
import net.psforever.services.base.message.{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
|
||||||
import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage}
|
import net.psforever.services.vehicle.VehicleAction
|
||||||
|
|
||||||
//import scala.concurrent.duration._
|
//import scala.concurrent.duration._
|
||||||
|
|
||||||
|
|
@ -46,7 +46,7 @@ object Vehicles {
|
||||||
val locked = VehicleLockState.Locked.id
|
val locked = VehicleLockState.Locked.id
|
||||||
Array(0, 3).foreach(group => vehicle.PermissionGroup(group, locked))
|
Array(0, 3).foreach(group => vehicle.PermissionGroup(group, locked))
|
||||||
Vehicles.ReloadAccessPermissions(vehicle, tplayer.Faction.toString)
|
Vehicles.ReloadAccessPermissions(vehicle, tplayer.Faction.toString)
|
||||||
vehicle.Zone.VehicleEvents ! VehicleServiceMessage(
|
vehicle.Zone.VehicleEvents ! MessageEnvelope(
|
||||||
vehicle.Zone.id,
|
vehicle.Zone.id,
|
||||||
tplayer.GUID,
|
tplayer.GUID,
|
||||||
VehicleAction.Ownership(vehicle.GUID)
|
VehicleAction.Ownership(vehicle.GUID)
|
||||||
|
|
@ -90,7 +90,7 @@ object Vehicles {
|
||||||
val empire = VehicleLockState.Empire.id
|
val empire = VehicleLockState.Empire.id
|
||||||
(0 to 2).foreach(group => vehicle.PermissionGroup(group, empire))
|
(0 to 2).foreach(group => vehicle.PermissionGroup(group, empire))
|
||||||
ReloadAccessPermissions(vehicle, vehicle.Faction.toString)
|
ReloadAccessPermissions(vehicle, vehicle.Faction.toString)
|
||||||
zone.VehicleEvents ! VehicleServiceMessage(
|
zone.VehicleEvents ! MessageEnvelope(
|
||||||
zone.id,
|
zone.id,
|
||||||
VehicleAction.LoseOwnership(ownerGuid.getOrElse(Service.defaultPlayerGUID), guid)
|
VehicleAction.LoseOwnership(ownerGuid.getOrElse(Service.defaultPlayerGUID), guid)
|
||||||
)
|
)
|
||||||
|
|
@ -140,12 +140,12 @@ object Vehicles {
|
||||||
val pguid = player.GUID
|
val pguid = player.GUID
|
||||||
if (vehicle.OwnerGuid.contains(pguid)) {
|
if (vehicle.OwnerGuid.contains(pguid)) {
|
||||||
vehicle.AssignOwnership(None)
|
vehicle.AssignOwnership(None)
|
||||||
//vehicle.Zone.VehicleEvents ! VehicleServiceMessage(player.Name, pguid, VehicleAction.Ownership(pguid, PlanetSideGUID(0)))
|
//vehicle.Zone.VehicleEvents ! MessageEnvelope(player.Name, pguid, VehicleAction.Ownership(pguid, PlanetSideGUID(0)))
|
||||||
//val vguid = vehicle.GUID
|
//val vguid = vehicle.GUID
|
||||||
val empire = VehicleLockState.Empire.id
|
val empire = VehicleLockState.Empire.id
|
||||||
(0 to 2).foreach(group => {
|
(0 to 2).foreach(group => {
|
||||||
vehicle.PermissionGroup(group, empire)
|
vehicle.PermissionGroup(group, empire)
|
||||||
/*vehicle.Zone.VehicleEvents ! VehicleServiceMessage(
|
/*vehicle.Zone.VehicleEvents ! MessageEnvelope(
|
||||||
s"${vehicle.Faction}",
|
s"${vehicle.Faction}",
|
||||||
pguid,
|
pguid,
|
||||||
VehicleAction.SeatPermissions(pguid, vguid, group, empire)
|
VehicleAction.SeatPermissions(pguid, vguid, group, empire)
|
||||||
|
|
@ -170,7 +170,7 @@ object Vehicles {
|
||||||
def ReloadAccessPermissions(vehicle: Vehicle, toChannel: String): Unit = {
|
def ReloadAccessPermissions(vehicle: Vehicle, toChannel: String): Unit = {
|
||||||
val vehicle_guid = vehicle.GUID
|
val vehicle_guid = vehicle.GUID
|
||||||
(0 to 3).foreach(group => {
|
(0 to 3).foreach(group => {
|
||||||
vehicle.Zone.AvatarEvents ! AvatarServiceMessage(
|
vehicle.Zone.AvatarEvents ! MessageEnvelope(
|
||||||
toChannel,
|
toChannel,
|
||||||
PlanetsideAttribute(vehicle_guid, group + 10, vehicle.PermissionGroup(group).get.id)
|
PlanetsideAttribute(vehicle_guid, group + 10, vehicle.PermissionGroup(group).get.id)
|
||||||
)
|
)
|
||||||
|
|
@ -252,7 +252,7 @@ object Vehicles {
|
||||||
val vehicleEvents = zone.VehicleEvents
|
val vehicleEvents = zone.VehicleEvents
|
||||||
val localEvents = zone.LocalEvents
|
val localEvents = zone.LocalEvents
|
||||||
val previousOwnerName = target.OwnerName.getOrElse("")
|
val previousOwnerName = target.OwnerName.getOrElse("")
|
||||||
vehicleEvents ! VehicleServiceMessage(
|
vehicleEvents ! MessageEnvelope(
|
||||||
zoneid,
|
zoneid,
|
||||||
SendResponse(HackMessage(HackState1.Unk2, tGuid, hGuid, 100, 0f, HackState.Hacked, HackState7.Unk8))
|
SendResponse(HackMessage(HackState1.Unk2, tGuid, hGuid, 100, 0f, HackState.Hacked, HackState7.Unk8))
|
||||||
)
|
)
|
||||||
|
|
@ -269,7 +269,7 @@ object Vehicles {
|
||||||
player: Player =>
|
player: Player =>
|
||||||
seat.unmount(player)
|
seat.unmount(player)
|
||||||
player.VehicleSeated = None
|
player.VehicleSeated = None
|
||||||
vehicleEvents ! VehicleServiceMessage(
|
vehicleEvents ! MessageEnvelope(
|
||||||
zoneid,
|
zoneid,
|
||||||
player.GUID,
|
player.GUID,
|
||||||
VehicleAction.KickPassenger(4, unk2 = false, tGuid)
|
VehicleAction.KickPassenger(4, unk2 = false, tGuid)
|
||||||
|
|
@ -277,16 +277,16 @@ object Vehicles {
|
||||||
}
|
}
|
||||||
// In case BFR is occupied and may or may not be crouched
|
// In case BFR is occupied and may or may not be crouched
|
||||||
if (GlobalDefinitions.isBattleFrameVehicle(target.Definition) && target.Seat(0).isDefined) {
|
if (GlobalDefinitions.isBattleFrameVehicle(target.Definition) && target.Seat(0).isDefined) {
|
||||||
zone.LocalEvents ! LocalServiceMessage(
|
zone.LocalEvents ! MessageEnvelope(
|
||||||
zoneid,
|
zoneid,
|
||||||
PlanetSideGUID(-1),
|
PlanetSideGUID(-1),
|
||||||
GenericObjectAction(target.GUID, GenericObjectActionEnum.BFRShieldsDown.id)
|
GenericObjectAction(target.GUID, GenericObjectActionEnum.BFRShieldsDown.id)
|
||||||
)
|
)
|
||||||
zone.LocalEvents ! LocalServiceMessage(
|
zone.LocalEvents ! MessageEnvelope(
|
||||||
zoneid,
|
zoneid,
|
||||||
SendResponse(
|
SendResponse(
|
||||||
FrameVehicleStateMessage(target.GUID, 0, target.Position, target.Orientation, Some(Vector3(0f, 0f, 0f)), unk2=false, 0, 0, is_crouched=true, is_airborne=false, ascending_flight=false, 10, 0, 0)))
|
FrameVehicleStateMessage(target.GUID, 0, target.Position, target.Orientation, Some(Vector3(0f, 0f, 0f)), unk2=false, 0, 0, is_crouched=true, is_airborne=false, ascending_flight=false, 10, 0, 0)))
|
||||||
zone.LocalEvents ! LocalServiceMessage(
|
zone.LocalEvents ! MessageEnvelope(
|
||||||
zoneid,
|
zoneid,
|
||||||
SendResponse(
|
SendResponse(
|
||||||
VehicleStateMessage(target.GUID, 0, target.Position, target.Orientation, Some(Vector3(0f, 0f, 0f)), None, 0, 0, 15, is_decelerating=false, is_cloaked=false)))
|
VehicleStateMessage(target.GUID, 0, target.Position, target.Orientation, Some(Vector3(0f, 0f, 0f)), None, 0, 0, 15, is_decelerating=false, is_cloaked=false)))
|
||||||
|
|
@ -314,23 +314,23 @@ object Vehicles {
|
||||||
Vehicles.Own(target, hacker)
|
Vehicles.Own(target, hacker)
|
||||||
//todo: Send HackMessage -> HackCleared to vehicle? can be found in packet captures. Not sure if necessary.
|
//todo: Send HackMessage -> HackCleared to vehicle? can be found in packet captures. Not sure if necessary.
|
||||||
// And broadcast the faction change to other clients
|
// And broadcast the faction change to other clients
|
||||||
zone.AvatarEvents ! AvatarServiceMessage(
|
zone.AvatarEvents ! MessageEnvelope(
|
||||||
zoneid,
|
zoneid,
|
||||||
SetEmpire(tGuid, hFaction)
|
SetEmpire(tGuid, hFaction)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
localEvents ! LocalServiceMessage(
|
localEvents ! MessageEnvelope(
|
||||||
zoneid,
|
zoneid,
|
||||||
hGuid,
|
hGuid,
|
||||||
LocalAction.TriggerSound(TriggeredSound.HackVehicle, target.Position, 30, 0.49803925f)
|
LocalAction.TriggerSound(TriggeredSound.HackVehicle, target.Position, 30, 0.49803925f)
|
||||||
)
|
)
|
||||||
if (zone.Players.exists(_.name.equals(previousOwnerName))) {
|
if (zone.Players.exists(_.name.equals(previousOwnerName))) {
|
||||||
localEvents ! LocalServiceMessage(
|
localEvents ! MessageEnvelope(
|
||||||
previousOwnerName,
|
previousOwnerName,
|
||||||
SendResponse(ChatMsg(ChatMessageType.UNK_226, "@JackStolen"))
|
SendResponse(ChatMsg(ChatMessageType.UNK_226, "@JackStolen"))
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
localEvents ! LocalServiceMessage(
|
localEvents ! MessageEnvelope(
|
||||||
hacker.Name,
|
hacker.Name,
|
||||||
SendResponse(ChatMsg(ChatMessageType.UNK_226, "@JackVehicleOwned"))
|
SendResponse(ChatMsg(ChatMessageType.UNK_226, "@JackVehicleOwned"))
|
||||||
)
|
)
|
||||||
|
|
@ -345,10 +345,10 @@ object Vehicles {
|
||||||
util.Actor ! TelepadLike.Activate(util)
|
util.Actor ! TelepadLike.Activate(util)
|
||||||
}
|
}
|
||||||
case GlobalDefinitions.ams if target.DeploymentState == DriveState.Deployed =>
|
case GlobalDefinitions.ams if target.DeploymentState == DriveState.Deployed =>
|
||||||
vehicleEvents ! VehicleServiceMessage(zone.id, VehicleAction.AMSDeploymentChange(zone))
|
vehicleEvents ! MessageEnvelope(zone.id, VehicleAction.AMSDeploymentChange(zone))
|
||||||
case _ => ()
|
case _ => ()
|
||||||
}
|
}
|
||||||
vehicleEvents ! VehicleServiceMessage(
|
vehicleEvents ! MessageEnvelope(
|
||||||
zoneid,
|
zoneid,
|
||||||
SendResponse(HackMessage(HackState1.Unk2, tGuid, tGuid, 0, 1L, HackState.HackCleared, HackState7.Unk8))
|
SendResponse(HackMessage(HackState1.Unk2, tGuid, tGuid, 0, 1L, HackState.HackCleared, HackState7.Unk8))
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ import net.psforever.objects.serverobject.containable.{Containable, ContainableB
|
||||||
import net.psforever.packet.game.{ObjectAttachMessage, ObjectCreateDetailedMessage, ObjectDetachMessage}
|
import net.psforever.packet.game.{ObjectAttachMessage, ObjectCreateDetailedMessage, ObjectDetachMessage}
|
||||||
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.base.envelope.MessageEnvelope
|
||||||
import net.psforever.services.base.message.{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 {
|
||||||
|
|
@ -25,7 +25,7 @@ class CorpseControl(player: Player) extends Actor with ContainableBehavior {
|
||||||
val obj = ContainerObject
|
val obj = ContainerObject
|
||||||
obj.Find(item) match {
|
obj.Find(item) match {
|
||||||
case Some(slot) =>
|
case Some(slot) =>
|
||||||
obj.Zone.AvatarEvents ! AvatarServiceMessage(
|
obj.Zone.AvatarEvents ! MessageEnvelope(
|
||||||
player.Zone.id,
|
player.Zone.id,
|
||||||
SendResponse(ObjectAttachMessage(obj.GUID, item.GUID, slot))
|
SendResponse(ObjectAttachMessage(obj.GUID, item.GUID, slot))
|
||||||
)
|
)
|
||||||
|
|
@ -40,7 +40,7 @@ class CorpseControl(player: Player) extends Actor with ContainableBehavior {
|
||||||
val zone = obj.Zone
|
val zone = obj.Zone
|
||||||
val events = zone.AvatarEvents
|
val events = zone.AvatarEvents
|
||||||
item.Faction = PlanetSideEmpire.NEUTRAL
|
item.Faction = PlanetSideEmpire.NEUTRAL
|
||||||
events ! AvatarServiceMessage(zone.id, ObjectDelete(item.GUID))
|
events ! MessageEnvelope(zone.id, ObjectDelete(item.GUID))
|
||||||
}
|
}
|
||||||
|
|
||||||
def PutItemInSlotCallback(item: Equipment, slot: Int): Unit = {
|
def PutItemInSlotCallback(item: Equipment, slot: Int): Unit = {
|
||||||
|
|
@ -48,7 +48,7 @@ class CorpseControl(player: Player) extends Actor with ContainableBehavior {
|
||||||
val zone = obj.Zone
|
val zone = obj.Zone
|
||||||
val events = zone.AvatarEvents
|
val events = zone.AvatarEvents
|
||||||
val definition = item.Definition
|
val definition = item.Definition
|
||||||
events ! AvatarServiceMessage(
|
events ! MessageEnvelope(
|
||||||
zone.id,
|
zone.id,
|
||||||
SendResponse(
|
SendResponse(
|
||||||
ObjectCreateDetailedMessage(
|
ObjectCreateDetailedMessage(
|
||||||
|
|
@ -64,7 +64,7 @@ class CorpseControl(player: Player) extends Actor with ContainableBehavior {
|
||||||
def SwapItemCallback(item: Equipment, fromSlot: Int): Unit = {
|
def SwapItemCallback(item: Equipment, fromSlot: Int): Unit = {
|
||||||
val obj = ContainerObject
|
val obj = ContainerObject
|
||||||
val zone = obj.Zone
|
val zone = obj.Zone
|
||||||
zone.AvatarEvents ! AvatarServiceMessage(
|
zone.AvatarEvents ! MessageEnvelope(
|
||||||
zone.id,
|
zone.id,
|
||||||
SendResponse(ObjectDetachMessage(obj.GUID, item.GUID, Vector3.Zero, 0f))
|
SendResponse(ObjectDetachMessage(obj.GUID, item.GUID, Vector3.Zero, 0f))
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -26,8 +26,8 @@ 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.Service
|
import net.psforever.services.Service
|
||||||
import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage}
|
import net.psforever.services.avatar.AvatarAction
|
||||||
import net.psforever.services.local.{LocalAction, LocalServiceMessage}
|
import net.psforever.services.local.LocalAction
|
||||||
import net.psforever.objects.locker.LockerContainerControl
|
import net.psforever.objects.locker.LockerContainerControl
|
||||||
import net.psforever.objects.serverobject.environment.interaction.RespondsToZoneEnvironment
|
import net.psforever.objects.serverobject.environment.interaction.RespondsToZoneEnvironment
|
||||||
import net.psforever.objects.serverobject.repair.Repairable
|
import net.psforever.objects.serverobject.repair.Repairable
|
||||||
|
|
@ -36,6 +36,7 @@ import net.psforever.objects.vital.collision.CollisionReason
|
||||||
import net.psforever.objects.vital.etc.{PainboxReason, SuicideReason}
|
import net.psforever.objects.vital.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.envelope.MessageEnvelope
|
||||||
import net.psforever.services.base.message.{EventMessage, HintsAtAttacker, ObjectDelete, PlanetsideAttribute, SendResponse}
|
import net.psforever.services.base.message.{EventMessage, HintsAtAttacker, ObjectDelete, PlanetsideAttribute, SendResponse}
|
||||||
import org.joda.time.{LocalDateTime, Seconds}
|
import org.joda.time.{LocalDateTime, Seconds}
|
||||||
|
|
||||||
|
|
@ -148,11 +149,11 @@ class PlayerControl(player: Player, avatarActor: typed.ActorRef[AvatarActor.Comm
|
||||||
if (!(player.isMoving || user.isMoving)) { //only allow stationary heals
|
if (!(player.isMoving || user.isMoving)) { //only allow stationary heals
|
||||||
val newHealth = player.Health = originalHealth + 10
|
val newHealth = player.Health = originalHealth + 10
|
||||||
val magazine = item.Discharge()
|
val magazine = item.Discharge()
|
||||||
events ! AvatarServiceMessage(
|
events ! MessageEnvelope(
|
||||||
uname,
|
uname,
|
||||||
SendResponse(InventoryStateMessage(item.AmmoSlot.Box.GUID, item.GUID, magazine.toLong))
|
SendResponse(InventoryStateMessage(item.AmmoSlot.Box.GUID, item.GUID, magazine.toLong))
|
||||||
)
|
)
|
||||||
events ! AvatarServiceMessage(zone.id, PlanetsideAttribute(guid, 0, newHealth))
|
events ! MessageEnvelope(zone.id, PlanetsideAttribute(guid, 0, newHealth))
|
||||||
player.LogActivity(
|
player.LogActivity(
|
||||||
HealFromEquipment(
|
HealFromEquipment(
|
||||||
PlayerSource(user),
|
PlayerSource(user),
|
||||||
|
|
@ -172,9 +173,9 @@ class PlayerControl(player: Player, avatarActor: typed.ActorRef[AvatarActor.Comm
|
||||||
}
|
}
|
||||||
if (player != user) {
|
if (player != user) {
|
||||||
//"Someone is trying to heal you"
|
//"Someone is trying to heal you"
|
||||||
events ! AvatarServiceMessage(player.Name, PlanetsideAttribute(guid, 55, 1))
|
events ! MessageEnvelope(player.Name, PlanetsideAttribute(guid, 55, 1))
|
||||||
//progress bar remains visible for all heal attempts
|
//progress bar remains visible for all heal attempts
|
||||||
events ! AvatarServiceMessage(
|
events ! MessageEnvelope(
|
||||||
uname,
|
uname,
|
||||||
SendResponse(RepairMessage(guid, player.Health * 100 / definition.MaxHealth))
|
SendResponse(RepairMessage(guid, player.Health * 100 / definition.MaxHealth))
|
||||||
)
|
)
|
||||||
|
|
@ -214,11 +215,11 @@ class PlayerControl(player: Player, avatarActor: typed.ActorRef[AvatarActor.Comm
|
||||||
val newArmor = player.Armor =
|
val newArmor = player.Armor =
|
||||||
originalArmor + Repairable.applyLevelModifier(user, item, RepairToolValue(item)).toInt + definition.RepairMod
|
originalArmor + Repairable.applyLevelModifier(user, item, RepairToolValue(item)).toInt + definition.RepairMod
|
||||||
val magazine = item.Discharge()
|
val magazine = item.Discharge()
|
||||||
events ! AvatarServiceMessage(
|
events ! MessageEnvelope(
|
||||||
uname,
|
uname,
|
||||||
SendResponse(InventoryStateMessage(item.AmmoSlot.Box.GUID, item.GUID, magazine.toLong))
|
SendResponse(InventoryStateMessage(item.AmmoSlot.Box.GUID, item.GUID, magazine.toLong))
|
||||||
)
|
)
|
||||||
events ! AvatarServiceMessage(zone.id, PlanetsideAttribute(guid, 4, player.Armor))
|
events ! MessageEnvelope(zone.id, PlanetsideAttribute(guid, 4, player.Armor))
|
||||||
player.LogActivity(
|
player.LogActivity(
|
||||||
RepairFromEquipment(
|
RepairFromEquipment(
|
||||||
PlayerSource(user),
|
PlayerSource(user),
|
||||||
|
|
@ -239,13 +240,13 @@ class PlayerControl(player: Player, avatarActor: typed.ActorRef[AvatarActor.Comm
|
||||||
if (player != user) {
|
if (player != user) {
|
||||||
if (player.isAlive) {
|
if (player.isAlive) {
|
||||||
//"Someone is trying to repair you" gets strobed twice for visibility
|
//"Someone is trying to repair you" gets strobed twice for visibility
|
||||||
val msg = AvatarServiceMessage(player.Name, PlanetsideAttribute(guid, 56, 1))
|
val msg = MessageEnvelope(player.Name, PlanetsideAttribute(guid, 56, 1))
|
||||||
events ! msg
|
events ! msg
|
||||||
import scala.concurrent.ExecutionContext.Implicits.global
|
import scala.concurrent.ExecutionContext.Implicits.global
|
||||||
context.system.scheduler.scheduleOnce(250 milliseconds, events, msg)
|
context.system.scheduler.scheduleOnce(250 milliseconds, events, msg)
|
||||||
}
|
}
|
||||||
//progress bar remains visible for all repair attempts
|
//progress bar remains visible for all repair attempts
|
||||||
events ! AvatarServiceMessage(
|
events ! MessageEnvelope(
|
||||||
uname,
|
uname,
|
||||||
SendResponse(RepairMessage(guid, player.Armor * 100 / player.MaxArmor))
|
SendResponse(RepairMessage(guid, player.Armor * 100 / player.MaxArmor))
|
||||||
)
|
)
|
||||||
|
|
@ -312,16 +313,16 @@ class PlayerControl(player: Player, avatarActor: typed.ActorRef[AvatarActor.Comm
|
||||||
avatarActor ! AvatarActor.UpdateUseTime(kdef)
|
avatarActor ! AvatarActor.UpdateUseTime(kdef)
|
||||||
player.Slot(slot).Equipment = None //remove from slot immediately; must exist on client for now
|
player.Slot(slot).Equipment = None //remove from slot immediately; must exist on client for now
|
||||||
TaskWorkflow.execute(GUIDTask.unregisterEquipment(zone.GUID, kit))
|
TaskWorkflow.execute(GUIDTask.unregisterEquipment(zone.GUID, kit))
|
||||||
zone.AvatarEvents ! AvatarServiceMessage(
|
zone.AvatarEvents ! MessageEnvelope(
|
||||||
zone.id,
|
zone.id,
|
||||||
PlanetsideAttribute(player.GUID, attribute, value)
|
PlanetsideAttribute(player.GUID, attribute, value)
|
||||||
)
|
)
|
||||||
zone.AvatarEvents ! AvatarServiceMessage(
|
zone.AvatarEvents ! MessageEnvelope(
|
||||||
player.Name,
|
player.Name,
|
||||||
AvatarAction.UseKit(kguid, kdef.ObjectId)
|
AvatarAction.UseKit(kguid, kdef.ObjectId)
|
||||||
)
|
)
|
||||||
case _ =>
|
case _ =>
|
||||||
player.Zone.AvatarEvents ! AvatarServiceMessage(
|
player.Zone.AvatarEvents ! MessageEnvelope(
|
||||||
player.Name,
|
player.Name,
|
||||||
AvatarAction.KitNotUsed(kit.GUID, msg)
|
AvatarAction.KitNotUsed(kit.GUID, msg)
|
||||||
)
|
)
|
||||||
|
|
@ -335,14 +336,14 @@ class PlayerControl(player: Player, avatarActor: typed.ActorRef[AvatarActor.Comm
|
||||||
val events = player.Zone.AvatarEvents
|
val events = player.Zone.AvatarEvents
|
||||||
val resistance = player.TestArmMotion(slot)
|
val resistance = player.TestArmMotion(slot)
|
||||||
if (resistance && !updateMyHolsterArm) {
|
if (resistance && !updateMyHolsterArm) {
|
||||||
events ! AvatarServiceMessage(
|
events ! MessageEnvelope(
|
||||||
player.Name,
|
player.Name,
|
||||||
player.GUID,
|
player.GUID,
|
||||||
AvatarAction.ObjectHeld(before, -1)
|
AvatarAction.ObjectHeld(before, -1)
|
||||||
)
|
)
|
||||||
} else if ((!resistance && before != slot && (player.DrawnSlot = slot) != before) && ItemSwapSlot != before) {
|
} else if ((!resistance && before != slot && (player.DrawnSlot = slot) != before) && ItemSwapSlot != before) {
|
||||||
val mySlot = if (updateMyHolsterArm) slot else -1 //use as a short-circuit
|
val mySlot = if (updateMyHolsterArm) slot else -1 //use as a short-circuit
|
||||||
events ! AvatarServiceMessage(
|
events ! MessageEnvelope(
|
||||||
Players.ZoneChannelIfSpectating(player),
|
Players.ZoneChannelIfSpectating(player),
|
||||||
player.GUID,
|
player.GUID,
|
||||||
AvatarAction.ObjectHeld(mySlot, player.LastDrawnSlot)
|
AvatarAction.ObjectHeld(mySlot, player.LastDrawnSlot)
|
||||||
|
|
@ -355,7 +356,7 @@ class PlayerControl(player: Player, avatarActor: typed.ActorRef[AvatarActor.Comm
|
||||||
log.info(s"${player.Name} has drawn a ${unholsteredItem.Definition.Name} from its holster")
|
log.info(s"${player.Name} has drawn a ${unholsteredItem.Definition.Name} from its holster")
|
||||||
if (unholsteredItem.Definition == GlobalDefinitions.remote_electronics_kit) {
|
if (unholsteredItem.Definition == GlobalDefinitions.remote_electronics_kit) {
|
||||||
//rek beam/icon colour must match the player's correct hack level
|
//rek beam/icon colour must match the player's correct hack level
|
||||||
events ! AvatarServiceMessage(
|
events ! MessageEnvelope(
|
||||||
Players.ZoneChannelIfSpectating(player),
|
Players.ZoneChannelIfSpectating(player),
|
||||||
unholsteredItem.GUID,
|
unholsteredItem.GUID,
|
||||||
PlanetsideAttribute(unholsteredItem.GUID, 116, player.avatar.hackingSkillLevel())
|
PlanetsideAttribute(unholsteredItem.GUID, 116, player.avatar.hackingSkillLevel())
|
||||||
|
|
@ -370,7 +371,7 @@ class PlayerControl(player: Player, avatarActor: typed.ActorRef[AvatarActor.Comm
|
||||||
//make sure the player didn't just initialte an orbital strike. If not (the if below is true), make sure waypoint is removed
|
//make sure the player didn't just initialte an orbital strike. If not (the if below is true), make sure waypoint is removed
|
||||||
if (holsteredEquipment.Definition == GlobalDefinitions.command_detonater && player.avatar.cr.value > 3 &&
|
if (holsteredEquipment.Definition == GlobalDefinitions.command_detonater && player.avatar.cr.value > 3 &&
|
||||||
!player.avatar.cooldowns.purchase.exists(os => os._1 == "orbital_strike" && Seconds.secondsBetween(os._2, LocalDateTime.now()).getSeconds < 12)) {
|
!player.avatar.cooldowns.purchase.exists(os => os._1 == "orbital_strike" && Seconds.secondsBetween(os._2, LocalDateTime.now()).getSeconds < 12)) {
|
||||||
player.Zone.LocalEvents ! LocalServiceMessage(
|
player.Zone.LocalEvents ! MessageEnvelope(
|
||||||
s"${player.Faction}",
|
s"${player.Faction}",
|
||||||
PlanetSideGUID(-1),
|
PlanetSideGUID(-1),
|
||||||
SendResponse(OrbitalStrikeWaypointMessage(player.GUID, None))
|
SendResponse(OrbitalStrikeWaypointMessage(player.GUID, None))
|
||||||
|
|
@ -398,7 +399,7 @@ class PlayerControl(player: Player, avatarActor: typed.ActorRef[AvatarActor.Comm
|
||||||
if (exosuit == ExoSuitType.MAX) {
|
if (exosuit == ExoSuitType.MAX) {
|
||||||
player.ResistArmMotion(PlayerControl.maxRestriction)
|
player.ResistArmMotion(PlayerControl.maxRestriction)
|
||||||
}
|
}
|
||||||
player.Zone.AvatarEvents ! AvatarServiceMessage(
|
player.Zone.AvatarEvents ! MessageEnvelope(
|
||||||
player.Name,
|
player.Name,
|
||||||
AvatarAction.TerminalOrderResult(msg.terminal_guid, msg.transaction_type, result)
|
AvatarAction.TerminalOrderResult(msg.terminal_guid, msg.transaction_type, result)
|
||||||
)
|
)
|
||||||
|
|
@ -530,7 +531,7 @@ class PlayerControl(player: Player, avatarActor: typed.ActorRef[AvatarActor.Comm
|
||||||
Deployables.initializeConstructionItem(player.avatar.certifications, citem)
|
Deployables.initializeConstructionItem(player.avatar.certifications, citem)
|
||||||
}
|
}
|
||||||
val zone = player.Zone
|
val zone = player.Zone
|
||||||
zone.AvatarEvents ! AvatarServiceMessage(
|
zone.AvatarEvents ! MessageEnvelope(
|
||||||
Players.ZoneChannelIfSpectating(player),
|
Players.ZoneChannelIfSpectating(player),
|
||||||
AvatarAction.ChangeLoadout(
|
AvatarAction.ChangeLoadout(
|
||||||
player.GUID,
|
player.GUID,
|
||||||
|
|
@ -546,7 +547,7 @@ class PlayerControl(player: Player, avatarActor: typed.ActorRef[AvatarActor.Comm
|
||||||
itemsToDrop
|
itemsToDrop
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
zone.AvatarEvents ! AvatarServiceMessage(
|
zone.AvatarEvents ! MessageEnvelope(
|
||||||
player.Name,
|
player.Name,
|
||||||
AvatarAction.TerminalOrderResult(msg.terminal_guid, msg.transaction_type, result=true)
|
AvatarAction.TerminalOrderResult(msg.terminal_guid, msg.transaction_type, result=true)
|
||||||
)
|
)
|
||||||
|
|
@ -575,7 +576,7 @@ class PlayerControl(player: Player, avatarActor: typed.ActorRef[AvatarActor.Comm
|
||||||
case Zone.Ground.CanNotPickupItem(_, item_guid, reason) =>
|
case Zone.Ground.CanNotPickupItem(_, item_guid, reason) =>
|
||||||
log.warn(s"${player.Name} failed to pick up an item ($item_guid) from the ground because $reason")
|
log.warn(s"${player.Name} failed to pick up an item ($item_guid) from the ground because $reason")
|
||||||
if (reason.startsWith("@")) {
|
if (reason.startsWith("@")) {
|
||||||
player.Zone.AvatarEvents ! AvatarServiceMessage(
|
player.Zone.AvatarEvents ! MessageEnvelope(
|
||||||
player.Name,
|
player.Name,
|
||||||
SendResponse(ChatMsg(ChatMessageType.UNK_227, reason))
|
SendResponse(ChatMsg(ChatMessageType.UNK_227, reason))
|
||||||
)
|
)
|
||||||
|
|
@ -595,7 +596,7 @@ class PlayerControl(player: Player, avatarActor: typed.ActorRef[AvatarActor.Comm
|
||||||
val trigger = new BoomerTrigger
|
val trigger = new BoomerTrigger
|
||||||
trigger.Companion = obj.GUID
|
trigger.Companion = obj.GUID
|
||||||
obj.Trigger = trigger
|
obj.Trigger = trigger
|
||||||
zone.AvatarEvents ! AvatarServiceMessage(zone.id, ObjectDelete(tool.GUID))
|
zone.AvatarEvents ! MessageEnvelope(zone.id, ObjectDelete(tool.GUID))
|
||||||
TaskWorkflow.execute(GUIDTask.unregisterEquipment(zone.GUID, tool))
|
TaskWorkflow.execute(GUIDTask.unregisterEquipment(zone.GUID, tool))
|
||||||
player.Find(tool) match {
|
player.Find(tool) match {
|
||||||
case Some(index) if player.VisibleSlots.contains(index) =>
|
case Some(index) if player.VisibleSlots.contains(index) =>
|
||||||
|
|
@ -647,7 +648,7 @@ class PlayerControl(player: Player, avatarActor: typed.ActorRef[AvatarActor.Comm
|
||||||
|
|
||||||
case Player.LoseDeployable(obj) =>
|
case Player.LoseDeployable(obj) =>
|
||||||
if (player.avatar.deployables.Remove(obj)) {
|
if (player.avatar.deployables.Remove(obj)) {
|
||||||
player.Zone.LocalEvents ! LocalServiceMessage(player.Name, LocalAction.DeployableUIFor(obj.Definition.Item))
|
player.Zone.LocalEvents ! MessageEnvelope(player.Name, LocalAction.DeployableUIFor(obj.Definition.Item))
|
||||||
}
|
}
|
||||||
|
|
||||||
case _ => ;
|
case _ => ;
|
||||||
|
|
@ -720,7 +721,7 @@ class PlayerControl(player: Player, avatarActor: typed.ActorRef[AvatarActor.Comm
|
||||||
//insert
|
//insert
|
||||||
afterHolsters.foreach(elem => player.Slot(elem.start).Equipment = elem.obj)
|
afterHolsters.foreach(elem => player.Slot(elem.start).Equipment = elem.obj)
|
||||||
afterInventory.foreach(elem => player.Inventory.InsertQuickly(elem.start, elem.obj))
|
afterInventory.foreach(elem => player.Inventory.InsertQuickly(elem.start, elem.obj))
|
||||||
player.Zone.AvatarEvents ! AvatarServiceMessage(
|
player.Zone.AvatarEvents ! MessageEnvelope(
|
||||||
Players.ZoneChannelIfSpectating(player),
|
Players.ZoneChannelIfSpectating(player),
|
||||||
AvatarAction.ChangeExosuit(
|
AvatarAction.ChangeExosuit(
|
||||||
player.GUID,
|
player.GUID,
|
||||||
|
|
@ -746,7 +747,7 @@ class PlayerControl(player: Player, avatarActor: typed.ActorRef[AvatarActor.Comm
|
||||||
def loseDeployableOwnership(obj: Deployable): Boolean = {
|
def loseDeployableOwnership(obj: Deployable): Boolean = {
|
||||||
if (player.avatar.deployables.Remove(obj)) {
|
if (player.avatar.deployables.Remove(obj)) {
|
||||||
obj.Actor ! Deployable.Ownership(None)
|
obj.Actor ! Deployable.Ownership(None)
|
||||||
player.Zone.LocalEvents ! LocalServiceMessage(player.Name, LocalAction.DeployableUIFor(obj.Definition.Item))
|
player.Zone.LocalEvents ! MessageEnvelope(player.Name, LocalAction.DeployableUIFor(obj.Definition.Item))
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
@ -768,14 +769,14 @@ class PlayerControl(player: Player, avatarActor: typed.ActorRef[AvatarActor.Comm
|
||||||
case GlobalDefinitions.ace
|
case GlobalDefinitions.ace
|
||||||
if obj.Definition.deployAnimation == DeployAnimation.Standard =>
|
if obj.Definition.deployAnimation == DeployAnimation.Standard =>
|
||||||
val ownerGuid = obj.OwnerGuid.getOrElse(Service.defaultPlayerGUID)
|
val ownerGuid = obj.OwnerGuid.getOrElse(Service.defaultPlayerGUID)
|
||||||
zone.LocalEvents ! LocalServiceMessage(
|
zone.LocalEvents ! MessageEnvelope(
|
||||||
zone.id,
|
zone.id,
|
||||||
ownerGuid,
|
ownerGuid,
|
||||||
LocalAction.TriggerEffectLocation("spawn_object_effect", obj.Position, obj.Orientation)
|
LocalAction.TriggerEffectLocation("spawn_object_effect", obj.Position, obj.Orientation)
|
||||||
)
|
)
|
||||||
case GlobalDefinitions.advanced_ace
|
case GlobalDefinitions.advanced_ace
|
||||||
if obj.Definition.deployAnimation == DeployAnimation.Fdu =>
|
if obj.Definition.deployAnimation == DeployAnimation.Fdu =>
|
||||||
zone.AvatarEvents ! AvatarServiceMessage(zone.id, AvatarAction.PutDownFDU(player.GUID))
|
zone.AvatarEvents ! MessageEnvelope(zone.id, AvatarAction.PutDownFDU(player.GUID))
|
||||||
case _ =>
|
case _ =>
|
||||||
org.log4s
|
org.log4s
|
||||||
.getLogger(name = "Deployables")
|
.getLogger(name = "Deployables")
|
||||||
|
|
@ -878,7 +879,7 @@ class PlayerControl(player: Player, avatarActor: typed.ActorRef[AvatarActor.Comm
|
||||||
//always do armor update
|
//always do armor update
|
||||||
if (damageToArmor > 0) {
|
if (damageToArmor > 0) {
|
||||||
val zone = target.Zone
|
val zone = target.Zone
|
||||||
zone.AvatarEvents ! AvatarServiceMessage(
|
zone.AvatarEvents ! MessageEnvelope(
|
||||||
zone.id,
|
zone.id,
|
||||||
PlanetsideAttribute(target.GUID, 4, target.Armor)
|
PlanetsideAttribute(target.GUID, 4, target.Armor)
|
||||||
)
|
)
|
||||||
|
|
@ -936,7 +937,7 @@ class PlayerControl(player: Player, avatarActor: typed.ActorRef[AvatarActor.Comm
|
||||||
target.LogActivity(cause)
|
target.LogActivity(cause)
|
||||||
//stat changes
|
//stat changes
|
||||||
if (damageToCapacitor > 0) {
|
if (damageToCapacitor > 0) {
|
||||||
events ! AvatarServiceMessage(target.Name, PlanetsideAttribute(targetGUID, 7, target.Capacitor.toLong))
|
events ! MessageEnvelope(target.Name, PlanetsideAttribute(targetGUID, 7, target.Capacitor.toLong))
|
||||||
announceConfrontation = true //TODO should we?
|
announceConfrontation = true //TODO should we?
|
||||||
}
|
}
|
||||||
if (damageToStamina > 0) {
|
if (damageToStamina > 0) {
|
||||||
|
|
@ -944,13 +945,13 @@ class PlayerControl(player: Player, avatarActor: typed.ActorRef[AvatarActor.Comm
|
||||||
announceConfrontation = true //TODO should we?
|
announceConfrontation = true //TODO should we?
|
||||||
}
|
}
|
||||||
if (damageToHealth > 0) {
|
if (damageToHealth > 0) {
|
||||||
events ! AvatarServiceMessage(zoneId, PlanetsideAttribute(targetGUID, 0, health))
|
events ! MessageEnvelope(zoneId, PlanetsideAttribute(targetGUID, 0, health))
|
||||||
announceConfrontation = true
|
announceConfrontation = true
|
||||||
}
|
}
|
||||||
val countableDamage = damageToHealth + damageToArmor
|
val countableDamage = damageToHealth + damageToArmor
|
||||||
if(announceConfrontation) {
|
if(announceConfrontation) {
|
||||||
if (aggravated) {
|
if (aggravated) {
|
||||||
events ! AvatarServiceMessage(
|
events ! MessageEnvelope(
|
||||||
zoneId,
|
zoneId,
|
||||||
SendResponse(AggravatedDamageMessage(targetGUID, countableDamage))
|
SendResponse(AggravatedDamageMessage(targetGUID, countableDamage))
|
||||||
)
|
)
|
||||||
|
|
@ -965,19 +966,19 @@ class PlayerControl(player: Player, avatarActor: typed.ActorRef[AvatarActor.Comm
|
||||||
val name = pSource.Name
|
val name = pSource.Name
|
||||||
zone.LivePlayers.find(_.Name == name).orElse(zone.Corpses.find(_.Name == name)) match {
|
zone.LivePlayers.find(_.Name == name).orElse(zone.Corpses.find(_.Name == name)) match {
|
||||||
case Some(tplayer) =>
|
case Some(tplayer) =>
|
||||||
zone.AvatarEvents ! AvatarServiceMessage(
|
zone.AvatarEvents ! MessageEnvelope(
|
||||||
target.Name,
|
target.Name,
|
||||||
target.GUID,
|
target.GUID,
|
||||||
HintsAtAttacker(tplayer.GUID)
|
HintsAtAttacker(tplayer.GUID)
|
||||||
)
|
)
|
||||||
case None =>
|
case None =>
|
||||||
zone.AvatarEvents ! AvatarServiceMessage(
|
zone.AvatarEvents ! MessageEnvelope(
|
||||||
target.Name,
|
target.Name,
|
||||||
SendResponse(DamageWithPositionMessage(countableDamage, pSource.Position))
|
SendResponse(DamageWithPositionMessage(countableDamage, pSource.Position))
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
case source =>
|
case source =>
|
||||||
zone.AvatarEvents ! AvatarServiceMessage(
|
zone.AvatarEvents ! MessageEnvelope(
|
||||||
target.Name,
|
target.Name,
|
||||||
SendResponse(DamageWithPositionMessage(countableDamage, source.Position))
|
SendResponse(DamageWithPositionMessage(countableDamage, source.Position))
|
||||||
)
|
)
|
||||||
|
|
@ -985,17 +986,17 @@ class PlayerControl(player: Player, avatarActor: typed.ActorRef[AvatarActor.Comm
|
||||||
case None =>
|
case None =>
|
||||||
cause.interaction.cause match {
|
cause.interaction.cause match {
|
||||||
case o: PainboxReason =>
|
case o: PainboxReason =>
|
||||||
zone.AvatarEvents ! AvatarServiceMessage(
|
zone.AvatarEvents ! MessageEnvelope(
|
||||||
target.Name,
|
target.Name,
|
||||||
AvatarAction.EnvironmentalDamage(target.GUID, o.entity.GUID, countableDamage)
|
AvatarAction.EnvironmentalDamage(target.GUID, o.entity.GUID, countableDamage)
|
||||||
)
|
)
|
||||||
case _: CollisionReason =>
|
case _: CollisionReason =>
|
||||||
events ! AvatarServiceMessage(
|
events ! MessageEnvelope(
|
||||||
zoneId,
|
zoneId,
|
||||||
SendResponse(AggravatedDamageMessage(targetGUID, countableDamage))
|
SendResponse(AggravatedDamageMessage(targetGUID, countableDamage))
|
||||||
)
|
)
|
||||||
case _ =>
|
case _ =>
|
||||||
zone.AvatarEvents ! AvatarServiceMessage(
|
zone.AvatarEvents ! MessageEnvelope(
|
||||||
target.Name,
|
target.Name,
|
||||||
AvatarAction.EnvironmentalDamage(target.GUID, ValidPlanetSideGUID(0), countableDamage)
|
AvatarAction.EnvironmentalDamage(target.GUID, ValidPlanetSideGUID(0), countableDamage)
|
||||||
)
|
)
|
||||||
|
|
@ -1051,14 +1052,14 @@ class PlayerControl(player: Player, avatarActor: typed.ActorRef[AvatarActor.Comm
|
||||||
damageLog.info(s"${player.Name} killed ${player.Sex.pronounObject}self")
|
damageLog.info(s"${player.Name} killed ${player.Sex.pronounObject}self")
|
||||||
}
|
}
|
||||||
|
|
||||||
events ! AvatarServiceMessage(nameChannel, player_guid, AvatarAction.Killed(cause, target.VehicleSeated)) //align client interface fields with state
|
events ! MessageEnvelope(nameChannel, player_guid, AvatarAction.Killed(cause, target.VehicleSeated)) //align client interface fields with state
|
||||||
events ! AvatarServiceMessage(zoneChannel, PlanetsideAttribute(player_guid, 0, 0)) //health
|
events ! MessageEnvelope(zoneChannel, PlanetsideAttribute(player_guid, 0, 0)) //health
|
||||||
if (target.Capacitor > 0) {
|
if (target.Capacitor > 0) {
|
||||||
target.Capacitor = 0
|
target.Capacitor = 0
|
||||||
events ! AvatarServiceMessage(nameChannel, PlanetsideAttribute(player_guid, 7, 0)) // capacitor
|
events ! MessageEnvelope(nameChannel, PlanetsideAttribute(player_guid, 7, 0)) // capacitor
|
||||||
}
|
}
|
||||||
val attribute = DamageableEntity.attributionTo(cause, target.Zone, player_guid)
|
val attribute = DamageableEntity.attributionTo(cause, target.Zone, player_guid)
|
||||||
events ! AvatarServiceMessage(
|
events ! MessageEnvelope(
|
||||||
nameChannel,
|
nameChannel,
|
||||||
SendResponse(DestroyMessage(player_guid, attribute, Service.defaultPlayerGUID, pos)) //how many players get this message?
|
SendResponse(DestroyMessage(player_guid, attribute, Service.defaultPlayerGUID, pos)) //how many players get this message?
|
||||||
)
|
)
|
||||||
|
|
@ -1089,7 +1090,7 @@ class PlayerControl(player: Player, avatarActor: typed.ActorRef[AvatarActor.Comm
|
||||||
override def StartJammeredSound(target: Any, dur: Int): Unit =
|
override def StartJammeredSound(target: Any, dur: Int): Unit =
|
||||||
target match {
|
target match {
|
||||||
case obj: Player if !jammedSound =>
|
case obj: Player if !jammedSound =>
|
||||||
obj.Zone.AvatarEvents ! AvatarServiceMessage(
|
obj.Zone.AvatarEvents ! MessageEnvelope(
|
||||||
obj.Zone.id,
|
obj.Zone.id,
|
||||||
PlanetsideAttribute(obj.GUID, 27, 1)
|
PlanetsideAttribute(obj.GUID, 27, 1)
|
||||||
)
|
)
|
||||||
|
|
@ -1125,7 +1126,7 @@ class PlayerControl(player: Player, avatarActor: typed.ActorRef[AvatarActor.Comm
|
||||||
override def CancelJammeredSound(target: Any): Unit =
|
override def CancelJammeredSound(target: Any): Unit =
|
||||||
target match {
|
target match {
|
||||||
case obj: Player if jammedSound =>
|
case obj: Player if jammedSound =>
|
||||||
obj.Zone.AvatarEvents ! AvatarServiceMessage(
|
obj.Zone.AvatarEvents ! MessageEnvelope(
|
||||||
obj.Zone.id,
|
obj.Zone.id,
|
||||||
PlanetsideAttribute(obj.GUID, 27, 0)
|
PlanetsideAttribute(obj.GUID, 27, 0)
|
||||||
)
|
)
|
||||||
|
|
@ -1172,7 +1173,7 @@ class PlayerControl(player: Player, avatarActor: typed.ActorRef[AvatarActor.Comm
|
||||||
if (slot == obj.DrawnSlot) {
|
if (slot == obj.DrawnSlot) {
|
||||||
obj.DrawnSlot = Player.HandsDownSlot
|
obj.DrawnSlot = Player.HandsDownSlot
|
||||||
}
|
}
|
||||||
events ! AvatarServiceMessage(toChannel, ObjectDelete(item.GUID))
|
events ! MessageEnvelope(toChannel, ObjectDelete(item.GUID))
|
||||||
}
|
}
|
||||||
|
|
||||||
def PutItemInSlotCallback(item: Equipment, slot: Int): Unit = {
|
def PutItemInSlotCallback(item: Equipment, slot: Int): Unit = {
|
||||||
|
|
@ -1193,7 +1194,7 @@ class PlayerControl(player: Player, avatarActor: typed.ActorRef[AvatarActor.Comm
|
||||||
case Some(obj: BoomerDeployable) =>
|
case Some(obj: BoomerDeployable) =>
|
||||||
val deployables = player.avatar.deployables
|
val deployables = player.avatar.deployables
|
||||||
if (!deployables.Contains(obj) && deployables.Valid(obj)) {
|
if (!deployables.Contains(obj) && deployables.Valid(obj)) {
|
||||||
events ! AvatarServiceMessage(
|
events ! MessageEnvelope(
|
||||||
toChannel,
|
toChannel,
|
||||||
SendResponse(GenericObjectAction2Message(1, player.GUID, trigger.GUID))
|
SendResponse(GenericObjectAction2Message(1, player.GUID, trigger.GUID))
|
||||||
)
|
)
|
||||||
|
|
@ -1212,12 +1213,12 @@ class PlayerControl(player: Player, avatarActor: typed.ActorRef[AvatarActor.Comm
|
||||||
|
|
||||||
case _ => ()
|
case _ => ()
|
||||||
}
|
}
|
||||||
events ! AvatarServiceMessage(
|
events ! MessageEnvelope(
|
||||||
toChannel,
|
toChannel,
|
||||||
SendResponse(OCM.detailed(item, ObjectCreateMessageParent(guid, slot)))
|
SendResponse(OCM.detailed(item, ObjectCreateMessageParent(guid, slot)))
|
||||||
)
|
)
|
||||||
if (!player.isBackpack && willBeVisible) {
|
if (!player.isBackpack && willBeVisible) {
|
||||||
events ! AvatarServiceMessage(zone.id, guid, AvatarAction.EquipmentInHand(guid, slot, item))
|
events ! MessageEnvelope(zone.id, guid, AvatarAction.EquipmentInHand(guid, slot, item))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1231,17 +1232,16 @@ class PlayerControl(player: Player, avatarActor: typed.ActorRef[AvatarActor.Comm
|
||||||
} else {
|
} else {
|
||||||
player.Name
|
player.Name
|
||||||
}
|
}
|
||||||
zone.AvatarEvents ! AvatarServiceMessage(
|
zone.AvatarEvents ! MessageEnvelope(
|
||||||
toChannel,
|
toChannel,
|
||||||
ObjectDelete(item.GUID)
|
ObjectDelete(item.GUID)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
def UpdateAuraEffect(target: AuraEffectBehavior.Target) : Unit = {
|
def UpdateAuraEffect(target: AuraEffectBehavior.Target) : Unit = {
|
||||||
import net.psforever.services.avatar.AvatarServiceMessage
|
|
||||||
val zone = target.Zone
|
val zone = target.Zone
|
||||||
val value = target.Aura.foldLeft(0)(_ + PlayerControl.auraEffectToAttributeValue(_))
|
val value = target.Aura.foldLeft(0)(_ + PlayerControl.auraEffectToAttributeValue(_))
|
||||||
zone.AvatarEvents ! AvatarServiceMessage(zone.id, PlanetsideAttribute(target.GUID, 54, value))
|
zone.AvatarEvents ! MessageEnvelope(zone.id, PlanetsideAttribute(target.GUID, 54, value))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1271,11 +1271,11 @@ object PlayerControl {
|
||||||
}
|
}
|
||||||
|
|
||||||
def sendResponse(zone: Zone, channel: String, msg: PlanetSideGamePacket): Unit = {
|
def sendResponse(zone: Zone, channel: String, msg: PlanetSideGamePacket): Unit = {
|
||||||
zone.AvatarEvents ! AvatarServiceMessage(channel, SendResponse(msg))
|
zone.AvatarEvents ! MessageEnvelope(channel, SendResponse(msg))
|
||||||
}
|
}
|
||||||
|
|
||||||
def sendResponse(zone: Zone, channel: String, filter: PlanetSideGUID, msg: EventMessage): Unit = {
|
def sendResponse(zone: Zone, channel: String, filter: PlanetSideGUID, msg: EventMessage): Unit = {
|
||||||
zone.AvatarEvents ! AvatarServiceMessage(channel, filter, msg)
|
zone.AvatarEvents ! MessageEnvelope(channel, filter, msg)
|
||||||
}
|
}
|
||||||
|
|
||||||
def maxRestriction(player: Player, slot: Int): Boolean = {
|
def maxRestriction(player: Player, slot: Int): Boolean = {
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@ import net.psforever.objects.serverobject.environment.{EnvironmentAttribute, Env
|
||||||
import net.psforever.objects.serverobject.environment.interaction.{InteractionWith, RespondsToZoneEnvironment}
|
import net.psforever.objects.serverobject.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.envelope.MessageEnvelope
|
||||||
import net.psforever.services.base.message.SendResponse
|
import net.psforever.services.base.message.SendResponse
|
||||||
import net.psforever.types.Vector3
|
import net.psforever.types.Vector3
|
||||||
|
|
||||||
|
|
@ -91,7 +92,6 @@ class WithEntrance()
|
||||||
): Sidedness = {
|
): Sidedness = {
|
||||||
import net.psforever.objects.{Player, Vehicle}
|
import net.psforever.objects.{Player, Vehicle}
|
||||||
import net.psforever.packet.game.ChatMsg
|
import net.psforever.packet.game.ChatMsg
|
||||||
import net.psforever.services.avatar.AvatarServiceMessage
|
|
||||||
import net.psforever.types.ChatMessageType
|
import net.psforever.types.ChatMessageType
|
||||||
val channel = obj match {
|
val channel = obj match {
|
||||||
case p: Player => p.Name
|
case p: Player => p.Name
|
||||||
|
|
@ -99,7 +99,7 @@ class WithEntrance()
|
||||||
case _ => ""
|
case _ => ""
|
||||||
}
|
}
|
||||||
if (door.Outwards == Vector3.Zero) {
|
if (door.Outwards == Vector3.Zero) {
|
||||||
obj.Zone.AvatarEvents ! AvatarServiceMessage(
|
obj.Zone.AvatarEvents ! MessageEnvelope(
|
||||||
channel,
|
channel,
|
||||||
SendResponse(ChatMsg(ChatMessageType.UNK_229, "Door not configured."))
|
SendResponse(ChatMsg(ChatMessageType.UNK_229, "Door not configured."))
|
||||||
)
|
)
|
||||||
|
|
@ -108,14 +108,14 @@ class WithEntrance()
|
||||||
val result = Vector3.DotProduct(Vector3.Unit(obj.Position - door.Position), door.Outwards) > 0f
|
val result = Vector3.DotProduct(Vector3.Unit(obj.Position - door.Position), door.Outwards) > 0f
|
||||||
if (result && WhichSide != Sidedness.OutsideOf) {
|
if (result && WhichSide != Sidedness.OutsideOf) {
|
||||||
//outside
|
//outside
|
||||||
obj.Zone.AvatarEvents ! AvatarServiceMessage(
|
obj.Zone.AvatarEvents ! MessageEnvelope(
|
||||||
channel,
|
channel,
|
||||||
SendResponse(ChatMsg(ChatMessageType.UNK_229, "You are now outside"))
|
SendResponse(ChatMsg(ChatMessageType.UNK_229, "You are now outside"))
|
||||||
)
|
)
|
||||||
Sidedness.OutsideOf
|
Sidedness.OutsideOf
|
||||||
} else if (!result && WhichSide != Sidedness.InsideOf) {
|
} else if (!result && WhichSide != Sidedness.InsideOf) {
|
||||||
//inside
|
//inside
|
||||||
obj.Zone.AvatarEvents ! AvatarServiceMessage(
|
obj.Zone.AvatarEvents ! MessageEnvelope(
|
||||||
channel,
|
channel,
|
||||||
SendResponse(ChatMsg(ChatMessageType.UNK_229, "You are now inside"))
|
SendResponse(ChatMsg(ChatMessageType.UNK_229, "You are now inside"))
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ import net.psforever.objects.serverobject.environment.{EnvironmentAttribute, Env
|
||||||
import net.psforever.objects.serverobject.shuttle.OrbitalShuttlePad
|
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.base.envelope.MessageEnvelope
|
||||||
import net.psforever.services.base.message.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
|
||||||
|
|
@ -35,10 +35,10 @@ class WithGantry(val channel: String)
|
||||||
player.VehicleSeated.isEmpty =>
|
player.VehicleSeated.isEmpty =>
|
||||||
val (pos, ang) = Vehicles.dismountShuttle(shuttle, field.mountPoint)
|
val (pos, ang) = Vehicles.dismountShuttle(shuttle, field.mountPoint)
|
||||||
val events = shuttle.Zone.AvatarEvents
|
val events = shuttle.Zone.AvatarEvents
|
||||||
events ! AvatarServiceMessage(
|
events ! MessageEnvelope(
|
||||||
channel,
|
channel,
|
||||||
SendResponse(PlayerStateShiftMessage(ShiftState(0, pos, ang, None))))
|
SendResponse(PlayerStateShiftMessage(ShiftState(0, pos, ang, None))))
|
||||||
events ! AvatarServiceMessage(
|
events ! MessageEnvelope(
|
||||||
channel,
|
channel,
|
||||||
SendResponse(ChatMsg(ChatMessageType.UNK_227, "@Vehicle_OS_PlacedOutsideHallway"))
|
SendResponse(ChatMsg(ChatMessageType.UNK_227, "@Vehicle_OS_PlacedOutsideHallway"))
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,8 @@ import net.psforever.objects.serverobject.environment.interaction.common.Watery
|
||||||
import net.psforever.objects.serverobject.environment.interaction.common.Watery.OxygenStateTarget
|
import net.psforever.objects.serverobject.environment.interaction.common.Watery.OxygenStateTarget
|
||||||
import net.psforever.objects.serverobject.environment.{EnvironmentTrait, PieceOfEnvironment, interaction}
|
import net.psforever.objects.serverobject.environment.{EnvironmentTrait, PieceOfEnvironment, interaction}
|
||||||
import net.psforever.objects.zones.interaction.InteractsWithZone
|
import net.psforever.objects.zones.interaction.InteractsWithZone
|
||||||
import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage}
|
import net.psforever.services.avatar.AvatarAction
|
||||||
|
import net.psforever.services.base.envelope.MessageEnvelope
|
||||||
import net.psforever.types.OxygenState
|
import net.psforever.types.OxygenState
|
||||||
|
|
||||||
import scala.concurrent.duration._
|
import scala.concurrent.duration._
|
||||||
|
|
@ -299,7 +300,7 @@ class WithWater(val channel: String)
|
||||||
cond: OxygenStateTarget,
|
cond: OxygenStateTarget,
|
||||||
data: Option[OxygenStateTarget]
|
data: Option[OxygenStateTarget]
|
||||||
): Unit = {
|
): Unit = {
|
||||||
obj.Zone.AvatarEvents ! AvatarServiceMessage(channel, AvatarAction.OxygenState(cond, data))
|
obj.Zone.AvatarEvents ! MessageEnvelope(channel, AvatarAction.OxygenState(cond, data))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
package net.psforever.objects.avatar.scoring
|
package net.psforever.objects.avatar.scoring
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Organizes the eight fields one would find in an `AvatarServiceMessage` statistic field.
|
* Organizes the eight fields one would find in an statistic field.
|
||||||
* The `_c` fields and the `_s` fields are paired when the values populate the packet
|
* The `_c` fields and the `_s` fields are paired when the values populate the packet
|
||||||
* where `c` stands for "campaign" and `s` stands for "session".
|
* where `c` stands for "campaign" and `s` stands for "session".
|
||||||
* "Session" values reflect on the UI as the K in K/D
|
* "Session" values reflect on the UI as the K in K/D
|
||||||
|
|
|
||||||
|
|
@ -7,9 +7,9 @@ import net.psforever.objects._
|
||||||
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.avatar.AvatarServiceMessage
|
import net.psforever.services.base.envelope.MessageEnvelope
|
||||||
import net.psforever.services.base.message.SetEmpire
|
import net.psforever.services.base.message.SetEmpire
|
||||||
import net.psforever.services.local.{LocalAction, LocalServiceMessage}
|
import net.psforever.services.local.LocalAction
|
||||||
import net.psforever.types.PlanetSideEmpire
|
import net.psforever.types.PlanetSideEmpire
|
||||||
|
|
||||||
import scala.concurrent.duration._
|
import scala.concurrent.duration._
|
||||||
|
|
@ -199,9 +199,9 @@ trait DeployableBehavior {
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
//zone build
|
//zone build
|
||||||
localEvents ! LocalServiceMessage(zone.id, LocalAction.DeployItem(obj))
|
localEvents ! MessageEnvelope(zone.id, LocalAction.DeployItem(obj))
|
||||||
//zone map icon
|
//zone map icon
|
||||||
localEvents ! LocalServiceMessage(
|
localEvents ! MessageEnvelope(
|
||||||
obj.Faction.toString,
|
obj.Faction.toString,
|
||||||
LocalAction.DeployableMapIcon(DeploymentAction.Build, DeployableInfo(obj.GUID, Deployable.Icon(obj.Definition.Item), obj.Position, obj.OwnerGuid.getOrElse(Service.defaultPlayerGUID)))
|
LocalAction.DeployableMapIcon(DeploymentAction.Build, DeployableInfo(obj.GUID, Deployable.Icon(obj.Definition.Item), obj.Position, obj.OwnerGuid.getOrElse(Service.defaultPlayerGUID)))
|
||||||
)
|
)
|
||||||
|
|
@ -247,7 +247,7 @@ trait DeployableBehavior {
|
||||||
//there's no special meaning behind directing any replies from from zone governance straight back to zone governance
|
//there's no special meaning behind directing any replies from from zone governance straight back to zone governance
|
||||||
//this deployable control agency, however, will be expiring and can not be a recipient
|
//this deployable control agency, however, will be expiring and can not be a recipient
|
||||||
zone.Deployables ! Zone.Deployable.Dismiss(obj)
|
zone.Deployables ! Zone.Deployable.Dismiss(obj)
|
||||||
zone.LocalEvents ! LocalServiceMessage(
|
zone.LocalEvents ! MessageEnvelope(
|
||||||
zone.id,
|
zone.id,
|
||||||
LocalAction.EliminateDeployable(obj, obj.GUID, obj.Position, deletionType)
|
LocalAction.EliminateDeployable(obj, obj.GUID, obj.Position, deletionType)
|
||||||
)
|
)
|
||||||
|
|
@ -283,12 +283,12 @@ object DeployableBehavior {
|
||||||
if (originalFaction != toFaction) {
|
if (originalFaction != toFaction) {
|
||||||
obj.Faction = toFaction
|
obj.Faction = toFaction
|
||||||
//visual tells in regards to ownership by faction
|
//visual tells in regards to ownership by faction
|
||||||
zone.AvatarEvents ! AvatarServiceMessage(
|
zone.AvatarEvents ! MessageEnvelope(
|
||||||
zone.id,
|
zone.id,
|
||||||
SetEmpire(dGuid, toFaction)
|
SetEmpire(dGuid, toFaction)
|
||||||
)
|
)
|
||||||
//remove knowledge by the previous owner's faction
|
//remove knowledge by the previous owner's faction
|
||||||
localEvents ! LocalServiceMessage(
|
localEvents ! MessageEnvelope(
|
||||||
originalFaction.toString,
|
originalFaction.toString,
|
||||||
LocalAction.DeployableMapIcon(DeploymentAction.Dismiss, info)
|
LocalAction.DeployableMapIcon(DeploymentAction.Dismiss, info)
|
||||||
)
|
)
|
||||||
|
|
@ -296,10 +296,10 @@ object DeployableBehavior {
|
||||||
zone.AllPlayers.filter(p => obj.OriginalOwnerName.contains(p.Name))
|
zone.AllPlayers.filter(p => obj.OriginalOwnerName.contains(p.Name))
|
||||||
.foreach { originalOwner =>
|
.foreach { originalOwner =>
|
||||||
originalOwner.avatar.deployables.Remove(obj)
|
originalOwner.avatar.deployables.Remove(obj)
|
||||||
originalOwner.Zone.LocalEvents ! LocalServiceMessage(originalOwner.Name, LocalAction.DeployableUIFor(obj.Definition.Item))
|
originalOwner.Zone.LocalEvents ! MessageEnvelope(originalOwner.Name, LocalAction.DeployableUIFor(obj.Definition.Item))
|
||||||
}
|
}
|
||||||
//display to the given faction
|
//display to the given faction
|
||||||
localEvents ! LocalServiceMessage(
|
localEvents ! MessageEnvelope(
|
||||||
toFaction.toString,
|
toFaction.toString,
|
||||||
LocalAction.DeployableMapIcon(DeploymentAction.Build, info)
|
LocalAction.DeployableMapIcon(DeploymentAction.Build, info)
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -9,8 +9,9 @@ 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.envelope.MessageEnvelope
|
||||||
import net.psforever.services.base.message.SendResponse
|
import net.psforever.services.base.message.SendResponse
|
||||||
import net.psforever.services.local.{LocalAction, LocalServiceMessage}
|
import net.psforever.services.local.LocalAction
|
||||||
import net.psforever.types.PlanetSideGUID
|
import net.psforever.types.PlanetSideGUID
|
||||||
|
|
||||||
trait TelepadLike {
|
trait TelepadLike {
|
||||||
|
|
@ -114,7 +115,7 @@ object TelepadLike {
|
||||||
normally dispatched while the Router is transitioned into its Deploying state
|
normally dispatched while the Router is transitioned into its Deploying state
|
||||||
it is safe, however, to perform these actions at any time during and after the Deploying state
|
it is safe, however, to perform these actions at any time during and after the Deploying state
|
||||||
*/
|
*/
|
||||||
events ! LocalServiceMessage(
|
events ! MessageEnvelope(
|
||||||
zoneId,
|
zoneId,
|
||||||
SendResponse(
|
SendResponse(
|
||||||
ObjectCreateMessage(
|
ObjectCreateMessage(
|
||||||
|
|
@ -125,7 +126,7 @@ object TelepadLike {
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
events ! LocalServiceMessage(zoneId, SendResponse(Seq(
|
events ! MessageEnvelope(zoneId, SendResponse(Seq(
|
||||||
GenericObjectActionMessage(utilityGUID, 27),
|
GenericObjectActionMessage(utilityGUID, 27),
|
||||||
GenericObjectActionMessage(utilityGUID, 30)
|
GenericObjectActionMessage(utilityGUID, 30)
|
||||||
)))
|
)))
|
||||||
|
|
@ -135,7 +136,7 @@ object TelepadLike {
|
||||||
def LinkTelepad(zone: Zone, telepadGUID: PlanetSideGUID): Unit = {
|
def LinkTelepad(zone: Zone, telepadGUID: PlanetSideGUID): Unit = {
|
||||||
val events = zone.LocalEvents
|
val events = zone.LocalEvents
|
||||||
val zoneId = zone.id
|
val zoneId = zone.id
|
||||||
events ! LocalServiceMessage(zoneId, SendResponse(Seq(
|
events ! MessageEnvelope(zoneId, SendResponse(Seq(
|
||||||
GenericObjectActionMessage(telepadGUID, 27),
|
GenericObjectActionMessage(telepadGUID, 27),
|
||||||
GenericObjectActionMessage(telepadGUID, 28)
|
GenericObjectActionMessage(telepadGUID, 28)
|
||||||
)))
|
)))
|
||||||
|
|
@ -168,7 +169,7 @@ class TelepadControl(obj: InternalTelepad) extends akka.actor.Actor {
|
||||||
oldTpad.Actor ! TelepadLike.SeverLink(obj)
|
oldTpad.Actor ! TelepadLike.SeverLink(obj)
|
||||||
}
|
}
|
||||||
obj.Telepad = None
|
obj.Telepad = None
|
||||||
zone.LocalEvents ! LocalServiceMessage(zone.id, SendResponse(ObjectDeleteMessage(obj.GUID, 0)))
|
zone.LocalEvents ! MessageEnvelope(zone.id, SendResponse(ObjectDeleteMessage(obj.GUID, 0)))
|
||||||
|
|
||||||
case TelepadLike.RequestLink(tpad: TelepadDeployable) =>
|
case TelepadLike.RequestLink(tpad: TelepadDeployable) =>
|
||||||
val zone = obj.Zone
|
val zone = obj.Zone
|
||||||
|
|
@ -189,7 +190,7 @@ class TelepadControl(obj: InternalTelepad) extends akka.actor.Actor {
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
val channel = obj.Owner.asInstanceOf[Vehicle].OwnerName.getOrElse("")
|
val channel = obj.Owner.asInstanceOf[Vehicle].OwnerName.getOrElse("")
|
||||||
zone.LocalEvents ! LocalServiceMessage(channel, LocalAction.RouterTelepadMessage("@Teleport_NotDeployed"))
|
zone.LocalEvents ! MessageEnvelope(channel, LocalAction.RouterTelepadMessage("@Teleport_NotDeployed"))
|
||||||
tpad.Actor ! TelepadLike.SeverLink(obj)
|
tpad.Actor ! TelepadLike.SeverLink(obj)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -197,7 +198,7 @@ class TelepadControl(obj: InternalTelepad) extends akka.actor.Actor {
|
||||||
if (obj.Telepad.contains(tpad.GUID)) {
|
if (obj.Telepad.contains(tpad.GUID)) {
|
||||||
obj.Telepad = None
|
obj.Telepad = None
|
||||||
val zone = obj.Zone
|
val zone = obj.Zone
|
||||||
zone.LocalEvents ! LocalServiceMessage(zone.id, SendResponse(ObjectDeleteMessage(obj.GUID, 0)))
|
zone.LocalEvents ! MessageEnvelope(zone.id, SendResponse(ObjectDeleteMessage(obj.GUID, 0)))
|
||||||
}
|
}
|
||||||
|
|
||||||
case _ => ()
|
case _ => ()
|
||||||
|
|
|
||||||
|
|
@ -10,8 +10,8 @@ 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.envelope.MessageEnvelope
|
||||||
import net.psforever.services.base.message.{PlanetsideAttribute, SendResponse}
|
import net.psforever.services.base.message.{PlanetsideAttribute, SendResponse}
|
||||||
import net.psforever.services.vehicle.VehicleServiceMessage
|
|
||||||
import net.psforever.types.PlanetSideGUID
|
import net.psforever.types.PlanetSideGUID
|
||||||
|
|
||||||
import scala.collection.mutable
|
import scala.collection.mutable
|
||||||
|
|
@ -78,7 +78,7 @@ object ArmorSiphonBehavior {
|
||||||
if(before < after) {
|
if(before < after) {
|
||||||
obj.LogActivity(RepairFromArmorSiphon(asr.siphon.Definition, VehicleSource(obj), before - after))
|
obj.LogActivity(RepairFromArmorSiphon(asr.siphon.Definition, VehicleSource(obj), before - after))
|
||||||
val zone = obj.Zone
|
val zone = obj.Zone
|
||||||
zone.VehicleEvents ! VehicleServiceMessage(
|
zone.VehicleEvents ! MessageEnvelope(
|
||||||
zone.id,
|
zone.id,
|
||||||
PlanetsideAttribute(obj.GUID, 0, after)
|
PlanetsideAttribute(obj.GUID, 0, after)
|
||||||
)
|
)
|
||||||
|
|
@ -97,7 +97,7 @@ object ArmorSiphonBehavior {
|
||||||
val siphon = siphonSlot.Equipment.get.asInstanceOf[Tool]
|
val siphon = siphonSlot.Equipment.get.asInstanceOf[Tool]
|
||||||
val zone = obj.Zone
|
val zone = obj.Zone
|
||||||
//update current charge level
|
//update current charge level
|
||||||
zone.VehicleEvents ! VehicleServiceMessage(
|
zone.VehicleEvents ! MessageEnvelope(
|
||||||
obj.Actor.toString,
|
obj.Actor.toString,
|
||||||
SendResponse(QuantityUpdateMessage(siphon.AmmoSlot.Box.GUID, siphon.Magazine))
|
SendResponse(QuantityUpdateMessage(siphon.AmmoSlot.Box.GUID, siphon.Magazine))
|
||||||
)
|
)
|
||||||
|
|
@ -119,7 +119,7 @@ object ArmorSiphonBehavior {
|
||||||
val before = siphon.Magazine
|
val before = siphon.Magazine
|
||||||
val after = siphon.Magazine = before + 1
|
val after = siphon.Magazine = before + 1
|
||||||
if (after > before) {
|
if (after > before) {
|
||||||
zone.VehicleEvents ! VehicleServiceMessage(
|
zone.VehicleEvents ! MessageEnvelope(
|
||||||
obj.Actor.toString,
|
obj.Actor.toString,
|
||||||
SendResponse(QuantityUpdateMessage(siphon.AmmoSlot.Box.GUID, after))
|
SendResponse(QuantityUpdateMessage(siphon.AmmoSlot.Box.GUID, after))
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -8,9 +8,9 @@ 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.envelope.MessageEnvelope
|
||||||
import net.psforever.services.base.message.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 scala.collection.mutable
|
import scala.collection.mutable
|
||||||
import scala.concurrent.duration._
|
import scala.concurrent.duration._
|
||||||
|
|
@ -234,7 +234,6 @@ trait JammableBehavior {
|
||||||
* @see `Service`
|
* @see `Service`
|
||||||
* @see `VehicleAction`
|
* @see `VehicleAction`
|
||||||
* @see `VehicleService`
|
* @see `VehicleService`
|
||||||
* @see `VehicleServiceMessage`
|
|
||||||
* @see `Zone.VehicleEvents`
|
* @see `Zone.VehicleEvents`
|
||||||
*/
|
*/
|
||||||
trait JammableMountedWeapons extends JammableBehavior {
|
trait JammableMountedWeapons extends JammableBehavior {
|
||||||
|
|
@ -243,7 +242,7 @@ trait JammableMountedWeapons extends JammableBehavior {
|
||||||
override def StartJammeredSound(target: Any, dur: Int): Unit = {
|
override def StartJammeredSound(target: Any, dur: Int): Unit = {
|
||||||
target match {
|
target match {
|
||||||
case obj: PlanetSideServerObject with MountedWeapons with JammableUnit if !jammedSound =>
|
case obj: PlanetSideServerObject with MountedWeapons with JammableUnit if !jammedSound =>
|
||||||
obj.Zone.VehicleEvents ! VehicleServiceMessage(
|
obj.Zone.VehicleEvents ! MessageEnvelope(
|
||||||
obj.Zone.id,
|
obj.Zone.id,
|
||||||
PlanetsideAttribute(obj.GUID, 27, 1)
|
PlanetsideAttribute(obj.GUID, 27, 1)
|
||||||
)
|
)
|
||||||
|
|
@ -264,7 +263,7 @@ trait JammableMountedWeapons extends JammableBehavior {
|
||||||
override def CancelJammeredSound(target: Any): Unit = {
|
override def CancelJammeredSound(target: Any): Unit = {
|
||||||
target match {
|
target match {
|
||||||
case obj: PlanetSideServerObject if jammedSound =>
|
case obj: PlanetSideServerObject if jammedSound =>
|
||||||
obj.Zone.VehicleEvents ! VehicleServiceMessage(
|
obj.Zone.VehicleEvents ! MessageEnvelope(
|
||||||
obj.Zone.id,
|
obj.Zone.id,
|
||||||
PlanetsideAttribute(obj.GUID, 27, 0)
|
PlanetsideAttribute(obj.GUID, 27, 0)
|
||||||
)
|
)
|
||||||
|
|
@ -308,7 +307,7 @@ object JammableMountedWeapons {
|
||||||
|
|
||||||
def JammedWeaponStatus(zone: Zone, target: Equipment with JammableUnit, statusCode: Int): Unit = {
|
def JammedWeaponStatus(zone: Zone, target: Equipment with JammableUnit, statusCode: Int): Unit = {
|
||||||
target.Jammed = statusCode == 1
|
target.Jammed = statusCode == 1
|
||||||
zone.VehicleEvents ! VehicleServiceMessage(
|
zone.VehicleEvents ! MessageEnvelope(
|
||||||
zone.id,
|
zone.id,
|
||||||
PlanetsideAttribute(target.GUID, 27, statusCode)
|
PlanetsideAttribute(target.GUID, 27, statusCode)
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@ import net.psforever.objects.equipment.Equipment
|
||||||
import net.psforever.objects.serverobject.containable.{Containable, ContainableBehavior}
|
import net.psforever.objects.serverobject.containable.{Containable, ContainableBehavior}
|
||||||
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.base.envelope.MessageEnvelope
|
||||||
import net.psforever.services.base.message.{ObjectDelete, SendResponse}
|
import net.psforever.services.base.message.{ObjectDelete, SendResponse}
|
||||||
import net.psforever.types.{PlanetSideEmpire, Vector3}
|
import net.psforever.types.{PlanetSideEmpire, Vector3}
|
||||||
|
|
||||||
|
|
@ -34,7 +34,7 @@ class LockerContainerControl(locker: LockerContainer, toChannel: String)
|
||||||
val obj = ContainerObject
|
val obj = ContainerObject
|
||||||
obj.Find(item) match {
|
obj.Find(item) match {
|
||||||
case Some(slot) =>
|
case Some(slot) =>
|
||||||
obj.Zone.AvatarEvents ! AvatarServiceMessage(
|
obj.Zone.AvatarEvents ! MessageEnvelope(
|
||||||
toChannel,
|
toChannel,
|
||||||
SendResponse(ObjectAttachMessage(obj.GUID, item.GUID, slot))
|
SendResponse(ObjectAttachMessage(obj.GUID, item.GUID, slot))
|
||||||
)
|
)
|
||||||
|
|
@ -46,14 +46,14 @@ class LockerContainerControl(locker: LockerContainer, toChannel: String)
|
||||||
|
|
||||||
def RemoveItemFromSlotCallback(item: Equipment, slot: Int): Unit = {
|
def RemoveItemFromSlotCallback(item: Equipment, slot: Int): Unit = {
|
||||||
val zone = locker.Zone
|
val zone = locker.Zone
|
||||||
zone.AvatarEvents ! AvatarServiceMessage(toChannel, ObjectDelete(item.GUID))
|
zone.AvatarEvents ! MessageEnvelope(toChannel, ObjectDelete(item.GUID))
|
||||||
}
|
}
|
||||||
|
|
||||||
def PutItemInSlotCallback(item: Equipment, slot: Int): Unit = {
|
def PutItemInSlotCallback(item: Equipment, slot: Int): Unit = {
|
||||||
val zone = locker.Zone
|
val zone = locker.Zone
|
||||||
val definition = item.Definition
|
val definition = item.Definition
|
||||||
item.Faction = PlanetSideEmpire.NEUTRAL
|
item.Faction = PlanetSideEmpire.NEUTRAL
|
||||||
zone.AvatarEvents ! AvatarServiceMessage(
|
zone.AvatarEvents ! MessageEnvelope(
|
||||||
toChannel,
|
toChannel,
|
||||||
SendResponse(
|
SendResponse(
|
||||||
ObjectCreateDetailedMessage(
|
ObjectCreateDetailedMessage(
|
||||||
|
|
@ -68,7 +68,7 @@ class LockerContainerControl(locker: LockerContainer, toChannel: String)
|
||||||
|
|
||||||
def SwapItemCallback(item: Equipment, fromSlot: Int): Unit = {
|
def SwapItemCallback(item: Equipment, fromSlot: Int): Unit = {
|
||||||
val zone = locker.Zone
|
val zone = locker.Zone
|
||||||
zone.AvatarEvents ! AvatarServiceMessage(
|
zone.AvatarEvents ! MessageEnvelope(
|
||||||
toChannel,
|
toChannel,
|
||||||
SendResponse(ObjectDetachMessage(locker.GUID, item.GUID, Vector3.Zero, 0f))
|
SendResponse(ObjectDetachMessage(locker.GUID, item.GUID, Vector3.Zero, 0f))
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -3,8 +3,9 @@ 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.packet.game.PlanetsideAttributeMessage
|
||||||
import net.psforever.services.base.message.PlanetsideAttribute
|
import net.psforever.services.base.envelope.MessageEnvelope
|
||||||
|
import net.psforever.services.base.message.SendResponse
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The "control" `Actor` mixin for damage-handling code
|
* The "control" `Actor` mixin for damage-handling code
|
||||||
|
|
@ -27,7 +28,6 @@ object DamageableAmenity {
|
||||||
* The common manifestation is a sparking entity that will no longer report being accessible.
|
* The common manifestation is a sparking entity that will no longer report being accessible.
|
||||||
* These `PlanetSideAttributeMessage` attributes are the same as reported during zone load client configuration.
|
* These `PlanetSideAttributeMessage` attributes are the same as reported during zone load client configuration.
|
||||||
* @see `PlanetsideAttribute`
|
* @see `PlanetsideAttribute`
|
||||||
* @see `AvatarServiceMessage`
|
|
||||||
* @see `Zone.AvatarEvents`
|
* @see `Zone.AvatarEvents`
|
||||||
* @param target the entity being destroyed
|
* @param target the entity being destroyed
|
||||||
* @param cause historical information about the damage
|
* @param cause historical information about the damage
|
||||||
|
|
@ -37,7 +37,9 @@ object DamageableAmenity {
|
||||||
val zoneId = zone.id
|
val zoneId = zone.id
|
||||||
val events = zone.AvatarEvents
|
val events = zone.AvatarEvents
|
||||||
val targetGUID = target.GUID
|
val targetGUID = target.GUID
|
||||||
events ! AvatarServiceMessage(zoneId, PlanetsideAttribute(targetGUID, 50, 1))
|
events ! MessageEnvelope(
|
||||||
events ! AvatarServiceMessage(zoneId, PlanetsideAttribute(targetGUID, 51, 1))
|
zoneId,
|
||||||
|
SendResponse(List(PlanetsideAttributeMessage(targetGUID, 50, 1), PlanetsideAttributeMessage(targetGUID, 51, 1)))
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,8 @@ import net.psforever.objects.vital.resolution.ResolutionCalculations
|
||||||
import net.psforever.objects.zones.Zone
|
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
|
||||||
|
import net.psforever.services.base.envelope.MessageEnvelope
|
||||||
import net.psforever.services.base.message.PlanetsideAttribute
|
import net.psforever.services.base.message.PlanetsideAttribute
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -143,7 +144,6 @@ object DamageableEntity {
|
||||||
* - provide a feedback message regarding the damage.
|
* - provide a feedback message regarding the damage.
|
||||||
* @see `PlanetsideAttribute`
|
* @see `PlanetsideAttribute`
|
||||||
* @see `SendResponse`
|
* @see `SendResponse`
|
||||||
* @see `AvatarServiceMessage`
|
|
||||||
* @see `DamageFeedbackMessage`
|
* @see `DamageFeedbackMessage`
|
||||||
* @see `JammableUnit.Jammered`
|
* @see `JammableUnit.Jammered`
|
||||||
* @see `Service.defaultPlayerGUID`
|
* @see `Service.defaultPlayerGUID`
|
||||||
|
|
@ -166,7 +166,7 @@ object DamageableEntity {
|
||||||
def DamageToHealth(target: Damageable.Target, cause: DamageResult, amount: Int): Boolean = {
|
def DamageToHealth(target: Damageable.Target, cause: DamageResult, amount: Int): Boolean = {
|
||||||
if (amount > 0 && !target.Destroyed) {
|
if (amount > 0 && !target.Destroyed) {
|
||||||
val zone = target.Zone
|
val zone = target.Zone
|
||||||
zone.AvatarEvents ! AvatarServiceMessage(
|
zone.AvatarEvents ! MessageEnvelope(
|
||||||
zone.id,
|
zone.id,
|
||||||
PlanetsideAttribute(target.GUID, 0, target.Health)
|
PlanetsideAttribute(target.GUID, 0, target.Health)
|
||||||
)
|
)
|
||||||
|
|
@ -182,8 +182,7 @@ object DamageableEntity {
|
||||||
* - reports its adjusted its health; and,
|
* - reports its adjusted its health; and,
|
||||||
* - report about its destruction.
|
* - report about its destruction.
|
||||||
* @see `AvatarAction.Destroy`
|
* @see `AvatarAction.Destroy`
|
||||||
* @see `AvatarAction.PlanetsideAttribute`
|
* @see `PlanetsideAttribute`
|
||||||
* @see `AvatarServiceMessage`
|
|
||||||
* @see `DamageFeedbackMessage`
|
* @see `DamageFeedbackMessage`
|
||||||
* @see `JammableUnit.ClearJammeredSound`
|
* @see `JammableUnit.ClearJammeredSound`
|
||||||
* @see `JammableUnit.ClearJammeredStatus`
|
* @see `JammableUnit.ClearJammeredStatus`
|
||||||
|
|
@ -200,10 +199,10 @@ object DamageableEntity {
|
||||||
val zoneId = zone.id
|
val zoneId = zone.id
|
||||||
val tguid = target.GUID
|
val tguid = target.GUID
|
||||||
val attribution = attributionTo(cause, target.Zone)
|
val attribution = attributionTo(cause, target.Zone)
|
||||||
zone.AvatarEvents ! AvatarServiceMessage(zoneId, PlanetsideAttribute(tguid, 0, target.Health))
|
zone.AvatarEvents ! MessageEnvelope(zoneId, PlanetsideAttribute(tguid, 0, target.Health))
|
||||||
if (target.isInstanceOf[SpawnTube]) {}//do nothing to prevent issue #1057
|
if (target.isInstanceOf[SpawnTube]) {}//do nothing to prevent issue #1057
|
||||||
else {
|
else {
|
||||||
zone.AvatarEvents ! AvatarServiceMessage(
|
zone.AvatarEvents ! MessageEnvelope(
|
||||||
zoneId,
|
zoneId,
|
||||||
AvatarAction.Destroy(tguid, attribution, Service.defaultPlayerGUID, target.Position)
|
AvatarAction.Destroy(tguid, attribution, Service.defaultPlayerGUID, target.Position)
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,8 @@ import net.psforever.objects.sourcing.{PlayerSource, SourceEntry}
|
||||||
import net.psforever.objects.vital.interaction.{DamageInteraction, DamageResult}
|
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
|
||||||
|
import net.psforever.services.base.envelope.MessageEnvelope
|
||||||
import net.psforever.services.base.message.{HintsAtAttacker, SendResponse}
|
import net.psforever.services.base.message.{HintsAtAttacker, SendResponse}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -20,7 +21,6 @@ object DamageableMountable {
|
||||||
*
|
*
|
||||||
* @see `HitHint`
|
* @see `HitHint`
|
||||||
* @see `SendResponse`
|
* @see `SendResponse`
|
||||||
* @see `AvatarServiceMessage`
|
|
||||||
* @see `DamageWithPositionMessage`
|
* @see `DamageWithPositionMessage`
|
||||||
* @see `Mountable.Seats`
|
* @see `Mountable.Seats`
|
||||||
* @see `Service.defaultPlayerGUID`
|
* @see `Service.defaultPlayerGUID`
|
||||||
|
|
@ -62,7 +62,7 @@ object DamageableMountable {
|
||||||
List.empty
|
List.empty
|
||||||
}).foreach {
|
}).foreach {
|
||||||
case (channel, filter, msg) =>
|
case (channel, filter, msg) =>
|
||||||
events ! AvatarServiceMessage(channel, filter, msg)
|
events ! MessageEnvelope(channel, filter, msg)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -79,7 +79,7 @@ object DamageableMountable {
|
||||||
val targets = target.Seats.values.flatMap(_.occupant).filter(_.isAlive)
|
val targets = target.Seats.values.flatMap(_.occupant).filter(_.isAlive)
|
||||||
targets.foreach { player =>
|
targets.foreach { player =>
|
||||||
//make llu visible to others in zone if passenger is carrying one
|
//make llu visible to others in zone if passenger is carrying one
|
||||||
player.Zone.AvatarEvents ! AvatarServiceMessage(player.Name, AvatarAction.DropSpecialItem())
|
player.Zone.AvatarEvents ! MessageEnvelope(player.Name, AvatarAction.DropSpecialItem())
|
||||||
//player.LogActivity(cause)
|
//player.LogActivity(cause)
|
||||||
player.Actor ! Player.Die(
|
player.Actor ! Player.Die(
|
||||||
DamageInteraction(interaction.resolution, SourceEntry(player), interaction.cause, interaction.hitPos)
|
DamageInteraction(interaction.resolution, SourceEntry(player), interaction.cause, interaction.hitPos)
|
||||||
|
|
|
||||||
|
|
@ -13,8 +13,8 @@ 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.envelope.MessageEnvelope
|
||||||
import net.psforever.services.base.message.{PlanetsideAttribute, SendResponse}
|
import net.psforever.services.base.message.{PlanetsideAttribute, SendResponse}
|
||||||
import net.psforever.services.vehicle.VehicleServiceMessage
|
|
||||||
import net.psforever.types.Vector3
|
import net.psforever.types.Vector3
|
||||||
|
|
||||||
import scala.concurrent.duration._
|
import scala.concurrent.duration._
|
||||||
|
|
@ -105,8 +105,7 @@ trait DamageableVehicle
|
||||||
* If this vehicle has shields that were affected by previous damage, that is also reported to the clients.
|
* If this vehicle has shields that were affected by previous damage, that is also reported to the clients.
|
||||||
* @see `Service.defaultPlayerGUID`
|
* @see `Service.defaultPlayerGUID`
|
||||||
* @see `Vehicle.CargoHolds`
|
* @see `Vehicle.CargoHolds`
|
||||||
* @see `VehicleAction.PlanetsideAttribute`
|
* @see `PlanetsideAttribute`
|
||||||
* @see `VehicleServiceMessage`
|
|
||||||
* @param target the entity being destroyed
|
* @param target the entity being destroyed
|
||||||
* @param cause historical information about the damage
|
* @param cause historical information about the damage
|
||||||
* @param amount how much damage was performed
|
* @param amount how much damage was performed
|
||||||
|
|
@ -143,14 +142,14 @@ trait DamageableVehicle
|
||||||
}
|
}
|
||||||
//stat changes
|
//stat changes
|
||||||
if (damageToShields > 0) {
|
if (damageToShields > 0) {
|
||||||
events ! VehicleServiceMessage(
|
events ! MessageEnvelope(
|
||||||
shieldChannel,
|
shieldChannel,
|
||||||
PlanetsideAttribute(targetGUID, obj.Definition.shieldUiAttribute, obj.Shields)
|
PlanetsideAttribute(targetGUID, obj.Definition.shieldUiAttribute, obj.Shields)
|
||||||
)
|
)
|
||||||
announceConfrontation = true
|
announceConfrontation = true
|
||||||
}
|
}
|
||||||
if (damageToHealth > 0) {
|
if (damageToHealth > 0) {
|
||||||
events ! VehicleServiceMessage(
|
events ! MessageEnvelope(
|
||||||
healthChannel,
|
healthChannel,
|
||||||
PlanetsideAttribute(targetGUID, 0, obj.Health)
|
PlanetsideAttribute(targetGUID, 0, obj.Health)
|
||||||
)
|
)
|
||||||
|
|
@ -163,7 +162,7 @@ trait DamageableVehicle
|
||||||
obj.Seats.values
|
obj.Seats.values
|
||||||
.collect { case seat if seat.occupant.nonEmpty => seat.occupant.get.Name }
|
.collect { case seat if seat.occupant.nonEmpty => seat.occupant.get.Name }
|
||||||
.foreach { channel =>
|
.foreach { channel =>
|
||||||
events ! VehicleServiceMessage(channel, msg)
|
events ! MessageEnvelope(channel, msg)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
@ -183,11 +182,9 @@ trait DamageableVehicle
|
||||||
* @see `DriveState.Undeploying`
|
* @see `DriveState.Undeploying`
|
||||||
* @see `Service.defaultPlayerGUID`
|
* @see `Service.defaultPlayerGUID`
|
||||||
* @see `Vehicle.CargoHolds`
|
* @see `Vehicle.CargoHolds`
|
||||||
* @see `VehicleAction.PlanetsideAttribute`
|
* @see `PlanetsideAttribute`
|
||||||
* @see `RemoverActor.AddTask`
|
* @see `RemoverActor.AddTask`
|
||||||
* @see `RemoverActor.ClearSpecific`
|
* @see `RemoverActor.ClearSpecific`
|
||||||
* @see `VehicleServiceMessage`
|
|
||||||
* @see `VehicleServiceMessage.Decon`
|
|
||||||
* @see `Zone.VehicleEvents`
|
* @see `Zone.VehicleEvents`
|
||||||
* @param target the entity being destroyed
|
* @param target the entity being destroyed
|
||||||
* @param cause historical information about the damage
|
* @param cause historical information about the damage
|
||||||
|
|
@ -218,7 +215,7 @@ trait DamageableVehicle
|
||||||
//shields
|
//shields
|
||||||
if (obj.Shields > 0) {
|
if (obj.Shields > 0) {
|
||||||
obj.Shields = 0
|
obj.Shields = 0
|
||||||
zone.VehicleEvents ! VehicleServiceMessage(
|
zone.VehicleEvents ! MessageEnvelope(
|
||||||
zone.id,
|
zone.id,
|
||||||
PlanetsideAttribute(target.GUID, obj.Definition.shieldUiAttribute, 0)
|
PlanetsideAttribute(target.GUID, obj.Definition.shieldUiAttribute, 0)
|
||||||
)
|
)
|
||||||
|
|
@ -251,13 +248,13 @@ trait DamageableVehicle
|
||||||
//health to 1, shields to 0
|
//health to 1, shields to 0
|
||||||
obj.Health = 1
|
obj.Health = 1
|
||||||
val guid = obj.GUID
|
val guid = obj.GUID
|
||||||
events ! VehicleServiceMessage(
|
events ! MessageEnvelope(
|
||||||
zoneid,
|
zoneid,
|
||||||
PlanetsideAttribute(guid, 0, 1)
|
PlanetsideAttribute(guid, 0, 1)
|
||||||
)
|
)
|
||||||
if (obj.Shields > 0) {
|
if (obj.Shields > 0) {
|
||||||
obj.Shields = 0
|
obj.Shields = 0
|
||||||
zone.VehicleEvents ! VehicleServiceMessage(
|
zone.VehicleEvents ! MessageEnvelope(
|
||||||
zone.id,
|
zone.id,
|
||||||
PlanetsideAttribute(obj.GUID, obj.Definition.shieldUiAttribute, 0)
|
PlanetsideAttribute(obj.GUID, obj.Definition.shieldUiAttribute, 0)
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -9,11 +9,10 @@ import net.psforever.objects.vital.interaction.DamageResult
|
||||||
import net.psforever.objects.zones.Zone
|
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.base.envelope.MessageEnvelope
|
||||||
import net.psforever.services.base.message.{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.{TurretEnvelope, TurretUpgrader}
|
import net.psforever.services.vehicle.support.{TurretEnvelope, TurretUpgrader}
|
||||||
import net.psforever.services.vehicle.VehicleServiceMessage
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The "control" `Actor` mixin for damage-handling code for `WeaponTurret` objects.
|
* The "control" `Actor` mixin for damage-handling code for `WeaponTurret` objects.
|
||||||
|
|
@ -63,7 +62,7 @@ trait DamageableWeaponTurret
|
||||||
//TODO some turrets have shields
|
//TODO some turrets have shields
|
||||||
if (damageToHealth > 0) {
|
if (damageToHealth > 0) {
|
||||||
DamageableMountable.DamageAwareness(DamageableObject, cause, damageToHealth)
|
DamageableMountable.DamageAwareness(DamageableObject, cause, damageToHealth)
|
||||||
events ! VehicleServiceMessage(
|
events ! MessageEnvelope(
|
||||||
zoneId,
|
zoneId,
|
||||||
PlanetsideAttribute(targetGUID, 0, obj.Health)
|
PlanetsideAttribute(targetGUID, 0, obj.Health)
|
||||||
)
|
)
|
||||||
|
|
@ -76,7 +75,7 @@ trait DamageableWeaponTurret
|
||||||
obj.Seats.values
|
obj.Seats.values
|
||||||
.collect { case seat if seat.occupant.nonEmpty => seat.occupant.get.Name }
|
.collect { case seat if seat.occupant.nonEmpty => seat.occupant.get.Name }
|
||||||
.foreach { channel =>
|
.foreach { channel =>
|
||||||
events ! VehicleServiceMessage(channel, msg)
|
events ! MessageEnvelope(channel, msg)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
@ -104,8 +103,7 @@ object DamageableWeaponTurret {
|
||||||
* A destroyed target dispatches a message to conceal (delete) its weapons from users.
|
* A destroyed target dispatches a message to conceal (delete) its weapons from users.
|
||||||
* If affected by a jammer property, the jammer propoerty will be removed.
|
* If affected by a jammer property, the jammer propoerty will be removed.
|
||||||
* If the type of entity is a `WeaponTurret`, the weapons are converted to their "normal" upgrade state.
|
* If the type of entity is a `WeaponTurret`, the weapons are converted to their "normal" upgrade state.
|
||||||
* @see `AvatarAction.DeleteObject`
|
* @see `DeleteObject`
|
||||||
* @see `AvatarServiceMessage`
|
|
||||||
* @see `MountedWeapons`
|
* @see `MountedWeapons`
|
||||||
* @see `MountedWeapons.Weapons`
|
* @see `MountedWeapons.Weapons`
|
||||||
* @see `Service.defaultPlayerGUID`
|
* @see `Service.defaultPlayerGUID`
|
||||||
|
|
@ -132,7 +130,7 @@ object DamageableWeaponTurret {
|
||||||
}
|
}
|
||||||
.foreach(slot => {
|
.foreach(slot => {
|
||||||
val wep = slot.Equipment.get
|
val wep = slot.Equipment.get
|
||||||
avatarEvents ! AvatarServiceMessage(zoneId, ObjectDelete(wep.GUID))
|
avatarEvents ! MessageEnvelope(zoneId, ObjectDelete(wep.GUID))
|
||||||
})
|
})
|
||||||
target match {
|
target match {
|
||||||
case turret: WeaponTurret =>
|
case turret: WeaponTurret =>
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,8 @@ import akka.actor.{Actor, ActorRef, Cancellable}
|
||||||
import net.psforever.objects.Default
|
import net.psforever.objects.Default
|
||||||
import net.psforever.types.{DriveState, Vector3}
|
import net.psforever.types.{DriveState, Vector3}
|
||||||
import net.psforever.services.Service
|
import net.psforever.services.Service
|
||||||
import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage}
|
import net.psforever.services.base.envelope.MessageEnvelope
|
||||||
|
import net.psforever.services.vehicle.VehicleAction
|
||||||
|
|
||||||
import scala.concurrent.ExecutionContext.Implicits.global
|
import scala.concurrent.ExecutionContext.Implicits.global
|
||||||
import scala.concurrent.duration._
|
import scala.concurrent.duration._
|
||||||
|
|
@ -104,7 +105,7 @@ trait DeploymentBehavior {
|
||||||
prevState
|
prevState
|
||||||
} else if (state == DriveState.Deploying) {
|
} else if (state == DriveState.Deploying) {
|
||||||
obj.Velocity = Some(Vector3.Zero) //no velocity
|
obj.Velocity = Some(Vector3.Zero) //no velocity
|
||||||
zone.VehicleEvents ! VehicleServiceMessage(
|
zone.VehicleEvents ! MessageEnvelope(
|
||||||
zoneChannel,
|
zoneChannel,
|
||||||
VehicleAction.DeployRequest(guid, state, 0, unk2=false, Vector3.Zero)
|
VehicleAction.DeployRequest(guid, state, 0, unk2=false, Vector3.Zero)
|
||||||
)
|
)
|
||||||
|
|
@ -115,7 +116,7 @@ trait DeploymentBehavior {
|
||||||
state
|
state
|
||||||
} else if (state == DriveState.Deployed) {
|
} else if (state == DriveState.Deployed) {
|
||||||
obj.Velocity = Some(Vector3.Zero) //no velocity
|
obj.Velocity = Some(Vector3.Zero) //no velocity
|
||||||
zone.VehicleEvents ! VehicleServiceMessage(
|
zone.VehicleEvents ! MessageEnvelope(
|
||||||
zoneChannel,
|
zoneChannel,
|
||||||
VehicleAction.DeployRequest(guid, state, 0, unk2=false, Vector3.Zero)
|
VehicleAction.DeployRequest(guid, state, 0, unk2=false, Vector3.Zero)
|
||||||
)
|
)
|
||||||
|
|
@ -136,7 +137,7 @@ trait DeploymentBehavior {
|
||||||
val zoneChannel = zone.id
|
val zoneChannel = zone.id
|
||||||
val GUID0 = Service.defaultPlayerGUID
|
val GUID0 = Service.defaultPlayerGUID
|
||||||
if (state == DriveState.Undeploying) {
|
if (state == DriveState.Undeploying) {
|
||||||
zone.VehicleEvents ! VehicleServiceMessage(
|
zone.VehicleEvents ! MessageEnvelope(
|
||||||
zoneChannel,
|
zoneChannel,
|
||||||
VehicleAction.DeployRequest(guid, state, 0, unk2=false, Vector3.Zero)
|
VehicleAction.DeployRequest(guid, state, 0, unk2=false, Vector3.Zero)
|
||||||
)
|
)
|
||||||
|
|
@ -147,7 +148,7 @@ trait DeploymentBehavior {
|
||||||
})
|
})
|
||||||
state
|
state
|
||||||
} else if (state == DriveState.Mobile) {
|
} else if (state == DriveState.Mobile) {
|
||||||
zone.VehicleEvents ! VehicleServiceMessage(
|
zone.VehicleEvents ! MessageEnvelope(
|
||||||
zoneChannel,
|
zoneChannel,
|
||||||
VehicleAction.DeployRequest(guid, state, 0, unk2=false, Vector3.Zero)
|
VehicleAction.DeployRequest(guid, state, 0, unk2=false, Vector3.Zero)
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -12,8 +12,8 @@ import net.psforever.objects.serverobject.terminals.{GeneratorTerminalDefinition
|
||||||
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.game.TriggerEffectMessage
|
import net.psforever.packet.game.TriggerEffectMessage
|
||||||
|
import net.psforever.services.base.envelope.MessageEnvelope
|
||||||
import net.psforever.types.{PlanetSideGeneratorState, Vector3}
|
import net.psforever.types.{PlanetSideGeneratorState, Vector3}
|
||||||
import net.psforever.services.avatar.AvatarServiceMessage
|
|
||||||
import net.psforever.services.base.message.SendResponse
|
import net.psforever.services.base.message.SendResponse
|
||||||
|
|
||||||
import scala.concurrent.duration._
|
import scala.concurrent.duration._
|
||||||
|
|
@ -111,7 +111,7 @@ class GeneratorControl(gen: Generator)
|
||||||
super.DestructionAwareness(gen, gen.LastDamage.get)
|
super.DestructionAwareness(gen, gen.LastDamage.get)
|
||||||
GeneratorControl.UpdateOwner(gen, Some(GeneratorControl.Event.Destroyed))
|
GeneratorControl.UpdateOwner(gen, Some(GeneratorControl.Event.Destroyed))
|
||||||
//kaboom
|
//kaboom
|
||||||
zone.AvatarEvents ! AvatarServiceMessage(
|
zone.AvatarEvents ! MessageEnvelope(
|
||||||
zone.id,
|
zone.id,
|
||||||
SendResponse(TriggerEffectMessage(gen.GUID, "explosion_generator", None, None))
|
SendResponse(TriggerEffectMessage(gen.GUID, "explosion_generator", None, None))
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -11,10 +11,10 @@ import net.psforever.objects.serverobject.{CommonMessages, PlanetSideServerObjec
|
||||||
import net.psforever.objects.zones.blockmap.BlockMapEntity
|
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.base.envelope.MessageEnvelope
|
||||||
import net.psforever.services.base.message.SendResponse
|
import net.psforever.services.base.message.SendResponse
|
||||||
import net.psforever.services.local.support.{HackClearActor, HackClearEnvelope, HackEntityEnvelope}
|
import net.psforever.services.local.support.{HackClearActor, HackClearEnvelope, HackEntityEnvelope}
|
||||||
import net.psforever.services.local.{LocalAction, LocalServiceMessage}
|
import net.psforever.services.local.LocalAction
|
||||||
|
|
||||||
import scala.annotation.unused
|
import scala.annotation.unused
|
||||||
import scala.util.{Failure, Success}
|
import scala.util.{Failure, Success}
|
||||||
|
|
@ -89,7 +89,7 @@ object GenericHackables {
|
||||||
} else {
|
} else {
|
||||||
(HackState.Ongoing, progress.toInt)
|
(HackState.Ongoing, progress.toInt)
|
||||||
}
|
}
|
||||||
target.Zone.AvatarEvents ! AvatarServiceMessage(
|
target.Zone.AvatarEvents ! MessageEnvelope(
|
||||||
hacker.Name,
|
hacker.Name,
|
||||||
SendResponse(
|
SendResponse(
|
||||||
HackMessage(progressType, target.GUID, hacker.GUID, progressGrade, 0L, progressState, HackState7.Unk8)
|
HackMessage(progressType, target.GUID, hacker.GUID, progressGrade, 0L, progressState, HackState7.Unk8)
|
||||||
|
|
@ -171,7 +171,7 @@ object GenericHackables {
|
||||||
val zoneId = zone.id
|
val zoneId = zone.id
|
||||||
val pguid = tplayer.GUID
|
val pguid = tplayer.GUID
|
||||||
log.info(s"${user.Name} hacked a ${target.Definition.Name}")
|
log.info(s"${user.Name} hacked a ${target.Definition.Name}")
|
||||||
zone.LocalEvents ! LocalServiceMessage(
|
zone.LocalEvents ! MessageEnvelope(
|
||||||
zoneId,
|
zoneId,
|
||||||
pguid,
|
pguid,
|
||||||
LocalAction.TriggerSound(target.HackSound, tplayer.Position, 30, 0.49803925f)
|
LocalAction.TriggerSound(target.HackSound, tplayer.Position, 30, 0.49803925f)
|
||||||
|
|
@ -207,7 +207,7 @@ object GenericHackables {
|
||||||
building.virusId = 8
|
building.virusId = 8
|
||||||
building.virusInstalledBy = None
|
building.virusInstalledBy = None
|
||||||
zone.LocalEvents ! HackClearEnvelope(HackClearActor.ObjectIsResecured(target))
|
zone.LocalEvents ! HackClearEnvelope(HackClearActor.ObjectIsResecured(target))
|
||||||
zone.LocalEvents ! LocalServiceMessage(
|
zone.LocalEvents ! MessageEnvelope(
|
||||||
zone.id,
|
zone.id,
|
||||||
SendResponse(GenericObjectActionMessage(target.GUID, 60))
|
SendResponse(GenericObjectActionMessage(target.GUID, 60))
|
||||||
)
|
)
|
||||||
|
|
@ -261,7 +261,7 @@ object GenericHackables {
|
||||||
val hackState = hackStateMap.getOrElse(virus, HackState7.Unk8)
|
val hackState = hackStateMap.getOrElse(virus, HackState7.Unk8)
|
||||||
building.virusId = virus
|
building.virusId = virus
|
||||||
building.virusInstalledBy = Some(tplayer.Faction.id)
|
building.virusInstalledBy = Some(tplayer.Faction.id)
|
||||||
zone.LocalEvents ! LocalServiceMessage(
|
zone.LocalEvents ! MessageEnvelope(
|
||||||
zoneId,
|
zoneId,
|
||||||
pguid,
|
pguid,
|
||||||
LocalAction.TriggerSound(TriggeredSound.TREKSuccessful, tplayer.Position, 30, 0.49803925f)
|
LocalAction.TriggerSound(TriggeredSound.TREKSuccessful, tplayer.Position, 30, 0.49803925f)
|
||||||
|
|
@ -272,13 +272,9 @@ object GenericHackables {
|
||||||
LocalAction.HackObject(target.GUID, installedVirusDuration.toLong, hackState),
|
LocalAction.HackObject(target.GUID, installedVirusDuration.toLong, hackState),
|
||||||
HackClearActor.ObjectIsHacked(target, zone, hackClearValue, hackState, installedVirusDuration)
|
HackClearActor.ObjectIsHacked(target, zone, hackClearValue, hackState, installedVirusDuration)
|
||||||
)
|
)
|
||||||
zone.LocalEvents ! LocalServiceMessage(
|
zone.LocalEvents ! MessageEnvelope(
|
||||||
zone.id,
|
zone.id,
|
||||||
SendResponse(GenericObjectActionMessage(target.GUID, 61))
|
SendResponse(List(GenericObjectActionMessage(target.GUID, 61), GenericObjectActionMessage(target.GUID, 58)))
|
||||||
)
|
|
||||||
zone.LocalEvents ! LocalServiceMessage(
|
|
||||||
zone.id,
|
|
||||||
SendResponse(GenericObjectActionMessage(target.GUID, 58))
|
|
||||||
)
|
)
|
||||||
//amenities if applicable
|
//amenities if applicable
|
||||||
virus match {
|
virus match {
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ import net.psforever.objects.sourcing.AmenitySource
|
||||||
import net.psforever.objects.vital.TerminalUsedActivity
|
import net.psforever.objects.vital.TerminalUsedActivity
|
||||||
import net.psforever.objects.zones.{Zone, ZoneAware, Zoning}
|
import net.psforever.objects.zones.{Zone, ZoneAware, Zoning}
|
||||||
import net.psforever.objects.{Default, PlanetSideGameObject, Player, Vehicle}
|
import net.psforever.objects.{Default, PlanetSideGameObject, Player, Vehicle}
|
||||||
import net.psforever.services.vehicle.VehicleServiceMessage
|
import net.psforever.services.base.envelope.MessageEnvelope
|
||||||
import net.psforever.types.{PlanetSideGUID, TransactionType, Vector3}
|
import net.psforever.types.{PlanetSideGUID, TransactionType, Vector3}
|
||||||
|
|
||||||
import scala.annotation.tailrec
|
import scala.annotation.tailrec
|
||||||
|
|
@ -129,7 +129,7 @@ class VehicleSpawnControl(pad: VehicleSpawnPad)
|
||||||
}
|
}
|
||||||
trackedOrder = None
|
trackedOrder = None
|
||||||
handleOrderFunc = NewTasking
|
handleOrderFunc = NewTasking
|
||||||
pad.Zone.VehicleEvents ! VehicleServiceMessage(pad.Zone.id, VehicleSpawnPad.ResetSpawnPad(pad)) //cautious animation reset
|
pad.Zone.VehicleEvents ! MessageEnvelope(pad.Zone.id, VehicleSpawnPad.ResetSpawnPad(pad)) //cautious animation reset
|
||||||
self ! akka.actor.Kill //should cause the actor to restart, which will abort any trapped messages
|
self ! akka.actor.Kill //should cause the actor to restart, which will abort any trapped messages
|
||||||
|
|
||||||
case _ => ()
|
case _ => ()
|
||||||
|
|
@ -165,7 +165,7 @@ class VehicleSpawnControl(pad: VehicleSpawnPad)
|
||||||
//first queued order
|
//first queued order
|
||||||
orders = List(order)
|
orders = List(order)
|
||||||
queueManagementTask()
|
queueManagementTask()
|
||||||
pad.Zone.VehicleEvents ! VehicleServiceMessage(
|
pad.Zone.VehicleEvents ! MessageEnvelope(
|
||||||
name,
|
name,
|
||||||
VehicleSpawnPad.PeriodicReminder(VehicleSpawnPad.Reminders.Queue, Some(s"@SVCP_PositionInQueue^2~^2~"))
|
VehicleSpawnPad.PeriodicReminder(VehicleSpawnPad.Reminders.Queue, Some(s"@SVCP_PositionInQueue^2~^2~"))
|
||||||
)
|
)
|
||||||
|
|
@ -173,7 +173,7 @@ class VehicleSpawnControl(pad: VehicleSpawnPad)
|
||||||
//new order
|
//new order
|
||||||
orders = orders :+ order
|
orders = orders :+ order
|
||||||
val size = orders.size + 1
|
val size = orders.size + 1
|
||||||
pad.Zone.VehicleEvents ! VehicleServiceMessage(
|
pad.Zone.VehicleEvents ! MessageEnvelope(
|
||||||
name,
|
name,
|
||||||
VehicleSpawnPad.PeriodicReminder(VehicleSpawnPad.Reminders.Queue, Some(s"@SVCP_PositionInQueue^$size~^$size~"))
|
VehicleSpawnPad.PeriodicReminder(VehicleSpawnPad.Reminders.Queue, Some(s"@SVCP_PositionInQueue^$size~^$size~"))
|
||||||
)
|
)
|
||||||
|
|
@ -184,7 +184,7 @@ class VehicleSpawnControl(pad: VehicleSpawnPad)
|
||||||
val originalVehicle = originalOrder.vehicle.Definition.Name
|
val originalVehicle = originalOrder.vehicle.Definition.Name
|
||||||
orders = (orders.take(n) :+ order) ++ orders.drop(n+1)
|
orders = (orders.take(n) :+ order) ++ orders.drop(n+1)
|
||||||
VehicleSpawnControl.DisposeVehicle(originalOrder.vehicle, zone)
|
VehicleSpawnControl.DisposeVehicle(originalOrder.vehicle, zone)
|
||||||
zone.VehicleEvents ! VehicleServiceMessage(
|
zone.VehicleEvents ! MessageEnvelope(
|
||||||
name,
|
name,
|
||||||
VehicleSpawnPad.PeriodicReminder(VehicleSpawnPad.Reminders.Queue, Some(s"@SVCP_ReplacedVehicleWithVehicle^@$originalVehicle~^@${order.vehicle.Definition.Name}~"))
|
VehicleSpawnPad.PeriodicReminder(VehicleSpawnPad.Reminders.Queue, Some(s"@SVCP_ReplacedVehicleWithVehicle^@$originalVehicle~^@${order.vehicle.Definition.Name}~"))
|
||||||
)
|
)
|
||||||
|
|
@ -243,7 +243,7 @@ class VehicleSpawnControl(pad: VehicleSpawnPad)
|
||||||
val newOrder = VehicleSpawnControl.Order(driver, vehicle)
|
val newOrder = VehicleSpawnControl.Order(driver, vehicle)
|
||||||
recursiveOrderReminder(orders.iterator, size)
|
recursiveOrderReminder(orders.iterator, size)
|
||||||
trace(s"processing next order - a ${vehicle.Definition.Name} for $name")
|
trace(s"processing next order - a ${vehicle.Definition.Name} for $name")
|
||||||
pad.Zone.VehicleEvents ! VehicleServiceMessage(
|
pad.Zone.VehicleEvents ! MessageEnvelope(
|
||||||
name,
|
name,
|
||||||
VehicleSpawnPad.PeriodicReminder(VehicleSpawnPad.Reminders.Queue, Some(s"@SVCP_PositionInQueue^1~^$size~"))
|
VehicleSpawnPad.PeriodicReminder(VehicleSpawnPad.Reminders.Queue, Some(s"@SVCP_PositionInQueue^1~^$size~"))
|
||||||
)
|
)
|
||||||
|
|
@ -321,7 +321,7 @@ class VehicleSpawnControl(pad: VehicleSpawnPad)
|
||||||
private def CancelOrder(vehicle: Vehicle, player: Player, msg: Option[String]): Unit = {
|
private def CancelOrder(vehicle: Vehicle, player: Player, msg: Option[String]): Unit = {
|
||||||
if (vehicle.Seats.values.count(_.isOccupied) == 0) {
|
if (vehicle.Seats.values.count(_.isOccupied) == 0) {
|
||||||
VehicleSpawnControl.DisposeSpawnedVehicle(vehicle, player, pad.Zone)
|
VehicleSpawnControl.DisposeSpawnedVehicle(vehicle, player, pad.Zone)
|
||||||
pad.Zone.VehicleEvents ! VehicleServiceMessage(
|
pad.Zone.VehicleEvents ! MessageEnvelope(
|
||||||
player.Name,
|
player.Name,
|
||||||
VehicleSpawnPad.PeriodicReminder(VehicleSpawnPad.Reminders.Cancelled, msg)
|
VehicleSpawnPad.PeriodicReminder(VehicleSpawnPad.Reminders.Cancelled, msg)
|
||||||
)
|
)
|
||||||
|
|
@ -451,7 +451,7 @@ class VehicleSpawnControl(pad: VehicleSpawnPad)
|
||||||
entry: VehicleSpawnPad.VehicleOrder,
|
entry: VehicleSpawnPad.VehicleOrder,
|
||||||
cause: Option[Any]
|
cause: Option[Any]
|
||||||
): Unit = {
|
): Unit = {
|
||||||
pad.Zone.VehicleEvents ! VehicleServiceMessage(
|
pad.Zone.VehicleEvents ! MessageEnvelope(
|
||||||
entry.player.Name,
|
entry.player.Name,
|
||||||
VehicleSpawnPad.PeriodicReminder(VehicleSpawnPad.Reminders.Blocked, cause)
|
VehicleSpawnPad.PeriodicReminder(VehicleSpawnPad.Reminders.Blocked, cause)
|
||||||
)
|
)
|
||||||
|
|
@ -464,7 +464,7 @@ class VehicleSpawnControl(pad: VehicleSpawnPad)
|
||||||
): Unit = {
|
): Unit = {
|
||||||
if (iter.hasNext) {
|
if (iter.hasNext) {
|
||||||
val recipient = iter.next()
|
val recipient = iter.next()
|
||||||
pad.Zone.VehicleEvents ! VehicleServiceMessage(
|
pad.Zone.VehicleEvents ! MessageEnvelope(
|
||||||
recipient.player.Name,
|
recipient.player.Name,
|
||||||
VehicleSpawnPad.PeriodicReminder(VehicleSpawnPad.Reminders.Queue, Some(s"@SVCP_PositionInQueue^$position~^$size~"))
|
VehicleSpawnPad.PeriodicReminder(VehicleSpawnPad.Reminders.Queue, Some(s"@SVCP_PositionInQueue^$position~^$size~"))
|
||||||
)
|
)
|
||||||
|
|
@ -562,7 +562,7 @@ object VehicleSpawnControl {
|
||||||
*/
|
*/
|
||||||
private def DisposeSpawnedVehicle(vehicle: Vehicle, player: Player, zone: Zone): Unit = {
|
private def DisposeSpawnedVehicle(vehicle: Vehicle, player: Player, zone: Zone): Unit = {
|
||||||
DisposeVehicle(vehicle, zone)
|
DisposeVehicle(vehicle, zone)
|
||||||
zone.VehicleEvents ! VehicleServiceMessage(zone.id, VehicleSpawnPad.RevealPlayer(player.GUID))
|
zone.VehicleEvents ! MessageEnvelope(zone.id, VehicleSpawnPad.RevealPlayer(player.GUID))
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ package net.psforever.objects.serverobject.pad.process
|
||||||
|
|
||||||
import akka.actor.Props
|
import akka.actor.Props
|
||||||
import net.psforever.objects.serverobject.pad.{VehicleSpawnControl, VehicleSpawnPad}
|
import net.psforever.objects.serverobject.pad.{VehicleSpawnControl, VehicleSpawnPad}
|
||||||
import net.psforever.services.vehicle.VehicleServiceMessage
|
import net.psforever.services.base.envelope.MessageEnvelope
|
||||||
|
|
||||||
import scala.concurrent.ExecutionContext.Implicits.global
|
import scala.concurrent.ExecutionContext.Implicits.global
|
||||||
import scala.concurrent.duration._
|
import scala.concurrent.duration._
|
||||||
|
|
@ -29,7 +29,7 @@ class VehicleSpawnControlConcealPlayer(pad: VehicleSpawnPad) extends VehicleSpaw
|
||||||
case order @ VehicleSpawnControl.Order(driver, vehicle) =>
|
case order @ VehicleSpawnControl.Order(driver, vehicle) =>
|
||||||
if (VehicleSpawnControl.validateOrderCredentials(pad, driver, vehicle).isEmpty) {
|
if (VehicleSpawnControl.validateOrderCredentials(pad, driver, vehicle).isEmpty) {
|
||||||
trace(s"hiding ${driver.Name}")
|
trace(s"hiding ${driver.Name}")
|
||||||
pad.Zone.VehicleEvents ! VehicleServiceMessage(pad.Zone.id, VehicleSpawnPad.ConcealPlayer(driver.GUID))
|
pad.Zone.VehicleEvents ! MessageEnvelope(pad.Zone.id, VehicleSpawnPad.ConcealPlayer(driver.GUID))
|
||||||
context.system.scheduler.scheduleOnce(2000 milliseconds, loadVehicle, order)
|
context.system.scheduler.scheduleOnce(2000 milliseconds, loadVehicle, order)
|
||||||
} else {
|
} else {
|
||||||
trace(s"integral component lost; abort order fulfillment")
|
trace(s"integral component lost; abort order fulfillment")
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ package net.psforever.objects.serverobject.pad.process
|
||||||
|
|
||||||
import akka.actor.Props
|
import akka.actor.Props
|
||||||
import net.psforever.objects.serverobject.pad.{VehicleSpawnControl, VehicleSpawnPad}
|
import net.psforever.objects.serverobject.pad.{VehicleSpawnControl, VehicleSpawnPad}
|
||||||
import net.psforever.services.vehicle.VehicleServiceMessage
|
import net.psforever.services.base.envelope.MessageEnvelope
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An `Actor` that handles vehicle spawning orders for a `VehicleSpawnPad`.
|
* An `Actor` that handles vehicle spawning orders for a `VehicleSpawnPad`.
|
||||||
|
|
@ -25,7 +25,7 @@ class VehicleSpawnControlDriverControl(pad: VehicleSpawnPad) extends VehicleSpaw
|
||||||
case order @ VehicleSpawnControl.Order(driver, vehicle) =>
|
case order @ VehicleSpawnControl.Order(driver, vehicle) =>
|
||||||
trace(s"returning control of ${vehicle.Definition.Name} to its current driver")
|
trace(s"returning control of ${vehicle.Definition.Name} to its current driver")
|
||||||
if (vehicle.PassengerInSeat(driver).nonEmpty) {
|
if (vehicle.PassengerInSeat(driver).nonEmpty) {
|
||||||
pad.Zone.VehicleEvents ! VehicleServiceMessage(driver.Name, VehicleSpawnPad.ServerVehicleOverrideEnd(vehicle, pad))
|
pad.Zone.VehicleEvents ! MessageEnvelope(driver.Name, VehicleSpawnPad.ServerVehicleOverrideEnd(vehicle, pad))
|
||||||
}
|
}
|
||||||
finalClear ! order
|
finalClear ! order
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,8 +4,9 @@ package net.psforever.objects.serverobject.pad.process
|
||||||
import akka.actor.Cancellable
|
import akka.actor.Cancellable
|
||||||
import net.psforever.objects.Default
|
import net.psforever.objects.Default
|
||||||
import net.psforever.objects.serverobject.pad.{VehicleSpawnControl, VehicleSpawnPad}
|
import net.psforever.objects.serverobject.pad.{VehicleSpawnControl, VehicleSpawnPad}
|
||||||
|
import net.psforever.services.base.envelope.MessageEnvelope
|
||||||
import net.psforever.types.Vector3
|
import net.psforever.types.Vector3
|
||||||
import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage}
|
import net.psforever.services.vehicle.VehicleAction
|
||||||
|
|
||||||
import scala.concurrent.ExecutionContext.Implicits.global
|
import scala.concurrent.ExecutionContext.Implicits.global
|
||||||
import scala.concurrent.duration._
|
import scala.concurrent.duration._
|
||||||
|
|
@ -35,7 +36,7 @@ class VehicleSpawnControlFinalClearance(pad: VehicleSpawnPad) extends VehicleSpa
|
||||||
//ensure the vacant vehicle is above the trench and the doors
|
//ensure the vacant vehicle is above the trench and the doors
|
||||||
vehicle.Position = pad.Position + Vector3.z(pad.Definition.VehicleCreationZOffset)
|
vehicle.Position = pad.Position + Vector3.z(pad.Definition.VehicleCreationZOffset)
|
||||||
val definition = vehicle.Definition
|
val definition = vehicle.Definition
|
||||||
pad.Zone.VehicleEvents ! VehicleServiceMessage(
|
pad.Zone.VehicleEvents ! MessageEnvelope(
|
||||||
s"${pad.Continent}",
|
s"${pad.Continent}",
|
||||||
VehicleAction.LoadVehicle(vehicle, definition.ObjectId, vehicle.GUID, definition.Packet.ConstructorData(vehicle).get)
|
VehicleAction.LoadVehicle(vehicle, definition.ObjectId, vehicle.GUID, definition.Packet.ConstructorData(vehicle).get)
|
||||||
)
|
)
|
||||||
|
|
@ -64,7 +65,7 @@ class VehicleSpawnControlFinalClearance(pad: VehicleSpawnPad) extends VehicleSpa
|
||||||
}
|
}
|
||||||
|
|
||||||
case VehicleSpawnControlFinalClearance.NextOrder =>
|
case VehicleSpawnControlFinalClearance.NextOrder =>
|
||||||
pad.Zone.VehicleEvents ! VehicleServiceMessage(pad.Zone.id, VehicleSpawnPad.ResetSpawnPad(pad))
|
pad.Zone.VehicleEvents ! MessageEnvelope(pad.Zone.id, VehicleSpawnPad.ResetSpawnPad(pad))
|
||||||
context.parent ! VehicleSpawnControl.ProcessControl.GetNewOrder
|
context.parent ! VehicleSpawnControl.ProcessControl.GetNewOrder
|
||||||
|
|
||||||
case _ => ()
|
case _ => ()
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,8 @@ import akka.util.Timeout
|
||||||
import net.psforever.objects.GlobalDefinitions
|
import net.psforever.objects.GlobalDefinitions
|
||||||
import net.psforever.objects.serverobject.pad.{VehicleSpawnControl, VehicleSpawnPad}
|
import net.psforever.objects.serverobject.pad.{VehicleSpawnControl, VehicleSpawnPad}
|
||||||
import net.psforever.objects.zones.Zone
|
import net.psforever.objects.zones.Zone
|
||||||
import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage}
|
import net.psforever.services.base.envelope.MessageEnvelope
|
||||||
|
import net.psforever.services.vehicle.VehicleAction
|
||||||
import net.psforever.types.Vector3
|
import net.psforever.types.Vector3
|
||||||
import net.psforever.zones.Zones
|
import net.psforever.zones.Zones
|
||||||
|
|
||||||
|
|
@ -67,7 +68,7 @@ class VehicleSpawnControlLoadVehicle(pad: VehicleSpawnPad) extends VehicleSpawnC
|
||||||
val vtype = definition.ObjectId
|
val vtype = definition.ObjectId
|
||||||
val vguid = v.GUID
|
val vguid = v.GUID
|
||||||
val vdata = definition.Packet.ConstructorData(v).get
|
val vdata = definition.Packet.ConstructorData(v).get
|
||||||
zone.VehicleEvents ! VehicleServiceMessage(
|
zone.VehicleEvents ! MessageEnvelope(
|
||||||
zone.id,
|
zone.id,
|
||||||
VehicleAction.LoadVehicle(v, vtype, vguid, vdata)
|
VehicleAction.LoadVehicle(v, vtype, vguid, vdata)
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ import net.psforever.objects.vital.interaction.{DamageInteraction, DamageResult}
|
||||||
import net.psforever.objects.vital.prop.DamageProperties
|
import net.psforever.objects.vital.prop.DamageProperties
|
||||||
import net.psforever.objects.vital.Vitality
|
import net.psforever.objects.vital.Vitality
|
||||||
import net.psforever.objects.zones.Zone
|
import net.psforever.objects.zones.Zone
|
||||||
import net.psforever.services.vehicle.VehicleServiceMessage
|
import net.psforever.services.base.envelope.MessageEnvelope
|
||||||
|
|
||||||
import scala.concurrent.ExecutionContext.Implicits.global
|
import scala.concurrent.ExecutionContext.Implicits.global
|
||||||
import scala.concurrent.duration._
|
import scala.concurrent.duration._
|
||||||
|
|
@ -41,7 +41,7 @@ class VehicleSpawnControlRailJack(pad: VehicleSpawnPad) extends VehicleSpawnCont
|
||||||
pad.Definition.killBox(pad, vehicle.Definition.CanFly),
|
pad.Definition.killBox(pad, vehicle.Definition.CanFly),
|
||||||
Zone.findAllTargets
|
Zone.findAllTargets
|
||||||
)
|
)
|
||||||
pad.Zone.VehicleEvents ! VehicleServiceMessage(pad.Zone.id, VehicleSpawnPad.AttachToRails(vehicle, pad))
|
pad.Zone.VehicleEvents ! MessageEnvelope(pad.Zone.id, VehicleSpawnPad.AttachToRails(vehicle, pad))
|
||||||
context.system.scheduler.scheduleOnce(10 milliseconds, seatDriver, order)
|
context.system.scheduler.scheduleOnce(10 milliseconds, seatDriver, order)
|
||||||
|
|
||||||
case msg @ (VehicleSpawnControl.ProcessControl.Reminder | VehicleSpawnControl.ProcessControl.GetNewOrder) =>
|
case msg @ (VehicleSpawnControl.ProcessControl.Reminder | VehicleSpawnControl.ProcessControl.GetNewOrder) =>
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ package net.psforever.objects.serverobject.pad.process
|
||||||
import akka.actor.{ActorRef, Props}
|
import akka.actor.{ActorRef, Props}
|
||||||
import net.psforever.objects.{Default, Vehicle}
|
import net.psforever.objects.{Default, Vehicle}
|
||||||
import net.psforever.objects.serverobject.pad.{VehicleSpawnControl, VehicleSpawnPad}
|
import net.psforever.objects.serverobject.pad.{VehicleSpawnControl, VehicleSpawnPad}
|
||||||
import net.psforever.services.vehicle.VehicleServiceMessage
|
import net.psforever.services.base.envelope.MessageEnvelope
|
||||||
|
|
||||||
import scala.concurrent.ExecutionContext.Implicits.global
|
import scala.concurrent.ExecutionContext.Implicits.global
|
||||||
import scala.concurrent.duration._
|
import scala.concurrent.duration._
|
||||||
|
|
@ -47,7 +47,7 @@ class VehicleSpawnControlSeatDriver(pad: VehicleSpawnPad) extends VehicleSpawnCo
|
||||||
vehicle.Actor ! Vehicle.Deconstruct(Some(pad.Definition.VehicleCreationDeconstructTime.seconds))
|
vehicle.Actor ! Vehicle.Deconstruct(Some(pad.Definition.VehicleCreationDeconstructTime.seconds))
|
||||||
if (VehicleSpawnControl.validateOrderCredentials(pad, driver, vehicle).isEmpty) {
|
if (VehicleSpawnControl.validateOrderCredentials(pad, driver, vehicle).isEmpty) {
|
||||||
trace("driver to be made seated in vehicle")
|
trace("driver to be made seated in vehicle")
|
||||||
pad.Zone.VehicleEvents ! VehicleServiceMessage(driver.Name, VehicleSpawnPad.StartPlayerSeatedInVehicle(vehicle, pad))
|
pad.Zone.VehicleEvents ! MessageEnvelope(driver.Name, VehicleSpawnPad.StartPlayerSeatedInVehicle(vehicle, pad))
|
||||||
} else {
|
} else {
|
||||||
trace("driver lost; vehicle stranded on pad")
|
trace("driver lost; vehicle stranded on pad")
|
||||||
}
|
}
|
||||||
|
|
@ -59,7 +59,7 @@ class VehicleSpawnControlSeatDriver(pad: VehicleSpawnPad) extends VehicleSpawnCo
|
||||||
if (VehicleSpawnControl.validateOrderCredentials(pad, driver, vehicle).isEmpty &&
|
if (VehicleSpawnControl.validateOrderCredentials(pad, driver, vehicle).isEmpty &&
|
||||||
entry.vehicle.PassengerInSeat(entry.driver).contains(0)) {
|
entry.vehicle.PassengerInSeat(entry.driver).contains(0)) {
|
||||||
trace(s"driver ${entry.driver.Name} has taken the wheel")
|
trace(s"driver ${entry.driver.Name} has taken the wheel")
|
||||||
pad.Zone.VehicleEvents ! VehicleServiceMessage(entry.driver.Name, VehicleSpawnPad.PlayerSeatedInVehicle(entry.vehicle, pad))
|
pad.Zone.VehicleEvents ! MessageEnvelope(entry.driver.Name, VehicleSpawnPad.PlayerSeatedInVehicle(entry.vehicle, pad))
|
||||||
} else {
|
} else {
|
||||||
trace("driver lost, but operations can continue")
|
trace("driver lost, but operations can continue")
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ package net.psforever.objects.serverobject.pad.process
|
||||||
|
|
||||||
import akka.actor.Props
|
import akka.actor.Props
|
||||||
import net.psforever.objects.serverobject.pad.{VehicleSpawnControl, VehicleSpawnPad}
|
import net.psforever.objects.serverobject.pad.{VehicleSpawnControl, VehicleSpawnPad}
|
||||||
import net.psforever.services.vehicle.VehicleServiceMessage
|
import net.psforever.services.base.envelope.MessageEnvelope
|
||||||
import net.psforever.types.Vector3
|
import net.psforever.types.Vector3
|
||||||
|
|
||||||
import scala.concurrent.ExecutionContext.Implicits.global
|
import scala.concurrent.ExecutionContext.Implicits.global
|
||||||
|
|
@ -32,18 +32,18 @@ class VehicleSpawnControlServerVehicleOverride(pad: VehicleSpawnPad) extends Veh
|
||||||
val driverFailState =
|
val driverFailState =
|
||||||
!driver.isAlive || driver.Continent != pad.Continent || !vehicle.PassengerInSeat(driver).contains(0)
|
!driver.isAlive || driver.Continent != pad.Continent || !vehicle.PassengerInSeat(driver).contains(0)
|
||||||
vehicle.MountedIn = None
|
vehicle.MountedIn = None
|
||||||
pad.Zone.VehicleEvents ! VehicleServiceMessage(pad.Zone.id, VehicleSpawnPad.DetachFromRails(vehicle, pad))
|
pad.Zone.VehicleEvents ! MessageEnvelope(pad.Zone.id, VehicleSpawnPad.DetachFromRails(vehicle, pad))
|
||||||
if (vehicleFailState || driverFailState) {
|
if (vehicleFailState || driverFailState) {
|
||||||
if (vehicleFailState) {
|
if (vehicleFailState) {
|
||||||
trace(s"vehicle was already destroyed")
|
trace(s"vehicle was already destroyed")
|
||||||
} else {
|
} else {
|
||||||
trace(s"driver is not ready")
|
trace(s"driver is not ready")
|
||||||
}
|
}
|
||||||
pad.Zone.VehicleEvents ! VehicleServiceMessage(pad.Zone.id, VehicleSpawnPad.RevealPlayer(order.DriverGUID))
|
pad.Zone.VehicleEvents ! MessageEnvelope(pad.Zone.id, VehicleSpawnPad.RevealPlayer(order.DriverGUID))
|
||||||
driverControl ! order
|
driverControl ! order
|
||||||
} else {
|
} else {
|
||||||
trace(s"telling ${driver.Name} that the server is assuming control of the ${vehicle.Definition.Name}")
|
trace(s"telling ${driver.Name} that the server is assuming control of the ${vehicle.Definition.Name}")
|
||||||
pad.Zone.VehicleEvents ! VehicleServiceMessage(driver.Name, VehicleSpawnPad.ServerVehicleOverrideStart(vehicle, pad))
|
pad.Zone.VehicleEvents ! MessageEnvelope(driver.Name, VehicleSpawnPad.ServerVehicleOverrideStart(vehicle, pad))
|
||||||
context.system.scheduler.scheduleOnce(4000 milliseconds, driverControl, order)
|
context.system.scheduler.scheduleOnce(4000 milliseconds, driverControl, order)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,8 +5,9 @@ import net.psforever.objects.Tool
|
||||||
import net.psforever.objects.serverobject.structures.Amenity
|
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.packet.game.PlanetsideAttributeMessage
|
||||||
import net.psforever.services.base.message.PlanetsideAttribute
|
import net.psforever.services.base.envelope.MessageEnvelope
|
||||||
|
import net.psforever.services.base.message.SendResponse
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The "control" `Actor` mixin for repair-handling code
|
* The "control" `Actor` mixin for repair-handling code
|
||||||
|
|
@ -29,7 +30,6 @@ object RepairableAmenity {
|
||||||
* A restored `Amenity` target dispatches two messages to chance its model and operational states.
|
* A restored `Amenity` target dispatches two messages to chance its model and operational states.
|
||||||
* These `PlanetSideAttributeMessage` attributes are the same as reported during zone load client configuration.
|
* These `PlanetSideAttributeMessage` attributes are the same as reported during zone load client configuration.
|
||||||
* @see `PlanetsideAttribute`
|
* @see `PlanetsideAttribute`
|
||||||
* @see `AvatarServiceMessage`
|
|
||||||
* @see `Zone.AvatarEvents`
|
* @see `Zone.AvatarEvents`
|
||||||
* @param target the entity being destroyed
|
* @param target the entity being destroyed
|
||||||
*/
|
*/
|
||||||
|
|
@ -38,8 +38,10 @@ object RepairableAmenity {
|
||||||
val zoneId = zone.id
|
val zoneId = zone.id
|
||||||
val events = zone.AvatarEvents
|
val events = zone.AvatarEvents
|
||||||
val targetGUID = target.GUID
|
val targetGUID = target.GUID
|
||||||
events ! AvatarServiceMessage(zoneId, PlanetsideAttribute(targetGUID, 50, 0))
|
events ! MessageEnvelope(
|
||||||
events ! AvatarServiceMessage(zoneId, PlanetsideAttribute(targetGUID, 51, 0))
|
zoneId,
|
||||||
|
SendResponse(List(PlanetsideAttributeMessage(targetGUID, 50, 0), PlanetsideAttributeMessage(targetGUID, 51, 0)))
|
||||||
|
)
|
||||||
RestorationOfHistory(target)
|
RestorationOfHistory(target)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ import net.psforever.objects.vital.RepairFromEquipment
|
||||||
import net.psforever.objects.{Player, Tool}
|
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.base.envelope.MessageEnvelope
|
||||||
import net.psforever.services.base.message.{PlanetsideAttribute, SendResponse}
|
import net.psforever.services.base.message.{PlanetsideAttribute, SendResponse}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -89,7 +89,7 @@ trait RepairableEntity extends Repairable {
|
||||||
if (!(player.isMoving(test = 1f) || target.isMoving(test = 1f))) { //only allow stationary repairs within margin of error
|
if (!(player.isMoving(test = 1f) || target.isMoving(test = 1f))) { //only allow stationary repairs within margin of error
|
||||||
val repairValue = Repairable.applyLevelModifier(player, item, RepairToolValue(item)).toInt + target.Definition.RepairMod
|
val repairValue = Repairable.applyLevelModifier(player, item, RepairToolValue(item)).toInt + target.Definition.RepairMod
|
||||||
val magazine = item.Discharge()
|
val magazine = item.Discharge()
|
||||||
events ! AvatarServiceMessage(
|
events ! MessageEnvelope(
|
||||||
player.Name,
|
player.Name,
|
||||||
SendResponse(InventoryStateMessage(item.AmmoSlot.Box.GUID, item.GUID, magazine.toLong))
|
SendResponse(InventoryStateMessage(item.AmmoSlot.Box.GUID, item.GUID, magazine.toLong))
|
||||||
)
|
)
|
||||||
|
|
@ -105,7 +105,7 @@ trait RepairableEntity extends Repairable {
|
||||||
originalHealth
|
originalHealth
|
||||||
}
|
}
|
||||||
//progress bar remains visible
|
//progress bar remains visible
|
||||||
events ! AvatarServiceMessage(
|
events ! MessageEnvelope(
|
||||||
name,
|
name,
|
||||||
SendResponse(RepairMessage(target.GUID, updatedHealth * 100 / definition.MaxHealth))
|
SendResponse(RepairMessage(target.GUID, updatedHealth * 100 / definition.MaxHealth))
|
||||||
)
|
)
|
||||||
|
|
@ -140,11 +140,11 @@ trait RepairableEntity extends Repairable {
|
||||||
val newHealth = target.Health = target.Health + amount
|
val newHealth = target.Health = target.Health + amount
|
||||||
if (target.Destroyed) {
|
if (target.Destroyed) {
|
||||||
if (newHealth >= target.Definition.RepairRestoresAt) {
|
if (newHealth >= target.Definition.RepairRestoresAt) {
|
||||||
events ! AvatarServiceMessage(zoneId, PlanetsideAttribute(tguid, 0, newHealth))
|
events ! MessageEnvelope(zoneId, PlanetsideAttribute(tguid, 0, newHealth))
|
||||||
Restoration(target)
|
Restoration(target)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
events ! AvatarServiceMessage(zoneId, PlanetsideAttribute(tguid, 0, newHealth))
|
events ! MessageEnvelope(zoneId, PlanetsideAttribute(tguid, 0, newHealth))
|
||||||
}
|
}
|
||||||
newHealth
|
newHealth
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,8 @@ import net.psforever.objects.Tool
|
||||||
import net.psforever.objects.equipment.EquipmentSlot
|
import net.psforever.objects.equipment.EquipmentSlot
|
||||||
import net.psforever.objects.serverobject.turret.WeaponTurret
|
import net.psforever.objects.serverobject.turret.WeaponTurret
|
||||||
import net.psforever.objects.vehicles.MountedWeapons
|
import net.psforever.objects.vehicles.MountedWeapons
|
||||||
import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage}
|
import net.psforever.services.base.envelope.MessageEnvelope
|
||||||
|
import net.psforever.services.vehicle.VehicleAction
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The "control" `Actor` mixin for repair-handling code for `WeaponTurret` objects.
|
* The "control" `Actor` mixin for repair-handling code for `WeaponTurret` objects.
|
||||||
|
|
@ -29,8 +30,7 @@ object RepairableWeaponTurret {
|
||||||
* @see `MountedWeapons.Weapons`
|
* @see `MountedWeapons.Weapons`
|
||||||
* @see `Service.defaultPlayerGUID`
|
* @see `Service.defaultPlayerGUID`
|
||||||
* @see `WeaponTurret`
|
* @see `WeaponTurret`
|
||||||
* @see `VehicleAction.EquipmentInSlot`
|
* @see `EquipmentInSlot`
|
||||||
* @see `VehicleServiceMessage`
|
|
||||||
* @see `Zone.VehicleEvents`
|
* @see `Zone.VehicleEvents`
|
||||||
* @param target the entity being destroyed;
|
* @param target the entity being destroyed;
|
||||||
* note: `MountedWeapons` is a parent of `WeaponTurret`
|
* note: `MountedWeapons` is a parent of `WeaponTurret`
|
||||||
|
|
@ -45,7 +45,7 @@ object RepairableWeaponTurret {
|
||||||
.map({ case (index, slot: EquipmentSlot) => (index, slot.Equipment) })
|
.map({ case (index, slot: EquipmentSlot) => (index, slot.Equipment) })
|
||||||
.collect {
|
.collect {
|
||||||
case (index: Int, Some(tool: Tool)) =>
|
case (index: Int, Some(tool: Tool)) =>
|
||||||
events ! VehicleServiceMessage(
|
events ! MessageEnvelope(
|
||||||
zoneId,
|
zoneId,
|
||||||
VehicleAction.EquipmentInSlot(tguid, index, tool)
|
VehicleAction.EquipmentInSlot(tguid, index, tool)
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -11,9 +11,9 @@ import net.psforever.objects.zones
|
||||||
import net.psforever.objects.{GlobalDefinitions, Ntu, NtuContainer, NtuStorageBehavior, Vehicle}
|
import net.psforever.objects.{GlobalDefinitions, Ntu, NtuContainer, NtuStorageBehavior, Vehicle}
|
||||||
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
|
||||||
|
import net.psforever.services.base.envelope.MessageEnvelope
|
||||||
import net.psforever.services.base.message.PlanetsideAttribute
|
import net.psforever.services.base.message.PlanetsideAttribute
|
||||||
import net.psforever.services.vehicle.VehicleServiceMessage
|
|
||||||
import net.psforever.util.Config
|
import net.psforever.util.Config
|
||||||
|
|
||||||
import scala.concurrent.ExecutionContext.Implicits.global
|
import scala.concurrent.ExecutionContext.Implicits.global
|
||||||
|
|
@ -107,7 +107,7 @@ class ResourceSiloControl(resourceSilo: ResourceSilo)
|
||||||
log.trace(s"LowNtuWarning: Silo ${resourceSilo.GUID} low ntu warning set to $enabled")
|
log.trace(s"LowNtuWarning: Silo ${resourceSilo.GUID} low ntu warning set to $enabled")
|
||||||
val building = resourceSilo.Owner
|
val building = resourceSilo.Owner
|
||||||
val zone = building.Zone
|
val zone = building.Zone
|
||||||
building.Zone.AvatarEvents ! AvatarServiceMessage(
|
building.Zone.AvatarEvents ! MessageEnvelope(
|
||||||
zone.id,
|
zone.id,
|
||||||
building.GUID,
|
building.GUID,
|
||||||
PlanetsideAttribute(building.GUID, 47, if (resourceSilo.LowNtuWarningOn) 1 else 0)
|
PlanetsideAttribute(building.GUID, 47, if (resourceSilo.LowNtuWarningOn) 1 else 0)
|
||||||
|
|
@ -131,7 +131,7 @@ class ResourceSiloControl(resourceSilo: ResourceSilo)
|
||||||
log.trace(
|
log.trace(
|
||||||
s"UpdateChargeLevel: silo ${resourceSilo.GUID} NTU bar level has changed from $siloDisplayBeforeChange to ${resourceSilo.CapacitorDisplay}"
|
s"UpdateChargeLevel: silo ${resourceSilo.GUID} NTU bar level has changed from $siloDisplayBeforeChange to ${resourceSilo.CapacitorDisplay}"
|
||||||
)
|
)
|
||||||
zone.AvatarEvents ! AvatarServiceMessage(
|
zone.AvatarEvents ! MessageEnvelope(
|
||||||
zone.id,
|
zone.id,
|
||||||
resourceSilo.GUID,
|
resourceSilo.GUID,
|
||||||
PlanetsideAttribute(resourceSilo.GUID, 45, resourceSilo.CapacitorDisplay)
|
PlanetsideAttribute(resourceSilo.GUID, 45, resourceSilo.CapacitorDisplay)
|
||||||
|
|
@ -205,11 +205,11 @@ class ResourceSiloControl(resourceSilo: ResourceSilo)
|
||||||
(Config.app.game.experience.sep.ntuSiloDepositReward.toFloat *
|
(Config.app.game.experience.sep.ntuSiloDepositReward.toFloat *
|
||||||
amount * resourceSilo.Definition.ChargeTime.toSeconds.toFloat / resourceSilo.MaxNtuCapacitor
|
amount * resourceSilo.Definition.ChargeTime.toSeconds.toFloat / resourceSilo.MaxNtuCapacitor
|
||||||
).toLong
|
).toLong
|
||||||
vehicle.Zone.AvatarEvents ! AvatarServiceMessage(
|
vehicle.Zone.AvatarEvents ! MessageEnvelope(
|
||||||
owner.name,
|
owner.name,
|
||||||
AvatarAction.AwardBep(owner.charId, deposit, ExperienceType.Normal)
|
AvatarAction.AwardBep(owner.charId, deposit, ExperienceType.Normal)
|
||||||
)
|
)
|
||||||
vehicle.Zone.AvatarEvents ! AvatarServiceMessage(
|
vehicle.Zone.AvatarEvents ! MessageEnvelope(
|
||||||
owner.name, AvatarAction.ShareAntExperienceWithSquad(owner, deposit, vehicle))
|
owner.name, AvatarAction.ShareAntExperienceWithSquad(owner, deposit, vehicle))
|
||||||
zones.exp.ToDatabase.reportNtuActivity(owner.charId, resourceSilo.Zone.Number, resourceSilo.Owner.GUID.guid, deposit)
|
zones.exp.ToDatabase.reportNtuActivity(owner.charId, resourceSilo.Zone.Number, resourceSilo.Owner.GUID.guid, deposit)
|
||||||
}
|
}
|
||||||
|
|
@ -232,7 +232,7 @@ class ResourceSiloControl(resourceSilo: ResourceSilo)
|
||||||
val amount = (if (trigger > 0) {
|
val amount = (if (trigger > 0) {
|
||||||
// panel glow & orb particles on
|
// panel glow & orb particles on
|
||||||
val zone = resourceSilo.Zone
|
val zone = resourceSilo.Zone
|
||||||
zone.VehicleEvents ! VehicleServiceMessage(
|
zone.VehicleEvents ! MessageEnvelope(
|
||||||
zone.id,
|
zone.id,
|
||||||
PlanetsideAttribute(resourceSilo.GUID, 49, 1)
|
PlanetsideAttribute(resourceSilo.GUID, 49, 1)
|
||||||
)
|
)
|
||||||
|
|
@ -243,7 +243,7 @@ class ResourceSiloControl(resourceSilo: ResourceSilo)
|
||||||
} else {
|
} else {
|
||||||
// panel glow & orb particles off
|
// panel glow & orb particles off
|
||||||
val zone = resourceSilo.Zone
|
val zone = resourceSilo.Zone
|
||||||
zone.VehicleEvents ! VehicleServiceMessage(
|
zone.VehicleEvents ! MessageEnvelope(
|
||||||
zone.id,
|
zone.id,
|
||||||
PlanetsideAttribute(resourceSilo.GUID, 49, 0)
|
PlanetsideAttribute(resourceSilo.GUID, 49, 0)
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ import net.psforever.objects.serverobject.PlanetSideServerObject
|
||||||
import net.psforever.objects.serverobject.doors.Door
|
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.base.envelope.MessageEnvelope
|
||||||
import net.psforever.services.base.message.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.LocalAction
|
import net.psforever.services.local.LocalAction
|
||||||
|
|
@ -184,7 +184,6 @@ object OrbitalShuttlePadControl {
|
||||||
* A message flashes onscreen to explain this reason.
|
* A message flashes onscreen to explain this reason.
|
||||||
* The message will not flash if the door has no expectation of ever opening for a user.
|
* The message will not flash if the door has no expectation of ever opening for a user.
|
||||||
* @see `SendResponse`
|
* @see `SendResponse`
|
||||||
* @see `AvatarServiceMessage`
|
|
||||||
* @see `ChatMessageType`
|
* @see `ChatMessageType`
|
||||||
* @see `ChatMsg`
|
* @see `ChatMsg`
|
||||||
* @see `Player`
|
* @see `Player`
|
||||||
|
|
@ -198,7 +197,7 @@ object OrbitalShuttlePadControl {
|
||||||
val zone = door.Zone
|
val zone = door.Zone
|
||||||
obj match {
|
obj match {
|
||||||
case p: Player if p.Faction == door.Faction =>
|
case p: Player if p.Faction == door.Faction =>
|
||||||
zone.AvatarEvents ! AvatarServiceMessage(
|
zone.AvatarEvents ! MessageEnvelope(
|
||||||
p.Name,
|
p.Name,
|
||||||
SendResponse(
|
SendResponse(
|
||||||
ChatMsg(ChatMessageType.UNK_225, wideContents=false, "", "@DoorWillOpenWhenShuttleReturns", None)
|
ChatMsg(ChatMessageType.UNK_225, wideContents=false, "", "@DoorWillOpenWhenShuttleReturns", None)
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,9 @@ 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.message.GenericObjectAction
|
import net.psforever.packet.game.GenericObjectActionMessage
|
||||||
|
import net.psforever.services.base.envelope.MessageEnvelope
|
||||||
|
import net.psforever.services.base.message.SendResponse
|
||||||
import net.psforever.types.{PlanetSideEmpire, Vector3}
|
import net.psforever.types.{PlanetSideEmpire, Vector3}
|
||||||
|
|
||||||
import scala.collection.mutable
|
import scala.collection.mutable
|
||||||
|
|
@ -107,14 +109,14 @@ trait FacilityHackParticipation extends ParticipationLogic {
|
||||||
if (building.virusId != 8) {
|
if (building.virusId != 8) {
|
||||||
import net.psforever.objects.serverobject.terminals.Terminal
|
import net.psforever.objects.serverobject.terminals.Terminal
|
||||||
import net.psforever.objects.GlobalDefinitions
|
import net.psforever.objects.GlobalDefinitions
|
||||||
import net.psforever.services.avatar.AvatarServiceMessage
|
|
||||||
val mainTerm = building.Amenities.filter(x => x.isInstanceOf[Terminal] && x.Definition == GlobalDefinitions.main_terminal).head.GUID
|
val mainTerm = building.Amenities.filter(x => x.isInstanceOf[Terminal] && x.Definition == GlobalDefinitions.main_terminal).head.GUID
|
||||||
val msg1 = GenericObjectAction(mainTerm, 61)
|
val pkts = SendResponse(List(
|
||||||
val msg2 = GenericObjectAction(mainTerm, 58)
|
GenericObjectActionMessage(mainTerm, 61),
|
||||||
|
GenericObjectActionMessage(mainTerm, 58)
|
||||||
|
))
|
||||||
val events = building.Zone.AvatarEvents
|
val events = building.Zone.AvatarEvents
|
||||||
list.foreach { p =>
|
list.foreach { p =>
|
||||||
events ! AvatarServiceMessage(p.Name, msg1)
|
events ! MessageEnvelope(p.Name, pkts)
|
||||||
events ! AvatarServiceMessage(p.Name, msg2)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ package net.psforever.objects.serverobject.structures.participation
|
||||||
import net.psforever.objects.serverobject.structures.{Building, StructureType}
|
import net.psforever.objects.serverobject.structures.{Building, StructureType}
|
||||||
import net.psforever.objects.sourcing.{PlayerSource, UniquePlayer}
|
import net.psforever.objects.sourcing.{PlayerSource, UniquePlayer}
|
||||||
import net.psforever.objects.zones.{HotSpotInfo, ZoneHotSpotProjector}
|
import net.psforever.objects.zones.{HotSpotInfo, ZoneHotSpotProjector}
|
||||||
import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage}
|
import net.psforever.services.avatar.AvatarAction
|
||||||
import net.psforever.types.{ChatMessageType, PlanetSideEmpire, Vector3}
|
import net.psforever.types.{ChatMessageType, PlanetSideEmpire, Vector3}
|
||||||
import net.psforever.util.Config
|
import net.psforever.util.Config
|
||||||
import akka.pattern.ask
|
import akka.pattern.ask
|
||||||
|
|
@ -15,8 +15,8 @@ import net.psforever.objects.avatar.scoring.Kill
|
||||||
import net.psforever.objects.serverobject.hackable.Hackable
|
import net.psforever.objects.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.envelope.MessageEnvelope
|
||||||
import net.psforever.services.base.message.SendResponse
|
import net.psforever.services.base.message.SendResponse
|
||||||
import net.psforever.services.local.LocalServiceMessage
|
|
||||||
|
|
||||||
import scala.collection.mutable
|
import scala.collection.mutable
|
||||||
import scala.concurrent.duration._
|
import scala.concurrent.duration._
|
||||||
|
|
@ -304,7 +304,7 @@ final case class MajorFacilityHackParticipation(building: Building) extends Faci
|
||||||
finalCep,
|
finalCep,
|
||||||
expType = "cep"
|
expType = "cep"
|
||||||
)
|
)
|
||||||
events ! AvatarServiceMessage(hacker.Name, AvatarAction.AwardCep(hackerId, finalCep))
|
events ! MessageEnvelope(hacker.Name, AvatarAction.AwardCep(hackerId, finalCep))
|
||||||
}*/
|
}*/
|
||||||
//bystanders (cep if squad leader, bep otherwise)
|
//bystanders (cep if squad leader, bep otherwise)
|
||||||
contributingPlayers
|
contributingPlayers
|
||||||
|
|
@ -313,7 +313,7 @@ final case class MajorFacilityHackParticipation(building: Building) extends Faci
|
||||||
val charId = player.CharId
|
val charId = player.CharId
|
||||||
val contributionMultiplier = contributionPerPlayerByTime.getOrElse(charId, 1f)
|
val contributionMultiplier = contributionPerPlayerByTime.getOrElse(charId, 1f)
|
||||||
val outputValue = (finalCep * contributionMultiplier).toLong
|
val outputValue = (finalCep * contributionMultiplier).toLong
|
||||||
events ! AvatarServiceMessage(player.Name, AvatarAction.FacilityCaptureRewards(buildingId, zoneNumber, outputValue))
|
events ! MessageEnvelope(player.Name, AvatarAction.FacilityCaptureRewards(buildingId, zoneNumber, outputValue))
|
||||||
}
|
}
|
||||||
//flag carrier (won't be in soi, but earns cep from capture)
|
//flag carrier (won't be in soi, but earns cep from capture)
|
||||||
flagCarrier.collect {
|
flagCarrier.collect {
|
||||||
|
|
@ -338,7 +338,7 @@ final case class MajorFacilityHackParticipation(building: Building) extends Faci
|
||||||
finalModifiedCep,
|
finalModifiedCep,
|
||||||
expType = "llu"
|
expType = "llu"
|
||||||
)
|
)
|
||||||
events ! AvatarServiceMessage(player.Name, AvatarAction.AwardCep(charId, finalModifiedCep))
|
events ! MessageEnvelope(player.Name, AvatarAction.AwardCep(charId, finalModifiedCep))
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
//no need to calculate a fancy score
|
//no need to calculate a fancy score
|
||||||
|
|
@ -441,7 +441,7 @@ object MajorFacilityHackParticipation {
|
||||||
val events = building.Zone.LocalEvents
|
val events = building.Zone.LocalEvents
|
||||||
val message = SendResponse(msg)
|
val message = SendResponse(msg)
|
||||||
targets.foreach { player =>
|
targets.foreach { player =>
|
||||||
events ! LocalServiceMessage(player.Name, message)
|
events ! MessageEnvelope(player.Name, message)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,8 @@ package net.psforever.objects.serverobject.structures.participation
|
||||||
import net.psforever.objects.serverobject.structures.Building
|
import net.psforever.objects.serverobject.structures.Building
|
||||||
import net.psforever.objects.sourcing.PlayerSource
|
import net.psforever.objects.sourcing.PlayerSource
|
||||||
import net.psforever.objects.zones.exp.ToDatabase
|
import net.psforever.objects.zones.exp.ToDatabase
|
||||||
import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage}
|
import net.psforever.services.avatar.AvatarAction
|
||||||
|
import net.psforever.services.base.envelope.MessageEnvelope
|
||||||
import net.psforever.types.{PlanetSideEmpire, Vector3}
|
import net.psforever.types.{PlanetSideEmpire, Vector3}
|
||||||
import net.psforever.util.Config
|
import net.psforever.util.Config
|
||||||
|
|
||||||
|
|
@ -144,7 +145,7 @@ final case class TowerHackParticipation(building: Building) extends FacilityHack
|
||||||
//7. reward participants
|
//7. reward participants
|
||||||
//Classically, only players in the SOI are rewarded
|
//Classically, only players in the SOI are rewarded
|
||||||
//terminal hacker (always cep)
|
//terminal hacker (always cep)
|
||||||
events ! AvatarServiceMessage(hacker.Name, AvatarAction.AwardCep(hacker.CharId, finalCep))
|
events ! MessageEnvelope(hacker.Name, AvatarAction.AwardCep(hacker.CharId, finalCep))
|
||||||
ToDatabase.reportFacilityCapture(
|
ToDatabase.reportFacilityCapture(
|
||||||
hackerId,
|
hackerId,
|
||||||
zoneNumber,
|
zoneNumber,
|
||||||
|
|
@ -160,7 +161,7 @@ final case class TowerHackParticipation(building: Building) extends FacilityHack
|
||||||
val contributionTimeMultiplier = contributionPerPlayerByTime.getOrElse(charId, 0.5f)
|
val contributionTimeMultiplier = contributionPerPlayerByTime.getOrElse(charId, 0.5f)
|
||||||
val contributionDistanceMultiplier = contributionPerPlayerByDistanceFromGoal.getOrElse(charId, 0.5f)
|
val contributionDistanceMultiplier = contributionPerPlayerByDistanceFromGoal.getOrElse(charId, 0.5f)
|
||||||
val outputValue = (finalCep * contributionTimeMultiplier * contributionDistanceMultiplier).toLong
|
val outputValue = (finalCep * contributionTimeMultiplier * contributionDistanceMultiplier).toLong
|
||||||
events ! AvatarServiceMessage(
|
events ! MessageEnvelope(
|
||||||
player.Name,
|
player.Name,
|
||||||
AvatarAction.FacilityCaptureRewards(buildingId, zoneNumber, outputValue)
|
AvatarAction.FacilityCaptureRewards(buildingId, zoneNumber, outputValue)
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -6,6 +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.envelope.MessageEnvelope
|
||||||
import net.psforever.services.base.message.{PlanetsideAttribute, SendResponse}
|
import net.psforever.services.base.message.{PlanetsideAttribute, SendResponse}
|
||||||
import net.psforever.services.local.support.{HackClearActor, HackClearEnvelope}
|
import net.psforever.services.local.support.{HackClearActor, HackClearEnvelope}
|
||||||
import org.log4s.Logger
|
import org.log4s.Logger
|
||||||
|
|
@ -26,9 +27,7 @@ import net.psforever.objects.serverobject.structures.{Building, PoweredAmenityCo
|
||||||
import net.psforever.objects.vital.{HealFromTerminal, RepairFromTerminal, Vitality}
|
import net.psforever.objects.vital.{HealFromTerminal, RepairFromTerminal, Vitality}
|
||||||
import net.psforever.objects.zones.ZoneAware
|
import net.psforever.objects.zones.ZoneAware
|
||||||
import net.psforever.packet.game.InventoryStateMessage
|
import net.psforever.packet.game.InventoryStateMessage
|
||||||
import net.psforever.services.avatar.AvatarServiceMessage
|
import net.psforever.services.local.LocalAction
|
||||||
import net.psforever.services.local.{LocalAction, LocalServiceMessage}
|
|
||||||
import net.psforever.services.vehicle.VehicleServiceMessage
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An `Actor` that handles messages being dispatched to a specific `ProximityTerminal`.
|
* An `Actor` that handles messages being dispatched to a specific `ProximityTerminal`.
|
||||||
|
|
@ -183,7 +182,7 @@ class ProximityTerminalControl(term: Terminal with ProximityUnit)
|
||||||
ProximityTerminalControl.TerminalAction()
|
ProximityTerminalControl.TerminalAction()
|
||||||
)
|
)
|
||||||
val zone = TerminalObject.Zone
|
val zone = TerminalObject.Zone
|
||||||
zone.LocalEvents ! LocalServiceMessage(zone.id, LocalAction.ProximityTerminalEffect(TerminalObject.GUID, effectState = true))
|
zone.LocalEvents ! MessageEnvelope(zone.id, LocalAction.ProximityTerminalEffect(TerminalObject.GUID, effectState = true))
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
log.warn(s"ProximityTerminal.Use: $target was rejected by unit ${term.Definition.Name}@${term.GUID.guid}")
|
log.warn(s"ProximityTerminal.Use: $target was rejected by unit ${term.Definition.Name}@${term.GUID.guid}")
|
||||||
|
|
@ -204,7 +203,7 @@ class ProximityTerminalControl(term: Terminal with ProximityUnit)
|
||||||
if (term.NumberUsers == 0 && hadUsers) {
|
if (term.NumberUsers == 0 && hadUsers) {
|
||||||
terminalAction.cancel()
|
terminalAction.cancel()
|
||||||
val zone = TerminalObject.Zone
|
val zone = TerminalObject.Zone
|
||||||
zone.LocalEvents ! LocalServiceMessage(zone.id, LocalAction.ProximityTerminalEffect(TerminalObject.GUID, effectState = false))
|
zone.LocalEvents ! MessageEnvelope(zone.id, LocalAction.ProximityTerminalEffect(TerminalObject.GUID, effectState = false))
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
log.debug(
|
log.debug(
|
||||||
|
|
@ -220,7 +219,7 @@ class ProximityTerminalControl(term: Terminal with ProximityUnit)
|
||||||
if (callbacks.nonEmpty) {
|
if (callbacks.nonEmpty) {
|
||||||
callbacks.clear()
|
callbacks.clear()
|
||||||
val zone = TerminalObject.Zone
|
val zone = TerminalObject.Zone
|
||||||
zone.LocalEvents ! LocalServiceMessage(zone.id, LocalAction.ProximityTerminalEffect(TerminalObject.GUID, effectState = true))
|
zone.LocalEvents ! MessageEnvelope(zone.id, LocalAction.ProximityTerminalEffect(TerminalObject.GUID, effectState = true))
|
||||||
}
|
}
|
||||||
//clear hack state
|
//clear hack state
|
||||||
if (term.HackedBy.nonEmpty) {
|
if (term.HackedBy.nonEmpty) {
|
||||||
|
|
@ -351,7 +350,7 @@ object ProximityTerminalControl {
|
||||||
|
|
||||||
if (oldMax < maxHealthCap) {
|
if (oldMax < maxHealthCap) {
|
||||||
target.MaxHealth = newMax
|
target.MaxHealth = newMax
|
||||||
zone.AvatarEvents ! AvatarServiceMessage(
|
zone.AvatarEvents ! MessageEnvelope(
|
||||||
zone.id,
|
zone.id,
|
||||||
PlanetsideAttribute(target.GUID, 1, newMax)
|
PlanetsideAttribute(target.GUID, 1, newMax)
|
||||||
)
|
)
|
||||||
|
|
@ -366,7 +365,7 @@ object ProximityTerminalControl {
|
||||||
|
|
||||||
def PlayerHealthCallback(target: PlanetSideGameObject with Vitality with ZoneAware): Unit = {
|
def PlayerHealthCallback(target: PlanetSideGameObject with Vitality with ZoneAware): Unit = {
|
||||||
val zone = target.Zone
|
val zone = target.Zone
|
||||||
zone.AvatarEvents ! AvatarServiceMessage(
|
zone.AvatarEvents ! MessageEnvelope(
|
||||||
zone.id,
|
zone.id,
|
||||||
PlanetsideAttribute(target.GUID, 0, target.Health)
|
PlanetsideAttribute(target.GUID, 0, target.Health)
|
||||||
)
|
)
|
||||||
|
|
@ -374,7 +373,7 @@ object ProximityTerminalControl {
|
||||||
|
|
||||||
def VehicleHealthCallback(target: PlanetSideGameObject with Vitality with ZoneAware): Unit = {
|
def VehicleHealthCallback(target: PlanetSideGameObject with Vitality with ZoneAware): Unit = {
|
||||||
val zone = target.Zone
|
val zone = target.Zone
|
||||||
zone.VehicleEvents ! VehicleServiceMessage(
|
zone.VehicleEvents ! MessageEnvelope(
|
||||||
zone.id,
|
zone.id,
|
||||||
PlanetsideAttribute(target.GUID, 0, target.Health)
|
PlanetsideAttribute(target.GUID, 0, target.Health)
|
||||||
)
|
)
|
||||||
|
|
@ -405,7 +404,7 @@ object ProximityTerminalControl {
|
||||||
target.Armor = armor + finalRepairAmount
|
target.Armor = armor + finalRepairAmount
|
||||||
target.LogActivity(RepairFromTerminal(AmenitySource(terminal), finalRepairAmount))
|
target.LogActivity(RepairFromTerminal(AmenitySource(terminal), finalRepairAmount))
|
||||||
val zone = target.Zone
|
val zone = target.Zone
|
||||||
zone.AvatarEvents ! AvatarServiceMessage(
|
zone.AvatarEvents ! MessageEnvelope(
|
||||||
zone.id,
|
zone.id,
|
||||||
PlanetsideAttribute(target.GUID, 4, target.Armor)
|
PlanetsideAttribute(target.GUID, 4, target.Armor)
|
||||||
)
|
)
|
||||||
|
|
@ -434,7 +433,7 @@ object ProximityTerminalControl {
|
||||||
val channel = target.Name
|
val channel = target.Name
|
||||||
ancient.foreach { case (weapon, slots) =>
|
ancient.foreach { case (weapon, slots) =>
|
||||||
slots.foreach { slot =>
|
slots.foreach { slot =>
|
||||||
events ! AvatarServiceMessage(
|
events ! MessageEnvelope(
|
||||||
channel,
|
channel,
|
||||||
SendResponse(InventoryStateMessage(slot.Box.GUID, weapon.GUID, slot.Box.Capacity))
|
SendResponse(InventoryStateMessage(slot.Box.GUID, weapon.GUID, slot.Box.Capacity))
|
||||||
)
|
)
|
||||||
|
|
@ -460,7 +459,7 @@ object ProximityTerminalControl {
|
||||||
val channel = target.Actor.toString
|
val channel = target.Actor.toString
|
||||||
result.foreach { case (weapon, slots) =>
|
result.foreach { case (weapon, slots) =>
|
||||||
slots.foreach { slot =>
|
slots.foreach { slot =>
|
||||||
events ! VehicleServiceMessage(
|
events ! MessageEnvelope(
|
||||||
channel,
|
channel,
|
||||||
SendResponse(InventoryStateMessage(slot.Box.GUID, weapon.GUID, slot.Box.Capacity))
|
SendResponse(InventoryStateMessage(slot.Box.GUID, weapon.GUID, slot.Box.Capacity))
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -6,10 +6,11 @@ import net.psforever.objects.serverobject.hackable.GenericHackables
|
||||||
import net.psforever.objects.serverobject.structures.{Building, StructureType, WarpGate}
|
import net.psforever.objects.serverobject.structures.{Building, StructureType, WarpGate}
|
||||||
import net.psforever.objects.serverobject.{CommonMessages, PlanetSideServerObject}
|
import net.psforever.objects.serverobject.{CommonMessages, PlanetSideServerObject}
|
||||||
import net.psforever.objects.sourcing.PlayerSource
|
import net.psforever.objects.sourcing.PlayerSource
|
||||||
import net.psforever.services.local.{LocalAction, LocalServiceMessage}
|
import net.psforever.services.local.LocalAction
|
||||||
import net.psforever.services.local.support.HackCaptureActor
|
import net.psforever.services.local.support.HackCaptureActor
|
||||||
import net.psforever.services.local.support.CaptureEnvelope
|
import net.psforever.services.local.support.CaptureEnvelope
|
||||||
import net.psforever.types.PlanetSideEmpire
|
import net.psforever.types.PlanetSideEmpire
|
||||||
|
import net.psforever.services.base.envelope.MessageEnvelope
|
||||||
|
|
||||||
import scala.concurrent.duration._
|
import scala.concurrent.duration._
|
||||||
import scala.util.{Failure, Success}
|
import scala.util.{Failure, Success}
|
||||||
|
|
@ -41,7 +42,7 @@ object CaptureTerminals {
|
||||||
val zoneid = zone.id
|
val zoneid = zone.id
|
||||||
val events = zone.LocalEvents
|
val events = zone.LocalEvents
|
||||||
val isResecured = hackingPlayer.Faction == target.Faction
|
val isResecured = hackingPlayer.Faction == target.Faction
|
||||||
events ! LocalServiceMessage(
|
events ! MessageEnvelope(
|
||||||
zoneid,
|
zoneid,
|
||||||
hackingPlayer.GUID,
|
hackingPlayer.GUID,
|
||||||
LocalAction.TriggerSound(target.HackSound, hackingPlayer.Position, 30, 0.49803925f)
|
LocalAction.TriggerSound(target.HackSound, hackingPlayer.Position, 30, 0.49803925f)
|
||||||
|
|
|
||||||
|
|
@ -16,9 +16,9 @@ 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.envelope.MessageEnvelope
|
||||||
import net.psforever.services.base.message.SetEmpire
|
import net.psforever.services.base.message.SetEmpire
|
||||||
import net.psforever.services.local.LocalServiceMessage
|
import net.psforever.services.vehicle.VehicleAction
|
||||||
import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage}
|
|
||||||
import net.psforever.types.{PlanetSideEmpire, PlanetSideGUID}
|
import net.psforever.types.{PlanetSideEmpire, PlanetSideGUID}
|
||||||
|
|
||||||
import scala.annotation.unused
|
import scala.annotation.unused
|
||||||
|
|
@ -150,7 +150,7 @@ class ImplantTerminalMechControl(mech: ImplantTerminalMech)
|
||||||
case player =>
|
case player =>
|
||||||
seat.unmount(player)
|
seat.unmount(player)
|
||||||
player.VehicleSeated = None
|
player.VehicleSeated = None
|
||||||
events ! VehicleServiceMessage(zoneId, player.GUID, VehicleAction.KickPassenger(4, unk2=false, guid))
|
events ! MessageEnvelope(zoneId, player.GUID, VehicleAction.KickPassenger(4, unk2=false, guid))
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
@ -174,7 +174,7 @@ class ImplantTerminalMechControl(mech: ImplantTerminalMech)
|
||||||
if (player.Faction == localFaction) {
|
if (player.Faction == localFaction) {
|
||||||
if (mech.Owner.asInstanceOf[Building].CaptureTerminalIsHacked) {
|
if (mech.Owner.asInstanceOf[Building].CaptureTerminalIsHacked) {
|
||||||
//this is actually futile, as a hacked base does not grant access to the terminal
|
//this is actually futile, as a hacked base does not grant access to the terminal
|
||||||
events ! LocalServiceMessage(localFaction.toString, SetEmpire(guid, localFaction))
|
events ! MessageEnvelope(localFaction.toString, SetEmpire(guid, localFaction))
|
||||||
}
|
}
|
||||||
kickAllOccupantsNotOfFaction(zone, guid, mech, localFaction)
|
kickAllOccupantsNotOfFaction(zone, guid, mech, localFaction)
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -226,7 +226,7 @@ class ImplantTerminalMechControl(mech: ImplantTerminalMech)
|
||||||
): Unit = {
|
): Unit = {
|
||||||
val events = zone.LocalEvents
|
val events = zone.LocalEvents
|
||||||
opposingFactionsAre(setToFaction).foreach { faction =>
|
opposingFactionsAre(setToFaction).foreach { faction =>
|
||||||
events ! LocalServiceMessage(faction.toString, SetEmpire(guid, faction))
|
events ! MessageEnvelope(faction.toString, SetEmpire(guid, faction))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -237,7 +237,7 @@ class ImplantTerminalMechControl(mech: ImplantTerminalMech)
|
||||||
): Unit = {
|
): Unit = {
|
||||||
val events = zone.LocalEvents
|
val events = zone.LocalEvents
|
||||||
opposingFactionsAre(setToFaction).foreach { faction =>
|
opposingFactionsAre(setToFaction).foreach { faction =>
|
||||||
events ! LocalServiceMessage(faction.toString, SetEmpire(guid, setToFaction))
|
events ! MessageEnvelope(faction.toString, SetEmpire(guid, setToFaction))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -278,7 +278,7 @@ class ImplantTerminalMechControl(mech: ImplantTerminalMech)
|
||||||
case player if test(player.Faction) =>
|
case player if test(player.Faction) =>
|
||||||
seat.unmount(player)
|
seat.unmount(player)
|
||||||
player.VehicleSeated = None
|
player.VehicleSeated = None
|
||||||
events ! VehicleServiceMessage(zoneId, player.GUID, VehicleAction.KickPassenger(4, unk2 = false, guid))
|
events ! MessageEnvelope(zoneId, player.GUID, VehicleAction.KickPassenger(4, unk2 = false, guid))
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -13,9 +13,10 @@ import net.psforever.objects.serverobject.turret.auto.AutomatedTurret.Target
|
||||||
import net.psforever.objects.serverobject.turret.auto.{AffectedByAutomaticTurretFire, AutomatedTurret, AutomatedTurretBehavior}
|
import net.psforever.objects.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.envelope.MessageEnvelope
|
||||||
import net.psforever.services.base.message.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
|
||||||
import net.psforever.types.{BailType, PlanetSideEmpire, PlanetSideGUID}
|
import net.psforever.types.{BailType, PlanetSideEmpire, PlanetSideGUID}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -179,7 +180,7 @@ class FacilityTurretControl(turret: FacilityTurret)
|
||||||
seat.unmount(player)
|
seat.unmount(player)
|
||||||
player.VehicleSeated = None
|
player.VehicleSeated = None
|
||||||
if (player.HasGUID) {
|
if (player.HasGUID) {
|
||||||
events ! VehicleServiceMessage(zoneId, player.GUID, VehicleAction.KickPassenger(4, unk2=false, guid))
|
events ! MessageEnvelope(zoneId, player.GUID, VehicleAction.KickPassenger(4, unk2=false, guid))
|
||||||
}
|
}
|
||||||
case None => ()
|
case None => ()
|
||||||
}
|
}
|
||||||
|
|
@ -237,7 +238,7 @@ class FacilityTurretControl(turret: FacilityTurret)
|
||||||
.flatMap(_.Equipment)
|
.flatMap(_.Equipment)
|
||||||
.collect { case weapon: Tool if weapon.FireModeIndex > 0 =>
|
.collect { case weapon: Tool if weapon.FireModeIndex > 0 =>
|
||||||
weapon.FireModeIndex = 0
|
weapon.FireModeIndex = 0
|
||||||
events ! VehicleServiceMessage(
|
events ! MessageEnvelope(
|
||||||
zoneid,
|
zoneid,
|
||||||
SendResponse(ChangeFireModeMessage(weapon.GUID, 0))
|
SendResponse(ChangeFireModeMessage(weapon.GUID, 0))
|
||||||
)
|
)
|
||||||
|
|
@ -341,7 +342,7 @@ class FacilityTurretControl(turret: FacilityTurret)
|
||||||
case player =>
|
case player =>
|
||||||
seat.unmount(player)
|
seat.unmount(player)
|
||||||
player.VehicleSeated = None
|
player.VehicleSeated = None
|
||||||
events ! VehicleServiceMessage(zoneId, player.GUID, VehicleAction.KickPassenger(seat_num, unk2=true, guid))
|
events ! MessageEnvelope(zoneId, player.GUID, VehicleAction.KickPassenger(seat_num, unk2=true, guid))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
captureTerminalChanges(terminal, super.captureTerminalIsHacked, actionDelays = 3000L)
|
captureTerminalChanges(terminal, super.captureTerminalIsHacked, actionDelays = 3000L)
|
||||||
|
|
|
||||||
|
|
@ -8,8 +8,9 @@ import net.psforever.objects.serverobject.affinity.FactionAffinityBehavior
|
||||||
import net.psforever.objects.serverobject.damage.{Damageable, DamageableWeaponTurret}
|
import net.psforever.objects.serverobject.damage.{Damageable, DamageableWeaponTurret}
|
||||||
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.packet.game.PlanetsideAttributeMessage
|
||||||
import net.psforever.services.base.message.PlanetsideAttribute
|
import net.psforever.services.base.envelope.MessageEnvelope
|
||||||
|
import net.psforever.services.base.message.SendResponse
|
||||||
|
|
||||||
trait TurretControl
|
trait TurretControl
|
||||||
extends Actor
|
extends Actor
|
||||||
|
|
@ -40,8 +41,10 @@ trait TurretControl
|
||||||
val zoneId = zone.id
|
val zoneId = zone.id
|
||||||
val events = zone.AvatarEvents
|
val events = zone.AvatarEvents
|
||||||
val tguid = TurretObject.GUID
|
val tguid = TurretObject.GUID
|
||||||
events ! AvatarServiceMessage(zoneId, PlanetsideAttribute(tguid, 50, 0))
|
events ! MessageEnvelope(
|
||||||
events ! AvatarServiceMessage(zoneId, PlanetsideAttribute(tguid, 51, 0))
|
zoneId,
|
||||||
|
SendResponse(List(PlanetsideAttributeMessage(tguid, 50, 0), PlanetsideAttributeMessage(tguid, 51, 0)))
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -57,7 +60,9 @@ trait TurretControl
|
||||||
val tguid = target.GUID
|
val tguid = target.GUID
|
||||||
CancelJammeredSound(target)
|
CancelJammeredSound(target)
|
||||||
CancelJammeredStatus(target)
|
CancelJammeredStatus(target)
|
||||||
events ! AvatarServiceMessage(zoneId, PlanetsideAttribute(tguid, 50, 1))
|
events ! MessageEnvelope(
|
||||||
events ! AvatarServiceMessage(zoneId, PlanetsideAttribute(tguid, 51, 1))
|
zoneId,
|
||||||
|
SendResponse(List(PlanetsideAttributeMessage(tguid, 50, 1), PlanetsideAttributeMessage(tguid, 51, 1)))
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,8 @@ package net.psforever.objects.serverobject.turret
|
||||||
import akka.actor.Cancellable
|
import akka.actor.Cancellable
|
||||||
import net.psforever.objects.serverobject.ServerObjectControl
|
import net.psforever.objects.serverobject.ServerObjectControl
|
||||||
import net.psforever.objects.{Default, Player, Tool}
|
import net.psforever.objects.{Default, Player, Tool}
|
||||||
import net.psforever.services.local.{LocalAction, LocalServiceMessage}
|
import net.psforever.services.base.envelope.MessageEnvelope
|
||||||
|
import net.psforever.services.local.LocalAction
|
||||||
import net.psforever.types.Vector3
|
import net.psforever.types.Vector3
|
||||||
|
|
||||||
import scala.concurrent.ExecutionContext.Implicits.global
|
import scala.concurrent.ExecutionContext.Implicits.global
|
||||||
|
|
@ -51,7 +52,7 @@ class VanuSentryControl(turret: FacilityTurret)
|
||||||
val seat = TurretObject.Seat(0).get
|
val seat = TurretObject.Seat(0).get
|
||||||
seat.occupant.collect {
|
seat.occupant.collect {
|
||||||
case player: Player =>
|
case player: Player =>
|
||||||
TurretObject.Zone.LocalEvents ! LocalServiceMessage(
|
TurretObject.Zone.LocalEvents ! MessageEnvelope(
|
||||||
TurretObject.Zone.id,
|
TurretObject.Zone.id,
|
||||||
player.GUID,
|
player.GUID,
|
||||||
LocalAction.RechargeVehicleWeapon(TurretObject.GUID, weapon.GUID)
|
LocalAction.RechargeVehicleWeapon(TurretObject.GUID, weapon.GUID)
|
||||||
|
|
|
||||||
|
|
@ -5,11 +5,11 @@ import net.psforever.objects.avatar.Certification
|
||||||
import net.psforever.objects.ce.Deployable
|
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.base.envelope.MessageEnvelope
|
||||||
import net.psforever.services.base.message.{SendResponse, SetEmpire}
|
import net.psforever.services.base.message.{SendResponse, SetEmpire}
|
||||||
import net.psforever.services.local.{LocalAction, LocalServiceMessage}
|
import net.psforever.services.local.LocalAction
|
||||||
import net.psforever.services.vehicle.support.{TurretEnvelope, TurretUpgrader}
|
import net.psforever.services.vehicle.support.{TurretEnvelope, TurretUpgrader}
|
||||||
import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage}
|
import net.psforever.services.vehicle.VehicleAction
|
||||||
import net.psforever.types.PlanetSideGUID
|
import net.psforever.types.PlanetSideGUID
|
||||||
|
|
||||||
object WeaponTurrets {
|
object WeaponTurrets {
|
||||||
|
|
@ -31,7 +31,7 @@ object WeaponTurrets {
|
||||||
upgrade: TurretUpgrade.Value
|
upgrade: TurretUpgrade.Value
|
||||||
)(): Unit = {
|
)(): Unit = {
|
||||||
tool.Magazine = 0
|
tool.Magazine = 0
|
||||||
target.Zone.AvatarEvents ! AvatarServiceMessage(
|
target.Zone.AvatarEvents ! MessageEnvelope(
|
||||||
user.Name,
|
user.Name,
|
||||||
SendResponse(InventoryStateMessage(tool.AmmoSlot.Box.GUID, tool.GUID, 0))
|
SendResponse(InventoryStateMessage(tool.AmmoSlot.Box.GUID, tool.GUID, 0))
|
||||||
)
|
)
|
||||||
|
|
@ -85,7 +85,7 @@ object WeaponTurrets {
|
||||||
turret.UpdateTurretUpgradeTime()
|
turret.UpdateTurretUpgradeTime()
|
||||||
(HackState.Ongoing, progress.toInt)
|
(HackState.Ongoing, progress.toInt)
|
||||||
}
|
}
|
||||||
turret.Zone.AvatarEvents ! AvatarServiceMessage(
|
turret.Zone.AvatarEvents ! MessageEnvelope(
|
||||||
tplayer.Name,
|
tplayer.Name,
|
||||||
SendResponse(
|
SendResponse(
|
||||||
HackMessage(progressType, turret.GUID, tplayer.GUID, progressGrade, -1f, progressState, HackState7.Unk8)
|
HackMessage(progressType, turret.GUID, tplayer.GUID, progressGrade, -1f, progressState, HackState7.Unk8)
|
||||||
|
|
@ -105,7 +105,7 @@ object WeaponTurrets {
|
||||||
player: Player =>
|
player: Player =>
|
||||||
seat.unmount(player)
|
seat.unmount(player)
|
||||||
player.VehicleSeated = None
|
player.VehicleSeated = None
|
||||||
zone.VehicleEvents ! VehicleServiceMessage(
|
zone.VehicleEvents ! MessageEnvelope(
|
||||||
zone.id,
|
zone.id,
|
||||||
player.GUID,
|
player.GUID,
|
||||||
VehicleAction.KickPassenger(4, unk2 = false, target.GUID)
|
VehicleAction.KickPassenger(4, unk2 = false, target.GUID)
|
||||||
|
|
@ -116,11 +116,11 @@ object WeaponTurrets {
|
||||||
target.OwnerGuid = None
|
target.OwnerGuid = None
|
||||||
target.Actor ! Deployable.Ownership(hacker)
|
target.Actor ! Deployable.Ownership(hacker)
|
||||||
//convert faction
|
//convert faction
|
||||||
zone.AvatarEvents ! AvatarServiceMessage(
|
zone.AvatarEvents ! MessageEnvelope(
|
||||||
zone.id,
|
zone.id,
|
||||||
SetEmpire(target.GUID, hacker.Faction)
|
SetEmpire(target.GUID, hacker.Faction)
|
||||||
)
|
)
|
||||||
zone.LocalEvents ! LocalServiceMessage(
|
zone.LocalEvents ! MessageEnvelope(
|
||||||
zone.id,
|
zone.id,
|
||||||
hacker.GUID,
|
hacker.GUID,
|
||||||
LocalAction.TriggerSound(target.HackSound, target.Position, 30, 0.49803925f)
|
LocalAction.TriggerSound(target.HackSound, target.Position, 30, 0.49803925f)
|
||||||
|
|
|
||||||
|
|
@ -18,8 +18,8 @@ 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.envelope.MessageEnvelope
|
||||||
import net.psforever.services.base.message.SendResponse
|
import net.psforever.services.base.message.SendResponse
|
||||||
import net.psforever.services.local.LocalServiceMessage
|
|
||||||
import net.psforever.types.{PlanetSideGUID, Vector3}
|
import net.psforever.types.{PlanetSideGUID, Vector3}
|
||||||
|
|
||||||
import scala.concurrent.ExecutionContext.Implicits.global
|
import scala.concurrent.ExecutionContext.Implicits.global
|
||||||
|
|
@ -890,7 +890,7 @@ object AutomatedTurretBehavior {
|
||||||
* @param list target's globally unique identifier, in list form
|
* @param list target's globally unique identifier, in list form
|
||||||
*/
|
*/
|
||||||
def startTracking(zone: Zone, channel: String, turretGuid: PlanetSideGUID, list: List[PlanetSideGUID]): Unit = {
|
def startTracking(zone: Zone, channel: String, turretGuid: PlanetSideGUID, list: List[PlanetSideGUID]): Unit = {
|
||||||
zone.LocalEvents ! LocalServiceMessage(
|
zone.LocalEvents ! MessageEnvelope(
|
||||||
channel,
|
channel,
|
||||||
SendResponse(ObjectDetectedMessage(turretGuid, turretGuid, 0, list))
|
SendResponse(ObjectDetectedMessage(turretGuid, turretGuid, 0, list))
|
||||||
)
|
)
|
||||||
|
|
@ -903,7 +903,7 @@ object AutomatedTurretBehavior {
|
||||||
* @param turretGuid turret
|
* @param turretGuid turret
|
||||||
*/
|
*/
|
||||||
def stopTracking(zone: Zone, channel: String, turretGuid: PlanetSideGUID): Unit = {
|
def stopTracking(zone: Zone, channel: String, turretGuid: PlanetSideGUID): Unit = {
|
||||||
zone.LocalEvents ! LocalServiceMessage(
|
zone.LocalEvents ! MessageEnvelope(
|
||||||
channel,
|
channel,
|
||||||
SendResponse(ObjectDetectedMessage(turretGuid, turretGuid, 0, noTargets))
|
SendResponse(ObjectDetectedMessage(turretGuid, turretGuid, 0, noTargets))
|
||||||
)
|
)
|
||||||
|
|
@ -916,7 +916,7 @@ object AutomatedTurretBehavior {
|
||||||
* @param weaponGuid turret's weapon
|
* @param weaponGuid turret's weapon
|
||||||
*/
|
*/
|
||||||
def startShooting(zone: Zone, channel: String, weaponGuid: PlanetSideGUID): Unit = {
|
def startShooting(zone: Zone, channel: String, weaponGuid: PlanetSideGUID): Unit = {
|
||||||
zone.LocalEvents ! LocalServiceMessage(
|
zone.LocalEvents ! MessageEnvelope(
|
||||||
channel,
|
channel,
|
||||||
SendResponse(ChangeFireStateMessage_Start(weaponGuid))
|
SendResponse(ChangeFireStateMessage_Start(weaponGuid))
|
||||||
)
|
)
|
||||||
|
|
@ -929,7 +929,7 @@ object AutomatedTurretBehavior {
|
||||||
* @param weaponGuid turret's weapon
|
* @param weaponGuid turret's weapon
|
||||||
*/
|
*/
|
||||||
def stopShooting(zone: Zone, channel: String, weaponGuid: PlanetSideGUID): Unit = {
|
def stopShooting(zone: Zone, channel: String, weaponGuid: PlanetSideGUID): Unit = {
|
||||||
zone.LocalEvents ! LocalServiceMessage(
|
zone.LocalEvents ! MessageEnvelope(
|
||||||
channel,
|
channel,
|
||||||
SendResponse(ChangeFireStateMessage_Stop(weaponGuid))
|
SendResponse(ChangeFireStateMessage_Stop(weaponGuid))
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -10,10 +10,11 @@ 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._
|
import net.psforever.objects._
|
||||||
import net.psforever.types.DriveState
|
import net.psforever.types.DriveState
|
||||||
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.message.PlanetsideAttribute
|
import net.psforever.packet.game.PlanetsideAttributeMessage
|
||||||
|
import net.psforever.services.base.envelope.MessageEnvelope
|
||||||
|
import net.psforever.services.base.message.{PlanetsideAttribute, SendResponse}
|
||||||
|
|
||||||
import scala.concurrent.ExecutionContext.Implicits.global
|
import scala.concurrent.ExecutionContext.Implicits.global
|
||||||
import scala.concurrent.duration._
|
import scala.concurrent.duration._
|
||||||
|
|
@ -33,7 +34,7 @@ trait AntTransferBehavior extends TransferBehavior with NtuStorageBehavior {
|
||||||
def ActivatePanelsForChargingEvent(vehicle: NtuContainer): Unit = {
|
def ActivatePanelsForChargingEvent(vehicle: NtuContainer): Unit = {
|
||||||
val obj = ChargeTransferObject
|
val obj = ChargeTransferObject
|
||||||
val zone = obj.Zone
|
val zone = obj.Zone
|
||||||
zone.VehicleEvents ! VehicleServiceMessage(
|
zone.VehicleEvents ! MessageEnvelope(
|
||||||
zone.id,
|
zone.id,
|
||||||
PlanetsideAttribute(vehicle.GUID, 52, 1L)
|
PlanetsideAttribute(vehicle.GUID, 52, 1L)
|
||||||
) // panel glow on
|
) // panel glow on
|
||||||
|
|
@ -43,7 +44,7 @@ trait AntTransferBehavior extends TransferBehavior with NtuStorageBehavior {
|
||||||
def StartNtuChargingEvent(vehicle: NtuContainer): Unit = {
|
def StartNtuChargingEvent(vehicle: NtuContainer): Unit = {
|
||||||
val obj = ChargeTransferObject
|
val obj = ChargeTransferObject
|
||||||
val zone = obj.Zone
|
val zone = obj.Zone
|
||||||
zone.VehicleEvents ! VehicleServiceMessage(
|
zone.VehicleEvents ! MessageEnvelope(
|
||||||
zone.id,
|
zone.id,
|
||||||
PlanetsideAttribute(vehicle.GUID, 49, 1L)
|
PlanetsideAttribute(vehicle.GUID, 49, 1L)
|
||||||
) // orb particle effect on
|
) // orb particle effect on
|
||||||
|
|
@ -52,7 +53,7 @@ trait AntTransferBehavior extends TransferBehavior with NtuStorageBehavior {
|
||||||
def UpdateNtuUI(vehicle: Vehicle with NtuContainer): Unit = {
|
def UpdateNtuUI(vehicle: Vehicle with NtuContainer): Unit = {
|
||||||
if (vehicle.Seats.values.exists(_.isOccupied)) {
|
if (vehicle.Seats.values.exists(_.isOccupied)) {
|
||||||
val display = vehicle.NtuCapacitorScaled.toLong
|
val display = vehicle.NtuCapacitorScaled.toLong
|
||||||
vehicle.Zone.VehicleEvents ! VehicleServiceMessage(
|
vehicle.Zone.VehicleEvents ! MessageEnvelope(
|
||||||
vehicle.Actor.toString,
|
vehicle.Actor.toString,
|
||||||
PlanetsideAttribute(vehicle.GUID, 45, display)
|
PlanetsideAttribute(vehicle.GUID, 45, display)
|
||||||
)
|
)
|
||||||
|
|
@ -158,16 +159,14 @@ trait AntTransferBehavior extends TransferBehavior with NtuStorageBehavior {
|
||||||
val zoneId = zone.id
|
val zoneId = zone.id
|
||||||
val events = zone.VehicleEvents
|
val events = zone.VehicleEvents
|
||||||
if (transferEvent == TransferBehavior.Event.Charging) {
|
if (transferEvent == TransferBehavior.Event.Charging) {
|
||||||
events ! VehicleServiceMessage(
|
//1. panel glow off
|
||||||
|
//2. orb particle effect off
|
||||||
|
events ! MessageEnvelope(
|
||||||
zoneId,
|
zoneId,
|
||||||
PlanetsideAttribute(vguid, 52, 0L)
|
SendResponse(List(PlanetsideAttributeMessage(vguid, 52, 0L), PlanetsideAttributeMessage(vguid, 49, 0L)))
|
||||||
) // panel glow off
|
)
|
||||||
events ! VehicleServiceMessage(
|
|
||||||
zoneId,
|
|
||||||
PlanetsideAttribute(vguid, 49, 0L)
|
|
||||||
) // orb particle effect off
|
|
||||||
} else if (transferEvent == TransferBehavior.Event.Discharging) {
|
} else if (transferEvent == TransferBehavior.Event.Discharging) {
|
||||||
events ! VehicleServiceMessage(
|
events ! MessageEnvelope(
|
||||||
zoneId,
|
zoneId,
|
||||||
PlanetsideAttribute(vguid, 52, 0L)
|
PlanetsideAttribute(vguid, 52, 0L)
|
||||||
) // panel glow off
|
) // panel glow off
|
||||||
|
|
|
||||||
|
|
@ -11,8 +11,9 @@ import net.psforever.objects.equipment.EquipmentSlot
|
||||||
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.services.base.envelope.MessageEnvelope
|
||||||
import net.psforever.types.{PlanetSideEmpire, PlanetSideGUID, Vector3}
|
import net.psforever.types.{PlanetSideEmpire, PlanetSideGUID, Vector3}
|
||||||
import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage}
|
import net.psforever.services.vehicle.VehicleAction
|
||||||
|
|
||||||
import scala.concurrent.ExecutionContext.Implicits.global
|
import scala.concurrent.ExecutionContext.Implicits.global
|
||||||
import scala.concurrent.duration._
|
import scala.concurrent.duration._
|
||||||
|
|
@ -116,7 +117,7 @@ trait BfrTransferBehavior
|
||||||
def UpdateNtuUI(vehicle: Vehicle with NtuContainer, siphon: NtuContainer): Unit = {
|
def UpdateNtuUI(vehicle: Vehicle with NtuContainer, siphon: NtuContainer): Unit = {
|
||||||
siphon match {
|
siphon match {
|
||||||
case equip: NtuSiphon =>
|
case equip: NtuSiphon =>
|
||||||
vehicle.Zone.VehicleEvents ! VehicleServiceMessage(
|
vehicle.Zone.VehicleEvents ! MessageEnvelope(
|
||||||
vehicle.Actor.toString,
|
vehicle.Actor.toString,
|
||||||
VehicleAction.InventoryState2(equip.storageGUID, siphon.GUID, siphon.NtuCapacitor.toInt)
|
VehicleAction.InventoryState2(equip.storageGUID, siphon.GUID, siphon.NtuCapacitor.toInt)
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -9,10 +9,10 @@ import net.psforever.objects.sourcing.VehicleSource
|
||||||
import net.psforever.objects.vital.VehicleCargoMountActivity
|
import net.psforever.objects.vital.VehicleCargoMountActivity
|
||||||
import net.psforever.packet.game.{CargoMountPointStatusMessage, ObjectAttachMessage, ObjectDetachMessage, PlanetsideAttributeMessage}
|
import net.psforever.packet.game.{CargoMountPointStatusMessage, ObjectAttachMessage, ObjectDetachMessage, PlanetsideAttributeMessage}
|
||||||
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.Service
|
import net.psforever.services.Service
|
||||||
|
import net.psforever.services.base.envelope.MessageEnvelope
|
||||||
import net.psforever.services.base.message.SendResponse
|
import net.psforever.services.base.message.SendResponse
|
||||||
import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage}
|
import net.psforever.services.vehicle.VehicleAction
|
||||||
|
|
||||||
import scala.concurrent.duration._
|
import scala.concurrent.duration._
|
||||||
|
|
||||||
|
|
@ -59,7 +59,7 @@ trait CarrierBehavior {
|
||||||
) {
|
) {
|
||||||
if (iteration == 0) {
|
if (iteration == 0) {
|
||||||
//open the cargo bay door
|
//open the cargo bay door
|
||||||
obj.Zone.AvatarEvents ! AvatarServiceMessage(
|
obj.Zone.AvatarEvents ! MessageEnvelope(
|
||||||
obj.Zone.id,
|
obj.Zone.id,
|
||||||
SendResponse(
|
SendResponse(
|
||||||
CargoMountPointStatusMessage(
|
CargoMountPointStatusMessage(
|
||||||
|
|
@ -206,7 +206,7 @@ object CarrierBehavior {
|
||||||
log.debug(s"HandleCheckCargoMounting: mounting cargo vehicle in carrier at distance of $distance")
|
log.debug(s"HandleCheckCargoMounting: mounting cargo vehicle in carrier at distance of $distance")
|
||||||
CargoMountAction(carrier, cargo, hold, carrierGUID)
|
CargoMountAction(carrier, cargo, hold, carrierGUID)
|
||||||
cargo.Velocity = None
|
cargo.Velocity = None
|
||||||
zone.VehicleEvents ! VehicleServiceMessage(s"${cargo.Actor}", SendResponse(Seq(
|
zone.VehicleEvents ! MessageEnvelope(s"${cargo.Actor}", SendResponse(Seq(
|
||||||
PlanetsideAttributeMessage(cargoGUID, 0, cargo.Health),
|
PlanetsideAttributeMessage(cargoGUID, 0, cargo.Health),
|
||||||
PlanetsideAttributeMessage(cargoGUID, cargo.Definition.shieldUiAttribute, cargo.Shields)
|
PlanetsideAttributeMessage(cargoGUID, cargo.Definition.shieldUiAttribute, cargo.Shields)
|
||||||
)))
|
)))
|
||||||
|
|
@ -220,7 +220,7 @@ object CarrierBehavior {
|
||||||
)
|
)
|
||||||
cargo.Actor ! CargoBehavior.EndCargoMounting(carrierGUID)
|
cargo.Actor ! CargoBehavior.EndCargoMounting(carrierGUID)
|
||||||
val cargoDriverGUID = cargo.Seats(0).occupant.get.GUID
|
val cargoDriverGUID = cargo.Seats(0).occupant.get.GUID
|
||||||
zone.VehicleEvents ! VehicleServiceMessage(
|
zone.VehicleEvents ! MessageEnvelope(
|
||||||
zone.id,
|
zone.id,
|
||||||
cargoDriverGUID,
|
cargoDriverGUID,
|
||||||
SendResponse(CargoMountPointStatusMessage(
|
SendResponse(CargoMountPointStatusMessage(
|
||||||
|
|
@ -320,7 +320,7 @@ object CarrierBehavior {
|
||||||
)
|
)
|
||||||
cargo.Actor ! CargoBehavior.EndCargoDismounting(carrierGUID)
|
cargo.Actor ! CargoBehavior.EndCargoDismounting(carrierGUID)
|
||||||
val cargoDriverGUID = cargo.Seats(0).occupant.get.GUID
|
val cargoDriverGUID = cargo.Seats(0).occupant.get.GUID
|
||||||
zone.VehicleEvents ! VehicleServiceMessage(
|
zone.VehicleEvents ! MessageEnvelope(
|
||||||
zone.id,
|
zone.id,
|
||||||
cargoDriverGUID,
|
cargoDriverGUID,
|
||||||
SendResponse(CargoMountPointStatusMessage(
|
SendResponse(CargoMountPointStatusMessage(
|
||||||
|
|
@ -444,7 +444,7 @@ object CarrierBehavior {
|
||||||
val zoneId = zone.id
|
val zoneId = zone.id
|
||||||
val events = zone.VehicleEvents
|
val events = zone.VehicleEvents
|
||||||
val cargoActor = cargo.Actor
|
val cargoActor = cargo.Actor
|
||||||
events ! VehicleServiceMessage(s"$cargoActor", SendResponse(Seq(
|
events ! MessageEnvelope(s"$cargoActor", SendResponse(Seq(
|
||||||
PlanetsideAttributeMessage(cargoGUID, 0, cargo.Health),
|
PlanetsideAttributeMessage(cargoGUID, 0, cargo.Health),
|
||||||
PlanetsideAttributeMessage(cargoGUID, cargo.Definition.shieldUiAttribute, cargo.Shields)
|
PlanetsideAttributeMessage(cargoGUID, cargo.Definition.shieldUiAttribute, cargo.Shields)
|
||||||
)))
|
)))
|
||||||
|
|
@ -456,7 +456,7 @@ object CarrierBehavior {
|
||||||
val detachCargoMsg = ObjectDetachMessage(carrierGUID, cargoGUID, cargoHoldPosition - Vector3.z(1), rotation)
|
val detachCargoMsg = ObjectDetachMessage(carrierGUID, cargoGUID, cargoHoldPosition - Vector3.z(1), rotation)
|
||||||
val resetCargoMsg =
|
val resetCargoMsg =
|
||||||
CargoMountPointStatusMessage(carrierGUID, GUID0, GUID0, cargoGUID, mountPoint, CargoStatus.Empty, 0)
|
CargoMountPointStatusMessage(carrierGUID, GUID0, GUID0, cargoGUID, mountPoint, CargoStatus.Empty, 0)
|
||||||
events ! VehicleServiceMessage(zoneId, SendResponse(Seq(ejectCargoMsg, detachCargoMsg, resetCargoMsg)))
|
events ! MessageEnvelope(zoneId, SendResponse(Seq(ejectCargoMsg, detachCargoMsg, resetCargoMsg)))
|
||||||
log.debug(s"HandleVehicleCargoDismount: eject - $ejectCargoMsg, detach - $detachCargoMsg")
|
log.debug(s"HandleVehicleCargoDismount: eject - $ejectCargoMsg, detach - $detachCargoMsg")
|
||||||
if (driverOpt.isEmpty) {
|
if (driverOpt.isEmpty) {
|
||||||
//TODO cargo should drop like a rock like normal; until then, deconstruct it
|
//TODO cargo should drop like a rock like normal; until then, deconstruct it
|
||||||
|
|
@ -469,17 +469,17 @@ object CarrierBehavior {
|
||||||
CargoMountPointStatusMessage(carrierGUID, GUID0, cargoGUID, GUID0, mountPoint, CargoStatus.InProgress, 0)
|
CargoMountPointStatusMessage(carrierGUID, GUID0, cargoGUID, GUID0, mountPoint, CargoStatus.InProgress, 0)
|
||||||
val cargoDetachMessage =
|
val cargoDetachMessage =
|
||||||
ObjectDetachMessage(carrierGUID, cargoGUID, cargoHoldPosition + Vector3.z(1f), rotation)
|
ObjectDetachMessage(carrierGUID, cargoGUID, cargoHoldPosition + Vector3.z(1f), rotation)
|
||||||
events ! VehicleServiceMessage(zoneId, SendResponse(Seq(cargoStatusMessage, cargoDetachMessage)))
|
events ! MessageEnvelope(zoneId, SendResponse(Seq(cargoStatusMessage, cargoDetachMessage)))
|
||||||
driverOpt match {
|
driverOpt match {
|
||||||
case Some(driver) =>
|
case Some(driver) =>
|
||||||
events ! VehicleServiceMessage(
|
events ! MessageEnvelope(
|
||||||
s"${driver.Name}",
|
s"${driver.Name}",
|
||||||
VehicleAction.KickCargo(cargo, cargo.Definition.AutoPilotSpeed2, 2500)
|
VehicleAction.KickCargo(cargo, cargo.Definition.AutoPilotSpeed2, 2500)
|
||||||
)
|
)
|
||||||
case None =>
|
case None =>
|
||||||
val resetCargoMsg =
|
val resetCargoMsg =
|
||||||
CargoMountPointStatusMessage(carrierGUID, GUID0, GUID0, cargoGUID, mountPoint, CargoStatus.Empty, 0)
|
CargoMountPointStatusMessage(carrierGUID, GUID0, GUID0, cargoGUID, mountPoint, CargoStatus.Empty, 0)
|
||||||
events ! VehicleServiceMessage(zoneId, SendResponse(resetCargoMsg)) //lazy
|
events ! MessageEnvelope(zoneId, SendResponse(resetCargoMsg)) //lazy
|
||||||
//TODO cargo should back out like normal; until then, deconstruct it
|
//TODO cargo should back out like normal; until then, deconstruct it
|
||||||
cargoActor ! Vehicle.Deconstruct()
|
cargoActor ! Vehicle.Deconstruct()
|
||||||
}
|
}
|
||||||
|
|
@ -595,7 +595,7 @@ object CarrierBehavior {
|
||||||
attachMessage: ObjectAttachMessage,
|
attachMessage: ObjectAttachMessage,
|
||||||
mountPointStatusMessage: CargoMountPointStatusMessage
|
mountPointStatusMessage: CargoMountPointStatusMessage
|
||||||
): Unit = {
|
): Unit = {
|
||||||
zone.VehicleEvents ! VehicleServiceMessage(zone.id, exclude, SendResponse(Seq(attachMessage, mountPointStatusMessage)))
|
zone.VehicleEvents ! MessageEnvelope(zone.id, exclude, SendResponse(Seq(attachMessage, mountPointStatusMessage)))
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -615,10 +615,7 @@ object CarrierBehavior {
|
||||||
val zone = carrier.Zone
|
val zone = carrier.Zone
|
||||||
val zoneId = zone.id
|
val zoneId = zone.id
|
||||||
val msgs @ (attachMessage, mountPointStatusMessage) = CargoMountMessages(carrier, cargo, mountPoint)
|
val msgs @ (attachMessage, mountPointStatusMessage) = CargoMountMessages(carrier, cargo, mountPoint)
|
||||||
zone.VehicleEvents ! VehicleServiceMessage(zoneId, SendResponse(Seq(
|
zone.VehicleEvents ! MessageEnvelope(zoneId, SendResponse(Seq(attachMessage, mountPointStatusMessage)))
|
||||||
attachMessage,
|
|
||||||
mountPointStatusMessage
|
|
||||||
)))
|
|
||||||
msgs
|
msgs
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,8 +2,9 @@
|
||||||
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.envelope.MessageEnvelope
|
||||||
import net.psforever.services.base.message.PlanetsideAttribute
|
import net.psforever.services.base.message.PlanetsideAttribute
|
||||||
import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage}
|
import net.psforever.services.vehicle.VehicleAction
|
||||||
import net.psforever.types.DriveState
|
import net.psforever.types.DriveState
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -29,8 +30,8 @@ class AmsControl(vehicle: Vehicle)
|
||||||
case None => ""
|
case None => ""
|
||||||
}
|
}
|
||||||
val events = zone.VehicleEvents
|
val events = zone.VehicleEvents
|
||||||
events ! VehicleServiceMessage(zone.id, VehicleAction.AMSDeploymentChange(zone))
|
events ! MessageEnvelope(zone.id, VehicleAction.AMSDeploymentChange(zone))
|
||||||
events ! VehicleServiceMessage(driverChannel, PlanetsideAttribute(vehicle.GUID, 81, 1))
|
events ! MessageEnvelope(driverChannel, PlanetsideAttribute(vehicle.GUID, 81, 1))
|
||||||
case _ => ;
|
case _ => ;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -49,8 +50,8 @@ class AmsControl(vehicle: Vehicle)
|
||||||
case None => ""
|
case None => ""
|
||||||
}
|
}
|
||||||
val events = zone.VehicleEvents
|
val events = zone.VehicleEvents
|
||||||
events ! VehicleServiceMessage(zone.id, VehicleAction.AMSDeploymentChange(zone))
|
events ! MessageEnvelope(zone.id, VehicleAction.AMSDeploymentChange(zone))
|
||||||
events ! VehicleServiceMessage(driverChannel, PlanetsideAttribute(vehicle.GUID, 81, 0))
|
events ! MessageEnvelope(driverChannel, PlanetsideAttribute(vehicle.GUID, 81, 0))
|
||||||
case _ => ;
|
case _ => ;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,8 +11,8 @@ 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.envelope.MessageEnvelope
|
||||||
import net.psforever.services.base.message.SendResponse
|
import net.psforever.services.base.message.SendResponse
|
||||||
import net.psforever.services.vehicle.VehicleServiceMessage
|
|
||||||
import net.psforever.types.PlanetSideGUID
|
import net.psforever.types.PlanetSideGUID
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -53,7 +53,7 @@ class ApcControl(vehicle: Vehicle)
|
||||||
//drain the capacitor
|
//drain the capacitor
|
||||||
capacitorCharge(-vehicle.Capacitor)
|
capacitorCharge(-vehicle.Capacitor)
|
||||||
//cause the emp
|
//cause the emp
|
||||||
events ! VehicleServiceMessage(
|
events ! MessageEnvelope(
|
||||||
zone.id,
|
zone.id,
|
||||||
SendResponse(TriggerEffectMessage(
|
SendResponse(TriggerEffectMessage(
|
||||||
GUID0,
|
GUID0,
|
||||||
|
|
|
||||||
|
|
@ -17,8 +17,8 @@ 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.envelope.MessageEnvelope
|
||||||
import net.psforever.services.base.message.{GenericObjectAction, PlanetsideAttribute, SendResponse}
|
import net.psforever.services.base.message.{GenericObjectAction, PlanetsideAttribute, SendResponse}
|
||||||
import net.psforever.services.vehicle.VehicleServiceMessage
|
|
||||||
import net.psforever.types._
|
import net.psforever.types._
|
||||||
|
|
||||||
import scala.annotation.unused
|
import scala.annotation.unused
|
||||||
|
|
@ -270,7 +270,7 @@ class BfrControl(vehicle: Vehicle)
|
||||||
|
|
||||||
def disableShield(): Unit = {
|
def disableShield(): Unit = {
|
||||||
val zone = vehicle.Zone
|
val zone = vehicle.Zone
|
||||||
zone.VehicleEvents ! VehicleServiceMessage(
|
zone.VehicleEvents ! MessageEnvelope(
|
||||||
s"${zone.id}",
|
s"${zone.id}",
|
||||||
SendResponse(GenericObjectActionMessage(vehicle.GUID, 45))
|
SendResponse(GenericObjectActionMessage(vehicle.GUID, 45))
|
||||||
)
|
)
|
||||||
|
|
@ -284,7 +284,7 @@ class BfrControl(vehicle: Vehicle)
|
||||||
|
|
||||||
def enableShield(): Unit = {
|
def enableShield(): Unit = {
|
||||||
val zone = vehicle.Zone
|
val zone = vehicle.Zone
|
||||||
zone.VehicleEvents ! VehicleServiceMessage(
|
zone.VehicleEvents ! MessageEnvelope(
|
||||||
s"${zone.id}",
|
s"${zone.id}",
|
||||||
SendResponse(GenericObjectActionMessage(vehicle.GUID, 44))
|
SendResponse(GenericObjectActionMessage(vehicle.GUID, 44))
|
||||||
)
|
)
|
||||||
|
|
@ -335,7 +335,7 @@ class BfrControl(vehicle: Vehicle)
|
||||||
val vguid = vehicle.GUID
|
val vguid = vehicle.GUID
|
||||||
val zone = vehicle.Zone
|
val zone = vehicle.Zone
|
||||||
val shields = vehicle.Shields
|
val shields = vehicle.Shields
|
||||||
zone.VehicleEvents ! VehicleServiceMessage(
|
zone.VehicleEvents ! MessageEnvelope(
|
||||||
zone.id,
|
zone.id,
|
||||||
PlanetsideAttribute(vguid, vehicle.Definition.shieldUiAttribute, shields)
|
PlanetsideAttribute(vguid, vehicle.Definition.shieldUiAttribute, shields)
|
||||||
)
|
)
|
||||||
|
|
@ -415,7 +415,7 @@ class BfrControl(vehicle: Vehicle)
|
||||||
}) match {
|
}) match {
|
||||||
case Some(useThisGuid) =>
|
case Some(useThisGuid) =>
|
||||||
val zone = vehicle.Zone
|
val zone = vehicle.Zone
|
||||||
zone.VehicleEvents ! VehicleServiceMessage(
|
zone.VehicleEvents ! MessageEnvelope(
|
||||||
zone.id,
|
zone.id,
|
||||||
doNotSendTo,
|
doNotSendTo,
|
||||||
GenericObjectAction(useThisGuid, action)
|
GenericObjectAction(useThisGuid, action)
|
||||||
|
|
@ -565,7 +565,7 @@ class BfrControl(vehicle: Vehicle)
|
||||||
//cause the emp
|
//cause the emp
|
||||||
siphon.equipment.lastDischarge = now
|
siphon.equipment.lastDischarge = now
|
||||||
//TODO this is the apc emp effect; is there an ntu siphon emp effect?
|
//TODO this is the apc emp effect; is there an ntu siphon emp effect?
|
||||||
events ! VehicleServiceMessage(
|
events ! MessageEnvelope(
|
||||||
zone.id,
|
zone.id,
|
||||||
SendResponse(TriggerEffectMessage(
|
SendResponse(TriggerEffectMessage(
|
||||||
GUID0,
|
GUID0,
|
||||||
|
|
@ -587,7 +587,7 @@ class BfrControl(vehicle: Vehicle)
|
||||||
//the siphon is not ready to dispatch another emp; chat message borrowed from kit use logic
|
//the siphon is not ready to dispatch another emp; chat message borrowed from kit use logic
|
||||||
//the client actually enforces a hard limit of 30s before it will react to use of the siphon emp mode
|
//the client actually enforces a hard limit of 30s before it will react to use of the siphon emp mode
|
||||||
//it does not even dispatch the packet before that, making it rare if this precautionary message is seen
|
//it does not even dispatch the packet before that, making it rare if this precautionary message is seen
|
||||||
events ! VehicleServiceMessage(
|
events ! MessageEnvelope(
|
||||||
obj.Seats(0).occupant.get.Name,
|
obj.Seats(0).occupant.get.Name,
|
||||||
SendResponse(ChatMsg(ChatMessageType.UNK_225, wideContents = false, "", s"@TimeUntilNextUse^${30000 - elapsedWait}", None))
|
SendResponse(ChatMsg(ChatMessageType.UNK_225, wideContents = false, "", s"@TimeUntilNextUse^${30000 - elapsedWait}", None))
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -3,8 +3,8 @@ 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.envelope.MessageEnvelope
|
||||||
import net.psforever.services.base.message.PlanetsideAttribute
|
import net.psforever.services.base.message.PlanetsideAttribute
|
||||||
import net.psforever.services.vehicle.VehicleServiceMessage
|
|
||||||
|
|
||||||
import scala.concurrent.ExecutionContext.Implicits.global
|
import scala.concurrent.ExecutionContext.Implicits.global
|
||||||
import scala.concurrent.duration._
|
import scala.concurrent.duration._
|
||||||
|
|
@ -59,7 +59,7 @@ trait VehicleCapacitance {
|
||||||
|
|
||||||
protected def showCapacitorCharge(): Unit = {
|
protected def showCapacitorCharge(): Unit = {
|
||||||
val obj = CapacitanceObject
|
val obj = CapacitanceObject
|
||||||
obj.Zone.VehicleEvents ! VehicleServiceMessage(
|
obj.Zone.VehicleEvents ! MessageEnvelope(
|
||||||
self.toString(),
|
self.toString(),
|
||||||
PlanetsideAttribute(obj.GUID, 113, obj.Capacitor)
|
PlanetsideAttribute(obj.GUID, 113, obj.Capacitor)
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -36,9 +36,10 @@ import net.psforever.packet.PlanetSideGamePacket
|
||||||
import net.psforever.packet.game._
|
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
|
||||||
|
import net.psforever.services.base.envelope.MessageEnvelope
|
||||||
import net.psforever.services.base.message.{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
|
||||||
|
|
||||||
import scala.annotation.unused
|
import scala.annotation.unused
|
||||||
import scala.concurrent.ExecutionContext.Implicits.global
|
import scala.concurrent.ExecutionContext.Implicits.global
|
||||||
|
|
@ -212,7 +213,7 @@ class VehicleControl(vehicle: Vehicle)
|
||||||
})
|
})
|
||||||
.flatMap { _.getMessage(vehicle) }
|
.flatMap { _.getMessage(vehicle) }
|
||||||
.foreach { pkt =>
|
.foreach { pkt =>
|
||||||
events ! VehicleServiceMessage(toChannel, SendResponse(pkt))
|
events ! MessageEnvelope(toChannel, SendResponse(pkt))
|
||||||
}
|
}
|
||||||
|
|
||||||
case FactionAffinity.ConvertFactionAffinity(faction) =>
|
case FactionAffinity.ConvertFactionAffinity(faction) =>
|
||||||
|
|
@ -243,11 +244,11 @@ class VehicleControl(vehicle: Vehicle)
|
||||||
log.info(s"changing vehicle equipment loadout to ${player.Name}'s option #${msg.unk1 + 1}")
|
log.info(s"changing vehicle equipment loadout to ${player.Name}'s option #${msg.unk1 + 1}")
|
||||||
val (oldWeapons, newWeapons, oldInventory, finalInventory) =
|
val (oldWeapons, newWeapons, oldInventory, finalInventory) =
|
||||||
handleTerminalMessageVehicleLoadout(player, definition, weapons, inventory)
|
handleTerminalMessageVehicleLoadout(player, definition, weapons, inventory)
|
||||||
zone.VehicleEvents ! VehicleServiceMessage(
|
zone.VehicleEvents ! MessageEnvelope(
|
||||||
zone.id,
|
zone.id,
|
||||||
VehicleAction.ChangeLoadout(vehicle.GUID, oldWeapons, newWeapons, oldInventory, finalInventory)
|
VehicleAction.ChangeLoadout(vehicle.GUID, oldWeapons, newWeapons, oldInventory, finalInventory)
|
||||||
)
|
)
|
||||||
zone.AvatarEvents ! AvatarServiceMessage(
|
zone.AvatarEvents ! MessageEnvelope(
|
||||||
player.Name,
|
player.Name,
|
||||||
AvatarAction.TerminalOrderResult(msg.terminal_guid, msg.transaction_type, result = true)
|
AvatarAction.TerminalOrderResult(msg.terminal_guid, msg.transaction_type, result = true)
|
||||||
)
|
)
|
||||||
|
|
@ -255,7 +256,7 @@ class VehicleControl(vehicle: Vehicle)
|
||||||
case _ => ()
|
case _ => ()
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
zone.AvatarEvents ! AvatarServiceMessage(
|
zone.AvatarEvents ! MessageEnvelope(
|
||||||
player.Name,
|
player.Name,
|
||||||
AvatarAction.TerminalOrderResult(msg.terminal_guid, msg.transaction_type, result = false)
|
AvatarAction.TerminalOrderResult(msg.terminal_guid, msg.transaction_type, result = false)
|
||||||
)
|
)
|
||||||
|
|
@ -329,7 +330,7 @@ class VehicleControl(vehicle: Vehicle)
|
||||||
.orElse {
|
.orElse {
|
||||||
case VehicleControl.Deletion() =>
|
case VehicleControl.Deletion() =>
|
||||||
val zone = vehicle.Zone
|
val zone = vehicle.Zone
|
||||||
zone.VehicleEvents ! VehicleServiceMessage(
|
zone.VehicleEvents ! MessageEnvelope(
|
||||||
zone.id,
|
zone.id,
|
||||||
VehicleAction.UnloadVehicle(vehicle, vehicle.GUID)
|
VehicleAction.UnloadVehicle(vehicle, vehicle.GUID)
|
||||||
)
|
)
|
||||||
|
|
@ -450,7 +451,7 @@ class VehicleControl(vehicle: Vehicle)
|
||||||
zone.actor ! ZoneActor.AddToBlockMap(player, vehicle.Position)
|
zone.actor ! ZoneActor.AddToBlockMap(player, vehicle.Position)
|
||||||
}
|
}
|
||||||
if (player.HasGUID) {
|
if (player.HasGUID) {
|
||||||
events ! VehicleServiceMessage(zoneId, player.GUID, VehicleAction.KickPassenger(4, unk2 = true, guid))
|
events ! MessageEnvelope(zoneId, player.GUID, VehicleAction.KickPassenger(4, unk2 = true, guid))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -520,7 +521,7 @@ class VehicleControl(vehicle: Vehicle)
|
||||||
val obj = ContainerObject
|
val obj = ContainerObject
|
||||||
obj.Find(item) match {
|
obj.Find(item) match {
|
||||||
case Some(slot) =>
|
case Some(slot) =>
|
||||||
obj.Zone.AvatarEvents ! AvatarServiceMessage(
|
obj.Zone.AvatarEvents ! MessageEnvelope(
|
||||||
self.toString,
|
self.toString,
|
||||||
SendResponse(ObjectAttachMessage(obj.GUID, item.GUID, slot))
|
SendResponse(ObjectAttachMessage(obj.GUID, item.GUID, slot))
|
||||||
)
|
)
|
||||||
|
|
@ -532,7 +533,7 @@ class VehicleControl(vehicle: Vehicle)
|
||||||
|
|
||||||
def RemoveItemFromSlotCallback(item: Equipment, slot: Int): Unit = {
|
def RemoveItemFromSlotCallback(item: Equipment, slot: Int): Unit = {
|
||||||
val zone = ContainerObject.Zone
|
val zone = ContainerObject.Zone
|
||||||
zone.VehicleEvents ! VehicleServiceMessage(
|
zone.VehicleEvents ! MessageEnvelope(
|
||||||
self.toString,
|
self.toString,
|
||||||
VehicleAction.UnstowEquipment(item.GUID)
|
VehicleAction.UnstowEquipment(item.GUID)
|
||||||
)
|
)
|
||||||
|
|
@ -546,20 +547,20 @@ class VehicleControl(vehicle: Vehicle)
|
||||||
val events = zone.VehicleEvents
|
val events = zone.VehicleEvents
|
||||||
val iguid = item.GUID
|
val iguid = item.GUID
|
||||||
item.Faction = obj.Faction
|
item.Faction = obj.Faction
|
||||||
events ! VehicleServiceMessage(
|
events ! MessageEnvelope(
|
||||||
//TODO when a new weapon, the equipment slot ui goes blank, but the weapon functions; remount vehicle to correct it
|
//TODO when a new weapon, the equipment slot ui goes blank, but the weapon functions; remount vehicle to correct it
|
||||||
if (obj.VisibleSlots.contains(slot)) zone.id else channel,
|
if (obj.VisibleSlots.contains(slot)) zone.id else channel,
|
||||||
SendResponse(OCM.detailed(item, ObjectCreateMessageParent(oguid, slot)))
|
SendResponse(OCM.detailed(item, ObjectCreateMessageParent(oguid, slot)))
|
||||||
)
|
)
|
||||||
item match {
|
item match {
|
||||||
case box: AmmoBox =>
|
case box: AmmoBox =>
|
||||||
events ! VehicleServiceMessage(
|
events ! MessageEnvelope(
|
||||||
channel,
|
channel,
|
||||||
VehicleAction.InventoryState2(iguid, oguid, box.Capacity)
|
VehicleAction.InventoryState2(iguid, oguid, box.Capacity)
|
||||||
)
|
)
|
||||||
case weapon: Tool =>
|
case weapon: Tool =>
|
||||||
weapon.AmmoSlots.map { slot => slot.Box }.foreach { box =>
|
weapon.AmmoSlots.map { slot => slot.Box }.foreach { box =>
|
||||||
events ! VehicleServiceMessage(
|
events ! MessageEnvelope(
|
||||||
channel,
|
channel,
|
||||||
VehicleAction.InventoryState2(box.GUID, iguid, box.Capacity)
|
VehicleAction.InventoryState2(box.GUID, iguid, box.Capacity)
|
||||||
)
|
)
|
||||||
|
|
@ -572,7 +573,7 @@ class VehicleControl(vehicle: Vehicle)
|
||||||
val obj = ContainerObject
|
val obj = ContainerObject
|
||||||
val zone = obj.Zone
|
val zone = obj.Zone
|
||||||
val toChannel = if (obj.VisibleSlots.contains(fromSlot)) zone.id else self.toString
|
val toChannel = if (obj.VisibleSlots.contains(fromSlot)) zone.id else self.toString
|
||||||
zone.VehicleEvents ! VehicleServiceMessage(
|
zone.VehicleEvents ! MessageEnvelope(
|
||||||
toChannel,
|
toChannel,
|
||||||
ObjectDelete(item.GUID)
|
ObjectDelete(item.GUID)
|
||||||
)
|
)
|
||||||
|
|
@ -635,7 +636,7 @@ class VehicleControl(vehicle: Vehicle)
|
||||||
if (canChargeShields) {
|
if (canChargeShields) {
|
||||||
vehicle.LogActivity(ShieldCharge(amount, motivator))
|
vehicle.LogActivity(ShieldCharge(amount, motivator))
|
||||||
vehicle.Shields = vehicle.Shields + amount
|
vehicle.Shields = vehicle.Shields + amount
|
||||||
vehicle.Zone.VehicleEvents ! VehicleServiceMessage(
|
vehicle.Zone.VehicleEvents ! MessageEnvelope(
|
||||||
s"${vehicle.Actor}",
|
s"${vehicle.Actor}",
|
||||||
PlanetsideAttribute(vehicle.GUID, vehicle.Definition.shieldUiAttribute, vehicle.Shields)
|
PlanetsideAttribute(vehicle.GUID, vehicle.Definition.shieldUiAttribute, vehicle.Shields)
|
||||||
)
|
)
|
||||||
|
|
@ -690,7 +691,7 @@ class VehicleControl(vehicle: Vehicle)
|
||||||
case Some(allow) =>
|
case Some(allow) =>
|
||||||
val group = AccessPermissionGroup(attribute - 10)
|
val group = AccessPermissionGroup(attribute - 10)
|
||||||
log.info(s"$dname changed ${vehicle.Definition.Name}'s access permission $group to $allow")
|
log.info(s"$dname changed ${vehicle.Definition.Name}'s access permission $group to $allow")
|
||||||
zone.VehicleEvents ! VehicleServiceMessage(
|
zone.VehicleEvents ! MessageEnvelope(
|
||||||
zone.id,
|
zone.id,
|
||||||
dguid,
|
dguid,
|
||||||
VehicleAction.SeatPermissions(vguid, attribute, value)
|
VehicleAction.SeatPermissions(vguid, attribute, value)
|
||||||
|
|
@ -704,7 +705,7 @@ class VehicleControl(vehicle: Vehicle)
|
||||||
if (vehicle.SeatPermissionGroup(seatIndex).contains(group) && !tplayer.Name.equals(dname)) { //can not kick self
|
if (vehicle.SeatPermissionGroup(seatIndex).contains(group) && !tplayer.Name.equals(dname)) { //can not kick self
|
||||||
seat.unmount(tplayer)
|
seat.unmount(tplayer)
|
||||||
tplayer.VehicleSeated = None
|
tplayer.VehicleSeated = None
|
||||||
zone.VehicleEvents ! VehicleServiceMessage(
|
zone.VehicleEvents ! MessageEnvelope(
|
||||||
zone.id,
|
zone.id,
|
||||||
tplayer.GUID,
|
tplayer.GUID,
|
||||||
VehicleAction.KickPassenger(4, unk2 = false, vguid)
|
VehicleAction.KickPassenger(4, unk2 = false, vguid)
|
||||||
|
|
@ -753,7 +754,7 @@ class VehicleControl(vehicle: Vehicle)
|
||||||
|
|
||||||
def vehicleSubsystemMessages(messages: List[PlanetSideGamePacket]): Unit = {
|
def vehicleSubsystemMessages(messages: List[PlanetSideGamePacket]): Unit = {
|
||||||
val zone = vehicle.Zone
|
val zone = vehicle.Zone
|
||||||
zone.VehicleEvents ! VehicleServiceMessage(
|
zone.VehicleEvents ! MessageEnvelope(
|
||||||
zone.id,
|
zone.id,
|
||||||
SendResponse(messages)
|
SendResponse(messages)
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -6,6 +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.envelope.MessageEnvelope
|
||||||
import net.psforever.services.base.message.SendResponse
|
import net.psforever.services.base.message.SendResponse
|
||||||
|
|
||||||
class WithEntranceInVehicle
|
class WithEntranceInVehicle
|
||||||
|
|
@ -40,9 +41,8 @@ class WithEntranceInVehicle
|
||||||
|
|
||||||
private def warnAboutProximity(obj: InteractsWithZone, msg: String): Unit = {
|
private def warnAboutProximity(obj: InteractsWithZone, msg: String): Unit = {
|
||||||
import net.psforever.packet.game.ChatMsg
|
import net.psforever.packet.game.ChatMsg
|
||||||
import net.psforever.services.avatar.AvatarServiceMessage
|
|
||||||
import net.psforever.types.ChatMessageType
|
import net.psforever.types.ChatMessageType
|
||||||
obj.Zone.AvatarEvents ! AvatarServiceMessage(
|
obj.Zone.AvatarEvents ! MessageEnvelope(
|
||||||
obj.Actor.toString(),
|
obj.Actor.toString(),
|
||||||
SendResponse(ChatMsg(ChatMessageType.UNK_227, msg))
|
SendResponse(ChatMsg(ChatMessageType.UNK_227, msg))
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -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.avatar.AvatarServiceMessage
|
import net.psforever.services.base.envelope.MessageEnvelope
|
||||||
import net.psforever.services.base.message.SendResponse
|
import net.psforever.services.base.message.SendResponse
|
||||||
import net.psforever.services.vehicle.VehicleServiceMessage
|
|
||||||
import net.psforever.types.{ChatMessageType, PlanetSideEmpire, PlanetSideGUID, Vector3}
|
import net.psforever.types.{ChatMessageType, PlanetSideEmpire, PlanetSideGUID, Vector3}
|
||||||
|
|
||||||
sealed abstract class MapInfo(
|
sealed abstract class MapInfo(
|
||||||
|
|
@ -687,7 +686,7 @@ object MapEnvironment {
|
||||||
" will be executed for treason." //TODO for bops, eventually
|
" will be executed for treason." //TODO for bops, eventually
|
||||||
}
|
}
|
||||||
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 ! MessageEnvelope(
|
||||||
p.Name,
|
p.Name,
|
||||||
SendResponse(ChatMsg(ChatMessageType.CMT_QUIT, warning))
|
SendResponse(ChatMsg(ChatMessageType.CMT_QUIT, warning))
|
||||||
)
|
)
|
||||||
|
|
@ -695,7 +694,7 @@ object MapEnvironment {
|
||||||
}
|
}
|
||||||
obj match {
|
obj match {
|
||||||
case v: Vehicle =>
|
case v: Vehicle =>
|
||||||
v.Zone.VehicleEvents ! VehicleServiceMessage(
|
v.Zone.VehicleEvents ! MessageEnvelope(
|
||||||
v.Actor.toString(),
|
v.Actor.toString(),
|
||||||
SendResponse(OffshoreVehicleMessage(v.Seats(0).occupant.get.GUID, v.GUID, msg))
|
SendResponse(OffshoreVehicleMessage(v.Seats(0).occupant.get.GUID, v.GUID, msg))
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -10,8 +10,8 @@ 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.envelope.MessageEnvelope
|
||||||
import net.psforever.services.base.message.SendResponse
|
import net.psforever.services.base.message.SendResponse
|
||||||
import net.psforever.services.local.LocalServiceMessage
|
|
||||||
import net.psforever.types.ChatMessageType
|
import net.psforever.types.ChatMessageType
|
||||||
|
|
||||||
import scala.annotation.tailrec
|
import scala.annotation.tailrec
|
||||||
|
|
@ -108,7 +108,7 @@ object ZoneDeployableActor {
|
||||||
val position = obj.Position
|
val position = obj.Position
|
||||||
deployableList.find(_ eq obj) match {
|
deployableList.find(_ eq obj) match {
|
||||||
case _ if Interference.Test(zone, obj).nonEmpty =>
|
case _ if Interference.Test(zone, obj).nonEmpty =>
|
||||||
zone.LocalEvents ! LocalServiceMessage(
|
zone.LocalEvents ! MessageEnvelope(
|
||||||
obj.OwnerName.getOrElse(""),
|
obj.OwnerName.getOrElse(""),
|
||||||
SendResponse(ChatMsg(ChatMessageType.UNK_227, "@nomove_intersecting"))
|
SendResponse(ChatMsg(ChatMessageType.UNK_227, "@nomove_intersecting"))
|
||||||
) //may not be the correct message but is sufficient at explaining why the deployable can not be built
|
) //may not be the correct message but is sufficient at explaining why the deployable can not be built
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,8 @@ import akka.actor.{Actor, ActorRef, Cancellable, Props}
|
||||||
import net.psforever.objects.Default
|
import net.psforever.objects.Default
|
||||||
import net.psforever.types.{PlanetSideEmpire, Vector3}
|
import net.psforever.types.{PlanetSideEmpire, Vector3}
|
||||||
import net.psforever.services.ServiceManager
|
import net.psforever.services.ServiceManager
|
||||||
import net.psforever.services.galaxy.{GalaxyAction, GalaxyServiceMessage}
|
import net.psforever.services.base.envelope.MessageEnvelope
|
||||||
|
import net.psforever.services.galaxy.GalaxyAction
|
||||||
|
|
||||||
import scala.collection.mutable.ListBuffer
|
import scala.collection.mutable.ListBuffer
|
||||||
import scala.concurrent.duration._
|
import scala.concurrent.duration._
|
||||||
|
|
@ -305,7 +306,7 @@ class ZoneHotSpotProjector(zone: Zone, hotspots: ListBuffer[HotSpotInfo], blanki
|
||||||
val zoneNumber = zone.Number
|
val zoneNumber = zone.Number
|
||||||
val hotSpotInfoList = hotSpotInfos.toList
|
val hotSpotInfoList = hotSpotInfos.toList
|
||||||
affectedFactions.foreach(faction =>
|
affectedFactions.foreach(faction =>
|
||||||
galaxy ! GalaxyServiceMessage(faction.toString, GalaxyAction.HotSpotUpdate(
|
galaxy ! MessageEnvelope(faction.toString, GalaxyAction.HotSpotUpdate(
|
||||||
zoneNumber,
|
zoneNumber,
|
||||||
1,
|
1,
|
||||||
ZoneHotSpotProjector.SpecificHotSpotInfo(faction, hotSpotInfoList)
|
ZoneHotSpotProjector.SpecificHotSpotInfo(faction, hotSpotInfoList)
|
||||||
|
|
|
||||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue