mirror of
https://github.com/2revoemag/PSF-BotServer.git
synced 2026-02-20 15:13:35 +00:00
Merge pull request #151 from Fate-JH/object-create-updates
Object Create Message Update #2.5
This commit is contained in:
commit
986594de87
62 changed files with 2259 additions and 677 deletions
|
|
@ -96,12 +96,13 @@ class ObjectCreateDetailedMessageTest extends Specification {
|
|||
parent.get.slot mustEqual 2
|
||||
data.isDefined mustEqual true
|
||||
val obj_wep = data.get.asInstanceOf[DetailedWeaponData]
|
||||
obj_wep.unk mustEqual 4
|
||||
obj_wep.unk1 mustEqual 2
|
||||
obj_wep.unk2 mustEqual 8
|
||||
val obj_ammo = obj_wep.ammo
|
||||
obj_ammo.objectClass mustEqual 28
|
||||
obj_ammo.guid mustEqual PlanetSideGUID(1286)
|
||||
obj_ammo.parentSlot mustEqual 0
|
||||
obj_ammo.obj.asInstanceOf[DetailedAmmoBoxData].magazine mustEqual 30
|
||||
obj_ammo.head.objectClass mustEqual 28
|
||||
obj_ammo.head.guid mustEqual PlanetSideGUID(1286)
|
||||
obj_ammo.head.parentSlot mustEqual 0
|
||||
obj_ammo.head.obj.asInstanceOf[DetailedAmmoBoxData].magazine mustEqual 30
|
||||
case _ =>
|
||||
ko
|
||||
}
|
||||
|
|
@ -117,7 +118,7 @@ class ObjectCreateDetailedMessageTest extends Specification {
|
|||
parent.get.guid mustEqual PlanetSideGUID(75)
|
||||
parent.get.slot mustEqual 2
|
||||
data.isDefined mustEqual true
|
||||
val obj_wep = data.get.asInstanceOf[DetailedConcurrentFeedWeaponData]
|
||||
val obj_wep = data.get.asInstanceOf[DetailedWeaponData]
|
||||
obj_wep.unk1 mustEqual 0
|
||||
obj_wep.unk2 mustEqual 8
|
||||
val obj_ammo = obj_wep.ammo
|
||||
|
|
@ -229,66 +230,66 @@ class ObjectCreateDetailedMessageTest extends Specification {
|
|||
val inventory = char.inventory.get.contents
|
||||
inventory.size mustEqual 10
|
||||
//0
|
||||
inventory.head.item.objectClass mustEqual ObjectClass.beamer
|
||||
inventory.head.item.guid mustEqual PlanetSideGUID(76)
|
||||
inventory.head.item.parentSlot mustEqual 0
|
||||
var wep = inventory.head.item.obj.asInstanceOf[DetailedWeaponData]
|
||||
wep.ammo.objectClass mustEqual ObjectClass.energy_cell
|
||||
wep.ammo.guid mustEqual PlanetSideGUID(77)
|
||||
wep.ammo.parentSlot mustEqual 0
|
||||
wep.ammo.obj.asInstanceOf[DetailedAmmoBoxData].magazine mustEqual 16
|
||||
inventory.head.objectClass mustEqual ObjectClass.beamer
|
||||
inventory.head.guid mustEqual PlanetSideGUID(76)
|
||||
inventory.head.parentSlot mustEqual 0
|
||||
var wep = inventory.head.obj.asInstanceOf[DetailedWeaponData]
|
||||
wep.ammo.head.objectClass mustEqual ObjectClass.energy_cell
|
||||
wep.ammo.head.guid mustEqual PlanetSideGUID(77)
|
||||
wep.ammo.head.parentSlot mustEqual 0
|
||||
wep.ammo.head.obj.asInstanceOf[DetailedAmmoBoxData].magazine mustEqual 16
|
||||
//1
|
||||
inventory(1).item.objectClass mustEqual ObjectClass.suppressor
|
||||
inventory(1).item.guid mustEqual PlanetSideGUID(78)
|
||||
inventory(1).item.parentSlot mustEqual 2
|
||||
wep = inventory(1).item.obj.asInstanceOf[DetailedWeaponData]
|
||||
wep.ammo.objectClass mustEqual ObjectClass.bullet_9mm
|
||||
wep.ammo.guid mustEqual PlanetSideGUID(79)
|
||||
wep.ammo.parentSlot mustEqual 0
|
||||
wep.ammo.obj.asInstanceOf[DetailedAmmoBoxData].magazine mustEqual 25
|
||||
inventory(1).objectClass mustEqual ObjectClass.suppressor
|
||||
inventory(1).guid mustEqual PlanetSideGUID(78)
|
||||
inventory(1).parentSlot mustEqual 2
|
||||
wep = inventory(1).obj.asInstanceOf[DetailedWeaponData]
|
||||
wep.ammo.head.objectClass mustEqual ObjectClass.bullet_9mm
|
||||
wep.ammo.head.guid mustEqual PlanetSideGUID(79)
|
||||
wep.ammo.head.parentSlot mustEqual 0
|
||||
wep.ammo.head.obj.asInstanceOf[DetailedAmmoBoxData].magazine mustEqual 25
|
||||
//2
|
||||
inventory(2).item.objectClass mustEqual ObjectClass.forceblade
|
||||
inventory(2).item.guid mustEqual PlanetSideGUID(80)
|
||||
inventory(2).item.parentSlot mustEqual 4
|
||||
wep = inventory(2).item.obj.asInstanceOf[DetailedWeaponData]
|
||||
wep.ammo.objectClass mustEqual ObjectClass.melee_ammo
|
||||
wep.ammo.guid mustEqual PlanetSideGUID(81)
|
||||
wep.ammo.parentSlot mustEqual 0
|
||||
wep.ammo.obj.asInstanceOf[DetailedAmmoBoxData].magazine mustEqual 1
|
||||
inventory(2).objectClass mustEqual ObjectClass.forceblade
|
||||
inventory(2).guid mustEqual PlanetSideGUID(80)
|
||||
inventory(2).parentSlot mustEqual 4
|
||||
wep = inventory(2).obj.asInstanceOf[DetailedWeaponData]
|
||||
wep.ammo.head.objectClass mustEqual ObjectClass.melee_ammo
|
||||
wep.ammo.head.guid mustEqual PlanetSideGUID(81)
|
||||
wep.ammo.head.parentSlot mustEqual 0
|
||||
wep.ammo.head.obj.asInstanceOf[DetailedAmmoBoxData].magazine mustEqual 1
|
||||
//3
|
||||
inventory(3).item.objectClass mustEqual ObjectClass.locker_container
|
||||
inventory(3).item.guid mustEqual PlanetSideGUID(82)
|
||||
inventory(3).item.parentSlot mustEqual 5
|
||||
inventory(3).item.obj.asInstanceOf[DetailedAmmoBoxData].magazine mustEqual 1
|
||||
inventory(3).objectClass mustEqual ObjectClass.locker_container
|
||||
inventory(3).guid mustEqual PlanetSideGUID(82)
|
||||
inventory(3).parentSlot mustEqual 5
|
||||
inventory(3).obj.asInstanceOf[DetailedAmmoBoxData].magazine mustEqual 1
|
||||
//4
|
||||
inventory(4).item.objectClass mustEqual ObjectClass.bullet_9mm
|
||||
inventory(4).item.guid mustEqual PlanetSideGUID(83)
|
||||
inventory(4).item.parentSlot mustEqual 6
|
||||
inventory(4).item.obj.asInstanceOf[DetailedAmmoBoxData].magazine mustEqual 50
|
||||
inventory(4).objectClass mustEqual ObjectClass.bullet_9mm
|
||||
inventory(4).guid mustEqual PlanetSideGUID(83)
|
||||
inventory(4).parentSlot mustEqual 6
|
||||
inventory(4).obj.asInstanceOf[DetailedAmmoBoxData].magazine mustEqual 50
|
||||
//5
|
||||
inventory(5).item.objectClass mustEqual ObjectClass.bullet_9mm
|
||||
inventory(5).item.guid mustEqual PlanetSideGUID(84)
|
||||
inventory(5).item.parentSlot mustEqual 9
|
||||
inventory(5).item.obj.asInstanceOf[DetailedAmmoBoxData].magazine mustEqual 50
|
||||
inventory(5).objectClass mustEqual ObjectClass.bullet_9mm
|
||||
inventory(5).guid mustEqual PlanetSideGUID(84)
|
||||
inventory(5).parentSlot mustEqual 9
|
||||
inventory(5).obj.asInstanceOf[DetailedAmmoBoxData].magazine mustEqual 50
|
||||
//6
|
||||
inventory(6).item.objectClass mustEqual ObjectClass.bullet_9mm
|
||||
inventory(6).item.guid mustEqual PlanetSideGUID(85)
|
||||
inventory(6).item.parentSlot mustEqual 12
|
||||
inventory(6).item.obj.asInstanceOf[DetailedAmmoBoxData].magazine mustEqual 50
|
||||
inventory(6).objectClass mustEqual ObjectClass.bullet_9mm
|
||||
inventory(6).guid mustEqual PlanetSideGUID(85)
|
||||
inventory(6).parentSlot mustEqual 12
|
||||
inventory(6).obj.asInstanceOf[DetailedAmmoBoxData].magazine mustEqual 50
|
||||
//7
|
||||
inventory(7).item.objectClass mustEqual ObjectClass.bullet_9mm_AP
|
||||
inventory(7).item.guid mustEqual PlanetSideGUID(86)
|
||||
inventory(7).item.parentSlot mustEqual 33
|
||||
inventory(7).item.obj.asInstanceOf[DetailedAmmoBoxData].magazine mustEqual 50
|
||||
inventory(7).objectClass mustEqual ObjectClass.bullet_9mm_AP
|
||||
inventory(7).guid mustEqual PlanetSideGUID(86)
|
||||
inventory(7).parentSlot mustEqual 33
|
||||
inventory(7).obj.asInstanceOf[DetailedAmmoBoxData].magazine mustEqual 50
|
||||
//8
|
||||
inventory(8).item.objectClass mustEqual ObjectClass.energy_cell
|
||||
inventory(8).item.guid mustEqual PlanetSideGUID(87)
|
||||
inventory(8).item.parentSlot mustEqual 36
|
||||
inventory(8).item.obj.asInstanceOf[DetailedAmmoBoxData].magazine mustEqual 50
|
||||
inventory(8).objectClass mustEqual ObjectClass.energy_cell
|
||||
inventory(8).guid mustEqual PlanetSideGUID(87)
|
||||
inventory(8).parentSlot mustEqual 36
|
||||
inventory(8).obj.asInstanceOf[DetailedAmmoBoxData].magazine mustEqual 50
|
||||
//9
|
||||
inventory(9).item.objectClass mustEqual ObjectClass.remote_electronics_kit
|
||||
inventory(9).item.guid mustEqual PlanetSideGUID(88)
|
||||
inventory(9).item.parentSlot mustEqual 39
|
||||
inventory(9).objectClass mustEqual ObjectClass.remote_electronics_kit
|
||||
inventory(9).guid mustEqual PlanetSideGUID(88)
|
||||
inventory(9).parentSlot mustEqual 39
|
||||
//the rek has data but none worth testing here
|
||||
char.drawn_slot mustEqual DrawnSlot.Pistol1
|
||||
case _ =>
|
||||
|
|
@ -327,7 +328,7 @@ class ObjectCreateDetailedMessageTest extends Specification {
|
|||
}
|
||||
|
||||
"encode (gauss)" in {
|
||||
val obj = DetailedWeaponData(4, ObjectClass.bullet_9mm, PlanetSideGUID(1286), 0, DetailedAmmoBoxData(8, 30))
|
||||
val obj = DetailedWeaponData(2, 8, ObjectClass.bullet_9mm, PlanetSideGUID(1286), 0, DetailedAmmoBoxData(8, 30))
|
||||
val msg = ObjectCreateDetailedMessage(ObjectClass.gauss, PlanetSideGUID(1465), ObjectCreateMessageParent(PlanetSideGUID(75), 2), obj)
|
||||
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
|
||||
|
||||
|
|
@ -335,7 +336,11 @@ class ObjectCreateDetailedMessageTest extends Specification {
|
|||
}
|
||||
|
||||
"encode (punisher)" in {
|
||||
val obj = DetailedConcurrentFeedWeaponData(0, 8, DetailedAmmoBoxData(ObjectClass.bullet_9mm, PlanetSideGUID(1693), 0, DetailedAmmoBoxData(8, 30)) :: DetailedAmmoBoxData(ObjectClass.jammer_cartridge, PlanetSideGUID(1564), 1, DetailedAmmoBoxData(8, 1)) :: Nil)
|
||||
val obj = DetailedWeaponData(0, 8,
|
||||
DetailedAmmoBoxData(ObjectClass.bullet_9mm, PlanetSideGUID(1693), 0, DetailedAmmoBoxData(8, 30)) ::
|
||||
DetailedAmmoBoxData(ObjectClass.jammer_cartridge, PlanetSideGUID(1564), 1, DetailedAmmoBoxData(8, 1)) ::
|
||||
Nil
|
||||
)(2)
|
||||
val msg = ObjectCreateDetailedMessage(ObjectClass.punisher, PlanetSideGUID(1703), ObjectCreateMessageParent(PlanetSideGUID(75), 2), obj)
|
||||
var pkt = PacketCoding.EncodePacket(msg).require.toByteVector
|
||||
|
||||
|
|
@ -387,9 +392,9 @@ class ObjectCreateDetailedMessageTest extends Specification {
|
|||
false,
|
||||
RibbonBars()
|
||||
)
|
||||
val inv = InventoryItem(ObjectClass.beamer, PlanetSideGUID(76), 0, DetailedWeaponData(8, ObjectClass.energy_cell, PlanetSideGUID(77), 0, DetailedAmmoBoxData(8, 16))) ::
|
||||
InventoryItem(ObjectClass.suppressor, PlanetSideGUID(78), 2, DetailedWeaponData(8, ObjectClass.bullet_9mm, PlanetSideGUID(79), 0, DetailedAmmoBoxData(8, 25))) ::
|
||||
InventoryItem(ObjectClass.forceblade, PlanetSideGUID(80), 4, DetailedWeaponData(8, ObjectClass.melee_ammo, PlanetSideGUID(81), 0, DetailedAmmoBoxData(8, 1))) ::
|
||||
val inv = InventoryItem(ObjectClass.beamer, PlanetSideGUID(76), 0, DetailedWeaponData(4, 8, ObjectClass.energy_cell, PlanetSideGUID(77), 0, DetailedAmmoBoxData(8, 16))) ::
|
||||
InventoryItem(ObjectClass.suppressor, PlanetSideGUID(78), 2, DetailedWeaponData(4, 8, ObjectClass.bullet_9mm, PlanetSideGUID(79), 0, DetailedAmmoBoxData(8, 25))) ::
|
||||
InventoryItem(ObjectClass.forceblade, PlanetSideGUID(80), 4, DetailedWeaponData(4, 8, ObjectClass.melee_ammo, PlanetSideGUID(81), 0, DetailedAmmoBoxData(8, 1))) ::
|
||||
InventoryItem(ObjectClass.locker_container, PlanetSideGUID(82), 5, DetailedAmmoBoxData(8, 1)) ::
|
||||
InventoryItem(ObjectClass.bullet_9mm, PlanetSideGUID(83), 6, DetailedAmmoBoxData(8, 50)) ::
|
||||
InventoryItem(ObjectClass.bullet_9mm, PlanetSideGUID(84), 9, DetailedAmmoBoxData(8, 50)) ::
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
package game
|
||||
|
||||
import net.psforever.packet._
|
||||
import net.psforever.packet.game._
|
||||
import net.psforever.packet.game.{ObjectCreateMessage, _}
|
||||
import net.psforever.packet.game.objectcreate._
|
||||
import net.psforever.types._
|
||||
import org.specs2.mutable._
|
||||
|
|
@ -35,7 +35,7 @@ class ObjectCreateMessageTest extends Specification {
|
|||
val string_character = hex"17 73070000 BC8 3E0F 6C2D7 65535 CA16 00 00 09 9741E4F804000000 234530063007200610077006E00790052006F006E006E0069006500 220B7 E67B540404001000000000022B50100 268042006C00610063006B002000420065007200650074002000410072006D006F007500720065006400200043006F00720070007300 1700E0030050040003BC00000234040001A004000 3FFF67A8F A0A5424E0E800000000080952A9C3A03000001081103E040000000A023782F1080C0000016244108200000000808382403A030000014284C3A0C0000000202512F00B80C00000578F80F840000000280838B3C320300000080"
|
||||
val string_character_backpack = hex"17 9C030000 BC8 340D F20A9 3956C AF0D 00 00 73 480000 87041006E00670065006C006C006F00 4A148 0000000000000000000000005C54200 24404F0072006900670069006E0061006C00200044006900730074007200690063007400 1740180181E8000000C202000042000000D202000000010A3C00"
|
||||
|
||||
"deocde (striker projectile)" in {
|
||||
"decode (striker projectile)" in {
|
||||
PacketCoding.DecodePacket(string_striker_projectile).require match {
|
||||
case ObjectCreateMessage(len, cls, guid, parent, data) =>
|
||||
len mustEqual 197
|
||||
|
|
@ -68,7 +68,8 @@ class ObjectCreateMessageTest extends Specification {
|
|||
parent.get.guid mustEqual PlanetSideGUID(514)
|
||||
parent.get.slot mustEqual 1
|
||||
data.isDefined mustEqual true
|
||||
data.get.isInstanceOf[ImplantInterfaceData] mustEqual true
|
||||
data.get.isInstanceOf[CommonTerminalData] mustEqual true
|
||||
data.get.asInstanceOf[CommonTerminalData].faction mustEqual PlanetSideEmpire.VS
|
||||
case _ =>
|
||||
ko
|
||||
}
|
||||
|
|
@ -82,14 +83,18 @@ class ObjectCreateMessageTest extends Specification {
|
|||
guid mustEqual PlanetSideGUID(3827)
|
||||
parent.isDefined mustEqual false
|
||||
data.isDefined mustEqual true
|
||||
val term = data.get.asInstanceOf[CommonTerminalData]
|
||||
term.pos.coord.x mustEqual 4579.3438f
|
||||
term.pos.coord.y mustEqual 5615.0703f
|
||||
term.pos.coord.z mustEqual 72.953125f
|
||||
term.pos.pitch mustEqual 0
|
||||
term.pos.roll mustEqual 0
|
||||
term.pos.yaw mustEqual 125
|
||||
ok
|
||||
data.get.isInstanceOf[DroppedItemData[_]] mustEqual true
|
||||
val drop = data.get.asInstanceOf[DroppedItemData[_]]
|
||||
drop.pos.coord.x mustEqual 4579.3438f
|
||||
drop.pos.coord.y mustEqual 5615.0703f
|
||||
drop.pos.coord.z mustEqual 72.953125f
|
||||
drop.pos.pitch mustEqual 0
|
||||
drop.pos.roll mustEqual 0
|
||||
drop.pos.yaw mustEqual 125
|
||||
drop.obj.isInstanceOf[CommonTerminalData] mustEqual true
|
||||
val term = drop.obj.asInstanceOf[CommonTerminalData]
|
||||
term.faction mustEqual PlanetSideEmpire.NC
|
||||
term.unk mustEqual 0
|
||||
case _ =>
|
||||
ko
|
||||
}
|
||||
|
|
@ -163,14 +168,14 @@ class ObjectCreateMessageTest extends Specification {
|
|||
data.isDefined mustEqual true
|
||||
data.get.isInstanceOf[WeaponData] mustEqual true
|
||||
val wep = data.get.asInstanceOf[WeaponData]
|
||||
wep.unk1 mustEqual 8
|
||||
wep.unk1 mustEqual 4
|
||||
wep.unk2 mustEqual 8
|
||||
wep.fire_mode mustEqual 0
|
||||
wep.ammo.objectClass mustEqual ObjectClass.energy_cell
|
||||
wep.ammo.guid mustEqual PlanetSideGUID(3548)
|
||||
wep.ammo.parentSlot mustEqual 0
|
||||
wep.ammo.obj.isInstanceOf[AmmoBoxData] mustEqual true
|
||||
val ammo = wep.ammo.obj.asInstanceOf[AmmoBoxData]
|
||||
wep.ammo.head.objectClass mustEqual ObjectClass.energy_cell
|
||||
wep.ammo.head.guid mustEqual PlanetSideGUID(3548)
|
||||
wep.ammo.head.parentSlot mustEqual 0
|
||||
wep.ammo.head.obj.isInstanceOf[AmmoBoxData] mustEqual true
|
||||
val ammo = wep.ammo.head.obj.asInstanceOf[AmmoBoxData]
|
||||
ammo.unk mustEqual 8
|
||||
case _ =>
|
||||
ko
|
||||
|
|
@ -187,9 +192,9 @@ class ObjectCreateMessageTest extends Specification {
|
|||
parent.get.guid mustEqual PlanetSideGUID(3092)
|
||||
parent.get.slot mustEqual 3
|
||||
data.isDefined mustEqual true
|
||||
data.get.isInstanceOf[ConcurrentFeedWeaponData] mustEqual true
|
||||
val wep = data.get.asInstanceOf[ConcurrentFeedWeaponData]
|
||||
wep.unk1 mustEqual 8
|
||||
data.get.isInstanceOf[WeaponData] mustEqual true
|
||||
val wep = data.get.asInstanceOf[WeaponData]
|
||||
wep.unk1 mustEqual 4
|
||||
wep.unk2 mustEqual 8
|
||||
wep.fire_mode mustEqual 0
|
||||
val ammo = wep.ammo
|
||||
|
|
@ -345,14 +350,14 @@ class ObjectCreateMessageTest extends Specification {
|
|||
drop.pos.yaw mustEqual 32
|
||||
drop.obj.isInstanceOf[WeaponData] mustEqual true
|
||||
val wep = drop.obj.asInstanceOf[WeaponData]
|
||||
wep.unk1 mustEqual 8
|
||||
wep.unk1 mustEqual 4
|
||||
wep.unk2 mustEqual 0
|
||||
wep.fire_mode mustEqual 0
|
||||
wep.ammo.objectClass mustEqual ObjectClass.energy_cell
|
||||
wep.ammo.guid mustEqual PlanetSideGUID(3268)
|
||||
wep.ammo.parentSlot mustEqual 0
|
||||
wep.ammo.obj.isInstanceOf[AmmoBoxData] mustEqual true
|
||||
val ammo = wep.ammo.obj.asInstanceOf[AmmoBoxData]
|
||||
wep.ammo.head.objectClass mustEqual ObjectClass.energy_cell
|
||||
wep.ammo.head.guid mustEqual PlanetSideGUID(3268)
|
||||
wep.ammo.head.parentSlot mustEqual 0
|
||||
wep.ammo.head.obj.isInstanceOf[AmmoBoxData] mustEqual true
|
||||
val ammo = wep.ammo.head.obj.asInstanceOf[AmmoBoxData]
|
||||
ammo.unk mustEqual 0
|
||||
case _ =>
|
||||
ko
|
||||
|
|
@ -375,9 +380,9 @@ class ObjectCreateMessageTest extends Specification {
|
|||
drop.pos.roll mustEqual 0
|
||||
drop.pos.pitch mustEqual 0
|
||||
drop.pos.yaw mustEqual 51
|
||||
drop.obj.isInstanceOf[ConcurrentFeedWeaponData] mustEqual true
|
||||
val wep = drop.obj.asInstanceOf[ConcurrentFeedWeaponData]
|
||||
wep.unk1 mustEqual 4
|
||||
drop.obj.isInstanceOf[WeaponData] mustEqual true
|
||||
val wep = drop.obj.asInstanceOf[WeaponData]
|
||||
wep.unk1 mustEqual 2
|
||||
wep.unk2 mustEqual 0
|
||||
wep.fire_mode mustEqual 0
|
||||
val ammo = wep.ammo
|
||||
|
|
@ -464,7 +469,8 @@ class ObjectCreateMessageTest extends Specification {
|
|||
turret.deploy.pos.roll mustEqual 0
|
||||
turret.deploy.pos.pitch mustEqual 127
|
||||
turret.deploy.pos.yaw mustEqual 66
|
||||
turret.deploy.unk mustEqual 44
|
||||
turret.deploy.faction mustEqual PlanetSideEmpire.NC
|
||||
turret.deploy.unk mustEqual 12
|
||||
turret.deploy.player_guid mustEqual PlanetSideGUID(3871)
|
||||
turret.health mustEqual 0
|
||||
turret.internals.isDefined mustEqual false
|
||||
|
|
@ -489,7 +495,8 @@ class ObjectCreateMessageTest extends Specification {
|
|||
turret.deploy.pos.roll mustEqual 0
|
||||
turret.deploy.pos.pitch mustEqual 0
|
||||
turret.deploy.pos.yaw mustEqual 105
|
||||
turret.deploy.unk mustEqual 68
|
||||
turret.deploy.faction mustEqual PlanetSideEmpire.VS
|
||||
turret.deploy.unk mustEqual 4
|
||||
turret.deploy.player_guid mustEqual PlanetSideGUID(4232)
|
||||
turret.health mustEqual 255
|
||||
turret.internals.isDefined mustEqual true
|
||||
|
|
@ -499,10 +506,10 @@ class ObjectCreateMessageTest extends Specification {
|
|||
internals.parentSlot mustEqual 0
|
||||
internals.obj.isInstanceOf[WeaponData] mustEqual true
|
||||
val wep = internals.obj.asInstanceOf[WeaponData]
|
||||
wep.unk1 mustEqual 0xC
|
||||
wep.unk1 mustEqual 0x6
|
||||
wep.unk2 mustEqual 0x8
|
||||
wep.fire_mode mustEqual 0
|
||||
val ammo = wep.ammo
|
||||
val ammo = wep.ammo.head
|
||||
ammo.objectClass mustEqual ObjectClass.spitfire_ammo
|
||||
ammo.guid mustEqual PlanetSideGUID(3694)
|
||||
ammo.parentSlot mustEqual 0
|
||||
|
|
@ -529,7 +536,8 @@ class ObjectCreateMessageTest extends Specification {
|
|||
trap.deploy.pos.roll mustEqual 0
|
||||
trap.deploy.pos.pitch mustEqual 0
|
||||
trap.deploy.pos.yaw mustEqual 0
|
||||
trap.deploy.unk mustEqual 68
|
||||
trap.deploy.faction mustEqual PlanetSideEmpire.VS
|
||||
trap.deploy.unk mustEqual 4
|
||||
trap.health mustEqual 255
|
||||
trap.deploy.player_guid mustEqual PlanetSideGUID(2502)
|
||||
case _ =>
|
||||
|
|
@ -553,7 +561,8 @@ class ObjectCreateMessageTest extends Specification {
|
|||
aegis.deploy.pos.roll mustEqual 0
|
||||
aegis.deploy.pos.pitch mustEqual 0
|
||||
aegis.deploy.pos.yaw mustEqual 0
|
||||
aegis.deploy.unk mustEqual 68
|
||||
aegis.deploy.faction mustEqual PlanetSideEmpire.VS
|
||||
aegis.deploy.unk mustEqual 4
|
||||
aegis.health mustEqual 255
|
||||
aegis.deploy.player_guid mustEqual PlanetSideGUID(2366)
|
||||
case _ =>
|
||||
|
|
@ -577,9 +586,9 @@ class ObjectCreateMessageTest extends Specification {
|
|||
omft.deploy.pos.roll mustEqual 0
|
||||
omft.deploy.pos.pitch mustEqual 0
|
||||
omft.deploy.pos.yaw mustEqual 94
|
||||
omft.deploy.unk mustEqual 68
|
||||
omft.deploy.player_guid mustEqual PlanetSideGUID(0)
|
||||
omft.player_guid mustEqual PlanetSideGUID(2502)
|
||||
omft.deploy.faction mustEqual PlanetSideEmpire.VS
|
||||
omft.deploy.unk mustEqual 4
|
||||
omft.deploy.player_guid mustEqual PlanetSideGUID(2502)
|
||||
omft.health mustEqual 255
|
||||
omft.internals.isDefined mustEqual true
|
||||
val internals = omft.internals.get
|
||||
|
|
@ -588,10 +597,10 @@ class ObjectCreateMessageTest extends Specification {
|
|||
internals.parentSlot mustEqual 1
|
||||
internals.obj.isInstanceOf[WeaponData] mustEqual true
|
||||
val wep = internals.obj.asInstanceOf[WeaponData]
|
||||
wep.unk1 mustEqual 0xC
|
||||
wep.unk1 mustEqual 0x6
|
||||
wep.unk2 mustEqual 0x8
|
||||
wep.fire_mode mustEqual 0
|
||||
val ammo = wep.ammo
|
||||
val ammo = wep.ammo.head
|
||||
ammo.objectClass mustEqual ObjectClass.energy_gun_ammo
|
||||
ammo.guid mustEqual PlanetSideGUID(2510)
|
||||
ammo.parentSlot mustEqual 0
|
||||
|
|
@ -612,35 +621,33 @@ class ObjectCreateMessageTest extends Specification {
|
|||
data.isDefined mustEqual true
|
||||
data.get.isInstanceOf[LockerContainerData] mustEqual true
|
||||
val locker = data.get.asInstanceOf[LockerContainerData]
|
||||
locker.inventory.unk1 mustEqual false
|
||||
locker.inventory.unk2 mustEqual false
|
||||
val contents = locker.inventory.contents
|
||||
contents.size mustEqual 3
|
||||
//0
|
||||
contents.head.item.objectClass mustEqual ObjectClass.nano_dispenser
|
||||
contents.head.item.guid mustEqual PlanetSideGUID(2935)
|
||||
contents.head.item.parentSlot mustEqual 0
|
||||
contents.head.item.obj.isInstanceOf[WeaponData] mustEqual true
|
||||
val dispenser = contents.head.item.obj.asInstanceOf[WeaponData]
|
||||
dispenser.unk1 mustEqual 0xC
|
||||
contents.head.objectClass mustEqual ObjectClass.nano_dispenser
|
||||
contents.head.guid mustEqual PlanetSideGUID(2935)
|
||||
contents.head.parentSlot mustEqual 0
|
||||
contents.head.obj.isInstanceOf[WeaponData] mustEqual true
|
||||
val dispenser = contents.head.obj.asInstanceOf[WeaponData]
|
||||
dispenser.unk1 mustEqual 0x6
|
||||
dispenser.unk2 mustEqual 0x0
|
||||
dispenser.ammo.objectClass mustEqual ObjectClass.armor_canister
|
||||
dispenser.ammo.guid mustEqual PlanetSideGUID(3426)
|
||||
dispenser.ammo.parentSlot mustEqual 0
|
||||
dispenser.ammo.obj.isInstanceOf[AmmoBoxData] mustEqual true
|
||||
dispenser.ammo.obj.asInstanceOf[AmmoBoxData].unk mustEqual 0
|
||||
dispenser.ammo.head.objectClass mustEqual ObjectClass.armor_canister
|
||||
dispenser.ammo.head.guid mustEqual PlanetSideGUID(3426)
|
||||
dispenser.ammo.head.parentSlot mustEqual 0
|
||||
dispenser.ammo.head.obj.isInstanceOf[AmmoBoxData] mustEqual true
|
||||
dispenser.ammo.head.obj.asInstanceOf[AmmoBoxData].unk mustEqual 0
|
||||
//1
|
||||
contents(1).item.objectClass mustEqual ObjectClass.armor_canister
|
||||
contents(1).item.guid mustEqual PlanetSideGUID(4090)
|
||||
contents(1).item.parentSlot mustEqual 45
|
||||
contents(1).item.obj.isInstanceOf[AmmoBoxData] mustEqual true
|
||||
contents(1).item.obj.asInstanceOf[AmmoBoxData].unk mustEqual 0
|
||||
contents(1).objectClass mustEqual ObjectClass.armor_canister
|
||||
contents(1).guid mustEqual PlanetSideGUID(4090)
|
||||
contents(1).parentSlot mustEqual 45
|
||||
contents(1).obj.isInstanceOf[AmmoBoxData] mustEqual true
|
||||
contents(1).obj.asInstanceOf[AmmoBoxData].unk mustEqual 0
|
||||
//2
|
||||
contents(2).item.objectClass mustEqual ObjectClass.armor_canister
|
||||
contents(2).item.guid mustEqual PlanetSideGUID(3326)
|
||||
contents(2).item.parentSlot mustEqual 78
|
||||
contents(2).item.obj.isInstanceOf[AmmoBoxData] mustEqual true
|
||||
contents(2).item.obj.asInstanceOf[AmmoBoxData].unk mustEqual 0
|
||||
contents(2).objectClass mustEqual ObjectClass.armor_canister
|
||||
contents(2).guid mustEqual PlanetSideGUID(3326)
|
||||
contents(2).parentSlot mustEqual 78
|
||||
contents(2).obj.isInstanceOf[AmmoBoxData] mustEqual true
|
||||
contents(2).obj.asInstanceOf[AmmoBoxData].unk mustEqual 0
|
||||
case _ =>
|
||||
ko
|
||||
}
|
||||
|
|
@ -662,10 +669,10 @@ class ObjectCreateMessageTest extends Specification {
|
|||
pc.appearance.pos.roll mustEqual 0
|
||||
pc.appearance.pos.pitch mustEqual 0
|
||||
pc.appearance.pos.yaw mustEqual 9
|
||||
pc.appearance.pos.init_move.isDefined mustEqual true
|
||||
pc.appearance.pos.init_move.get.x mustEqual 1.4375f
|
||||
pc.appearance.pos.init_move.get.y mustEqual -0.4375f
|
||||
pc.appearance.pos.init_move.get.z mustEqual 0f
|
||||
pc.appearance.pos.vel.isDefined mustEqual true
|
||||
pc.appearance.pos.vel.get.x mustEqual 1.4375f
|
||||
pc.appearance.pos.vel.get.y mustEqual -0.4375f
|
||||
pc.appearance.pos.vel.get.z mustEqual 0f
|
||||
pc.appearance.basic_appearance.name mustEqual "ScrawnyRonnie"
|
||||
pc.appearance.basic_appearance.faction mustEqual PlanetSideEmpire.TR
|
||||
pc.appearance.basic_appearance.sex mustEqual CharacterGender.Male
|
||||
|
|
@ -705,40 +712,40 @@ class ObjectCreateMessageTest extends Specification {
|
|||
val contents = pc.inventory.get.contents
|
||||
contents.size mustEqual 5
|
||||
//0
|
||||
contents.head.item.objectClass mustEqual ObjectClass.plasma_grenade
|
||||
contents.head.item.guid mustEqual PlanetSideGUID(3662)
|
||||
contents.head.item.parentSlot mustEqual 0
|
||||
contents.head.item.obj.asInstanceOf[WeaponData].fire_mode mustEqual 0
|
||||
contents.head.item.obj.asInstanceOf[WeaponData].ammo.objectClass mustEqual ObjectClass.plasma_grenade_ammo
|
||||
contents.head.item.obj.asInstanceOf[WeaponData].ammo.guid mustEqual PlanetSideGUID(3751)
|
||||
contents.head.objectClass mustEqual ObjectClass.plasma_grenade
|
||||
contents.head.guid mustEqual PlanetSideGUID(3662)
|
||||
contents.head.parentSlot mustEqual 0
|
||||
contents.head.obj.asInstanceOf[WeaponData].fire_mode mustEqual 0
|
||||
contents.head.obj.asInstanceOf[WeaponData].ammo.head.objectClass mustEqual ObjectClass.plasma_grenade_ammo
|
||||
contents.head.obj.asInstanceOf[WeaponData].ammo.head.guid mustEqual PlanetSideGUID(3751)
|
||||
//1
|
||||
contents(1).item.objectClass mustEqual ObjectClass.bank
|
||||
contents(1).item.guid mustEqual PlanetSideGUID(3908)
|
||||
contents(1).item.parentSlot mustEqual 1
|
||||
contents(1).item.obj.asInstanceOf[WeaponData].fire_mode mustEqual 1
|
||||
contents(1).item.obj.asInstanceOf[WeaponData].ammo.objectClass mustEqual ObjectClass.armor_canister
|
||||
contents(1).item.obj.asInstanceOf[WeaponData].ammo.guid mustEqual PlanetSideGUID(4143)
|
||||
contents(1).objectClass mustEqual ObjectClass.bank
|
||||
contents(1).guid mustEqual PlanetSideGUID(3908)
|
||||
contents(1).parentSlot mustEqual 1
|
||||
contents(1).obj.asInstanceOf[WeaponData].fire_mode mustEqual 1
|
||||
contents(1).obj.asInstanceOf[WeaponData].ammo.head.objectClass mustEqual ObjectClass.armor_canister
|
||||
contents(1).obj.asInstanceOf[WeaponData].ammo.head.guid mustEqual PlanetSideGUID(4143)
|
||||
//2
|
||||
contents(2).item.objectClass mustEqual ObjectClass.mini_chaingun
|
||||
contents(2).item.guid mustEqual PlanetSideGUID(4164)
|
||||
contents(2).item.parentSlot mustEqual 2
|
||||
contents(2).item.obj.asInstanceOf[WeaponData].fire_mode mustEqual 0
|
||||
contents(2).item.obj.asInstanceOf[WeaponData].ammo.objectClass mustEqual ObjectClass.bullet_9mm
|
||||
contents(2).item.obj.asInstanceOf[WeaponData].ammo.guid mustEqual PlanetSideGUID(3728)
|
||||
contents(2).objectClass mustEqual ObjectClass.mini_chaingun
|
||||
contents(2).guid mustEqual PlanetSideGUID(4164)
|
||||
contents(2).parentSlot mustEqual 2
|
||||
contents(2).obj.asInstanceOf[WeaponData].fire_mode mustEqual 0
|
||||
contents(2).obj.asInstanceOf[WeaponData].ammo.head.objectClass mustEqual ObjectClass.bullet_9mm
|
||||
contents(2).obj.asInstanceOf[WeaponData].ammo.head.guid mustEqual PlanetSideGUID(3728)
|
||||
//3
|
||||
contents(3).item.objectClass mustEqual ObjectClass.phoenix //actually, a decimator
|
||||
contents(3).item.guid mustEqual PlanetSideGUID(3603)
|
||||
contents(3).item.parentSlot mustEqual 3
|
||||
contents(3).item.obj.asInstanceOf[WeaponData].fire_mode mustEqual 0
|
||||
contents(3).item.obj.asInstanceOf[WeaponData].ammo.objectClass mustEqual ObjectClass.phoenix_missile
|
||||
contents(3).item.obj.asInstanceOf[WeaponData].ammo.guid mustEqual PlanetSideGUID(3056)
|
||||
contents(3).objectClass mustEqual ObjectClass.phoenix //actually, a decimator
|
||||
contents(3).guid mustEqual PlanetSideGUID(3603)
|
||||
contents(3).parentSlot mustEqual 3
|
||||
contents(3).obj.asInstanceOf[WeaponData].fire_mode mustEqual 0
|
||||
contents(3).obj.asInstanceOf[WeaponData].ammo.head.objectClass mustEqual ObjectClass.phoenix_missile
|
||||
contents(3).obj.asInstanceOf[WeaponData].ammo.head.guid mustEqual PlanetSideGUID(3056)
|
||||
//4
|
||||
contents(4).item.objectClass mustEqual ObjectClass.chainblade
|
||||
contents(4).item.guid mustEqual PlanetSideGUID(4088)
|
||||
contents(4).item.parentSlot mustEqual 4
|
||||
contents(4).item.obj.asInstanceOf[WeaponData].fire_mode mustEqual 1
|
||||
contents(4).item.obj.asInstanceOf[WeaponData].ammo.objectClass mustEqual ObjectClass.melee_ammo
|
||||
contents(4).item.obj.asInstanceOf[WeaponData].ammo.guid mustEqual PlanetSideGUID(3279)
|
||||
contents(4).objectClass mustEqual ObjectClass.chainblade
|
||||
contents(4).guid mustEqual PlanetSideGUID(4088)
|
||||
contents(4).parentSlot mustEqual 4
|
||||
contents(4).obj.asInstanceOf[WeaponData].fire_mode mustEqual 1
|
||||
contents(4).obj.asInstanceOf[WeaponData].ammo.head.objectClass mustEqual ObjectClass.melee_ammo
|
||||
contents(4).obj.asInstanceOf[WeaponData].ammo.head.guid mustEqual PlanetSideGUID(3279)
|
||||
pc.drawn_slot mustEqual DrawnSlot.Rifle1
|
||||
case _ =>
|
||||
ko
|
||||
|
|
@ -761,7 +768,7 @@ class ObjectCreateMessageTest extends Specification {
|
|||
pc.appearance.pos.roll mustEqual 0
|
||||
pc.appearance.pos.pitch mustEqual 0
|
||||
pc.appearance.pos.yaw mustEqual 115
|
||||
pc.appearance.pos.init_move.isDefined mustEqual false
|
||||
pc.appearance.pos.vel.isDefined mustEqual false
|
||||
pc.appearance.basic_appearance.name mustEqual "Angello"
|
||||
pc.appearance.basic_appearance.faction mustEqual PlanetSideEmpire.VS
|
||||
pc.appearance.basic_appearance.sex mustEqual CharacterGender.Male
|
||||
|
|
@ -814,7 +821,7 @@ class ObjectCreateMessageTest extends Specification {
|
|||
}
|
||||
|
||||
"encode (implant interface)" in {
|
||||
val obj = ImplantInterfaceData()
|
||||
val obj = CommonTerminalData(PlanetSideEmpire.VS)
|
||||
val msg = ObjectCreateMessage(0x199, PlanetSideGUID(1075), ObjectCreateMessageParent(PlanetSideGUID(514), 1), obj)
|
||||
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
|
||||
|
||||
|
|
@ -822,7 +829,10 @@ class ObjectCreateMessageTest extends Specification {
|
|||
}
|
||||
|
||||
"encode (order terminal a)" in {
|
||||
val obj = CommonTerminalData(PlacementData(Vector3(4579.3438f, 5615.0703f, 72.953125f), 0, 0, 125))
|
||||
val obj = DroppedItemData(
|
||||
PlacementData(4579.3438f, 5615.0703f, 72.953125f, 0, 0, 125),
|
||||
CommonTerminalData(PlanetSideEmpire.NC)
|
||||
)
|
||||
val msg = ObjectCreateMessage(ObjectClass.order_terminala, PlanetSideGUID(3827), obj)
|
||||
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
|
||||
|
||||
|
|
@ -854,7 +864,7 @@ class ObjectCreateMessageTest extends Specification {
|
|||
}
|
||||
|
||||
"encode (lasher, held)" in {
|
||||
val obj = WeaponData(8, 8, ObjectClass.energy_cell, PlanetSideGUID(3548), 0, AmmoBoxData(8))
|
||||
val obj = WeaponData(4, 8, ObjectClass.energy_cell, PlanetSideGUID(3548), 0, AmmoBoxData(8))
|
||||
val msg = ObjectCreateMessage(ObjectClass.lasher, PlanetSideGUID(3033), ObjectCreateMessageParent(PlanetSideGUID(4141), 3), obj)
|
||||
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
|
||||
|
||||
|
|
@ -862,11 +872,12 @@ class ObjectCreateMessageTest extends Specification {
|
|||
}
|
||||
|
||||
"encode (punisher, held)" in {
|
||||
val obj = ConcurrentFeedWeaponData(8, 8, 0,
|
||||
AmmoBoxData(ObjectClass.bullet_9mm, PlanetSideGUID(3918), 0, AmmoBoxData(8)) ::
|
||||
AmmoBoxData(ObjectClass.rocket, PlanetSideGUID(3941), 1, AmmoBoxData(8)) ::
|
||||
Nil
|
||||
)
|
||||
val obj =
|
||||
WeaponData(4, 8, 0,
|
||||
AmmoBoxData(ObjectClass.bullet_9mm, PlanetSideGUID(3918), 0, AmmoBoxData(8)) ::
|
||||
AmmoBoxData(ObjectClass.rocket, PlanetSideGUID(3941), 1, AmmoBoxData(8)) ::
|
||||
Nil
|
||||
)(2)
|
||||
val msg = ObjectCreateMessage(ObjectClass.punisher, PlanetSideGUID(4147), ObjectCreateMessageParent(PlanetSideGUID(3092), 3), obj)
|
||||
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
|
||||
|
||||
|
|
@ -925,7 +936,7 @@ class ObjectCreateMessageTest extends Specification {
|
|||
"encode (lasher, dropped)" in {
|
||||
val obj = DroppedItemData(
|
||||
PlacementData(Vector3(4691.1953f, 5537.039f, 65.484375f), 0, 0, 32),
|
||||
WeaponData(8, 0, ObjectClass.energy_cell, PlanetSideGUID(3268), 0, AmmoBoxData())
|
||||
WeaponData(4, 0, ObjectClass.energy_cell, PlanetSideGUID(3268), 0, AmmoBoxData())
|
||||
)
|
||||
val msg = ObjectCreateMessage(ObjectClass.lasher, PlanetSideGUID(3074), obj)
|
||||
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
|
||||
|
|
@ -936,11 +947,11 @@ class ObjectCreateMessageTest extends Specification {
|
|||
"encode (punisher, dropped)" in {
|
||||
val obj = DroppedItemData(
|
||||
PlacementData(Vector3(4789.133f, 5522.3125f, 72.3125f), 0, 0, 51),
|
||||
ConcurrentFeedWeaponData(4, 0, 0,
|
||||
WeaponData(2, 0, 0,
|
||||
AmmoBoxData(ObjectClass.bullet_9mm, PlanetSideGUID(3528), 0, AmmoBoxData()) ::
|
||||
AmmoBoxData(ObjectClass.rocket, PlanetSideGUID(3031), 1, AmmoBoxData()) ::
|
||||
Nil
|
||||
)
|
||||
)(2)
|
||||
)
|
||||
val msg = ObjectCreateMessage(ObjectClass.punisher, PlanetSideGUID(2978), obj)
|
||||
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
|
||||
|
|
@ -961,9 +972,9 @@ class ObjectCreateMessageTest extends Specification {
|
|||
|
||||
"encode (boomer)" in {
|
||||
val obj = SmallDeployableData(
|
||||
ACEDeployableData(
|
||||
CommonFieldData(
|
||||
PlacementData(Vector3(4704.172f, 5546.4375f, 82.234375f), 0, 0, 63),
|
||||
0, PlanetSideGUID(4145)
|
||||
PlanetSideEmpire.TR, 0, PlanetSideGUID(4145)
|
||||
)
|
||||
)
|
||||
val msg = ObjectCreateMessage(ObjectClass.boomer, PlanetSideGUID(3840), obj)
|
||||
|
|
@ -974,10 +985,9 @@ class ObjectCreateMessageTest extends Specification {
|
|||
|
||||
"encode (spitfire, short)" in {
|
||||
val obj = SmallTurretData(
|
||||
ACEDeployableData(
|
||||
PlacementData(Vector3(4577.7812f, 5624.828f, 72.046875f), 0, 127, 66),
|
||||
44,
|
||||
PlanetSideGUID(3871)
|
||||
CommonFieldData(
|
||||
PlacementData(Vector3(4577.7812f, 5624.828f, 72.046875f), 0, 127, 66),
|
||||
PlanetSideEmpire.NC, 12, PlanetSideGUID(3871)
|
||||
),
|
||||
255 //sets to 0
|
||||
)
|
||||
|
|
@ -993,13 +1003,12 @@ class ObjectCreateMessageTest extends Specification {
|
|||
|
||||
"encode (spitfire)" in {
|
||||
val obj = SmallTurretData(
|
||||
ACEDeployableData(
|
||||
CommonFieldData(
|
||||
PlacementData(Vector3(4527.633f, 6271.3594f, 70.265625f), 0, 0, 105),
|
||||
68,
|
||||
PlanetSideGUID(4232)
|
||||
PlanetSideEmpire.VS, 4, PlanetSideGUID(4232)
|
||||
),
|
||||
255,
|
||||
SmallTurretData.spitfire(PlanetSideGUID(3064), 0xC, 0x8, PlanetSideGUID(3694), 8)
|
||||
SmallTurretData.spitfire(PlanetSideGUID(3064), 0x6, 0x8, PlanetSideGUID(3694), 8)
|
||||
)
|
||||
val msg = ObjectCreateMessage(ObjectClass.spitfire_turret, PlanetSideGUID(4265), obj)
|
||||
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
|
||||
|
|
@ -1013,10 +1022,9 @@ class ObjectCreateMessageTest extends Specification {
|
|||
|
||||
"encode (trap)" in {
|
||||
val obj = TRAPData(
|
||||
ACEDeployableData(
|
||||
CommonFieldData(
|
||||
PlacementData(Vector3(3572.4453f, 3277.9766f, 114.0f), 0, 0, 0),
|
||||
68,
|
||||
PlanetSideGUID(2502)
|
||||
PlanetSideEmpire.VS, 4, PlanetSideGUID(2502)
|
||||
),
|
||||
255
|
||||
)
|
||||
|
|
@ -1032,10 +1040,9 @@ class ObjectCreateMessageTest extends Specification {
|
|||
|
||||
"encode (aegis)" in {
|
||||
val obj = AegisShieldGeneratorData(
|
||||
ACEDeployableData(
|
||||
CommonFieldData(
|
||||
PlacementData(Vector3(3571.2266f, 3278.0938f, 114.0f), 0, 0, 0),
|
||||
68,
|
||||
PlanetSideGUID(2366)
|
||||
PlanetSideEmpire.VS, 4, PlanetSideGUID(2366)
|
||||
),
|
||||
255
|
||||
)
|
||||
|
|
@ -1047,14 +1054,12 @@ class ObjectCreateMessageTest extends Specification {
|
|||
|
||||
"encode (orion)" in {
|
||||
val obj = OneMannedFieldTurretData(
|
||||
ACEDeployableData(
|
||||
CommonFieldData(
|
||||
PlacementData(Vector3(3567.1406f, 2988.0078f, 71.84375f), 0, 0, 94),
|
||||
68,
|
||||
PlanetSideGUID(0)
|
||||
PlanetSideEmpire.VS, 4, PlanetSideGUID(2502)
|
||||
),
|
||||
PlanetSideGUID(2502),
|
||||
255,
|
||||
OneMannedFieldTurretData.orion(PlanetSideGUID(2615), 0xC, 0x8, PlanetSideGUID(2510), 8)
|
||||
OneMannedFieldTurretData.orion(PlanetSideGUID(2615), 0x6, 0x8, PlanetSideGUID(2510), 8)
|
||||
)
|
||||
val msg = ObjectCreateMessage(ObjectClass.portable_manned_turret_vs, PlanetSideGUID(2916), obj)
|
||||
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
|
||||
|
|
@ -1069,7 +1074,7 @@ class ObjectCreateMessageTest extends Specification {
|
|||
"encode (locker container)" in {
|
||||
val obj = LockerContainerData(
|
||||
InventoryData(
|
||||
InventoryItem(ObjectClass.nano_dispenser, PlanetSideGUID(2935), 0, WeaponData(0xC, 0x0, ObjectClass.armor_canister, PlanetSideGUID(3426), 0, AmmoBoxData())) ::
|
||||
InventoryItem(ObjectClass.nano_dispenser, PlanetSideGUID(2935), 0, WeaponData(0x6, 0x0, ObjectClass.armor_canister, PlanetSideGUID(3426), 0, AmmoBoxData())) ::
|
||||
InventoryItem(ObjectClass.armor_canister, PlanetSideGUID(4090), 45, AmmoBoxData()) ::
|
||||
InventoryItem(ObjectClass.armor_canister, PlanetSideGUID(3326), 78, AmmoBoxData()) ::
|
||||
Nil
|
||||
|
|
|
|||
531
common/src/test/scala/game/ObjectCreateMessageVehiclesTest.scala
Normal file
531
common/src/test/scala/game/ObjectCreateMessageVehiclesTest.scala
Normal file
|
|
@ -0,0 +1,531 @@
|
|||
// Copyright (c) 2017 PSForever
|
||||
package game
|
||||
|
||||
import net.psforever.packet._
|
||||
import net.psforever.packet.game.{ObjectCreateMessage, _}
|
||||
import net.psforever.packet.game.objectcreate.{DriveState, _}
|
||||
import net.psforever.types._
|
||||
import org.specs2.mutable._
|
||||
import scodec.bits._
|
||||
|
||||
class ObjectCreateMessageVehiclesTest extends Specification {
|
||||
val string_fury = hex"17 50010000 A79 9D01 FBC1C 12A83 2F06 00 00 21 4400003FC00101140C800C0E40000004048F3600301900000"
|
||||
val string_ant = hex"17 C2000000 9E0 7C01 6C2D7 65535 CA16 00 00 00 4400003FC000000"
|
||||
val string_lightning = hex"17 8b010000 df1 5a00 6c2d7 65535 ca16 00 00 00 4400003fc00101300ad8040c4000000408190b801018000002617402070000000"
|
||||
val string_mediumtransport = hex"17 DA010000 8A2 8301 FBC1C 12A83 2F06 00 00 21 2400003FC079020593F80C2E400000040410148030190000017458050D90000001010401F814064000000"
|
||||
val string_ams = hex"17 B8010000 970 3D10 002D765535CA16000000 402285BB0037E4100749E1D03000000620D83A0A00000195798741C00000332E40D84800000"
|
||||
val string_ams_destroyed = hex"17 8D000000 978 3D10 002D765535CA16000000 0"
|
||||
val string_switchblade = hex"17 93010000 A7B A201 FBC1C12A832F06000021 4400003FC00001013AD3180C0E4000000408330DC03019000006620406072000000"
|
||||
val string_droppod = hex"17 C1000000 8110B0E00FA9000ACFFFF000000 4400007F83C0900"
|
||||
val string_orbital_shuttle_1 = hex"17 82000000 0901B026904838000001FE0700"
|
||||
val string_orbital_shuttle_2 = hex"17 C3000000 B02670402F5AA14F88C210000604000007F8FF03C0"
|
||||
|
||||
"decode (fury)" in {
|
||||
PacketCoding.DecodePacket(string_fury).require match {
|
||||
case ObjectCreateMessage(len, cls, guid, parent, data) =>
|
||||
len mustEqual 336
|
||||
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]
|
||||
fury.basic.pos.coord.x mustEqual 6531.961f
|
||||
fury.basic.pos.coord.y mustEqual 1872.1406f
|
||||
fury.basic.pos.coord.z mustEqual 24.734375f
|
||||
fury.basic.pos.roll mustEqual 0
|
||||
fury.basic.pos.pitch mustEqual 0
|
||||
fury.basic.pos.yaw mustEqual 33
|
||||
fury.basic.pos.vel.isDefined mustEqual false
|
||||
fury.basic.faction mustEqual PlanetSideEmpire.VS
|
||||
fury.basic.unk mustEqual 4
|
||||
fury.basic.player_guid mustEqual PlanetSideGUID(0)
|
||||
fury.health mustEqual 255
|
||||
//
|
||||
fury.mountings.isDefined mustEqual true
|
||||
fury.mountings.get.size mustEqual 1
|
||||
val mounting = fury.mountings.get.head
|
||||
mounting.objectClass mustEqual ObjectClass.fury_weapon_systema
|
||||
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
|
||||
case _ =>
|
||||
ko
|
||||
}
|
||||
}
|
||||
|
||||
"decode (ant)" in {
|
||||
PacketCoding.DecodePacket(string_ant).require match {
|
||||
case ObjectCreateMessage(len, cls, guid, parent, data) =>
|
||||
len mustEqual 194L
|
||||
cls mustEqual ObjectClass.ant
|
||||
guid mustEqual PlanetSideGUID(380)
|
||||
parent.isDefined mustEqual false
|
||||
data.isDefined mustEqual true
|
||||
data.get.isInstanceOf[ANTData] mustEqual true
|
||||
val ant = data.get.asInstanceOf[ANTData]
|
||||
ant.basic.pos.coord.x mustEqual 3674.8438f
|
||||
ant.basic.pos.coord.y mustEqual 2726.789f
|
||||
ant.basic.pos.coord.z mustEqual 91.15625f
|
||||
ant.basic.pos.roll mustEqual 0
|
||||
ant.basic.pos.pitch mustEqual 0
|
||||
ant.basic.pos.yaw mustEqual 0
|
||||
ant.basic.faction mustEqual PlanetSideEmpire.VS
|
||||
ant.basic.unk mustEqual 4
|
||||
ant.basic.player_guid mustEqual PlanetSideGUID(0)
|
||||
ant.health mustEqual 255
|
||||
ant.driveState mustEqual DriveState.Mobile
|
||||
case _ =>
|
||||
ko
|
||||
}
|
||||
}
|
||||
|
||||
"decode (lightning)" in {
|
||||
PacketCoding.DecodePacket(string_lightning).require match {
|
||||
case ObjectCreateMessage(len, cls, guid, parent, data) =>
|
||||
len mustEqual 395L
|
||||
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]
|
||||
lightning.basic.pos.coord.x mustEqual 3674.8438f
|
||||
lightning.basic.pos.coord.y mustEqual 2726.789f
|
||||
lightning.basic.pos.coord.z mustEqual 91.15625f
|
||||
lightning.basic.pos.roll mustEqual 0
|
||||
lightning.basic.pos.pitch mustEqual 0
|
||||
lightning.basic.pos.yaw mustEqual 0
|
||||
lightning.basic.faction mustEqual PlanetSideEmpire.VS
|
||||
lightning.basic.unk mustEqual 4
|
||||
lightning.basic.player_guid mustEqual PlanetSideGUID(0)
|
||||
lightning.health mustEqual 255
|
||||
lightning.mountings.isDefined mustEqual true
|
||||
lightning.mountings.get.size mustEqual 1
|
||||
val mounting = lightning.mountings.get.head
|
||||
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
|
||||
case _ =>
|
||||
ko
|
||||
}
|
||||
}
|
||||
|
||||
"decode (medium transport)" in {
|
||||
PacketCoding.DecodePacket(string_mediumtransport).require match {
|
||||
case ObjectCreateMessage(len, cls, guid, parent, data) =>
|
||||
len mustEqual 474L
|
||||
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.basic.pos.coord.x mustEqual 6531.961f
|
||||
deliverer.basic.pos.coord.y mustEqual 1872.1406f
|
||||
deliverer.basic.pos.coord.z mustEqual 24.734375f
|
||||
deliverer.basic.pos.roll mustEqual 0
|
||||
deliverer.basic.pos.pitch mustEqual 0
|
||||
deliverer.basic.pos.yaw mustEqual 33
|
||||
deliverer.basic.faction mustEqual PlanetSideEmpire.NC
|
||||
deliverer.basic.unk mustEqual 4
|
||||
deliverer.basic.player_guid mustEqual PlanetSideGUID(0)
|
||||
deliverer.unk1 mustEqual 0
|
||||
deliverer.health mustEqual 255
|
||||
deliverer.unk2 mustEqual 0
|
||||
deliverer.driveState mustEqual DriveState.State7
|
||||
deliverer.unk4 mustEqual true
|
||||
deliverer.unk5 mustEqual 0
|
||||
deliverer.mountings.isDefined mustEqual true
|
||||
deliverer.mountings.get.size mustEqual 2
|
||||
//0
|
||||
var mounting = deliverer.mountings.get.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.mountings.get(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
|
||||
case _ =>
|
||||
ko
|
||||
}
|
||||
}
|
||||
|
||||
"decode (ams)" in {
|
||||
PacketCoding.DecodePacket(string_ams).require match {
|
||||
case ObjectCreateMessage(len, cls, guid, parent, data) =>
|
||||
len mustEqual 440L
|
||||
cls mustEqual ObjectClass.ams
|
||||
guid mustEqual PlanetSideGUID(4157)
|
||||
parent.isDefined mustEqual false
|
||||
data.isDefined mustEqual true
|
||||
data.get.isInstanceOf[AMSData] mustEqual true
|
||||
val ams = data.get.asInstanceOf[AMSData]
|
||||
ams.basic.pos.coord.x mustEqual 3674.0f
|
||||
ams.basic.pos.coord.y mustEqual 2726.789f
|
||||
ams.basic.pos.coord.z mustEqual 91.15625f
|
||||
ams.basic.pos.roll mustEqual 0
|
||||
ams.basic.pos.pitch mustEqual 0
|
||||
ams.basic.pos.yaw mustEqual 0
|
||||
ams.basic.faction mustEqual PlanetSideEmpire.VS
|
||||
ams.basic.unk mustEqual 0
|
||||
ams.basic.player_guid mustEqual PlanetSideGUID(34082)
|
||||
ams.unk1 mustEqual 2
|
||||
ams.health mustEqual 236
|
||||
ams.unk2 mustEqual 0
|
||||
ams.driveState mustEqual DriveState.Deployed
|
||||
ams.matrix_guid mustEqual PlanetSideGUID(3663)
|
||||
ams.respawn_guid mustEqual PlanetSideGUID(3638)
|
||||
ams.term_a_guid mustEqual PlanetSideGUID(3827)
|
||||
ams.term_b_guid mustEqual PlanetSideGUID(3556)
|
||||
case _ =>
|
||||
ko
|
||||
}
|
||||
}
|
||||
|
||||
"decode (ams, destroyed)" in {
|
||||
PacketCoding.DecodePacket(string_ams_destroyed).require match {
|
||||
case ObjectCreateMessage(len, cls, guid, parent, data) =>
|
||||
len mustEqual 141L
|
||||
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]
|
||||
dams.pos.coord.x mustEqual 3674.0f
|
||||
dams.pos.coord.y mustEqual 2726.789f
|
||||
dams.pos.coord.z mustEqual 91.15625f
|
||||
dams.pos.roll mustEqual 0
|
||||
dams.pos.pitch mustEqual 0
|
||||
dams.pos.yaw mustEqual 0
|
||||
case _ =>
|
||||
ko
|
||||
}
|
||||
}
|
||||
|
||||
"decode (switchblade)" in {
|
||||
PacketCoding.DecodePacket(string_switchblade).require match {
|
||||
case ObjectCreateMessage(len, cls, guid, parent, data) =>
|
||||
len mustEqual 403L
|
||||
cls mustEqual ObjectClass.switchblade
|
||||
guid mustEqual PlanetSideGUID(418)
|
||||
parent.isDefined mustEqual false
|
||||
data.isDefined mustEqual true
|
||||
data.get.isInstanceOf[Vehicle2Data] mustEqual true
|
||||
val switchblade = data.get.asInstanceOf[Vehicle2Data]
|
||||
switchblade.basic.pos.coord.x mustEqual 6531.961f
|
||||
switchblade.basic.pos.coord.y mustEqual 1872.1406f
|
||||
switchblade.basic.pos.coord.z mustEqual 24.734375f
|
||||
switchblade.basic.pos.roll mustEqual 0
|
||||
switchblade.basic.pos.pitch mustEqual 0
|
||||
switchblade.basic.pos.yaw mustEqual 33
|
||||
switchblade.basic.faction mustEqual PlanetSideEmpire.VS
|
||||
switchblade.basic.unk mustEqual 4
|
||||
switchblade.health mustEqual 255
|
||||
switchblade.driveState mustEqual DriveState.Mobile
|
||||
switchblade.mountings.isDefined mustEqual true
|
||||
switchblade.mountings.get.size mustEqual 1
|
||||
//0
|
||||
val weapon = switchblade.mountings.get.head
|
||||
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
|
||||
case _ =>
|
||||
ko
|
||||
}
|
||||
}
|
||||
|
||||
"decode (droppod)" in {
|
||||
PacketCoding.DecodePacket(string_droppod).require match {
|
||||
case ObjectCreateMessage(len, cls, guid, parent, data) =>
|
||||
len mustEqual 193L
|
||||
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.roll mustEqual 0
|
||||
droppod.basic.pos.pitch mustEqual 0
|
||||
droppod.basic.pos.yaw mustEqual 0
|
||||
droppod.basic.unk mustEqual 4
|
||||
droppod.basic.player_guid mustEqual PlanetSideGUID(0)
|
||||
droppod.burn mustEqual false
|
||||
droppod.health mustEqual 255
|
||||
case _ =>
|
||||
ko
|
||||
}
|
||||
}
|
||||
|
||||
"decode (shuttle 1)" in {
|
||||
PacketCoding.DecodePacket(string_orbital_shuttle_1).require match {
|
||||
case ObjectCreateMessage(len, cls, guid, parent, data) =>
|
||||
len mustEqual 130
|
||||
cls mustEqual ObjectClass.orbital_shuttle
|
||||
guid mustEqual PlanetSideGUID(1129)
|
||||
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
|
||||
case _ =>
|
||||
ko
|
||||
}
|
||||
}
|
||||
|
||||
"decode (shuttle 2)" in {
|
||||
PacketCoding.DecodePacket(string_orbital_shuttle_2).require match {
|
||||
case ObjectCreateMessage(len, cls, guid, parent, data) =>
|
||||
len mustEqual 195
|
||||
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]
|
||||
shuttle.faction mustEqual PlanetSideEmpire.VS
|
||||
shuttle.pos.isDefined mustEqual true
|
||||
shuttle.pos.get.coord.x mustEqual 5610.0156f
|
||||
shuttle.pos.get.coord.y mustEqual 4255.258f
|
||||
shuttle.pos.get.coord.z mustEqual 134.1875f
|
||||
shuttle.pos.get.roll mustEqual 0
|
||||
shuttle.pos.get.pitch mustEqual 0
|
||||
shuttle.pos.get.yaw mustEqual 96
|
||||
case _ =>
|
||||
ko
|
||||
}
|
||||
}
|
||||
|
||||
"encode (fury)" in {
|
||||
val obj = VehicleData(
|
||||
CommonFieldData(
|
||||
PlacementData(6531.961f, 1872.1406f, 24.734375f, 0, 0, 33),
|
||||
PlanetSideEmpire.VS, 4
|
||||
),
|
||||
255,
|
||||
MountItem(ObjectClass.fury_weapon_systema, PlanetSideGUID(400), 1,
|
||||
WeaponData(0x6, 0x8, 0, ObjectClass.hellfire_ammo, PlanetSideGUID(432), 0, AmmoBoxData(0x8))
|
||||
)
|
||||
)
|
||||
val msg = ObjectCreateMessage(ObjectClass.fury, PlanetSideGUID(413), obj)
|
||||
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
|
||||
|
||||
pkt mustEqual string_fury
|
||||
}
|
||||
|
||||
"encode (ant)" in {
|
||||
val obj = ANTData(
|
||||
CommonFieldData(
|
||||
PlacementData(3674.8438f, 2726.789f, 91.15625f),
|
||||
PlanetSideEmpire.VS, 4
|
||||
),
|
||||
255,
|
||||
DriveState.Mobile
|
||||
)
|
||||
val msg = ObjectCreateMessage(ObjectClass.ant, PlanetSideGUID(380), obj)
|
||||
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
|
||||
|
||||
pkt mustEqual string_ant
|
||||
}
|
||||
|
||||
"encode (lightning)" in {
|
||||
val obj = VehicleData(
|
||||
CommonFieldData(
|
||||
PlacementData(3674.8438f, 2726.789f, 91.15625f),
|
||||
PlanetSideEmpire.VS, 4
|
||||
),
|
||||
255,
|
||||
MountItem(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())
|
||||
)
|
||||
)
|
||||
val msg = ObjectCreateMessage(ObjectClass.lightning, PlanetSideGUID(90), obj)
|
||||
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
|
||||
|
||||
pkt mustEqual string_lightning
|
||||
}
|
||||
|
||||
"encode (deliverer)" in {
|
||||
val obj = VehicleData(
|
||||
CommonFieldData(
|
||||
PlacementData(6531.961f, 1872.1406f, 24.734375f, 0, 0, 33),
|
||||
PlanetSideEmpire.NC, 4
|
||||
),
|
||||
0,
|
||||
255,
|
||||
0,
|
||||
DriveState.State7,
|
||||
true,
|
||||
0,
|
||||
Some(
|
||||
MountItem(
|
||||
ObjectClass.mediumtransport_weapon_systemA, PlanetSideGUID(383), 5,
|
||||
WeaponData(6, 8, ObjectClass.bullet_20mm, PlanetSideGUID(420), 0, AmmoBoxData(8))
|
||||
) ::
|
||||
MountItem(
|
||||
ObjectClass.mediumtransport_weapon_systemB, PlanetSideGUID(556), 6,
|
||||
WeaponData(6, 8, ObjectClass.bullet_20mm, PlanetSideGUID(575), 0, AmmoBoxData(8))
|
||||
) ::
|
||||
Nil
|
||||
)
|
||||
)(2)
|
||||
val msg = ObjectCreateMessage(ObjectClass.mediumtransport, PlanetSideGUID(387), obj)
|
||||
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
|
||||
|
||||
pkt mustEqual string_mediumtransport
|
||||
}
|
||||
|
||||
"encode (ams)" in {
|
||||
val obj = AMSData(
|
||||
CommonFieldData(PlacementData(3674.0f, 2726.789f, 91.15625f, 0, 0, 0),
|
||||
PlanetSideEmpire.VS, 0,
|
||||
PlanetSideGUID(34082)
|
||||
),
|
||||
2,
|
||||
236,
|
||||
0,
|
||||
DriveState.Deployed,
|
||||
63,
|
||||
PlanetSideGUID(3663),
|
||||
PlanetSideGUID(3638),
|
||||
PlanetSideGUID(3827),
|
||||
PlanetSideGUID(3556)
|
||||
)
|
||||
val msg = ObjectCreateMessage(ObjectClass.ams, PlanetSideGUID(4157), obj)
|
||||
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
|
||||
|
||||
pkt mustEqual string_ams
|
||||
}
|
||||
|
||||
"encode (ams, destroyed)" in {
|
||||
val obj = DestroyedVehicleData(PlacementData(3674.0f, 2726.789f, 91.15625f))
|
||||
val msg = ObjectCreateMessage(ObjectClass.ams_destroyed, PlanetSideGUID(4157), obj)
|
||||
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
|
||||
|
||||
pkt mustEqual string_ams_destroyed
|
||||
}
|
||||
|
||||
"encode (switchblade(" in {
|
||||
val obj = Vehicle2Data(
|
||||
CommonFieldData(PlacementData(6531.961f, 1872.1406f, 24.734375f ,0 ,0 ,33),
|
||||
PlanetSideEmpire.VS, 4
|
||||
),
|
||||
255,
|
||||
DriveState.Mobile,
|
||||
MountItem(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))
|
||||
)
|
||||
)
|
||||
val msg = ObjectCreateMessage(ObjectClass.switchblade, PlanetSideGUID(418), obj)
|
||||
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
|
||||
|
||||
pkt mustEqual string_switchblade
|
||||
}
|
||||
|
||||
"encode (droppod)" in {
|
||||
val obj = DroppodData(
|
||||
CommonFieldData(
|
||||
PlacementData(5108.0f, 6164.0f, 1023.9844f),
|
||||
PlanetSideEmpire.VS, 4
|
||||
)
|
||||
)
|
||||
val msg = ObjectCreateMessage(ObjectClass.droppod, PlanetSideGUID(3595), obj)
|
||||
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
|
||||
|
||||
pkt mustEqual string_droppod
|
||||
}
|
||||
|
||||
"encode (shuttle 1)" in {
|
||||
val obj = OrbitalShuttleData(PlanetSideEmpire.VS)
|
||||
val msg = ObjectCreateMessage(ObjectClass.orbital_shuttle, PlanetSideGUID(1129), ObjectCreateMessageParent(PlanetSideGUID(786), 3), obj)
|
||||
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
|
||||
|
||||
pkt mustEqual string_orbital_shuttle_1
|
||||
}
|
||||
|
||||
"encode (shuttle 2)" in {
|
||||
val obj = OrbitalShuttleData(PlacementData(5610.0156f, 4255.258f, 134.1875f, 0, 0, 96), PlanetSideEmpire.VS)
|
||||
val msg = ObjectCreateMessage(ObjectClass.orbital_shuttle, PlanetSideGUID(1127), obj)
|
||||
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
|
||||
|
||||
pkt mustEqual string_orbital_shuttle_2
|
||||
}
|
||||
}
|
||||
54
common/src/test/scala/game/VehicleStateMessageTest.scala
Normal file
54
common/src/test/scala/game/VehicleStateMessageTest.scala
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
// Copyright (c) 2017 PSForever
|
||||
package game
|
||||
|
||||
import org.specs2.mutable._
|
||||
import net.psforever.packet._
|
||||
import net.psforever.packet.game._
|
||||
import net.psforever.types.Vector3
|
||||
import scodec.bits._
|
||||
|
||||
class VehicleStateMessageTest extends Specification {
|
||||
val string = hex"1b 9d010d85aecaa6b8c2dfdfefffc020008006000078"
|
||||
|
||||
"decode" in {
|
||||
PacketCoding.DecodePacket(string).require match {
|
||||
case VehicleStateMessage(guid, unk1, pos, roll, pitch, yaw, vel, unk2, unk3, unk4, wheel, unk5, unk6) =>
|
||||
guid mustEqual PlanetSideGUID(413)
|
||||
unk1 mustEqual 0
|
||||
pos.x mustEqual 3674.8438f
|
||||
pos.y mustEqual 2726.789f
|
||||
pos.z mustEqual 91.09375f
|
||||
roll mustEqual 359.29688f
|
||||
pitch mustEqual 1.0546875f
|
||||
yaw mustEqual 90.35156f
|
||||
vel.isDefined mustEqual true
|
||||
vel.get.x mustEqual 0.0f
|
||||
vel.get.y mustEqual 0.0f
|
||||
vel.get.z mustEqual 0.03125f
|
||||
unk2.isDefined mustEqual false
|
||||
unk3 mustEqual 0
|
||||
unk4 mustEqual 0
|
||||
wheel mustEqual 15
|
||||
unk5 mustEqual false
|
||||
unk6 mustEqual false
|
||||
case _ =>
|
||||
ko
|
||||
}
|
||||
}
|
||||
|
||||
"encode" in {
|
||||
val msg = VehicleStateMessage(
|
||||
PlanetSideGUID(413),
|
||||
0,
|
||||
Vector3(3674.8438f, 2726.789f, 91.09375f),
|
||||
359.29688f, 1.0546875f, 90.35156f,
|
||||
Some(Vector3(0.0f, 0.0f, 0.03125f)),
|
||||
None,
|
||||
0, 0, 15,
|
||||
false, false
|
||||
)
|
||||
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
|
||||
|
||||
pkt mustEqual string
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue