mirror of
https://github.com/psforever/PSF-LoginServer.git
synced 2026-04-29 16:25:30 +00:00
Refactored CharacterData and DetailedCharacterData to be a component of PlayerData and DetailedPlayerData, respectively. Position information is now optional; inventory data and exposed hand data are also removed into PlayerData and DetailedPlayerData. String padding management has been preserved. Tests and packet converters have been repaired.
This commit is contained in:
parent
a9db4b5820
commit
052a318285
13 changed files with 1134 additions and 940 deletions
|
|
@ -20,93 +20,92 @@ class CharacterDataTest extends Specification {
|
|||
cls mustEqual ObjectClass.avatar
|
||||
guid mustEqual PlanetSideGUID(3902)
|
||||
parent.isDefined mustEqual false
|
||||
data.isDefined mustEqual true
|
||||
data.get.isInstanceOf[CharacterData] mustEqual true
|
||||
val pc = data.get.asInstanceOf[CharacterData]
|
||||
pc.appearance.pos.coord.x mustEqual 3674.8438f
|
||||
pc.appearance.pos.coord.y mustEqual 2726.789f
|
||||
pc.appearance.pos.coord.z mustEqual 91.15625f
|
||||
pc.appearance.pos.orient.x mustEqual 0f
|
||||
pc.appearance.pos.orient.y mustEqual 0f
|
||||
pc.appearance.pos.orient.z mustEqual 64.6875f
|
||||
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
|
||||
pc.appearance.basic_appearance.head mustEqual 5
|
||||
pc.appearance.basic_appearance.voice mustEqual 5
|
||||
pc.appearance.voice2 mustEqual 3
|
||||
pc.appearance.black_ops mustEqual false
|
||||
pc.appearance.jammered mustEqual false
|
||||
pc.appearance.exosuit mustEqual ExoSuitType.Reinforced
|
||||
pc.appearance.outfit_name mustEqual "Black Beret Armoured Corps"
|
||||
pc.appearance.outfit_logo mustEqual 23
|
||||
pc.appearance.facingPitch mustEqual 340.3125f
|
||||
pc.appearance.facingYawUpper mustEqual 0
|
||||
pc.appearance.lfs mustEqual false
|
||||
pc.appearance.grenade_state mustEqual GrenadeState.None
|
||||
pc.appearance.is_cloaking mustEqual false
|
||||
pc.appearance.charging_pose mustEqual false
|
||||
pc.appearance.on_zipline mustEqual false
|
||||
pc.appearance.ribbons.upper mustEqual MeritCommendation.MarkovVeteran
|
||||
pc.appearance.ribbons.middle mustEqual MeritCommendation.HeavyInfantry4
|
||||
pc.appearance.ribbons.lower mustEqual MeritCommendation.TankBuster7
|
||||
pc.appearance.ribbons.tos mustEqual MeritCommendation.SixYearTR
|
||||
pc.health mustEqual 255
|
||||
pc.armor mustEqual 253
|
||||
pc.uniform_upgrade mustEqual UniformStyle.ThirdUpgrade
|
||||
pc.command_rank mustEqual 5
|
||||
pc.implant_effects.isDefined mustEqual true
|
||||
pc.implant_effects.get mustEqual ImplantEffects.NoEffects
|
||||
pc.cosmetics.isDefined mustEqual true
|
||||
pc.cosmetics.get.no_helmet mustEqual true
|
||||
pc.cosmetics.get.beret mustEqual true
|
||||
pc.cosmetics.get.sunglasses mustEqual true
|
||||
pc.cosmetics.get.earpiece mustEqual true
|
||||
pc.cosmetics.get.brimmed_cap mustEqual false
|
||||
//short test of inventory items
|
||||
pc.inventory.isDefined mustEqual true
|
||||
val contents = pc.inventory.get.contents
|
||||
contents.size mustEqual 5
|
||||
//0
|
||||
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).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).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).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).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
|
||||
data match {
|
||||
case Some(PlayerData(Some(pos), basic, char, inv, hand)) =>
|
||||
pos.coord mustEqual Vector3(3674.8438f, 2726.789f, 91.15625f)
|
||||
pos.orient mustEqual Vector3(0f, 0f, 64.6875f)
|
||||
pos.vel.isDefined mustEqual true
|
||||
pos.vel.get mustEqual Vector3(1.4375f, -0.4375f, 0f)
|
||||
|
||||
basic.app.name mustEqual "ScrawnyRonnie"
|
||||
basic.app.faction mustEqual PlanetSideEmpire.TR
|
||||
basic.app.sex mustEqual CharacterGender.Male
|
||||
basic.app.head mustEqual 5
|
||||
basic.app.voice mustEqual 5
|
||||
basic.voice2 mustEqual 3
|
||||
basic.black_ops mustEqual false
|
||||
basic.jammered mustEqual false
|
||||
basic.exosuit mustEqual ExoSuitType.Reinforced
|
||||
basic.outfit_name mustEqual "Black Beret Armoured Corps"
|
||||
basic.outfit_logo mustEqual 23
|
||||
basic.facingPitch mustEqual 340.3125f
|
||||
basic.facingYawUpper mustEqual 0
|
||||
basic.lfs mustEqual false
|
||||
basic.grenade_state mustEqual GrenadeState.None
|
||||
basic.is_cloaking mustEqual false
|
||||
basic.charging_pose mustEqual false
|
||||
basic.on_zipline mustEqual false
|
||||
basic.ribbons.upper mustEqual MeritCommendation.MarkovVeteran
|
||||
basic.ribbons.middle mustEqual MeritCommendation.HeavyInfantry4
|
||||
basic.ribbons.lower mustEqual MeritCommendation.TankBuster7
|
||||
basic.ribbons.tos mustEqual MeritCommendation.SixYearTR
|
||||
|
||||
char.health mustEqual 255
|
||||
char.armor mustEqual 253
|
||||
char.uniform_upgrade mustEqual UniformStyle.ThirdUpgrade
|
||||
char.command_rank mustEqual 5
|
||||
char.implant_effects.isDefined mustEqual true
|
||||
char.implant_effects.get mustEqual ImplantEffects.NoEffects
|
||||
char.cosmetics.isDefined mustEqual true
|
||||
char.cosmetics.get.no_helmet mustEqual true
|
||||
char.cosmetics.get.beret mustEqual true
|
||||
char.cosmetics.get.sunglasses mustEqual true
|
||||
char.cosmetics.get.earpiece mustEqual true
|
||||
char.cosmetics.get.brimmed_cap mustEqual false
|
||||
//short test of inventory items
|
||||
inv.isDefined mustEqual true
|
||||
val contents = inv.get.contents
|
||||
contents.size mustEqual 5
|
||||
//0
|
||||
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).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).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).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).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)
|
||||
|
||||
hand mustEqual DrawnSlot.Rifle1
|
||||
case _ =>
|
||||
ko
|
||||
}
|
||||
case _ =>
|
||||
ko
|
||||
}
|
||||
|
|
@ -119,104 +118,105 @@ class CharacterDataTest extends Specification {
|
|||
cls mustEqual ObjectClass.avatar
|
||||
guid mustEqual PlanetSideGUID(3380)
|
||||
parent.isDefined mustEqual false
|
||||
data.isDefined mustEqual true
|
||||
data.get.isInstanceOf[CharacterData] mustEqual true
|
||||
val pc = data.get.asInstanceOf[CharacterData]
|
||||
pc.appearance.pos.coord.x mustEqual 4629.8906f
|
||||
pc.appearance.pos.coord.y mustEqual 6316.4453f
|
||||
pc.appearance.pos.coord.z mustEqual 54.734375f
|
||||
pc.appearance.pos.orient.x mustEqual 0f
|
||||
pc.appearance.pos.orient.y mustEqual 0f
|
||||
pc.appearance.pos.orient.z mustEqual 126.5625f
|
||||
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
|
||||
pc.appearance.basic_appearance.head mustEqual 10
|
||||
pc.appearance.basic_appearance.voice mustEqual 2
|
||||
pc.appearance.voice2 mustEqual 0
|
||||
pc.appearance.black_ops mustEqual false
|
||||
pc.appearance.jammered mustEqual false
|
||||
pc.appearance.exosuit mustEqual ExoSuitType.MAX
|
||||
pc.appearance.outfit_name mustEqual "Original District"
|
||||
pc.appearance.outfit_logo mustEqual 23
|
||||
pc.appearance.facingPitch mustEqual 0
|
||||
pc.appearance.facingYawUpper mustEqual 180.0f
|
||||
pc.appearance.lfs mustEqual false
|
||||
pc.appearance.grenade_state mustEqual GrenadeState.None
|
||||
pc.appearance.is_cloaking mustEqual false
|
||||
pc.appearance.charging_pose mustEqual false
|
||||
pc.appearance.on_zipline mustEqual false
|
||||
pc.appearance.ribbons.upper mustEqual MeritCommendation.Jacking2
|
||||
pc.appearance.ribbons.middle mustEqual MeritCommendation.ScavengerVS1
|
||||
pc.appearance.ribbons.lower mustEqual MeritCommendation.AMSSupport4
|
||||
pc.appearance.ribbons.tos mustEqual MeritCommendation.SixYearVS
|
||||
pc.health mustEqual 0
|
||||
pc.armor mustEqual 0
|
||||
pc.uniform_upgrade mustEqual UniformStyle.ThirdUpgrade
|
||||
pc.command_rank mustEqual 2
|
||||
pc.implant_effects.isDefined mustEqual false
|
||||
pc.cosmetics.isDefined mustEqual true
|
||||
pc.cosmetics.get.no_helmet mustEqual true
|
||||
pc.cosmetics.get.beret mustEqual true
|
||||
pc.cosmetics.get.sunglasses mustEqual true
|
||||
pc.cosmetics.get.earpiece mustEqual true
|
||||
pc.cosmetics.get.brimmed_cap mustEqual false
|
||||
pc.inventory.isDefined mustEqual false
|
||||
pc.drawn_slot mustEqual DrawnSlot.Pistol1
|
||||
data match {
|
||||
case Some(PlayerData(Some(pos), basic, char, None, hand)) =>
|
||||
pos.coord mustEqual Vector3(4629.8906f, 6316.4453f, 54.734375f)
|
||||
pos.orient mustEqual Vector3(0, 0, 126.5625f)
|
||||
pos.vel.isDefined mustEqual false
|
||||
|
||||
basic.app.name mustEqual "Angello"
|
||||
basic.app.faction mustEqual PlanetSideEmpire.VS
|
||||
basic.app.sex mustEqual CharacterGender.Male
|
||||
basic.app.head mustEqual 10
|
||||
basic.app.voice mustEqual 2
|
||||
basic.voice2 mustEqual 0
|
||||
basic.black_ops mustEqual false
|
||||
basic.jammered mustEqual false
|
||||
basic.exosuit mustEqual ExoSuitType.MAX
|
||||
basic.outfit_name mustEqual "Original District"
|
||||
basic.outfit_logo mustEqual 23
|
||||
basic.facingPitch mustEqual 0
|
||||
basic.facingYawUpper mustEqual 180.0f
|
||||
basic.lfs mustEqual false
|
||||
basic.grenade_state mustEqual GrenadeState.None
|
||||
basic.is_cloaking mustEqual false
|
||||
basic.charging_pose mustEqual false
|
||||
basic.on_zipline mustEqual false
|
||||
basic.ribbons.upper mustEqual MeritCommendation.Jacking2
|
||||
basic.ribbons.middle mustEqual MeritCommendation.ScavengerVS1
|
||||
basic.ribbons.lower mustEqual MeritCommendation.AMSSupport4
|
||||
basic.ribbons.tos mustEqual MeritCommendation.SixYearVS
|
||||
|
||||
char.health mustEqual 0
|
||||
char.armor mustEqual 0
|
||||
char.uniform_upgrade mustEqual UniformStyle.ThirdUpgrade
|
||||
char.command_rank mustEqual 2
|
||||
char.implant_effects.isDefined mustEqual false
|
||||
char.cosmetics.isDefined mustEqual true
|
||||
char.cosmetics.get.no_helmet mustEqual true
|
||||
char.cosmetics.get.beret mustEqual true
|
||||
char.cosmetics.get.sunglasses mustEqual true
|
||||
char.cosmetics.get.earpiece mustEqual true
|
||||
char.cosmetics.get.brimmed_cap mustEqual false
|
||||
|
||||
hand mustEqual DrawnSlot.Pistol1
|
||||
case _ =>
|
||||
ko
|
||||
}
|
||||
case _ =>
|
||||
ko
|
||||
}
|
||||
}
|
||||
|
||||
"encode" in {
|
||||
val obj = CharacterData(
|
||||
CharacterAppearanceData(
|
||||
PlacementData(
|
||||
Vector3(3674.8438f, 2726.789f, 91.15625f),
|
||||
Vector3(0f, 0f, 64.6875f),
|
||||
Some(Vector3(1.4375f, -0.4375f, 0f))
|
||||
),
|
||||
BasicCharacterData(
|
||||
"ScrawnyRonnie",
|
||||
PlanetSideEmpire.TR,
|
||||
CharacterGender.Male,
|
||||
5,
|
||||
5
|
||||
),
|
||||
3,
|
||||
false,
|
||||
false,
|
||||
ExoSuitType.Reinforced,
|
||||
"Black Beret Armoured Corps",
|
||||
23,
|
||||
false,
|
||||
340.3125f, 0f,
|
||||
false,
|
||||
GrenadeState.None,
|
||||
false, false, false,
|
||||
RibbonBars(
|
||||
MeritCommendation.MarkovVeteran,
|
||||
MeritCommendation.HeavyInfantry4,
|
||||
MeritCommendation.TankBuster7,
|
||||
MeritCommendation.SixYearTR
|
||||
)
|
||||
val pos : PlacementData = PlacementData(
|
||||
Vector3(3674.8438f, 2726.789f, 91.15625f),
|
||||
Vector3(0f, 0f, 64.6875f),
|
||||
Some(Vector3(1.4375f, -0.4375f, 0f))
|
||||
)
|
||||
val app : (Int)=>CharacterAppearanceData = CharacterAppearanceData(
|
||||
BasicCharacterData(
|
||||
"ScrawnyRonnie",
|
||||
PlanetSideEmpire.TR,
|
||||
CharacterGender.Male,
|
||||
5,
|
||||
5
|
||||
),
|
||||
3,
|
||||
false,
|
||||
false,
|
||||
ExoSuitType.Reinforced,
|
||||
"Black Beret Armoured Corps",
|
||||
23,
|
||||
false,
|
||||
340.3125f, 0f,
|
||||
false,
|
||||
GrenadeState.None,
|
||||
false, false, false,
|
||||
RibbonBars(
|
||||
MeritCommendation.MarkovVeteran,
|
||||
MeritCommendation.HeavyInfantry4,
|
||||
MeritCommendation.TankBuster7,
|
||||
MeritCommendation.SixYearTR
|
||||
)
|
||||
)
|
||||
val char : (Boolean)=>CharacterData = CharacterData(
|
||||
255, 253,
|
||||
UniformStyle.ThirdUpgrade,
|
||||
5,
|
||||
Some(ImplantEffects.NoEffects),
|
||||
Some(Cosmetics(true, true, true, true, false)),
|
||||
InventoryData(
|
||||
InventoryItemData(ObjectClass.plasma_grenade, PlanetSideGUID(3662), 0, WeaponData(0, 0, ObjectClass.plasma_grenade_ammo, PlanetSideGUID(3751), 0, AmmoBoxData())) ::
|
||||
InventoryItemData(ObjectClass.bank, PlanetSideGUID(3908), 1, WeaponData(0, 0, 1, ObjectClass.armor_canister, PlanetSideGUID(4143), 0, AmmoBoxData())) ::
|
||||
InventoryItemData(ObjectClass.mini_chaingun, PlanetSideGUID(4164), 2, WeaponData(0, 0, ObjectClass.bullet_9mm, PlanetSideGUID(3728), 0, AmmoBoxData())) ::
|
||||
InventoryItemData(ObjectClass.phoenix, PlanetSideGUID(3603), 3, WeaponData(0, 0, ObjectClass.phoenix_missile, PlanetSideGUID(3056), 0, AmmoBoxData())) ::
|
||||
InventoryItemData(ObjectClass.chainblade, PlanetSideGUID(4088), 4, WeaponData(0, 0, 1, ObjectClass.melee_ammo, PlanetSideGUID(3279), 0, AmmoBoxData())) ::
|
||||
Nil
|
||||
),
|
||||
DrawnSlot.Rifle1
|
||||
Some(Cosmetics(true, true, true, true, false))
|
||||
)
|
||||
val inv = InventoryData(
|
||||
InventoryItemData(ObjectClass.plasma_grenade, PlanetSideGUID(3662), 0, WeaponData(0, 0, ObjectClass.plasma_grenade_ammo, PlanetSideGUID(3751), 0, AmmoBoxData())) ::
|
||||
InventoryItemData(ObjectClass.bank, PlanetSideGUID(3908), 1, WeaponData(0, 0, 1, ObjectClass.armor_canister, PlanetSideGUID(4143), 0, AmmoBoxData())) ::
|
||||
InventoryItemData(ObjectClass.mini_chaingun, PlanetSideGUID(4164), 2, WeaponData(0, 0, ObjectClass.bullet_9mm, PlanetSideGUID(3728), 0, AmmoBoxData())) ::
|
||||
InventoryItemData(ObjectClass.phoenix, PlanetSideGUID(3603), 3, WeaponData(0, 0, ObjectClass.phoenix_missile, PlanetSideGUID(3056), 0, AmmoBoxData())) ::
|
||||
InventoryItemData(ObjectClass.chainblade, PlanetSideGUID(4088), 4, WeaponData(0, 0, 1, ObjectClass.melee_ammo, PlanetSideGUID(3279), 0, AmmoBoxData())) ::
|
||||
Nil
|
||||
)
|
||||
val obj = PlayerData.apply(pos, app, char, inv, DrawnSlot.Rifle1)
|
||||
|
||||
val msg = ObjectCreateMessage(ObjectClass.avatar, PlanetSideGUID(3902), obj)
|
||||
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
|
||||
val pkt_bitv = pkt.toBitVector
|
||||
|
|
@ -230,42 +230,45 @@ class CharacterDataTest extends Specification {
|
|||
}
|
||||
|
||||
"encode (backpack)" in {
|
||||
val obj = CharacterData(
|
||||
CharacterAppearanceData(
|
||||
PlacementData(4629.8906f, 6316.4453f, 54.734375f, 0f, 0f, 126.5625f),
|
||||
BasicCharacterData(
|
||||
"Angello",
|
||||
PlanetSideEmpire.VS,
|
||||
CharacterGender.Male,
|
||||
10,
|
||||
2
|
||||
),
|
||||
0,
|
||||
false,
|
||||
false,
|
||||
ExoSuitType.MAX,
|
||||
"Original District",
|
||||
23,
|
||||
true, //backpack
|
||||
0f, 180.0f,
|
||||
false,
|
||||
GrenadeState.None,
|
||||
false, false, false,
|
||||
RibbonBars(
|
||||
MeritCommendation.Jacking2,
|
||||
MeritCommendation.ScavengerVS1,
|
||||
MeritCommendation.AMSSupport4,
|
||||
MeritCommendation.SixYearVS
|
||||
)
|
||||
val pos = PlacementData(
|
||||
Vector3(4629.8906f, 6316.4453f, 54.734375f),
|
||||
Vector3(0, 0, 126.5625f)
|
||||
)
|
||||
val app : (Int)=>CharacterAppearanceData = CharacterAppearanceData(
|
||||
BasicCharacterData(
|
||||
"Angello",
|
||||
PlanetSideEmpire.VS,
|
||||
CharacterGender.Male,
|
||||
10,
|
||||
2
|
||||
),
|
||||
0,
|
||||
false,
|
||||
false,
|
||||
ExoSuitType.MAX,
|
||||
"Original District",
|
||||
23,
|
||||
true, //backpack
|
||||
0f, 180.0f,
|
||||
false,
|
||||
GrenadeState.None,
|
||||
false, false, false,
|
||||
RibbonBars(
|
||||
MeritCommendation.Jacking2,
|
||||
MeritCommendation.ScavengerVS1,
|
||||
MeritCommendation.AMSSupport4,
|
||||
MeritCommendation.SixYearVS
|
||||
)
|
||||
)
|
||||
val char : (Boolean)=>CharacterData = CharacterData(
|
||||
0, 0,
|
||||
UniformStyle.ThirdUpgrade,
|
||||
2,
|
||||
None,
|
||||
Some(Cosmetics(true, true, true, true, false)),
|
||||
None,
|
||||
DrawnSlot.Pistol1
|
||||
Some(Cosmetics(true, true, true, true, false))
|
||||
)
|
||||
val obj = PlayerData.apply(pos, app, char, DrawnSlot.Pistol1)
|
||||
|
||||
val msg = ObjectCreateMessage(ObjectClass.avatar, PlanetSideGUID(3380), obj)
|
||||
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
|
||||
val pkt_bitv = pkt.toBitVector
|
||||
|
|
|
|||
|
|
@ -20,130 +20,132 @@ class DetailedCharacterDataTest extends Specification {
|
|||
cls mustEqual ObjectClass.avatar
|
||||
guid mustEqual PlanetSideGUID(75)
|
||||
parent.isDefined mustEqual false
|
||||
data.isDefined mustEqual true
|
||||
val char = data.get.asInstanceOf[DetailedCharacterData]
|
||||
char.appearance.pos.coord.x mustEqual 3674.8438f
|
||||
char.appearance.pos.coord.y mustEqual 2726.789f
|
||||
char.appearance.pos.coord.z mustEqual 91.15625f
|
||||
char.appearance.pos.orient.x mustEqual 0
|
||||
char.appearance.pos.orient.y mustEqual 0f
|
||||
char.appearance.pos.orient.z mustEqual 36.5625f
|
||||
char.appearance.basic_appearance.name mustEqual "IlllIIIlllIlIllIlllIllI"
|
||||
char.appearance.basic_appearance.faction mustEqual PlanetSideEmpire.VS
|
||||
char.appearance.basic_appearance.sex mustEqual CharacterGender.Female
|
||||
char.appearance.basic_appearance.head mustEqual 41
|
||||
char.appearance.basic_appearance.voice mustEqual 1 //female 1
|
||||
char.appearance.voice2 mustEqual 3
|
||||
char.appearance.black_ops mustEqual false
|
||||
char.appearance.jammered mustEqual false
|
||||
char.appearance.exosuit mustEqual ExoSuitType.Standard
|
||||
char.appearance.outfit_name mustEqual ""
|
||||
char.appearance.outfit_logo mustEqual 0
|
||||
char.appearance.backpack mustEqual false
|
||||
char.appearance.facingPitch mustEqual 2.8125f
|
||||
char.appearance.facingYawUpper mustEqual 210.9375f
|
||||
char.appearance.lfs mustEqual true
|
||||
char.appearance.grenade_state mustEqual GrenadeState.None
|
||||
char.appearance.is_cloaking mustEqual false
|
||||
char.appearance.charging_pose mustEqual false
|
||||
char.appearance.on_zipline mustEqual false
|
||||
char.appearance.ribbons.upper mustEqual MeritCommendation.None
|
||||
char.appearance.ribbons.middle mustEqual MeritCommendation.None
|
||||
char.appearance.ribbons.lower mustEqual MeritCommendation.None
|
||||
char.appearance.ribbons.tos mustEqual MeritCommendation.None
|
||||
char.bep mustEqual 0
|
||||
char.cep mustEqual 0
|
||||
char.healthMax mustEqual 100
|
||||
char.health mustEqual 100
|
||||
char.armor mustEqual 50 //standard exosuit value
|
||||
char.unk1 mustEqual 1
|
||||
char.unk2 mustEqual 7
|
||||
char.unk3 mustEqual 7
|
||||
char.staminaMax mustEqual 100
|
||||
char.stamina mustEqual 100
|
||||
char.certs.length mustEqual 7
|
||||
char.certs.head mustEqual CertificationType.StandardAssault
|
||||
char.certs(1) mustEqual CertificationType.MediumAssault
|
||||
char.certs(2) mustEqual CertificationType.ATV
|
||||
char.certs(3) mustEqual CertificationType.Harasser
|
||||
char.certs(4) mustEqual CertificationType.StandardExoSuit
|
||||
char.certs(5) mustEqual CertificationType.AgileExoSuit
|
||||
char.certs(6) mustEqual CertificationType.ReinforcedExoSuit
|
||||
char.implants.length mustEqual 0
|
||||
char.firstTimeEvents.size mustEqual 4
|
||||
char.firstTimeEvents.head mustEqual "xpe_sanctuary_help"
|
||||
char.firstTimeEvents(1) mustEqual "xpe_th_firemodes"
|
||||
char.firstTimeEvents(2) mustEqual "used_beamer"
|
||||
char.firstTimeEvents(3) mustEqual "map13"
|
||||
char.tutorials.size mustEqual 0
|
||||
char.cosmetics.isDefined mustEqual false
|
||||
char.inventory.isDefined mustEqual true
|
||||
val inventory = char.inventory.get.contents
|
||||
inventory.size mustEqual 10
|
||||
//0
|
||||
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).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).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).objectClass mustEqual ObjectClass.locker_container
|
||||
inventory(3).guid mustEqual PlanetSideGUID(82)
|
||||
inventory(3).parentSlot mustEqual 5
|
||||
inventory(3).obj.isInstanceOf[DetailedLockerContainerData] mustEqual true
|
||||
inventory(3).obj.asInstanceOf[DetailedLockerContainerData].inventory.isDefined mustEqual false
|
||||
//4
|
||||
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).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).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).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).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).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
|
||||
data match {
|
||||
case Some(DetailedPlayerData(Some(pos), basic, char, inv, hand)) =>
|
||||
pos.coord mustEqual Vector3(3674.8438f, 2726.789f, 91.15625f)
|
||||
pos.orient mustEqual Vector3(0, 0, 36.5625f)
|
||||
pos.vel.isDefined mustEqual false
|
||||
|
||||
basic.app.name mustEqual "IlllIIIlllIlIllIlllIllI"
|
||||
basic.app.faction mustEqual PlanetSideEmpire.VS
|
||||
basic.app.sex mustEqual CharacterGender.Female
|
||||
basic.app.head mustEqual 41
|
||||
basic.app.voice mustEqual 1 //female 1
|
||||
basic.voice2 mustEqual 3
|
||||
basic.black_ops mustEqual false
|
||||
basic.jammered mustEqual false
|
||||
basic.exosuit mustEqual ExoSuitType.Standard
|
||||
basic.outfit_name mustEqual ""
|
||||
basic.outfit_logo mustEqual 0
|
||||
basic.backpack mustEqual false
|
||||
basic.facingPitch mustEqual 2.8125f
|
||||
basic.facingYawUpper mustEqual 210.9375f
|
||||
basic.lfs mustEqual true
|
||||
basic.grenade_state mustEqual GrenadeState.None
|
||||
basic.is_cloaking mustEqual false
|
||||
basic.charging_pose mustEqual false
|
||||
basic.on_zipline mustEqual false
|
||||
basic.ribbons.upper mustEqual MeritCommendation.None
|
||||
basic.ribbons.middle mustEqual MeritCommendation.None
|
||||
basic.ribbons.lower mustEqual MeritCommendation.None
|
||||
basic.ribbons.tos mustEqual MeritCommendation.None
|
||||
|
||||
char.bep mustEqual 0
|
||||
char.cep mustEqual 0
|
||||
char.healthMax mustEqual 100
|
||||
char.health mustEqual 100
|
||||
char.armor mustEqual 50 //standard exosuit value
|
||||
char.unk1 mustEqual 1
|
||||
char.unk2 mustEqual 7
|
||||
char.unk3 mustEqual 7
|
||||
char.staminaMax mustEqual 100
|
||||
char.stamina mustEqual 100
|
||||
char.certs.length mustEqual 7
|
||||
char.certs.head mustEqual CertificationType.StandardAssault
|
||||
char.certs(1) mustEqual CertificationType.MediumAssault
|
||||
char.certs(2) mustEqual CertificationType.ATV
|
||||
char.certs(3) mustEqual CertificationType.Harasser
|
||||
char.certs(4) mustEqual CertificationType.StandardExoSuit
|
||||
char.certs(5) mustEqual CertificationType.AgileExoSuit
|
||||
char.certs(6) mustEqual CertificationType.ReinforcedExoSuit
|
||||
char.implants.length mustEqual 0
|
||||
char.firstTimeEvents.size mustEqual 4
|
||||
char.firstTimeEvents.head mustEqual "xpe_sanctuary_help"
|
||||
char.firstTimeEvents(1) mustEqual "xpe_th_firemodes"
|
||||
char.firstTimeEvents(2) mustEqual "used_beamer"
|
||||
char.firstTimeEvents(3) mustEqual "map13"
|
||||
char.tutorials.size mustEqual 0
|
||||
char.cosmetics.isDefined mustEqual false
|
||||
inv.isDefined mustEqual true
|
||||
val inventory = inv.get.contents
|
||||
inventory.size mustEqual 10
|
||||
//0
|
||||
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).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).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).objectClass mustEqual ObjectClass.locker_container
|
||||
inventory(3).guid mustEqual PlanetSideGUID(82)
|
||||
inventory(3).parentSlot mustEqual 5
|
||||
inventory(3).obj.isInstanceOf[DetailedLockerContainerData] mustEqual true
|
||||
inventory(3).obj.asInstanceOf[DetailedLockerContainerData].inventory.isDefined mustEqual false
|
||||
//4
|
||||
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).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).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).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).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).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
|
||||
hand mustEqual DrawnSlot.Pistol1
|
||||
case _ =>
|
||||
ko
|
||||
}
|
||||
case _ =>
|
||||
ko
|
||||
}
|
||||
|
|
@ -155,76 +157,80 @@ class DetailedCharacterDataTest extends Specification {
|
|||
//this test is mainly for an alternate bitstream parsing order
|
||||
//the object produced is massive and most of it is already covered in other tests
|
||||
//only certain details towards the end of the stream will be checked
|
||||
data.isDefined mustEqual true
|
||||
val char = data.get.asInstanceOf[DetailedCharacterData]
|
||||
DetailedCharacterData.isBR24(char.bep) mustEqual true
|
||||
char.certs.size mustEqual 15
|
||||
char.certs.head mustEqual CertificationType.StandardAssault
|
||||
char.certs(14) mustEqual CertificationType.CombatEngineering
|
||||
char.implants.size mustEqual 3
|
||||
char.implants.head.implant mustEqual ImplantType.AudioAmplifier
|
||||
char.implants.head.activation mustEqual None
|
||||
char.implants(1).implant mustEqual ImplantType.Targeting
|
||||
char.implants(1).activation mustEqual None
|
||||
char.implants(2).implant mustEqual ImplantType.Surge
|
||||
char.implants(2).activation mustEqual None
|
||||
char.firstTimeEvents.size mustEqual 298
|
||||
char.firstTimeEvents.head mustEqual "xpe_overhead_map"
|
||||
char.firstTimeEvents(297) mustEqual "map10"
|
||||
char.tutorials.size mustEqual 3
|
||||
char.tutorials.head mustEqual "training_start_nc"
|
||||
char.tutorials(1) mustEqual "training_ui"
|
||||
char.tutorials(2) mustEqual "training_map"
|
||||
char.cosmetics.isDefined mustEqual true
|
||||
char.cosmetics.get.no_helmet mustEqual true
|
||||
char.cosmetics.get.beret mustEqual true
|
||||
char.cosmetics.get.earpiece mustEqual true
|
||||
char.cosmetics.get.sunglasses mustEqual true
|
||||
char.cosmetics.get.brimmed_cap mustEqual false
|
||||
//inventory
|
||||
char.inventory.isDefined mustEqual true
|
||||
char.inventory.get.contents.size mustEqual 12
|
||||
//0
|
||||
char.inventory.get.contents.head.objectClass mustEqual 531
|
||||
char.inventory.get.contents.head.guid mustEqual PlanetSideGUID(4202)
|
||||
char.inventory.get.contents.head.parentSlot mustEqual 0
|
||||
val wep1 = char.inventory.get.contents.head.obj.asInstanceOf[DetailedWeaponData]
|
||||
wep1.unk1 mustEqual 2
|
||||
wep1.unk2 mustEqual 8
|
||||
wep1.ammo.head.objectClass mustEqual 389
|
||||
wep1.ammo.head.guid mustEqual PlanetSideGUID(3942)
|
||||
wep1.ammo.head.parentSlot mustEqual 0
|
||||
wep1.ammo.head.obj.asInstanceOf[DetailedAmmoBoxData].unk mustEqual 8
|
||||
wep1.ammo.head.obj.asInstanceOf[DetailedAmmoBoxData].magazine mustEqual 100
|
||||
//4
|
||||
char.inventory.get.contents(4).objectClass mustEqual 456
|
||||
char.inventory.get.contents(4).guid mustEqual PlanetSideGUID(5374)
|
||||
char.inventory.get.contents(4).parentSlot mustEqual 5
|
||||
char.inventory.get.contents(4).obj.asInstanceOf[DetailedLockerContainerData].inventory.get.contents.size mustEqual 61
|
||||
//11
|
||||
char.inventory.get.contents(11).objectClass mustEqual 673
|
||||
char.inventory.get.contents(11).guid mustEqual PlanetSideGUID(3661)
|
||||
char.inventory.get.contents(11).parentSlot mustEqual 60
|
||||
val wep2 = char.inventory.get.contents(11).obj.asInstanceOf[DetailedWeaponData]
|
||||
wep2.unk1 mustEqual 2
|
||||
wep2.unk2 mustEqual 8
|
||||
wep2.ammo.head.objectClass mustEqual 674
|
||||
wep2.ammo.head.guid mustEqual PlanetSideGUID(8542)
|
||||
wep2.ammo.head.parentSlot mustEqual 0
|
||||
wep2.ammo.head.obj.asInstanceOf[DetailedAmmoBoxData].unk mustEqual 8
|
||||
wep2.ammo.head.obj.asInstanceOf[DetailedAmmoBoxData].magazine mustEqual 3
|
||||
char.drawn_slot mustEqual DrawnSlot.None
|
||||
data match {
|
||||
case Some(DetailedPlayerData(Some(_), _, char, inv, hand)) =>
|
||||
DetailedCharacterData.isBR24(char.bep) mustEqual true
|
||||
char.certs.size mustEqual 15
|
||||
char.certs.head mustEqual CertificationType.StandardAssault
|
||||
char.certs(14) mustEqual CertificationType.CombatEngineering
|
||||
char.implants.size mustEqual 3
|
||||
char.implants.head.implant mustEqual ImplantType.AudioAmplifier
|
||||
char.implants.head.activation mustEqual None
|
||||
char.implants(1).implant mustEqual ImplantType.Targeting
|
||||
char.implants(1).activation mustEqual None
|
||||
char.implants(2).implant mustEqual ImplantType.Surge
|
||||
char.implants(2).activation mustEqual None
|
||||
char.firstTimeEvents.size mustEqual 298
|
||||
char.firstTimeEvents.head mustEqual "xpe_overhead_map"
|
||||
char.firstTimeEvents(297) mustEqual "map10"
|
||||
char.tutorials.size mustEqual 3
|
||||
char.tutorials.head mustEqual "training_start_nc"
|
||||
char.tutorials(1) mustEqual "training_ui"
|
||||
char.tutorials(2) mustEqual "training_map"
|
||||
char.cosmetics.isDefined mustEqual true
|
||||
char.cosmetics.get.no_helmet mustEqual true
|
||||
char.cosmetics.get.beret mustEqual true
|
||||
char.cosmetics.get.earpiece mustEqual true
|
||||
char.cosmetics.get.sunglasses mustEqual true
|
||||
char.cosmetics.get.brimmed_cap mustEqual false
|
||||
//inventory
|
||||
inv.isDefined mustEqual true
|
||||
inv.get.contents.size mustEqual 12
|
||||
//0
|
||||
inv.get.contents.head.objectClass mustEqual 531
|
||||
inv.get.contents.head.guid mustEqual PlanetSideGUID(4202)
|
||||
inv.get.contents.head.parentSlot mustEqual 0
|
||||
val wep1 = inv.get.contents.head.obj.asInstanceOf[DetailedWeaponData]
|
||||
wep1.unk1 mustEqual 2
|
||||
wep1.unk2 mustEqual 8
|
||||
wep1.ammo.head.objectClass mustEqual 389
|
||||
wep1.ammo.head.guid mustEqual PlanetSideGUID(3942)
|
||||
wep1.ammo.head.parentSlot mustEqual 0
|
||||
wep1.ammo.head.obj.asInstanceOf[DetailedAmmoBoxData].unk mustEqual 8
|
||||
wep1.ammo.head.obj.asInstanceOf[DetailedAmmoBoxData].magazine mustEqual 100
|
||||
//4
|
||||
inv.get.contents(4).objectClass mustEqual 456
|
||||
inv.get.contents(4).guid mustEqual PlanetSideGUID(5374)
|
||||
inv.get.contents(4).parentSlot mustEqual 5
|
||||
inv.get.contents(4).obj.asInstanceOf[DetailedLockerContainerData].inventory.get.contents.size mustEqual 61
|
||||
//11
|
||||
inv.get.contents(11).objectClass mustEqual 673
|
||||
inv.get.contents(11).guid mustEqual PlanetSideGUID(3661)
|
||||
inv.get.contents(11).parentSlot mustEqual 60
|
||||
val wep2 = inv.get.contents(11).obj.asInstanceOf[DetailedWeaponData]
|
||||
wep2.unk1 mustEqual 2
|
||||
wep2.unk2 mustEqual 8
|
||||
wep2.ammo.head.objectClass mustEqual 674
|
||||
wep2.ammo.head.guid mustEqual PlanetSideGUID(8542)
|
||||
wep2.ammo.head.parentSlot mustEqual 0
|
||||
wep2.ammo.head.obj.asInstanceOf[DetailedAmmoBoxData].unk mustEqual 8
|
||||
wep2.ammo.head.obj.asInstanceOf[DetailedAmmoBoxData].magazine mustEqual 3
|
||||
|
||||
hand mustEqual DrawnSlot.None
|
||||
case _ =>
|
||||
ko
|
||||
}
|
||||
case _ =>
|
||||
ko
|
||||
}
|
||||
}
|
||||
|
||||
"encode (character)" in {
|
||||
val app = CharacterAppearanceData(
|
||||
PlacementData(
|
||||
Vector3(3674.8438f, 2726.789f, 91.15625f),
|
||||
Vector3(0f, 0f, 36.5625f)
|
||||
),
|
||||
val pos : PlacementData = PlacementData(
|
||||
3674.8438f, 2726.789f, 91.15625f,
|
||||
0, 0, 36.5625f
|
||||
)
|
||||
val app : (Int)=>CharacterAppearanceData = CharacterAppearanceData(
|
||||
BasicCharacterData(
|
||||
"IlllIIIlllIlIllIlllIllI",
|
||||
PlanetSideEmpire.VS,
|
||||
|
|
@ -247,19 +253,7 @@ class DetailedCharacterDataTest extends Specification {
|
|||
false,
|
||||
RibbonBars()
|
||||
)
|
||||
val inv = InventoryItemData(ObjectClass.beamer, PlanetSideGUID(76), 0, DetailedWeaponData(4, 8, ObjectClass.energy_cell, PlanetSideGUID(77), 0, DetailedAmmoBoxData(8, 16))) ::
|
||||
InventoryItemData(ObjectClass.suppressor, PlanetSideGUID(78), 2, DetailedWeaponData(4, 8, ObjectClass.bullet_9mm, PlanetSideGUID(79), 0, DetailedAmmoBoxData(8, 25))) ::
|
||||
InventoryItemData(ObjectClass.forceblade, PlanetSideGUID(80), 4, DetailedWeaponData(4, 8, ObjectClass.melee_ammo, PlanetSideGUID(81), 0, DetailedAmmoBoxData(8, 1))) ::
|
||||
InventoryItemData(ObjectClass.locker_container, PlanetSideGUID(82), 5, DetailedLockerContainerData(8)) ::
|
||||
InventoryItemData(ObjectClass.bullet_9mm, PlanetSideGUID(83), 6, DetailedAmmoBoxData(8, 50)) ::
|
||||
InventoryItemData(ObjectClass.bullet_9mm, PlanetSideGUID(84), 9, DetailedAmmoBoxData(8, 50)) ::
|
||||
InventoryItemData(ObjectClass.bullet_9mm, PlanetSideGUID(85), 12, DetailedAmmoBoxData(8, 50)) ::
|
||||
InventoryItemData(ObjectClass.bullet_9mm_AP, PlanetSideGUID(86), 33, DetailedAmmoBoxData(8, 50)) ::
|
||||
InventoryItemData(ObjectClass.energy_cell, PlanetSideGUID(87), 36, DetailedAmmoBoxData(8, 50)) ::
|
||||
InventoryItemData(ObjectClass.remote_electronics_kit, PlanetSideGUID(88), 39, DetailedREKData(8)) ::
|
||||
Nil
|
||||
val obj = DetailedCharacterData(
|
||||
app,
|
||||
val char : (Option[Int])=>DetailedCharacterData = DetailedCharacterData(
|
||||
0,
|
||||
0,
|
||||
100, 100,
|
||||
|
|
@ -278,13 +272,25 @@ class DetailedCharacterDataTest extends Specification {
|
|||
List(),
|
||||
"xpe_sanctuary_help" :: "xpe_th_firemodes" :: "used_beamer" :: "map13" :: Nil,
|
||||
List.empty,
|
||||
None,
|
||||
Some(InventoryData(inv)),
|
||||
DrawnSlot.Pistol1
|
||||
None
|
||||
)
|
||||
val inv = InventoryData(
|
||||
InventoryItemData(ObjectClass.beamer, PlanetSideGUID(76), 0, DetailedWeaponData(4, 8, ObjectClass.energy_cell, PlanetSideGUID(77), 0, DetailedAmmoBoxData(8, 16))) ::
|
||||
InventoryItemData(ObjectClass.suppressor, PlanetSideGUID(78), 2, DetailedWeaponData(4, 8, ObjectClass.bullet_9mm, PlanetSideGUID(79), 0, DetailedAmmoBoxData(8, 25))) ::
|
||||
InventoryItemData(ObjectClass.forceblade, PlanetSideGUID(80), 4, DetailedWeaponData(4, 8, ObjectClass.melee_ammo, PlanetSideGUID(81), 0, DetailedAmmoBoxData(8, 1))) ::
|
||||
InventoryItemData(ObjectClass.locker_container, PlanetSideGUID(82), 5, DetailedLockerContainerData(8)) ::
|
||||
InventoryItemData(ObjectClass.bullet_9mm, PlanetSideGUID(83), 6, DetailedAmmoBoxData(8, 50)) ::
|
||||
InventoryItemData(ObjectClass.bullet_9mm, PlanetSideGUID(84), 9, DetailedAmmoBoxData(8, 50)) ::
|
||||
InventoryItemData(ObjectClass.bullet_9mm, PlanetSideGUID(85), 12, DetailedAmmoBoxData(8, 50)) ::
|
||||
InventoryItemData(ObjectClass.bullet_9mm_AP, PlanetSideGUID(86), 33, DetailedAmmoBoxData(8, 50)) ::
|
||||
InventoryItemData(ObjectClass.energy_cell, PlanetSideGUID(87), 36, DetailedAmmoBoxData(8, 50)) ::
|
||||
InventoryItemData(ObjectClass.remote_electronics_kit, PlanetSideGUID(88), 39, DetailedREKData(8)) ::
|
||||
Nil
|
||||
)
|
||||
val obj = DetailedPlayerData.apply(pos, app, char, inv, DrawnSlot.Pistol1)
|
||||
|
||||
val msg = ObjectCreateDetailedMessage(0x79, PlanetSideGUID(75), obj)
|
||||
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
|
||||
|
||||
val pkt_bitv = pkt.toBitVector
|
||||
val ori_bitv = string_testchar.toBitVector
|
||||
pkt_bitv.take(153) mustEqual ori_bitv.take(153) //skip 1
|
||||
|
|
@ -295,26 +301,31 @@ class DetailedCharacterDataTest extends Specification {
|
|||
}
|
||||
|
||||
"encode (character, br32)" in {
|
||||
val obj = DetailedCharacterData(
|
||||
CharacterAppearanceData(
|
||||
PlacementData(
|
||||
Vector3(5500.0f, 3800.0f, 71.484375f),
|
||||
Vector3(0.0f, 0.0f, 90.0f),
|
||||
None
|
||||
),
|
||||
BasicCharacterData("KiCkJr", PlanetSideEmpire.NC, CharacterGender.Male, 24, 4),
|
||||
3,
|
||||
false, false,
|
||||
ExoSuitType.Agile,
|
||||
"",
|
||||
14,
|
||||
false,
|
||||
354.375f, 354.375f,
|
||||
false,
|
||||
GrenadeState.None,
|
||||
false, false, false,
|
||||
RibbonBars(MeritCommendation.Loser4, MeritCommendation.EventNCElite, MeritCommendation.HeavyAssault6, MeritCommendation.SixYearNC)
|
||||
),
|
||||
val pos : PlacementData = PlacementData(
|
||||
Vector3(5500.0f, 3800.0f, 71.484375f),
|
||||
Vector3(0, 0, 90.0f),
|
||||
None
|
||||
)
|
||||
val app : (Int)=>CharacterAppearanceData = CharacterAppearanceData(
|
||||
BasicCharacterData("KiCkJr", PlanetSideEmpire.NC, CharacterGender.Male, 24, 4),
|
||||
3,
|
||||
false, false,
|
||||
ExoSuitType.Agile,
|
||||
"",
|
||||
14,
|
||||
false,
|
||||
354.375f, 354.375f,
|
||||
false,
|
||||
GrenadeState.None,
|
||||
false, false, false,
|
||||
RibbonBars(
|
||||
MeritCommendation.Loser4,
|
||||
MeritCommendation.EventNCElite,
|
||||
MeritCommendation.HeavyAssault6,
|
||||
MeritCommendation.SixYearNC
|
||||
)
|
||||
)
|
||||
val char : (Option[Int])=>DetailedCharacterData = DetailedCharacterData(
|
||||
6366766,
|
||||
694787,
|
||||
100, 100, 100,
|
||||
|
|
@ -647,198 +658,196 @@ class DetailedCharacterDataTest extends Specification {
|
|||
"training_ui",
|
||||
"training_map"
|
||||
),
|
||||
Some(Cosmetics(true, true, true, true, false)),
|
||||
Some(
|
||||
InventoryData(
|
||||
List(
|
||||
InternalSlot(531, PlanetSideGUID(4202), 0,
|
||||
DetailedWeaponData(2, 8, 0, List(InternalSlot(389, PlanetSideGUID(3942), 0,DetailedAmmoBoxData(8, 100))))
|
||||
),
|
||||
InternalSlot(132, PlanetSideGUID(6924), 1,
|
||||
DetailedWeaponData(2, 8, 0, List(InternalSlot(111, PlanetSideGUID(9157), 0, DetailedAmmoBoxData(8, 100))))
|
||||
),
|
||||
InternalSlot(714, PlanetSideGUID(8498), 2,
|
||||
DetailedWeaponData(2, 8, 0, List(InternalSlot(755, PlanetSideGUID(5356), 0, DetailedAmmoBoxData(8, 16))))
|
||||
),
|
||||
InternalSlot(468, PlanetSideGUID(7198), 4,
|
||||
DetailedWeaponData(2, 8, 0, List(InternalSlot(540, PlanetSideGUID(5009), 0, DetailedAmmoBoxData(8, 1))))
|
||||
),
|
||||
InternalSlot(456, PlanetSideGUID(5374), 5,
|
||||
DetailedLockerContainerData(8, Some(InventoryData(List(
|
||||
InternalSlot(429, PlanetSideGUID(3021), 0,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(272, PlanetSideGUID(8729), 0, DetailedAmmoBoxData(8, 0))))
|
||||
),
|
||||
InternalSlot(838, PlanetSideGUID(8467), 9,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(839, PlanetSideGUID(8603), 0, DetailedAmmoBoxData(8, 5))))
|
||||
),
|
||||
InternalSlot(272, PlanetSideGUID(3266), 18, DetailedAmmoBoxData(8, 27)),
|
||||
InternalSlot(577, PlanetSideGUID(2934), 22,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(111, PlanetSideGUID(4682), 0, DetailedAmmoBoxData(8, 100))))
|
||||
),
|
||||
InternalSlot(839, PlanetSideGUID(3271), 90, DetailedAmmoBoxData(8, 15)),
|
||||
InternalSlot(839, PlanetSideGUID(7174), 94, DetailedAmmoBoxData(8, 6)),
|
||||
InternalSlot(429, PlanetSideGUID(6084), 98,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(272, PlanetSideGUID(5928), 0, DetailedAmmoBoxData(8, 35))))
|
||||
),
|
||||
InternalSlot(462, PlanetSideGUID(5000), 108,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(463, PlanetSideGUID(6277), 0, DetailedAmmoBoxData(8, 150))))
|
||||
),
|
||||
InternalSlot(429, PlanetSideGUID(4341), 189,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(272, PlanetSideGUID(7043), 0, DetailedAmmoBoxData(8, 35))))
|
||||
),
|
||||
InternalSlot(556, PlanetSideGUID(4168), 198,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(28, PlanetSideGUID(8937), 0, DetailedAmmoBoxData(8, 100))))
|
||||
),
|
||||
InternalSlot(272, PlanetSideGUID(3173), 207, DetailedAmmoBoxData(8, 50)),
|
||||
InternalSlot(462, PlanetSideGUID(3221), 210,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(463, PlanetSideGUID(4031), 0, DetailedAmmoBoxData(8, 150))))
|
||||
),
|
||||
InternalSlot(556, PlanetSideGUID(6853), 280,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(29, PlanetSideGUID(8524), 0, DetailedAmmoBoxData(8, 67))))
|
||||
),
|
||||
InternalSlot(556, PlanetSideGUID(4569), 290,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(28, PlanetSideGUID(5584), 0, DetailedAmmoBoxData(8, 100))))
|
||||
),
|
||||
InternalSlot(462, PlanetSideGUID(9294), 300,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(463, PlanetSideGUID(3118), 0, DetailedAmmoBoxData(8, 150))))
|
||||
),
|
||||
InternalSlot(272, PlanetSideGUID(4759), 387, DetailedAmmoBoxData(8, 50)),
|
||||
InternalSlot(462, PlanetSideGUID(7377), 390,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(463, PlanetSideGUID(8155), 0, DetailedAmmoBoxData(8, 150))))
|
||||
),
|
||||
InternalSlot(843, PlanetSideGUID(6709), 480, DetailedAmmoBoxData(8, 1)),
|
||||
InternalSlot(843, PlanetSideGUID(5276), 484, DetailedAmmoBoxData(8, 1)),
|
||||
InternalSlot(843, PlanetSideGUID(7769), 488, DetailedAmmoBoxData(8, 1)),
|
||||
InternalSlot(844, PlanetSideGUID(5334), 492, DetailedAmmoBoxData(8, 1)),
|
||||
InternalSlot(844, PlanetSideGUID(6219), 496, DetailedAmmoBoxData(8, 1)),
|
||||
InternalSlot(842, PlanetSideGUID(7279), 500, DetailedAmmoBoxData(8, 1)),
|
||||
InternalSlot(842, PlanetSideGUID(5415), 504, DetailedAmmoBoxData(8, 1)),
|
||||
InternalSlot(175, PlanetSideGUID(5741), 540,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(540, PlanetSideGUID(5183), 0, DetailedAmmoBoxData(8, 1))))
|
||||
),
|
||||
InternalSlot(324, PlanetSideGUID(6208), 541,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(540, PlanetSideGUID(5029), 0, DetailedAmmoBoxData(8, 1))))
|
||||
),
|
||||
InternalSlot(324, PlanetSideGUID(8589), 542,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(540, PlanetSideGUID(9217), 0, DetailedAmmoBoxData(8, 1))))
|
||||
),
|
||||
InternalSlot(175, PlanetSideGUID(8901), 543,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(540, PlanetSideGUID(7633), 0, DetailedAmmoBoxData(8, 1))))
|
||||
),
|
||||
InternalSlot(175, PlanetSideGUID(8419), 544,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(540, PlanetSideGUID(6546), 0, DetailedAmmoBoxData(8, 1))))
|
||||
),
|
||||
InternalSlot(175, PlanetSideGUID(4715), 545,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(540, PlanetSideGUID(8453), 0, DetailedAmmoBoxData(8, 1))))
|
||||
),
|
||||
InternalSlot(324, PlanetSideGUID(3577), 546,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(540, PlanetSideGUID(9202), 0, DetailedAmmoBoxData(8, 1))))
|
||||
),
|
||||
InternalSlot(324, PlanetSideGUID(6003), 547,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(540, PlanetSideGUID(3260), 0, DetailedAmmoBoxData(8, 1))))
|
||||
),
|
||||
InternalSlot(324, PlanetSideGUID(9140), 548,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(540,PlanetSideGUID(3815),0,DetailedAmmoBoxData(8, 1))))
|
||||
),
|
||||
InternalSlot(324, PlanetSideGUID(4913), 549,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(540,PlanetSideGUID(7222),0,DetailedAmmoBoxData(8, 1))))
|
||||
),
|
||||
InternalSlot(324, PlanetSideGUID(6954), 550,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(540,PlanetSideGUID(2953),0,DetailedAmmoBoxData(8, 1))))
|
||||
),
|
||||
InternalSlot(324, PlanetSideGUID(6405), 551,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(540,PlanetSideGUID(4676),0,DetailedAmmoBoxData(8, 1))))
|
||||
),
|
||||
InternalSlot(324, PlanetSideGUID(8915), 552,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(540,PlanetSideGUID(4018),0,DetailedAmmoBoxData(8, 1))))
|
||||
),
|
||||
InternalSlot(324, PlanetSideGUID(4993), 553,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(540,PlanetSideGUID(6775),0,DetailedAmmoBoxData(8, 1))))
|
||||
),
|
||||
InternalSlot(175, PlanetSideGUID(5053), 554,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(540,PlanetSideGUID(6418),0,DetailedAmmoBoxData(8, 1))))
|
||||
),
|
||||
InternalSlot(324, PlanetSideGUID(9244), 555,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(540,PlanetSideGUID(3327),0,DetailedAmmoBoxData(8, 1))))
|
||||
),
|
||||
InternalSlot(468, PlanetSideGUID(6292), 556,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(540,PlanetSideGUID(6918),0,DetailedAmmoBoxData(8, 1))))
|
||||
),
|
||||
InternalSlot(842, PlanetSideGUID(5357), 558, DetailedAmmoBoxData(8, 1)),
|
||||
InternalSlot(844, PlanetSideGUID(4435), 562, DetailedAmmoBoxData(8, 1)),
|
||||
InternalSlot(843, PlanetSideGUID(7242), 566, DetailedAmmoBoxData(8, 1)),
|
||||
InternalSlot(175, PlanetSideGUID(7330), 570,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(540, PlanetSideGUID(4786), 0, DetailedAmmoBoxData(8, 1))))
|
||||
),
|
||||
InternalSlot(468, PlanetSideGUID(7415), 571,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(540, PlanetSideGUID(6536), 0, DetailedAmmoBoxData(8, 1))))
|
||||
),
|
||||
InternalSlot(175, PlanetSideGUID(3949), 572,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(540, PlanetSideGUID(7526), 0, DetailedAmmoBoxData(8, 1))))
|
||||
),
|
||||
InternalSlot(175, PlanetSideGUID(3805), 573,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(540, PlanetSideGUID(7358), 0, DetailedAmmoBoxData(8, 1))))
|
||||
),
|
||||
InternalSlot(324, PlanetSideGUID(4493), 574,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(540, PlanetSideGUID(6852), 0, DetailedAmmoBoxData(8, 1))))
|
||||
),
|
||||
InternalSlot(324, PlanetSideGUID(5762), 575,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(540, PlanetSideGUID(3463), 0, DetailedAmmoBoxData(8, 1))))
|
||||
),
|
||||
InternalSlot(175, PlanetSideGUID(3315), 576,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(540, PlanetSideGUID(7619), 0, DetailedAmmoBoxData(8, 1))))
|
||||
),
|
||||
InternalSlot(324, PlanetSideGUID(6263), 577,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(540, PlanetSideGUID(5912), 0, DetailedAmmoBoxData(8, 1))))
|
||||
),
|
||||
InternalSlot(468, PlanetSideGUID(4028), 578,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(540, PlanetSideGUID(8021), 0, DetailedAmmoBoxData(8, 1))))
|
||||
),
|
||||
InternalSlot(175, PlanetSideGUID(2843), 579,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(540, PlanetSideGUID(7250), 0, DetailedAmmoBoxData(8, 1))))
|
||||
),
|
||||
InternalSlot(175, PlanetSideGUID(9143), 580,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(540, PlanetSideGUID(5195), 0, DetailedAmmoBoxData(8, 1))))
|
||||
),
|
||||
InternalSlot(468, PlanetSideGUID(5024), 581,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(540, PlanetSideGUID(4287), 0, DetailedAmmoBoxData(8, 1))))
|
||||
),
|
||||
InternalSlot(468, PlanetSideGUID(6582), 582,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(540, PlanetSideGUID(4915), 0, DetailedAmmoBoxData(8, 1))))
|
||||
),
|
||||
InternalSlot(468, PlanetSideGUID(6425), 583,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(540, PlanetSideGUID(8872), 0, DetailedAmmoBoxData(8, 1))))
|
||||
),
|
||||
InternalSlot(468, PlanetSideGUID(4431), 584,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(540, PlanetSideGUID(4191), 0, DetailedAmmoBoxData(8, 1))))
|
||||
),
|
||||
InternalSlot(175, PlanetSideGUID(8339), 585,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(540, PlanetSideGUID(7317), 0, DetailedAmmoBoxData(8, 1))))
|
||||
),
|
||||
InternalSlot(175, PlanetSideGUID(3277), 586,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(540, PlanetSideGUID(6469), 0, DetailedAmmoBoxData(8, 1))))
|
||||
)
|
||||
))))
|
||||
),
|
||||
InternalSlot(213, PlanetSideGUID(6877), 6, DetailedCommandDetonaterData(4, 8)),
|
||||
InternalSlot(755, PlanetSideGUID(6227), 9, DetailedAmmoBoxData(8, 16)),
|
||||
InternalSlot(728, PlanetSideGUID(7181), 12, DetailedREKData(4, 16)),
|
||||
InternalSlot(536, PlanetSideGUID(4077), 33, DetailedAmmoBoxData(8, 1)),
|
||||
InternalSlot(680, PlanetSideGUID(4377), 37,
|
||||
DetailedWeaponData(2, 8, 0, List(InternalSlot(681, PlanetSideGUID(8905), 0, DetailedAmmoBoxData(8, 3))))
|
||||
),
|
||||
InternalSlot(32, PlanetSideGUID(5523), 39, DetailedACEData(4)),
|
||||
InternalSlot(673, PlanetSideGUID(3661), 60,
|
||||
DetailedWeaponData(2, 8, 0, List(InternalSlot(674, PlanetSideGUID(8542), 0, DetailedAmmoBoxData(8, 3))))
|
||||
)
|
||||
)
|
||||
)
|
||||
),
|
||||
DrawnSlot.None
|
||||
Some(Cosmetics(true, true, true, true, false))
|
||||
)
|
||||
val inv = InventoryData(
|
||||
List(
|
||||
InternalSlot(531, PlanetSideGUID(4202), 0,
|
||||
DetailedWeaponData(2, 8, 0, List(InternalSlot(389, PlanetSideGUID(3942), 0,DetailedAmmoBoxData(8, 100))))
|
||||
),
|
||||
InternalSlot(132, PlanetSideGUID(6924), 1,
|
||||
DetailedWeaponData(2, 8, 0, List(InternalSlot(111, PlanetSideGUID(9157), 0, DetailedAmmoBoxData(8, 100))))
|
||||
),
|
||||
InternalSlot(714, PlanetSideGUID(8498), 2,
|
||||
DetailedWeaponData(2, 8, 0, List(InternalSlot(755, PlanetSideGUID(5356), 0, DetailedAmmoBoxData(8, 16))))
|
||||
),
|
||||
InternalSlot(468, PlanetSideGUID(7198), 4,
|
||||
DetailedWeaponData(2, 8, 0, List(InternalSlot(540, PlanetSideGUID(5009), 0, DetailedAmmoBoxData(8, 1))))
|
||||
),
|
||||
InternalSlot(456, PlanetSideGUID(5374), 5,
|
||||
DetailedLockerContainerData(8, Some(InventoryData(List(
|
||||
InternalSlot(429, PlanetSideGUID(3021), 0,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(272, PlanetSideGUID(8729), 0, DetailedAmmoBoxData(8, 0))))
|
||||
),
|
||||
InternalSlot(838, PlanetSideGUID(8467), 9,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(839, PlanetSideGUID(8603), 0, DetailedAmmoBoxData(8, 5))))
|
||||
),
|
||||
InternalSlot(272, PlanetSideGUID(3266), 18, DetailedAmmoBoxData(8, 27)),
|
||||
InternalSlot(577, PlanetSideGUID(2934), 22,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(111, PlanetSideGUID(4682), 0, DetailedAmmoBoxData(8, 100))))
|
||||
),
|
||||
InternalSlot(839, PlanetSideGUID(3271), 90, DetailedAmmoBoxData(8, 15)),
|
||||
InternalSlot(839, PlanetSideGUID(7174), 94, DetailedAmmoBoxData(8, 6)),
|
||||
InternalSlot(429, PlanetSideGUID(6084), 98,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(272, PlanetSideGUID(5928), 0, DetailedAmmoBoxData(8, 35))))
|
||||
),
|
||||
InternalSlot(462, PlanetSideGUID(5000), 108,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(463, PlanetSideGUID(6277), 0, DetailedAmmoBoxData(8, 150))))
|
||||
),
|
||||
InternalSlot(429, PlanetSideGUID(4341), 189,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(272, PlanetSideGUID(7043), 0, DetailedAmmoBoxData(8, 35))))
|
||||
),
|
||||
InternalSlot(556, PlanetSideGUID(4168), 198,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(28, PlanetSideGUID(8937), 0, DetailedAmmoBoxData(8, 100))))
|
||||
),
|
||||
InternalSlot(272, PlanetSideGUID(3173), 207, DetailedAmmoBoxData(8, 50)),
|
||||
InternalSlot(462, PlanetSideGUID(3221), 210,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(463, PlanetSideGUID(4031), 0, DetailedAmmoBoxData(8, 150))))
|
||||
),
|
||||
InternalSlot(556, PlanetSideGUID(6853), 280,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(29, PlanetSideGUID(8524), 0, DetailedAmmoBoxData(8, 67))))
|
||||
),
|
||||
InternalSlot(556, PlanetSideGUID(4569), 290,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(28, PlanetSideGUID(5584), 0, DetailedAmmoBoxData(8, 100))))
|
||||
),
|
||||
InternalSlot(462, PlanetSideGUID(9294), 300,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(463, PlanetSideGUID(3118), 0, DetailedAmmoBoxData(8, 150))))
|
||||
),
|
||||
InternalSlot(272, PlanetSideGUID(4759), 387, DetailedAmmoBoxData(8, 50)),
|
||||
InternalSlot(462, PlanetSideGUID(7377), 390,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(463, PlanetSideGUID(8155), 0, DetailedAmmoBoxData(8, 150))))
|
||||
),
|
||||
InternalSlot(843, PlanetSideGUID(6709), 480, DetailedAmmoBoxData(8, 1)),
|
||||
InternalSlot(843, PlanetSideGUID(5276), 484, DetailedAmmoBoxData(8, 1)),
|
||||
InternalSlot(843, PlanetSideGUID(7769), 488, DetailedAmmoBoxData(8, 1)),
|
||||
InternalSlot(844, PlanetSideGUID(5334), 492, DetailedAmmoBoxData(8, 1)),
|
||||
InternalSlot(844, PlanetSideGUID(6219), 496, DetailedAmmoBoxData(8, 1)),
|
||||
InternalSlot(842, PlanetSideGUID(7279), 500, DetailedAmmoBoxData(8, 1)),
|
||||
InternalSlot(842, PlanetSideGUID(5415), 504, DetailedAmmoBoxData(8, 1)),
|
||||
InternalSlot(175, PlanetSideGUID(5741), 540,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(540, PlanetSideGUID(5183), 0, DetailedAmmoBoxData(8, 1))))
|
||||
),
|
||||
InternalSlot(324, PlanetSideGUID(6208), 541,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(540, PlanetSideGUID(5029), 0, DetailedAmmoBoxData(8, 1))))
|
||||
),
|
||||
InternalSlot(324, PlanetSideGUID(8589), 542,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(540, PlanetSideGUID(9217), 0, DetailedAmmoBoxData(8, 1))))
|
||||
),
|
||||
InternalSlot(175, PlanetSideGUID(8901), 543,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(540, PlanetSideGUID(7633), 0, DetailedAmmoBoxData(8, 1))))
|
||||
),
|
||||
InternalSlot(175, PlanetSideGUID(8419), 544,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(540, PlanetSideGUID(6546), 0, DetailedAmmoBoxData(8, 1))))
|
||||
),
|
||||
InternalSlot(175, PlanetSideGUID(4715), 545,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(540, PlanetSideGUID(8453), 0, DetailedAmmoBoxData(8, 1))))
|
||||
),
|
||||
InternalSlot(324, PlanetSideGUID(3577), 546,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(540, PlanetSideGUID(9202), 0, DetailedAmmoBoxData(8, 1))))
|
||||
),
|
||||
InternalSlot(324, PlanetSideGUID(6003), 547,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(540, PlanetSideGUID(3260), 0, DetailedAmmoBoxData(8, 1))))
|
||||
),
|
||||
InternalSlot(324, PlanetSideGUID(9140), 548,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(540,PlanetSideGUID(3815),0,DetailedAmmoBoxData(8, 1))))
|
||||
),
|
||||
InternalSlot(324, PlanetSideGUID(4913), 549,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(540,PlanetSideGUID(7222),0,DetailedAmmoBoxData(8, 1))))
|
||||
),
|
||||
InternalSlot(324, PlanetSideGUID(6954), 550,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(540,PlanetSideGUID(2953),0,DetailedAmmoBoxData(8, 1))))
|
||||
),
|
||||
InternalSlot(324, PlanetSideGUID(6405), 551,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(540,PlanetSideGUID(4676),0,DetailedAmmoBoxData(8, 1))))
|
||||
),
|
||||
InternalSlot(324, PlanetSideGUID(8915), 552,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(540,PlanetSideGUID(4018),0,DetailedAmmoBoxData(8, 1))))
|
||||
),
|
||||
InternalSlot(324, PlanetSideGUID(4993), 553,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(540,PlanetSideGUID(6775),0,DetailedAmmoBoxData(8, 1))))
|
||||
),
|
||||
InternalSlot(175, PlanetSideGUID(5053), 554,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(540,PlanetSideGUID(6418),0,DetailedAmmoBoxData(8, 1))))
|
||||
),
|
||||
InternalSlot(324, PlanetSideGUID(9244), 555,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(540,PlanetSideGUID(3327),0,DetailedAmmoBoxData(8, 1))))
|
||||
),
|
||||
InternalSlot(468, PlanetSideGUID(6292), 556,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(540,PlanetSideGUID(6918),0,DetailedAmmoBoxData(8, 1))))
|
||||
),
|
||||
InternalSlot(842, PlanetSideGUID(5357), 558, DetailedAmmoBoxData(8, 1)),
|
||||
InternalSlot(844, PlanetSideGUID(4435), 562, DetailedAmmoBoxData(8, 1)),
|
||||
InternalSlot(843, PlanetSideGUID(7242), 566, DetailedAmmoBoxData(8, 1)),
|
||||
InternalSlot(175, PlanetSideGUID(7330), 570,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(540, PlanetSideGUID(4786), 0, DetailedAmmoBoxData(8, 1))))
|
||||
),
|
||||
InternalSlot(468, PlanetSideGUID(7415), 571,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(540, PlanetSideGUID(6536), 0, DetailedAmmoBoxData(8, 1))))
|
||||
),
|
||||
InternalSlot(175, PlanetSideGUID(3949), 572,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(540, PlanetSideGUID(7526), 0, DetailedAmmoBoxData(8, 1))))
|
||||
),
|
||||
InternalSlot(175, PlanetSideGUID(3805), 573,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(540, PlanetSideGUID(7358), 0, DetailedAmmoBoxData(8, 1))))
|
||||
),
|
||||
InternalSlot(324, PlanetSideGUID(4493), 574,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(540, PlanetSideGUID(6852), 0, DetailedAmmoBoxData(8, 1))))
|
||||
),
|
||||
InternalSlot(324, PlanetSideGUID(5762), 575,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(540, PlanetSideGUID(3463), 0, DetailedAmmoBoxData(8, 1))))
|
||||
),
|
||||
InternalSlot(175, PlanetSideGUID(3315), 576,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(540, PlanetSideGUID(7619), 0, DetailedAmmoBoxData(8, 1))))
|
||||
),
|
||||
InternalSlot(324, PlanetSideGUID(6263), 577,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(540, PlanetSideGUID(5912), 0, DetailedAmmoBoxData(8, 1))))
|
||||
),
|
||||
InternalSlot(468, PlanetSideGUID(4028), 578,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(540, PlanetSideGUID(8021), 0, DetailedAmmoBoxData(8, 1))))
|
||||
),
|
||||
InternalSlot(175, PlanetSideGUID(2843), 579,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(540, PlanetSideGUID(7250), 0, DetailedAmmoBoxData(8, 1))))
|
||||
),
|
||||
InternalSlot(175, PlanetSideGUID(9143), 580,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(540, PlanetSideGUID(5195), 0, DetailedAmmoBoxData(8, 1))))
|
||||
),
|
||||
InternalSlot(468, PlanetSideGUID(5024), 581,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(540, PlanetSideGUID(4287), 0, DetailedAmmoBoxData(8, 1))))
|
||||
),
|
||||
InternalSlot(468, PlanetSideGUID(6582), 582,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(540, PlanetSideGUID(4915), 0, DetailedAmmoBoxData(8, 1))))
|
||||
),
|
||||
InternalSlot(468, PlanetSideGUID(6425), 583,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(540, PlanetSideGUID(8872), 0, DetailedAmmoBoxData(8, 1))))
|
||||
),
|
||||
InternalSlot(468, PlanetSideGUID(4431), 584,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(540, PlanetSideGUID(4191), 0, DetailedAmmoBoxData(8, 1))))
|
||||
),
|
||||
InternalSlot(175, PlanetSideGUID(8339), 585,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(540, PlanetSideGUID(7317), 0, DetailedAmmoBoxData(8, 1))))
|
||||
),
|
||||
InternalSlot(175, PlanetSideGUID(3277), 586,
|
||||
DetailedWeaponData(6, 8, 0, List(InternalSlot(540, PlanetSideGUID(6469), 0, DetailedAmmoBoxData(8, 1))))
|
||||
)
|
||||
))))
|
||||
),
|
||||
InternalSlot(213, PlanetSideGUID(6877), 6, DetailedCommandDetonaterData(4, 8)),
|
||||
InternalSlot(755, PlanetSideGUID(6227), 9, DetailedAmmoBoxData(8, 16)),
|
||||
InternalSlot(728, PlanetSideGUID(7181), 12, DetailedREKData(4, 16)),
|
||||
InternalSlot(536, PlanetSideGUID(4077), 33, DetailedAmmoBoxData(8, 1)),
|
||||
InternalSlot(680, PlanetSideGUID(4377), 37,
|
||||
DetailedWeaponData(2, 8, 0, List(InternalSlot(681, PlanetSideGUID(8905), 0, DetailedAmmoBoxData(8, 3))))
|
||||
),
|
||||
InternalSlot(32, PlanetSideGUID(5523), 39, DetailedACEData(4)),
|
||||
InternalSlot(673, PlanetSideGUID(3661), 60,
|
||||
DetailedWeaponData(2, 8, 0, List(InternalSlot(674, PlanetSideGUID(8542), 0, DetailedAmmoBoxData(8, 3))))
|
||||
)
|
||||
)
|
||||
)
|
||||
val obj = DetailedPlayerData(pos, app, char, inv, DrawnSlot.None)
|
||||
|
||||
val msg = ObjectCreateDetailedMessage(ObjectClass.avatar, PlanetSideGUID(75), obj)
|
||||
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
|
||||
|
||||
val pkt_bitv = pkt.toBitVector
|
||||
val ori_bitv = string_testchar_br32.toBitVector
|
||||
pkt_bitv.take(153) mustEqual ori_bitv.take(153) //skip 1
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue