mirror of
https://github.com/2revoemag/PSF-BotServer.git
synced 2026-03-26 23:39:10 +00:00
adding comments to OC*M Codec files; modifying converters to take advantage of the new packet field extensions; fixing two pieces of GUID code that relied on throwing Exceptions to function correctly
This commit is contained in:
parent
3ac0010052
commit
19f77fc9b5
11 changed files with 1242 additions and 318 deletions
File diff suppressed because one or more lines are too long
|
|
@ -9,182 +9,236 @@ import org.specs2.mutable._
|
|||
import scodec.bits._
|
||||
|
||||
class MountedVehiclesTest extends Specification {
|
||||
// val string_mosquito_seated =
|
||||
// hex"17c70700009e2d410d8ed818f1a4017047f7ffbc6390ffbe01801cff00003c08791801d00000002340530063007200610077006e00790052" ++
|
||||
// hex"006f006e006e0069006500020b7e67b540404001000000000022b50100268042006c00610063006b00200042006500720065007400200041" ++
|
||||
// hex"0072006d006f007500720065006400200043006f00720070007300170040030050040003bc00000234040001a00400027a7a0809a6910800" ++
|
||||
// hex"00000008090a6403603000001082202e040000000202378ae0e80c00000162710b82000000008083837032030000015e2583210000000020" ++
|
||||
// hex"20e21c0c80c000007722120e81c0000000808063483603000000"
|
||||
//
|
||||
// "decode (Scrawny Ronnie's mosquito)" in {
|
||||
// PacketCoding.DecodePacket(string_mosquito_seated).require match {
|
||||
// case ObjectCreateMessage(len, cls, guid, parent, data) =>
|
||||
// len mustEqual 1991
|
||||
// cls mustEqual ObjectClass.mosquito
|
||||
// guid mustEqual PlanetSideGUID(4308)
|
||||
// parent mustEqual None
|
||||
// data match {
|
||||
// case Some(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.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.inventory match {
|
||||
// case Some(InventoryData(list)) =>
|
||||
// list.head.objectClass mustEqual ObjectClass.avatar
|
||||
// list.head.guid mustEqual PlanetSideGUID(3776)
|
||||
// list.head.parentSlot mustEqual 0
|
||||
// list.head.obj match {
|
||||
// case PlayerData(pos, app, char, Some(InventoryData(inv)), hand) =>
|
||||
// pos mustEqual None
|
||||
// app.app.name mustEqual "ScrawnyRonnie"
|
||||
// app.app.faction mustEqual PlanetSideEmpire.TR
|
||||
// app.app.sex mustEqual CharacterGender.Male
|
||||
// app.app.head mustEqual 5
|
||||
// app.app.voice mustEqual CharacterVoice.Voice5
|
||||
// app.black_ops mustEqual false
|
||||
// app.lfs mustEqual false
|
||||
// app.outfit_name mustEqual "Black Beret Armoured Corps"
|
||||
// app.outfit_logo mustEqual 23
|
||||
// app.facingPitch mustEqual 354.375f
|
||||
// app.facingYawUpper mustEqual 0.0f
|
||||
// app.altModelBit mustEqual None
|
||||
// app.charging_pose mustEqual false
|
||||
// app.on_zipline mustEqual false
|
||||
// app.backpack mustEqual false
|
||||
// app.ribbons.upper mustEqual MeritCommendation.MarkovVeteran
|
||||
// app.ribbons.middle mustEqual MeritCommendation.HeavyInfantry4
|
||||
// app.ribbons.lower mustEqual MeritCommendation.TankBuster7
|
||||
// app.ribbons.tos mustEqual MeritCommendation.SixYearTR
|
||||
// char.health mustEqual 100
|
||||
// char.armor mustEqual 0
|
||||
// char.uniform_upgrade mustEqual UniformStyle.ThirdUpgrade
|
||||
// char.command_rank mustEqual 5
|
||||
// char.implant_effects.isEmpty mustEqual true
|
||||
// char.cosmetics mustEqual Some(Cosmetics(true, true, true, true, false))
|
||||
// inv.size mustEqual 4
|
||||
// inv.head.objectClass mustEqual ObjectClass.medicalapplicator
|
||||
// inv.head.parentSlot mustEqual 0
|
||||
// inv(1).objectClass mustEqual ObjectClass.bank
|
||||
// inv(1).parentSlot mustEqual 1
|
||||
// inv(2).objectClass mustEqual ObjectClass.mini_chaingun
|
||||
// inv(2).parentSlot mustEqual 2
|
||||
// inv(3).objectClass mustEqual ObjectClass.chainblade
|
||||
// inv(3).parentSlot mustEqual 4
|
||||
// hand mustEqual DrawnSlot.None
|
||||
// case _ =>
|
||||
// ko
|
||||
// }
|
||||
// list(1).objectClass mustEqual ObjectClass.rotarychaingun_mosquito
|
||||
// list(1).parentSlot mustEqual 1
|
||||
// case None =>
|
||||
// ko
|
||||
// }
|
||||
// case _ =>
|
||||
// ko
|
||||
// }
|
||||
// case _ =>
|
||||
// ko
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// "encode (Scrawny Ronnie's mosquito)" in {
|
||||
// val app : (Int)=>CharacterAppearanceData = CharacterAppearanceData(
|
||||
// BasicCharacterData("ScrawnyRonnie", PlanetSideEmpire.TR, CharacterGender.Male, 5, CharacterVoice.Voice5),
|
||||
// false, false,
|
||||
// ExoSuitType.Agile,
|
||||
// "Black Beret Armoured Corps",
|
||||
// 23,
|
||||
// false,
|
||||
// 354.375f, 0.0f,
|
||||
// false,
|
||||
// GrenadeState.None, false, false, None,
|
||||
// RibbonBars(
|
||||
// MeritCommendation.MarkovVeteran,
|
||||
// MeritCommendation.HeavyInfantry4,
|
||||
// MeritCommendation.TankBuster7,
|
||||
// MeritCommendation.SixYearTR
|
||||
// )
|
||||
// )
|
||||
// val char : (Boolean,Boolean)=>CharacterData = CharacterData(
|
||||
// 100, 0,
|
||||
// UniformStyle.ThirdUpgrade,
|
||||
// 0,
|
||||
// 5,
|
||||
// Nil,
|
||||
// Some(Cosmetics(true, true, true, true, false))
|
||||
// )
|
||||
// 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))))
|
||||
// ),
|
||||
// InternalSlot(ObjectClass.bank, PlanetSideGUID(2952), 1,
|
||||
// WeaponData(0, 0, 0, List(InternalSlot(ObjectClass.armor_canister, PlanetSideGUID(3758), 0, AmmoBoxData(0))))
|
||||
// ),
|
||||
// InternalSlot(ObjectClass.mini_chaingun, PlanetSideGUID(2929), 2,
|
||||
// WeaponData(0, 0, 0, List(InternalSlot(ObjectClass.bullet_9mm, PlanetSideGUID(3292), 0, AmmoBoxData(0))))
|
||||
// ),
|
||||
// InternalSlot(ObjectClass.chainblade, PlanetSideGUID(3222), 4,
|
||||
// WeaponData(0, 0, 0, List(InternalSlot(ObjectClass.melee_ammo, PlanetSideGUID(3100), 0, AmmoBoxData(0))))
|
||||
// )
|
||||
// )
|
||||
// )
|
||||
// val player = VehicleData.PlayerData(app, char, inv, DrawnSlot.None, VehicleData.InitialStreamLengthToSeatEntries(true, VehicleFormat.Variant))
|
||||
// val obj = VehicleData(
|
||||
// PlacementData(
|
||||
// Vector3(4571.6875f, 5602.1875f, 93),
|
||||
// Vector3(11.25f, 2.8125f, 92.8125f),
|
||||
// Some(Vector3(31.71875f, 8.875f, -0.03125f))
|
||||
// ),
|
||||
// PlanetSideEmpire.TR,
|
||||
// false, false,
|
||||
// 0,
|
||||
// false, false,
|
||||
// PlanetSideGUID(3776),
|
||||
// false,
|
||||
// 255,
|
||||
// false, false,
|
||||
// DriveState.Mobile,
|
||||
// false, false, false,
|
||||
// Some(VariantVehicleData(7)),
|
||||
// Some(
|
||||
// InventoryData(
|
||||
// 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))))
|
||||
// )
|
||||
// )
|
||||
// )
|
||||
// )
|
||||
// )(VehicleFormat.Variant)
|
||||
// val msg = ObjectCreateMessage(ObjectClass.mosquito, PlanetSideGUID(4308), obj)
|
||||
// val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
|
||||
//
|
||||
// val pkt_bitv = pkt.toBitVector
|
||||
// val ori_bitv = string_mosquito_seated.toBitVector
|
||||
// pkt_bitv.take(555) mustEqual ori_bitv.take(555) //skip 126
|
||||
// pkt_bitv.drop(681).take(512) mustEqual ori_bitv.drop(681).take(512) //renew
|
||||
// pkt_bitv.drop(1193).take(88) mustEqual ori_bitv.drop(1193).take(88) //skip 3
|
||||
// pkt_bitv.drop(1284).take(512) mustEqual ori_bitv.drop(1284).take(512) //renew
|
||||
// pkt_bitv.drop(1796) mustEqual ori_bitv.drop(1796)
|
||||
// //TODO work on CharacterData to make this pass as a single stream
|
||||
// }
|
||||
val string_mosquito_seated =
|
||||
hex"17c70700009e2d410d8ed818f1a4017047f7ffbc6390ffbe01801cff00003c08791801d00000002340530063007200610077006e00790052" ++
|
||||
hex"006f006e006e0069006500020b7e67b540404001000000000022b50100268042006c00610063006b00200042006500720065007400200041" ++
|
||||
hex"0072006d006f007500720065006400200043006f00720070007300170040030050040003bc00000234040001a00400027a7a0809a6910800" ++
|
||||
hex"00000008090a6403603000001082202e040000000202378ae0e80c00000162710b82000000008083837032030000015e2583210000000020" ++
|
||||
hex"20e21c0c80c000007722120e81c0000000808063483603000000"
|
||||
|
||||
"decode (Scrawny Ronnie's mosquito)" in {
|
||||
PacketCoding.DecodePacket(string_mosquito_seated).require match {
|
||||
case ObjectCreateMessage(len, cls, guid, parent, data) =>
|
||||
len mustEqual 1991
|
||||
cls mustEqual ObjectClass.mosquito
|
||||
guid mustEqual PlanetSideGUID(4308)
|
||||
parent mustEqual None
|
||||
data match {
|
||||
case Some(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.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.inventory match {
|
||||
case Some(InventoryData(list)) =>
|
||||
list.head.objectClass mustEqual ObjectClass.avatar
|
||||
list.head.guid mustEqual PlanetSideGUID(3776)
|
||||
list.head.parentSlot mustEqual 0
|
||||
list.head.obj match {
|
||||
case PlayerData(None, app, char, Some(InventoryData(inv)), DrawnSlot.None) =>
|
||||
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.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
|
||||
a.unk8 mustEqual 4
|
||||
a.unk9 mustEqual 0
|
||||
a.unkA mustEqual 0
|
||||
|
||||
b.outfit_name mustEqual "Black Beret Armoured Corps"
|
||||
b.outfit_logo mustEqual 23
|
||||
b.backpack mustEqual false
|
||||
b.facingPitch mustEqual 348.75f
|
||||
b.facingYawUpper mustEqual 0
|
||||
b.lfs mustEqual false
|
||||
b.grenade_state mustEqual GrenadeState.None
|
||||
b.is_cloaking mustEqual false
|
||||
b.charging_pose mustEqual false
|
||||
b.on_zipline mustEqual None
|
||||
b.unk0 mustEqual 316554L
|
||||
b.unk1 mustEqual false
|
||||
b.unk2 mustEqual false
|
||||
b.unk3 mustEqual false
|
||||
b.unk4 mustEqual false
|
||||
b.unk5 mustEqual false
|
||||
b.unk6 mustEqual false
|
||||
b.unk7 mustEqual false
|
||||
|
||||
case _ =>
|
||||
ko
|
||||
}
|
||||
|
||||
char match {
|
||||
case CharacterData(health, armor, uniform, unk, cr, implants, cosmetics) =>
|
||||
health mustEqual 100
|
||||
armor mustEqual 0
|
||||
uniform mustEqual UniformStyle.ThirdUpgrade
|
||||
unk mustEqual 7
|
||||
cr mustEqual 5
|
||||
implants mustEqual Nil
|
||||
cosmetics mustEqual Some(Cosmetics(true, true, true, true, false))
|
||||
case _ =>
|
||||
ko
|
||||
}
|
||||
//briefly ...
|
||||
inv.size mustEqual 4
|
||||
inv.head.objectClass mustEqual ObjectClass.medicalapplicator
|
||||
inv.head.parentSlot mustEqual 0
|
||||
inv(1).objectClass mustEqual ObjectClass.bank
|
||||
inv(1).parentSlot mustEqual 1
|
||||
inv(2).objectClass mustEqual ObjectClass.mini_chaingun
|
||||
inv(2).parentSlot mustEqual 2
|
||||
inv(3).objectClass mustEqual ObjectClass.chainblade
|
||||
inv(3).parentSlot mustEqual 4
|
||||
case _ =>
|
||||
ko
|
||||
}
|
||||
//back to mosquito inventory
|
||||
list(1).objectClass mustEqual ObjectClass.rotarychaingun_mosquito
|
||||
list(1).parentSlot mustEqual 1
|
||||
case None =>
|
||||
ko
|
||||
}
|
||||
case _ =>
|
||||
ko
|
||||
}
|
||||
case _ =>
|
||||
ko
|
||||
}
|
||||
}
|
||||
|
||||
"encode (Scrawny Ronnie's mosquito)" in {
|
||||
val a : Int=>CharacterAppearanceA = CharacterAppearanceA(
|
||||
BasicCharacterData(
|
||||
"ScrawnyRonnie",
|
||||
PlanetSideEmpire.TR,
|
||||
CharacterGender.Male,
|
||||
5,
|
||||
CharacterVoice.Voice5
|
||||
),
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
None,
|
||||
false,
|
||||
ExoSuitType.Agile,
|
||||
None,
|
||||
0,
|
||||
0,
|
||||
30777081L,
|
||||
1,
|
||||
4,
|
||||
0,
|
||||
0
|
||||
)
|
||||
val b : (Boolean,Int)=>CharacterAppearanceB = CharacterAppearanceB(
|
||||
316554L,
|
||||
"Black Beret Armoured Corps",
|
||||
23,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
348.75f, 0,
|
||||
false,
|
||||
GrenadeState.None,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
None
|
||||
)
|
||||
|
||||
val app : (Int)=>CharacterAppearanceData = CharacterAppearanceData(
|
||||
a, b,
|
||||
RibbonBars(
|
||||
MeritCommendation.MarkovVeteran,
|
||||
MeritCommendation.HeavyInfantry4,
|
||||
MeritCommendation.TankBuster7,
|
||||
MeritCommendation.SixYearTR
|
||||
)
|
||||
)
|
||||
val char : (Boolean,Boolean)=>CharacterData = CharacterData(
|
||||
100, 0,
|
||||
UniformStyle.ThirdUpgrade,
|
||||
7,
|
||||
5,
|
||||
Nil,
|
||||
Some(Cosmetics(true, true, true, true, false))
|
||||
)
|
||||
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))))
|
||||
),
|
||||
InternalSlot(ObjectClass.bank, PlanetSideGUID(2952), 1,
|
||||
WeaponData(0, 0, 0, List(InternalSlot(ObjectClass.armor_canister, PlanetSideGUID(3758), 0, AmmoBoxData(0))))
|
||||
),
|
||||
InternalSlot(ObjectClass.mini_chaingun, PlanetSideGUID(2929), 2,
|
||||
WeaponData(0, 0, 0, List(InternalSlot(ObjectClass.bullet_9mm, PlanetSideGUID(3292), 0, AmmoBoxData(0))))
|
||||
),
|
||||
InternalSlot(ObjectClass.chainblade, PlanetSideGUID(3222), 4,
|
||||
WeaponData(0, 0, 0, List(InternalSlot(ObjectClass.melee_ammo, PlanetSideGUID(3100), 0, AmmoBoxData(0))))
|
||||
)
|
||||
)
|
||||
)
|
||||
val player = VehicleData.PlayerData(app, char, inv, DrawnSlot.None, VehicleData.InitialStreamLengthToSeatEntries(true, VehicleFormat.Variant))
|
||||
val obj = VehicleData(
|
||||
PlacementData(
|
||||
Vector3(4571.6875f, 5602.1875f, 93),
|
||||
Vector3(11.25f, 2.8125f, 92.8125f),
|
||||
Some(Vector3(31.71875f, 8.875f, -0.03125f))
|
||||
),
|
||||
PlanetSideEmpire.TR,
|
||||
false, false,
|
||||
0,
|
||||
false, false,
|
||||
PlanetSideGUID(3776),
|
||||
false,
|
||||
255,
|
||||
false, false,
|
||||
DriveState.Mobile,
|
||||
false, false, false,
|
||||
Some(VariantVehicleData(7)),
|
||||
Some(
|
||||
InventoryData(
|
||||
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))))
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)(VehicleFormat.Variant)
|
||||
val msg = ObjectCreateMessage(ObjectClass.mosquito, PlanetSideGUID(4308), obj)
|
||||
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
|
||||
pkt mustEqual string_mosquito_seated
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue