adding tests for utilities and fixing tests for AMS; adding information to PAMessage; scaling back modifications to WSA

This commit is contained in:
FateJH 2018-02-28 23:35:18 -05:00
parent e93c510d22
commit 74863858f7
4 changed files with 135 additions and 126 deletions

View file

@ -7,7 +7,13 @@ import scodec.codecs._
/**
* na<br>
* Global:<br>
* `50 - Common Initialization?`<br>
* `51 - Common Initialization?`<br>
* `67 - ???`<br>
* <br>
* Global (GUID=0)<br>
* `82 - ???`
* `83 - max boomers`<br>
* `84 - max he mines`<br>
* `85 - max disruptor mines`<br>

View file

@ -1,7 +1,6 @@
// Copyright (c) 2017 PSForever
package objects
import net.psforever.objects.GlobalDefinitions.remote_electronics_kit
import net.psforever.objects.definition.converter.{ACEConverter, CharacterSelectConverter, REKConverter}
import net.psforever.objects._
import net.psforever.objects.definition._
@ -184,13 +183,13 @@ class ConverterTest extends Specification {
"convert to packet (BR < 24)" in {
obj.BEP = 0
obj.Definition.Packet.DetailedConstructorData(obj) match {
case Success(pkt) =>
case Success(_) =>
ok
case _ =>
ko
}
obj.Definition.Packet.ConstructorData(obj) match {
case Success(pkt) =>
case Success(_) =>
ok
case _ =>
ko
@ -200,13 +199,13 @@ class ConverterTest extends Specification {
"convert to packet (BR >= 24)" in {
obj.BEP = 10000000
obj.Definition.Packet.DetailedConstructorData(obj) match {
case Success(pkt) =>
case Success(_) =>
ok
case _ =>
ko
}
obj.Definition.Packet.ConstructorData(obj) match {
case Success(pkt) =>
case Success(_) =>
ok
case _ =>
ko
@ -216,7 +215,7 @@ class ConverterTest extends Specification {
"convert to simple packet (BR < 24)" in {
obj.BEP = 0
converter.DetailedConstructorData(obj) match {
case Success(pkt) =>
case Success(_) =>
ok
case _ =>
ko
@ -228,7 +227,7 @@ class ConverterTest extends Specification {
"convert to simple packet (BR >= 24)" in {
obj.BEP = 10000000
converter.DetailedConstructorData(obj) match {
case Success(pkt) =>
case Success(_) =>
ok
case _ =>
ko
@ -290,7 +289,7 @@ class ConverterTest extends Specification {
obj.Definition.Packet.ConstructorData(obj) match {
case Success(pkt) =>
pkt mustEqual CommonTerminalData(PlanetSideEmpire.NEUTRAL, 0)
pkt mustEqual CommonTerminalData(PlanetSideEmpire.NEUTRAL)
case _ =>
ko
}
@ -338,8 +337,10 @@ class ConverterTest extends Specification {
val
ams = Vehicle(GlobalDefinitions.ams)
ams.GUID = PlanetSideGUID(413)
ams.Utilities(3)().GUID = PlanetSideGUID(414)
ams.Utilities(4)().GUID = PlanetSideGUID(415)
ams.Utilities(1)().GUID = PlanetSideGUID(414)
ams.Utilities(2)().GUID = PlanetSideGUID(415)
ams.Utilities(3)().GUID = PlanetSideGUID(416)
ams.Utilities(4)().GUID = PlanetSideGUID(417)
ams.Definition.Packet.ConstructorData(ams).isSuccess mustEqual true
ok //TODO write more of this test

View file

@ -27,6 +27,49 @@ class UtilityTest extends Specification {
obj().asInstanceOf[Terminal].Definition.ObjectId mustEqual 614
obj().asInstanceOf[Terminal].Actor == ActorRef.noSender
}
"create a matrix_terminalc object" in {
val obj = Utility(UtilityType.matrix_terminalc, UtilityTest.vehicle)
obj.UtilType mustEqual UtilityType.matrix_terminalc
obj().isInstanceOf[Terminal] mustEqual true
obj().asInstanceOf[Terminal].Definition.ObjectId mustEqual 519
obj().asInstanceOf[Terminal].Actor == ActorRef.noSender
}
"create an ams_respawn_tube object" in {
import net.psforever.objects.serverobject.tube.SpawnTube
val obj = Utility(UtilityType.ams_respawn_tube, UtilityTest.vehicle)
obj.UtilType mustEqual UtilityType.ams_respawn_tube
obj().isInstanceOf[SpawnTube] mustEqual true
obj().asInstanceOf[SpawnTube].Definition.ObjectId mustEqual 49
obj().asInstanceOf[SpawnTube].Actor == ActorRef.noSender
}
"be located with their owner (terminal)" in {
val veh = Vehicle(GlobalDefinitions.quadstealth)
val obj = Utility(UtilityType.order_terminala, veh)
obj().Position mustEqual veh.Position
obj().Orientation mustEqual veh.Orientation
import net.psforever.types.Vector3
veh.Position = Vector3(1, 2, 3)
veh.Orientation = Vector3(4, 5, 6)
obj().Position mustEqual veh.Position
obj().Orientation mustEqual veh.Orientation
}
"be located with their owner (spawn tube)" in {
val veh = Vehicle(GlobalDefinitions.quadstealth)
val obj = Utility(UtilityType.ams_respawn_tube, veh)
obj().Position mustEqual veh.Position
obj().Orientation mustEqual veh.Orientation
import net.psforever.types.Vector3
veh.Position = Vector3(1, 2, 3)
veh.Orientation = Vector3(4, 5, 6)
obj().Position mustEqual veh.Position
obj().Orientation mustEqual veh.Orientation
}
}
}
@ -58,6 +101,34 @@ class Utility2Test extends ActorTest() {
}
}
class Utility3Test extends ActorTest() {
"Utility" should {
"wire a matrix_terminalc Actor" in {
val obj = Utility(UtilityType.matrix_terminalc, UtilityTest.vehicle)
obj().GUID = PlanetSideGUID(1)
assert(obj().Actor == ActorRef.noSender)
system.actorOf(Props(classOf[UtilityTest.SetupControl], obj), "test") ! ""
receiveOne(Duration.create(100, "ms")) //consume and discard
assert(obj().Actor != ActorRef.noSender)
}
}
}
class Utility4Test extends ActorTest() {
"Utility" should {
"wire an ams_respawn_tube Actor" in {
val obj = Utility(UtilityType.ams_respawn_tube, UtilityTest.vehicle)
obj().GUID = PlanetSideGUID(1)
assert(obj().Actor == ActorRef.noSender)
system.actorOf(Props(classOf[UtilityTest.SetupControl], obj), "test") ! ""
receiveOne(Duration.create(100, "ms")) //consume and discard
assert(obj().Actor != ActorRef.noSender)
}
}
}
object UtilityTest {
val vehicle = Vehicle(GlobalDefinitions.quadstealth)

View file

@ -404,16 +404,16 @@ class WorldSessionActor extends Actor with MDCContextAware {
if(state == DriveState.Deploying) {
log.info(s"DeployRequest: $obj transitioning to deploy state")
obj.Velocity = Some(Vector3.Zero) //no velocity
sendResponse(DeployRequestMessage(player.GUID, vehicle_guid, state, 0, false, obj.Position))
vehicleService ! VehicleServiceMessage(continent.Id, VehicleAction.DeployRequest(player.GUID, vehicle_guid, state, 0, false, obj.Position))
sendResponse(DeployRequestMessage(player.GUID, vehicle_guid, state, 0, false, Vector3.Zero))
vehicleService ! VehicleServiceMessage(continent.Id, VehicleAction.DeployRequest(player.GUID, vehicle_guid, state, 0, false, Vector3.Zero))
import scala.concurrent.duration._
import scala.concurrent.ExecutionContext.Implicits.global
context.system.scheduler.scheduleOnce(obj.DeployTime milliseconds, obj.Actor, Deployment.TryDeploy(DriveState.Deployed))
}
else if(state == DriveState.Deployed) {
log.info(s"DeployRequest: $obj has been Deployed")
sendResponse(DeployRequestMessage(player.GUID, vehicle_guid, state, 0, false, obj.Position))
vehicleService ! VehicleServiceMessage(continent.Id, VehicleAction.DeployRequest(player.GUID, vehicle_guid, state, 0, false, obj.Position))
sendResponse(DeployRequestMessage(player.GUID, vehicle_guid, state, 0, false, Vector3.Zero))
vehicleService ! VehicleServiceMessage(continent.Id, VehicleAction.DeployRequest(player.GUID, vehicle_guid, state, 0, false, Vector3.Zero))
DeploymentActivities(obj)
//...
}
@ -904,8 +904,9 @@ class WorldSessionActor extends Actor with MDCContextAware {
continent.Transport ! Zone.SpawnVehicle(vehicle)
vehicleService ! VehicleServiceMessage(continent.Id, VehicleAction.LoadVehicle(player_guid, vehicle, objedtId, vehicle_guid, vdata))
sendResponse(PlanetsideAttributeMessage(vehicle_guid, 22, 1L)) //mount points off?
//sendResponse(PlanetsideAttributeMessage(vehicle_guid, 21, player_guid.guid))) //fte and ownership?
//sendResponse(ObjectAttachMessage(vehicle_guid, player_guid, 0)))
sendResponse(PlanetsideAttributeMessage(vehicle_guid, 22, 1L)) //mount points off?
sendResponse(PlanetsideAttributeMessage(vehicle_guid, 21, player_guid.guid)) //fte and ownership?
//sendResponse(ObjectAttachMessage(vehicle_guid, player_guid, 0))
vehicleService ! VehicleServiceMessage.UnscheduleDeconstruction(vehicle_guid) //cancel queue timeout delay
vehicleService ! VehicleServiceMessage.DelayedVehicleDeconstruction(vehicle, continent, 21L) //temporary drive away from pad delay
vehicle.Actor ! Mountable.TryMount(player, 0)
@ -978,30 +979,28 @@ class WorldSessionActor extends Actor with MDCContextAware {
case Zone.ClientInitialization(/*initList*/_) =>
//TODO iterate over initList; for now, just do this
sendResponse(
PacketCoding.CreateGamePacket(0,
BuildingInfoUpdateMessage(
PlanetSideGUID(6), //Ceryshen
PlanetSideGUID(2), //Anguta
8, //80% NTU
false, //Base hacked
PlanetSideEmpire.VS, //Base hacked by NC
0, //10 minutes remaining for hack
PlanetSideEmpire.VS, //Base owned by VS
0, //!! Field != 0 will cause malformed packet. See class def.
None,
PlanetSideGeneratorState.Normal, //Generator critical
true, //Respawn tubes destroyed
true, //Force dome active
16, //Tech plant lattice benefit
0,
Nil, //!! Field > 0 will cause malformed packet. See class def.
0,
false,
8, //!! Field != 8 will cause malformed packet. See class def.
None,
true, //Boosted spawn room pain field
true //Boosted generator room pain field
)
BuildingInfoUpdateMessage(
PlanetSideGUID(6), //Ceryshen
PlanetSideGUID(2), //Anguta
8, //80% NTU
false, //Base hacked
PlanetSideEmpire.NEUTRAL, //Base hacked by NC
0, //10 minutes remaining for hack
PlanetSideEmpire.VS, //Base owned by VS
0, //!! Field != 0 will cause malformed packet. See class def.
None,
PlanetSideGeneratorState.Normal, //Generator critical
true, //Respawn tubes destroyed
true, //Force dome active
16, //Tech plant lattice benefit
0,
Nil, //!! Field > 0 will cause malformed packet. See class def.
0,
false,
8, //!! Field != 8 will cause malformed packet. See class def.
None,
true, //Boosted spawn room pain field
true //Boosted generator room pain field
)
)
sendResponse(ContinentalLockUpdateMessage(PlanetSideGUID(13), PlanetSideEmpire.VS)) // "The VS have captured the VS Sanctuary."
@ -1026,9 +1025,10 @@ class WorldSessionActor extends Actor with MDCContextAware {
sendResponse(SetCurrentAvatarMessage(guid,0,0))
sendResponse(CreateShortcutMessage(guid, 1, 0, true, Shortcut.MEDKIT))
sendResponse(ChatMsg(ChatMessageType.CMT_EXPANSIONS, true, "", "1 on", None)) //CC on
sendResponse(PlanetsideAttributeMessage(PlanetSideGUID(0), 82, 0))
(1 to 73).foreach( i => {
sendResponse(PacketCoding.CreateGamePacket(0, PlanetsideAttributeMessage(PlanetSideGUID(i), 43, 0)))
sendResponse(PlanetsideAttributeMessage(PlanetSideGUID(i), 67, 0))
})
case Zone.ItemFromGround(tplayer, item) =>
@ -1156,7 +1156,6 @@ class WorldSessionActor extends Actor with MDCContextAware {
}
var player : Player = null
var testVehicle : Boolean = false
def handleGamePkt(pkt : PlanetSideGamePacket) = pkt match {
case ConnectToWorldRequestMessage(server, token, majorVersion, minorVersion, revision, buildDate, unk) =>
@ -1167,8 +1166,7 @@ class WorldSessionActor extends Actor with MDCContextAware {
player = Player("TestCharacter"+sessionId.toString, PlanetSideEmpire.VS, CharacterGender.Female, 41, 1)
//player.Position = Vector3(3674.8438f, 2726.789f, 91.15625f)
//player.Position = Vector3(3523.039f, 2855.5078f, 90.859375f)
//player.Position = Vector3(3561.0f, 2854.0f, 90.859375f)
player.Position = Vector3(3983.0f, 4344.0f, 266.0f)
player.Position = Vector3(3561.0f, 2854.0f, 90.859375f)
player.Orientation = Vector3(0f, 0f, 90f)
player.Certifications += CertificationType.StandardAssault
player.Certifications += CertificationType.MediumAssault
@ -1216,7 +1214,7 @@ class WorldSessionActor extends Actor with MDCContextAware {
import scala.concurrent.ExecutionContext.Implicits.global
clientKeepAlive.cancel
clientKeepAlive = context.system.scheduler.schedule(0 seconds, 500 milliseconds, self, PokeClient())
//log.warn(PacketCoding.DecodePacket(hex"17 6C 00 00 00 03 01 4C 93 70 48 18 00 00 00").toString)
case msg @ CharacterCreateRequestMessage(name, head, voice, gender, empire) =>
log.info("Handling " + msg)
sendResponse(ActionResultMessage(true, None))
@ -1232,7 +1230,7 @@ class WorldSessionActor extends Actor with MDCContextAware {
//TODO check if can spawn on last continent/location from player?
//TODO if yes, get continent guid accessors
//TODO if no, get sanctuary guid accessors and reset the player's expectations
galaxy ! InterstellarCluster.GetWorld("z6")
galaxy ! InterstellarCluster.GetWorld("home3")
case default =>
log.error("Unsupported " + default + " in " + msg)
}
@ -1244,7 +1242,7 @@ class WorldSessionActor extends Actor with MDCContextAware {
log.info("Reticulating splines ...")
//map-specific initializations
//TODO continent.ClientConfiguration()
sendResponse(PacketCoding.CreateGamePacket(0, PlanetsideAttributeMessage(PlanetSideGUID(0), 112, 1)))
sendResponse(PlanetsideAttributeMessage(PlanetSideGUID(0), 112, 1))
sendResponse(SetEmpireMessage(PlanetSideGUID(2), PlanetSideEmpire.VS)) //HART building C
sendResponse(SetEmpireMessage(PlanetSideGUID(29), PlanetSideEmpire.NC)) //South Villa Gun Tower
@ -1252,70 +1250,8 @@ class WorldSessionActor extends Actor with MDCContextAware {
sendResponse(TimeOfDayMessage(1191182336))
sendResponse(ReplicationStreamMessage(5, Some(6), Vector(SquadListing()))) //clear squad list
sendResponse(PacketCoding.CreateGamePacket(0,
BuildingInfoUpdateMessage(
PlanetSideGUID(6),PlanetSideGUID(10),
0,false,PlanetSideEmpire.NEUTRAL,0,PlanetSideEmpire.NEUTRAL,0,None,PlanetSideGeneratorState.Normal,true,false,0,0,Nil,0,false,8,None,false,false
)
))
sendResponse(PacketCoding.CreateGamePacket(0,
BroadcastWarpgateUpdateMessage(PlanetSideGUID(6), PlanetSideGUID(10), true, false, false)
))
sendResponse(PacketCoding.CreateGamePacket(0,
BuildingInfoUpdateMessage(
PlanetSideGUID(6),PlanetSideGUID(11),
0,false,PlanetSideEmpire.NEUTRAL,0,PlanetSideEmpire.NEUTRAL,0,None,PlanetSideGeneratorState.Normal,true,false,0,0,Nil,0,false,8,None,false,false
)
))
sendResponse(PacketCoding.CreateGamePacket(0,
BroadcastWarpgateUpdateMessage(PlanetSideGUID(6), PlanetSideGUID(11), true, false, false)
))
sendResponse(PacketCoding.CreateGamePacket(0,
BuildingInfoUpdateMessage(
PlanetSideGUID(6),PlanetSideGUID(12),
0,false,PlanetSideEmpire.NEUTRAL,0,PlanetSideEmpire.NEUTRAL,0,None,PlanetSideGeneratorState.Normal,true,false,0,0,Nil,0,false,8,None,false,false
)
))
sendResponse(PacketCoding.CreateGamePacket(0,
BroadcastWarpgateUpdateMessage(PlanetSideGUID(6), PlanetSideGUID(12), true, false, false)
))
sendResponse(PacketCoding.CreateGamePacket(0,
BuildingInfoUpdateMessage(
PlanetSideGUID(6),PlanetSideGUID(13),
0,false,PlanetSideEmpire.NEUTRAL,0,PlanetSideEmpire.NEUTRAL,0,None,PlanetSideGeneratorState.Normal,true,false,0,0,Nil,0,false,8,None,false,false
)
))
sendResponse(PacketCoding.CreateGamePacket(0,
BroadcastWarpgateUpdateMessage(PlanetSideGUID(6), PlanetSideGUID(13), true, false, false)
))
sendResponse(PacketCoding.CreateGamePacket(0,
BuildingInfoUpdateMessage(
PlanetSideGUID(6),PlanetSideGUID(18657),
0,false,PlanetSideEmpire.NEUTRAL,0,PlanetSideEmpire.NEUTRAL,0,None,PlanetSideGeneratorState.Normal,true,false,0,0,Nil,0,false,8,None,false,false
)
))
sendResponse(PacketCoding.CreateGamePacket(0,
BroadcastWarpgateUpdateMessage(PlanetSideGUID(6), PlanetSideGUID(18657), true, false, false)
))
sendResponse(PacketCoding.CreateGamePacket(0,
BuildingInfoUpdateMessage(
PlanetSideGUID(6),PlanetSideGUID(18658),
0,false,PlanetSideEmpire.NEUTRAL,0,PlanetSideEmpire.NEUTRAL,0,None,PlanetSideGeneratorState.Normal,true,false,0,0,Nil,0,false,8,None,false,false
)
))
sendResponse(PacketCoding.CreateGamePacket(0,
BroadcastWarpgateUpdateMessage(PlanetSideGUID(6), PlanetSideGUID(18658), true, false, false)
))
sendRawResponse(hex"C0060000") //basic CaptureFlagUpdateMessage
sendResponse(PacketCoding.CreateGamePacket(0, ZoneInfoMessage(6, true, 0)))
sendResponse(PacketCoding.CreateGamePacket(0, ZoneLockInfoMessage(PlanetSideGUID(6), false, true)))
sendResponse(PacketCoding.CreateGamePacket(0, ZonePopulationUpdateMessage(PlanetSideGUID(6), 414, 138, 1, 138, 1, 138, 1, 138, 0)))
sendResponse(PacketCoding.CreateGamePacket(0, PlanetsideAttributeMessage(PlanetSideGUID(2145), 50, 0)))
sendResponse(PacketCoding.CreateGamePacket(0, PlanetsideAttributeMessage(PlanetSideGUID(2145), 51, 0)))
sendResponse(PacketCoding.CreateGamePacket(0, PlanetsideAttributeMessage(PlanetSideGUID(2146), 50, 0)))
sendResponse(PacketCoding.CreateGamePacket(0, PlanetsideAttributeMessage(PlanetSideGUID(2146), 51, 0)))
sendResponse(PacketCoding.CreateGamePacket(0, PlanetsideAttributeMessage(PlanetSideGUID(2147), 50, 0)))
sendResponse(PacketCoding.CreateGamePacket(0, PlanetsideAttributeMessage(PlanetSideGUID(2147), 51, 0)))
sendResponse(ZonePopulationUpdateMessage(PlanetSideGUID(6), 414, 138, 0, 138, 0, 138, 0, 138, 0))
(1 to 255).foreach(i => { sendResponse(SetEmpireMessage(PlanetSideGUID(i), PlanetSideEmpire.VS)) })
//render Equipment that was dropped into zone before the player arrived
continent.EquipmentOnGround.foreach(item => {
@ -1402,11 +1338,6 @@ class WorldSessionActor extends Actor with MDCContextAware {
player.Crouching = is_crouching
player.Jumping = is_jumping
if(is_crouching && !testVehicle) {
testVehicle = true
self ! PacketCoding.CreateGamePacket(0, ItemTransactionMessage(PlanetSideGUID(3353), TransactionType.Buy, 0, "ams", 0, PlanetSideGUID(0)))
}
val wepInHand : Boolean = player.Slot(player.DrawnSlot).Equipment match {
case Some(item) => item.Definition == GlobalDefinitions.bolt_driver
case None => false
@ -1471,8 +1402,8 @@ class WorldSessionActor extends Actor with MDCContextAware {
case msg @ ReleaseAvatarRequestMessage() =>
log.info(s"ReleaseAvatarRequest: ${player.GUID} on ${continent.Id} has released")
sendResponse(PacketCoding.CreateGamePacket(0, PlanetsideAttributeMessage(player.GUID, 6, 1)))
sendResponse(PacketCoding.CreateGamePacket(0, AvatarDeadStateMessage(DeadState.Release, 0, 0, player.Position, 2, true)))
sendResponse(PlanetsideAttributeMessage(player.GUID, 6, 1))
sendResponse(AvatarDeadStateMessage(DeadState.Release, 0, 0, player.Position, 2, true))
case msg @ SpawnRequestMessage(u1, u2, u3, u4, u5) =>
log.info(s"SpawnRequestMessage: $msg")
@ -1486,14 +1417,14 @@ class WorldSessionActor extends Actor with MDCContextAware {
if(messagetype == ChatMessageType.CMT_SUICIDE) {
val player_guid = player.GUID
val pos = player.Position
sendResponse(PacketCoding.CreateGamePacket(0, PlanetsideAttributeMessage(player_guid, 0, 0)))
sendResponse(PacketCoding.CreateGamePacket(0, PlanetsideAttributeMessage(player_guid, 2, 0)))
sendResponse(PacketCoding.CreateGamePacket(0, DestroyMessage(player_guid, player_guid, PlanetSideGUID(0), pos)))
sendResponse(PacketCoding.CreateGamePacket(0, AvatarDeadStateMessage(DeadState.Dead, 300000, 300000, pos, 2, true)))
sendResponse(PlanetsideAttributeMessage(player_guid, 0, 0))
sendResponse(PlanetsideAttributeMessage(player_guid, 2, 0))
sendResponse(DestroyMessage(player_guid, player_guid, PlanetSideGUID(0), pos))
sendResponse(AvatarDeadStateMessage(DeadState.Dead, 300000, 300000, pos, 2, true))
}
if (messagetype == ChatMessageType.CMT_VOICE) {
sendResponse(PacketCoding.CreateGamePacket(0, ChatMsg(ChatMessageType.CMT_VOICE, false, player.Name, contents, None)))
sendResponse(ChatMsg(ChatMessageType.CMT_VOICE, false, player.Name, contents, None))
}
// TODO: handle this appropriately
@ -2046,10 +1977,10 @@ class WorldSessionActor extends Actor with MDCContextAware {
case Some(obj : Terminal) =>
if(obj.Definition.isInstanceOf[MatrixTerminalDefinition]) {
//TODO matrix spawn point; for now, just blindly bind to show work (and hope nothing breaks)
sendResponse(PacketCoding.CreateGamePacket(0, BindPlayerMessage(1, "@ams", true, true, 0, 0, 0, obj.Position)))
sendResponse(BindPlayerMessage(1, "@ams", true, true, 0, 0, 0, obj.Position))
}
else {
sendResponse(PacketCoding.CreateGamePacket(0, UseItemMessage(avatar_guid, unk1, object_guid, unk2, unk3, unk4, unk5, unk6, unk7, unk8, itemType)))
sendResponse(UseItemMessage(avatar_guid, unk1, object_guid, unk2, unk3, unk4, unk5, unk6, unk7, unk8, itemType))
}
case Some(obj : PlanetSideGameObject) =>
@ -3095,7 +3026,7 @@ class WorldSessionActor extends Actor with MDCContextAware {
obj match {
case vehicle : Vehicle =>
ReloadVehicleAccessPermissions(vehicle) //TODO we should not have to do this imho
sendResponse(PacketCoding.CreateGamePacket(0, PlanetsideAttributeMessage(obj.GUID, 81, 1)))
sendResponse(PlanetsideAttributeMessage(obj.GUID, 81, 1))
case _ => ;
}
}