tests for prior MAX changes; correcting a 13mm problem with the Lightning's chaingun ammunition type

This commit is contained in:
FateJH 2018-05-18 20:48:52 -04:00
parent e14f2817d7
commit cf3bf19d4d
9 changed files with 664 additions and 443 deletions

View file

@ -36,7 +36,7 @@ class ExoSuitDefinition(private val suitType : ExoSuitType.Value) {
def InventoryOffset : Int = inventoryOffset def InventoryOffset : Int = inventoryOffset
def InventoryOffset_=(offset : Int) : Int = { def InventoryOffset_=(offset : Int) : Int = {
inventoryOffset = offset inventoryOffset = math.min(math.max(0, offset), 65535)
InventoryOffset InventoryOffset
} }
@ -138,7 +138,7 @@ object ExoSuitDefinition {
Infiltration.Holster(0, EquipmentSize.Pistol) Infiltration.Holster(0, EquipmentSize.Pistol)
Infiltration.Holster(4, EquipmentSize.Melee) Infiltration.Holster(4, EquipmentSize.Melee)
final val MAX = new SpecialExoSuitDefinition(ExoSuitType.MAX) final val MAX = SpecialExoSuitDefinition(ExoSuitType.MAX)
MAX.permission = 1 MAX.permission = 1
MAX.MaxArmor = 650 MAX.MaxArmor = 650
MAX.InventoryScale = InventoryTile.Tile1612 MAX.InventoryScale = InventoryTile.Tile1612

View file

@ -2131,7 +2131,7 @@ object GlobalDefinitions {
lightning_weapon_system.Name = "lightning_weapon_system" lightning_weapon_system.Name = "lightning_weapon_system"
lightning_weapon_system.Size = EquipmentSize.VehicleWeapon lightning_weapon_system.Size = EquipmentSize.VehicleWeapon
lightning_weapon_system.AmmoTypes += bullet_75mm lightning_weapon_system.AmmoTypes += bullet_75mm
lightning_weapon_system.AmmoTypes += bullet_25mm lightning_weapon_system.AmmoTypes += bullet_12mm
lightning_weapon_system.FireModes += new FireModeDefinition lightning_weapon_system.FireModes += new FireModeDefinition
lightning_weapon_system.FireModes.head.AmmoTypeIndices += 0 lightning_weapon_system.FireModes.head.AmmoTypeIndices += 0
lightning_weapon_system.FireModes.head.AmmoSlotIndex = 0 lightning_weapon_system.FireModes.head.AmmoSlotIndex = 0

View file

@ -349,32 +349,44 @@ class Player(private val core : Avatar) extends PlanetSideGameObject with Factio
private def DefaultUsingSpecial(state : SpecialExoSuitDefinition.Mode.Value) : SpecialExoSuitDefinition.Mode.Value = SpecialExoSuitDefinition.Mode.Normal private def DefaultUsingSpecial(state : SpecialExoSuitDefinition.Mode.Value) : SpecialExoSuitDefinition.Mode.Value = SpecialExoSuitDefinition.Mode.Normal
private def UsingAnchorsOrOverdrive(state : SpecialExoSuitDefinition.Mode.Value) : SpecialExoSuitDefinition.Mode.Value = { private def UsingAnchorsOrOverdrive(state : SpecialExoSuitDefinition.Mode.Value) : SpecialExoSuitDefinition.Mode.Value = {
if(ExoSuit == ExoSuitType.MAX && Faction == PlanetSideEmpire.TR) { import SpecialExoSuitDefinition.Mode._
val curr = UsingSpecial val curr = UsingSpecial
val next = if(curr != SpecialExoSuitDefinition.Mode.Normal) { val next = if(curr == Normal) {
SpecialExoSuitDefinition.Mode.Normal if(state == Anchored || state == Overdrive) {
}
else if(curr == SpecialExoSuitDefinition.Mode.Normal) {
state state
} }
else { else {
SpecialExoSuitDefinition.Mode.Normal Normal
}
}
else if(state == Normal) {
Normal
}
else {
curr
} }
MAXUsingSpecial(next) MAXUsingSpecial(next)
} }
else {
SpecialExoSuitDefinition.Mode.Normal
}
}
private def UsingShield(state : SpecialExoSuitDefinition.Mode.Value) : SpecialExoSuitDefinition.Mode.Value = { private def UsingShield(state : SpecialExoSuitDefinition.Mode.Value) : SpecialExoSuitDefinition.Mode.Value = {
if(ExoSuit == ExoSuitType.MAX && Faction == PlanetSideEmpire.NC) { import SpecialExoSuitDefinition.Mode._
MAXUsingSpecial(state) val curr = UsingSpecial
val next = if(curr == Normal) {
if(state == Shielded) {
state
} }
else { else {
SpecialExoSuitDefinition.Mode.Normal Normal
} }
} }
else if(state == Normal) {
Normal
}
else {
curr
}
MAXUsingSpecial(next)
}
private def DefaultGettingSpecial() : SpecialExoSuitDefinition.Mode.Value = SpecialExoSuitDefinition.Mode.Normal private def DefaultGettingSpecial() : SpecialExoSuitDefinition.Mode.Value = SpecialExoSuitDefinition.Mode.Normal

View file

@ -326,9 +326,9 @@ abstract class VehicleTerminalDefinition(objId : Int) extends TerminalDefinition
), ),
"lightning" -> VehicleLoadout("default_lightning", List(), "lightning" -> VehicleLoadout("default_lightning", List(),
List( List(
SimplifiedEntry(ammo_25mm, 30), SimplifiedEntry(ammo_12mm, 30),
SimplifiedEntry(ammo_25mm, 34), SimplifiedEntry(ammo_12mm, 34),
SimplifiedEntry(ammo_25mm, 38), SimplifiedEntry(ammo_12mm, 38),
SimplifiedEntry(ammo_75mm, 90), SimplifiedEntry(ammo_75mm, 90),
SimplifiedEntry(ammo_75mm, 94), SimplifiedEntry(ammo_75mm, 94),
SimplifiedEntry(ammo_75mm, 98) SimplifiedEntry(ammo_75mm, 98)

View file

@ -223,7 +223,7 @@ object Prefab {
VehicleData(CommonFieldData(loc, faction, 0), 0, health, false, false, DriveState.State7, true, false, false, None, VehicleData(CommonFieldData(loc, faction, 0), 0, health, false, false, DriveState.State7, true, false, false, None,
Some(InventoryData( Some(InventoryData(
InventoryItemData(ObjectClass.lightning_weapon_system, weapon_guid, 1, InventoryItemData(ObjectClass.lightning_weapon_system, weapon_guid, 1,
WeaponData(0x4, 0x8, 0, ObjectClass.bullet_75mm, ammo1_guid, 0, AmmoBoxData(0x0), ObjectClass.bullet_25mm, ammo2_guid, 1, AmmoBoxData(0x0)) WeaponData(0x4, 0x8, 0, ObjectClass.bullet_75mm, ammo1_guid, 0, AmmoBoxData(0x0), ObjectClass.bullet_12mm, ammo2_guid, 1, AmmoBoxData(0x0))
) :: Nil) ) :: Nil)
) )
)(VehicleFormat.Normal) )(VehicleFormat.Normal)

View file

@ -0,0 +1,145 @@
// Copyright (c) 2017 PSForever
package objects
import net.psforever.objects._
import net.psforever.objects.equipment.CItem.{DeployedItem, Unit}
import net.psforever.objects.equipment._
import net.psforever.objects.inventory.InventoryTile
import net.psforever.objects.GlobalDefinitions._
import net.psforever.objects.definition._
import net.psforever.types.ExoSuitType
import org.specs2.mutable._
class ExoSuitTest extends Specification {
"ExoSuitDefinition" should {
"construct" in {
val obj = ExoSuitDefinition(ExoSuitType.Standard)
obj.MaxArmor mustEqual 0
obj.InventoryScale mustEqual InventoryTile.Tile11
obj.InventoryOffset mustEqual 0
obj.SuitType mustEqual ExoSuitType.Standard
obj.Holsters.length mustEqual 5
obj.Holsters.foreach(slot => { if(slot != EquipmentSize.Blocked) { ko } })
ok
}
"produce the type of exo-suit that was provided as a clarified type" in {
ExoSuitDefinition(ExoSuitType.Standard).SuitType mustEqual ExoSuitType.Standard
ExoSuitDefinition(ExoSuitType.Agile).SuitType mustEqual ExoSuitType.Agile
}
"change the maximum armor value" in {
val obj = ExoSuitDefinition(ExoSuitType.Standard)
obj.MaxArmor mustEqual 0
obj.MaxArmor = 1
obj.MaxArmor mustEqual 1
}
"not change the maximum armor to an invalid value" in {
val obj = ExoSuitDefinition(ExoSuitType.Standard)
obj.MaxArmor mustEqual 0
obj.MaxArmor = -1
obj.MaxArmor mustEqual 0
obj.MaxArmor = 65536
obj.MaxArmor mustEqual 65535
}
"change the size of the inventory" in {
val obj = ExoSuitDefinition(ExoSuitType.Standard)
obj.InventoryScale mustEqual InventoryTile.Tile11
obj.InventoryScale = InventoryTile.Tile42
obj.InventoryScale mustEqual InventoryTile.Tile42
}
"change the start index of the inventory" in {
val obj = ExoSuitDefinition(ExoSuitType.Standard)
obj.InventoryOffset mustEqual 0
obj.InventoryOffset = 1
obj.InventoryOffset mustEqual 1
}
"not change the start index of the inventory to an invalid value" in {
val obj = ExoSuitDefinition(ExoSuitType.Standard)
obj.InventoryOffset mustEqual 0
obj.InventoryOffset = -1
obj.InventoryOffset mustEqual 0
obj.InventoryOffset = 65536
obj.InventoryOffset mustEqual 65535
}
"change specific holsters to specific values" in {
val obj = ExoSuitDefinition(ExoSuitType.Standard)
obj.Holster(0) mustEqual EquipmentSize.Blocked
obj.Holster(0, EquipmentSize.Pistol)
obj.Holster(0) mustEqual EquipmentSize.Pistol
obj.Holster(4) mustEqual EquipmentSize.Blocked
obj.Holster(4, EquipmentSize.Rifle)
obj.Holster(4) mustEqual EquipmentSize.Rifle
(0 to 4).foreach {
case 0 => obj.Holsters(0) mustEqual EquipmentSize.Pistol
case 4 => obj.Holsters(4) mustEqual EquipmentSize.Rifle
case x => obj.Holsters(x) mustEqual EquipmentSize.Blocked
}
ok
}
"can not change any slot that does not exist" in {
val obj = ExoSuitDefinition(ExoSuitType.Standard)
obj.Holster(9) mustEqual EquipmentSize.Blocked
obj.Holster(9, EquipmentSize.Pistol)
obj.Holster(9) mustEqual EquipmentSize.Blocked
}
"produce a copy of the definition" in {
val obj = ExoSuitDefinition(ExoSuitType.Standard)
val obj2 = obj.Use
obj eq obj2
}
}
"SpecialExoSuitDefinition" should {
"construct" in {
val obj = SpecialExoSuitDefinition(ExoSuitType.Standard)
obj.MaxArmor mustEqual 0
obj.InventoryScale mustEqual InventoryTile.Tile11
obj.InventoryOffset mustEqual 0
obj.SuitType mustEqual ExoSuitType.Standard
obj.Holsters.length mustEqual 5
obj.Holsters.foreach(slot => { if(slot != EquipmentSize.Blocked) { ko } })
obj.UsingSpecial mustEqual SpecialExoSuitDefinition.Mode.Normal
}
"configure UsingSpecial to various values" in {
val obj = SpecialExoSuitDefinition(ExoSuitType.Standard)
obj.UsingSpecial = SpecialExoSuitDefinition.Mode.Anchored
obj.UsingSpecial mustEqual SpecialExoSuitDefinition.Mode.Anchored
obj.UsingSpecial = SpecialExoSuitDefinition.Mode.Overdrive
obj.UsingSpecial mustEqual SpecialExoSuitDefinition.Mode.Overdrive
obj.UsingSpecial = SpecialExoSuitDefinition.Mode.Shielded
obj.UsingSpecial mustEqual SpecialExoSuitDefinition.Mode.Shielded
obj.UsingSpecial = SpecialExoSuitDefinition.Mode.Normal
obj.UsingSpecial mustEqual SpecialExoSuitDefinition.Mode.Normal
}
"produce a separate copy of the definition" in {
val obj = SpecialExoSuitDefinition(ExoSuitType.Standard)
val obj2 = obj.Use
obj ne obj2
}
}
"ExoSuitDefinition.Select" should {
"produce common, shared instances of exo suits" in {
ExoSuitDefinition.Select(ExoSuitType.Standard) eq ExoSuitDefinition.Select(ExoSuitType.Standard)
ExoSuitDefinition.Select(ExoSuitType.Agile) eq ExoSuitDefinition.Select(ExoSuitType.Agile)
ExoSuitDefinition.Select(ExoSuitType.Reinforced) eq ExoSuitDefinition.Select(ExoSuitType.Reinforced)
ExoSuitDefinition.Select(ExoSuitType.Infiltration) eq ExoSuitDefinition.Select(ExoSuitType.Infiltration)
}
"produces unique instances of the mechanized assault exo suit" in {
val obj = ExoSuitDefinition.Select(ExoSuitType.MAX)
obj ne ExoSuitDefinition.Select(ExoSuitType.MAX)
obj.isInstanceOf[SpecialExoSuitDefinition] mustEqual true
}
}
}

View file

@ -16,6 +16,7 @@ class PlayerTest extends Specification {
new Player(Avatar(name, faction, sex, head, voice)) new Player(Avatar(name, faction, sex, head, voice))
} }
"Player" should {
"construct" in { "construct" in {
val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5) val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5)
obj.isAlive mustEqual false obj.isAlive mustEqual false
@ -452,6 +453,68 @@ class PlayerTest extends Specification {
obj.Continent mustEqual "ugd01" obj.Continent mustEqual "ugd01"
} }
"special is typically normal and can not be changed from normal" in {
val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5)
obj.UsingSpecial mustEqual SpecialExoSuitDefinition.Mode.Normal
obj.UsingSpecial = SpecialExoSuitDefinition.Mode.Shielded
obj.UsingSpecial mustEqual SpecialExoSuitDefinition.Mode.Normal
}
"a TR MAX can change its special to Overdrive or Anchored" in {
val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5)
obj.ExoSuit = ExoSuitType.MAX
obj.UsingSpecial mustEqual SpecialExoSuitDefinition.Mode.Normal
obj.UsingSpecial = SpecialExoSuitDefinition.Mode.Anchored
obj.UsingSpecial mustEqual SpecialExoSuitDefinition.Mode.Anchored
obj.UsingSpecial = SpecialExoSuitDefinition.Mode.Normal
obj.UsingSpecial mustEqual SpecialExoSuitDefinition.Mode.Normal
obj.UsingSpecial = SpecialExoSuitDefinition.Mode.Overdrive
obj.UsingSpecial mustEqual SpecialExoSuitDefinition.Mode.Overdrive
//note
obj.UsingSpecial = SpecialExoSuitDefinition.Mode.Anchored
obj.UsingSpecial mustEqual SpecialExoSuitDefinition.Mode.Overdrive
}
"an NC MAX can change its special to Shielded" in {
val obj = TestPlayer("Chord", PlanetSideEmpire.NC, CharacterGender.Male, 0, 5)
obj.ExoSuit = ExoSuitType.MAX
obj.UsingSpecial mustEqual SpecialExoSuitDefinition.Mode.Normal
obj.UsingSpecial = SpecialExoSuitDefinition.Mode.Shielded
obj.UsingSpecial mustEqual SpecialExoSuitDefinition.Mode.Shielded
obj.UsingSpecial = SpecialExoSuitDefinition.Mode.Normal
obj.UsingSpecial mustEqual SpecialExoSuitDefinition.Mode.Normal
}
"one faction can not use the other's specials" in {
val objtr = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5)
objtr.ExoSuit = ExoSuitType.MAX
objtr.UsingSpecial mustEqual SpecialExoSuitDefinition.Mode.Normal
objtr.UsingSpecial = SpecialExoSuitDefinition.Mode.Shielded
objtr.UsingSpecial mustEqual SpecialExoSuitDefinition.Mode.Normal
val objnc = TestPlayer("Chord", PlanetSideEmpire.NC, CharacterGender.Male, 0, 5)
objnc.ExoSuit = ExoSuitType.MAX
objnc.UsingSpecial mustEqual SpecialExoSuitDefinition.Mode.Normal
objnc.UsingSpecial = SpecialExoSuitDefinition.Mode.Overdrive
objnc.UsingSpecial mustEqual SpecialExoSuitDefinition.Mode.Normal
objnc.UsingSpecial = SpecialExoSuitDefinition.Mode.Anchored
objnc.UsingSpecial mustEqual SpecialExoSuitDefinition.Mode.Normal
}
"changing exo-suit type resets the special to Normal (and changing back does not revert it again)" in {
val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5)
obj.ExoSuit = ExoSuitType.MAX
obj.UsingSpecial mustEqual SpecialExoSuitDefinition.Mode.Normal
obj.UsingSpecial = SpecialExoSuitDefinition.Mode.Anchored
obj.UsingSpecial mustEqual SpecialExoSuitDefinition.Mode.Anchored
val test = obj.UsingSpecial
obj.ExoSuit = ExoSuitType.Standard
obj.UsingSpecial mustEqual SpecialExoSuitDefinition.Mode.Normal
obj.ExoSuit = ExoSuitType.MAX
obj.UsingSpecial != test mustEqual true
}
"toString" in { "toString" in {
val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5) val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5)
obj.toString mustEqual "TR Chord 0/100 0/50" obj.toString mustEqual "TR Chord 0/100 0/50"
@ -460,4 +523,5 @@ class PlayerTest extends Specification {
obj.Continent = "z3" obj.Continent = "z3"
obj.toString mustEqual "TR Chord z3-455 0/100 0/50" obj.toString mustEqual "TR Chord z3-455 0/100 0/50"
} }
}
} }

View file

@ -1486,7 +1486,7 @@ class WorldSessionActor extends Actor with MDCContextAware {
//TODO begin temp player character auto-loading; remove later //TODO begin temp player character auto-loading; remove later
import net.psforever.objects.GlobalDefinitions._ import net.psforever.objects.GlobalDefinitions._
import net.psforever.types.CertificationType._ import net.psforever.types.CertificationType._
avatar = Avatar("TestCharacter"+sessionId.toString, PlanetSideEmpire.TR, CharacterGender.Female, 41, 1) avatar = Avatar("TestCharacter"+sessionId.toString, PlanetSideEmpire.VS, CharacterGender.Female, 41, 1)
avatar.Certifications += StandardAssault avatar.Certifications += StandardAssault
avatar.Certifications += MediumAssault avatar.Certifications += MediumAssault
avatar.Certifications += StandardExoSuit avatar.Certifications += StandardExoSuit
@ -2558,7 +2558,7 @@ class WorldSessionActor extends Actor with MDCContextAware {
tool.ToFireMode = convertFireModeIndex tool.ToFireMode = convertFireModeIndex
sendResponse(ChangeFireModeMessage(tool.GUID, convertFireModeIndex)) sendResponse(ChangeFireModeMessage(tool.GUID, convertFireModeIndex))
case _ => case _ =>
log.info(s"GenericObject: $player is MAS with an unexpected weapon - ${definition.Name}") log.info(s"GenericObject: $player is MAX with an unexpected weapon - ${definition.Name}")
} }
} }
else if(action == 16) { else if(action == 16) {
@ -2576,7 +2576,7 @@ class WorldSessionActor extends Actor with MDCContextAware {
tool.ToFireMode = convertFireModeIndex tool.ToFireMode = convertFireModeIndex
sendResponse(ChangeFireModeMessage(tool.GUID, convertFireModeIndex)) sendResponse(ChangeFireModeMessage(tool.GUID, convertFireModeIndex))
case _ => case _ =>
log.info(s"GenericObject: $player is MAS with an unexpected weapon - ${definition.Name}") log.info(s"GenericObject: $player is MAX with an unexpected weapon - ${definition.Name}")
} }
} }

View file

@ -21,7 +21,7 @@ object Zones {
super.Init(context) super.Init(context)
import net.psforever.types.PlanetSideEmpire import net.psforever.types.PlanetSideEmpire
Building(2).get.Faction = PlanetSideEmpire.TR Building(2).get.Faction = PlanetSideEmpire.VS
Building(2).get.ModelId = 20 Building(2).get.ModelId = 20
Building(38).get.ModelId = 0 Building(38).get.ModelId = 0
Building(42).get.ModelId = 0 Building(42).get.ModelId = 0