From cf3bf19d4d1fcc985250f237d599e735afb4cf0d Mon Sep 17 00:00:00 2001 From: FateJH Date: Fri, 18 May 2018 20:48:52 -0400 Subject: [PATCH] tests for prior MAX changes; correcting a 13mm problem with the Lightning's chaingun ammunition type --- .../psforever/objects/ExoSuitDefinition.scala | 4 +- .../psforever/objects/GlobalDefinitions.scala | 2 +- .../scala/net/psforever/objects/Player.scala | 36 +- .../terminals/VehicleTerminalDefinition.scala | 6 +- .../packet/game/objectcreate/Prefab.scala | 2 +- .../src/test/scala/objects/ExoSuitTest.scala | 145 +++ .../src/test/scala/objects/PlayerTest.scala | 904 ++++++++++-------- .../src/main/scala/WorldSessionActor.scala | 6 +- pslogin/src/main/scala/Zones.scala | 2 +- 9 files changed, 664 insertions(+), 443 deletions(-) create mode 100644 common/src/test/scala/objects/ExoSuitTest.scala diff --git a/common/src/main/scala/net/psforever/objects/ExoSuitDefinition.scala b/common/src/main/scala/net/psforever/objects/ExoSuitDefinition.scala index 95056023..fc49f07a 100644 --- a/common/src/main/scala/net/psforever/objects/ExoSuitDefinition.scala +++ b/common/src/main/scala/net/psforever/objects/ExoSuitDefinition.scala @@ -36,7 +36,7 @@ class ExoSuitDefinition(private val suitType : ExoSuitType.Value) { def InventoryOffset : Int = inventoryOffset def InventoryOffset_=(offset : Int) : Int = { - inventoryOffset = offset + inventoryOffset = math.min(math.max(0, offset), 65535) InventoryOffset } @@ -138,7 +138,7 @@ object ExoSuitDefinition { Infiltration.Holster(0, EquipmentSize.Pistol) Infiltration.Holster(4, EquipmentSize.Melee) - final val MAX = new SpecialExoSuitDefinition(ExoSuitType.MAX) + final val MAX = SpecialExoSuitDefinition(ExoSuitType.MAX) MAX.permission = 1 MAX.MaxArmor = 650 MAX.InventoryScale = InventoryTile.Tile1612 diff --git a/common/src/main/scala/net/psforever/objects/GlobalDefinitions.scala b/common/src/main/scala/net/psforever/objects/GlobalDefinitions.scala index d27965ff..d3b9c05f 100644 --- a/common/src/main/scala/net/psforever/objects/GlobalDefinitions.scala +++ b/common/src/main/scala/net/psforever/objects/GlobalDefinitions.scala @@ -2131,7 +2131,7 @@ object GlobalDefinitions { lightning_weapon_system.Name = "lightning_weapon_system" lightning_weapon_system.Size = EquipmentSize.VehicleWeapon 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.head.AmmoTypeIndices += 0 lightning_weapon_system.FireModes.head.AmmoSlotIndex = 0 diff --git a/common/src/main/scala/net/psforever/objects/Player.scala b/common/src/main/scala/net/psforever/objects/Player.scala index 5735305c..5c570d1f 100644 --- a/common/src/main/scala/net/psforever/objects/Player.scala +++ b/common/src/main/scala/net/psforever/objects/Player.scala @@ -349,31 +349,43 @@ 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 UsingAnchorsOrOverdrive(state : SpecialExoSuitDefinition.Mode.Value) : SpecialExoSuitDefinition.Mode.Value = { - if(ExoSuit == ExoSuitType.MAX && Faction == PlanetSideEmpire.TR) { - val curr = UsingSpecial - val next = if(curr != SpecialExoSuitDefinition.Mode.Normal) { - SpecialExoSuitDefinition.Mode.Normal - } - else if(curr == SpecialExoSuitDefinition.Mode.Normal) { + import SpecialExoSuitDefinition.Mode._ + val curr = UsingSpecial + val next = if(curr == Normal) { + if(state == Anchored || state == Overdrive) { state } else { - SpecialExoSuitDefinition.Mode.Normal + Normal } - MAXUsingSpecial(next) + } + else if(state == Normal) { + Normal } else { - SpecialExoSuitDefinition.Mode.Normal + curr } + MAXUsingSpecial(next) } private def UsingShield(state : SpecialExoSuitDefinition.Mode.Value) : SpecialExoSuitDefinition.Mode.Value = { - if(ExoSuit == ExoSuitType.MAX && Faction == PlanetSideEmpire.NC) { - MAXUsingSpecial(state) + import SpecialExoSuitDefinition.Mode._ + val curr = UsingSpecial + val next = if(curr == Normal) { + if(state == Shielded) { + state + } + else { + Normal + } + } + else if(state == Normal) { + Normal } else { - SpecialExoSuitDefinition.Mode.Normal + curr } + MAXUsingSpecial(next) } private def DefaultGettingSpecial() : SpecialExoSuitDefinition.Mode.Value = SpecialExoSuitDefinition.Mode.Normal diff --git a/common/src/main/scala/net/psforever/objects/serverobject/terminals/VehicleTerminalDefinition.scala b/common/src/main/scala/net/psforever/objects/serverobject/terminals/VehicleTerminalDefinition.scala index 8785ae7a..553d5cc1 100644 --- a/common/src/main/scala/net/psforever/objects/serverobject/terminals/VehicleTerminalDefinition.scala +++ b/common/src/main/scala/net/psforever/objects/serverobject/terminals/VehicleTerminalDefinition.scala @@ -326,9 +326,9 @@ abstract class VehicleTerminalDefinition(objId : Int) extends TerminalDefinition ), "lightning" -> VehicleLoadout("default_lightning", List(), List( - SimplifiedEntry(ammo_25mm, 30), - SimplifiedEntry(ammo_25mm, 34), - SimplifiedEntry(ammo_25mm, 38), + SimplifiedEntry(ammo_12mm, 30), + SimplifiedEntry(ammo_12mm, 34), + SimplifiedEntry(ammo_12mm, 38), SimplifiedEntry(ammo_75mm, 90), SimplifiedEntry(ammo_75mm, 94), SimplifiedEntry(ammo_75mm, 98) diff --git a/common/src/main/scala/net/psforever/packet/game/objectcreate/Prefab.scala b/common/src/main/scala/net/psforever/packet/game/objectcreate/Prefab.scala index a424d02b..acfaa407 100644 --- a/common/src/main/scala/net/psforever/packet/game/objectcreate/Prefab.scala +++ b/common/src/main/scala/net/psforever/packet/game/objectcreate/Prefab.scala @@ -223,7 +223,7 @@ object Prefab { VehicleData(CommonFieldData(loc, faction, 0), 0, health, false, false, DriveState.State7, true, false, false, None, Some(InventoryData( 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) ) )(VehicleFormat.Normal) diff --git a/common/src/test/scala/objects/ExoSuitTest.scala b/common/src/test/scala/objects/ExoSuitTest.scala new file mode 100644 index 00000000..484c748c --- /dev/null +++ b/common/src/test/scala/objects/ExoSuitTest.scala @@ -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 + } + } +} diff --git a/common/src/test/scala/objects/PlayerTest.scala b/common/src/test/scala/objects/PlayerTest.scala index ff9501be..560b1c52 100644 --- a/common/src/test/scala/objects/PlayerTest.scala +++ b/common/src/test/scala/objects/PlayerTest.scala @@ -16,448 +16,512 @@ class PlayerTest extends Specification { new Player(Avatar(name, faction, sex, head, voice)) } - "construct" in { - val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5) - obj.isAlive mustEqual false - obj.FacingYawUpper mustEqual 0 - obj.Jumping mustEqual false - obj.Crouching mustEqual false - obj.Cloaked mustEqual false + "Player" should { + "construct" in { + val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5) + obj.isAlive mustEqual false + obj.FacingYawUpper mustEqual 0 + obj.Jumping mustEqual false + obj.Crouching mustEqual false + obj.Cloaked mustEqual false - obj.FacingYawUpper = 1.3f - obj.Jumping = true - obj.Crouching = true - obj.Cloaked = true - obj.FacingYawUpper mustEqual 1.3f - obj.Jumping mustEqual true - obj.Crouching mustEqual true - obj.Cloaked mustEqual true - } - - "different players" in { - (TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5) == - TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5)) mustEqual true - - (TestPlayer("Chord1", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5) == - TestPlayer("Chord2", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5)) mustEqual false - - (TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5) == - TestPlayer("Chord", PlanetSideEmpire.NC, CharacterGender.Male, 0, 5)) mustEqual false - - (TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5) == - TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Female, 0, 5)) mustEqual false - - (TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5) == - TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 1, 5)) mustEqual false - - (TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5) == - TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 6)) mustEqual false - } - - "(re)spawn" in { - val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5) - obj.isAlive mustEqual false - obj.Health mustEqual 0 - obj.Stamina mustEqual 0 - obj.Armor mustEqual 0 - obj.MaxHealth mustEqual 100 - obj.MaxStamina mustEqual 100 - obj.MaxArmor mustEqual 50 - obj.Spawn - obj.isAlive mustEqual true - obj.Health mustEqual 100 - obj.Stamina mustEqual 100 - obj.Armor mustEqual 50 - } - - "will not (re)spawn if not dead" in { - val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5) - obj.Spawn - obj.Health mustEqual 100 - obj.Armor mustEqual 50 - obj.isAlive mustEqual true - - obj.Health = 10 - obj.Armor = 10 - obj.Health mustEqual 10 - obj.Armor mustEqual 10 - obj.Spawn - obj.Health mustEqual 10 - obj.Armor mustEqual 10 - } - - "can die" in { - val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5) - obj.Spawn - obj.Armor = 35 //50 -> 35 - obj.isAlive mustEqual true - obj.Health mustEqual obj.MaxHealth - obj.Stamina mustEqual obj.MaxStamina - obj.Armor mustEqual 35 - obj.Die - obj.isAlive mustEqual false - obj.Health mustEqual 0 - obj.Stamina mustEqual 0 - obj.Armor mustEqual 35 - } - - "can not become a backpack if alive" in { - val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5) - obj.Spawn - obj.isAlive mustEqual true - obj.isBackpack mustEqual false - obj.Release - obj.isAlive mustEqual true - obj.isBackpack mustEqual false - } - - "can become a backpack" in { - val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5) - obj.isAlive mustEqual false - obj.isBackpack mustEqual false - obj.Release - obj.isAlive mustEqual false - obj.isBackpack mustEqual true - } - - "set new maximum values (health, stamina)" in { - val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5) - obj.MaxHealth mustEqual 100 - obj.MaxStamina mustEqual 100 - obj.MaxHealth = 123 - obj.MaxStamina = 456 - obj.Spawn - obj.Health mustEqual 123 - obj.Stamina mustEqual 456 - } - - "set new values (health, armor, stamina) but only when alive" in { - val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5) - obj.Health = 23 - obj.Armor = 34 - obj.Stamina = 45 - obj.Health mustEqual 0 - obj.Armor mustEqual 0 - obj.Stamina mustEqual 0 - - obj.Spawn - obj.Health mustEqual obj.MaxHealth - obj.Armor mustEqual obj.MaxArmor - obj.Stamina mustEqual obj.MaxStamina - obj.Health = 23 - obj.Armor = 34 - obj.Stamina = 45 - obj.Health mustEqual 23 - obj.Armor mustEqual 34 - obj.Stamina mustEqual 45 - } - - "has visible slots" in { - val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5) - obj.VisibleSlots mustEqual Set(0,1,2,3,4) - obj.ExoSuit = ExoSuitType.MAX - obj.VisibleSlots mustEqual Set(0) - } - - "init (Standard Exo-Suit)" in { - val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5) - obj.ExoSuit mustEqual ExoSuitType.Standard - obj.Slot(0).Size mustEqual EquipmentSize.Pistol - obj.Slot(1).Size mustEqual EquipmentSize.Blocked - obj.Slot(2).Size mustEqual EquipmentSize.Rifle - obj.Slot(3).Size mustEqual EquipmentSize.Blocked - obj.Slot(4).Size mustEqual EquipmentSize.Melee - obj.Inventory.Width mustEqual 9 - obj.Inventory.Height mustEqual 6 - obj.Inventory.Offset mustEqual 6 - } - - "draw equipped holsters only" in { - val wep = SimpleItem(SimpleItemDefinition(149)) - val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5) - obj.Slot(1).Size = EquipmentSize.Pistol - obj.Slot(1).Equipment = wep - obj.DrawnSlot mustEqual Player.HandsDownSlot - obj.DrawnSlot = 0 - obj.DrawnSlot mustEqual Player.HandsDownSlot - obj.DrawnSlot = 1 - obj.DrawnSlot mustEqual 1 - } - - "remember the last drawn holster" in { - val wep1 = SimpleItem(SimpleItemDefinition(149)) - val wep2 = SimpleItem(SimpleItemDefinition(149)) - val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5) - obj.Slot(0).Size = EquipmentSize.Pistol - obj.Slot(0).Equipment = wep1 - obj.Slot(1).Size = EquipmentSize.Pistol - obj.Slot(1).Equipment = wep2 - obj.DrawnSlot mustEqual Player.HandsDownSlot //default value - obj.LastDrawnSlot mustEqual Player.HandsDownSlot //default value - - obj.DrawnSlot = 1 - obj.DrawnSlot mustEqual 1 - obj.LastDrawnSlot mustEqual 1 - - obj.DrawnSlot = 0 - obj.DrawnSlot mustEqual 0 - obj.LastDrawnSlot mustEqual 0 - - obj.DrawnSlot = Player.HandsDownSlot - obj.DrawnSlot mustEqual Player.HandsDownSlot - obj.LastDrawnSlot mustEqual 0 - - obj.DrawnSlot = 1 - obj.DrawnSlot mustEqual 1 - obj.LastDrawnSlot mustEqual 1 - - obj.DrawnSlot = 0 - obj.DrawnSlot mustEqual 0 - obj.LastDrawnSlot mustEqual 0 - - obj.DrawnSlot = 1 - obj.DrawnSlot mustEqual 1 - obj.LastDrawnSlot mustEqual 1 - - obj.DrawnSlot = Player.HandsDownSlot - obj.DrawnSlot mustEqual Player.HandsDownSlot - obj.LastDrawnSlot mustEqual 1 - } - - "hold something in their free hand" in { - val wep = SimpleItem(SimpleItemDefinition(149)) - val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5) - obj.Slot(Player.FreeHandSlot).Equipment = wep - - obj.Slot(Player.FreeHandSlot).Equipment.get.Definition.ObjectId mustEqual 149 - } - - "provide an invalid hand that can not hold anything" in { - val wep = SimpleItem(SimpleItemDefinition(149)) - val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5) - obj.Slot(-1).Equipment = wep - - obj.Slot(-1).Equipment mustEqual None - } - - "search for the smallest available slot in which to store equipment" in { - val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5) - obj.Inventory.Resize(3,3) //fits one item - - obj.Fit(Tool(GlobalDefinitions.beamer)) mustEqual Some(0) - - obj.Fit(Tool(GlobalDefinitions.suppressor)) mustEqual Some(2) - - val ammo = AmmoBox(GlobalDefinitions.bullet_9mm) - val ammo2 = AmmoBox(GlobalDefinitions.bullet_9mm) - val ammo3 = AmmoBox(GlobalDefinitions.bullet_9mm) - obj.Fit(ammo) mustEqual Some(6) - obj.Slot(6).Equipment = ammo - obj.Fit(ammo2) mustEqual Some(Player.FreeHandSlot) - obj.Slot(Player.FreeHandSlot).Equipment = ammo2 - obj.Fit(ammo3) mustEqual None - } - - "can use their free hand to hold things" in { - val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5) - val ammo = AmmoBox(GlobalDefinitions.bullet_9mm) - obj.FreeHand.Equipment mustEqual None - - obj.FreeHand.Equipment = ammo - obj.FreeHand.Equipment mustEqual Some(ammo) - } - - "can access the player's locker-space" in { - val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5) - obj.Slot(5).Equipment.get.isInstanceOf[LockerContainer] mustEqual true - } - - "can find equipment" in { - val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5) - obj.Slot(0).Equipment = { - val item = Tool(beamer) - item.GUID = PlanetSideGUID(1) - item - } - obj.Slot(4).Equipment = { - val item = Tool(forceblade) - item.GUID = PlanetSideGUID(2) - item - } - obj.Slot(6).Equipment = { - val item = ConstructionItem(ace) - item.GUID = PlanetSideGUID(3) - item - } - obj.Locker.Slot(6).Equipment = { - val item = Kit(medkit) - item.GUID = PlanetSideGUID(4) - item - } - obj.FreeHand.Equipment = { - val item = SimpleItem(remote_electronics_kit) - item.GUID = PlanetSideGUID(5) - item + obj.FacingYawUpper = 1.3f + obj.Jumping = true + obj.Crouching = true + obj.Cloaked = true + obj.FacingYawUpper mustEqual 1.3f + obj.Jumping mustEqual true + obj.Crouching mustEqual true + obj.Cloaked mustEqual true } - obj.Find(PlanetSideGUID(1)) mustEqual Some(0) //holsters - obj.Find(PlanetSideGUID(2)) mustEqual Some(4) //holsters, melee - obj.Find(PlanetSideGUID(3)) mustEqual Some(6) //inventory - obj.Find(PlanetSideGUID(4)) mustEqual None //can not find in locker-space - obj.Find(PlanetSideGUID(5)) mustEqual Some(Player.FreeHandSlot) //free hand - obj.Find(PlanetSideGUID(6)) mustEqual None //not here - } + "different players" in { + (TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5) == + TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5)) mustEqual true - "does equipment collision checking (are we already holding something there?)" in { - val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5) - val item1 = Tool(beamer) - val item2 = Kit(medkit) - val item3 = AmmoBox(GlobalDefinitions.bullet_9mm) - obj.Slot(0).Equipment = item1 - obj.Slot(6).Equipment = item2 - obj.FreeHand.Equipment = item3 + (TestPlayer("Chord1", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5) == + TestPlayer("Chord2", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5)) mustEqual false - obj.Collisions(0, 1, 1) match { - case Success(List(item)) => - item.obj mustEqual item1 - item.start mustEqual 0 - case _ => - ko - } //holsters + (TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5) == + TestPlayer("Chord", PlanetSideEmpire.NC, CharacterGender.Male, 0, 5)) mustEqual false - obj.Collisions(1, 1, 1) match { - case Success(List()) => ; - case _ => - ko - } //holsters, nothing + (TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5) == + TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Female, 0, 5)) mustEqual false - obj.Collisions(6, 1, 1)match { - case Success(List(item)) => - item.obj mustEqual item2 - item.start mustEqual 6 - case _ => - ko - } //inventory + (TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5) == + TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 1, 5)) mustEqual false - obj.Collisions(Player.FreeHandSlot, 1, 1)match { - case Success(List(item)) => - item.obj mustEqual item3 - item.start mustEqual Player.FreeHandSlot - case _ => - ko - } //free hand - } + (TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5) == + TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 6)) mustEqual false + } - "battle experience point values of the avatar" in { - val avatar = Avatar("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5) - val player = Player(avatar) + "(re)spawn" in { + val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5) + obj.isAlive mustEqual false + obj.Health mustEqual 0 + obj.Stamina mustEqual 0 + obj.Armor mustEqual 0 + obj.MaxHealth mustEqual 100 + obj.MaxStamina mustEqual 100 + obj.MaxArmor mustEqual 50 + obj.Spawn + obj.isAlive mustEqual true + obj.Health mustEqual 100 + obj.Stamina mustEqual 100 + obj.Armor mustEqual 50 + } - player.BEP mustEqual avatar.BEP - avatar.BEP = 1002 - player.BEP mustEqual avatar.BEP - } + "will not (re)spawn if not dead" in { + val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5) + obj.Spawn + obj.Health mustEqual 100 + obj.Armor mustEqual 50 + obj.isAlive mustEqual true - "command experience point values of the avatar" in { - val avatar = Avatar("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5) - val player = Player(avatar) + obj.Health = 10 + obj.Armor = 10 + obj.Health mustEqual 10 + obj.Armor mustEqual 10 + obj.Spawn + obj.Health mustEqual 10 + obj.Armor mustEqual 10 + } - player.CEP mustEqual avatar.CEP - avatar.CEP = 1002 - player.CEP mustEqual avatar.CEP - } + "can die" in { + val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5) + obj.Spawn + obj.Armor = 35 //50 -> 35 + obj.isAlive mustEqual true + obj.Health mustEqual obj.MaxHealth + obj.Stamina mustEqual obj.MaxStamina + obj.Armor mustEqual 35 + obj.Die + obj.isAlive mustEqual false + obj.Health mustEqual 0 + obj.Stamina mustEqual 0 + obj.Armor mustEqual 35 + } - "can get a quick summary of implant slots (default)" in { - val avatar = Avatar("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5) - val player = Player(avatar) + "can not become a backpack if alive" in { + val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5) + obj.Spawn + obj.isAlive mustEqual true + obj.isBackpack mustEqual false + obj.Release + obj.isAlive mustEqual true + obj.isBackpack mustEqual false + } - player.Implants mustEqual Array.empty - } + "can become a backpack" in { + val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5) + obj.isAlive mustEqual false + obj.isBackpack mustEqual false + obj.Release + obj.isAlive mustEqual false + obj.isBackpack mustEqual true + } - "can get a quick summary of implant slots (two unlocked, one installed)" in { - val avatar = Avatar("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5) - val player = Player(avatar) - val temp = new ImplantDefinition(1) - avatar.Implants(0).Unlocked = true - avatar.InstallImplant(new ImplantDefinition(1)) - avatar.Implants(1).Unlocked = true - avatar.InstallImplant(new ImplantDefinition(2)) - avatar.UninstallImplant(temp.Type) + "set new maximum values (health, stamina)" in { + val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5) + obj.MaxHealth mustEqual 100 + obj.MaxStamina mustEqual 100 + obj.MaxHealth = 123 + obj.MaxStamina = 456 + obj.Spawn + obj.Health mustEqual 123 + obj.Stamina mustEqual 456 + } - val list = player.Implants - //slot 0 - val (implant1, init1, active1) = list(0) - implant1 mustEqual ImplantType.None - init1 mustEqual -1 - active1 mustEqual false - //slot 1 - val (implant2, init2, active2) = list(1) - implant2 mustEqual ImplantType(2) - init2 mustEqual 0 - active2 mustEqual false - } + "set new values (health, armor, stamina) but only when alive" in { + val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5) + obj.Health = 23 + obj.Armor = 34 + obj.Stamina = 45 + obj.Health mustEqual 0 + obj.Armor mustEqual 0 + obj.Stamina mustEqual 0 - "can get a quick summary of implant slots (all unlocked, first two installed)" in { - val avatar = Avatar("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5) - val player = Player(avatar) - avatar.Implants(0).Unlocked = true - avatar.InstallImplant(new ImplantDefinition(1)) - avatar.Implants(0).Initialized = true - avatar.Implants(0).Active = true - avatar.Implants(1).Unlocked = true - avatar.InstallImplant(new ImplantDefinition(2)) - avatar.Implants(1).Initialized = true - avatar.Implants(1).Active = false - avatar.Implants(2).Unlocked = true + obj.Spawn + obj.Health mustEqual obj.MaxHealth + obj.Armor mustEqual obj.MaxArmor + obj.Stamina mustEqual obj.MaxStamina + obj.Health = 23 + obj.Armor = 34 + obj.Stamina = 45 + obj.Health mustEqual 23 + obj.Armor mustEqual 34 + obj.Stamina mustEqual 45 + } - val list = player.Implants - //slot 0 - val (implant1, init1, active1) = list(0) - implant1 mustEqual ImplantType(1) - init1 mustEqual 0 - active1 mustEqual true - //slot 1 - val (implant2, init2, active2) = list(1) - implant2 mustEqual ImplantType(2) - init2 mustEqual 0 - active2 mustEqual false - //slot 2 - val (implant3, init3, active3) = list(2) - implant3 mustEqual ImplantType.None - init3 mustEqual -1 - active3 mustEqual false - } + "has visible slots" in { + val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5) + obj.VisibleSlots mustEqual Set(0,1,2,3,4) + obj.ExoSuit = ExoSuitType.MAX + obj.VisibleSlots mustEqual Set(0) + } - "seat in a vehicle" in { - val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5) - obj.VehicleSeated mustEqual None - obj.VehicleSeated = PlanetSideGUID(65) - obj.VehicleSeated mustEqual Some(PlanetSideGUID(65)) - obj.VehicleSeated = None - obj.VehicleSeated mustEqual None - } + "init (Standard Exo-Suit)" in { + val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5) + obj.ExoSuit mustEqual ExoSuitType.Standard + obj.Slot(0).Size mustEqual EquipmentSize.Pistol + obj.Slot(1).Size mustEqual EquipmentSize.Blocked + obj.Slot(2).Size mustEqual EquipmentSize.Rifle + obj.Slot(3).Size mustEqual EquipmentSize.Blocked + obj.Slot(4).Size mustEqual EquipmentSize.Melee + obj.Inventory.Width mustEqual 9 + obj.Inventory.Height mustEqual 6 + obj.Inventory.Offset mustEqual 6 + } - "own in a vehicle" in { - val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5) - obj.VehicleOwned mustEqual None - obj.VehicleOwned = PlanetSideGUID(65) - obj.VehicleOwned mustEqual Some(PlanetSideGUID(65)) - obj.VehicleOwned = None - obj.VehicleOwned mustEqual None - } + "draw equipped holsters only" in { + val wep = SimpleItem(SimpleItemDefinition(149)) + val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5) + obj.Slot(1).Size = EquipmentSize.Pistol + obj.Slot(1).Equipment = wep + obj.DrawnSlot mustEqual Player.HandsDownSlot + obj.DrawnSlot = 0 + obj.DrawnSlot mustEqual Player.HandsDownSlot + obj.DrawnSlot = 1 + obj.DrawnSlot mustEqual 1 + } - "remember what zone he is in" in { - val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5) - obj.Continent mustEqual "home2" - obj.Continent = "ugd01" - obj.Continent mustEqual "ugd01" - } + "remember the last drawn holster" in { + val wep1 = SimpleItem(SimpleItemDefinition(149)) + val wep2 = SimpleItem(SimpleItemDefinition(149)) + val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5) + obj.Slot(0).Size = EquipmentSize.Pistol + obj.Slot(0).Equipment = wep1 + obj.Slot(1).Size = EquipmentSize.Pistol + obj.Slot(1).Equipment = wep2 + obj.DrawnSlot mustEqual Player.HandsDownSlot //default value + obj.LastDrawnSlot mustEqual Player.HandsDownSlot //default value - "toString" in { - val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5) - obj.toString mustEqual "TR Chord 0/100 0/50" + obj.DrawnSlot = 1 + obj.DrawnSlot mustEqual 1 + obj.LastDrawnSlot mustEqual 1 - obj.GUID = PlanetSideGUID(455) - obj.Continent = "z3" - obj.toString mustEqual "TR Chord z3-455 0/100 0/50" + obj.DrawnSlot = 0 + obj.DrawnSlot mustEqual 0 + obj.LastDrawnSlot mustEqual 0 + + obj.DrawnSlot = Player.HandsDownSlot + obj.DrawnSlot mustEqual Player.HandsDownSlot + obj.LastDrawnSlot mustEqual 0 + + obj.DrawnSlot = 1 + obj.DrawnSlot mustEqual 1 + obj.LastDrawnSlot mustEqual 1 + + obj.DrawnSlot = 0 + obj.DrawnSlot mustEqual 0 + obj.LastDrawnSlot mustEqual 0 + + obj.DrawnSlot = 1 + obj.DrawnSlot mustEqual 1 + obj.LastDrawnSlot mustEqual 1 + + obj.DrawnSlot = Player.HandsDownSlot + obj.DrawnSlot mustEqual Player.HandsDownSlot + obj.LastDrawnSlot mustEqual 1 + } + + "hold something in their free hand" in { + val wep = SimpleItem(SimpleItemDefinition(149)) + val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5) + obj.Slot(Player.FreeHandSlot).Equipment = wep + + obj.Slot(Player.FreeHandSlot).Equipment.get.Definition.ObjectId mustEqual 149 + } + + "provide an invalid hand that can not hold anything" in { + val wep = SimpleItem(SimpleItemDefinition(149)) + val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5) + obj.Slot(-1).Equipment = wep + + obj.Slot(-1).Equipment mustEqual None + } + + "search for the smallest available slot in which to store equipment" in { + val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5) + obj.Inventory.Resize(3,3) //fits one item + + obj.Fit(Tool(GlobalDefinitions.beamer)) mustEqual Some(0) + + obj.Fit(Tool(GlobalDefinitions.suppressor)) mustEqual Some(2) + + val ammo = AmmoBox(GlobalDefinitions.bullet_9mm) + val ammo2 = AmmoBox(GlobalDefinitions.bullet_9mm) + val ammo3 = AmmoBox(GlobalDefinitions.bullet_9mm) + obj.Fit(ammo) mustEqual Some(6) + obj.Slot(6).Equipment = ammo + obj.Fit(ammo2) mustEqual Some(Player.FreeHandSlot) + obj.Slot(Player.FreeHandSlot).Equipment = ammo2 + obj.Fit(ammo3) mustEqual None + } + + "can use their free hand to hold things" in { + val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5) + val ammo = AmmoBox(GlobalDefinitions.bullet_9mm) + obj.FreeHand.Equipment mustEqual None + + obj.FreeHand.Equipment = ammo + obj.FreeHand.Equipment mustEqual Some(ammo) + } + + "can access the player's locker-space" in { + val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5) + obj.Slot(5).Equipment.get.isInstanceOf[LockerContainer] mustEqual true + } + + "can find equipment" in { + val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5) + obj.Slot(0).Equipment = { + val item = Tool(beamer) + item.GUID = PlanetSideGUID(1) + item + } + obj.Slot(4).Equipment = { + val item = Tool(forceblade) + item.GUID = PlanetSideGUID(2) + item + } + obj.Slot(6).Equipment = { + val item = ConstructionItem(ace) + item.GUID = PlanetSideGUID(3) + item + } + obj.Locker.Slot(6).Equipment = { + val item = Kit(medkit) + item.GUID = PlanetSideGUID(4) + item + } + obj.FreeHand.Equipment = { + val item = SimpleItem(remote_electronics_kit) + item.GUID = PlanetSideGUID(5) + item + } + + obj.Find(PlanetSideGUID(1)) mustEqual Some(0) //holsters + obj.Find(PlanetSideGUID(2)) mustEqual Some(4) //holsters, melee + obj.Find(PlanetSideGUID(3)) mustEqual Some(6) //inventory + obj.Find(PlanetSideGUID(4)) mustEqual None //can not find in locker-space + obj.Find(PlanetSideGUID(5)) mustEqual Some(Player.FreeHandSlot) //free hand + obj.Find(PlanetSideGUID(6)) mustEqual None //not here + } + + "does equipment collision checking (are we already holding something there?)" in { + val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5) + val item1 = Tool(beamer) + val item2 = Kit(medkit) + val item3 = AmmoBox(GlobalDefinitions.bullet_9mm) + obj.Slot(0).Equipment = item1 + obj.Slot(6).Equipment = item2 + obj.FreeHand.Equipment = item3 + + obj.Collisions(0, 1, 1) match { + case Success(List(item)) => + item.obj mustEqual item1 + item.start mustEqual 0 + case _ => + ko + } //holsters + + obj.Collisions(1, 1, 1) match { + case Success(List()) => ; + case _ => + ko + } //holsters, nothing + + obj.Collisions(6, 1, 1)match { + case Success(List(item)) => + item.obj mustEqual item2 + item.start mustEqual 6 + case _ => + ko + } //inventory + + obj.Collisions(Player.FreeHandSlot, 1, 1)match { + case Success(List(item)) => + item.obj mustEqual item3 + item.start mustEqual Player.FreeHandSlot + case _ => + ko + } //free hand + } + + "battle experience point values of the avatar" in { + val avatar = Avatar("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5) + val player = Player(avatar) + + player.BEP mustEqual avatar.BEP + avatar.BEP = 1002 + player.BEP mustEqual avatar.BEP + } + + "command experience point values of the avatar" in { + val avatar = Avatar("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5) + val player = Player(avatar) + + player.CEP mustEqual avatar.CEP + avatar.CEP = 1002 + player.CEP mustEqual avatar.CEP + } + + "can get a quick summary of implant slots (default)" in { + val avatar = Avatar("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5) + val player = Player(avatar) + + player.Implants mustEqual Array.empty + } + + "can get a quick summary of implant slots (two unlocked, one installed)" in { + val avatar = Avatar("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5) + val player = Player(avatar) + val temp = new ImplantDefinition(1) + avatar.Implants(0).Unlocked = true + avatar.InstallImplant(new ImplantDefinition(1)) + avatar.Implants(1).Unlocked = true + avatar.InstallImplant(new ImplantDefinition(2)) + avatar.UninstallImplant(temp.Type) + + val list = player.Implants + //slot 0 + val (implant1, init1, active1) = list(0) + implant1 mustEqual ImplantType.None + init1 mustEqual -1 + active1 mustEqual false + //slot 1 + val (implant2, init2, active2) = list(1) + implant2 mustEqual ImplantType(2) + init2 mustEqual 0 + active2 mustEqual false + } + + "can get a quick summary of implant slots (all unlocked, first two installed)" in { + val avatar = Avatar("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5) + val player = Player(avatar) + avatar.Implants(0).Unlocked = true + avatar.InstallImplant(new ImplantDefinition(1)) + avatar.Implants(0).Initialized = true + avatar.Implants(0).Active = true + avatar.Implants(1).Unlocked = true + avatar.InstallImplant(new ImplantDefinition(2)) + avatar.Implants(1).Initialized = true + avatar.Implants(1).Active = false + avatar.Implants(2).Unlocked = true + + val list = player.Implants + //slot 0 + val (implant1, init1, active1) = list(0) + implant1 mustEqual ImplantType(1) + init1 mustEqual 0 + active1 mustEqual true + //slot 1 + val (implant2, init2, active2) = list(1) + implant2 mustEqual ImplantType(2) + init2 mustEqual 0 + active2 mustEqual false + //slot 2 + val (implant3, init3, active3) = list(2) + implant3 mustEqual ImplantType.None + init3 mustEqual -1 + active3 mustEqual false + } + + "seat in a vehicle" in { + val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5) + obj.VehicleSeated mustEqual None + obj.VehicleSeated = PlanetSideGUID(65) + obj.VehicleSeated mustEqual Some(PlanetSideGUID(65)) + obj.VehicleSeated = None + obj.VehicleSeated mustEqual None + } + + "own in a vehicle" in { + val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5) + obj.VehicleOwned mustEqual None + obj.VehicleOwned = PlanetSideGUID(65) + obj.VehicleOwned mustEqual Some(PlanetSideGUID(65)) + obj.VehicleOwned = None + obj.VehicleOwned mustEqual None + } + + "remember what zone he is in" in { + val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5) + obj.Continent mustEqual "home2" + obj.Continent = "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 { + val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5) + obj.toString mustEqual "TR Chord 0/100 0/50" + + obj.GUID = PlanetSideGUID(455) + obj.Continent = "z3" + obj.toString mustEqual "TR Chord z3-455 0/100 0/50" + } } } diff --git a/pslogin/src/main/scala/WorldSessionActor.scala b/pslogin/src/main/scala/WorldSessionActor.scala index fd8767b3..f400bc9a 100644 --- a/pslogin/src/main/scala/WorldSessionActor.scala +++ b/pslogin/src/main/scala/WorldSessionActor.scala @@ -1486,7 +1486,7 @@ class WorldSessionActor extends Actor with MDCContextAware { //TODO begin temp player character auto-loading; remove later import net.psforever.objects.GlobalDefinitions._ 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 += MediumAssault avatar.Certifications += StandardExoSuit @@ -2558,7 +2558,7 @@ class WorldSessionActor extends Actor with MDCContextAware { tool.ToFireMode = convertFireModeIndex sendResponse(ChangeFireModeMessage(tool.GUID, convertFireModeIndex)) 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) { @@ -2576,7 +2576,7 @@ class WorldSessionActor extends Actor with MDCContextAware { tool.ToFireMode = convertFireModeIndex sendResponse(ChangeFireModeMessage(tool.GUID, convertFireModeIndex)) 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}") } } diff --git a/pslogin/src/main/scala/Zones.scala b/pslogin/src/main/scala/Zones.scala index 070dc5fe..0e0bef78 100644 --- a/pslogin/src/main/scala/Zones.scala +++ b/pslogin/src/main/scala/Zones.scala @@ -21,7 +21,7 @@ object Zones { super.Init(context) import net.psforever.types.PlanetSideEmpire - Building(2).get.Faction = PlanetSideEmpire.TR + Building(2).get.Faction = PlanetSideEmpire.VS Building(2).get.ModelId = 20 Building(38).get.ModelId = 0 Building(42).get.ModelId = 0