changed fields and case class names to reflect purpose; added entries to ObjectClass as needed; made PropertyOverrideMessage encoding much less verbose

This commit is contained in:
FateJH 2017-08-09 09:23:16 -04:00
parent 25952d12dc
commit 86b08390b0
3 changed files with 281 additions and 263 deletions

View file

@ -6,49 +6,52 @@ import scodec.Codec
import scodec.codecs._
import shapeless.{::, HNil}
final case class PropertyOverrideMessage(list : List[PropertyOverrideMessage.GameProperty])
final case class PropertyOverrideMessage(list : List[PropertyOverrideMessage.GamePropertyScope])
extends PlanetSideGamePacket {
type Packet = PropertyOverrideMessage
def opcode = GamePacketOpcode.PropertyOverrideMessage
def encode = PropertyOverrideMessage.encode(this)
}
object GamePropertyValues {
def apply(field1 : String) : PropertyOverrideMessage.GamePropertyValues = {
PropertyOverrideMessage.GamePropertyValues(field1, "")
object GamePropertyTarget {
final val game_properties : Int = 343
def apply(target : Int) : PropertyOverrideMessage.GamePropertyTarget = {
PropertyOverrideMessage.GamePropertyTarget(target, Nil)
}
def apply(field1 : String, field2 : String) : PropertyOverrideMessage.GamePropertyValues = {
PropertyOverrideMessage.GamePropertyValues(field1, field2)
def apply(target : Int, kv : (String, String)) : PropertyOverrideMessage.GamePropertyTarget = {
PropertyOverrideMessage.GamePropertyTarget(target, PropertyOverrideMessage.GamePropertyValues(kv._1, kv._2) :: Nil)
}
def apply(target : Int, list : List[(String, String)]) : PropertyOverrideMessage.GamePropertyTarget = {
PropertyOverrideMessage.GamePropertyTarget(target, list.map({
case(key, value) =>
PropertyOverrideMessage.GamePropertyValues(key, value)
}))
}
}
object GamePropertyField {
def apply(unk : Int) : PropertyOverrideMessage.GamePropertyField = {
PropertyOverrideMessage.GamePropertyField(unk, Nil)
object GamePropertyScope {
def apply(zone : Int, list : PropertyOverrideMessage.GamePropertyTarget) : PropertyOverrideMessage.GamePropertyScope = {
PropertyOverrideMessage.GamePropertyScope(zone, list :: Nil)
}
def apply(unk : Int, list : List[PropertyOverrideMessage.GamePropertyValues]) : PropertyOverrideMessage.GamePropertyField = {
PropertyOverrideMessage.GamePropertyField(unk, list)
}
}
object GameProperty {
def apply(unk : Int) : PropertyOverrideMessage.GameProperty = {
PropertyOverrideMessage.GameProperty(unk, Nil)
}
def apply(unk : Int, list : List[PropertyOverrideMessage.GamePropertyField]) : PropertyOverrideMessage.GameProperty = {
PropertyOverrideMessage.GameProperty(unk, list)
def apply(zone : Int, list : List[PropertyOverrideMessage.GamePropertyTarget]) : PropertyOverrideMessage.GamePropertyScope = {
PropertyOverrideMessage.GamePropertyScope(zone, list)
}
}
object PropertyOverrideMessage extends Marshallable[PropertyOverrideMessage] {
final case class GamePropertyValues(field1 : String, field2 : String)
final case class GamePropertyField(unk : Int, list : List[GamePropertyValues])
final case class GamePropertyTarget(target : Int, list : List[GamePropertyValues])
final case class GameProperty(unk : Int, list : List[GamePropertyField])
final case class GamePropertyScope(zone : Int, list : List[GamePropertyTarget])
def apply(list : PropertyOverrideMessage.GamePropertyScope) : PropertyOverrideMessage = {
PropertyOverrideMessage(list :: Nil)
}
private def value_pair_aligned_codec(n : Int) : Codec[GamePropertyValues] = (
("field1" | PacketHelpers.encodedStringAligned(n)) ::
@ -60,56 +63,56 @@ object PropertyOverrideMessage extends Marshallable[PropertyOverrideMessage] {
("field2" | PacketHelpers.encodedString)
).as[GamePropertyValues]
private def game_subproperty_codec(n : Int) : Codec[GamePropertyField] = (
("unk" | uintL(11)) ::
(("len" | uint16L) >>:~ { len =>
private def game_property_target_codec(n : Int) : Codec[GamePropertyTarget] = (
("target" | uintL(11)) ::
(uint16L >>:~ { len =>
conditional(len > 0, value_pair_aligned_codec(n)) ::
conditional(len > 1, PacketHelpers.listOfNSized((len - 1).toLong, value_pair_codec))
})
).xmap[GamePropertyField] (
).xmap[GamePropertyTarget] (
{
case unk :: _ :: Some(first) :: None :: HNil =>
GamePropertyField(unk, first :: Nil)
case target :: _ :: Some(first) :: None :: HNil =>
GamePropertyTarget(target, first :: Nil)
case unk :: _ :: Some(first) :: Some(other) :: HNil =>
GamePropertyField(unk, first +: other)
case target :: _ :: Some(first) :: Some(other) :: HNil =>
GamePropertyTarget(target, first +: other)
},
{
case GamePropertyField(unk, list) =>
case GamePropertyTarget(target, list) =>
val (first, other) = list match {
case ((f : GamePropertyValues) +: (rest : List[GamePropertyValues])) => (Some(f), Some(rest))
case (f : GamePropertyValues) +: Nil => (Some(f), None)
case Nil => (None, None)
}
unk :: list.length :: first :: other :: HNil
target :: list.length :: first :: other :: HNil
}
)
private val game_property_codec : Codec[GameProperty] = (
("unk" | uint16L) ::
(("len" | uintL(11)) >>:~ { len =>
conditional(len > 0, game_subproperty_codec(2)) ::
conditional(len > 1, PacketHelpers.listOfNSized((len - 1).toLong, game_subproperty_codec(5)))
private val game_property_scope_codec : Codec[GamePropertyScope] = (
("zone" | uint16L) ::
(uintL(11) >>:~ { len =>
conditional(len > 0, game_property_target_codec(2)) ::
conditional(len > 1, PacketHelpers.listOfNSized((len - 1).toLong, game_property_target_codec(5)))
})
).xmap[GameProperty] (
).xmap[GamePropertyScope] (
{
case unk :: _ :: Some(first) :: None :: HNil =>
GameProperty(unk, first :: Nil)
case zone :: _ :: Some(first) :: None :: HNil =>
GamePropertyScope(zone, first :: Nil)
case unk :: _ :: Some(first) :: Some(other) :: HNil =>
GameProperty(unk, first +: other)
case zone :: _ :: Some(first) :: Some(other) :: HNil =>
GamePropertyScope(zone, first +: other)
},
{
case GameProperty(unk, list) =>
case GamePropertyScope(zone, list) =>
val (first, other) = list match {
case ((f : GamePropertyField) +: (rest : List[GamePropertyField])) => (Some(f), Some(rest))
case (f : GamePropertyField) +: Nil => (Some(f), None)
case ((f : GamePropertyTarget) +: (rest : List[GamePropertyTarget])) => (Some(f), Some(rest))
case (f : GamePropertyTarget) +: Nil => (Some(f), None)
case Nil => (None, None)
}
unk :: list.length :: first :: other :: HNil
zone :: list.length :: first :: other :: HNil
}
)
implicit val codec : Codec[PropertyOverrideMessage] =
listOfN(uint16L, game_property_codec).as[PropertyOverrideMessage]
listOfN(uint16L, game_property_scope_codec).as[PropertyOverrideMessage]
}

View file

@ -304,15 +304,27 @@ object ObjectClass {
final val ams_destroyed = 47
final val ant = 60
final val ant_destroyed = 61
final val aphelion_flight = 83
final val aphelion_gunner = 84
final val aurora = 118
final val battlewagon = 135 //raider
final val colossus_flight = 199
final val colossus_gunner = 200
final val droppod = 258
final val flail = 294
final val fury = 335
final val galaxy_gunship = 338
final val liberator = 432
final val lightgunship = 441
final val lightning = 446
final val lightning_destroyed = 447
final val magrider = 470
final val mediumtransport = 532
final val mediumtransport_destroyed = 533
final val orbital_shuttle = 608
final val peregrine_flight = 642
final val peregrine_gunner = 643
final val prowler = 697
final val quadassault = 707
final val quadassault_destroyed = 708
final val quadstealth = 710
@ -328,6 +340,8 @@ object ObjectClass {
final val twomanheavybuggy_destroyed = 899
final val twomanhoverbuggy = 900 //thresher
final val twomanhoverbuggy_destroyed = 901
final val vanguard = 923
final val vulture = 986
//other
final val ams_respawn_tube = 49
final val avatar = 121

View file

@ -3,7 +3,8 @@ package game
import org.specs2.mutable._
import net.psforever.packet._
import net.psforever.packet.game.{GamePropertyField, _}
import net.psforever.packet.game._
import net.psforever.packet.game.objectcreate.ObjectClass
import scodec.bits._
class PropertyOverrideMessageTest extends Specification {
@ -14,9 +15,9 @@ class PropertyOverrideMessageTest extends Specification {
case PropertyOverrideMessage(list) =>
list.length mustEqual 11
//
list.head.unk mustEqual 0
list.head.zone mustEqual 0
list.head.list.length mustEqual 1
list.head.list.head.unk mustEqual 343
list.head.list.head.target mustEqual 343
list.head.list.head.list.length mustEqual 3
list.head.list.head.list.head.field1 mustEqual "purchase_exempt_vs"
list.head.list.head.list.head.field2 mustEqual ""
@ -25,392 +26,392 @@ class PropertyOverrideMessageTest extends Specification {
list.head.list.head.list(2).field1 mustEqual "purchase_exempt_nc"
list.head.list.head.list(2).field2 mustEqual ""
//
list(1).unk mustEqual 17
list(1).zone mustEqual 17
list(1).list.length mustEqual 1
list(1).list.head.unk mustEqual 421
list(1).list.head.target mustEqual 421
list(1).list.head.list.length mustEqual 1
list(1).list.head.list.head.field1 mustEqual "allowed"
list(1).list.head.list.head.field2 mustEqual "false"
//
list(2).unk mustEqual 18
list(2).zone mustEqual 18
list(2).list.length mustEqual 1
list(2).list.head.unk mustEqual 421
list(2).list.head.target mustEqual 421
list(2).list.head.list.length mustEqual 1
list(2).list.head.list.head.field1 mustEqual "allowed"
list(2).list.head.list.head.field2 mustEqual "false"
//
list(3).unk mustEqual 19
list(3).zone mustEqual 19
list(3).list.length mustEqual 1
list(3).list.head.unk mustEqual 421
list(3).list.head.target mustEqual 421
list(3).list.head.list.length mustEqual 1
list(3).list.head.list.head.field1 mustEqual "allowed"
list(3).list.head.list.head.field2 mustEqual "false"
//
list(4).unk mustEqual 20
list(4).zone mustEqual 20
list(4).list.length mustEqual 1
list(4).list.head.unk mustEqual 421
list(4).list.head.target mustEqual 421
list(4).list.head.list.length mustEqual 1
list(4).list.head.list.head.field1 mustEqual "allowed"
list(4).list.head.list.head.field2 mustEqual "false"
//
list(5).unk mustEqual 21
list(5).zone mustEqual 21
list(5).list.length mustEqual 1
list(5).list.head.unk mustEqual 421
list(5).list.head.target mustEqual 421
list(5).list.head.list.length mustEqual 1
list(5).list.head.list.head.field1 mustEqual "allowed"
list(5).list.head.list.head.field2 mustEqual "false"
//
list(6).unk mustEqual 22
list(6).zone mustEqual 22
list(6).list.length mustEqual 1
list(6).list.head.unk mustEqual 421
list(6).list.head.target mustEqual 421
list(6).list.head.list.length mustEqual 1
list(6).list.head.list.head.field1 mustEqual "allowed"
list(6).list.head.list.head.field2 mustEqual "false"
//
list(7).unk mustEqual 29
list(7).zone mustEqual 29
list(7).list.length mustEqual 21
list(7).list.head.unk mustEqual 83
list(7).list.head.target mustEqual 83
list(7).list.head.list.length mustEqual 1
list(7).list.head.list.head.field1 mustEqual "allowed"
list(7).list.head.list.head.field2 mustEqual "false"
list(7).list(1).unk mustEqual 84
list(7).list(1).target mustEqual 84
list(7).list(1).list.length mustEqual 1
list(7).list(1).list.head.field1 mustEqual "allowed"
list(7).list(1).list.head.field2 mustEqual "false"
list(7).list(2).unk mustEqual 118
list(7).list(2).target mustEqual 118
list(7).list(2).list.length mustEqual 1
list(7).list(2).list.head.field1 mustEqual "allowed"
list(7).list(2).list.head.field2 mustEqual "false"
list(7).list(3).unk mustEqual 135
list(7).list(3).target mustEqual 135
list(7).list(3).list.length mustEqual 1
list(7).list(3).list.head.field1 mustEqual "allowed"
list(7).list(3).list.head.field2 mustEqual "false"
list(7).list(4).unk mustEqual 199
list(7).list(4).target mustEqual 199
list(7).list(4).list.length mustEqual 1
list(7).list(4).list.head.field1 mustEqual "allowed"
list(7).list(4).list.head.field2 mustEqual "false"
list(7).list(5).unk mustEqual 200
list(7).list(5).target mustEqual 200
list(7).list(5).list.length mustEqual 1
list(7).list(5).list.head.field1 mustEqual "allowed"
list(7).list(5).list.head.field2 mustEqual "false"
list(7).list(6).unk mustEqual 294
list(7).list(6).target mustEqual 294
list(7).list(6).list.length mustEqual 1
list(7).list(6).list.head.field1 mustEqual "allowed"
list(7).list(6).list.head.field2 mustEqual "false"
list(7).list(7).unk mustEqual 338
list(7).list(7).target mustEqual 338
list(7).list(7).list.length mustEqual 1
list(7).list(7).list.head.field1 mustEqual "allowed"
list(7).list(7).list.head.field2 mustEqual "false"
list(7).list(8).unk mustEqual 429
list(7).list(8).target mustEqual 429
list(7).list(8).list.length mustEqual 1
list(7).list(8).list.head.field1 mustEqual "allowed"
list(7).list(8).list.head.field2 mustEqual "false"
list(7).list(9).unk mustEqual 432
list(7).list(9).target mustEqual 432
list(7).list(9).list.length mustEqual 1
list(7).list(9).list.head.field1 mustEqual "allowed"
list(7).list(9).list.head.field2 mustEqual "false"
list(7).list(10).unk mustEqual 441
list(7).list(10).target mustEqual 441
list(7).list(10).list.length mustEqual 1
list(7).list(10).list.head.field1 mustEqual "allowed"
list(7).list(10).list.head.field2 mustEqual "false"
list(7).list(11).unk mustEqual 462
list(7).list(11).target mustEqual 462
list(7).list(11).list.length mustEqual 1
list(7).list(11).list.head.field1 mustEqual "allowed"
list(7).list(11).list.head.field2 mustEqual "false"
list(7).list(12).unk mustEqual 470
list(7).list(12).target mustEqual 470
list(7).list(12).list.length mustEqual 1
list(7).list(12).list.head.field1 mustEqual "allowed"
list(7).list(12).list.head.field2 mustEqual "false"
list(7).list(13).unk mustEqual 556
list(7).list(13).target mustEqual 556
list(7).list(13).list.length mustEqual 1
list(7).list(13).list.head.field1 mustEqual "allowed"
list(7).list(13).list.head.field2 mustEqual "false"
list(7).list(14).unk mustEqual 642
list(7).list(14).target mustEqual 642
list(7).list(14).list.length mustEqual 1
list(7).list(14).list.head.field1 mustEqual "allowed"
list(7).list(14).list.head.field2 mustEqual "false"
list(7).list(15).unk mustEqual 643
list(7).list(15).target mustEqual 643
list(7).list(15).list.length mustEqual 1
list(7).list(15).list.head.field1 mustEqual "allowed"
list(7).list(15).list.head.field2 mustEqual "false"
list(7).list(16).unk mustEqual 697
list(7).list(16).target mustEqual 697
list(7).list(16).list.length mustEqual 1
list(7).list(16).list.head.field1 mustEqual "allowed"
list(7).list(16).list.head.field2 mustEqual "false"
list(7).list(17).unk mustEqual 714
list(7).list(17).target mustEqual 714
list(7).list(17).list.length mustEqual 1
list(7).list(17).list.head.field1 mustEqual "allowed"
list(7).list(17).list.head.field2 mustEqual "false"
list(7).list(18).unk mustEqual 865
list(7).list(18).target mustEqual 865
list(7).list(18).list.length mustEqual 1
list(7).list(18).list.head.field1 mustEqual "allowed"
list(7).list(18).list.head.field2 mustEqual "false"
list(7).list(19).unk mustEqual 923
list(7).list(19).target mustEqual 923
list(7).list(19).list.length mustEqual 1
list(7).list(19).list.head.field1 mustEqual "allowed"
list(7).list(19).list.head.field2 mustEqual "false"
list(7).list(20).unk mustEqual 986
list(7).list(20).target mustEqual 986
list(7).list(20).list.length mustEqual 1
list(7).list(20).list.head.field1 mustEqual "allowed"
list(7).list(20).list.head.field2 mustEqual "false"
//
list(8).unk mustEqual 30
list(8).zone mustEqual 30
list(8).list.length mustEqual 21
list(7).list.head.unk mustEqual 83
list(7).list.head.target mustEqual 83
list(8).list.head.list.length mustEqual 1
list(8).list.head.list.head.field1 mustEqual "allowed"
list(8).list.head.list.head.field2 mustEqual "false"
list(8).list(1).unk mustEqual 84
list(8).list(1).target mustEqual 84
list(8).list(1).list.length mustEqual 1
list(8).list(1).list.head.field1 mustEqual "allowed"
list(8).list(1).list.head.field2 mustEqual "false"
list(8).list(2).unk mustEqual 118
list(8).list(2).target mustEqual 118
list(8).list(2).list.length mustEqual 1
list(8).list(2).list.head.field1 mustEqual "allowed"
list(8).list(2).list.head.field2 mustEqual "false"
list(8).list(3).unk mustEqual 135
list(8).list(3).target mustEqual 135
list(8).list(3).list.length mustEqual 1
list(8).list(3).list.head.field1 mustEqual "allowed"
list(8).list(3).list.head.field2 mustEqual "false"
list(8).list(4).unk mustEqual 199
list(8).list(4).target mustEqual 199
list(8).list(4).list.length mustEqual 1
list(8).list(4).list.head.field1 mustEqual "allowed"
list(8).list(4).list.head.field2 mustEqual "false"
list(8).list(5).unk mustEqual 200
list(8).list(5).target mustEqual 200
list(8).list(5).list.length mustEqual 1
list(8).list(5).list.head.field1 mustEqual "allowed"
list(8).list(5).list.head.field2 mustEqual "false"
list(8).list(6).unk mustEqual 294
list(8).list(6).target mustEqual 294
list(8).list(6).list.length mustEqual 1
list(8).list(6).list.head.field1 mustEqual "allowed"
list(8).list(6).list.head.field2 mustEqual "false"
list(8).list(7).unk mustEqual 338
list(8).list(7).target mustEqual 338
list(8).list(7).list.length mustEqual 1
list(8).list(7).list.head.field1 mustEqual "allowed"
list(8).list(7).list.head.field2 mustEqual "false"
list(8).list(8).unk mustEqual 429
list(8).list(8).target mustEqual 429
list(8).list(8).list.length mustEqual 1
list(8).list(8).list.head.field1 mustEqual "allowed"
list(8).list(8).list.head.field2 mustEqual "false"
list(8).list(9).unk mustEqual 432
list(8).list(9).target mustEqual 432
list(8).list(9).list.length mustEqual 1
list(8).list(9).list.head.field1 mustEqual "allowed"
list(8).list(9).list.head.field2 mustEqual "false"
list(8).list(10).unk mustEqual 441
list(8).list(10).target mustEqual 441
list(8).list(10).list.length mustEqual 1
list(8).list(10).list.head.field1 mustEqual "allowed"
list(8).list(10).list.head.field2 mustEqual "false"
list(8).list(11).unk mustEqual 462
list(8).list(11).target mustEqual 462
list(8).list(11).list.length mustEqual 1
list(8).list(11).list.head.field1 mustEqual "allowed"
list(8).list(11).list.head.field2 mustEqual "false"
list(8).list(12).unk mustEqual 470
list(8).list(12).target mustEqual 470
list(8).list(12).list.length mustEqual 1
list(8).list(12).list.head.field1 mustEqual "allowed"
list(8).list(12).list.head.field2 mustEqual "false"
list(8).list(13).unk mustEqual 556
list(8).list(13).target mustEqual 556
list(8).list(13).list.length mustEqual 1
list(8).list(13).list.head.field1 mustEqual "allowed"
list(8).list(13).list.head.field2 mustEqual "false"
list(8).list(14).unk mustEqual 642
list(8).list(14).target mustEqual 642
list(8).list(14).list.length mustEqual 1
list(8).list(14).list.head.field1 mustEqual "allowed"
list(8).list(14).list.head.field2 mustEqual "false"
list(8).list(15).unk mustEqual 643
list(8).list(15).target mustEqual 643
list(8).list(15).list.length mustEqual 1
list(8).list(15).list.head.field1 mustEqual "allowed"
list(8).list(15).list.head.field2 mustEqual "false"
list(8).list(16).unk mustEqual 697
list(8).list(16).target mustEqual 697
list(8).list(16).list.length mustEqual 1
list(8).list(16).list.head.field1 mustEqual "allowed"
list(8).list(16).list.head.field2 mustEqual "false"
list(8).list(17).unk mustEqual 714
list(8).list(17).target mustEqual 714
list(8).list(17).list.length mustEqual 1
list(8).list(17).list.head.field1 mustEqual "allowed"
list(8).list(17).list.head.field2 mustEqual "false"
list(8).list(18).unk mustEqual 865
list(8).list(18).target mustEqual 865
list(8).list(18).list.length mustEqual 1
list(8).list(18).list.head.field1 mustEqual "allowed"
list(8).list(18).list.head.field2 mustEqual "false"
list(8).list(19).unk mustEqual 923
list(8).list(19).target mustEqual 923
list(8).list(19).list.length mustEqual 1
list(8).list(19).list.head.field1 mustEqual "allowed"
list(8).list(19).list.head.field2 mustEqual "false"
list(8).list(20).unk mustEqual 986
list(8).list(20).target mustEqual 986
list(8).list(20).list.length mustEqual 1
list(8).list(20).list.head.field1 mustEqual "allowed"
list(8).list(20).list.head.field2 mustEqual "false"
//
list(9).unk mustEqual 31
list(9).zone mustEqual 31
list(9).list.length mustEqual 21
list(9).list.head.unk mustEqual 83
list(9).list.head.target mustEqual 83
list(9).list.head.list.length mustEqual 1
list(9).list.head.list.head.field1 mustEqual "allowed"
list(9).list.head.list.head.field2 mustEqual "false"
list(9).list(1).unk mustEqual 84
list(9).list(1).target mustEqual 84
list(9).list(1).list.length mustEqual 1
list(9).list(1).list.head.field1 mustEqual "allowed"
list(9).list(1).list.head.field2 mustEqual "false"
list(9).list(2).unk mustEqual 118
list(9).list(2).target mustEqual 118
list(9).list(2).list.length mustEqual 1
list(9).list(2).list.head.field1 mustEqual "allowed"
list(9).list(2).list.head.field2 mustEqual "false"
list(9).list(3).unk mustEqual 135
list(9).list(3).target mustEqual 135
list(9).list(3).list.length mustEqual 1
list(9).list(3).list.head.field1 mustEqual "allowed"
list(9).list(3).list.head.field2 mustEqual "false"
list(9).list(4).unk mustEqual 199
list(9).list(4).target mustEqual 199
list(9).list(4).list.length mustEqual 1
list(9).list(4).list.head.field1 mustEqual "allowed"
list(9).list(4).list.head.field2 mustEqual "false"
list(9).list(5).unk mustEqual 200
list(9).list(5).target mustEqual 200
list(9).list(5).list.length mustEqual 1
list(9).list(5).list.head.field1 mustEqual "allowed"
list(9).list(5).list.head.field2 mustEqual "false"
list(9).list(6).unk mustEqual 294
list(9).list(6).target mustEqual 294
list(9).list(6).list.length mustEqual 1
list(9).list(6).list.head.field1 mustEqual "allowed"
list(9).list(6).list.head.field2 mustEqual "false"
list(9).list(7).unk mustEqual 338
list(9).list(7).target mustEqual 338
list(9).list(7).list.length mustEqual 1
list(9).list(7).list.head.field1 mustEqual "allowed"
list(9).list(7).list.head.field2 mustEqual "false"
list(9).list(8).unk mustEqual 429
list(9).list(8).target mustEqual 429
list(9).list(8).list.length mustEqual 1
list(9).list(8).list.head.field1 mustEqual "allowed"
list(9).list(8).list.head.field2 mustEqual "false"
list(9).list(9).unk mustEqual 432
list(9).list(9).target mustEqual 432
list(9).list(9).list.length mustEqual 1
list(9).list(9).list.head.field1 mustEqual "allowed"
list(9).list(9).list.head.field2 mustEqual "false"
list(9).list(10).unk mustEqual 441
list(9).list(10).target mustEqual 441
list(9).list(10).list.length mustEqual 1
list(9).list(10).list.head.field1 mustEqual "allowed"
list(9).list(10).list.head.field2 mustEqual "false"
list(9).list(11).unk mustEqual 462
list(9).list(11).target mustEqual 462
list(9).list(11).list.length mustEqual 1
list(9).list(11).list.head.field1 mustEqual "allowed"
list(9).list(11).list.head.field2 mustEqual "false"
list(9).list(12).unk mustEqual 470
list(9).list(12).target mustEqual 470
list(9).list(12).list.length mustEqual 1
list(9).list(12).list.head.field1 mustEqual "allowed"
list(9).list(12).list.head.field2 mustEqual "false"
list(9).list(13).unk mustEqual 556
list(9).list(13).target mustEqual 556
list(9).list(13).list.length mustEqual 1
list(9).list(13).list.head.field1 mustEqual "allowed"
list(9).list(13).list.head.field2 mustEqual "false"
list(9).list(14).unk mustEqual 642
list(9).list(14).target mustEqual 642
list(9).list(14).list.length mustEqual 1
list(9).list(14).list.head.field1 mustEqual "allowed"
list(9).list(14).list.head.field2 mustEqual "false"
list(9).list(15).unk mustEqual 643
list(9).list(15).target mustEqual 643
list(9).list(15).list.length mustEqual 1
list(9).list(15).list.head.field1 mustEqual "allowed"
list(9).list(15).list.head.field2 mustEqual "false"
list(9).list(16).unk mustEqual 697
list(9).list(16).target mustEqual 697
list(9).list(16).list.length mustEqual 1
list(9).list(16).list.head.field1 mustEqual "allowed"
list(9).list(16).list.head.field2 mustEqual "false"
list(9).list(17).unk mustEqual 714
list(9).list(17).target mustEqual 714
list(9).list(17).list.length mustEqual 1
list(9).list(17).list.head.field1 mustEqual "allowed"
list(9).list(17).list.head.field2 mustEqual "false"
list(9).list(18).unk mustEqual 865
list(9).list(18).target mustEqual 865
list(9).list(18).list.length mustEqual 1
list(9).list(18).list.head.field1 mustEqual "allowed"
list(9).list(18).list.head.field2 mustEqual "false"
list(9).list(19).unk mustEqual 923
list(9).list(19).target mustEqual 923
list(9).list(19).list.length mustEqual 1
list(9).list(19).list.head.field1 mustEqual "allowed"
list(9).list(19).list.head.field2 mustEqual "false"
list(9).list(20).unk mustEqual 986
list(9).list(20).target mustEqual 986
list(9).list(20).list.length mustEqual 1
list(9).list(20).list.head.field1 mustEqual "allowed"
list(9).list(20).list.head.field2 mustEqual "false"
//
list(10).unk mustEqual 32
list(10).zone mustEqual 32
list(10).list.length mustEqual 21
list(10).list.head.unk mustEqual 83
list(10).list.head.target mustEqual 83
list(10).list.head.list.length mustEqual 1
list(10).list.head.list.head.field1 mustEqual "allowed"
list(10).list.head.list.head.field2 mustEqual "false"
list(10).list(1).unk mustEqual 84
list(10).list(1).target mustEqual 84
list(10).list(1).list.length mustEqual 1
list(10).list(1).list.head.field1 mustEqual "allowed"
list(10).list(1).list.head.field2 mustEqual "false"
list(10).list(2).unk mustEqual 118
list(10).list(2).target mustEqual 118
list(10).list(2).list.length mustEqual 1
list(10).list(2).list.head.field1 mustEqual "allowed"
list(10).list(2).list.head.field2 mustEqual "false"
list(10).list(3).unk mustEqual 135
list(10).list(3).target mustEqual 135
list(10).list(3).list.length mustEqual 1
list(10).list(3).list.head.field1 mustEqual "allowed"
list(10).list(3).list.head.field2 mustEqual "false"
list(10).list(4).unk mustEqual 199
list(10).list(4).target mustEqual 199
list(10).list(4).list.length mustEqual 1
list(10).list(4).list.head.field1 mustEqual "allowed"
list(10).list(4).list.head.field2 mustEqual "false"
list(10).list(5).unk mustEqual 200
list(10).list(5).target mustEqual 200
list(10).list(5).list.length mustEqual 1
list(10).list(5).list.head.field1 mustEqual "allowed"
list(10).list(5).list.head.field2 mustEqual "false"
list(10).list(6).unk mustEqual 294
list(10).list(6).target mustEqual 294
list(10).list(6).list.length mustEqual 1
list(10).list(6).list.head.field1 mustEqual "allowed"
list(10).list(6).list.head.field2 mustEqual "false"
list(10).list(7).unk mustEqual 338
list(10).list(7).target mustEqual 338
list(10).list(7).list.length mustEqual 1
list(10).list(7).list.head.field1 mustEqual "allowed"
list(10).list(7).list.head.field2 mustEqual "false"
list(10).list(8).unk mustEqual 429
list(10).list(8).target mustEqual 429
list(10).list(8).list.length mustEqual 1
list(10).list(8).list.head.field1 mustEqual "allowed"
list(10).list(8).list.head.field2 mustEqual "false"
list(10).list(9).unk mustEqual 432
list(10).list(9).target mustEqual 432
list(10).list(9).list.length mustEqual 1
list(10).list(9).list.head.field1 mustEqual "allowed"
list(10).list(9).list.head.field2 mustEqual "false"
list(10).list(10).unk mustEqual 441
list(10).list(10).target mustEqual 441
list(10).list(10).list.length mustEqual 1
list(10).list(10).list.head.field1 mustEqual "allowed"
list(10).list(10).list.head.field2 mustEqual "false"
list(10).list(11).unk mustEqual 462
list(10).list(11).target mustEqual 462
list(10).list(11).list.length mustEqual 1
list(10).list(11).list.head.field1 mustEqual "allowed"
list(10).list(11).list.head.field2 mustEqual "false"
list(10).list(12).unk mustEqual 470
list(10).list(12).target mustEqual 470
list(10).list(12).list.length mustEqual 1
list(10).list(12).list.head.field1 mustEqual "allowed"
list(10).list(12).list.head.field2 mustEqual "false"
list(10).list(13).unk mustEqual 556
list(10).list(13).target mustEqual 556
list(10).list(13).list.length mustEqual 1
list(10).list(13).list.head.field1 mustEqual "allowed"
list(10).list(13).list.head.field2 mustEqual "false"
list(10).list(14).unk mustEqual 642
list(10).list(14).target mustEqual 642
list(10).list(14).list.length mustEqual 1
list(10).list(14).list.head.field1 mustEqual "allowed"
list(10).list(14).list.head.field2 mustEqual "false"
list(10).list(15).unk mustEqual 643
list(10).list(15).target mustEqual 643
list(10).list(15).list.length mustEqual 1
list(10).list(15).list.head.field1 mustEqual "allowed"
list(10).list(15).list.head.field2 mustEqual "false"
list(10).list(16).unk mustEqual 697
list(10).list(16).target mustEqual 697
list(10).list(16).list.length mustEqual 1
list(10).list(16).list.head.field1 mustEqual "allowed"
list(10).list(16).list.head.field2 mustEqual "false"
list(10).list(17).unk mustEqual 714
list(10).list(17).target mustEqual 714
list(10).list(17).list.length mustEqual 1
list(10).list(17).list.head.field1 mustEqual "allowed"
list(10).list(17).list.head.field2 mustEqual "false"
list(10).list(18).unk mustEqual 865
list(10).list(18).target mustEqual 865
list(10).list(18).list.length mustEqual 1
list(10).list(18).list.head.field1 mustEqual "allowed"
list(10).list(18).list.head.field2 mustEqual "false"
list(10).list(19).unk mustEqual 923
list(10).list(19).target mustEqual 923
list(10).list(19).list.length mustEqual 1
list(10).list(19).list.head.field1 mustEqual "allowed"
list(10).list(19).list.head.field2 mustEqual "false"
list(10).list(20).unk mustEqual 986
list(10).list(20).target mustEqual 986
list(10).list(20).list.length mustEqual 1
list(10).list(20).list.head.field1 mustEqual "allowed"
list(10).list(20).list.head.field2 mustEqual "false"
@ -422,122 +423,122 @@ class PropertyOverrideMessageTest extends Specification {
"encode" in {
val msg = PropertyOverrideMessage(
List(
GameProperty(0, List(
GamePropertyField(343, List(
GamePropertyValues("purchase_exempt_vs", ""),
GamePropertyValues("purchase_exempt_tr", ""),
GamePropertyValues("purchase_exempt_nc", "")
))
GamePropertyScope(0,
GamePropertyTarget(GamePropertyTarget.game_properties, List(
"purchase_exempt_vs" -> "",
"purchase_exempt_tr" -> "",
"purchase_exempt_nc" -> ""
)
)),
GameProperty(17, List(
GamePropertyField(421, List(GamePropertyValues("allowed", "false")))
GamePropertyScope(17,
GamePropertyTarget(ObjectClass.katana, "allowed" -> "false")
),
GamePropertyScope(18,
GamePropertyTarget(ObjectClass.katana, "allowed" -> "false")
),
GamePropertyScope(19,
GamePropertyTarget(ObjectClass.katana, "allowed" -> "false")
),
GamePropertyScope(20,
GamePropertyTarget(ObjectClass.katana, "allowed" -> "false")
),
GamePropertyScope(21,
GamePropertyTarget(ObjectClass.katana, "allowed" -> "false")
),
GamePropertyScope(22,
GamePropertyTarget(ObjectClass.katana, "allowed" -> "false")
),
GamePropertyScope(29, List(
GamePropertyTarget(ObjectClass.aphelion_flight, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.aphelion_gunner, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.aurora, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.battlewagon, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.colossus_flight, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.colossus_gunner, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.flail, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.galaxy_gunship, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.lasher, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.liberator, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.lightgunship, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.maelstrom, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.magrider, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.mini_chaingun, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.peregrine_flight, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.peregrine_gunner, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.prowler, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.r_shotgun, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.thunderer, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.vanguard, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.vulture, "allowed" -> "false")
)),
GameProperty(18, List(
GamePropertyField(421, List(GamePropertyValues("allowed", "false")))
GamePropertyScope(30, List(
GamePropertyTarget(ObjectClass.aphelion_flight, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.aphelion_gunner, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.aurora, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.battlewagon, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.colossus_flight, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.colossus_gunner, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.flail, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.galaxy_gunship, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.lasher, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.liberator, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.lightgunship, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.maelstrom, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.magrider, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.mini_chaingun, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.peregrine_flight, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.peregrine_gunner, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.prowler, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.r_shotgun, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.thunderer, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.vanguard, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.vulture, "allowed" -> "false")
)),
GameProperty(19, List(
GamePropertyField(421, List(GamePropertyValues("allowed", "false")))
GamePropertyScope(31, List(
GamePropertyTarget(ObjectClass.aphelion_flight, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.aphelion_gunner, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.aurora, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.battlewagon, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.colossus_flight, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.colossus_gunner, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.flail, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.galaxy_gunship, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.lasher, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.liberator, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.lightgunship, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.maelstrom, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.magrider, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.mini_chaingun, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.peregrine_flight, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.peregrine_gunner, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.prowler, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.r_shotgun, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.thunderer, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.vanguard, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.vulture, "allowed" -> "false")
)),
GameProperty(20, List(
GamePropertyField(421, List(GamePropertyValues("allowed", "false")))
)),
GameProperty(21, List(
GamePropertyField(421, List(GamePropertyValues("allowed", "false")))
)),
GameProperty(22, List(
GamePropertyField(421, List(GamePropertyValues("allowed", "false")))
)),
GameProperty(29, List(
GamePropertyField(83, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(84, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(118, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(135, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(199, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(200, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(294, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(338, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(429, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(432, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(441, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(462, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(470, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(556, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(642, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(643, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(697, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(714, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(865, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(923, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(986, List(GamePropertyValues("allowed", "false")))
)),
GameProperty(30, List(
GamePropertyField(83, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(84, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(118, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(135, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(199, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(200, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(294, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(338, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(429, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(432, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(441, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(462, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(470, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(556, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(642, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(643, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(697, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(714, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(865, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(923, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(986, List(GamePropertyValues("allowed", "false")))
)),
GameProperty(31, List(
GamePropertyField(83, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(84, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(118, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(135, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(199, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(200, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(294, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(338, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(429, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(432, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(441, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(462, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(470, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(556, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(642, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(643, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(697, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(714, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(865, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(923, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(986, List(GamePropertyValues("allowed", "false")))
)),
GameProperty(32, List(
GamePropertyField(83, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(84, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(118, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(135, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(199, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(200, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(294, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(338, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(429, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(432, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(441, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(462, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(470, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(556, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(642, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(643, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(697, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(714, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(865, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(923, List(GamePropertyValues("allowed", "false"))),
GamePropertyField(986, List(GamePropertyValues("allowed", "false")))
GamePropertyScope(32, List(
GamePropertyTarget(ObjectClass.aphelion_flight, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.aphelion_gunner, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.aurora, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.battlewagon, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.colossus_flight, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.colossus_gunner, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.flail, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.galaxy_gunship, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.lasher, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.liberator, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.lightgunship, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.maelstrom, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.magrider, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.mini_chaingun, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.peregrine_flight, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.peregrine_gunner, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.prowler, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.r_shotgun, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.thunderer, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.vanguard, "allowed" -> "false"),
GamePropertyTarget(ObjectClass.vulture, "allowed" -> "false")
))
)
)