mirror of
https://github.com/2revoemag/PSF-BotServer.git
synced 2026-04-21 20:05:19 +00:00
ObjectCreateMessage Alterations, Class Object Adjustments (#243)
* power outage failure resulting in the destruction of the original ocm-fixes branch; the git branch refs were corrupted during commit, but the up-to-date changed files remained intact * eliminating the need for CommonFieldData2 and CommonFieldData2WithPlacement * in the middle of integrating CommonFieldData into DetailedLockerContainerData (but not standard LockerContainerData); added field for final boolean in WeaponData * adding faction affinity to Equipment (to match functionality; not becuase I know what ends ...) * in the middle of integrating CommonFieldData into DetailedCommandDetonaterData * applying faction affinity to objects at time of terminal production (but to what ends?); required BoomerTrigger and AmmoBox to always report as NEUTRAL internally * completed the transition from using the old class-based order terminal system to the page-based order terminal system; unused terminal classes have been eliminated * more closely aligned TelepadDeployableData and InternalTelepadDeployableData * modifying TelepadDeployableData make it generic and eliminate the need for InternalTelepadDeployableData after fixing a packet converter to utilize DroppedItemData * modified Terminal operation to branch further outwards from Terminal.Request to the TerminalDefinition's Request method; modified tests to reflect update * loosening up matrix terminal definition limitations * modified ProximityTerminal to support a custom defintition class * rendered the message passing system for Terminals general (Any) in the full scale so it can be specific in instance cases * refactored and moved both EquipmentSlot and ExoSuitDefinition * (re)load Favorites each time player (re)spawns
This commit is contained in:
parent
5fc9e191fe
commit
337cfbe5d2
174 changed files with 6281 additions and 5477 deletions
|
|
@ -2,8 +2,8 @@
|
|||
package game.objectcreatevehicle
|
||||
|
||||
import net.psforever.packet._
|
||||
import net.psforever.packet.game.{ObjectCreateMessage, PlanetSideGUID}
|
||||
import net.psforever.packet.game.objectcreate._
|
||||
import net.psforever.packet.game.{ObjectCreateMessage, PlanetSideGUID}
|
||||
import org.specs2.mutable._
|
||||
import scodec.bits._
|
||||
|
||||
|
|
@ -18,9 +18,8 @@ class DestroyedVehiclesTest extends Specification {
|
|||
cls mustEqual ObjectClass.ams_destroyed
|
||||
guid mustEqual PlanetSideGUID(4157)
|
||||
parent.isDefined mustEqual false
|
||||
data.isDefined mustEqual true
|
||||
data.get.isInstanceOf[DestroyedVehicleData] mustEqual true
|
||||
val dams = data.get.asInstanceOf[DestroyedVehicleData]
|
||||
data.isInstanceOf[DestroyedVehicleData] mustEqual true
|
||||
val dams = data.asInstanceOf[DestroyedVehicleData]
|
||||
dams.pos.coord.x mustEqual 3674.0f
|
||||
dams.pos.coord.y mustEqual 2726.789f
|
||||
dams.pos.coord.z mustEqual 91.15625f
|
||||
|
|
|
|||
|
|
@ -2,8 +2,8 @@
|
|||
package game.objectcreatevehicle
|
||||
|
||||
import net.psforever.packet._
|
||||
import net.psforever.packet.game.{ObjectCreateMessage, PlanetSideGUID}
|
||||
import net.psforever.packet.game.objectcreate._
|
||||
import net.psforever.packet.game.{ObjectCreateMessage, PlanetSideGUID}
|
||||
import net.psforever.types._
|
||||
import org.specs2.mutable._
|
||||
import scodec.bits._
|
||||
|
|
@ -22,28 +22,28 @@ class MountedVehiclesTest extends Specification {
|
|||
len mustEqual 1991
|
||||
cls mustEqual ObjectClass.mosquito
|
||||
guid mustEqual PlanetSideGUID(4308)
|
||||
parent mustEqual None
|
||||
parent.isEmpty mustEqual true
|
||||
data match {
|
||||
case Some(vdata : VehicleData) =>
|
||||
case vdata : VehicleData =>
|
||||
vdata.pos.coord mustEqual Vector3(4571.6875f, 5602.1875f, 93)
|
||||
vdata.pos.orient mustEqual Vector3(11.25f, 2.8125f, 92.8125f)
|
||||
vdata.pos.vel mustEqual Some(Vector3(31.71875f, 8.875f, -0.03125f))
|
||||
vdata.faction mustEqual PlanetSideEmpire.TR
|
||||
vdata.bops mustEqual false
|
||||
vdata.destroyed mustEqual false
|
||||
vdata.jammered mustEqual false
|
||||
vdata.owner_guid mustEqual PlanetSideGUID(3776)
|
||||
vdata.pos.vel.contains(Vector3(31.71875f, 8.875f, -0.03125f)) mustEqual true
|
||||
vdata.data.faction mustEqual PlanetSideEmpire.TR
|
||||
vdata.data.bops mustEqual false
|
||||
vdata.data.alternate mustEqual false
|
||||
vdata.data.v1 mustEqual false
|
||||
vdata.data.v3 mustEqual false
|
||||
vdata.data.v5.isEmpty mustEqual true
|
||||
vdata.data.guid mustEqual PlanetSideGUID(3776)
|
||||
vdata.health mustEqual 255
|
||||
vdata.no_mount_points mustEqual false
|
||||
vdata.driveState mustEqual DriveState.Mobile
|
||||
vdata.cloak mustEqual false
|
||||
vdata.unk1 mustEqual 0
|
||||
vdata.unk2 mustEqual false
|
||||
vdata.unk3 mustEqual false
|
||||
vdata.unk4 mustEqual false
|
||||
vdata.unk5 mustEqual false
|
||||
vdata.unk6 mustEqual false
|
||||
vdata.vehicle_format_data mustEqual Some(VariantVehicleData(7))
|
||||
vdata.vehicle_format_data.contains(VariantVehicleData(7)) mustEqual true
|
||||
vdata.inventory match {
|
||||
case Some(InventoryData(list)) =>
|
||||
list.head.objectClass mustEqual ObjectClass.avatar
|
||||
|
|
@ -54,13 +54,13 @@ class MountedVehiclesTest extends Specification {
|
|||
app match {
|
||||
case CharacterAppearanceData(a, b, ribbons) =>
|
||||
a.app mustEqual BasicCharacterData("ScrawnyRonnie", PlanetSideEmpire.TR, CharacterGender.Male, 5, CharacterVoice.Voice5)
|
||||
a.black_ops mustEqual false
|
||||
a.jammered mustEqual false
|
||||
a.data.bops mustEqual false
|
||||
a.data.v1 mustEqual false
|
||||
a.data.v2.isEmpty mustEqual true
|
||||
a.data.v3 mustEqual false
|
||||
a.data.v4.isEmpty mustEqual true
|
||||
a.data.v5.isEmpty mustEqual true
|
||||
a.exosuit mustEqual ExoSuitType.Agile
|
||||
a.unk1 mustEqual false
|
||||
a.unk2 mustEqual None
|
||||
a.unk3 mustEqual None
|
||||
a.unk4 mustEqual 0
|
||||
a.unk5 mustEqual 0
|
||||
a.unk6 mustEqual 30777081L
|
||||
a.unk7 mustEqual 1
|
||||
|
|
@ -77,7 +77,7 @@ class MountedVehiclesTest extends Specification {
|
|||
b.grenade_state mustEqual GrenadeState.None
|
||||
b.is_cloaking mustEqual false
|
||||
b.charging_pose mustEqual false
|
||||
b.on_zipline mustEqual None
|
||||
b.on_zipline.isEmpty mustEqual true
|
||||
b.unk0 mustEqual 316554L
|
||||
b.unk1 mustEqual false
|
||||
b.unk2 mustEqual false
|
||||
|
|
@ -99,7 +99,7 @@ class MountedVehiclesTest extends Specification {
|
|||
unk mustEqual 7
|
||||
cr mustEqual 5
|
||||
implants mustEqual Nil
|
||||
cosmetics mustEqual Some(Cosmetics(true, true, true, true, false))
|
||||
cosmetics.contains(Cosmetics(true, true, true, true, false)) mustEqual true
|
||||
case _ =>
|
||||
ko
|
||||
}
|
||||
|
|
@ -139,14 +139,18 @@ class MountedVehiclesTest extends Specification {
|
|||
5,
|
||||
CharacterVoice.Voice5
|
||||
),
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
None,
|
||||
false,
|
||||
CommonFieldData(
|
||||
PlanetSideEmpire.TR,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
None,
|
||||
false,
|
||||
None,
|
||||
None,
|
||||
PlanetSideGUID(0)
|
||||
),
|
||||
ExoSuitType.Agile,
|
||||
None,
|
||||
0,
|
||||
0,
|
||||
30777081L,
|
||||
1,
|
||||
|
|
@ -174,7 +178,7 @@ class MountedVehiclesTest extends Specification {
|
|||
None
|
||||
)
|
||||
|
||||
val app : (Int)=>CharacterAppearanceData = CharacterAppearanceData(
|
||||
val app : Int=>CharacterAppearanceData = CharacterAppearanceData(
|
||||
a, b,
|
||||
RibbonBars(
|
||||
MeritCommendation.MarkovVeteran,
|
||||
|
|
@ -194,16 +198,16 @@ class MountedVehiclesTest extends Specification {
|
|||
val inv : InventoryData = InventoryData(
|
||||
List(
|
||||
InternalSlot(ObjectClass.medicalapplicator, PlanetSideGUID(4201), 0,
|
||||
WeaponData(0, 0, 0, List(InternalSlot(ObjectClass.health_canister, PlanetSideGUID(3472), 0, AmmoBoxData(0))))
|
||||
WeaponData(CommonFieldData(PlanetSideEmpire.TR), 0, List(InternalSlot(ObjectClass.health_canister, PlanetSideGUID(3472), 0, CommonFieldData()(false))))
|
||||
),
|
||||
InternalSlot(ObjectClass.bank, PlanetSideGUID(2952), 1,
|
||||
WeaponData(0, 0, 0, List(InternalSlot(ObjectClass.armor_canister, PlanetSideGUID(3758), 0, AmmoBoxData(0))))
|
||||
WeaponData(CommonFieldData(PlanetSideEmpire.TR), 0, List(InternalSlot(ObjectClass.armor_canister, PlanetSideGUID(3758), 0, CommonFieldData()(false))))
|
||||
),
|
||||
InternalSlot(ObjectClass.mini_chaingun, PlanetSideGUID(2929), 2,
|
||||
WeaponData(0, 0, 0, List(InternalSlot(ObjectClass.bullet_9mm, PlanetSideGUID(3292), 0, AmmoBoxData(0))))
|
||||
WeaponData(CommonFieldData(PlanetSideEmpire.TR), 0, List(InternalSlot(ObjectClass.bullet_9mm, PlanetSideGUID(3292), 0, CommonFieldData()(false))))
|
||||
),
|
||||
InternalSlot(ObjectClass.chainblade, PlanetSideGUID(3222), 4,
|
||||
WeaponData(0, 0, 0, List(InternalSlot(ObjectClass.melee_ammo, PlanetSideGUID(3100), 0, AmmoBoxData(0))))
|
||||
WeaponData(CommonFieldData(PlanetSideEmpire.TR), 0, List(InternalSlot(ObjectClass.melee_ammo, PlanetSideGUID(3100), 0, CommonFieldData()(false))))
|
||||
)
|
||||
)
|
||||
)
|
||||
|
|
@ -214,11 +218,7 @@ class MountedVehiclesTest extends Specification {
|
|||
Vector3(11.25f, 2.8125f, 92.8125f),
|
||||
Some(Vector3(31.71875f, 8.875f, -0.03125f))
|
||||
),
|
||||
PlanetSideEmpire.TR,
|
||||
false, false,
|
||||
0,
|
||||
false, false,
|
||||
PlanetSideGUID(3776),
|
||||
CommonFieldData(PlanetSideEmpire.TR, false, false, false, None, false, Some(false), None, PlanetSideGUID(3776)),
|
||||
false,
|
||||
255,
|
||||
false, false,
|
||||
|
|
@ -230,7 +230,7 @@ class MountedVehiclesTest extends Specification {
|
|||
List(
|
||||
InternalSlot(ObjectClass.avatar, PlanetSideGUID(3776), 0, player),
|
||||
InternalSlot(ObjectClass.rotarychaingun_mosquito, PlanetSideGUID(3602), 1,
|
||||
WeaponData(6, 0, 0, List(InternalSlot(ObjectClass.bullet_12mm, PlanetSideGUID(3538), 0, AmmoBoxData(0))))
|
||||
WeaponData(CommonFieldData(), 0, List(InternalSlot(ObjectClass.bullet_12mm, PlanetSideGUID(3538), 0, CommonFieldData()(false))))
|
||||
)
|
||||
)
|
||||
)
|
||||
|
|
|
|||
|
|
@ -2,8 +2,8 @@
|
|||
package game.objectcreatevehicle
|
||||
|
||||
import net.psforever.packet._
|
||||
import net.psforever.packet.game.{ObjectCreateMessage, PlanetSideGUID}
|
||||
import net.psforever.packet.game.objectcreate._
|
||||
import net.psforever.packet.game.{ObjectCreateMessage, PlanetSideGUID}
|
||||
import net.psforever.types._
|
||||
import org.specs2.mutable._
|
||||
import scodec.bits._
|
||||
|
|
@ -21,19 +21,25 @@ class NonstandardVehiclesTest extends Specification {
|
|||
cls mustEqual ObjectClass.droppod
|
||||
guid mustEqual PlanetSideGUID(3595)
|
||||
parent.isDefined mustEqual false
|
||||
data.isDefined mustEqual true
|
||||
data.get.isInstanceOf[DroppodData] mustEqual true
|
||||
val droppod = data.get.asInstanceOf[DroppodData]
|
||||
droppod.basic.pos.coord.x mustEqual 5108.0f
|
||||
droppod.basic.pos.coord.y mustEqual 6164.0f
|
||||
droppod.basic.pos.coord.z mustEqual 1023.9844f
|
||||
droppod.basic.pos.orient.x mustEqual 0f
|
||||
droppod.basic.pos.orient.y mustEqual 0f
|
||||
droppod.basic.pos.orient.z mustEqual 90.0f
|
||||
droppod.basic.unk mustEqual 2
|
||||
droppod.basic.player_guid mustEqual PlanetSideGUID(0)
|
||||
droppod.burn mustEqual false
|
||||
droppod.health mustEqual 255
|
||||
data match {
|
||||
case DroppodData(basic, burn, health) =>
|
||||
basic.pos.coord mustEqual Vector3(5108.0f, 6164.0f, 1023.9844f)
|
||||
basic.pos.orient mustEqual Vector3.z(90.0f)
|
||||
|
||||
basic.data.faction mustEqual PlanetSideEmpire.VS
|
||||
basic.data.bops mustEqual false
|
||||
basic.data.alternate mustEqual false
|
||||
basic.data.v1 mustEqual true
|
||||
basic.data.v2.isDefined mustEqual false
|
||||
basic.data.v3 mustEqual false
|
||||
basic.data.v5.isDefined mustEqual false
|
||||
basic.data.guid mustEqual PlanetSideGUID(0)
|
||||
|
||||
burn mustEqual false
|
||||
health mustEqual 255
|
||||
case _ =>
|
||||
ko
|
||||
}
|
||||
case _ =>
|
||||
ko
|
||||
}
|
||||
|
|
@ -48,10 +54,9 @@ class NonstandardVehiclesTest extends Specification {
|
|||
parent.isDefined mustEqual true
|
||||
parent.get.guid mustEqual PlanetSideGUID(786)
|
||||
parent.get.slot mustEqual 3
|
||||
data.isDefined mustEqual true
|
||||
data.get.isInstanceOf[OrbitalShuttleData] mustEqual true
|
||||
data.get.asInstanceOf[OrbitalShuttleData].faction mustEqual PlanetSideEmpire.VS
|
||||
data.get.asInstanceOf[OrbitalShuttleData].pos.isDefined mustEqual false
|
||||
data.isInstanceOf[OrbitalShuttleData] mustEqual true
|
||||
data.asInstanceOf[OrbitalShuttleData].faction mustEqual PlanetSideEmpire.VS
|
||||
data.asInstanceOf[OrbitalShuttleData].pos.isDefined mustEqual false
|
||||
case _ =>
|
||||
ko
|
||||
}
|
||||
|
|
@ -64,9 +69,8 @@ class NonstandardVehiclesTest extends Specification {
|
|||
cls mustEqual ObjectClass.orbital_shuttle
|
||||
guid mustEqual PlanetSideGUID(1127)
|
||||
parent.isDefined mustEqual false
|
||||
data.isDefined mustEqual true
|
||||
data.get.isInstanceOf[OrbitalShuttleData] mustEqual true
|
||||
val shuttle = data.get.asInstanceOf[OrbitalShuttleData]
|
||||
data.isInstanceOf[OrbitalShuttleData] mustEqual true
|
||||
val shuttle = data.asInstanceOf[OrbitalShuttleData]
|
||||
shuttle.faction mustEqual PlanetSideEmpire.VS
|
||||
shuttle.pos.isDefined mustEqual true
|
||||
shuttle.pos.get.coord.x mustEqual 5610.0156f
|
||||
|
|
@ -82,10 +86,9 @@ class NonstandardVehiclesTest extends Specification {
|
|||
|
||||
"encode (droppod)" in {
|
||||
val obj = DroppodData(
|
||||
CommonFieldData(
|
||||
CommonFieldDataWithPlacement(
|
||||
PlacementData(5108.0f, 6164.0f, 1023.9844f, 0f, 0f, 90.0f),
|
||||
PlanetSideEmpire.VS,
|
||||
2
|
||||
CommonFieldData(PlanetSideEmpire.VS, 2)
|
||||
)
|
||||
)
|
||||
val msg = ObjectCreateMessage(ObjectClass.droppod, PlanetSideGUID(3595), obj)
|
||||
|
|
|
|||
|
|
@ -2,8 +2,8 @@
|
|||
package game.objectcreatevehicle
|
||||
|
||||
import net.psforever.packet._
|
||||
import net.psforever.packet.game.{ObjectCreateMessage, PlanetSideGUID}
|
||||
import net.psforever.packet.game.objectcreate._
|
||||
import net.psforever.packet.game.{ObjectCreateMessage, PlanetSideGUID}
|
||||
import net.psforever.types._
|
||||
import org.specs2.mutable._
|
||||
import scodec.bits._
|
||||
|
|
@ -21,15 +21,14 @@ class NormalVehiclesTest extends Specification {
|
|||
cls mustEqual ObjectClass.fury
|
||||
guid mustEqual PlanetSideGUID(413)
|
||||
parent.isDefined mustEqual false
|
||||
data.isDefined mustEqual true
|
||||
data.get.isInstanceOf[VehicleData] mustEqual true
|
||||
val fury = data.get.asInstanceOf[VehicleData]
|
||||
data.isInstanceOf[VehicleData] mustEqual true
|
||||
val fury = data.asInstanceOf[VehicleData]
|
||||
fury.pos.coord mustEqual Vector3(6531.961f, 1872.1406f,24.734375f)
|
||||
fury.pos.orient mustEqual Vector3(0, 0, 357.1875f)
|
||||
fury.pos.vel mustEqual None
|
||||
fury.faction mustEqual PlanetSideEmpire.VS
|
||||
fury.unk1 mustEqual 2
|
||||
fury.owner_guid mustEqual PlanetSideGUID(0)
|
||||
fury.pos.vel.isEmpty mustEqual true
|
||||
fury.data.faction mustEqual PlanetSideEmpire.VS
|
||||
fury.data.v1 mustEqual true
|
||||
fury.data.guid mustEqual PlanetSideGUID(0)
|
||||
fury.health mustEqual 255
|
||||
//
|
||||
fury.inventory.isDefined mustEqual true
|
||||
|
|
@ -39,17 +38,40 @@ class NormalVehiclesTest extends Specification {
|
|||
mounting.guid mustEqual PlanetSideGUID(400)
|
||||
mounting.parentSlot mustEqual 1
|
||||
mounting.obj.isInstanceOf[WeaponData] mustEqual true
|
||||
val weapon = mounting.obj.asInstanceOf[WeaponData]
|
||||
weapon.unk1 mustEqual 0x6
|
||||
weapon.unk2 mustEqual 0x8
|
||||
weapon.fire_mode mustEqual 0
|
||||
weapon.ammo.size mustEqual 1
|
||||
val ammo = weapon.ammo.head
|
||||
ammo.objectClass mustEqual ObjectClass.hellfire_ammo
|
||||
ammo.guid mustEqual PlanetSideGUID(432)
|
||||
ammo.parentSlot mustEqual 0
|
||||
ammo.obj.isInstanceOf[AmmoBoxData] mustEqual true
|
||||
ammo.obj.asInstanceOf[AmmoBoxData].unk mustEqual 0x8
|
||||
mounting.obj match {
|
||||
case WeaponData(CommonFieldData(wfaction, wbops, walternate, wv1, wv2, wv3, wv4, wv5, wfguid), fmode, ammo, _) =>
|
||||
wfaction mustEqual PlanetSideEmpire.NEUTRAL
|
||||
wbops mustEqual false
|
||||
walternate mustEqual false
|
||||
wv1 mustEqual true
|
||||
wv2.isEmpty mustEqual true
|
||||
wv3 mustEqual false
|
||||
wv4.isEmpty mustEqual true
|
||||
wv5.isEmpty mustEqual true
|
||||
wfguid mustEqual PlanetSideGUID(0)
|
||||
|
||||
fmode mustEqual 0
|
||||
|
||||
ammo.head.objectClass mustEqual ObjectClass.hellfire_ammo
|
||||
ammo.head.guid mustEqual PlanetSideGUID(432)
|
||||
ammo.head.parentSlot mustEqual 0
|
||||
ammo.head.obj match {
|
||||
case CommonFieldData(faction, bops, alternate, v1, v2, v3, v4, v5, fguid) =>
|
||||
faction mustEqual PlanetSideEmpire.NEUTRAL
|
||||
bops mustEqual false
|
||||
alternate mustEqual false
|
||||
v1 mustEqual true
|
||||
v2.isEmpty mustEqual true
|
||||
v3 mustEqual false
|
||||
v4.contains(false) mustEqual true
|
||||
v5.isEmpty mustEqual true
|
||||
fguid mustEqual PlanetSideGUID(0)
|
||||
case _ =>
|
||||
ko
|
||||
}
|
||||
case _ =>
|
||||
ko
|
||||
}
|
||||
case _ =>
|
||||
ko
|
||||
}
|
||||
|
|
@ -62,15 +84,14 @@ class NormalVehiclesTest extends Specification {
|
|||
cls mustEqual ObjectClass.lightning
|
||||
guid mustEqual PlanetSideGUID(90)
|
||||
parent.isDefined mustEqual false
|
||||
data.isDefined mustEqual true
|
||||
data.get.isInstanceOf[VehicleData] mustEqual true
|
||||
val lightning = data.get.asInstanceOf[VehicleData]
|
||||
data.isInstanceOf[VehicleData] mustEqual true
|
||||
val lightning = data.asInstanceOf[VehicleData]
|
||||
lightning.pos.coord mustEqual Vector3(3674.8438f, 2726.789f, 91.15625f)
|
||||
lightning.pos.orient mustEqual Vector3(0, 0, 90)
|
||||
lightning.pos.vel mustEqual None
|
||||
lightning.faction mustEqual PlanetSideEmpire.VS
|
||||
lightning.unk1 mustEqual 2
|
||||
lightning.owner_guid mustEqual PlanetSideGUID(0)
|
||||
lightning.pos.vel.isEmpty mustEqual true
|
||||
lightning.data.faction mustEqual PlanetSideEmpire.VS
|
||||
lightning.data.v1 mustEqual true
|
||||
lightning.data.guid mustEqual PlanetSideGUID(0)
|
||||
lightning.health mustEqual 255
|
||||
|
||||
lightning.inventory.isDefined mustEqual true
|
||||
|
|
@ -79,26 +100,59 @@ class NormalVehiclesTest extends Specification {
|
|||
mounting.objectClass mustEqual ObjectClass.lightning_weapon_system
|
||||
mounting.guid mustEqual PlanetSideGUID(91)
|
||||
mounting.parentSlot mustEqual 1
|
||||
mounting.obj.isInstanceOf[WeaponData] mustEqual true
|
||||
val weapon = mounting.obj.asInstanceOf[WeaponData]
|
||||
weapon.unk1 mustEqual 0x4
|
||||
weapon.unk2 mustEqual 0x8
|
||||
weapon.fire_mode mustEqual 0
|
||||
weapon.ammo.size mustEqual 2
|
||||
//0
|
||||
var ammo = weapon.ammo.head
|
||||
ammo.objectClass mustEqual ObjectClass.bullet_75mm
|
||||
ammo.guid mustEqual PlanetSideGUID(92)
|
||||
ammo.parentSlot mustEqual 0
|
||||
ammo.obj.isInstanceOf[AmmoBoxData] mustEqual true
|
||||
ammo.obj.asInstanceOf[AmmoBoxData].unk mustEqual 0x0
|
||||
//1
|
||||
ammo = weapon.ammo(1)
|
||||
ammo.objectClass mustEqual ObjectClass.bullet_25mm
|
||||
ammo.guid mustEqual PlanetSideGUID(93)
|
||||
ammo.parentSlot mustEqual 1
|
||||
ammo.obj.isInstanceOf[AmmoBoxData] mustEqual true
|
||||
ammo.obj.asInstanceOf[AmmoBoxData].unk mustEqual 0x0
|
||||
mounting.obj match {
|
||||
case WeaponData(CommonFieldData(wfaction, wbops, walternate, wv1, wv2, wv3, wv4, wv5, wfguid), fmode, ammo, _) =>
|
||||
wfaction mustEqual PlanetSideEmpire.VS
|
||||
wbops mustEqual false
|
||||
walternate mustEqual false
|
||||
wv1 mustEqual true
|
||||
wv2.isEmpty mustEqual true
|
||||
wv3 mustEqual false
|
||||
wv4.isEmpty mustEqual true
|
||||
wv5.isEmpty mustEqual true
|
||||
wfguid mustEqual PlanetSideGUID(0)
|
||||
|
||||
fmode mustEqual 0
|
||||
|
||||
//0
|
||||
ammo.head.objectClass mustEqual ObjectClass.bullet_75mm
|
||||
ammo.head.guid mustEqual PlanetSideGUID(92)
|
||||
ammo.head.parentSlot mustEqual 0
|
||||
ammo.head.obj match {
|
||||
case CommonFieldData(faction, bops, alternate, v1, v2, v3, v4, v5, fguid) =>
|
||||
faction mustEqual PlanetSideEmpire.NEUTRAL
|
||||
bops mustEqual false
|
||||
alternate mustEqual false
|
||||
v1 mustEqual false
|
||||
v2.isEmpty mustEqual true
|
||||
v3 mustEqual false
|
||||
v4.contains(false) mustEqual true
|
||||
v5.isEmpty mustEqual true
|
||||
fguid mustEqual PlanetSideGUID(0)
|
||||
case _ =>
|
||||
ko
|
||||
}
|
||||
//1
|
||||
ammo(1).objectClass mustEqual ObjectClass.bullet_25mm
|
||||
ammo(1).guid mustEqual PlanetSideGUID(93)
|
||||
ammo(1).parentSlot mustEqual 1
|
||||
ammo(1).obj match {
|
||||
case CommonFieldData(faction, bops, alternate, v1, v2, v3, v4, v5, fguid) =>
|
||||
faction mustEqual PlanetSideEmpire.NEUTRAL
|
||||
bops mustEqual false
|
||||
alternate mustEqual false
|
||||
v1 mustEqual false
|
||||
v2.isEmpty mustEqual true
|
||||
v3 mustEqual false
|
||||
v4.contains(false) mustEqual true
|
||||
v5.isEmpty mustEqual true
|
||||
fguid mustEqual PlanetSideGUID(0)
|
||||
case _ =>
|
||||
ko
|
||||
}
|
||||
case _ =>
|
||||
ko
|
||||
}
|
||||
case _ =>
|
||||
ko
|
||||
}
|
||||
|
|
@ -111,62 +165,104 @@ class NormalVehiclesTest extends Specification {
|
|||
cls mustEqual ObjectClass.mediumtransport
|
||||
guid mustEqual PlanetSideGUID(387)
|
||||
parent.isDefined mustEqual false
|
||||
data.isDefined mustEqual true
|
||||
data.get.isInstanceOf[VehicleData] mustEqual true
|
||||
val deliverer = data.get.asInstanceOf[VehicleData]
|
||||
deliverer.pos.coord mustEqual Vector3(6531.961f, 1872.1406f, 24.734375f)
|
||||
deliverer.pos.orient mustEqual Vector3(0, 0, 357.1875f)
|
||||
deliverer.pos.vel mustEqual None
|
||||
deliverer.faction mustEqual PlanetSideEmpire.NC
|
||||
deliverer.owner_guid mustEqual PlanetSideGUID(0)
|
||||
deliverer.health mustEqual 255
|
||||
deliverer.driveState mustEqual DriveState.State7
|
||||
deliverer.jammered mustEqual false
|
||||
deliverer.destroyed mustEqual false
|
||||
deliverer.cloak mustEqual false
|
||||
deliverer.unk1 mustEqual 2
|
||||
deliverer.unk2 mustEqual false
|
||||
deliverer.unk3 mustEqual false
|
||||
deliverer.unk4 mustEqual false
|
||||
deliverer.unk5 mustEqual true
|
||||
deliverer.unk6 mustEqual false
|
||||
deliverer.vehicle_format_data mustEqual None
|
||||
deliverer.inventory.isDefined mustEqual true
|
||||
deliverer.inventory.get.contents.size mustEqual 2
|
||||
//0
|
||||
var mounting = deliverer.inventory.get.contents.head
|
||||
mounting.objectClass mustEqual ObjectClass.mediumtransport_weapon_systemA
|
||||
mounting.guid mustEqual PlanetSideGUID(383)
|
||||
mounting.parentSlot mustEqual 5
|
||||
mounting.obj.isInstanceOf[WeaponData] mustEqual true
|
||||
var weapon = mounting.obj.asInstanceOf[WeaponData]
|
||||
weapon.unk1 mustEqual 0x6
|
||||
weapon.unk2 mustEqual 0x8
|
||||
weapon.fire_mode mustEqual 0
|
||||
weapon.ammo.size mustEqual 1
|
||||
var ammo = weapon.ammo.head
|
||||
ammo.objectClass mustEqual ObjectClass.bullet_20mm
|
||||
ammo.guid mustEqual PlanetSideGUID(420)
|
||||
ammo.parentSlot mustEqual 0
|
||||
ammo.obj.isInstanceOf[AmmoBoxData] mustEqual true
|
||||
ammo.obj.asInstanceOf[AmmoBoxData].unk mustEqual 0x8
|
||||
//1
|
||||
mounting = deliverer.inventory.get.contents(1)
|
||||
mounting.objectClass mustEqual ObjectClass.mediumtransport_weapon_systemB
|
||||
mounting.guid mustEqual PlanetSideGUID(556)
|
||||
mounting.parentSlot mustEqual 6
|
||||
mounting.obj.isInstanceOf[WeaponData] mustEqual true
|
||||
weapon = mounting.obj.asInstanceOf[WeaponData]
|
||||
weapon.unk1 mustEqual 0x6
|
||||
weapon.unk2 mustEqual 0x8
|
||||
weapon.fire_mode mustEqual 0
|
||||
weapon.ammo.size mustEqual 1
|
||||
ammo = weapon.ammo.head
|
||||
ammo.objectClass mustEqual ObjectClass.bullet_20mm
|
||||
ammo.guid mustEqual PlanetSideGUID(575)
|
||||
ammo.parentSlot mustEqual 0
|
||||
ammo.obj.isInstanceOf[AmmoBoxData] mustEqual true
|
||||
ammo.obj.asInstanceOf[AmmoBoxData].unk mustEqual 0x8
|
||||
data match {
|
||||
case VehicleData(pos, vdata, unk3, health, unk4, _, driveState, unk5, unk6, _, format, Some(InventoryData(inv))) =>
|
||||
pos.coord mustEqual Vector3(6531.961f, 1872.1406f, 24.734375f)
|
||||
pos.orient mustEqual Vector3.z(357.1875f)
|
||||
|
||||
vdata.faction mustEqual PlanetSideEmpire.NC
|
||||
vdata.alternate mustEqual false
|
||||
vdata.v1 mustEqual true
|
||||
vdata.v3 mustEqual false
|
||||
vdata.v5.isEmpty mustEqual true
|
||||
vdata.guid mustEqual PlanetSideGUID(0)
|
||||
|
||||
health mustEqual 255
|
||||
driveState mustEqual DriveState.State7
|
||||
unk3 mustEqual false
|
||||
unk4 mustEqual false
|
||||
unk5 mustEqual true
|
||||
unk6 mustEqual false
|
||||
format.isEmpty mustEqual true
|
||||
//0
|
||||
inv.head.objectClass mustEqual ObjectClass.mediumtransport_weapon_systemA
|
||||
inv.head.guid mustEqual PlanetSideGUID(383)
|
||||
inv.head.parentSlot mustEqual 5
|
||||
inv.head.obj match {
|
||||
case WeaponData(CommonFieldData(wfaction, wbops, walternate, wv1, wv2, wv3, wv4, wv5, wfguid), fmode, List(ammo), _) =>
|
||||
wfaction mustEqual PlanetSideEmpire.NEUTRAL
|
||||
wbops mustEqual false
|
||||
walternate mustEqual false
|
||||
wv1 mustEqual true
|
||||
wv2.isEmpty mustEqual true
|
||||
wv3 mustEqual false
|
||||
wv4.isEmpty mustEqual true
|
||||
wv5.isEmpty mustEqual true
|
||||
wfguid mustEqual PlanetSideGUID(0)
|
||||
|
||||
fmode mustEqual 0
|
||||
|
||||
ammo.objectClass mustEqual ObjectClass.bullet_20mm
|
||||
ammo.guid mustEqual PlanetSideGUID(420)
|
||||
ammo.parentSlot mustEqual 0
|
||||
ammo.obj match {
|
||||
case CommonFieldData(faction, bops, alternate, v1, v2, v3, v4, v5, fguid) =>
|
||||
faction mustEqual PlanetSideEmpire.NEUTRAL
|
||||
bops mustEqual false
|
||||
alternate mustEqual false
|
||||
v1 mustEqual true
|
||||
v2.isEmpty mustEqual true
|
||||
v3 mustEqual false
|
||||
v4.contains(false) mustEqual true
|
||||
v5.isEmpty mustEqual true
|
||||
fguid mustEqual PlanetSideGUID(0)
|
||||
case _ =>
|
||||
ko
|
||||
}
|
||||
case _ =>
|
||||
ko
|
||||
}
|
||||
//1
|
||||
inv(1).objectClass mustEqual ObjectClass.mediumtransport_weapon_systemB
|
||||
inv(1).guid mustEqual PlanetSideGUID(556)
|
||||
inv(1).parentSlot mustEqual 6
|
||||
inv(1).obj match {
|
||||
case WeaponData(CommonFieldData(wfaction, wbops, walternate, wv1, wv2, wv3, wv4, wv5, wfguid), fmode, List(ammo), _) =>
|
||||
wfaction mustEqual PlanetSideEmpire.NEUTRAL
|
||||
wbops mustEqual false
|
||||
walternate mustEqual false
|
||||
wv1 mustEqual true
|
||||
wv2.isEmpty mustEqual true
|
||||
wv3 mustEqual false
|
||||
wv4.isEmpty mustEqual true
|
||||
wv5.isEmpty mustEqual true
|
||||
wfguid mustEqual PlanetSideGUID(0)
|
||||
|
||||
fmode mustEqual 0
|
||||
|
||||
ammo.objectClass mustEqual ObjectClass.bullet_20mm
|
||||
ammo.guid mustEqual PlanetSideGUID(575)
|
||||
ammo.parentSlot mustEqual 0
|
||||
ammo.obj match {
|
||||
case CommonFieldData(faction, bops, alternate, v1, v2, v3, v4, v5, fguid) =>
|
||||
faction mustEqual PlanetSideEmpire.NEUTRAL
|
||||
bops mustEqual false
|
||||
alternate mustEqual false
|
||||
v1 mustEqual true
|
||||
v2.isEmpty mustEqual true
|
||||
v3 mustEqual false
|
||||
v4.contains(false) mustEqual true
|
||||
v5.isEmpty mustEqual true
|
||||
fguid mustEqual PlanetSideGUID(0)
|
||||
case _ =>
|
||||
ko
|
||||
}
|
||||
case _ =>
|
||||
ko
|
||||
}
|
||||
case _ =>
|
||||
ko
|
||||
}
|
||||
case _ =>
|
||||
ko
|
||||
}
|
||||
|
|
@ -175,22 +271,26 @@ class NormalVehiclesTest extends Specification {
|
|||
"encode (fury)" in {
|
||||
val obj = VehicleData(
|
||||
PlacementData(6531.961f, 1872.1406f, 24.734375f, 0f, 0f, 357.1875f),
|
||||
PlanetSideEmpire.VS,
|
||||
false, false,
|
||||
2,
|
||||
false, false,
|
||||
PlanetSideGUID(0),
|
||||
CommonFieldData(PlanetSideEmpire.VS, false, false, true, None, false, Some(false), None, PlanetSideGUID(0)),
|
||||
false,
|
||||
255,
|
||||
false, false,
|
||||
DriveState.Mobile,
|
||||
false, false, false,
|
||||
None,
|
||||
Some(InventoryData(
|
||||
Some(InventoryData(List(
|
||||
InventoryItemData(ObjectClass.fury_weapon_systema, PlanetSideGUID(400), 1,
|
||||
WeaponData(0x6, 0x8, 0, ObjectClass.hellfire_ammo, PlanetSideGUID(432), 0, AmmoBoxData(0x8))
|
||||
) :: Nil
|
||||
))
|
||||
WeaponData(
|
||||
CommonFieldData(PlanetSideEmpire.NEUTRAL, 2),
|
||||
0,
|
||||
List(
|
||||
InternalSlot(ObjectClass.hellfire_ammo, PlanetSideGUID(432), 0,
|
||||
CommonFieldData(PlanetSideEmpire.NEUTRAL, 2)(false)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)))
|
||||
)(VehicleFormat.Normal)
|
||||
val msg = ObjectCreateMessage(ObjectClass.fury, PlanetSideGUID(413), obj)
|
||||
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
|
||||
|
|
@ -201,22 +301,25 @@ class NormalVehiclesTest extends Specification {
|
|||
"encode (lightning)" in {
|
||||
val obj = VehicleData(
|
||||
PlacementData(3674.8438f, 2726.789f, 91.15625f, 0f, 0f, 90.0f),
|
||||
PlanetSideEmpire.VS,
|
||||
false, false,
|
||||
2,
|
||||
false, false,
|
||||
PlanetSideGUID(0),
|
||||
CommonFieldData(PlanetSideEmpire.VS, false, false, true, None, false, Some(false), None, PlanetSideGUID(0)),
|
||||
false,
|
||||
255,
|
||||
false, false,
|
||||
DriveState.Mobile,
|
||||
false, false, false,
|
||||
None,
|
||||
Some(InventoryData(
|
||||
Some(InventoryData(List(
|
||||
InventoryItemData(ObjectClass.lightning_weapon_system, PlanetSideGUID(91), 1,
|
||||
WeaponData(4, 8, 0, ObjectClass.bullet_75mm, PlanetSideGUID(92), 0, AmmoBoxData(), ObjectClass.bullet_25mm, PlanetSideGUID(93), 1, AmmoBoxData())
|
||||
) :: Nil
|
||||
))
|
||||
WeaponData(
|
||||
CommonFieldData(PlanetSideEmpire.VS, 2),
|
||||
0,
|
||||
List(
|
||||
InternalSlot(ObjectClass.bullet_75mm, PlanetSideGUID(92), 0, CommonFieldData()(false)),
|
||||
InternalSlot(ObjectClass.bullet_25mm, PlanetSideGUID(93), 1, CommonFieldData()(false))
|
||||
)
|
||||
)
|
||||
)
|
||||
)))
|
||||
)(VehicleFormat.Normal)
|
||||
val msg = ObjectCreateMessage(ObjectClass.lightning, PlanetSideGUID(90), obj)
|
||||
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
|
||||
|
|
@ -227,25 +330,37 @@ class NormalVehiclesTest extends Specification {
|
|||
"encode (medium transport)" in {
|
||||
val obj = VehicleData(
|
||||
PlacementData(6531.961f, 1872.1406f, 24.734375f, 0f, 0f, 357.1875f),
|
||||
PlanetSideEmpire.NC,
|
||||
false, false,
|
||||
2,
|
||||
false, false,
|
||||
PlanetSideGUID(0),
|
||||
CommonFieldData(PlanetSideEmpire.NC, false, false, true, None, false, Some(false), None, PlanetSideGUID(0)),
|
||||
false,
|
||||
255,
|
||||
false, false,
|
||||
DriveState.State7,
|
||||
true, false, false,
|
||||
None,
|
||||
Some(InventoryData(
|
||||
Some(InventoryData(List(
|
||||
InventoryItemData(ObjectClass.mediumtransport_weapon_systemA, PlanetSideGUID(383), 5,
|
||||
WeaponData(6, 8, ObjectClass.bullet_20mm, PlanetSideGUID(420), 0, AmmoBoxData(8))
|
||||
) ::
|
||||
InventoryItemData(ObjectClass.mediumtransport_weapon_systemB, PlanetSideGUID(556), 6,
|
||||
WeaponData(6, 8, ObjectClass.bullet_20mm, PlanetSideGUID(575), 0, AmmoBoxData(8))
|
||||
) :: Nil
|
||||
))
|
||||
WeaponData(
|
||||
CommonFieldData(PlanetSideEmpire.NEUTRAL, 2),
|
||||
0,
|
||||
List(
|
||||
InternalSlot(ObjectClass.bullet_20mm, PlanetSideGUID(420), 0,
|
||||
CommonFieldData(PlanetSideEmpire.NEUTRAL, 2)(false)
|
||||
)
|
||||
)
|
||||
)
|
||||
),
|
||||
InventoryItemData(ObjectClass.mediumtransport_weapon_systemB, PlanetSideGUID(556), 6,
|
||||
WeaponData(
|
||||
CommonFieldData(PlanetSideEmpire.NEUTRAL, 2),
|
||||
0,
|
||||
List(
|
||||
InternalSlot(ObjectClass.bullet_20mm, PlanetSideGUID(575), 0,
|
||||
CommonFieldData(PlanetSideEmpire.NEUTRAL, 2)(false)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)))
|
||||
)(VehicleFormat.Normal)
|
||||
val msg = ObjectCreateMessage(ObjectClass.mediumtransport, PlanetSideGUID(387), obj)
|
||||
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
|
||||
|
|
|
|||
|
|
@ -2,8 +2,8 @@
|
|||
package game.objectcreatevehicle
|
||||
|
||||
import net.psforever.packet._
|
||||
import net.psforever.packet.game.{ObjectCreateMessage, PlanetSideGUID}
|
||||
import net.psforever.packet.game.objectcreate._
|
||||
import net.psforever.packet.game.{ObjectCreateMessage, PlanetSideGUID}
|
||||
import net.psforever.types._
|
||||
import org.specs2.mutable._
|
||||
import scodec.bits._
|
||||
|
|
@ -22,20 +22,19 @@ class UtilityVehiclesTest extends Specification {
|
|||
cls mustEqual ObjectClass.ant
|
||||
guid mustEqual PlanetSideGUID(380)
|
||||
parent.isDefined mustEqual false
|
||||
data.isDefined mustEqual true
|
||||
data.get.isInstanceOf[VehicleData] mustEqual true
|
||||
val ant = data.get.asInstanceOf[VehicleData]
|
||||
data.isInstanceOf[VehicleData] mustEqual true
|
||||
val ant = data.asInstanceOf[VehicleData]
|
||||
ant.pos.coord mustEqual Vector3(3674.8438f, 2726.789f, 91.15625f)
|
||||
ant.pos.orient mustEqual Vector3(0, 0, 90)
|
||||
ant.faction mustEqual PlanetSideEmpire.VS
|
||||
ant.owner_guid mustEqual PlanetSideGUID(0)
|
||||
ant.data.faction mustEqual PlanetSideEmpire.VS
|
||||
ant.data.alternate mustEqual false
|
||||
ant.data.v1 mustEqual true
|
||||
ant.data.v3 mustEqual false
|
||||
ant.data.v5.isEmpty mustEqual true
|
||||
ant.data.guid mustEqual PlanetSideGUID(0)
|
||||
ant.driveState mustEqual DriveState.Mobile
|
||||
ant.health mustEqual 255
|
||||
ant.jammered mustEqual false
|
||||
ant.destroyed mustEqual false
|
||||
ant.cloak mustEqual false
|
||||
ant.unk1 mustEqual 2
|
||||
ant.unk2 mustEqual false
|
||||
ant.unk3 mustEqual false
|
||||
ant.unk4 mustEqual false
|
||||
ant.unk5 mustEqual false
|
||||
|
|
@ -52,22 +51,21 @@ class UtilityVehiclesTest extends Specification {
|
|||
cls mustEqual ObjectClass.ams
|
||||
guid mustEqual PlanetSideGUID(4157)
|
||||
parent.isDefined mustEqual false
|
||||
data.isDefined mustEqual true
|
||||
data.get.isInstanceOf[VehicleData] mustEqual true
|
||||
val ams = data.get.asInstanceOf[VehicleData]
|
||||
data.isInstanceOf[VehicleData] mustEqual true
|
||||
val ams = data.asInstanceOf[VehicleData]
|
||||
ams.pos.coord mustEqual Vector3(3674, 2726.789f, 91.15625f)
|
||||
ams.pos.orient mustEqual Vector3(0, 0, 90)
|
||||
ams.pos.vel mustEqual None
|
||||
ams.faction mustEqual PlanetSideEmpire.VS
|
||||
ams.owner_guid mustEqual PlanetSideGUID(2885)
|
||||
ams.data.faction mustEqual PlanetSideEmpire.VS
|
||||
ams.data.alternate mustEqual false
|
||||
ams.data.v1 mustEqual false
|
||||
ams.data.v3 mustEqual false
|
||||
ams.data.v5.isEmpty mustEqual true
|
||||
ams.data.guid mustEqual PlanetSideGUID(2885)
|
||||
ams.driveState mustEqual DriveState.Deployed
|
||||
ams.vehicle_format_data mustEqual Some(UtilityVehicleData(60))
|
||||
ams.health mustEqual 236
|
||||
ams.jammered mustEqual false
|
||||
ams.destroyed mustEqual false
|
||||
ams.cloak mustEqual true
|
||||
ams.unk1 mustEqual 0
|
||||
ams.unk2 mustEqual false
|
||||
ams.unk3 mustEqual false
|
||||
ams.unk4 mustEqual false
|
||||
ams.unk5 mustEqual false
|
||||
|
|
@ -78,19 +76,19 @@ class UtilityVehiclesTest extends Specification {
|
|||
inv.head.objectClass mustEqual ObjectClass.matrix_terminalc
|
||||
inv.head.guid mustEqual PlanetSideGUID(3663)
|
||||
inv.head.parentSlot mustEqual 1
|
||||
inv.head.obj.isInstanceOf[CommonTerminalData] mustEqual true
|
||||
inv.head.obj.isInstanceOf[CommonFieldData] mustEqual true
|
||||
inv(1).objectClass mustEqual ObjectClass.ams_respawn_tube
|
||||
inv(1).guid mustEqual PlanetSideGUID(3638)
|
||||
inv(1).parentSlot mustEqual 2
|
||||
inv(1).obj.isInstanceOf[CommonTerminalData] mustEqual true
|
||||
inv(1).obj.isInstanceOf[CommonFieldData] mustEqual true
|
||||
inv(2).objectClass mustEqual ObjectClass.order_terminala
|
||||
inv(2).guid mustEqual PlanetSideGUID(3827)
|
||||
inv(2).parentSlot mustEqual 3
|
||||
inv(2).obj.isInstanceOf[CommonTerminalData] mustEqual true
|
||||
inv(2).obj.isInstanceOf[CommonFieldData] mustEqual true
|
||||
inv(3).objectClass mustEqual ObjectClass.order_terminalb
|
||||
inv(3).guid mustEqual PlanetSideGUID(3556)
|
||||
inv(3).parentSlot mustEqual 4
|
||||
inv(3).obj.isInstanceOf[CommonTerminalData] mustEqual true
|
||||
inv(3).obj.isInstanceOf[CommonFieldData] mustEqual true
|
||||
case _ =>
|
||||
ko
|
||||
}
|
||||
|
|
@ -99,11 +97,7 @@ class UtilityVehiclesTest extends Specification {
|
|||
"encode (ant)" in {
|
||||
val obj = VehicleData(
|
||||
PlacementData(3674.8438f, 2726.789f, 91.15625f, 0f, 0f, 90.0f),
|
||||
PlanetSideEmpire.VS,
|
||||
false, false,
|
||||
2,
|
||||
false, false,
|
||||
PlanetSideGUID(0),
|
||||
CommonFieldData(PlanetSideEmpire.VS, false, false, true, None, false, Some(false), None, PlanetSideGUID(0)),
|
||||
false,
|
||||
255,
|
||||
false, false,
|
||||
|
|
@ -121,11 +115,7 @@ class UtilityVehiclesTest extends Specification {
|
|||
"encode (ams)" in {
|
||||
val obj = VehicleData(
|
||||
PlacementData(3674.0f, 2726.789f, 91.15625f, 0f, 0f, 90.0f),
|
||||
PlanetSideEmpire.VS,
|
||||
false, false,
|
||||
0,
|
||||
false, false,
|
||||
PlanetSideGUID(2885),
|
||||
CommonFieldData(PlanetSideEmpire.VS, false, false, false, None, false, Some(false), None, PlanetSideGUID(2885)),
|
||||
false,
|
||||
236,
|
||||
false, false,
|
||||
|
|
@ -133,10 +123,10 @@ class UtilityVehiclesTest extends Specification {
|
|||
false, true, true,
|
||||
Some(UtilityVehicleData(60)), //what does this mean?
|
||||
Some(InventoryData(List(
|
||||
InternalSlot(ObjectClass.matrix_terminalc, PlanetSideGUID(3663), 1, CommonTerminalData(PlanetSideEmpire.VS)),
|
||||
InternalSlot(ObjectClass.ams_respawn_tube, PlanetSideGUID(3638), 2, CommonTerminalData(PlanetSideEmpire.VS)),
|
||||
InternalSlot(ObjectClass.order_terminala, PlanetSideGUID(3827), 3, CommonTerminalData(PlanetSideEmpire.VS)),
|
||||
InternalSlot(ObjectClass.order_terminalb, PlanetSideGUID(3556), 4, CommonTerminalData(PlanetSideEmpire.VS))
|
||||
InternalSlot(ObjectClass.matrix_terminalc, PlanetSideGUID(3663), 1, CommonFieldData(PlanetSideEmpire.VS)(false)),
|
||||
InternalSlot(ObjectClass.ams_respawn_tube, PlanetSideGUID(3638), 2, CommonFieldData(PlanetSideEmpire.VS)(false)),
|
||||
InternalSlot(ObjectClass.order_terminala, PlanetSideGUID(3827), 3, CommonFieldData(PlanetSideEmpire.VS)(false)),
|
||||
InternalSlot(ObjectClass.order_terminalb, PlanetSideGUID(3556), 4, CommonFieldData(PlanetSideEmpire.VS)(false))
|
||||
)))
|
||||
)(VehicleFormat.Utility)
|
||||
val msg = ObjectCreateMessage(ObjectClass.ams, PlanetSideGUID(4157), obj)
|
||||
|
|
|
|||
|
|
@ -19,17 +19,16 @@ class VariantVehiclesTest extends Specification {
|
|||
cls mustEqual ObjectClass.switchblade
|
||||
guid mustEqual PlanetSideGUID(418)
|
||||
parent.isDefined mustEqual false
|
||||
data.isDefined mustEqual true
|
||||
data.get.isInstanceOf[VehicleData] mustEqual true
|
||||
val switchblade = data.get.asInstanceOf[VehicleData]
|
||||
data.isInstanceOf[VehicleData] mustEqual true
|
||||
val switchblade = data.asInstanceOf[VehicleData]
|
||||
switchblade.pos.coord.x mustEqual 6531.961f
|
||||
switchblade.pos.coord.y mustEqual 1872.1406f
|
||||
switchblade.pos.coord.z mustEqual 24.734375f
|
||||
switchblade.pos.orient.x mustEqual 0f
|
||||
switchblade.pos.orient.y mustEqual 0f
|
||||
switchblade.pos.orient.z mustEqual 357.1875f
|
||||
switchblade.faction mustEqual PlanetSideEmpire.VS
|
||||
switchblade.unk1 mustEqual 2
|
||||
switchblade.data.faction mustEqual PlanetSideEmpire.VS
|
||||
switchblade.data.v1 mustEqual true
|
||||
switchblade.health mustEqual 255
|
||||
switchblade.driveState mustEqual DriveState.Mobile
|
||||
switchblade.inventory.isDefined mustEqual true
|
||||
|
|
@ -39,21 +38,59 @@ class VariantVehiclesTest extends Specification {
|
|||
weapon.objectClass mustEqual ObjectClass.scythe
|
||||
weapon.guid mustEqual PlanetSideGUID(355)
|
||||
weapon.parentSlot mustEqual 1
|
||||
weapon.obj.asInstanceOf[WeaponData].unk1 mustEqual 0x6
|
||||
weapon.obj.asInstanceOf[WeaponData].unk2 mustEqual 0x8
|
||||
weapon.obj.asInstanceOf[WeaponData].ammo.size mustEqual 2
|
||||
//ammo-0
|
||||
var ammo = weapon.obj.asInstanceOf[WeaponData].ammo.head
|
||||
ammo.objectClass mustEqual ObjectClass.ancient_ammo_vehicle
|
||||
ammo.guid mustEqual PlanetSideGUID(366)
|
||||
ammo.parentSlot mustEqual 0
|
||||
ammo.obj.asInstanceOf[AmmoBoxData].unk mustEqual 0x8
|
||||
//ammo-1
|
||||
ammo = weapon.obj.asInstanceOf[WeaponData].ammo(1)
|
||||
ammo.objectClass mustEqual ObjectClass.ancient_ammo_vehicle
|
||||
ammo.guid mustEqual PlanetSideGUID(385)
|
||||
ammo.parentSlot mustEqual 1
|
||||
ammo.obj.asInstanceOf[AmmoBoxData].unk mustEqual 0x8
|
||||
weapon.obj match {
|
||||
case WeaponData(CommonFieldData(wfaction, wbops, walternate, wv1, wv2, wv3, wv4, wv5, wfguid), fmode, ammo, _) =>
|
||||
wfaction mustEqual PlanetSideEmpire.NEUTRAL
|
||||
wbops mustEqual false
|
||||
walternate mustEqual false
|
||||
wv1 mustEqual true
|
||||
wv2.isEmpty mustEqual true
|
||||
wv3 mustEqual false
|
||||
wv4.isEmpty mustEqual true
|
||||
wv5.isEmpty mustEqual true
|
||||
wfguid mustEqual PlanetSideGUID(0)
|
||||
|
||||
fmode mustEqual 0
|
||||
|
||||
//ammo-0
|
||||
ammo.head.objectClass mustEqual ObjectClass.ancient_ammo_vehicle
|
||||
ammo.head.guid mustEqual PlanetSideGUID(366)
|
||||
ammo.head.parentSlot mustEqual 0
|
||||
ammo.head.obj match {
|
||||
case CommonFieldData(faction, bops, alternate, v1, v2, v3, v4, v5, fguid) =>
|
||||
faction mustEqual PlanetSideEmpire.NEUTRAL
|
||||
bops mustEqual false
|
||||
alternate mustEqual false
|
||||
v1 mustEqual true
|
||||
v2.isEmpty mustEqual true
|
||||
v3 mustEqual false
|
||||
v4.contains(false) mustEqual true
|
||||
v5.isEmpty mustEqual true
|
||||
fguid mustEqual PlanetSideGUID(0)
|
||||
case _ =>
|
||||
ko
|
||||
}
|
||||
//ammo-1
|
||||
ammo(1).objectClass mustEqual ObjectClass.ancient_ammo_vehicle
|
||||
ammo(1).guid mustEqual PlanetSideGUID(385)
|
||||
ammo(1).parentSlot mustEqual 1
|
||||
ammo(1).obj match {
|
||||
case CommonFieldData(faction, bops, alternate, v1, v2, v3, v4, v5, fguid) =>
|
||||
faction mustEqual PlanetSideEmpire.NEUTRAL
|
||||
bops mustEqual false
|
||||
alternate mustEqual false
|
||||
v1 mustEqual true
|
||||
v2.isEmpty mustEqual true
|
||||
v3 mustEqual false
|
||||
v4.contains(false) mustEqual true
|
||||
v5.isEmpty mustEqual true
|
||||
fguid mustEqual PlanetSideGUID(0)
|
||||
case _ =>
|
||||
ko
|
||||
}
|
||||
case _ =>
|
||||
ko
|
||||
}
|
||||
case _ =>
|
||||
ko
|
||||
}
|
||||
|
|
@ -62,22 +99,25 @@ class VariantVehiclesTest extends Specification {
|
|||
"encode (switchblade)" in {
|
||||
val obj = VehicleData(
|
||||
PlacementData(6531.961f, 1872.1406f, 24.734375f, 0f, 0f, 357.1875f),
|
||||
PlanetSideEmpire.VS,
|
||||
false, false,
|
||||
2,
|
||||
false, false,
|
||||
PlanetSideGUID(0),
|
||||
CommonFieldData(PlanetSideEmpire.VS, false, false, true, None, false, Some(false), None, PlanetSideGUID(0)),
|
||||
false,
|
||||
255,
|
||||
false, false,
|
||||
DriveState.Mobile,
|
||||
false, false, false,
|
||||
Some(VariantVehicleData(0)),
|
||||
Some(InventoryData(
|
||||
Some(InventoryData(List(
|
||||
InventoryItemData(ObjectClass.scythe, PlanetSideGUID(355), 1,
|
||||
WeaponData(0x6, 0x8, 0, ObjectClass.ancient_ammo_vehicle, PlanetSideGUID(366), 0, AmmoBoxData(0x8), ObjectClass.ancient_ammo_vehicle, PlanetSideGUID(385), 1, AmmoBoxData(0x8))
|
||||
) :: Nil
|
||||
))
|
||||
WeaponData(
|
||||
CommonFieldData(PlanetSideEmpire.NEUTRAL, false, false, true, None, false, None, None, PlanetSideGUID(0)),
|
||||
0,
|
||||
List(
|
||||
InternalSlot(ObjectClass.ancient_ammo_vehicle, PlanetSideGUID(366), 0, CommonFieldData(PlanetSideEmpire.NEUTRAL, 2)(false)),
|
||||
InternalSlot(ObjectClass.ancient_ammo_vehicle, PlanetSideGUID(385), 1, CommonFieldData(PlanetSideEmpire.NEUTRAL, 2)(false))
|
||||
)
|
||||
)
|
||||
)
|
||||
)))
|
||||
)(VehicleFormat.Variant)
|
||||
val msg = ObjectCreateMessage(ObjectClass.switchblade, PlanetSideGUID(418), obj)
|
||||
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue