Merge pull request #737 from Fate-JH/logging

Logging
This commit is contained in:
Mazo 2021-03-26 12:37:17 +00:00 committed by GitHub
commit a22f1118d1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
89 changed files with 1080 additions and 889 deletions

View file

@ -79,7 +79,8 @@ lazy val psforeverSettings = Seq(
"io.circe" %% "circe-generic" % "0.13.0", "io.circe" %% "circe-generic" % "0.13.0",
"io.circe" %% "circe-parser" % "0.13.0", "io.circe" %% "circe-parser" % "0.13.0",
"org.scala-lang.modules" %% "scala-parallel-collections" % "1.0.1", "org.scala-lang.modules" %% "scala-parallel-collections" % "1.0.1",
"org.bouncycastle" % "bcprov-jdk15on" % "1.68" "org.bouncycastle" % "bcprov-jdk15on" % "1.68",
"org.codehaus.janino" % "janino" % "2.6.1"
), ),
// TODO(chord): remove exclusion when SessionActor is refactored: https://github.com/psforever/PSF-LoginServer/issues/279 // TODO(chord): remove exclusion when SessionActor is refactored: https://github.com/psforever/PSF-LoginServer/issues/279
coverageExcludedPackages := "net\\.psforever\\.actors\\.session\\.SessionActor.*" coverageExcludedPackages := "net\\.psforever\\.actors\\.session\\.SessionActor.*"

View file

@ -10,36 +10,116 @@
</filter> </filter>
</appender> </appender>
<appender name="FILE-DEBUG" class="ch.qos.logback.core.FileAppender"> <appender name="FILE-GENERAL" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/pslogin-debug_${bySecond}.log</file> <file>logs/psforever-general_${bySecond}.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logs/psforever-general_%d{yyyy-MM-dd}.gz</fileNamePattern>
<maxHistory>60</maxHistory>
<totalSizeCap>10GB</totalSizeCap>
</rollingPolicy>
<encoder> <encoder>
<pattern>%date{ISO8601} %5level "%X" %logger{35} - %msg%n</pattern> <pattern>%date{ISO8601} %5level %logger{35} - %msg%n</pattern>
</encoder> </encoder>
<filter class="ch.qos.logback.core.filter.EvaluatorFilter">
<evaluator>
<matcher>
<Name>encrypted</Name>
<!-- occurs during latency or relogging complications; the messages are useless -->
<regex>Unexpected packet type EncryptedPacket</regex>
</matcher>
<expression>encrypted.matches(formattedMessage)</expression>
</evaluator>
<OnMatch>DENY</OnMatch>
<OnMismatch>NEUTRAL</OnMismatch>
</filter>
<filter class="net.psforever.filters.LoggerPrefixFilter">
<!--
c.g.j.s.d.p.c.PostgreSQLConnectionHandler
-->
<prefix>com.github.jasync.sql.db.postgresql.codec</prefix>
</filter>
<filter class="net.psforever.filters.LoggerPrefixFilter">
<!--
i.s.c.AbstractConnection.lockdown
i.sentry.connection.AsyncConnection
-->
<prefix>io.sentry.connection</prefix>
</filter>
<filter class="net.psforever.filters.LoggerPrefixFilter">
<!-- damage log -->
<prefix>DamageResolution</prefix>
</filter>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>DEBUG</level> <level>INFO</level>
</filter>
<filter class="net.psforever.filters.ApplyCooldownToDuplicateLoggingFilter">
<cooldown>5000</cooldown>
</filter> </filter>
</appender> </appender>
<appender name="FILE-TRACE" class="ch.qos.logback.core.FileAppender"> <appender name="FILE-DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/pslogin-trace_${bySecond}.log</file> <file>logs/psforever-debug_${bySecond}.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logs/psforever-debug_%d{yyyy-MM-dd}.gz</fileNamePattern>
<maxHistory>60</maxHistory>
<totalSizeCap>10GB</totalSizeCap>
</rollingPolicy>
<encoder> <encoder>
<pattern>%date{ISO8601} [%thread] %5level "%X" %logger{35} - %msg%n</pattern> <pattern>%date{ISO8601} [%thread] %5level "%X" %logger{35} - %msg%n</pattern>
</encoder> </encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <filter class="net.psforever.filters.LoggerPrefixFilter">
<level>OFF</level> <!--
<!--<level>TRACE</level>--> c.g.j.s.d.p.e.CloseStatementEncoder
c.g.j.s.d.p.e.PreparedStatementEncoderHelper
c.g.j.s.d.p.e.PreparedStatementOpeningEncoder
c.g.j.s.d.p.e.QueryMessageEncoder
-->
<prefix>com.github.jasync.sql.db.postgresql.encoders</prefix>
</filter> </filter>
<filter class="net.psforever.filters.LoggerPrefixFilter">
<!--
c.g.j.s.d.p.c.PostgreSQLConnectionHandler
consider: c.g.j.s.d.p.PostgreSQLConnection?
-->
<prefix>com.github.jasync.sql.db.postgresql.codec</prefix>
</filter>
<filter class="net.psforever.filters.LoggerPrefixFilter">
<!-- i.g.context.jasync.JAsyncContext -->
<prefix>io.getquill.context.jasync</prefix>
</filter>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>DEBUG</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<!-- <filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>TRACE</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter> -->
</appender> </appender>
<appender name="Sentry" class="io.sentry.logback.SentryAppender"> <appender name="Sentry" class="io.sentry.logback.SentryAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>WARN</level> <level>WARN</level>
</filter> </filter>
<filter class="ch.qos.logback.core.filter.EvaluatorFilter">
<evaluator>
<matcher>
<Name>encrypted</Name>
<!-- occurs during logging or relogging complications; the messages are useless -->
<regex>Unexpected packet type EncryptedPacket</regex>
</matcher>
<expression>encrypted.matches(formattedMessage)</expression>
</evaluator>
<OnMatch>DENY</OnMatch>
<OnMismatch>NEUTRAL</OnMismatch>
</filter>
</appender> </appender>
<root level="TRACE"> <root level="TRACE">
<appender-ref ref="STDOUT"/> <appender-ref ref="STDOUT"/>
<appender-ref ref="FILE-TRACE"/> <appender-ref ref="FILE-GENERAL"/>
<appender-ref ref="FILE-DEBUG"/> <appender-ref ref="FILE-DEBUG"/>
<appender-ref ref="Sentry"/> <appender-ref ref="Sentry"/>
</root> </root>

View file

@ -0,0 +1,77 @@
// Copyright (c) 2021 PSForever
package net.psforever.filters;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.filter.Filter;
import ch.qos.logback.core.spi.FilterReply;
import java.util.Iterator;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
/**
* Disrupts a variety of logging messages that would otherwise repeat within a certain frame of time.
* Until there is a significant break in time between the logging of the duplicated messages,
* those messages are denied logging.
* Only exact matches via hash are denied.
* Be aware of the pitfalls of default `String` hash code.
*/
public class ApplyCooldownToDuplicateLoggingFilter extends Filter<ILoggingEvent> {
private long cooldown;
private ConcurrentHashMap<String, Long> messageMap;
private long cleaning = 900000L; //default: 15min
private ScheduledExecutorService housecleaning;
@Override
public FilterReply decide(ILoggingEvent event) {
String msg = event.getMessage();
long currTime = System.currentTimeMillis();
Long previousTime = messageMap.put(msg, currTime);
if (previousTime != null && previousTime + cooldown > currTime) {
return FilterReply.DENY;
} else {
return FilterReply.NEUTRAL;
}
}
public void setCooldown(Long duration) {
this.cooldown = duration;
}
public void setCleaning(Long duration) {
this.cleaning = duration;
}
@Override
public void start() {
if (this.cooldown != 0L) {
messageMap = new ConcurrentHashMap<>(1000);
housecleaning = Executors.newScheduledThreadPool(1);
Runnable task = () -> {
//being "concurrent" should be enough
//the worst that can happen is two of the same message back-to-back in the log once in a while
if (!messageMap.isEmpty()) {
long currTime = System.currentTimeMillis();
Iterator<String> oldLogMessages = messageMap.entrySet().stream()
.filter( entry -> entry.getValue() + cooldown < currTime )
.map( Map.Entry::getKey )
.iterator();
oldLogMessages.forEachRemaining(key -> messageMap.remove(key));
}
};
housecleaning.scheduleWithFixedDelay(task, cleaning, cleaning, TimeUnit.MILLISECONDS);
super.start();
}
}
@Override
public void stop() {
housecleaning.shutdown();
messageMap.clear();
messageMap = null;
super.stop();
}
}

View file

@ -0,0 +1,38 @@
// Copyright (c) 2021 PSForever
package net.psforever.filters;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.filter.Filter;
import ch.qos.logback.core.spi.FilterReply;
/**
* Disrupts a variety of logging messages that originate from specific loggers.
* A comparison of the prefix text of the logger handling the event is performed,
* with a positive match denying that event being appended.
* The full prefix must be provided, as the filter uses the fully authenticated name
* and the logger occasionally displays an abbreviated form for longer names,
* e.g., "i.g.context.jasync ..." instead of "io.getquill.context.jasync ...".
*/
public class LoggerPrefixFilter extends Filter<ILoggingEvent> {
private String prefix;
@Override
public FilterReply decide(ILoggingEvent event) {
if (isStarted() && event.getLoggerName().startsWith(prefix)) {
return FilterReply.DENY;
} else {
return FilterReply.NEUTRAL;
}
}
public void setPrefix(String name) {
this.prefix = name;
}
@Override
public void start() {
if (this.prefix != null) {
super.start();
}
}
}

View file

@ -485,7 +485,7 @@ class PacketCodingActorITest extends ActorTest {
BasicCharacterData( BasicCharacterData(
"IlllIIIlllIlIllIlllIllI", "IlllIIIlllIlIllIlllIllI",
PlanetSideEmpire.VS, PlanetSideEmpire.VS,
CharacterGender.Female, CharacterSex.Female,
41, 41,
CharacterVoice.Voice1 CharacterVoice.Voice1
), ),
@ -600,7 +600,7 @@ class PacketCodingActorKTest extends ActorTest {
BasicCharacterData( BasicCharacterData(
"IlllIIIlllIlIllIlllIllI", "IlllIIIlllIlIllIlllIllI",
PlanetSideEmpire.VS, PlanetSideEmpire.VS,
CharacterGender.Female, CharacterSex.Female,
41, 41,
CharacterVoice.Voice1 CharacterVoice.Voice1
), ),

View file

@ -48,7 +48,7 @@ class AutoRepairFacilityIntegrationTest extends FreedContextActorTest {
val building = Building.Structure(StructureType.Facility)(name = "integ-fac-test-building", guid = 6, map_id = 0, zone, context) val building = Building.Structure(StructureType.Facility)(name = "integ-fac-test-building", guid = 6, map_id = 0, zone, context)
building.Invalidate() building.Invalidate()
val player = Player(Avatar(0, "TestCharacter", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) val player = Player(Avatar(0, "TestCharacter", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute))
player.Spawn() player.Spawn()
val weapon = new Tool(GlobalDefinitions.suppressor) val weapon = new Tool(GlobalDefinitions.suppressor)
val terminal = new Terminal(AutoRepairIntegrationTest.terminal_definition) val terminal = new Terminal(AutoRepairIntegrationTest.terminal_definition)
@ -164,7 +164,7 @@ class AutoRepairFacilityIntegrationAntGiveNtuTest extends FreedContextActorTest
expectNoMessage(1000 milliseconds) expectNoMessage(1000 milliseconds)
var buildingMap = new TrieMap[Int, Building]() var buildingMap = new TrieMap[Int, Building]()
val guid = new NumberPoolHub(new MaxNumberSource(max = 10)) val guid = new NumberPoolHub(new MaxNumberSource(max = 10))
val player = Player(Avatar(0, "TestCharacter", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) val player = Player(Avatar(0, "TestCharacter", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute))
val ant = Vehicle(GlobalDefinitions.ant) val ant = Vehicle(GlobalDefinitions.ant)
val terminal = new Terminal(AutoRepairIntegrationTest.slow_terminal_definition) val terminal = new Terminal(AutoRepairIntegrationTest.slow_terminal_definition)
val silo = new ResourceSilo() val silo = new ResourceSilo()
@ -255,7 +255,7 @@ class AutoRepairFacilityIntegrationTerminalDestroyedTerminalAntTest extends Free
expectNoMessage(1000 milliseconds) expectNoMessage(1000 milliseconds)
var buildingMap = new TrieMap[Int, Building]() var buildingMap = new TrieMap[Int, Building]()
val guid = new NumberPoolHub(new MaxNumberSource(max = 10)) val guid = new NumberPoolHub(new MaxNumberSource(max = 10))
val player = Player(Avatar(0, "TestCharacter", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) val player = Player(Avatar(0, "TestCharacter", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute))
val weapon = new Tool(GlobalDefinitions.suppressor) val weapon = new Tool(GlobalDefinitions.suppressor)
val ant = Vehicle(GlobalDefinitions.ant) val ant = Vehicle(GlobalDefinitions.ant)
val terminal = new Terminal(AutoRepairIntegrationTest.slow_terminal_definition) val terminal = new Terminal(AutoRepairIntegrationTest.slow_terminal_definition)
@ -357,7 +357,7 @@ class AutoRepairFacilityIntegrationTerminalIncompleteRepairTest extends FreedCon
expectNoMessage(1000 milliseconds) expectNoMessage(1000 milliseconds)
var buildingMap = new TrieMap[Int, Building]() var buildingMap = new TrieMap[Int, Building]()
val guid = new NumberPoolHub(new MaxNumberSource(max = 10)) val guid = new NumberPoolHub(new MaxNumberSource(max = 10))
val player = Player(Avatar(0, "TestCharacter", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) val player = Player(Avatar(0, "TestCharacter", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute))
val weapon = new Tool(GlobalDefinitions.suppressor) val weapon = new Tool(GlobalDefinitions.suppressor)
val ant = Vehicle(GlobalDefinitions.ant) val ant = Vehicle(GlobalDefinitions.ant)
val terminal = new Terminal(AutoRepairIntegrationTest.slow_terminal_definition) val terminal = new Terminal(AutoRepairIntegrationTest.slow_terminal_definition)
@ -485,7 +485,7 @@ class AutoRepairTowerIntegrationTest extends FreedContextActorTest {
val building = Building.Structure(StructureType.Tower)(name = "integ-twr-test-building", guid = 6, map_id = 0, zone, context) val building = Building.Structure(StructureType.Tower)(name = "integ-twr-test-building", guid = 6, map_id = 0, zone, context)
building.Invalidate() building.Invalidate()
val player = Player(Avatar(0, "TestCharacter", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) val player = Player(Avatar(0, "TestCharacter", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute))
player.Spawn() player.Spawn()
val weapon = new Tool(GlobalDefinitions.suppressor) val weapon = new Tool(GlobalDefinitions.suppressor)
val terminal = new Terminal(AutoRepairIntegrationTest.terminal_definition) val terminal = new Terminal(AutoRepairIntegrationTest.terminal_definition)

View file

@ -20,13 +20,13 @@ import net.psforever.objects.vital.projectile.ProjectileReason
import net.psforever.objects.zones.{Zone, ZoneMap} import net.psforever.objects.zones.{Zone, ZoneMap}
import net.psforever.objects.{GlobalDefinitions, Player, Tool} import net.psforever.objects.{GlobalDefinitions, Player, Tool}
import net.psforever.services.ServiceManager import net.psforever.services.ServiceManager
import net.psforever.types.{CharacterGender, CharacterVoice, PlanetSideEmpire, Vector3} import net.psforever.types.{CharacterSex, CharacterVoice, PlanetSideEmpire, Vector3}
import scala.concurrent.duration._ import scala.concurrent.duration._
class AutoRepairRequestNtuTest extends FreedContextActorTest { class AutoRepairRequestNtuTest extends FreedContextActorTest {
ServiceManager.boot ServiceManager.boot
val player = Player(Avatar(0, "TestCharacter", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) val player = Player(Avatar(0, "TestCharacter", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute))
player.Spawn() player.Spawn()
val weapon = new Tool(GlobalDefinitions.suppressor) val weapon = new Tool(GlobalDefinitions.suppressor)
val terminal = new Terminal(AutoRepairTest.terminal_definition) val terminal = new Terminal(AutoRepairTest.terminal_definition)
@ -87,7 +87,7 @@ class AutoRepairRequestNtuTest extends FreedContextActorTest {
class AutoRepairRequestNtuRepeatTest extends FreedContextActorTest { class AutoRepairRequestNtuRepeatTest extends FreedContextActorTest {
ServiceManager.boot ServiceManager.boot
val player = Player(Avatar(0, "TestCharacter", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) val player = Player(Avatar(0, "TestCharacter", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute))
player.Spawn() player.Spawn()
val weapon = new Tool(GlobalDefinitions.suppressor) val weapon = new Tool(GlobalDefinitions.suppressor)
val terminal = new Terminal(AutoRepairTest.terminal_definition) val terminal = new Terminal(AutoRepairTest.terminal_definition)
@ -151,7 +151,7 @@ class AutoRepairRequestNtuRepeatTest extends FreedContextActorTest {
class AutoRepairNoRequestNtuTest extends FreedContextActorTest { class AutoRepairNoRequestNtuTest extends FreedContextActorTest {
ServiceManager.boot ServiceManager.boot
val player = Player(Avatar(0, "TestCharacter", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) val player = Player(Avatar(0, "TestCharacter", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute))
player.Spawn() player.Spawn()
val weapon = new Tool(GlobalDefinitions.suppressor) val weapon = new Tool(GlobalDefinitions.suppressor)
val terminal = new Terminal(AutoRepairTest.terminal_definition) val terminal = new Terminal(AutoRepairTest.terminal_definition)
@ -209,7 +209,7 @@ class AutoRepairNoRequestNtuTest extends FreedContextActorTest {
class AutoRepairRestoreRequestNtuTest extends FreedContextActorTest { class AutoRepairRestoreRequestNtuTest extends FreedContextActorTest {
ServiceManager.boot ServiceManager.boot
val player = Player(Avatar(0, "TestCharacter", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) val player = Player(Avatar(0, "TestCharacter", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute))
player.Spawn() player.Spawn()
val weapon = new Tool(GlobalDefinitions.suppressor) val weapon = new Tool(GlobalDefinitions.suppressor)
val terminal = new Terminal(AutoRepairTest.terminal_definition) val terminal = new Terminal(AutoRepairTest.terminal_definition)
@ -274,7 +274,7 @@ class AutoRepairRestoreRequestNtuTest extends FreedContextActorTest {
class AutoRepairRepairWithNtuTest extends FreedContextActorTest { class AutoRepairRepairWithNtuTest extends FreedContextActorTest {
ServiceManager.boot ServiceManager.boot
val player = Player(Avatar(0, "TestCharacter", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) val player = Player(Avatar(0, "TestCharacter", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute))
player.Spawn() player.Spawn()
val weapon = new Tool(GlobalDefinitions.suppressor) val weapon = new Tool(GlobalDefinitions.suppressor)
val terminal = new Terminal(AutoRepairTest.terminal_definition) val terminal = new Terminal(AutoRepairTest.terminal_definition)
@ -336,7 +336,7 @@ class AutoRepairRepairWithNtuTest extends FreedContextActorTest {
class AutoRepairRepairWithNtuUntilDoneTest extends FreedContextActorTest { class AutoRepairRepairWithNtuUntilDoneTest extends FreedContextActorTest {
ServiceManager.boot ServiceManager.boot
val player = Player(Avatar(0, "TestCharacter", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) val player = Player(Avatar(0, "TestCharacter", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute))
player.Spawn() player.Spawn()
val weapon = new Tool(GlobalDefinitions.suppressor) val weapon = new Tool(GlobalDefinitions.suppressor)
val terminal = new Terminal(AutoRepairTest.terminal_definition) val terminal = new Terminal(AutoRepairTest.terminal_definition)

View file

@ -58,7 +58,7 @@ class VehicleSpawnControl3Test extends ActorTest {
val (vehicle, player, pad, zone) = VehicleSpawnPadControlTest.SetUpAgents(PlanetSideEmpire.TR) val (vehicle, player, pad, zone) = VehicleSpawnPadControlTest.SetUpAgents(PlanetSideEmpire.TR)
//we can recycle the vehicle and the player for each order //we can recycle the vehicle and the player for each order
val probe = new TestProbe(system, "zone-events") val probe = new TestProbe(system, "zone-events")
val player2 = Player(Avatar(0, "test2", player.Faction, CharacterGender.Male, 0, CharacterVoice.Mute)) val player2 = Player(Avatar(0, "test2", player.Faction, CharacterSex.Male, 0, CharacterVoice.Mute))
player2.GUID = PlanetSideGUID(11) player2.GUID = PlanetSideGUID(11)
player2.Continent = zone.id player2.Continent = zone.id
player2.Spawn() player2.Spawn()
@ -216,7 +216,7 @@ object VehicleSpawnPadControlTest {
import net.psforever.objects.serverobject.structures.Building import net.psforever.objects.serverobject.structures.Building
import net.psforever.objects.vehicles.VehicleControl import net.psforever.objects.vehicles.VehicleControl
import net.psforever.objects.Tool import net.psforever.objects.Tool
import net.psforever.types.CharacterGender import net.psforever.types.CharacterSex
val vehicle = Vehicle(GlobalDefinitions.two_man_assault_buggy) val vehicle = Vehicle(GlobalDefinitions.two_man_assault_buggy)
val weapon = vehicle.WeaponControlledFromSeat(1).get.asInstanceOf[Tool] val weapon = vehicle.WeaponControlledFromSeat(1).get.asInstanceOf[Tool]
@ -245,7 +245,7 @@ object VehicleSpawnPadControlTest {
pad.Owner.Faction = faction pad.Owner.Faction = faction
pad.Zone = zone pad.Zone = zone
guid.register(pad, "test-pool") guid.register(pad, "test-pool")
val player = Player(Avatar(0, "test", faction, CharacterGender.Male, 0, CharacterVoice.Mute)) val player = Player(Avatar(0, "test", faction, CharacterSex.Male, 0, CharacterVoice.Mute))
guid.register(player, "test-pool") guid.register(player, "test-pool")
player.Zone = zone player.Zone = zone
player.Spawn() player.Spawn()

View file

@ -181,7 +181,7 @@ class DroptItemTest extends ActorTest {
} }
class LoadPlayerTest extends ActorTest { class LoadPlayerTest extends ActorTest {
val obj = Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.VS, CharacterGender.Female, 1, CharacterVoice.Voice1)) val obj = Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.VS, CharacterSex.Female, 1, CharacterVoice.Voice1))
obj.GUID = PlanetSideGUID(10) obj.GUID = PlanetSideGUID(10)
obj.Slot(5).Equipment.get.GUID = PlanetSideGUID(11) obj.Slot(5).Equipment.get.GUID = PlanetSideGUID(11)
val c1data = obj.Definition.Packet.DetailedConstructorData(obj).get val c1data = obj.Definition.Packet.DetailedConstructorData(obj).get
@ -335,7 +335,7 @@ class PlayerStateTest extends ActorTest {
} }
class PickupItemTest extends ActorTest { class PickupItemTest extends ActorTest {
val obj = Player(Avatar(0, "TestCharacter", PlanetSideEmpire.VS, CharacterGender.Female, 1, CharacterVoice.Voice1)) val obj = Player(Avatar(0, "TestCharacter", PlanetSideEmpire.VS, CharacterSex.Female, 1, CharacterVoice.Voice1))
val tool = Tool(GlobalDefinitions.beamer) val tool = Tool(GlobalDefinitions.beamer)
tool.GUID = PlanetSideGUID(40) tool.GUID = PlanetSideGUID(40)
@ -512,7 +512,7 @@ class AvatarReleaseTest extends FreedContextActorTest {
GUID(guid) GUID(guid)
} }
zone.init(context) zone.init(context)
val obj = Player(Avatar(0, "TestCharacter", PlanetSideEmpire.VS, CharacterGender.Female, 1, CharacterVoice.Voice1)) val obj = Player(Avatar(0, "TestCharacter", PlanetSideEmpire.VS, CharacterSex.Female, 1, CharacterVoice.Voice1))
guid.register(obj) guid.register(obj)
guid.register(obj.Slot(5).Equipment.get) guid.register(obj.Slot(5).Equipment.get)
obj.Zone = zone obj.Zone = zone
@ -563,7 +563,7 @@ class AvatarReleaseEarly1Test extends FreedContextActorTest {
GUID(guid) GUID(guid)
} }
zone.init(context) zone.init(context)
val obj = Player(Avatar(0, "TestCharacter", PlanetSideEmpire.VS, CharacterGender.Female, 1, CharacterVoice.Voice1)) val obj = Player(Avatar(0, "TestCharacter", PlanetSideEmpire.VS, CharacterSex.Female, 1, CharacterVoice.Voice1))
guid.register(obj) guid.register(obj)
guid.register(obj.Slot(5).Equipment.get) guid.register(obj.Slot(5).Equipment.get)
obj.Zone = zone obj.Zone = zone
@ -615,13 +615,13 @@ class AvatarReleaseEarly2Test extends FreedContextActorTest {
GUID(guid) GUID(guid)
} }
zone.init(context) zone.init(context)
val obj = Player(Avatar(0, "TestCharacter", PlanetSideEmpire.VS, CharacterGender.Female, 1, CharacterVoice.Voice1)) val obj = Player(Avatar(0, "TestCharacter", PlanetSideEmpire.VS, CharacterSex.Female, 1, CharacterVoice.Voice1))
guid.register(obj) guid.register(obj)
guid.register(obj.Slot(5).Equipment.get) guid.register(obj.Slot(5).Equipment.get)
obj.Zone = zone obj.Zone = zone
obj.Release obj.Release
val objAlt = Player( val objAlt = Player(
Avatar(0, "TestCharacter2", PlanetSideEmpire.NC, CharacterGender.Male, 1, CharacterVoice.Voice1) Avatar(0, "TestCharacter2", PlanetSideEmpire.NC, CharacterSex.Male, 1, CharacterVoice.Voice1)
) //necessary clutter ) //necessary clutter
objAlt.GUID = PlanetSideGUID(3) objAlt.GUID = PlanetSideGUID(3)
objAlt.Slot(5).Equipment.get.GUID = PlanetSideGUID(4) objAlt.Slot(5).Equipment.get.GUID = PlanetSideGUID(4)

View file

@ -100,10 +100,9 @@ class LoginActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], conne
val clientVersion = s"Client Version: $majorVersion.$minorVersion.$revision, $buildDate" val clientVersion = s"Client Version: $majorVersion.$minorVersion.$revision, $buildDate"
if (token.isDefined) if (token.isDefined)
log.info(s"New login UN:$username Token:${token.get}. $clientVersion") log.trace(s"New login UN:$username Token:${token.get}. $clientVersion")
else { else {
// log.info(s"New login UN:$username PW:$password. $clientVersion") log.trace(s"New login UN:$username. $clientVersion")
log.info(s"New login UN:$username. $clientVersion")
} }
accountLogin(username, password.get) accountLogin(username, password.get)
@ -115,7 +114,7 @@ class LoginActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], conne
middlewareActor ! MiddlewareActor.Close() middlewareActor ! MiddlewareActor.Close()
case _ => case _ =>
log.debug(s"Unhandled GamePacket $pkt") log.warn(s"Unhandled GamePacket $pkt")
} }
def accountLogin(username: String, password: String): Unit = { def accountLogin(username: String, password: String): Unit = {
@ -197,7 +196,7 @@ class LoginActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], conne
} }
def loginPwdFailureResponse(username: String, newToken: String) = { def loginPwdFailureResponse(username: String, newToken: String) = {
log.info(s"Failed login to account $username") log.warn(s"Failed login to account $username")
middlewareActor ! MiddlewareActor.Send( middlewareActor ! MiddlewareActor.Send(
LoginRespMessage( LoginRespMessage(
newToken, newToken,
@ -212,7 +211,7 @@ class LoginActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], conne
} }
def loginFailureResponse(username: String, newToken: String) = { def loginFailureResponse(username: String, newToken: String) = {
log.info("DB problem") log.warn("DB problem")
middlewareActor ! MiddlewareActor.Send( middlewareActor ! MiddlewareActor.Send(
LoginRespMessage( LoginRespMessage(
newToken, newToken,
@ -227,7 +226,7 @@ class LoginActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], conne
} }
def loginAccountFailureResponse(username: String, newToken: String) = { def loginAccountFailureResponse(username: String, newToken: String) = {
log.info(s"Account $username inactive") log.warn(s"Account $username inactive")
middlewareActor ! MiddlewareActor.Send( middlewareActor ! MiddlewareActor.Send(
LoginRespMessage( LoginRespMessage(
newToken, newToken,

View file

@ -292,7 +292,7 @@ class MiddlewareActor(
Behaviors.same Behaviors.same
case _: ChangeFireModeMessage => case _: ChangeFireModeMessage =>
log.trace(s"What is this packet that just arrived? ${msg.toString}") log.trace(s"What is this packet that just arrived? $msg")
//ignore //ignore
Behaviors.same Behaviors.same

View file

@ -82,7 +82,7 @@ object SocketActor {
socketActor ! toSocket(message) socketActor ! toSocket(message)
} }
} else { } else {
log.info("Network simulator dropped packet") log.trace("Network simulator dropped packet")
} }
} }

View file

@ -47,7 +47,7 @@ import net.psforever.packet.game.{
PlanetsideAttributeMessage PlanetsideAttributeMessage
} }
import net.psforever.types.{ import net.psforever.types.{
CharacterGender, CharacterSex,
CharacterVoice, CharacterVoice,
ExoSuitType, ExoSuitType,
ImplantType, ImplantType,
@ -98,7 +98,7 @@ object AvatarActor {
name: String, name: String,
head: Int, head: Int,
voice: CharacterVoice.Value, voice: CharacterVoice.Value,
gender: CharacterGender.Value, gender: CharacterSex,
empire: PlanetSideEmpire.Value empire: PlanetSideEmpire.Value
) extends Command ) extends Command
@ -306,7 +306,7 @@ class AvatarActor(
_.factionId -> lift(empire.id), _.factionId -> lift(empire.id),
_.headId -> lift(head), _.headId -> lift(head),
_.voiceId -> lift(voice.id), _.voiceId -> lift(voice.id),
_.genderId -> lift(gender.id), _.genderId -> lift(gender.value),
_.bep -> lift(Config.app.game.newAvatar.br.experience), _.bep -> lift(Config.app.game.newAvatar.br.experience),
_.cep -> lift(Config.app.game.newAvatar.cr.experience) _.cep -> lift(Config.app.game.newAvatar.cr.experience)
) )
@ -326,7 +326,7 @@ class AvatarActor(
result.onComplete { result.onComplete {
case Success(_) => case Success(_) =>
log.debug(s"created character ${name} for account ${account.name}") log.debug(s"AvatarActor: created character ${name} for account ${account.name}")
sessionActor ! SessionActor.SendResponse(ActionResultMessage.Pass) sessionActor ! SessionActor.SendResponse(ActionResultMessage.Pass)
sendAvatars(account) sendAvatars(account)
case Failure(e) => log.error(e)("db failure") case Failure(e) => log.error(e)("db failure")
@ -353,7 +353,7 @@ class AvatarActor(
result.onComplete { result.onComplete {
case Success(_) => case Success(_) =>
log.debug(s"avatar $id deleted") log.debug(s"AvatarActor: avatar $id deleted")
sessionActor ! SessionActor.SendResponse(ActionResultMessage.Pass) sessionActor ! SessionActor.SendResponse(ActionResultMessage.Pass)
sendAvatars(account) sendAvatars(account)
case Failure(e) => log.error(e)("db failure") case Failure(e) => log.error(e)("db failure")
@ -485,14 +485,20 @@ class AvatarActor(
ItemTransactionResultMessage(terminalGuid, TransactionType.Learn, success = false) ItemTransactionResultMessage(terminalGuid, TransactionType.Learn, success = false)
) )
} else { } else {
var requiredByCert: Set[Certification] = Set(certification)
val deps = Certification.values.filter(_.requires.contains(certification)).toSet var removeThese: Set[Certification] = Set(certification)
val remove = deps ++ Certification.values.filter(_.replaces.intersect(deps).nonEmpty).toSet + certification val allCerts: Set[Certification] = Certification.values.toSet
do {
removeThese = allCerts.filter { testingCert =>
testingCert.requires.intersect(removeThese).nonEmpty
}
requiredByCert = requiredByCert ++ removeThese
} while(removeThese.nonEmpty)
Future Future
.sequence( .sequence(
avatar.certifications avatar.certifications
.intersect(remove) .intersect(requiredByCert)
.map(cert => { .map(cert => {
ctx ctx
.run( .run(
@ -511,7 +517,7 @@ class AvatarActor(
ItemTransactionResultMessage(terminalGuid, TransactionType.Sell, success = false) ItemTransactionResultMessage(terminalGuid, TransactionType.Sell, success = false)
) )
case Success(certs) => case Success(certs) =>
context.self ! ReplaceAvatar(avatar.copy(certifications = avatar.certifications.diff(remove))) context.self ! ReplaceAvatar(avatar.copy(certifications = avatar.certifications.diff(certs)))
certs.foreach { cert => certs.foreach { cert =>
sessionActor ! SessionActor.SendResponse( sessionActor ! SessionActor.SendResponse(
PlanetsideAttributeMessage(session.get.player.GUID, 25, cert.value) PlanetsideAttributeMessage(session.get.player.GUID, 25, cert.value)
@ -1269,7 +1275,7 @@ class AvatarActor(
.run(query[persistence.Loadout].filter(_.avatarId == lift(avatar.id))) .run(query[persistence.Loadout].filter(_.avatarId == lift(avatar.id)))
.map { loadouts => .map { loadouts =>
loadouts.map { loadout => loadouts.map { loadout =>
val doll = new Player(Avatar(0, "doll", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) val doll = new Player(Avatar(0, "doll", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute))
doll.ExoSuit = ExoSuitType(loadout.exosuitId) doll.ExoSuit = ExoSuitType(loadout.exosuitId)
loadout.items.split("/").foreach { loadout.items.split("/").foreach {

View file

@ -121,8 +121,6 @@ class ChatActor(
Behaviors.same Behaviors.same
case Message(message) => case Message(message) =>
log.info("Chat: " + message)
val gmCommandAllowed = val gmCommandAllowed =
session.account.gm || Config.app.development.unprivilegedGmCommands.contains(message.messageType) session.account.gm || Config.app.development.unprivilegedGmCommands.contains(message.messageType)
@ -916,7 +914,7 @@ class ChatActor(
} }
case _ => case _ =>
log.info(s"unhandled chat message $message") log.warn(s"Unhandled chat message $message")
} }
Behaviors.same Behaviors.same
@ -945,7 +943,7 @@ class ChatActor(
val args = message.contents.split(" ") val args = message.contents.split(" ")
val (name, time) = (args.lift(0), args.lift(1)) match { val (name, time) = (args.lift(0), args.lift(1)) match {
case (Some(name), _) if name != session.player.Name => case (Some(name), _) if name != session.player.Name =>
log.error("received silence message for other player") log.error("Received silence message for other player")
(None, None) (None, None)
case (Some(name), None) => (Some(name), Some(5)) case (Some(name), None) => (Some(name), Some(5))
case (Some(name), Some(time)) if time.toIntOption.isDefined => (Some(name), Some(time.toInt)) case (Some(name), Some(time)) if time.toIntOption.isDefined => (Some(name), Some(time.toInt))
@ -976,11 +974,11 @@ class ChatActor(
} }
case (name, time) => case (name, time) =>
log.error(s"bad silence args $name $time") log.warn(s"Bad silence args $name $time")
} }
case _ => case _ =>
log.error(s"unexpected messageType $message") log.warn(s"Unexpected messageType $message")
} }
Behaviors.same Behaviors.same

View file

@ -26,7 +26,7 @@ class TcpListener[T <: Actor](actorClass: Class[T], nextActorName: String, liste
def receive = { def receive = {
case Tcp.Bound(local) => case Tcp.Bound(local) =>
log.info(s"Now listening on TCP:$local") log.debug(s"Now listening on TCP:$local")
context.become(ready(sender())) context.become(ready(sender()))
case Tcp.CommandFailed(Tcp.Bind(_, address, _, _, _)) => case Tcp.CommandFailed(Tcp.Bind(_, address, _, _, _)) =>

View file

@ -2,7 +2,7 @@
package net.psforever.objects package net.psforever.objects
import akka.actor.ActorRef import akka.actor.ActorRef
import net.psforever.objects.avatar.Avatar import net.psforever.objects.avatar.{Avatar, Certification}
import scala.concurrent.duration._ import scala.concurrent.duration._
import net.psforever.objects.ce.{Deployable, DeployedItem} import net.psforever.objects.ce.{Deployable, DeployedItem}
@ -13,7 +13,7 @@ import net.psforever.services.RemoverActor
import net.psforever.services.local.{LocalAction, LocalServiceMessage} import net.psforever.services.local.{LocalAction, LocalServiceMessage}
object Deployables { object Deployables {
private val log = org.log4s.getLogger("Deployables") //private val log = org.log4s.getLogger("Deployables")
object Make { object Make {
def apply(item: DeployedItem.Value): () => PlanetSideGameObject with Deployable = cemap(item) def apply(item: DeployedItem.Value): () => PlanetSideGameObject with Deployable = cemap(item)
@ -128,7 +128,6 @@ object Deployables {
* @param avatar the player's core * @param avatar the player's core
*/ */
def InitializeDeployableQuantities(avatar: Avatar): Boolean = { def InitializeDeployableQuantities(avatar: Avatar): Boolean = {
log.info("Setting up combat engineering ...")
avatar.deployables.Initialize(avatar.certifications) avatar.deployables.Initialize(avatar.certifications)
} }
@ -137,8 +136,35 @@ object Deployables {
* @param avatar the player's core * @param avatar the player's core
*/ */
def InitializeDeployableUIElements(avatar: Avatar): List[(Int, Int, Int, Int)] = { def InitializeDeployableUIElements(avatar: Avatar): List[(Int, Int, Int, Int)] = {
log.info("Setting up combat engineering UI ...")
avatar.deployables.UpdateUI() avatar.deployables.UpdateUI()
} }
/**
* Compare sets of certifications to determine if
* the requested `Engineering`-like certification requirements of the one group can be found in a another group.
* @see `CertificationType`
* @param sample the certifications to be compared against
* @param test the desired certifications
* @return `true`, if the desired certification requirements are met; `false`, otherwise
*/
def constructionItemPermissionComparison(
sample: Set[Certification],
test: Set[Certification]
): Boolean = {
import Certification._
val engineeringCerts: Set[Certification] = Set(AssaultEngineering, FortificationEngineering)
val testDiff: Set[Certification] = test diff (engineeringCerts ++ Set(AdvancedEngineering))
//substitute `AssaultEngineering` and `FortificationEngineering` for `AdvancedEngineering`
val sampleIntersect = if (sample contains AdvancedEngineering) {
engineeringCerts
} else {
sample intersect engineeringCerts
}
val testIntersect = if (test contains AdvancedEngineering) {
engineeringCerts
} else {
test intersect engineeringCerts
}
(sample intersect testDiff equals testDiff) && (sampleIntersect intersect testIntersect equals testIntersect)
}
} }

View file

@ -1646,7 +1646,7 @@ object GlobalDefinitions {
1.093750f // same regardless of gender 1.093750f // same regardless of gender
} else if (p.ExoSuit == ExoSuitType.MAX) { } else if (p.ExoSuit == ExoSuitType.MAX) {
1.906250f // VS female MAX 1.906250f // VS female MAX
} else if (p.Sex == CharacterGender.Male) { } else if (p.Sex == CharacterSex.Male) {
obj.Definition.MaxDepth // male obj.Definition.MaxDepth // male
} else { } else {
1.546875f // female 1.546875f // female

View file

@ -79,7 +79,7 @@ class Player(var avatar: Avatar)
def Faction: PlanetSideEmpire.Value = avatar.faction def Faction: PlanetSideEmpire.Value = avatar.faction
def Sex: CharacterGender.Value = avatar.sex def Sex: CharacterSex = avatar.sex
def Head: Int = avatar.head def Head: Int = avatar.head

View file

@ -226,7 +226,7 @@ object Vehicles {
* @param unk na; used by `HackMessage` as `unk5` * @param unk na; used by `HackMessage` as `unk5`
*/ */
def FinishHackingVehicle(target: Vehicle, hacker: Player, unk: Long)(): Unit = { def FinishHackingVehicle(target: Vehicle, hacker: Player, unk: Long)(): Unit = {
log.info(s"Vehicle guid: ${target.GUID} has been jacked") log.info(s"${hacker.Name} has jacked a ${target.Definition.Name}")
val zone = target.Zone val zone = target.Zone
// Forcefully dismount any cargo // Forcefully dismount any cargo
target.CargoHolds.values.foreach(cargoHold => { target.CargoHolds.values.foreach(cargoHold => {

View file

@ -72,7 +72,7 @@ case class Avatar(
id: Int, id: Int,
name: String, name: String,
faction: PlanetSideEmpire.Value, faction: PlanetSideEmpire.Value,
sex: CharacterGender.Value, sex: CharacterSex,
head: Int, head: Int,
voice: CharacterVoice.Value, voice: CharacterVoice.Value,
bep: Long = 0, bep: Long = 0,

View file

@ -328,7 +328,7 @@ class PlayerControl(player: Player, avatarActor: typed.ActorRef[AvatarActor.Comm
) )
case Terminal.InfantryLoadout(exosuit, subtype, holsters, inventory) => case Terminal.InfantryLoadout(exosuit, subtype, holsters, inventory) =>
log.info(s"wants to change equipment loadout to their option #${msg.unk1 + 1}") log.info(s"${player.Name} wants to change equipment loadout to their option #${msg.unk1 + 1}")
val fallbackSubtype = 0 val fallbackSubtype = 0
val fallbackSuit = ExoSuitType.Standard val fallbackSuit = ExoSuitType.Standard
val originalSuit = player.ExoSuit val originalSuit = player.ExoSuit
@ -371,7 +371,7 @@ class PlayerControl(player: Player, avatarActor: typed.ActorRef[AvatarActor.Comm
(exosuit, subtype) (exosuit, subtype)
} else { } else {
log.warn( log.warn(
s"no longer has permission to wear the exo-suit type $exosuit; will wear $fallbackSuit instead" s"${player.Name} no longer has permission to wear the exo-suit type $exosuit; will wear $fallbackSuit instead"
) )
(fallbackSuit, fallbackSubtype) (fallbackSuit, fallbackSubtype)
} }
@ -710,6 +710,12 @@ class PlayerControl(player: Player, avatarActor: typed.ActorRef[AvatarActor.Comm
super.CancelJammeredStatus(target) super.CancelJammeredStatus(target)
//uninitialize implants //uninitialize implants
avatarActor ! AvatarActor.DeinitializeImplants() avatarActor ! AvatarActor.DeinitializeImplants()
cause.adversarial match {
case Some(a) =>
damageLog.info(s"DisplayDestroy: ${a.defender} was killed by ${a.attacker}")
case _ =>
damageLog.info(s"DisplayDestroy: ${player.Name} killed ${player.Sex.pronounObject}self.")
}
events ! AvatarServiceMessage( events ! AvatarServiceMessage(
nameChannel, nameChannel,
AvatarAction.Killed(player_guid, target.VehicleSeated) AvatarAction.Killed(player_guid, target.VehicleSeated)

View file

@ -30,7 +30,7 @@ class CorpseConverter extends AvatarConverter {
*/ */
private def MakeAppearanceData(obj: Player): Int => CharacterAppearanceData = { private def MakeAppearanceData(obj: Player): Int => CharacterAppearanceData = {
val aa: Int => CharacterAppearanceA = CharacterAppearanceA( val aa: Int => CharacterAppearanceA = CharacterAppearanceA(
BasicCharacterData(obj.Name, obj.Faction, CharacterGender.Male, 0, CharacterVoice.Mute), BasicCharacterData(obj.Name, obj.Faction, CharacterSex.Male, 0, CharacterVoice.Mute),
CommonFieldData( CommonFieldData(
obj.Faction, obj.Faction,
bops = false, bops = false,

View file

@ -44,7 +44,7 @@ class NumberPoolActor(pool: NumberPool) extends Actor {
sender() ! NumberPoolActor.ReturnNumberResult(number, ex, id) sender() ! NumberPoolActor.ReturnNumberResult(number, ex, id)
case msg => case msg =>
log.info(s"received an unexpected message - ${msg.toString}") log.warn(s"Received an unexpected message - ${msg.toString}")
} }
} }

View file

@ -103,7 +103,7 @@ class UniqueNumberSystem(private val guid: NumberPoolHub, private val poolActors
} }
} catch { } catch {
case _: Exception => case _: Exception =>
log.info(s"$obj is already unregistered") log.warn(s"$obj is already unregistered")
callback ! Success(obj) callback ! Success(obj)
} }

View file

@ -104,7 +104,7 @@ object GenericHackables {
def FinishHacking(target: PlanetSideServerObject with Hackable, user: Player, unk: Long)(): Unit = { def FinishHacking(target: PlanetSideServerObject with Hackable, user: Player, unk: Long)(): Unit = {
import akka.pattern.ask import akka.pattern.ask
import scala.concurrent.duration._ import scala.concurrent.duration._
log.info(s"Hacked a $target") log.info(s"${user.Name} hacked a ${target.Definition.Name}")
// Wait for the target actor to set the HackedBy property, otherwise LocalAction.HackTemporarily will not complete properly // Wait for the target actor to set the HackedBy property, otherwise LocalAction.HackTemporarily will not complete properly
import scala.concurrent.ExecutionContext.Implicits.global import scala.concurrent.ExecutionContext.Implicits.global
val tplayer = user val tplayer = user

View file

@ -41,7 +41,7 @@ class IFFLockControl(lock: IFFLock)
) )
} else { } else {
val log = org.log4s.getLogger val log = org.log4s.getLogger
log.warn("IFF lock is being hacked, but don't know how to handle this state:") log.warn(s"IFF lock is being hacked by ${player.Faction}, but don't know how to handle this state:")
log.warn(s"Lock - Faction=${lock.Faction}, HackedBy=${lock.HackedBy}") log.warn(s"Lock - Faction=${lock.Faction}, HackedBy=${lock.HackedBy}")
log.warn(s"Player - Faction=${player.Faction}") log.warn(s"Player - Faction=${player.Faction}")
} }

View file

@ -24,7 +24,7 @@ class PainboxControl(painbox: Painbox) extends PoweredAmenityControl {
if (painbox.Owner.Continent.matches("c[0-9]")) { if (painbox.Owner.Continent.matches("c[0-9]")) {
//are we in a safe zone? //are we in a safe zone?
// todo: handle non-radius painboxes in caverns properly // todo: handle non-radius painboxes in caverns properly
log.info(s"Skipping initialization of ${painbox.GUID} on ${painbox.Owner.Continent} - ${painbox.Position}") log.debug(s"Skipping initialization of ${painbox.GUID} on ${painbox.Owner.Continent} - ${painbox.Position}")
disabled = true disabled = true
} else { } else {
if (painbox.Definition.HasNearestDoorDependency) { if (painbox.Definition.HasNearestDoorDependency) {

View file

@ -99,7 +99,7 @@ class ResourceSiloControl(resourceSilo: ResourceSilo)
// Only send updated capacitor display value to all clients if it has actually changed // Only send updated capacitor display value to all clients if it has actually changed
if (resourceSilo.CapacitorDisplay != siloDisplayBeforeChange) { if (resourceSilo.CapacitorDisplay != siloDisplayBeforeChange) {
log.trace( log.trace(
s"Silo ${resourceSilo.GUID} NTU bar level has changed from $siloDisplayBeforeChange to ${resourceSilo.CapacitorDisplay}" s"UpdateChargeLevel: silo ${resourceSilo.GUID} NTU bar level has changed from $siloDisplayBeforeChange to ${resourceSilo.CapacitorDisplay}"
) )
zone.AvatarEvents ! AvatarServiceMessage( zone.AvatarEvents ! AvatarServiceMessage(
zone.id, zone.id,

View file

@ -0,0 +1,57 @@
// Copyright (c) 2020 PSForever
package net.psforever.objects.serverobject.terminals
import net.psforever.objects.Player
import net.psforever.objects.serverobject.CommonMessages
import net.psforever.objects.serverobject.terminals.capture.CaptureTerminal
import net.psforever.services.local.{LocalAction, LocalServiceMessage}
import scala.util.{Failure, Success}
object CaptureTerminals {
private val log = org.log4s.getLogger("CaptureTerminals")
/**
* The process of hacking an object is completed.
* Pass the message onto the hackable object and onto the local events system.
* @param target the `Hackable` object that has been hacked
* @param unk na;
* used by `HackMessage` as `unk5`
* @see `HackMessage`
*/
//TODO add params here depending on which params in HackMessage are important
def FinishHackingCaptureConsole(target: CaptureTerminal, hackingPlayer: Player, unk: Long)(): Unit = {
import akka.pattern.ask
import scala.concurrent.duration._
log.info(s"${hackingPlayer.toString} hacked a ${target.Definition.Name}")
// Wait for the target actor to set the HackedBy property
import scala.concurrent.ExecutionContext.Implicits.global
ask(target.Actor, CommonMessages.Hack(hackingPlayer, target))(1 second).mapTo[Boolean].onComplete {
case Success(_) =>
target.Zone.LocalEvents ! LocalServiceMessage(
target.Zone.id,
LocalAction.TriggerSound(hackingPlayer.GUID, target.HackSound, hackingPlayer.Position, 30, 0.49803925f)
)
val isResecured = hackingPlayer.Faction == target.Faction
if (isResecured) {
// Resecure the CC
target.Zone.LocalEvents ! LocalServiceMessage(
target.Zone.id,
LocalAction.ResecureCaptureTerminal(
target
)
)
}
else {
// Start the CC hack timer
target.Zone.LocalEvents ! LocalServiceMessage(
target.Zone.id,
LocalAction.StartCaptureTerminalHack(
target
)
)
}
case Failure(_) => log.warn(s"Hack message failed on target guid: ${target.GUID}")
}
}
}

View file

@ -23,7 +23,7 @@ object CaptureTerminals {
import akka.pattern.ask import akka.pattern.ask
import scala.concurrent.duration._ import scala.concurrent.duration._
log.info(s"${hackingPlayer.toString} Hacked a ${target.toString}") log.info(s"${hackingPlayer.toString} hacked a ${target.Definition.Name}")
// Wait for the target actor to set the HackedBy property // Wait for the target actor to set the HackedBy property
import scala.concurrent.ExecutionContext.Implicits.global import scala.concurrent.ExecutionContext.Implicits.global
ask(target.Actor, CommonMessages.Hack(hackingPlayer, target))(1 second).mapTo[Boolean].onComplete { ask(target.Actor, CommonMessages.Hack(hackingPlayer, target))(1 second).mapTo[Boolean].onComplete {

View file

@ -46,7 +46,7 @@ object WeaponTurrets {
* @param upgrade the upgrade being applied to the turret (usually, it's weapon system) * @param upgrade the upgrade being applied to the turret (usually, it's weapon system)
*/ */
def FinishUpgradingMannedTurret(target: FacilityTurret, upgrade: TurretUpgrade.Value): Unit = { def FinishUpgradingMannedTurret(target: FacilityTurret, upgrade: TurretUpgrade.Value): Unit = {
log.info(s"Converting manned wall turret weapon to $upgrade") log.info(s"Manned wall turret weapon being converted to $upgrade")
val zone = target.Zone val zone = target.Zone
val events = zone.VehicleEvents val events = zone.VehicleEvents
events ! VehicleServiceMessage.TurretUpgrade(TurretUpgrader.ClearSpecific(List(target), zone)) events ! VehicleServiceMessage.TurretUpgrade(TurretUpgrader.ClearSpecific(List(target), zone))

View file

@ -147,7 +147,7 @@ object CargoBehavior {
) )
if (distance <= 64) { if (distance <= 64) {
//cargo vehicle is close enough to assume to be physically within the carrier's hold; mount it //cargo vehicle is close enough to assume to be physically within the carrier's hold; mount it
log.info(s"HandleCheckCargoMounting: mounting cargo vehicle in carrier at distance of $distance") log.debug(s"HandleCheckCargoMounting: mounting cargo vehicle in carrier at distance of $distance")
cargo.MountedIn = carrierGUID cargo.MountedIn = carrierGUID
hold.mount(cargo) hold.mount(cargo)
cargo.Velocity = None cargo.Velocity = None
@ -160,12 +160,10 @@ object CargoBehavior {
VehicleAction.SendResponse(PlanetSideGUID(0), PlanetsideAttributeMessage(cargoGUID, 68, cargo.Shields)) VehicleAction.SendResponse(PlanetSideGUID(0), PlanetsideAttributeMessage(cargoGUID, 68, cargo.Shields))
) )
val (attachMsg, mountPointMsg) = CargoMountBehaviorForAll(carrier, cargo, mountPoint) val (attachMsg, mountPointMsg) = CargoMountBehaviorForAll(carrier, cargo, mountPoint)
log.info(s"HandleCheckCargoMounting: $attachMsg")
log.info(s"HandleCheckCargoMounting: $mountPointMsg")
false false
} else if (distance > 625 || iteration >= 40) { } else if (distance > 625 || iteration >= 40) {
//vehicles moved too far away or took too long to get into proper position; abort mounting //vehicles moved too far away or took too long to get into proper position; abort mounting
log.info( log.debug(
"HandleCheckCargoMounting: cargo vehicle is too far away or didn't mount within allocated time - aborting" "HandleCheckCargoMounting: cargo vehicle is too far away or didn't mount within allocated time - aborting"
) )
val cargoDriverGUID = cargo.Seats(0).occupant.get.GUID val cargoDriverGUID = cargo.Seats(0).occupant.get.GUID
@ -185,7 +183,7 @@ object CargoBehavior {
) )
) )
false false
//sending packet to the cargo vehicle's client results in player locking himself in his vehicle //sending packet to the cargo vehicle's client results in player being lock in own vehicle
//player gets stuck as "always trying to remount the cargo hold" //player gets stuck as "always trying to remount the cargo hold"
//obviously, don't do this //obviously, don't do this
} else { } else {
@ -263,7 +261,7 @@ object CargoBehavior {
) )
if (distance > 225) { if (distance > 225) {
//cargo vehicle has moved far enough away; close the carrier's hold door //cargo vehicle has moved far enough away; close the carrier's hold door
log.info( log.debug(
s"HandleCheckCargoDismounting: dismount of cargo vehicle from carrier complete at distance of $distance" s"HandleCheckCargoDismounting: dismount of cargo vehicle from carrier complete at distance of $distance"
) )
val cargoDriverGUID = cargo.Seats(0).occupant.get.GUID val cargoDriverGUID = cargo.Seats(0).occupant.get.GUID
@ -283,7 +281,7 @@ object CargoBehavior {
) )
) )
false false
//sending packet to the cargo vehicle's client results in player locking himself in his vehicle //sending packet to the cargo vehicle's client results in player being lock in own vehicle
//player gets stuck as "always trying to remount the cargo hold" //player gets stuck as "always trying to remount the cargo hold"
//obviously, don't do this //obviously, don't do this
} else if (iteration > 40) { } else if (iteration > 40) {
@ -403,8 +401,7 @@ object CargoBehavior {
events ! VehicleServiceMessage(zoneId, VehicleAction.SendResponse(GUID0, ejectCargoMsg)) events ! VehicleServiceMessage(zoneId, VehicleAction.SendResponse(GUID0, ejectCargoMsg))
events ! VehicleServiceMessage(zoneId, VehicleAction.SendResponse(GUID0, detachCargoMsg)) events ! VehicleServiceMessage(zoneId, VehicleAction.SendResponse(GUID0, detachCargoMsg))
events ! VehicleServiceMessage(zoneId, VehicleAction.SendResponse(GUID0, resetCargoMsg)) events ! VehicleServiceMessage(zoneId, VehicleAction.SendResponse(GUID0, resetCargoMsg))
log.debug(ejectCargoMsg.toString) log.debug(s"HandleVehicleCargoDismount: eject - $ejectCargoMsg, detach - $detachCargoMsg")
log.debug(detachCargoMsg.toString)
if (driverOpt.isEmpty) { if (driverOpt.isEmpty) {
//TODO cargo should drop like a rock like normal; until then, deconstruct it //TODO cargo should drop like a rock like normal; until then, deconstruct it
cargo.Actor ! Vehicle.Deconstruct() cargo.Actor ! Vehicle.Deconstruct()

View file

@ -2,7 +2,7 @@
package net.psforever.packet.game package net.psforever.packet.game
import net.psforever.packet.{GamePacketOpcode, Marshallable, PacketHelpers, PlanetSideGamePacket} import net.psforever.packet.{GamePacketOpcode, Marshallable, PacketHelpers, PlanetSideGamePacket}
import net.psforever.types.{CharacterGender, CharacterVoice, PlanetSideEmpire} import net.psforever.types.{CharacterSex, CharacterVoice, PlanetSideEmpire}
import scodec.{Attempt, Codec, Err} import scodec.{Attempt, Codec, Err}
import scodec.codecs._ import scodec.codecs._
import shapeless.{::, HNil} import shapeless.{::, HNil}
@ -14,7 +14,7 @@ final case class CharacterCreateRequestMessage(
name: String, name: String,
headId: Int, headId: Int,
voiceId: CharacterVoice.Value, voiceId: CharacterVoice.Value,
gender: CharacterGender.Value, gender: CharacterSex,
empire: PlanetSideEmpire.Value empire: PlanetSideEmpire.Value
) extends PlanetSideGamePacket { ) extends PlanetSideGamePacket {
type Packet = CharacterCreateRequestMessage type Packet = CharacterCreateRequestMessage
@ -29,7 +29,7 @@ object CharacterCreateRequestMessage extends Marshallable[CharacterCreateRequest
("name" | PacketHelpers.encodedWideString) :: ("name" | PacketHelpers.encodedWideString) ::
("headId" | uint8L) :: ("headId" | uint8L) ::
("voiceId" | character_voice_codec) :: ("voiceId" | character_voice_codec) ::
("gender" | CharacterGender.codec) :: ("gender" | CharacterSex.codec) ::
("empire" | PlanetSideEmpire.codec) ("empire" | PlanetSideEmpire.codec)
).exmap[CharacterCreateRequestMessage]( ).exmap[CharacterCreateRequestMessage](
{ {

View file

@ -9,7 +9,7 @@ import net.psforever.types._
* This partition of the data stream contains information used to represent how the player's avatar is presented. * This partition of the data stream contains information used to represent how the player's avatar is presented.
* This appearance coincides with the data available from the `CharacterCreateRequestMessage` packet. * This appearance coincides with the data available from the `CharacterCreateRequestMessage` packet.
* @see `PlanetSideEmpire`<br> * @see `PlanetSideEmpire`<br>
* `CharacterGender` * `CharacterSex`
* @param name the unique name of the avatar; * @param name the unique name of the avatar;
* minimum of two characters * minimum of two characters
* @param faction the empire to which the avatar belongs * @param faction the empire to which the avatar belongs
@ -21,7 +21,7 @@ import net.psforever.types._
final case class BasicCharacterData( final case class BasicCharacterData(
name: String, name: String,
faction: PlanetSideEmpire.Value, faction: PlanetSideEmpire.Value,
sex: CharacterGender.Value, sex: CharacterSex,
head: Int, head: Int,
voice: CharacterVoice.Value voice: CharacterVoice.Value
) )

View file

@ -304,7 +304,7 @@ object CharacterAppearanceData extends Marshallable[CharacterAppearanceData] {
("name" | PacketHelpers.encodedWideStringAligned(namePadding(name_padding, data.v2))) :: ("name" | PacketHelpers.encodedWideStringAligned(namePadding(name_padding, data.v2))) ::
("exosuit" | ExoSuitType.codec) :: ("exosuit" | ExoSuitType.codec) ::
("unk5" | uint2) :: //unknown ("unk5" | uint2) :: //unknown
("sex" | CharacterGender.codec) :: ("sex" | CharacterSex.codec) ::
("head" | uint8L) :: ("head" | uint8L) ::
("voice" | CharacterVoice.codec) :: ("voice" | CharacterVoice.codec) ::
("unk6" | uint32L) :: ("unk6" | uint32L) ::

View file

@ -3,7 +3,7 @@ package net.psforever.persistence
import net.psforever.objects.avatar import net.psforever.objects.avatar
import net.psforever.objects.avatar.Cosmetic import net.psforever.objects.avatar.Cosmetic
import org.joda.time.LocalDateTime import org.joda.time.LocalDateTime
import net.psforever.types.{CharacterGender, CharacterVoice, PlanetSideEmpire} import net.psforever.types.{CharacterSex, CharacterVoice, PlanetSideEmpire}
case class Avatar( case class Avatar(
id: Int, id: Int,
@ -27,7 +27,7 @@ case class Avatar(
id, id,
name, name,
PlanetSideEmpire(factionId), PlanetSideEmpire(factionId),
CharacterGender(genderId), CharacterSex.valuesToEntriesMap(genderId),
headId, headId,
CharacterVoice(voiceId), CharacterVoice(voiceId),
bep, bep,

View file

@ -25,37 +25,33 @@ class AccountIntermediaryService extends Actor {
private val IPAddressBySessionID = mutable.Map[Long, IPAddress]() private val IPAddressBySessionID = mutable.Map[Long, IPAddress]()
private[this] val log = org.log4s.getLogger private[this] val log = org.log4s.getLogger
override def preStart() = {
log.trace("Starting...")
}
def receive = { def receive = {
// Called by the LoginSessionActor // Called by the LoginSessionActor
case StoreAccountData(token, account) => case StoreAccountData(token, account) =>
accountsByToken += (token -> account) accountsByToken += (token -> account)
log.info(s"Storing intermediary account data for ${account.id}") log.trace(s"Storing intermediary account data for ${account.id}")
// Called by the WorldSessionActor // Called by the WorldSessionActor
case RetrieveAccountData(token) => case RetrieveAccountData(token) =>
accountsByToken.remove(token) match { accountsByToken.remove(token) match {
case Some(acc) => case Some(acc) =>
sender() ! ReceiveAccountData(acc) sender() ! ReceiveAccountData(acc)
log.info(s"Retrieving intermediary account data for $acc") log.trace(s"Retrieving intermediary account data for $acc")
case None => case None =>
log.error(s"Unable to retrieve intermediary account data for $token") log.error(s"Unable to retrieve intermediary account data for $token")
} }
case StoreIPAddress(sessionID, address) => case StoreIPAddress(sessionID, address) =>
IPAddressBySessionID += (sessionID -> address) IPAddressBySessionID += (sessionID -> address)
log.info(s"Storing IP address (${address.Address}) for sessionID : $sessionID") log.trace(s"Storing IP address (${address.Address}) for sessionID : $sessionID")
case RetrieveIPAddress(sessionID) => case RetrieveIPAddress(sessionID) =>
val address: Option[IPAddress] = IPAddressBySessionID.remove(sessionID) val address: Option[IPAddress] = IPAddressBySessionID.remove(sessionID)
if (address.nonEmpty) { if (address.nonEmpty) {
sender() ! ReceiveIPAddress(address.get) sender() ! ReceiveIPAddress(address.get)
log.info(s"Retrieving IP address data for sessionID : ${sessionID}") log.trace(s"Retrieving IP address data for sessionID : $sessionID")
} else { } else {
log.error(s"Unable to retrieve IP address data for sessionID : ${sessionID}") log.error(s"Unable to retrieve IP address data for sessionID : $sessionID")
} }
case msg => case msg =>

View file

@ -59,7 +59,6 @@ class AccountPersistenceService extends Actor {
*/ */
override def preStart(): Unit = { override def preStart(): Unit = {
ServiceManager.serviceManager ! ServiceManager.Lookup("squad") ServiceManager.serviceManager ! ServiceManager.Lookup("squad")
log.trace("Awaiting system service hooks ...")
} }
override def postStop(): Unit = { override def postStop(): Unit = {
@ -410,7 +409,7 @@ class PersistenceMonitor(name: String, squadService: ActorRef) extends Actor {
Deployables.Disown(inZone, avatar, context.parent) Deployables.Disown(inZone, avatar, context.parent)
inZone.Population.tell(Zone.Population.Leave(avatar), context.parent) inZone.Population.tell(Zone.Population.Leave(avatar), context.parent)
inZone.tasks.tell(GUIDTask.UnregisterObjectTask(avatar.locker)(inZone.GUID), context.parent) inZone.tasks.tell(GUIDTask.UnregisterObjectTask(avatar.locker)(inZone.GUID), context.parent)
log.info(s"logout of ${avatar.name}") log.info(s"Logout of ${avatar.name}")
} }
} }

View file

@ -15,17 +15,12 @@ class AvatarService(zone: Zone) extends Actor {
private[this] val log = org.log4s.getLogger private[this] val log = org.log4s.getLogger
override def preStart() = {
log.trace(s"Awaiting ${zone.id} avatar events ...")
}
val AvatarEvents = new GenericEventBus[AvatarServiceResponse] //AvatarEventBus val AvatarEvents = new GenericEventBus[AvatarServiceResponse] //AvatarEventBus
def receive = { def receive = {
case Service.Join(channel) => case Service.Join(channel) =>
val path = s"/$channel/Avatar" val path = s"/$channel/Avatar"
val who = sender() val who = sender()
log.info(s"$who has joined $path")
AvatarEvents.subscribe(who, path) AvatarEvents.subscribe(who, path)
case Service.Leave(None) => case Service.Leave(None) =>
@ -33,8 +28,6 @@ class AvatarService(zone: Zone) extends Actor {
case Service.Leave(Some(channel)) => case Service.Leave(Some(channel)) =>
val path = s"/$channel/Avatar" val path = s"/$channel/Avatar"
val who = sender()
log.info(s"$who has left $path")
AvatarEvents.unsubscribe(sender(), path) AvatarEvents.unsubscribe(sender(), path)
case Service.LeaveAll() => case Service.LeaveAll() =>

View file

@ -142,7 +142,7 @@ class ChatService(context: ActorContext[ChatService.Command]) extends AbstractBe
) )
case (None, _, _, _) => case (None, _, _, _) =>
log.error("received message from non-subscribed actor") log.warn("received message from non-subscribed actor")
} }

View file

@ -9,38 +9,26 @@ import net.psforever.services.{GenericEventBus, Service}
class GalaxyService extends Actor { class GalaxyService extends Actor {
private[this] val log = org.log4s.getLogger private[this] val log = org.log4s.getLogger
override def preStart() = {
log.info("Starting...")
}
val GalaxyEvents = new GenericEventBus[GalaxyServiceResponse] val GalaxyEvents = new GenericEventBus[GalaxyServiceResponse]
def receive: Receive = { def receive: Receive = {
case Service.Join(faction) if "TRNCVS".containsSlice(faction) => case Service.Join(faction) if "TRNCVS".containsSlice(faction) =>
val path = s"/$faction/Galaxy" val path = s"/$faction/Galaxy"
val who = sender() GalaxyEvents.subscribe(sender(), path)
log.trace(s"$who has joined $path")
GalaxyEvents.subscribe(who, path)
case Service.Join("galaxy") => case Service.Join("galaxy") =>
val path = s"/Galaxy" val path = s"/Galaxy"
val who = sender() GalaxyEvents.subscribe(sender(), path)
log.trace(s"$who has joined $path")
GalaxyEvents.subscribe(who, path)
case Service.Join(channel) => case Service.Join(channel) =>
val path = s"/$channel/Galaxy" val path = s"/$channel/Galaxy"
val who = sender() GalaxyEvents.subscribe(sender(), path)
log.trace(s"$who has joined $path")
GalaxyEvents.subscribe(who, path)
case Service.Leave(None) => case Service.Leave(None) =>
GalaxyEvents.unsubscribe(sender()) GalaxyEvents.unsubscribe(sender())
case Service.Leave(Some(channel)) => case Service.Leave(Some(channel)) =>
val path = s"/$channel/Galaxy" val path = s"/$channel/Galaxy"
val who = sender()
log.trace(s"$who has left $path")
GalaxyEvents.unsubscribe(sender(), path) GalaxyEvents.unsubscribe(sender(), path)
case Service.LeaveAll() => case Service.LeaveAll() =>
@ -53,7 +41,7 @@ class GalaxyService extends Actor {
GalaxyServiceResponse(s"/Galaxy", GalaxyResponse.MapUpdate(msg)) GalaxyServiceResponse(s"/Galaxy", GalaxyResponse.MapUpdate(msg))
) )
case GalaxyAction.TransferPassenger(player_guid, temp_channel, vehicle, vehicle_to_delete, manifest) => case GalaxyAction.TransferPassenger(_, temp_channel, vehicle, vehicle_to_delete, manifest) =>
GalaxyEvents.publish( GalaxyEvents.publish(
GalaxyServiceResponse( GalaxyServiceResponse(
s"/$forChannel/Galaxy", s"/$forChannel/Galaxy",
@ -69,6 +57,6 @@ class GalaxyService extends Actor {
) )
case msg => case msg =>
log.info(s"Unhandled message $msg from ${sender()}") log.warn(s"Unhandled message $msg from ${sender()}")
} }
} }

View file

@ -28,27 +28,19 @@ class LocalService(zone: Zone) extends Actor {
context.actorOf(Props[RouterTelepadActivation](), s"${zone.id}-telepad-activate-agent") context.actorOf(Props[RouterTelepadActivation](), s"${zone.id}-telepad-activate-agent")
private[this] val log = org.log4s.getLogger private[this] val log = org.log4s.getLogger
override def preStart() = {
log.trace(s"Awaiting ${zone.id} local events ...")
}
val LocalEvents = new GenericEventBus[LocalServiceResponse] val LocalEvents = new GenericEventBus[LocalServiceResponse]
def receive: Receive = { def receive: Receive = {
case Service.Join(channel) => case Service.Join(channel) =>
val path = s"/$channel/Local" val path = s"/$channel/Local"
val who = sender() LocalEvents.subscribe(sender(), path)
log.info(s"$who has joined $path")
LocalEvents.subscribe(who, path)
case Service.Leave(None) => case Service.Leave(None) =>
LocalEvents.unsubscribe(sender()) LocalEvents.unsubscribe(sender())
case Service.Leave(Some(channel)) => case Service.Leave(Some(channel)) =>
val path = s"/$channel/Local" val path = s"/$channel/Local"
val who = sender() LocalEvents.unsubscribe(sender(), path)
log.info(s"$who has left $path")
LocalEvents.unsubscribe(who, path)
case Service.LeaveAll() => case Service.LeaveAll() =>
LocalEvents.unsubscribe(sender()) LocalEvents.unsubscribe(sender())
@ -229,13 +221,6 @@ class LocalService(zone: Zone) extends Actor {
//response from HackClearActor //response from HackClearActor
case HackClearActor.SendHackMessageHackCleared(target_guid, _, unk1, unk2) => case HackClearActor.SendHackMessageHackCleared(target_guid, _, unk1, unk2) =>
log.info(s"Clearing hack for $target_guid") log.info(s"Clearing hack for $target_guid")
LocalEvents.publish(
LocalServiceResponse(
s"/${zone.id}/Local",
Service.defaultPlayerGUID,
LocalResponse.SendHackMessageHackCleared(target_guid, unk1, unk2)
)
)
//message from ProximityTerminalControl //message from ProximityTerminalControl
case Terminal.StartProximityEffect(terminal) => case Terminal.StartProximityEffect(terminal) =>
@ -323,7 +308,7 @@ class LocalService(zone: Zone) extends Actor {
//get rid of previous linked remote telepad (if any) //get rid of previous linked remote telepad (if any)
zone.GUID(internalTelepad.Telepad) match { zone.GUID(internalTelepad.Telepad) match {
case Some(old: TelepadDeployable) => case Some(old: TelepadDeployable) =>
log.info( log.trace(
s"ActivateTeleportSystem: old remote telepad@${old.GUID.guid} linked to internal@${internalTelepad.GUID.guid} will be deconstructed" s"ActivateTeleportSystem: old remote telepad@${old.GUID.guid} linked to internal@${internalTelepad.GUID.guid} will be deconstructed"
) )
old.Active = false old.Active = false
@ -333,7 +318,7 @@ class LocalService(zone: Zone) extends Actor {
} }
internalTelepad.Telepad = remoteTelepad.GUID internalTelepad.Telepad = remoteTelepad.GUID
if (internalTelepad.Active) { if (internalTelepad.Active) {
log.info( log.trace(
s"ActivateTeleportSystem: fully deployed router@${router.GUID.guid} in ${zone.id} will link internal@${internalTelepad.GUID.guid} and remote@${remoteTelepad.GUID.guid}" s"ActivateTeleportSystem: fully deployed router@${router.GUID.guid} in ${zone.id} will link internal@${internalTelepad.GUID.guid} and remote@${remoteTelepad.GUID.guid}"
) )
LocalEvents.publish( LocalEvents.publish(

View file

@ -50,7 +50,7 @@ class DeployableRemover(taskResolver: ActorRef) extends RemoverActor(taskResolve
override def SecondJob(entry: RemoverActor.Entry): Unit = { override def SecondJob(entry: RemoverActor.Entry): Unit = {
val obj = entry.obj.asInstanceOf[PlanetSideGameObject with Deployable] val obj = entry.obj.asInstanceOf[PlanetSideGameObject with Deployable]
info(s"Deleting a ${obj.Definition.Name} deployable") trace(s"Deleting a ${obj.Definition.Name} deployable")
context.parent ! DeployableRemover.EliminateDeployable(obj, obj.GUID, obj.Position, entry.zone) context.parent ! DeployableRemover.EliminateDeployable(obj, obj.GUID, obj.Position, entry.zone)
super.SecondJob(entry) super.SecondJob(entry)
} }

View file

@ -25,7 +25,7 @@ class HackCaptureActor extends Actor {
def receive: Receive = { def receive: Receive = {
case HackCaptureActor.StartCaptureTerminalHack(target, zone, unk1, unk2, startTime) => case HackCaptureActor.StartCaptureTerminalHack(target, zone, unk1, unk2, startTime) =>
log.trace(s"${target.GUID} is hacked.") log.trace(s"StartCaptureTerminalHack: ${target.GUID} is hacked.")
val duration = target.Definition match { val duration = target.Definition match {
case GlobalDefinitions.capture_terminal => case GlobalDefinitions.capture_terminal =>
@ -49,7 +49,7 @@ class HackCaptureActor extends Actor {
hackedObjects.find(_.target == target) match { hackedObjects.find(_.target == target) match {
case Some(_) => case Some(_) =>
log.trace( log.trace(
s"${target.GUID} was already hacked - removing it from the hacked objects list before re-adding it." s"StartCaptureTerminalHack: ${target.GUID} was already hacked - removing it from the hacked objects list before re-adding it."
) )
hackedObjects = hackedObjects.filterNot(x => x.target == target) hackedObjects = hackedObjects.filterNot(x => x.target == target)
case _ => ; case _ => ;
@ -70,7 +70,7 @@ class HackCaptureActor extends Actor {
val finishedHacks = hackedObjects.filter(x => now - x.hack_timestamp >= x.duration.toNanos) val finishedHacks = hackedObjects.filter(x => now - x.hack_timestamp >= x.duration.toNanos)
hackedObjects = stillHacked hackedObjects = stillHacked
finishedHacks.foreach(entry => { finishedHacks.foreach(entry => {
log.trace(s"Capture terminal hack timeout reached for terminal ${entry.target.GUID}") log.trace(s"ProcessCompleteHacks: capture terminal hack timeout reached for terminal ${entry.target.GUID}")
val hackedByFaction = entry.target.HackedBy.get.hackerFaction val hackedByFaction = entry.target.HackedBy.get.hackerFaction
entry.target.Actor ! CommonMessages.ClearHack() entry.target.Actor ! CommonMessages.ClearHack()
@ -143,7 +143,7 @@ class HackCaptureActor extends Actor {
val short_timeout: FiniteDuration = val short_timeout: FiniteDuration =
math.max(1, hackEntry.duration.toNanos - (System.nanoTime - hackEntry.hack_timestamp)) nanoseconds math.max(1, hackEntry.duration.toNanos - (System.nanoTime - hackEntry.hack_timestamp)) nanoseconds
log.trace(s"Still items left in hacked objects list. Checking again in ${short_timeout.toSeconds} seconds") log.trace(s"RestartTimer: still items left in hacked objects list. Checking again in ${short_timeout.toSeconds} seconds")
import scala.concurrent.ExecutionContext.Implicits.global import scala.concurrent.ExecutionContext.Implicits.global
clearTrigger = context.system.scheduler.scheduleOnce(short_timeout, self, HackCaptureActor.ProcessCompleteHacks()) clearTrigger = context.system.scheduler.scheduleOnce(short_timeout, self, HackCaptureActor.ProcessCompleteHacks())
} }

View file

@ -83,12 +83,12 @@ class HackClearActor() extends Actor {
case Some(hackEntry) => case Some(hackEntry) =>
val short_timeout: FiniteDuration = math.max(1, hackEntry.duration - (now - hackEntry.time)) nanoseconds val short_timeout: FiniteDuration = math.max(1, hackEntry.duration - (now - hackEntry.time)) nanoseconds
log.info( log.debug(
s"HackClearActor: Still items left in hacked objects list. Checking again in ${short_timeout.toSeconds} seconds" s"HackClearActor: still items left in hacked objects list. Checking again in ${short_timeout.toSeconds} seconds"
) )
import scala.concurrent.ExecutionContext.Implicits.global import scala.concurrent.ExecutionContext.Implicits.global
clearTrigger = context.system.scheduler.scheduleOnce(short_timeout, self, HackClearActor.TryClearHacks()) clearTrigger = context.system.scheduler.scheduleOnce(short_timeout, self, HackClearActor.TryClearHacks())
case None => log.info("HackClearActor: No objects left in hacked objects list. Not rescheduling check.") case None => log.debug("HackClearActor: no objects left in hacked objects list. Not rescheduling check.")
} }
} }

View file

@ -31,16 +31,16 @@ class PropertyOverrideManager extends Actor {
} }
private def LoadOverridesFromFile(zoneId: Int): Unit = { private def LoadOverridesFromFile(zoneId: Int): Unit = {
val zoneOverrides = LoadFile(s"overrides/game_objects${zoneId}.adb.lst") val zoneOverrides = LoadFile(s"overrides/game_objects$zoneId.adb.lst")
if (zoneOverrides == null) { if (zoneOverrides == null) {
log.debug(s"No overrides found for zone ${zoneId} using filename game_objects${zoneId}.adb.lst") log.debug(s"PropertyOverride: no overrides found for zone $zoneId using filename game_objects$zoneId.adb.lst")
return return
} }
val grouped = zoneOverrides.groupBy(_._1).view.mapValues(_.map(x => (x._2, x._3)).toList).toMap val grouped = zoneOverrides.groupBy(_._1).view.mapValues(_.map(x => (x._2, x._3)).toList).toMap
log.debug(s"Loaded property overrides for zone $zoneId: ${grouped.toString}") log.debug(s"PropertyOverride: loaded property overrides for zone $zoneId: ${grouped.toString}")
overrides += (zoneId -> grouped) overrides += (zoneId -> grouped)
} }

View file

@ -124,11 +124,7 @@ class SquadService extends Actor {
private[this] val log = org.log4s.getLogger private[this] val log = org.log4s.getLogger
private def debug(msg: String): Unit = { private def debug(msg: String): Unit = {
log.info(msg) log.debug(msg)
}
override def preStart(): Unit = {
log.info("Starting...")
} }
override def postStop(): Unit = { override def postStop(): Unit = {
@ -321,7 +317,7 @@ class SquadService extends Actor {
case str if str.matches("//d+") => case str if str.matches("//d+") =>
Publish(to.toLong, msg, excluded) Publish(to.toLong, msg, excluded)
case _ => case _ =>
log.error(s"Publish(String): subscriber information is an unhandled format - $to") log.warn(s"Publish(String): subscriber information is an unhandled format - $to")
} }
} }
@ -336,7 +332,7 @@ class SquadService extends Actor {
case Some(user) => case Some(user) =>
user ! SquadServiceResponse("", msg) user ! SquadServiceResponse("", msg)
case None => case None =>
log.error(s"Publish(Long): subscriber information can not be found - $to") log.warn(s"Publish(Long): subscriber information can not be found - $to")
} }
} }
@ -383,7 +379,6 @@ class SquadService extends Actor {
case Service.Join(faction) if "TRNCVS".indexOf(faction) > -1 => case Service.Join(faction) if "TRNCVS".indexOf(faction) > -1 =>
val path = s"/$faction/Squad" val path = s"/$faction/Squad"
val who = sender() val who = sender()
debug(s"$who has joined $path")
SquadEvents.subscribe(who, path) SquadEvents.subscribe(who, path)
//subscribe to the player's personal channel - necessary for future and previous squad information //subscribe to the player's personal channel - necessary for future and previous squad information
@ -392,7 +387,6 @@ class SquadService extends Actor {
val longCharId = char_id.toLong val longCharId = char_id.toLong
val path = s"/$char_id/Squad" val path = s"/$char_id/Squad"
val who = sender() val who = sender()
debug(s"$who has joined $path")
context.watch(who) context.watch(who)
UserEvents += longCharId -> who UserEvents += longCharId -> who
refused(longCharId) = Nil refused(longCharId) = Nil
@ -407,7 +401,6 @@ class SquadService extends Actor {
case Service.Leave(Some(faction)) if "TRNCVS".indexOf(faction) > -1 => case Service.Leave(Some(faction)) if "TRNCVS".indexOf(faction) > -1 =>
val path = s"/$faction/Squad" val path = s"/$faction/Squad"
val who = sender() val who = sender()
debug(s"$who has left $path")
SquadEvents.unsubscribe(who, path) SquadEvents.unsubscribe(who, path)
case Service.Leave(Some(char_id)) => case Service.Leave(Some(char_id)) =>

View file

@ -18,27 +18,19 @@ class VehicleService(zone: Zone) extends Actor {
private val turretUpgrade: ActorRef = context.actorOf(Props[TurretUpgrader](), s"${zone.id}-turret-upgrade-agent") private val turretUpgrade: ActorRef = context.actorOf(Props[TurretUpgrader](), s"${zone.id}-turret-upgrade-agent")
private[this] val log = org.log4s.getLogger private[this] val log = org.log4s.getLogger
override def preStart() = {
log.trace(s"Awaiting ${zone.id} vehicle events ...")
}
val VehicleEvents = new GenericEventBus[VehicleServiceResponse] val VehicleEvents = new GenericEventBus[VehicleServiceResponse]
def receive = { def receive = {
case Service.Join(channel) => case Service.Join(channel) =>
val path = s"/$channel/Vehicle" val path = s"/$channel/Vehicle"
val who = sender() VehicleEvents.subscribe(sender(), path)
log.info(s"$who has joined $path")
VehicleEvents.subscribe(who, path)
case Service.Leave(None) => case Service.Leave(None) =>
VehicleEvents.unsubscribe(sender()) VehicleEvents.unsubscribe(sender())
case Service.Leave(Some(channel)) => case Service.Leave(Some(channel)) =>
val path = s"/$channel/Vehicle" val path = s"/$channel/Vehicle"
val who = sender() VehicleEvents.unsubscribe(sender(), path)
log.info(s"$who has left $path")
VehicleEvents.unsubscribe(who, path)
case Service.LeaveAll() => case Service.LeaveAll() =>
VehicleEvents.unsubscribe(sender()) VehicleEvents.unsubscribe(sender())
@ -387,7 +379,7 @@ class VehicleService(zone: Zone) extends Actor {
} }
case msg => case msg =>
log.info(s"Unhandled message $msg from ${sender()}") log.warn(s"Unhandled message $msg from ${sender()}")
} }
import net.psforever.objects.serverobject.tube.SpawnTube import net.psforever.objects.serverobject.tube.SpawnTube

View file

@ -164,7 +164,7 @@ class TurretUpgrader extends SupportActor[TurretUpgrader.Entry] {
) )
} }
}) })
info(s"Converting manned wall turret weapon to $upgrade") debug(s"Converting manned wall turret weapon to $upgrade")
val oldBoxes = AllMountedWeaponMagazines(target) val oldBoxes = AllMountedWeaponMagazines(target)
target.Upgrade = upgrade //perform upgrade target.Upgrade = upgrade //perform upgrade
@ -228,7 +228,7 @@ class TurretUpgrader extends SupportActor[TurretUpgrader.Entry] {
def FinishUpgradingTurret(entry: TurretUpgrader.Entry)(): Unit = { def FinishUpgradingTurret(entry: TurretUpgrader.Entry)(): Unit = {
val target = entry.obj.asInstanceOf[FacilityTurret] val target = entry.obj.asInstanceOf[FacilityTurret]
val zone = entry.zone val zone = entry.zone
info(s"Wall turret finished ${target.Upgrade} upgrade") trace(s"Wall turret finished ${target.Upgrade} upgrade")
target.ConfirmUpgrade(entry.upgrade) target.ConfirmUpgrade(entry.upgrade)
val targetGUID = target.GUID val targetGUID = target.GUID
if (target.Health > 0) { if (target.Health > 0) {

View file

@ -1,16 +0,0 @@
// Copyright (c) 2017 PSForever
package net.psforever.types
import net.psforever.packet.PacketHelpers
import scodec.codecs.uint2L
/**
* Values for two genders, Male and Female, starting at 1 = Male.
*/
object CharacterGender extends Enumeration(1) {
type Type = Value
val Male, Female = Value
implicit val codec = PacketHelpers.createEnumerationCodec(this, uint2L)
}

View file

@ -0,0 +1,45 @@
// Copyright (c) 2021 PSForever
package net.psforever.types
import enumeratum.values.{IntEnum, IntEnumEntry}
import net.psforever.packet.PacketHelpers
import scodec.codecs.uint2L
/**
* Values for two sexes, Male and Female, as required by `ObjectCreateMessage` parameters.
* Some quaint language for log decoration is provided.
* Blame the lack of gender dysphoria on the Terran Republic.
*/
sealed abstract class CharacterSex(
val value: Int,
val pronounSubject: String,
val pronounObject: String,
val possessive: String
) extends IntEnumEntry {
def possessiveNoObject: String = possessive
}
/**
* Values for two sexes, Male and Female.
*/
object CharacterSex extends IntEnum[CharacterSex] {
val values = findValues
case object Male extends CharacterSex(
value = 1,
pronounSubject = "he",
pronounObject = "him",
possessive = "his"
)
case object Female extends CharacterSex(
value = 2,
pronounSubject = "she",
pronounObject = "her",
possessive = "her"
) {
override def possessiveNoObject: String = "hers"
}
implicit val codec = PacketHelpers.createIntEnumCodec(enum = this, uint2L)
}

View file

@ -10,7 +10,7 @@ import scodec.codecs.uint
* While it is technically not valid to have a wrong-gendered voice, * While it is technically not valid to have a wrong-gendered voice,
* unlisted sixth and seventh entries would give a male character a female voice; * unlisted sixth and seventh entries would give a male character a female voice;
* a female character with either entry would become mute, however. * a female character with either entry would become mute, however.
* @see `CharacterGender` * @see `CharacterSex`
*/ */
object CharacterVoice extends Enumeration { object CharacterVoice extends Enumeration {
type Type = Value type Type = Value

View file

@ -4,7 +4,7 @@ package game
import org.specs2.mutable._ import org.specs2.mutable._
import net.psforever.packet._ import net.psforever.packet._
import net.psforever.packet.game._ import net.psforever.packet.game._
import net.psforever.types.{CharacterGender, CharacterVoice, PlanetSideEmpire} import net.psforever.types.{CharacterSex, CharacterVoice, PlanetSideEmpire}
import scodec.bits._ import scodec.bits._
class CharacterCreateRequestMessageTest extends Specification { class CharacterCreateRequestMessageTest extends Specification {
@ -16,7 +16,7 @@ class CharacterCreateRequestMessageTest extends Specification {
name mustEqual "TestChar" name mustEqual "TestChar"
head mustEqual 50 head mustEqual 50
voice mustEqual CharacterVoice.Voice5 voice mustEqual CharacterVoice.Voice5
gender mustEqual CharacterGender.Female gender mustEqual CharacterSex.Female
faction mustEqual PlanetSideEmpire.NC faction mustEqual PlanetSideEmpire.NC
case _ => case _ =>
ko ko
@ -25,7 +25,7 @@ class CharacterCreateRequestMessageTest extends Specification {
"encode" in { "encode" in {
val msg = val msg =
CharacterCreateRequestMessage("TestChar", 50, CharacterVoice.Voice5, CharacterGender.Female, PlanetSideEmpire.NC) CharacterCreateRequestMessage("TestChar", 50, CharacterVoice.Voice5, CharacterSex.Female, PlanetSideEmpire.NC)
val pkt = PacketCoding.encodePacket(msg).require.toByteVector val pkt = PacketCoding.encodePacket(msg).require.toByteVector
pkt mustEqual string pkt mustEqual string

View file

@ -40,7 +40,7 @@ class CharacterDataTest extends Specification {
case CharacterAppearanceData(a, b, ribbons) => case CharacterAppearanceData(a, b, ribbons) =>
a.app.name mustEqual "ScrawnyRonnie" a.app.name mustEqual "ScrawnyRonnie"
a.app.faction mustEqual PlanetSideEmpire.TR a.app.faction mustEqual PlanetSideEmpire.TR
a.app.sex mustEqual CharacterGender.Male a.app.sex mustEqual CharacterSex.Male
a.app.head mustEqual 5 a.app.head mustEqual 5
a.app.voice mustEqual CharacterVoice.Voice5 a.app.voice mustEqual CharacterVoice.Voice5
a.data.bops mustEqual false a.data.bops mustEqual false
@ -157,7 +157,7 @@ class CharacterDataTest extends Specification {
case CharacterAppearanceData(a, b, ribbons) => case CharacterAppearanceData(a, b, ribbons) =>
a.app.name mustEqual "ScrawnyRonnie" a.app.name mustEqual "ScrawnyRonnie"
a.app.faction mustEqual PlanetSideEmpire.TR a.app.faction mustEqual PlanetSideEmpire.TR
a.app.sex mustEqual CharacterGender.Male a.app.sex mustEqual CharacterSex.Male
a.app.head mustEqual 5 a.app.head mustEqual 5
a.app.voice mustEqual CharacterVoice.Voice5 a.app.voice mustEqual CharacterVoice.Voice5
a.data.bops mustEqual false a.data.bops mustEqual false
@ -226,7 +226,7 @@ class CharacterDataTest extends Specification {
case CharacterAppearanceData(a, b, ribbons) => case CharacterAppearanceData(a, b, ribbons) =>
a.app.name mustEqual "Angello" a.app.name mustEqual "Angello"
a.app.faction mustEqual PlanetSideEmpire.VS a.app.faction mustEqual PlanetSideEmpire.VS
a.app.sex mustEqual CharacterGender.Male a.app.sex mustEqual CharacterSex.Male
a.app.head mustEqual 10 a.app.head mustEqual 10
a.app.voice mustEqual CharacterVoice.Voice2 a.app.voice mustEqual CharacterVoice.Voice2
a.data.bops mustEqual false a.data.bops mustEqual false
@ -300,7 +300,7 @@ class CharacterDataTest extends Specification {
BasicCharacterData( BasicCharacterData(
"ScrawnyRonnie", "ScrawnyRonnie",
PlanetSideEmpire.TR, PlanetSideEmpire.TR,
CharacterGender.Male, CharacterSex.Male,
5, 5,
CharacterVoice.Voice5 CharacterVoice.Voice5
), ),
@ -408,7 +408,7 @@ class CharacterDataTest extends Specification {
BasicCharacterData( BasicCharacterData(
"ScrawnyRonnie", "ScrawnyRonnie",
PlanetSideEmpire.TR, PlanetSideEmpire.TR,
CharacterGender.Male, CharacterSex.Male,
5, 5,
CharacterVoice.Voice5 CharacterVoice.Voice5
), ),
@ -524,7 +524,7 @@ class CharacterDataTest extends Specification {
BasicCharacterData( BasicCharacterData(
"Angello", "Angello",
PlanetSideEmpire.VS, PlanetSideEmpire.VS,
CharacterGender.Male, CharacterSex.Male,
10, 10,
CharacterVoice.Voice2 CharacterVoice.Voice2
), ),

View file

@ -70,7 +70,7 @@ class DetailedCharacterDataTest extends Specification {
case CharacterAppearanceData(a, b, ribbons) => case CharacterAppearanceData(a, b, ribbons) =>
a.app.name mustEqual "IlllIIIlllIlIllIlllIllI" a.app.name mustEqual "IlllIIIlllIlIllIlllIllI"
a.app.faction mustEqual PlanetSideEmpire.VS a.app.faction mustEqual PlanetSideEmpire.VS
a.app.sex mustEqual CharacterGender.Female a.app.sex mustEqual CharacterSex.Female
a.app.head mustEqual 41 a.app.head mustEqual 41
a.app.voice mustEqual CharacterVoice.Voice1 a.app.voice mustEqual CharacterVoice.Voice1
a.data.bops mustEqual false a.data.bops mustEqual false
@ -258,7 +258,7 @@ class DetailedCharacterDataTest extends Specification {
case CharacterAppearanceData(a, b, ribbons) => case CharacterAppearanceData(a, b, ribbons) =>
a.app.name mustEqual "IlllIIIlllIlIllIlllIllI" a.app.name mustEqual "IlllIIIlllIlIllIlllIllI"
a.app.faction mustEqual PlanetSideEmpire.VS a.app.faction mustEqual PlanetSideEmpire.VS
a.app.sex mustEqual CharacterGender.Female a.app.sex mustEqual CharacterSex.Female
a.app.head mustEqual 41 a.app.head mustEqual 41
a.app.voice mustEqual CharacterVoice.Voice1 a.app.voice mustEqual CharacterVoice.Voice1
a.data.bops mustEqual false a.data.bops mustEqual false
@ -443,7 +443,7 @@ class DetailedCharacterDataTest extends Specification {
case CharacterAppearanceData(a, b, ribbons) => case CharacterAppearanceData(a, b, ribbons) =>
a.app.name mustEqual "HaHaATRMax" a.app.name mustEqual "HaHaATRMax"
a.app.faction mustEqual PlanetSideEmpire.TR a.app.faction mustEqual PlanetSideEmpire.TR
a.app.sex mustEqual CharacterGender.Male a.app.sex mustEqual CharacterSex.Male
a.app.head mustEqual 57 a.app.head mustEqual 57
a.app.voice mustEqual CharacterVoice.Voice1 a.app.voice mustEqual CharacterVoice.Voice1
a.data.bops mustEqual false a.data.bops mustEqual false
@ -670,7 +670,7 @@ class DetailedCharacterDataTest extends Specification {
case CharacterAppearanceData(a, b, ribbons) => case CharacterAppearanceData(a, b, ribbons) =>
a.app.name mustEqual "KiCkJr" a.app.name mustEqual "KiCkJr"
a.app.faction mustEqual PlanetSideEmpire.NC a.app.faction mustEqual PlanetSideEmpire.NC
a.app.sex mustEqual CharacterGender.Male a.app.sex mustEqual CharacterSex.Male
a.app.head mustEqual 24 a.app.head mustEqual 24
a.app.voice mustEqual CharacterVoice.Voice4 a.app.voice mustEqual CharacterVoice.Voice4
a.data.bops mustEqual false a.data.bops mustEqual false
@ -1189,7 +1189,7 @@ class DetailedCharacterDataTest extends Specification {
a.app mustEqual BasicCharacterData( a.app mustEqual BasicCharacterData(
"CCRIDER", "CCRIDER",
PlanetSideEmpire.NC, PlanetSideEmpire.NC,
CharacterGender.Male, CharacterSex.Male,
20, 20,
CharacterVoice.Voice3 CharacterVoice.Voice3
) )
@ -1336,7 +1336,7 @@ class DetailedCharacterDataTest extends Specification {
a.app mustEqual BasicCharacterData( a.app mustEqual BasicCharacterData(
"xRider912", "xRider912",
PlanetSideEmpire.TR, PlanetSideEmpire.TR,
CharacterGender.Male, CharacterSex.Male,
4, 4,
CharacterVoice.Voice1 CharacterVoice.Voice1
) )
@ -1515,7 +1515,7 @@ class DetailedCharacterDataTest extends Specification {
BasicCharacterData( BasicCharacterData(
"IlllIIIlllIlIllIlllIllI", "IlllIIIlllIlIllIlllIllI",
PlanetSideEmpire.VS, PlanetSideEmpire.VS,
CharacterGender.Female, CharacterSex.Female,
41, 41,
CharacterVoice.Voice1 CharacterVoice.Voice1
), ),
@ -1697,7 +1697,7 @@ class DetailedCharacterDataTest extends Specification {
BasicCharacterData( BasicCharacterData(
"IlllIIIlllIlIllIlllIllI", "IlllIIIlllIlIllIlllIllI",
PlanetSideEmpire.VS, PlanetSideEmpire.VS,
CharacterGender.Female, CharacterSex.Female,
41, 41,
CharacterVoice.Voice1 CharacterVoice.Voice1
), ),
@ -1886,7 +1886,7 @@ class DetailedCharacterDataTest extends Specification {
BasicCharacterData( BasicCharacterData(
"HaHaATRMax", "HaHaATRMax",
PlanetSideEmpire.TR, PlanetSideEmpire.TR,
CharacterGender.Male, CharacterSex.Male,
57, 57,
CharacterVoice.Voice1 CharacterVoice.Voice1
), ),
@ -2103,7 +2103,7 @@ class DetailedCharacterDataTest extends Specification {
BasicCharacterData( BasicCharacterData(
"KiCkJr", "KiCkJr",
PlanetSideEmpire.NC, PlanetSideEmpire.NC,
CharacterGender.Male, CharacterSex.Male,
24, 24,
CharacterVoice.Voice4 CharacterVoice.Voice4
), ),
@ -3588,7 +3588,7 @@ class DetailedCharacterDataTest extends Specification {
BasicCharacterData( BasicCharacterData(
"CCRIDER", "CCRIDER",
PlanetSideEmpire.NC, PlanetSideEmpire.NC,
CharacterGender.Male, CharacterSex.Male,
20, 20,
CharacterVoice.Voice3 CharacterVoice.Voice3
), ),
@ -4512,7 +4512,7 @@ class DetailedCharacterDataTest extends Specification {
BasicCharacterData( BasicCharacterData(
"xRider912", "xRider912",
PlanetSideEmpire.TR, PlanetSideEmpire.TR,
CharacterGender.Male, CharacterSex.Male,
4, 4,
CharacterVoice.Voice1 CharacterVoice.Voice1
), ),

View file

@ -57,7 +57,7 @@ class MountedVehiclesTest extends Specification {
a.app mustEqual BasicCharacterData( a.app mustEqual BasicCharacterData(
"ScrawnyRonnie", "ScrawnyRonnie",
PlanetSideEmpire.TR, PlanetSideEmpire.TR,
CharacterGender.Male, CharacterSex.Male,
5, 5,
CharacterVoice.Voice5 CharacterVoice.Voice5
) )
@ -146,7 +146,7 @@ class MountedVehiclesTest extends Specification {
BasicCharacterData( BasicCharacterData(
"ScrawnyRonnie", "ScrawnyRonnie",
PlanetSideEmpire.TR, PlanetSideEmpire.TR,
CharacterGender.Male, CharacterSex.Male,
5, 5,
CharacterVoice.Voice5 CharacterVoice.Voice5
), ),

View file

@ -6,12 +6,12 @@ import net.psforever.objects._
import net.psforever.objects.avatar.{Avatar, BattleRank, Implant} import net.psforever.objects.avatar.{Avatar, BattleRank, Implant}
import net.psforever.objects.definition.ImplantDefinition import net.psforever.objects.definition.ImplantDefinition
import net.psforever.objects.locker.LockerEquipment import net.psforever.objects.locker.LockerEquipment
import net.psforever.types.{CharacterGender, CharacterVoice, ImplantType, PlanetSideEmpire} import net.psforever.types.{CharacterSex, CharacterVoice, ImplantType, PlanetSideEmpire}
import org.specs2.mutable._ import org.specs2.mutable._
class AvatarTest extends Specification { class AvatarTest extends Specification {
def CreatePlayer(): (Player, Avatar) = { def CreatePlayer(): (Player, Avatar) = {
val avatar = Avatar(0, "TestCharacter", PlanetSideEmpire.VS, CharacterGender.Female, 41, CharacterVoice.Voice1) val avatar = Avatar(0, "TestCharacter", PlanetSideEmpire.VS, CharacterSex.Female, 41, CharacterVoice.Voice1)
val player = Player(avatar) val player = Player(avatar)
player.Slot(0).Equipment = Tool(beamer) player.Slot(0).Equipment = Tool(beamer)
player.Slot(2).Equipment = Tool(suppressor) player.Slot(2).Equipment = Tool(suppressor)
@ -26,10 +26,10 @@ class AvatarTest extends Specification {
} }
"construct" in { "construct" in {
val av = Avatar(0, "Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Voice5) val av = Avatar(0, "Chord", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Voice5)
av.name mustEqual "Chord" av.name mustEqual "Chord"
av.faction mustEqual PlanetSideEmpire.TR av.faction mustEqual PlanetSideEmpire.TR
av.sex mustEqual CharacterGender.Male av.sex mustEqual CharacterSex.Male
av.head mustEqual 0 av.head mustEqual 0
av.voice mustEqual CharacterVoice.Voice5 av.voice mustEqual CharacterVoice.Voice5
av.bep mustEqual 0 av.bep mustEqual 0
@ -39,7 +39,7 @@ class AvatarTest extends Specification {
} }
"can not maintain experience point values below zero" in { "can not maintain experience point values below zero" in {
val av = Avatar(0, "Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Voice5) val av = Avatar(0, "Chord", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Voice5)
av.bep mustEqual 0 av.bep mustEqual 0
av.copy(bep = -1) must throwA[AssertionError] av.copy(bep = -1) must throwA[AssertionError]
av.copy(cep = -1) must throwA[AssertionError] av.copy(cep = -1) must throwA[AssertionError]
@ -47,7 +47,7 @@ class AvatarTest extends Specification {
//refer to ImplantTest.scala for more tests //refer to ImplantTest.scala for more tests
"maximum of three implant slots" in { "maximum of three implant slots" in {
val obj = Avatar(0, "Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Voice5) val obj = Avatar(0, "Chord", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Voice5)
obj.implants.length mustEqual 3 obj.implants.length mustEqual 3
obj.implants(0) must beNone obj.implants(0) must beNone
obj.implants(1) must beNone obj.implants(1) must beNone
@ -61,7 +61,7 @@ class AvatarTest extends Specification {
0, 0,
"Chord", "Chord",
PlanetSideEmpire.TR, PlanetSideEmpire.TR,
CharacterGender.Male, CharacterSex.Male,
0, 0,
CharacterVoice.Voice5, CharacterVoice.Voice5,
bep = BattleRank.BR6.experience bep = BattleRank.BR6.experience
@ -81,7 +81,7 @@ class AvatarTest extends Specification {
"can not install the same type of implant twice" in { "can not install the same type of implant twice" in {
val testplant1 = Implant(new ImplantDefinition(ImplantType.AdvancedRegen)) val testplant1 = Implant(new ImplantDefinition(ImplantType.AdvancedRegen))
val testplant2 = Implant(new ImplantDefinition(ImplantType.AdvancedRegen)) val testplant2 = Implant(new ImplantDefinition(ImplantType.AdvancedRegen))
val obj = Avatar(0, "Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Voice5) val obj = Avatar(0, "Chord", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Voice5)
obj.copy(implants = obj.implants.updated(0, Some(testplant1)).updated(1, Some(testplant2))) must throwA[ obj.copy(implants = obj.implants.updated(0, Some(testplant1)).updated(1, Some(testplant2))) must throwA[
AssertionError AssertionError
] ]
@ -91,7 +91,7 @@ class AvatarTest extends Specification {
val testplant1 = Implant(new ImplantDefinition(ImplantType.AdvancedRegen)) val testplant1 = Implant(new ImplantDefinition(ImplantType.AdvancedRegen))
val testplant2 = Implant(new ImplantDefinition(ImplantType.Surge)) val testplant2 = Implant(new ImplantDefinition(ImplantType.Surge))
val testplant3 = Implant(new ImplantDefinition(ImplantType.DarklightVision)) val testplant3 = Implant(new ImplantDefinition(ImplantType.DarklightVision))
val obj = Avatar(0, "Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Voice5) val obj = Avatar(0, "Chord", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Voice5)
obj.copy( obj.copy(
bep = BattleRank.BR12.value, bep = BattleRank.BR12.value,
implants = Seq(Some(testplant1), Some(testplant2), Some(testplant3)) implants = Seq(Some(testplant1), Some(testplant2), Some(testplant3))

View file

@ -648,7 +648,7 @@ class ConverterTest extends Specification {
} }
"Player" should { "Player" should {
var avatar = Avatar(0, "Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Voice5) var avatar = Avatar(0, "Chord", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Voice5)
val obj: Player = { val obj: Player = {
/* /*
Create an AmmoBoxDefinition with which to build two AmmoBoxes Create an AmmoBoxDefinition with which to build two AmmoBoxes

View file

@ -26,7 +26,7 @@ class DamageCalculationsTests extends Specification {
val wep_prof = wep_fmode.Add val wep_prof = wep_fmode.Add
val proj = DamageModelTests.projectile val proj = DamageModelTests.projectile
val proj_prof = proj.asInstanceOf[DamageProfile] val proj_prof = proj.asInstanceOf[DamageProfile]
val player = Player(Avatar(0, "TestCharacter", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) val player = Player(Avatar(0, "TestCharacter", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute))
val projectile = Projectile(proj, wep, wep_fmode, player, Vector3(2, 2, 0), Vector3.Zero) val projectile = Projectile(proj, wep, wep_fmode, player, Vector3(2, 2, 0), Vector3.Zero)
val target = Vehicle(GlobalDefinitions.fury) val target = Vehicle(GlobalDefinitions.fury)
target.Position = Vector3(10, 0, 0) target.Position = Vector3(10, 0, 0)
@ -450,7 +450,7 @@ class DamageCalculationsTests extends Specification {
"galaxy gunship reduction (target is not a vehicle)" in { "galaxy gunship reduction (target is not a vehicle)" in {
val tplayer = val tplayer =
Player(Avatar(0, "TestCharacter2", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) Player(Avatar(0, "TestCharacter2", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute))
val resfprojectile = DamageInteraction( val resfprojectile = DamageInteraction(
SourceEntry(tplayer), SourceEntry(tplayer),
ProjectileReason( ProjectileReason(
@ -479,7 +479,7 @@ class ResistanceCalculationsTests extends Specification {
val wep = GlobalDefinitions.galaxy_gunship_cannon val wep = GlobalDefinitions.galaxy_gunship_cannon
val wep_fmode = Tool(wep).FireMode val wep_fmode = Tool(wep).FireMode
val proj = DamageModelTests.projectile val proj = DamageModelTests.projectile
val player = Player(Avatar(0, "TestCharacter", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) val player = Player(Avatar(0, "TestCharacter", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute))
val projectile = Projectile(proj, wep, wep_fmode, player, Vector3(2, 2, 0), Vector3.Zero) val projectile = Projectile(proj, wep, wep_fmode, player, Vector3(2, 2, 0), Vector3.Zero)
"ResistanceCalculations" should { "ResistanceCalculations" should {
@ -515,7 +515,7 @@ class ResistanceCalculationsTests extends Specification {
} }
"discern mechanized infantry targets" in { "discern mechanized infantry targets" in {
val target = Player(Avatar(0, "TestCharacter", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) val target = Player(Avatar(0, "TestCharacter", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute))
target.ExoSuit = ExoSuitType.MAX target.ExoSuit = ExoSuitType.MAX
val resprojectile = DamageInteraction( val resprojectile = DamageInteraction(
SourceEntry(target), SourceEntry(target),
@ -592,7 +592,7 @@ class ResolutionCalculationsTests extends Specification {
val wep = GlobalDefinitions.galaxy_gunship_cannon val wep = GlobalDefinitions.galaxy_gunship_cannon
val wep_fmode = Tool(wep).FireMode val wep_fmode = Tool(wep).FireMode
val proj = DamageModelTests.projectile val proj = DamageModelTests.projectile
val player = Player(Avatar(0, "TestCharacter", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) val player = Player(Avatar(0, "TestCharacter", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute))
player.Spawn() player.Spawn()
val projectile = Projectile(proj, wep, wep_fmode, player, Vector3(2, 2, 0), Vector3.Zero) val projectile = Projectile(proj, wep, wep_fmode, player, Vector3(2, 2, 0), Vector3.Zero)
@ -656,7 +656,7 @@ class ResolutionCalculationsTests extends Specification {
InfantryDamageAfterResist(100, 100)(50, 60) mustEqual (0, 50) InfantryDamageAfterResist(100, 100)(50, 60) mustEqual (0, 50)
} }
val player2 = Player(Avatar(0, "TestCharacter2", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) val player2 = Player(Avatar(0, "TestCharacter2", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute))
player2.ExoSuit = ExoSuitType.MAX player2.ExoSuit = ExoSuitType.MAX
player2.Spawn() player2.Spawn()
"calculate no max damage for vehicles" in { "calculate no max damage for vehicles" in {
@ -740,7 +740,7 @@ class DamageModelTests extends Specification {
val wep_tool = Tool(wep) val wep_tool = Tool(wep)
val wep_fmode = wep_tool.FireMode val wep_fmode = wep_tool.FireMode
val proj = DamageModelTests.projectile val proj = DamageModelTests.projectile
val player = Player(Avatar(0, "TestCharacter", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) val player = Player(Avatar(0, "TestCharacter", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute))
player.Spawn() player.Spawn()
val projectile = Projectile(proj, wep, wep_fmode, player, Vector3(2, 2, 0), Vector3.Zero) val projectile = Projectile(proj, wep, wep_fmode, player, Vector3(2, 2, 0), Vector3.Zero)
@ -767,7 +767,7 @@ class DamageModelTests extends Specification {
"resolve infantry targets" in { "resolve infantry targets" in {
val tplayer = val tplayer =
Player(Avatar(0, "TestCharacter2", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) Player(Avatar(0, "TestCharacter2", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute))
tplayer.Spawn() tplayer.Spawn()
tplayer.Health mustEqual 100 tplayer.Health mustEqual 100
tplayer.Armor mustEqual 50 tplayer.Armor mustEqual 50
@ -789,7 +789,7 @@ class DamageModelTests extends Specification {
"resolve infantry targets in a specific way" in { "resolve infantry targets in a specific way" in {
val tplayer = val tplayer =
Player(Avatar(0, "TestCharacter2", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) Player(Avatar(0, "TestCharacter2", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute))
tplayer.Spawn() tplayer.Spawn()
tplayer.Health mustEqual 100 tplayer.Health mustEqual 100
tplayer.Armor mustEqual 50 tplayer.Armor mustEqual 50
@ -811,7 +811,7 @@ class DamageModelTests extends Specification {
"resolve infantry targets, with damage overflow" in { "resolve infantry targets, with damage overflow" in {
val tplayer = val tplayer =
Player(Avatar(0, "TestCharacter2", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) Player(Avatar(0, "TestCharacter2", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute))
tplayer.Spawn() tplayer.Spawn()
tplayer.Health mustEqual 100 tplayer.Health mustEqual 100
tplayer.Armor mustEqual 50 tplayer.Armor mustEqual 50

View file

@ -35,7 +35,7 @@ import net.psforever.objects.vital.base.DamageResolution
import net.psforever.objects.vital.projectile.ProjectileReason import net.psforever.objects.vital.projectile.ProjectileReason
class DamageableTest extends Specification { class DamageableTest extends Specification {
val player1 = Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) val player1 = Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute))
val pSource = PlayerSource(player1) val pSource = PlayerSource(player1)
val weaponA = Tool(GlobalDefinitions.phoenix) //decimator val weaponA = Tool(GlobalDefinitions.phoenix) //decimator
val projectileA = weaponA.Projectile val projectileA = weaponA.Projectile
@ -128,7 +128,7 @@ class DamageableTest extends Specification {
"permit damaging friendly targets, even those not designated for friendly fire, if the target is hacked" in { "permit damaging friendly targets, even those not designated for friendly fire, if the target is hacked" in {
val player2 = val player2 =
Player(Avatar(0, "TestCharacter2", PlanetSideEmpire.NC, CharacterGender.Male, 0, CharacterVoice.Mute)) Player(Avatar(0, "TestCharacter2", PlanetSideEmpire.NC, CharacterSex.Male, 0, CharacterVoice.Mute))
player2.GUID = PlanetSideGUID(1) player2.GUID = PlanetSideGUID(1)
val target = new Terminal(new TerminalDefinition(0) { val target = new Terminal(new TerminalDefinition(0) {
Damageable = true Damageable = true
@ -240,7 +240,7 @@ class DamageableTest extends Specification {
"permit jamming friendly targets if the target is hacked" in { "permit jamming friendly targets if the target is hacked" in {
val player2 = val player2 =
Player(Avatar(0, "TestCharacter2", PlanetSideEmpire.NC, CharacterGender.Male, 0, CharacterVoice.Mute)) Player(Avatar(0, "TestCharacter2", PlanetSideEmpire.NC, CharacterSex.Male, 0, CharacterVoice.Mute))
player2.GUID = PlanetSideGUID(1) player2.GUID = PlanetSideGUID(1)
val target = new SensorDeployable(GlobalDefinitions.motionalarmsensor) val target = new SensorDeployable(GlobalDefinitions.motionalarmsensor)
target.Faction = player1.Faction target.Faction = player1.Faction
@ -285,7 +285,7 @@ class DamageableEntityDamageTest extends ActorTest {
val building = Building("test-building", 1, 1, zone, StructureType.Facility) //guid=1 val building = Building("test-building", 1, 1, zone, StructureType.Facility) //guid=1
val gen = Generator(GlobalDefinitions.generator) //guid=2 val gen = Generator(GlobalDefinitions.generator) //guid=2
val player1 = val player1 =
Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) //guid=3 Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=3
guid.register(building, 1) guid.register(building, 1)
guid.register(gen, 2) guid.register(gen, 2)
guid.register(player1, 3) guid.register(player1, 3)
@ -355,7 +355,7 @@ class DamageableEntityDestroyedTest extends ActorTest {
mech.Position = Vector3(1, 0, 0) mech.Position = Vector3(1, 0, 0)
mech.Actor = system.actorOf(Props(classOf[ImplantTerminalMechControl], mech), "mech-control") mech.Actor = system.actorOf(Props(classOf[ImplantTerminalMechControl], mech), "mech-control")
val player1 = val player1 =
Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) //guid=3 Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=3
player1.Position = Vector3(14, 0, 0) //<14m from generator; dies player1.Position = Vector3(14, 0, 0) //<14m from generator; dies
player1.Spawn() player1.Spawn()
val building = Building("test-building", 1, 1, zone, StructureType.Facility) //guid=1 val building = Building("test-building", 1, 1, zone, StructureType.Facility) //guid=1
@ -426,7 +426,7 @@ class DamageableEntityNotDestroyTwice extends ActorTest {
val building = Building("test-building", 1, 1, zone, StructureType.Facility) //guid=1 val building = Building("test-building", 1, 1, zone, StructureType.Facility) //guid=1
val gen = Generator(GlobalDefinitions.generator) //guid=2 val gen = Generator(GlobalDefinitions.generator) //guid=2
val player1 = val player1 =
Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) //guid=3 Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=3
player1.Spawn() player1.Spawn()
guid.register(building, 1) guid.register(building, 1)
guid.register(gen, 2) guid.register(gen, 2)
@ -499,7 +499,7 @@ class DamageableAmenityTest extends ActorTest {
val building = Building("test-building", 1, 1, zone, StructureType.Facility) //guid=1 val building = Building("test-building", 1, 1, zone, StructureType.Facility) //guid=1
val term = Terminal(GlobalDefinitions.order_terminal) //guid=2 val term = Terminal(GlobalDefinitions.order_terminal) //guid=2
val player1 = val player1 =
Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) //guid=3 Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=3
player1.Spawn() player1.Spawn()
guid.register(building, 1) guid.register(building, 1)
guid.register(term, 2) guid.register(term, 2)
@ -589,11 +589,11 @@ class DamageableMountableDamageTest extends ActorTest {
val building = Building("test-building", 1, 1, zone, StructureType.Facility) //guid=1 val building = Building("test-building", 1, 1, zone, StructureType.Facility) //guid=1
val mech = ImplantTerminalMech(GlobalDefinitions.implant_terminal_mech) //guid=2 val mech = ImplantTerminalMech(GlobalDefinitions.implant_terminal_mech) //guid=2
val player1 = val player1 =
Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) //guid=3 Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=3
player1.Spawn() player1.Spawn()
player1.Position = Vector3(2, 2, 2) player1.Position = Vector3(2, 2, 2)
val player2 = val player2 =
Player(Avatar(0, "TestCharacter2", PlanetSideEmpire.NC, CharacterGender.Male, 0, CharacterVoice.Mute)) //guid=4 Player(Avatar(0, "TestCharacter2", PlanetSideEmpire.NC, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=4
player2.Spawn() player2.Spawn()
guid.register(building, 1) guid.register(building, 1)
guid.register(mech, 2) guid.register(mech, 2)
@ -683,13 +683,13 @@ class DamageableMountableDestroyTest extends ActorTest {
val building = Building("test-building", 1, 1, zone, StructureType.Facility) //guid=1 val building = Building("test-building", 1, 1, zone, StructureType.Facility) //guid=1
val mech = ImplantTerminalMech(GlobalDefinitions.implant_terminal_mech) //guid=2 val mech = ImplantTerminalMech(GlobalDefinitions.implant_terminal_mech) //guid=2
val player1 = val player1 =
Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) //guid=3 Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=3
player1.Spawn() player1.Spawn()
player1.Position = Vector3(2, 2, 2) player1.Position = Vector3(2, 2, 2)
val player1Probe = TestProbe() val player1Probe = TestProbe()
player1.Actor = player1Probe.ref player1.Actor = player1Probe.ref
val player2 = val player2 =
Player(Avatar(0, "TestCharacter2", PlanetSideEmpire.NC, CharacterGender.Male, 0, CharacterVoice.Mute)) //guid=4 Player(Avatar(0, "TestCharacter2", PlanetSideEmpire.NC, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=4
player2.Spawn() player2.Spawn()
val player2Probe = TestProbe() val player2Probe = TestProbe()
player2.Actor = player2Probe.ref player2.Actor = player2Probe.ref
@ -784,13 +784,13 @@ class DamageableWeaponTurretDamageTest extends ActorTest {
turret.Zone = zone turret.Zone = zone
turret.Position = Vector3(1, 0, 0) turret.Position = Vector3(1, 0, 0)
val player1 = val player1 =
Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) //guid=3 Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=3
player1.Spawn() player1.Spawn()
player1.Position = Vector3(2, 2, 2) player1.Position = Vector3(2, 2, 2)
val player1Probe = TestProbe() val player1Probe = TestProbe()
player1.Actor = player1Probe.ref player1.Actor = player1Probe.ref
val player2 = val player2 =
Player(Avatar(0, "TestCharacter2", PlanetSideEmpire.NC, CharacterGender.Male, 0, CharacterVoice.Mute)) //guid=4 Player(Avatar(0, "TestCharacter2", PlanetSideEmpire.NC, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=4
player2.Spawn() player2.Spawn()
val player2Probe = TestProbe() val player2Probe = TestProbe()
player2.Actor = player2Probe.ref player2.Actor = player2Probe.ref
@ -882,13 +882,13 @@ class DamageableWeaponTurretJammerTest extends ActorTest {
val turretWeapon = turret.Weapons.values.head.Equipment.get.asInstanceOf[Tool] val turretWeapon = turret.Weapons.values.head.Equipment.get.asInstanceOf[Tool]
val player1 = val player1 =
Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) //guid=3 Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=3
player1.Spawn() player1.Spawn()
player1.Position = Vector3(2, 2, 2) player1.Position = Vector3(2, 2, 2)
val player1Probe = TestProbe() val player1Probe = TestProbe()
player1.Actor = player1Probe.ref player1.Actor = player1Probe.ref
val player2 = val player2 =
Player(Avatar(0, "TestCharacter2", PlanetSideEmpire.NC, CharacterGender.Male, 0, CharacterVoice.Mute)) //guid=4 Player(Avatar(0, "TestCharacter2", PlanetSideEmpire.NC, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=4
player2.Spawn() player2.Spawn()
val player2Probe = TestProbe() val player2Probe = TestProbe()
player2.Actor = player2Probe.ref player2.Actor = player2Probe.ref
@ -982,13 +982,13 @@ class DamageableWeaponTurretDestructionTest extends ActorTest {
val turretWeapon = turret.Weapons.values.head.Equipment.get.asInstanceOf[Tool] val turretWeapon = turret.Weapons.values.head.Equipment.get.asInstanceOf[Tool]
val player1 = val player1 =
Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) //guid=3 Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=3
player1.Spawn() player1.Spawn()
player1.Position = Vector3(2, 2, 2) player1.Position = Vector3(2, 2, 2)
val player1Probe = TestProbe() val player1Probe = TestProbe()
player1.Actor = player1Probe.ref player1.Actor = player1Probe.ref
val player2 = val player2 =
Player(Avatar(1, "TestCharacter2", PlanetSideEmpire.NC, CharacterGender.Male, 0, CharacterVoice.Mute)) //guid=4 Player(Avatar(1, "TestCharacter2", PlanetSideEmpire.NC, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=4
player2.Spawn() player2.Spawn()
val player2Probe = TestProbe() val player2Probe = TestProbe()
player2.Actor = player2Probe.ref player2.Actor = player2Probe.ref
@ -1133,13 +1133,13 @@ class DamageableVehicleDamageTest extends ActorTest {
atv.Position = Vector3(1, 0, 0) atv.Position = Vector3(1, 0, 0)
val player1 = val player1 =
Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) //guid=2 Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=2
player1.Spawn() player1.Spawn()
player1.Position = Vector3(2, 0, 0) player1.Position = Vector3(2, 0, 0)
val player1Probe = TestProbe() val player1Probe = TestProbe()
player1.Actor = player1Probe.ref player1.Actor = player1Probe.ref
val player2 = val player2 =
Player(Avatar(0, "TestCharacter2", PlanetSideEmpire.NC, CharacterGender.Male, 0, CharacterVoice.Mute)) //guid=3 Player(Avatar(0, "TestCharacter2", PlanetSideEmpire.NC, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=3
player2.Spawn() player2.Spawn()
val player2Probe = TestProbe() val player2Probe = TestProbe()
player2.Actor = player2Probe.ref player2.Actor = player2Probe.ref
@ -1242,18 +1242,18 @@ class DamageableVehicleDamageMountedTest extends ActorTest {
atv.Actor = system.actorOf(Props(classOf[VehicleControl], atv), "atv-control") atv.Actor = system.actorOf(Props(classOf[VehicleControl], atv), "atv-control")
val player1 = val player1 =
Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) //guid=2 Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=2
player1.Spawn() player1.Spawn()
player1.Position = Vector3(2, 0, 0) player1.Position = Vector3(2, 0, 0)
val player1Probe = TestProbe() val player1Probe = TestProbe()
player1.Actor = player1Probe.ref player1.Actor = player1Probe.ref
val player2 = val player2 =
Player(Avatar(0, "TestCharacter2", PlanetSideEmpire.NC, CharacterGender.Male, 0, CharacterVoice.Mute)) //guid=3 Player(Avatar(0, "TestCharacter2", PlanetSideEmpire.NC, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=3
player2.Spawn() player2.Spawn()
val player2Probe = TestProbe() val player2Probe = TestProbe()
player2.Actor = player2Probe.ref player2.Actor = player2Probe.ref
val player3 = val player3 =
Player(Avatar(0, "TestCharacter3", PlanetSideEmpire.NC, CharacterGender.Male, 0, CharacterVoice.Mute)) //guid=10 Player(Avatar(0, "TestCharacter3", PlanetSideEmpire.NC, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=10
player3.Spawn() player3.Spawn()
val player3Probe = TestProbe() val player3Probe = TestProbe()
player3.Actor = player3Probe.ref player3.Actor = player3Probe.ref
@ -1387,18 +1387,18 @@ class DamageableVehicleJammeringMountedTest extends ActorTest {
lodestar.Position = Vector3(1, 0, 0) lodestar.Position = Vector3(1, 0, 0)
val player1 = val player1 =
Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) //guid=7 Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=7
player1.Spawn() player1.Spawn()
player1.Position = Vector3(2, 0, 0) player1.Position = Vector3(2, 0, 0)
val player1Probe = TestProbe() val player1Probe = TestProbe()
player1.Actor = player1Probe.ref player1.Actor = player1Probe.ref
val player2 = val player2 =
Player(Avatar(0, "TestCharacter2", PlanetSideEmpire.NC, CharacterGender.Male, 0, CharacterVoice.Mute)) //guid=8 Player(Avatar(0, "TestCharacter2", PlanetSideEmpire.NC, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=8
player2.Spawn() player2.Spawn()
val player2Probe = TestProbe() val player2Probe = TestProbe()
player2.Actor = player2Probe.ref player2.Actor = player2Probe.ref
val player3 = val player3 =
Player(Avatar(0, "TestCharacter3", PlanetSideEmpire.NC, CharacterGender.Male, 0, CharacterVoice.Mute)) //guid=9 Player(Avatar(0, "TestCharacter3", PlanetSideEmpire.NC, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=9
player3.Spawn() player3.Spawn()
val player3Probe = TestProbe() val player3Probe = TestProbe()
player3.Actor = player3Probe.ref player3.Actor = player3Probe.ref
@ -1499,13 +1499,13 @@ class DamageableVehicleDestroyTest extends ActorTest {
val atvWeapon = atv.Weapons(1).Equipment.get.asInstanceOf[Tool] //guid=4 & 5 val atvWeapon = atv.Weapons(1).Equipment.get.asInstanceOf[Tool] //guid=4 & 5
val player1 = val player1 =
Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) //guid=2 Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=2
player1.Spawn() player1.Spawn()
player1.Position = Vector3(2, 0, 0) player1.Position = Vector3(2, 0, 0)
val player1Probe = TestProbe() val player1Probe = TestProbe()
player1.Actor = player1Probe.ref player1.Actor = player1Probe.ref
val player2 = val player2 =
Player(Avatar(0, "TestCharacter2", PlanetSideEmpire.NC, CharacterGender.Male, 0, CharacterVoice.Mute)) //guid=3 Player(Avatar(0, "TestCharacter2", PlanetSideEmpire.NC, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=3
player2.Spawn() player2.Spawn()
val player2Probe = TestProbe() val player2Probe = TestProbe()
player2.Actor = player2Probe.ref player2.Actor = player2Probe.ref
@ -1595,18 +1595,18 @@ class DamageableVehicleDestroyMountedTest extends ActorTest {
lodestar.Position = Vector3(1, 0, 0) lodestar.Position = Vector3(1, 0, 0)
val player1 = val player1 =
Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) //guid=7 Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=7
player1.Spawn() player1.Spawn()
player1.Position = Vector3(2, 0, 0) player1.Position = Vector3(2, 0, 0)
val player1Probe = TestProbe() val player1Probe = TestProbe()
player1.Actor = player1Probe.ref player1.Actor = player1Probe.ref
val player2 = val player2 =
Player(Avatar(0, "TestCharacter2", PlanetSideEmpire.NC, CharacterGender.Male, 0, CharacterVoice.Mute)) //guid=8 Player(Avatar(0, "TestCharacter2", PlanetSideEmpire.NC, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=8
player2.Spawn() player2.Spawn()
val player2Probe = TestProbe() val player2Probe = TestProbe()
player2.Actor = player2Probe.ref player2.Actor = player2Probe.ref
val player3 = val player3 =
Player(Avatar(0, "TestCharacter3", PlanetSideEmpire.NC, CharacterGender.Male, 0, CharacterVoice.Mute)) //guid=9 Player(Avatar(0, "TestCharacter3", PlanetSideEmpire.NC, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=9
player3.Spawn() player3.Spawn()
val player3Probe = TestProbe() val player3Probe = TestProbe()
player3.Actor = player3Probe.ref player3.Actor = player3Probe.ref

View file

@ -320,10 +320,10 @@ class ExplosiveDeployableJammerTest extends ActorTest {
val j_mine = Deployables.Make(DeployedItem.jammer_mine)().asInstanceOf[ExplosiveDeployable] //guid=1 val j_mine = Deployables.Make(DeployedItem.jammer_mine)().asInstanceOf[ExplosiveDeployable] //guid=1
val player1 = val player1 =
Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) //guid=3 Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=3
player1.Spawn() player1.Spawn()
val player2 = val player2 =
Player(Avatar(0, "TestCharacter2", PlanetSideEmpire.NC, CharacterGender.Male, 0, CharacterVoice.Mute)) //guid=4 Player(Avatar(0, "TestCharacter2", PlanetSideEmpire.NC, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=4
player2.Spawn() player2.Spawn()
val weapon = Tool(GlobalDefinitions.jammer_grenade) //guid=5 val weapon = Tool(GlobalDefinitions.jammer_grenade) //guid=5
guid.register(j_mine, 1) guid.register(j_mine, 1)
@ -420,10 +420,10 @@ class ExplosiveDeployableJammerExplodeTest extends ActorTest {
val h_mine = Deployables.Make(DeployedItem.he_mine)().asInstanceOf[ExplosiveDeployable] //guid=2 val h_mine = Deployables.Make(DeployedItem.he_mine)().asInstanceOf[ExplosiveDeployable] //guid=2
val player1 = val player1 =
Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) //guid=3 Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=3
player1.Spawn() player1.Spawn()
val player2 = val player2 =
Player(Avatar(0, "TestCharacter2", PlanetSideEmpire.NC, CharacterGender.Male, 0, CharacterVoice.Mute)) //guid=4 Player(Avatar(0, "TestCharacter2", PlanetSideEmpire.NC, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=4
player2.Spawn() player2.Spawn()
val weapon = Tool(GlobalDefinitions.jammer_grenade) //guid=5 val weapon = Tool(GlobalDefinitions.jammer_grenade) //guid=5
guid.register(h_mine, 2) guid.register(h_mine, 2)
@ -531,10 +531,10 @@ class ExplosiveDeployableDestructionTest extends ActorTest {
val h_mine = Deployables.Make(DeployedItem.he_mine)().asInstanceOf[ExplosiveDeployable] //guid=2 val h_mine = Deployables.Make(DeployedItem.he_mine)().asInstanceOf[ExplosiveDeployable] //guid=2
val player1 = val player1 =
Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) //guid=3 Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=3
player1.Spawn() player1.Spawn()
val player2 = val player2 =
Player(Avatar(0, "TestCharacter2", PlanetSideEmpire.NC, CharacterGender.Male, 0, CharacterVoice.Mute)) //guid=4 Player(Avatar(0, "TestCharacter2", PlanetSideEmpire.NC, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=4
player2.Spawn() player2.Spawn()
val weapon = Tool(GlobalDefinitions.suppressor) //guid=5 val weapon = Tool(GlobalDefinitions.suppressor) //guid=5
guid.register(h_mine, 2) guid.register(h_mine, 2)
@ -673,7 +673,7 @@ class TurretControlMountTest extends ActorTest {
obj.Actor = system.actorOf(Props(classOf[TurretControl], obj), s"${obj.Definition.Name}_test") obj.Actor = system.actorOf(Props(classOf[TurretControl], obj), s"${obj.Definition.Name}_test")
assert(obj.Seats(0).occupant.isEmpty) assert(obj.Seats(0).occupant.isEmpty)
val player1 = Player(Avatar(0, "test1", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) val player1 = Player(Avatar(0, "test1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute))
obj.Actor ! Mountable.TryMount(player1, 1) obj.Actor ! Mountable.TryMount(player1, 1)
val reply1a = receiveOne(200 milliseconds) val reply1a = receiveOne(200 milliseconds)
assert(reply1a.isInstanceOf[Mountable.MountMessages]) assert(reply1a.isInstanceOf[Mountable.MountMessages])
@ -693,7 +693,7 @@ class TurretControlBlockMountTest extends ActorTest {
obj.Actor = system.actorOf(Props(classOf[TurretControl], obj), s"${obj.Definition.Name}_test") obj.Actor = system.actorOf(Props(classOf[TurretControl], obj), s"${obj.Definition.Name}_test")
assert(obj.Seats(0).occupant.isEmpty) assert(obj.Seats(0).occupant.isEmpty)
val player1 = Player(Avatar(0, "test1", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) val player1 = Player(Avatar(0, "test1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute))
obj.Actor ! Mountable.TryMount(player1, 1) obj.Actor ! Mountable.TryMount(player1, 1)
val reply1a = receiveOne(200 milliseconds) val reply1a = receiveOne(200 milliseconds)
assert(reply1a.isInstanceOf[Mountable.MountMessages]) assert(reply1a.isInstanceOf[Mountable.MountMessages])
@ -702,7 +702,7 @@ class TurretControlBlockMountTest extends ActorTest {
assert(reply1b.response.isInstanceOf[Mountable.CanMount]) assert(reply1b.response.isInstanceOf[Mountable.CanMount])
assert(obj.Seats(0).occupant.contains(player1)) assert(obj.Seats(0).occupant.contains(player1))
val player2 = Player(Avatar(1, "test2", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) val player2 = Player(Avatar(1, "test2", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute))
obj.Actor ! Mountable.TryMount(player2, 1) obj.Actor ! Mountable.TryMount(player2, 1)
val reply2a = receiveOne(200 milliseconds) val reply2a = receiveOne(200 milliseconds)
assert(reply2a.isInstanceOf[Mountable.MountMessages]) assert(reply2a.isInstanceOf[Mountable.MountMessages])
@ -721,7 +721,7 @@ class TurretControlBlockBetrayalMountTest extends ActorTest {
obj.Actor = system.actorOf(Props(classOf[TurretControl], obj), s"${obj.Definition.Name}_test") obj.Actor = system.actorOf(Props(classOf[TurretControl], obj), s"${obj.Definition.Name}_test")
assert(obj.Seats(0).occupant.isEmpty) assert(obj.Seats(0).occupant.isEmpty)
val player = Player(Avatar(0, "test", PlanetSideEmpire.VS, CharacterGender.Male, 0, CharacterVoice.Mute)) val player = Player(Avatar(0, "test", PlanetSideEmpire.VS, CharacterSex.Male, 0, CharacterVoice.Mute))
obj.Actor ! Mountable.TryMount(player, 1) obj.Actor ! Mountable.TryMount(player, 1)
val reply1a = receiveOne(200 milliseconds) val reply1a = receiveOne(200 milliseconds)
assert(reply1a.isInstanceOf[Mountable.MountMessages]) assert(reply1a.isInstanceOf[Mountable.MountMessages])
@ -741,8 +741,9 @@ class TurretControlDismountTest extends ActorTest {
obj.Actor = system.actorOf(Props(classOf[TurretControl], obj), s"${obj.Definition.Name}_test") obj.Actor = system.actorOf(Props(classOf[TurretControl], obj), s"${obj.Definition.Name}_test")
assert(obj.Seats(0).occupant.isEmpty) assert(obj.Seats(0).occupant.isEmpty)
val player = Player(Avatar(0, "test", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) val player = Player(Avatar(0, "test", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute))
obj.Actor ! Mountable.TryMount(player, 1) obj.Actor ! Mountable.TryMount(player, 1)
val reply1a = receiveOne(200 milliseconds) val reply1a = receiveOne(200 milliseconds)
assert(reply1a.isInstanceOf[Mountable.MountMessages]) assert(reply1a.isInstanceOf[Mountable.MountMessages])
val reply1b = reply1a.asInstanceOf[Mountable.MountMessages] val reply1b = reply1a.asInstanceOf[Mountable.MountMessages]
@ -775,7 +776,7 @@ class TurretControlBetrayalMountTest extends ActorTest {
val probe = new TestProbe(system) val probe = new TestProbe(system)
assert(obj.Seats(0).occupant.isEmpty) assert(obj.Seats(0).occupant.isEmpty)
val player = Player(Avatar(0, "test", PlanetSideEmpire.NC, CharacterGender.Male, 0, CharacterVoice.Mute)) val player = Player(Avatar(0, "test", PlanetSideEmpire.NC, CharacterSex.Male, 0, CharacterVoice.Mute))
assert(player.Faction != obj.Faction) assert(player.Faction != obj.Faction)
obj.Actor.tell(Mountable.TryMount(player, 1), probe.ref) obj.Actor.tell(Mountable.TryMount(player, 1), probe.ref)
val reply1a = probe.receiveOne(200 milliseconds) val reply1a = probe.receiveOne(200 milliseconds)

View file

@ -20,7 +20,7 @@ import org.specs2.mutable.Specification
import scala.concurrent.duration._ import scala.concurrent.duration._
class DoorTest extends Specification { class DoorTest extends Specification {
val player = Player(Avatar(0, "test", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) val player = Player(Avatar(0, "test", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute))
"Door" should { "Door" should {
"construct" in { "construct" in {
@ -148,7 +148,7 @@ object DoorControlTest {
GlobalDefinitions.building GlobalDefinitions.building
) )
door.Owner.Faction = faction door.Owner.Faction = faction
val player = Player(Avatar(0, "test", faction, CharacterGender.Male, 0, CharacterVoice.Mute)) val player = Player(Avatar(0, "test", faction, CharacterSex.Male, 0, CharacterVoice.Mute))
guid.register(player, 2) guid.register(player, 2)
(player, door) (player, door)
} }

View file

@ -207,13 +207,13 @@ class EnvironmentAttributeTest extends Specification {
"GantryDenialField" should { "GantryDenialField" should {
"interact with players" in { "interact with players" in {
val obj = Player(Avatar(0, "test", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) val obj = Player(Avatar(0, "test", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute))
obj.Spawn() obj.Spawn()
EnvironmentAttribute.GantryDenialField.canInteractWith(obj) mustEqual true EnvironmentAttribute.GantryDenialField.canInteractWith(obj) mustEqual true
} }
"not interact with dead players" in { "not interact with dead players" in {
val obj = Player(Avatar(0, "test", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) val obj = Player(Avatar(0, "test", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute))
obj.isAlive mustEqual false obj.isAlive mustEqual false
EnvironmentAttribute.GantryDenialField.canInteractWith(obj) mustEqual false EnvironmentAttribute.GantryDenialField.canInteractWith(obj) mustEqual false
} }

View file

@ -100,7 +100,7 @@ class FacilityTurretControl1Test extends ActorTest {
} }
class FacilityTurretControl2Test extends ActorTest { class FacilityTurretControl2Test extends ActorTest {
val player = Player(Avatar(0, "", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) val player = Player(Avatar(0, "", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute))
val obj = FacilityTurret(GlobalDefinitions.manned_turret) val obj = FacilityTurret(GlobalDefinitions.manned_turret)
obj.GUID = PlanetSideGUID(1) obj.GUID = PlanetSideGUID(1)
obj.Actor = system.actorOf(Props(classOf[FacilityTurretControl], obj), "turret-control") obj.Actor = system.actorOf(Props(classOf[FacilityTurretControl], obj), "turret-control")
@ -127,7 +127,7 @@ class FacilityTurretControl2Test extends ActorTest {
} }
class FacilityTurretControl3Test extends ActorTest { class FacilityTurretControl3Test extends ActorTest {
val player = Player(Avatar(0, "", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) val player = Player(Avatar(0, "", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute))
val obj = FacilityTurret(GlobalDefinitions.manned_turret) val obj = FacilityTurret(GlobalDefinitions.manned_turret)
obj.GUID = PlanetSideGUID(1) obj.GUID = PlanetSideGUID(1)
obj.Actor = system.actorOf(Props(classOf[FacilityTurretControl], obj), "turret-control") obj.Actor = system.actorOf(Props(classOf[FacilityTurretControl], obj), "turret-control")
@ -153,7 +153,7 @@ class FacilityTurretControl3Test extends ActorTest {
} }
class FacilityTurretControl4Test extends ActorTest { class FacilityTurretControl4Test extends ActorTest {
val player = Player(Avatar(0, "", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) val player = Player(Avatar(0, "", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute))
val obj = FacilityTurret(GlobalDefinitions.vanu_sentry_turret) val obj = FacilityTurret(GlobalDefinitions.vanu_sentry_turret)
obj.GUID = PlanetSideGUID(1) obj.GUID = PlanetSideGUID(1)
obj.Actor = system.actorOf(Props(classOf[FacilityTurretControl], obj), "turret-control") obj.Actor = system.actorOf(Props(classOf[FacilityTurretControl], obj), "turret-control")
@ -201,7 +201,7 @@ class FacilityTurretControlRestorationTest extends ActorTest {
val turretWeapon = turret.Weapons.values.head.Equipment.get.asInstanceOf[Tool] val turretWeapon = turret.Weapons.values.head.Equipment.get.asInstanceOf[Tool]
val player1 = val player1 =
Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) //guid=3 Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=3
player1.Spawn() player1.Spawn()
player1.Position = Vector3(2, 2, 2) player1.Position = Vector3(2, 2, 2)
val player1Probe = TestProbe() val player1Probe = TestProbe()

View file

@ -66,7 +66,7 @@ class GeneratorControlDamageTest extends ActorTest {
gen.Actor = system.actorOf(Props(classOf[GeneratorControl], gen), "generator-control") gen.Actor = system.actorOf(Props(classOf[GeneratorControl], gen), "generator-control")
val player1 = val player1 =
Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) //guid=3 Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=3
player1.Position = Vector3(14, 0, 0) //<14m from generator; dies player1.Position = Vector3(14, 0, 0) //<14m from generator; dies
player1.Spawn() player1.Spawn()
@ -149,7 +149,7 @@ class GeneratorControlCriticalTest extends ActorTest {
gen.Actor = system.actorOf(Props(classOf[GeneratorControl], gen), "generator-control") gen.Actor = system.actorOf(Props(classOf[GeneratorControl], gen), "generator-control")
val player1 = val player1 =
Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) //guid=3 Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=3
player1.Position = Vector3(14, 0, 0) //<14m from generator; dies player1.Position = Vector3(14, 0, 0) //<14m from generator; dies
player1.Spawn() player1.Spawn()
@ -234,7 +234,7 @@ class GeneratorControlDestroyedTest extends ActorTest {
gen.Actor = system.actorOf(Props(classOf[GeneratorControl], gen), "generator-control") gen.Actor = system.actorOf(Props(classOf[GeneratorControl], gen), "generator-control")
val player1 = val player1 =
Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) //guid=3 Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=3
player1.Position = Vector3(14, 0, 0) //<14m from generator; dies player1.Position = Vector3(14, 0, 0) //<14m from generator; dies
player1.Spawn() player1.Spawn()
player1.Actor = TestProbe().ref player1.Actor = TestProbe().ref
@ -343,13 +343,13 @@ class GeneratorControlKillsTest extends ActorTest {
gen.Actor = system.actorOf(Props(classOf[GeneratorControl], gen), "generator-control") gen.Actor = system.actorOf(Props(classOf[GeneratorControl], gen), "generator-control")
val player1 = val player1 =
Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) //guid=3 Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=3
player1.Position = Vector3(14, 0, 0) //<14m from generator; dies player1.Position = Vector3(14, 0, 0) //<14m from generator; dies
player1.Spawn() player1.Spawn()
val player1Probe = TestProbe() val player1Probe = TestProbe()
player1.Actor = player1Probe.ref player1.Actor = player1Probe.ref
val player2 = val player2 =
Player(Avatar(0, "TestCharacter2", PlanetSideEmpire.TR, CharacterGender.Female, 1, CharacterVoice.Mute)) //guid=4 Player(Avatar(0, "TestCharacter2", PlanetSideEmpire.TR, CharacterSex.Female, 1, CharacterVoice.Mute)) //guid=4
player2.Position = Vector3(25, 0, 0) //>14m from generator; lives player2.Position = Vector3(25, 0, 0) //>14m from generator; lives
player2.Spawn() player2.Spawn()
val player2Probe = TestProbe() val player2Probe = TestProbe()
@ -481,7 +481,7 @@ class GeneratorControlNotDestroyTwice extends ActorTest {
val building = Building("test-building", 1, 1, zone, StructureType.Facility) //guid=1 val building = Building("test-building", 1, 1, zone, StructureType.Facility) //guid=1
val gen = Generator(GeneratorTest.generator_definition) //guid=2 val gen = Generator(GeneratorTest.generator_definition) //guid=2
val player1 = val player1 =
Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) //guid=3 Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=3
player1.Spawn() player1.Spawn()
guid.register(building, 1) guid.register(building, 1)
guid.register(gen, 2) guid.register(gen, 2)
@ -572,7 +572,7 @@ class GeneratorControlNotDamageIfExplodingTest extends ActorTest {
gen.Actor = system.actorOf(Props(classOf[GeneratorControl], gen), "generator-control") gen.Actor = system.actorOf(Props(classOf[GeneratorControl], gen), "generator-control")
val player1 = val player1 =
Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) //guid=3 Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=3
player1.Position = Vector3(14, 0, 0) //<14m from generator; dies player1.Position = Vector3(14, 0, 0) //<14m from generator; dies
player1.Spawn() player1.Spawn()
val player1Probe = TestProbe() val player1Probe = TestProbe()
@ -671,7 +671,7 @@ class GeneratorControlNotRepairIfExplodingTest extends ActorTest {
gen.Actor = system.actorOf(Props(classOf[GeneratorControl], gen), "generator-control") gen.Actor = system.actorOf(Props(classOf[GeneratorControl], gen), "generator-control")
val player1 = val player1 =
Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) //guid=3 Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=3
player1.Position = Vector3(14, 0, 0) //<14m from generator; dies player1.Position = Vector3(14, 0, 0) //<14m from generator; dies
player1.Spawn() player1.Spawn()
val player1Probe = TestProbe() val player1Probe = TestProbe()
@ -774,7 +774,7 @@ class GeneratorControlRepairPastRestorePoint extends ActorTest {
gen.Actor = system.actorOf(Props(classOf[GeneratorControl], gen), "generator-control") gen.Actor = system.actorOf(Props(classOf[GeneratorControl], gen), "generator-control")
val player1 = val player1 =
Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) //guid=3 Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=3
player1.Position = Vector3(14, 0, 0) //<14m from generator; dies player1.Position = Vector3(14, 0, 0) //<14m from generator; dies
player1.Spawn() player1.Spawn()
val player1Probe = TestProbe() val player1Probe = TestProbe()

View file

@ -98,6 +98,6 @@ object IFFLockControlTest {
GlobalDefinitions.building GlobalDefinitions.building
) )
lock.Owner.Faction = faction lock.Owner.Faction = faction
(Player(Avatar(0, "test", faction, CharacterGender.Male, 0, CharacterVoice.Mute)), lock) (Player(Avatar(0, "test", faction, CharacterSex.Male, 0, CharacterVoice.Mute)), lock)
} }
} }

View file

@ -3,13 +3,13 @@ package objects
import net.psforever.objects._ import net.psforever.objects._
import net.psforever.objects.loadouts._ import net.psforever.objects.loadouts._
import net.psforever.types.{CharacterGender, CharacterVoice, ExoSuitType, PlanetSideEmpire} import net.psforever.types.{CharacterSex, CharacterVoice, ExoSuitType, PlanetSideEmpire}
import net.psforever.objects.GlobalDefinitions._ import net.psforever.objects.GlobalDefinitions._
import net.psforever.objects.avatar.Avatar import net.psforever.objects.avatar.Avatar
import org.specs2.mutable._ import org.specs2.mutable._
class LoadoutTest extends Specification { class LoadoutTest extends Specification {
val avatar = Avatar(0, "TestCharacter", PlanetSideEmpire.VS, CharacterGender.Female, 41, CharacterVoice.Voice1) val avatar = Avatar(0, "TestCharacter", PlanetSideEmpire.VS, CharacterSex.Female, 41, CharacterVoice.Voice1)
def CreatePlayer(): Player = { def CreatePlayer(): Player = {
new Player(avatar) { new Player(avatar) {

View file

@ -8,7 +8,7 @@ import net.psforever.objects.avatar.Avatar
import net.psforever.objects.definition.ObjectDefinition import net.psforever.objects.definition.ObjectDefinition
import net.psforever.objects.serverobject.mount._ import net.psforever.objects.serverobject.mount._
import net.psforever.objects.serverobject.PlanetSideServerObject import net.psforever.objects.serverobject.PlanetSideServerObject
import net.psforever.types.{CharacterGender, CharacterVoice, PlanetSideEmpire, PlanetSideGUID} import net.psforever.types.{CharacterSex, CharacterVoice, PlanetSideEmpire, PlanetSideGUID}
import scala.concurrent.duration.Duration import scala.concurrent.duration.Duration
@ -25,7 +25,7 @@ class MountableControl1Test extends ActorTest {
class MountableControl2Test extends ActorTest { class MountableControl2Test extends ActorTest {
"MountableControl" should { "MountableControl" should {
"let a player mount" in { "let a player mount" in {
val player = Player(Avatar(0, "test", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) val player = Player(Avatar(0, "test", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute))
val obj = new MountableTest.MountableTestObject val obj = new MountableTest.MountableTestObject
obj.Actor = system.actorOf(Props(classOf[MountableTest.MountableTestControl], obj), "mountable") obj.Actor = system.actorOf(Props(classOf[MountableTest.MountableTestControl], obj), "mountable")
val msg = Mountable.TryMount(player, 0) val msg = Mountable.TryMount(player, 0)
@ -46,8 +46,8 @@ class MountableControl2Test extends ActorTest {
class MountableControl3Test extends ActorTest { class MountableControl3Test extends ActorTest {
"MountableControl" should { "MountableControl" should {
"block a player from mounting" in { "block a player from mounting" in {
val player1 = Player(Avatar(0, "test1", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) val player1 = Player(Avatar(0, "test1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute))
val player2 = Player(Avatar(1, "test2", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) val player2 = Player(Avatar(1, "test2", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute))
val obj = new MountableTest.MountableTestObject val obj = new MountableTest.MountableTestObject
obj.Actor = system.actorOf(Props(classOf[MountableTest.MountableTestControl], obj), "mountable") obj.Actor = system.actorOf(Props(classOf[MountableTest.MountableTestControl], obj), "mountable")
obj.Actor ! Mountable.TryMount(player1, 0) obj.Actor ! Mountable.TryMount(player1, 0)

View file

@ -5,13 +5,13 @@ import net.psforever.objects.{GlobalDefinitions, Player, Vehicle}
import net.psforever.objects.avatar.Avatar import net.psforever.objects.avatar.Avatar
import net.psforever.objects.serverobject.shuttle.OrbitalShuttle import net.psforever.objects.serverobject.shuttle.OrbitalShuttle
import net.psforever.objects.vehicles.AccessPermissionGroup import net.psforever.objects.vehicles.AccessPermissionGroup
import net.psforever.types.{CharacterGender, CharacterVoice, PlanetSideEmpire} import net.psforever.types.{CharacterSex, CharacterVoice, PlanetSideEmpire}
import org.specs2.mutable.Specification import org.specs2.mutable.Specification
class OrbitalShuttleTest extends Specification { class OrbitalShuttleTest extends Specification {
val testAvatar1 = Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute) val testAvatar1 = Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)
val testAvatar2 = Avatar(1, "TestCharacter2", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute) val testAvatar2 = Avatar(1, "TestCharacter2", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)
val testAvatar3 = Avatar(2, "TestCharacter3", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute) val testAvatar3 = Avatar(2, "TestCharacter3", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)
"OrbitalShuttle" should { "OrbitalShuttle" should {
"construct (proper definition)" in { "construct (proper definition)" in {

View file

@ -26,9 +26,9 @@ import scala.concurrent.duration._
class PlayerControlHealTest extends ActorTest { class PlayerControlHealTest extends ActorTest {
val player1 = val player1 =
Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) //guid=1 Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=1
val player2 = val player2 =
Player(Avatar(1, "TestCharacter2", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) //guid=2 Player(Avatar(1, "TestCharacter2", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=2
val avatarProbe = TestProbe() val avatarProbe = TestProbe()
val guid = new NumberPoolHub(new MaxNumberSource(15)) val guid = new NumberPoolHub(new MaxNumberSource(15))
val zone = new Zone("test", new ZoneMap("test"), 0) { val zone = new Zone("test", new ZoneMap("test"), 0) {
@ -111,7 +111,7 @@ class PlayerControlHealTest extends ActorTest {
} }
class PlayerControlHealSelfTest extends ActorTest { class PlayerControlHealSelfTest extends ActorTest {
val player1 = val player1 =
Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) //guid=1 Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=1
val avatarProbe = TestProbe() val avatarProbe = TestProbe()
val guid = new NumberPoolHub(new MaxNumberSource(15)) val guid = new NumberPoolHub(new MaxNumberSource(15))
val zone = new Zone("test", new ZoneMap("test"), 0) { val zone = new Zone("test", new ZoneMap("test"), 0) {
@ -186,9 +186,9 @@ class PlayerControlHealSelfTest extends ActorTest {
class PlayerControlRepairTest extends ActorTest { class PlayerControlRepairTest extends ActorTest {
val player1 = val player1 =
Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) //guid=1 Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=1
val player2 = val player2 =
Player(Avatar(1, "TestCharacter2", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) //guid=2 Player(Avatar(1, "TestCharacter2", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=2
val avatarProbe = TestProbe() val avatarProbe = TestProbe()
val guid = new NumberPoolHub(new MaxNumberSource(15)) val guid = new NumberPoolHub(new MaxNumberSource(15))
val zone = new Zone("test", new ZoneMap("test"), 0) { val zone = new Zone("test", new ZoneMap("test"), 0) {
@ -282,7 +282,7 @@ class PlayerControlRepairTest extends ActorTest {
class PlayerControlRepairSelfTest extends ActorTest { class PlayerControlRepairSelfTest extends ActorTest {
val player1 = val player1 =
Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) //guid=1 Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=1
val avatarProbe = TestProbe() val avatarProbe = TestProbe()
val guid = new NumberPoolHub(new MaxNumberSource(15)) val guid = new NumberPoolHub(new MaxNumberSource(15))
val zone = new Zone("test", new ZoneMap("test"), 0) { val zone = new Zone("test", new ZoneMap("test"), 0) {
@ -357,9 +357,9 @@ class PlayerControlRepairSelfTest extends ActorTest {
class PlayerControlDamageTest extends ActorTest { class PlayerControlDamageTest extends ActorTest {
val player1 = val player1 =
Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) //guid=1 Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=1
val player2 = val player2 =
Player(Avatar(1, "TestCharacter2", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) //guid=2 Player(Avatar(1, "TestCharacter2", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=2
val avatarProbe = TestProbe() val avatarProbe = TestProbe()
val activityProbe = TestProbe() val activityProbe = TestProbe()
val guid = new NumberPoolHub(new MaxNumberSource(15)) val guid = new NumberPoolHub(new MaxNumberSource(15))
@ -462,9 +462,9 @@ class PlayerControlDamageTest extends ActorTest {
class PlayerControlDeathStandingTest extends ActorTest { class PlayerControlDeathStandingTest extends ActorTest {
val player1 = val player1 =
Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) //guid=1 Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=1
val player2 = val player2 =
Player(Avatar(1, "TestCharacter2", PlanetSideEmpire.NC, CharacterGender.Male, 0, CharacterVoice.Mute)) //guid=2 Player(Avatar(1, "TestCharacter2", PlanetSideEmpire.NC, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=2
val avatarProbe = TestProbe() val avatarProbe = TestProbe()
val activityProbe = TestProbe() val activityProbe = TestProbe()
val guid = new NumberPoolHub(new MaxNumberSource(15)) val guid = new NumberPoolHub(new MaxNumberSource(15))
@ -600,9 +600,9 @@ class PlayerControlDeathStandingTest extends ActorTest {
class PlayerControlDeathSeatedTest extends ActorTest { class PlayerControlDeathSeatedTest extends ActorTest {
val player1 = val player1 =
Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) //guid=1 Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=1
val player2 = val player2 =
Player(Avatar(1, "TestCharacter2", PlanetSideEmpire.NC, CharacterGender.Male, 0, CharacterVoice.Mute)) //guid=2 Player(Avatar(1, "TestCharacter2", PlanetSideEmpire.NC, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=2
val avatarProbe = TestProbe() val avatarProbe = TestProbe()
val activityProbe = TestProbe() val activityProbe = TestProbe()
val guid = new NumberPoolHub(new MaxNumberSource(15)) val guid = new NumberPoolHub(new MaxNumberSource(15))
@ -756,7 +756,7 @@ class PlayerControlDeathSeatedTest extends ActorTest {
class PlayerControlInteractWithWaterTest extends ActorTest { class PlayerControlInteractWithWaterTest extends ActorTest {
val player1 = val player1 =
Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) //guid=1 Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=1
val avatarProbe = TestProbe() val avatarProbe = TestProbe()
val guid = new NumberPoolHub(new MaxNumberSource(15)) val guid = new NumberPoolHub(new MaxNumberSource(15))
val pool = Pool(EnvironmentAttribute.Water, DeepSquare(-1, 10, 10, 0, 0)) val pool = Pool(EnvironmentAttribute.Water, DeepSquare(-1, 10, 10, 0, 0))
@ -808,7 +808,7 @@ class PlayerControlInteractWithWaterTest extends ActorTest {
class PlayerControlStopInteractWithWaterTest extends ActorTest { class PlayerControlStopInteractWithWaterTest extends ActorTest {
val player1 = val player1 =
Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) //guid=1 Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=1
val avatarProbe = TestProbe() val avatarProbe = TestProbe()
val guid = new NumberPoolHub(new MaxNumberSource(15)) val guid = new NumberPoolHub(new MaxNumberSource(15))
val pool = Pool(EnvironmentAttribute.Water, DeepSquare(-1, 10, 10, 0, 0)) val pool = Pool(EnvironmentAttribute.Water, DeepSquare(-1, 10, 10, 0, 0))
@ -871,7 +871,7 @@ class PlayerControlStopInteractWithWaterTest extends ActorTest {
class PlayerControlInteractWithLavaTest extends ActorTest { class PlayerControlInteractWithLavaTest extends ActorTest {
val player1 = val player1 =
Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) //guid=1 Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=1
val avatarProbe = TestProbe() val avatarProbe = TestProbe()
val guid = new NumberPoolHub(new MaxNumberSource(15)) val guid = new NumberPoolHub(new MaxNumberSource(15))
val pool = Pool(EnvironmentAttribute.Lava, DeepSquare(-1, 10, 10, 0, 0)) val pool = Pool(EnvironmentAttribute.Lava, DeepSquare(-1, 10, 10, 0, 0))
@ -931,7 +931,7 @@ class PlayerControlInteractWithLavaTest extends ActorTest {
class PlayerControlInteractWithDeathTest extends ActorTest { class PlayerControlInteractWithDeathTest extends ActorTest {
val player1 = val player1 =
Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) //guid=1 Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=1
val avatarProbe = TestProbe() val avatarProbe = TestProbe()
val guid = new NumberPoolHub(new MaxNumberSource(15)) val guid = new NumberPoolHub(new MaxNumberSource(15))
val pool = Pool(EnvironmentAttribute.Death, DeepSquare(-1, 10, 10, 0, 0)) val pool = Pool(EnvironmentAttribute.Death, DeepSquare(-1, 10, 10, 0, 0))

View file

@ -6,6 +6,7 @@ import net.psforever.objects._
import net.psforever.objects.avatar.Avatar import net.psforever.objects.avatar.Avatar
import net.psforever.objects.definition.{SimpleItemDefinition, SpecialExoSuitDefinition} import net.psforever.objects.definition.{SimpleItemDefinition, SpecialExoSuitDefinition}
import net.psforever.objects.equipment.EquipmentSize import net.psforever.objects.equipment.EquipmentSize
import net.psforever.objects.inventory.InventoryItem
import net.psforever.objects.locker.LockerEquipment import net.psforever.objects.locker.LockerEquipment
import net.psforever.types.{PlanetSideGUID, _} import net.psforever.types.{PlanetSideGUID, _}
import org.specs2.mutable._ import org.specs2.mutable._
@ -16,7 +17,7 @@ class PlayerTest extends Specification {
def TestPlayer( def TestPlayer(
name: String, name: String,
faction: PlanetSideEmpire.Value, faction: PlanetSideEmpire.Value,
sex: CharacterGender.Value, sex: CharacterSex,
head: Int, head: Int,
voice: CharacterVoice.Value voice: CharacterVoice.Value
): Player = { ): Player = {
@ -25,7 +26,7 @@ class PlayerTest extends Specification {
"Player" should { "Player" should {
"construct" in { "construct" in {
val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Voice5) val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Voice5)
obj.isAlive mustEqual false obj.isAlive mustEqual false
obj.FacingYawUpper mustEqual 0 obj.FacingYawUpper mustEqual 0
obj.Jumping mustEqual false obj.Jumping mustEqual false
@ -43,7 +44,7 @@ class PlayerTest extends Specification {
} }
"(re)spawn" in { "(re)spawn" in {
val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Voice5) val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Voice5)
obj.isAlive mustEqual false obj.isAlive mustEqual false
obj.Health mustEqual 0 obj.Health mustEqual 0
obj.Armor mustEqual 0 obj.Armor mustEqual 0
@ -56,7 +57,7 @@ class PlayerTest extends Specification {
} }
"will not (re)spawn if not dead" in { "will not (re)spawn if not dead" in {
val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Voice5) val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Voice5)
obj.Spawn() obj.Spawn()
obj.Health mustEqual 100 obj.Health mustEqual 100
obj.Armor mustEqual 50 obj.Armor mustEqual 50
@ -72,7 +73,7 @@ class PlayerTest extends Specification {
} }
"can die" in { "can die" in {
val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Voice5) val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Voice5)
obj.Spawn() obj.Spawn()
obj.Armor = 35 //50 -> 35 obj.Armor = 35 //50 -> 35
obj.isAlive mustEqual true obj.isAlive mustEqual true
@ -85,7 +86,7 @@ class PlayerTest extends Specification {
} }
"can not become a backpack if alive" in { "can not become a backpack if alive" in {
val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Voice5) val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Voice5)
obj.Spawn() obj.Spawn()
obj.isAlive mustEqual true obj.isAlive mustEqual true
obj.isBackpack mustEqual false obj.isBackpack mustEqual false
@ -95,7 +96,7 @@ class PlayerTest extends Specification {
} }
"can become a backpack" in { "can become a backpack" in {
val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Voice5) val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Voice5)
obj.isAlive mustEqual false obj.isAlive mustEqual false
obj.isBackpack mustEqual false obj.isBackpack mustEqual false
obj.Release obj.Release
@ -104,7 +105,7 @@ class PlayerTest extends Specification {
} }
"set new maximum values (health, stamina)" in { "set new maximum values (health, stamina)" in {
val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Voice5) val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Voice5)
obj.MaxHealth mustEqual 100 obj.MaxHealth mustEqual 100
obj.MaxHealth = 123 obj.MaxHealth = 123
obj.MaxHealth mustEqual 123 obj.MaxHealth mustEqual 123
@ -114,7 +115,7 @@ class PlayerTest extends Specification {
} }
// "set new values (health, armor, stamina) but only when alive" in { // "set new values (health, armor, stamina) but only when alive" in {
// val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Voice5) // val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Voice5)
// obj.Health = 23 // obj.Health = 23
// obj.Armor = 34 // obj.Armor = 34
// obj.Stamina = 45 // obj.Stamina = 45
@ -135,7 +136,7 @@ class PlayerTest extends Specification {
// } // }
"has visible slots" in { "has visible slots" in {
val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Voice5) val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Voice5)
obj.VisibleSlots mustEqual Set(0, 2, 4) //Standard obj.VisibleSlots mustEqual Set(0, 2, 4) //Standard
obj.ExoSuit = ExoSuitType.Agile obj.ExoSuit = ExoSuitType.Agile
obj.VisibleSlots mustEqual Set(0, 1, 2, 4) obj.VisibleSlots mustEqual Set(0, 1, 2, 4)
@ -148,7 +149,7 @@ class PlayerTest extends Specification {
} }
"init (Standard Exo-Suit)" in { "init (Standard Exo-Suit)" in {
val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Voice5) val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Voice5)
obj.ExoSuit mustEqual ExoSuitType.Standard obj.ExoSuit mustEqual ExoSuitType.Standard
obj.Slot(0).Size mustEqual EquipmentSize.Pistol obj.Slot(0).Size mustEqual EquipmentSize.Pistol
obj.Slot(1).Size mustEqual EquipmentSize.Blocked obj.Slot(1).Size mustEqual EquipmentSize.Blocked
@ -162,7 +163,7 @@ class PlayerTest extends Specification {
"draw equipped holsters only" in { "draw equipped holsters only" in {
val wep = SimpleItem(SimpleItemDefinition(149)) val wep = SimpleItem(SimpleItemDefinition(149))
val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Voice5) val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Voice5)
obj.Slot(1).Size = EquipmentSize.Pistol obj.Slot(1).Size = EquipmentSize.Pistol
obj.Slot(1).Equipment = wep obj.Slot(1).Equipment = wep
obj.DrawnSlot mustEqual Player.HandsDownSlot obj.DrawnSlot mustEqual Player.HandsDownSlot
@ -175,7 +176,7 @@ class PlayerTest extends Specification {
"remember the last drawn holster" in { "remember the last drawn holster" in {
val wep1 = SimpleItem(SimpleItemDefinition(149)) val wep1 = SimpleItem(SimpleItemDefinition(149))
val wep2 = SimpleItem(SimpleItemDefinition(149)) val wep2 = SimpleItem(SimpleItemDefinition(149))
val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Voice5) val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Voice5)
obj.Slot(0).Size = EquipmentSize.Pistol obj.Slot(0).Size = EquipmentSize.Pistol
obj.Slot(0).Equipment = wep1 obj.Slot(0).Equipment = wep1
obj.Slot(1).Size = EquipmentSize.Pistol obj.Slot(1).Size = EquipmentSize.Pistol
@ -214,7 +215,7 @@ class PlayerTest extends Specification {
"hold something in their free hand" in { "hold something in their free hand" in {
val wep = SimpleItem(SimpleItemDefinition(149)) val wep = SimpleItem(SimpleItemDefinition(149))
val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Voice5) val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Voice5)
obj.Slot(Player.FreeHandSlot).Equipment = wep obj.Slot(Player.FreeHandSlot).Equipment = wep
obj.Slot(Player.FreeHandSlot).Equipment.get.Definition.ObjectId mustEqual 149 obj.Slot(Player.FreeHandSlot).Equipment.get.Definition.ObjectId mustEqual 149
@ -222,14 +223,14 @@ class PlayerTest extends Specification {
"provide an invalid hand that can not hold anything" in { "provide an invalid hand that can not hold anything" in {
val wep = SimpleItem(SimpleItemDefinition(149)) val wep = SimpleItem(SimpleItemDefinition(149))
val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Voice5) val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Voice5)
obj.Slot(-1).Equipment = wep obj.Slot(-1).Equipment = wep
obj.Slot(-1).Equipment.isEmpty mustEqual true obj.Slot(-1).Equipment.isEmpty mustEqual true
} }
"search for the smallest available slot in which to store equipment" in { "search for the smallest available slot in which to store equipment" in {
val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Voice5) val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Voice5)
obj.Inventory.Resize(3, 3) //fits one item obj.Inventory.Resize(3, 3) //fits one item
obj.Fit(Tool(GlobalDefinitions.beamer)).contains(0) mustEqual true obj.Fit(Tool(GlobalDefinitions.beamer)).contains(0) mustEqual true
@ -247,7 +248,7 @@ class PlayerTest extends Specification {
} }
"can use their free hand to hold things" in { "can use their free hand to hold things" in {
val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Voice5) val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Voice5)
val ammo = AmmoBox(GlobalDefinitions.bullet_9mm) val ammo = AmmoBox(GlobalDefinitions.bullet_9mm)
obj.FreeHand.Equipment.isEmpty mustEqual true obj.FreeHand.Equipment.isEmpty mustEqual true
@ -256,12 +257,12 @@ class PlayerTest extends Specification {
} }
"can access the player's locker-space" in { "can access the player's locker-space" in {
val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Voice5) val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Voice5)
obj.Slot(5).Equipment.get.isInstanceOf[LockerEquipment] mustEqual true obj.Slot(5).Equipment.get.isInstanceOf[LockerEquipment] mustEqual true
} }
"can find equipment" in { "can find equipment" in {
val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Voice5) val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Voice5)
obj.Slot(0).Equipment = { obj.Slot(0).Equipment = {
val item = Tool(beamer) val item = Tool(beamer)
item.GUID = PlanetSideGUID(1) item.GUID = PlanetSideGUID(1)
@ -297,7 +298,7 @@ class PlayerTest extends Specification {
} }
"does equipment collision checking (are we already holding something there?)" in { "does equipment collision checking (are we already holding something there?)" in {
val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Voice5) val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Voice5)
val item1 = Tool(beamer) val item1 = Tool(beamer)
val item2 = Kit(medkit) val item2 = Kit(medkit)
val item3 = AmmoBox(GlobalDefinitions.bullet_9mm) val item3 = AmmoBox(GlobalDefinitions.bullet_9mm)
@ -306,7 +307,7 @@ class PlayerTest extends Specification {
obj.FreeHand.Equipment = item3 obj.FreeHand.Equipment = item3
obj.Collisions(0, 1, 1) match { obj.Collisions(0, 1, 1) match {
case Success(List(item)) => case Success(List(item: InventoryItem)) =>
item.obj mustEqual item1 item.obj mustEqual item1
item.start mustEqual 0 item.start mustEqual 0
case _ => case _ =>
@ -320,7 +321,7 @@ class PlayerTest extends Specification {
} //holsters, nothing } //holsters, nothing
obj.Collisions(6, 1, 1) match { obj.Collisions(6, 1, 1) match {
case Success(List(item)) => case Success(List(item: InventoryItem)) =>
item.obj mustEqual item2 item.obj mustEqual item2
item.start mustEqual 6 item.start mustEqual 6
case _ => case _ =>
@ -328,16 +329,17 @@ class PlayerTest extends Specification {
} //inventory } //inventory
obj.Collisions(Player.FreeHandSlot, 1, 1) match { obj.Collisions(Player.FreeHandSlot, 1, 1) match {
case Success(List(item)) => case Success(List(item: InventoryItem)) =>
item.obj mustEqual item3 item.obj mustEqual item3
item.start mustEqual Player.FreeHandSlot item.start mustEqual Player.FreeHandSlot
case _ => case _ =>
ko ko
} //free hand } //free hand
ok
} }
"mount in a vehicle" in { "mount in a vehicle" in {
val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Voice5) val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Voice5)
obj.VehicleSeated.isEmpty mustEqual true obj.VehicleSeated.isEmpty mustEqual true
obj.VehicleSeated = PlanetSideGUID(65) obj.VehicleSeated = PlanetSideGUID(65)
obj.VehicleSeated.contains(PlanetSideGUID(65)) mustEqual true obj.VehicleSeated.contains(PlanetSideGUID(65)) mustEqual true
@ -346,7 +348,7 @@ class PlayerTest extends Specification {
} }
"own in a vehicle" in { "own in a vehicle" in {
val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Voice5) val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Voice5)
obj.avatar.vehicle.isEmpty mustEqual true obj.avatar.vehicle.isEmpty mustEqual true
obj.avatar.vehicle = Some(PlanetSideGUID(65)) obj.avatar.vehicle = Some(PlanetSideGUID(65))
obj.avatar.vehicle.contains(PlanetSideGUID(65)) mustEqual true obj.avatar.vehicle.contains(PlanetSideGUID(65)) mustEqual true
@ -355,21 +357,21 @@ class PlayerTest extends Specification {
} }
"remember what zone he is in" in { "remember what zone he is in" in {
val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Voice5) val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Voice5)
obj.Continent mustEqual "home2" obj.Continent mustEqual "home2"
obj.Continent = "ugd01" obj.Continent = "ugd01"
obj.Continent mustEqual "ugd01" obj.Continent mustEqual "ugd01"
} }
"special is typically normal and can not be changed from normal" in { "special is typically normal and can not be changed from normal" in {
val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Voice5) val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Voice5)
obj.UsingSpecial mustEqual SpecialExoSuitDefinition.Mode.Normal obj.UsingSpecial mustEqual SpecialExoSuitDefinition.Mode.Normal
obj.UsingSpecial = SpecialExoSuitDefinition.Mode.Shielded obj.UsingSpecial = SpecialExoSuitDefinition.Mode.Shielded
obj.UsingSpecial mustEqual SpecialExoSuitDefinition.Mode.Normal obj.UsingSpecial mustEqual SpecialExoSuitDefinition.Mode.Normal
} }
"a TR MAX can change its special to Overdrive or Anchored" in { "a TR MAX can change its special to Overdrive or Anchored" in {
val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Voice5) val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Voice5)
obj.ExoSuit = ExoSuitType.MAX obj.ExoSuit = ExoSuitType.MAX
obj.UsingSpecial mustEqual SpecialExoSuitDefinition.Mode.Normal obj.UsingSpecial mustEqual SpecialExoSuitDefinition.Mode.Normal
obj.UsingSpecial = SpecialExoSuitDefinition.Mode.Anchored obj.UsingSpecial = SpecialExoSuitDefinition.Mode.Anchored
@ -384,7 +386,7 @@ class PlayerTest extends Specification {
} }
"an NC MAX can change its special to Shielded" in { "an NC MAX can change its special to Shielded" in {
val obj = TestPlayer("Chord", PlanetSideEmpire.NC, CharacterGender.Male, 0, CharacterVoice.Voice5) val obj = TestPlayer("Chord", PlanetSideEmpire.NC, CharacterSex.Male, 0, CharacterVoice.Voice5)
obj.ExoSuit = ExoSuitType.MAX obj.ExoSuit = ExoSuitType.MAX
obj.UsingSpecial mustEqual SpecialExoSuitDefinition.Mode.Normal obj.UsingSpecial mustEqual SpecialExoSuitDefinition.Mode.Normal
obj.UsingSpecial = SpecialExoSuitDefinition.Mode.Shielded obj.UsingSpecial = SpecialExoSuitDefinition.Mode.Shielded
@ -394,13 +396,13 @@ class PlayerTest extends Specification {
} }
"one faction can not use the other's specials" in { "one faction can not use the other's specials" in {
val objtr = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Voice5) val objtr = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Voice5)
objtr.ExoSuit = ExoSuitType.MAX objtr.ExoSuit = ExoSuitType.MAX
objtr.UsingSpecial mustEqual SpecialExoSuitDefinition.Mode.Normal objtr.UsingSpecial mustEqual SpecialExoSuitDefinition.Mode.Normal
objtr.UsingSpecial = SpecialExoSuitDefinition.Mode.Shielded objtr.UsingSpecial = SpecialExoSuitDefinition.Mode.Shielded
objtr.UsingSpecial mustEqual SpecialExoSuitDefinition.Mode.Normal objtr.UsingSpecial mustEqual SpecialExoSuitDefinition.Mode.Normal
val objnc = TestPlayer("Chord", PlanetSideEmpire.NC, CharacterGender.Male, 0, CharacterVoice.Voice5) val objnc = TestPlayer("Chord", PlanetSideEmpire.NC, CharacterSex.Male, 0, CharacterVoice.Voice5)
objnc.ExoSuit = ExoSuitType.MAX objnc.ExoSuit = ExoSuitType.MAX
objnc.UsingSpecial mustEqual SpecialExoSuitDefinition.Mode.Normal objnc.UsingSpecial mustEqual SpecialExoSuitDefinition.Mode.Normal
objnc.UsingSpecial = SpecialExoSuitDefinition.Mode.Overdrive objnc.UsingSpecial = SpecialExoSuitDefinition.Mode.Overdrive
@ -410,7 +412,7 @@ class PlayerTest extends Specification {
} }
"changing exo-suit type resets the special to Normal (and changing back does not revert it again)" in { "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, CharacterVoice.Voice5) val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Voice5)
obj.ExoSuit = ExoSuitType.MAX obj.ExoSuit = ExoSuitType.MAX
obj.UsingSpecial mustEqual SpecialExoSuitDefinition.Mode.Normal obj.UsingSpecial mustEqual SpecialExoSuitDefinition.Mode.Normal
obj.UsingSpecial = SpecialExoSuitDefinition.Mode.Anchored obj.UsingSpecial = SpecialExoSuitDefinition.Mode.Anchored

View file

@ -13,7 +13,7 @@ import net.psforever.types.{PlanetSideGUID, _}
import org.specs2.mutable.Specification import org.specs2.mutable.Specification
class ProjectileTest extends Specification { class ProjectileTest extends Specification {
val player = Player(Avatar(0, "TestCharacter", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) val player = Player(Avatar(0, "TestCharacter", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute))
val fury = Vehicle(GlobalDefinitions.fury) val fury = Vehicle(GlobalDefinitions.fury)
"Range" should { "Range" should {
@ -209,7 +209,7 @@ class ProjectileTest extends Specification {
"contain timely information" in { "contain timely information" in {
val obj = val obj =
Player(Avatar(0, "TestCharacter-alt", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) Player(Avatar(0, "TestCharacter-alt", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute))
obj.VehicleSeated = Some(PlanetSideGUID(1)) obj.VehicleSeated = Some(PlanetSideGUID(1))
obj.Position = Vector3(1.2f, 3.4f, 5.6f) obj.Position = Vector3(1.2f, 3.4f, 5.6f)
obj.Orientation = Vector3(2.1f, 4.3f, 6.5f) obj.Orientation = Vector3(2.1f, 4.3f, 6.5f)
@ -333,7 +333,7 @@ class ProjectileTest extends Specification {
"Projectile DamageInteraction" should { //TODO wrong place for this test? "Projectile DamageInteraction" should { //TODO wrong place for this test?
val beamer_wep = Tool(GlobalDefinitions.beamer) val beamer_wep = Tool(GlobalDefinitions.beamer)
val p_source = PlayerSource(player) val p_source = PlayerSource(player)
val player2 = Player(Avatar(0, "TestTarget", PlanetSideEmpire.NC, CharacterGender.Female, 1, CharacterVoice.Mute)) val player2 = Player(Avatar(0, "TestTarget", PlanetSideEmpire.NC, CharacterSex.Female, 1, CharacterVoice.Mute))
val p2_source = PlayerSource(player2) val p2_source = PlayerSource(player2)
val projectile = Projectile( val projectile = Projectile(
beamer_wep.Projectile, beamer_wep.Projectile,

View file

@ -37,7 +37,7 @@ class RepairableEntityRepairTest extends ActorTest {
val building = Building("test-building", 1, 1, zone, StructureType.Facility) //guid=1 val building = Building("test-building", 1, 1, zone, StructureType.Facility) //guid=1
val gen = Generator(GlobalDefinitions.generator) //guid=2 val gen = Generator(GlobalDefinitions.generator) //guid=2
val player1 = val player1 =
Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) //guid=3 Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=3
player1.Spawn() player1.Spawn()
guid.register(building, 1) guid.register(building, 1)
guid.register(gen, 2) guid.register(gen, 2)
@ -109,7 +109,7 @@ class RepairableEntityNotRepairTest extends ActorTest {
val building = Building("test-building", 1, 1, zone, StructureType.Facility) //guid=1 val building = Building("test-building", 1, 1, zone, StructureType.Facility) //guid=1
val gen = Generator(GlobalDefinitions.generator) //guid=2 val gen = Generator(GlobalDefinitions.generator) //guid=2
val player1 = val player1 =
Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) //guid=3 Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=3
player1.Spawn() player1.Spawn()
guid.register(building, 1) guid.register(building, 1)
guid.register(gen, 2) guid.register(gen, 2)
@ -150,7 +150,7 @@ class RepairableAmenityTest extends ActorTest {
val building = Building("test-building", 1, 1, zone, StructureType.Facility) //guid=1 val building = Building("test-building", 1, 1, zone, StructureType.Facility) //guid=1
val term = Terminal(GlobalDefinitions.order_terminal) //guid=2 val term = Terminal(GlobalDefinitions.order_terminal) //guid=2
val player1 = val player1 =
Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) //guid=3 Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=3
player1.Spawn() player1.Spawn()
guid.register(building, 1) guid.register(building, 1)
guid.register(term, 2) guid.register(term, 2)
@ -251,7 +251,7 @@ class RepairableTurretWeapon extends ActorTest {
val turretWeapon = turret.Weapons.values.head.Equipment.get.asInstanceOf[Tool] val turretWeapon = turret.Weapons.values.head.Equipment.get.asInstanceOf[Tool]
val player1 = val player1 =
Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) //guid=3 Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=3
player1.Spawn() player1.Spawn()
player1.Position = Vector3(2, 2, 2) player1.Position = Vector3(2, 2, 2)
val player1Probe = TestProbe() val player1Probe = TestProbe()
@ -337,7 +337,7 @@ class RepairableVehicleRepair extends ActorTest {
val atvWeapon = atv.Weapons(1).Equipment.get.asInstanceOf[Tool] val atvWeapon = atv.Weapons(1).Equipment.get.asInstanceOf[Tool]
val player1 = val player1 =
Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) //guid=4 Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=4
player1.Spawn() player1.Spawn()
player1.Position = Vector3(2, 2, 2) player1.Position = Vector3(2, 2, 2)
val player1Probe = TestProbe() val player1Probe = TestProbe()
@ -410,7 +410,7 @@ class RepairableVehicleRestoration extends ActorTest {
val atvWeapon = atv.Weapons(1).Equipment.get.asInstanceOf[Tool] val atvWeapon = atv.Weapons(1).Equipment.get.asInstanceOf[Tool]
val player1 = val player1 =
Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) //guid=4 Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=4
player1.Spawn() player1.Spawn()
player1.Position = Vector3(2, 2, 2) player1.Position = Vector3(2, 2, 2)
val player1Probe = TestProbe() val player1Probe = TestProbe()

View file

@ -154,7 +154,7 @@ class ResourceSiloControlUseTest extends FreedContextActorTest {
expectNoMessage(1000 milliseconds) expectNoMessage(1000 milliseconds)
var buildingMap = new TrieMap[Int, Building]() var buildingMap = new TrieMap[Int, Building]()
val guid = new NumberPoolHub(new MaxNumberSource(max = 10)) val guid = new NumberPoolHub(new MaxNumberSource(max = 10))
val player = Player(Avatar(0, "TestCharacter", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) val player = Player(Avatar(0, "TestCharacter", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute))
val ant = Vehicle(GlobalDefinitions.ant) val ant = Vehicle(GlobalDefinitions.ant)
val silo = new ResourceSilo() val silo = new ResourceSilo()
val catchall = new TestProbe(system).ref val catchall = new TestProbe(system).ref
@ -427,7 +427,7 @@ class ResourceSiloControlNoUpdateTest extends ActorTest {
object ResourceSiloTest { object ResourceSiloTest {
val player = Player( val player = Player(
new Avatar(0, "TestCharacter", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute) new Avatar(0, "TestCharacter", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)
) )
class ProbedAvatarService(probe: TestProbe) extends Actor { class ProbedAvatarService(probe: TestProbe) extends Actor {

View file

@ -60,7 +60,7 @@ class UtilityTest extends Specification {
val veh = Vehicle(GlobalDefinitions.quadstealth) val veh = Vehicle(GlobalDefinitions.quadstealth)
veh.Faction = PlanetSideEmpire.TR veh.Faction = PlanetSideEmpire.TR
val obj = Utility(UtilityType.teleportpad_terminal, UtilityTest.vehicle) val obj = Utility(UtilityType.teleportpad_terminal, UtilityTest.vehicle)
val player = Player(Avatar(0, "TestCharacter", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) val player = Player(Avatar(0, "TestCharacter", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute))
veh.GUID = PlanetSideGUID(101) veh.GUID = PlanetSideGUID(101)
obj().Owner = veh //hack obj().Owner = veh //hack
obj().GUID = PlanetSideGUID(1) obj().GUID = PlanetSideGUID(1)

View file

@ -330,25 +330,6 @@ class VehicleControlMountingBlockedExosuitTest extends ActorTest {
override def VehicleEvents: ActorRef = catchall override def VehicleEvents: ActorRef = catchall
override def Activity: ActorRef = catchall override def Activity: ActorRef = catchall
} }
def checkCanNotMount(probe: TestProbe, id: String): Unit = {
val reply = probe.receiveOne(Duration.create(250, "ms"))
reply match {
case msg: Mountable.MountMessages =>
assert(msg.response.isInstanceOf[Mountable.CanNotMount], s"test $id")
case _ =>
assert(false, s"test $id-b")
}
}
def checkCanMount(probe: TestProbe, id: String): Unit = {
val reply = probe.receiveOne(Duration.create(250, "ms"))
reply match {
case msg: Mountable.MountMessages =>
assert(msg.response.isInstanceOf[Mountable.CanMount], s" - test: $id")
case _ =>
assert(false, s" - test: $id-b")
}
}
val vehicle = Vehicle(GlobalDefinitions.apc_tr) val vehicle = Vehicle(GlobalDefinitions.apc_tr)
vehicle.Faction = PlanetSideEmpire.TR vehicle.Faction = PlanetSideEmpire.TR
vehicle.GUID = PlanetSideGUID(10) vehicle.GUID = PlanetSideGUID(10)
@ -379,28 +360,28 @@ class VehicleControlMountingBlockedExosuitTest extends ActorTest {
val probe = new TestProbe(system) val probe = new TestProbe(system)
// disallow // disallow
vehicle.Actor.tell(Mountable.TryMount(player2, 1), probe.ref) //MAX in non-Max mount vehicle.Actor.tell(Mountable.TryMount(player2, 1), probe.ref) //MAX in non-Max mount
checkCanNotMount(probe, "MAX in non-Max mount 1") VehicleControlTest.checkCanNotMount(probe, "MAX in non-Max mount 1")
vehicle.Actor.tell(Mountable.TryMount(player2, 2), probe.ref) //MAX in non-MAX mount vehicle.Actor.tell(Mountable.TryMount(player2, 2), probe.ref) //MAX in non-MAX mount
checkCanNotMount(probe, "MAX in non-MAX mount 2") VehicleControlTest.checkCanNotMount(probe, "MAX in non-MAX mount 2")
vehicle.Actor.tell(Mountable.TryMount(player1, 11), probe.ref) //Reinforced in MAX-only mount vehicle.Actor.tell(Mountable.TryMount(player1, 11), probe.ref) //Reinforced in MAX-only mount
checkCanNotMount(probe, "Reinforced in MAX-only mount") VehicleControlTest.checkCanNotMount(probe, "Reinforced in MAX-only mount")
vehicle.Actor.tell(Mountable.TryMount(player3, 11), probe.ref) //Agile in MAX-only mount vehicle.Actor.tell(Mountable.TryMount(player3, 11), probe.ref) //Agile in MAX-only mount
checkCanNotMount(probe, "Agile in MAX-only mount") VehicleControlTest.checkCanNotMount(probe, "Agile in MAX-only mount")
//allow //allow
vehicle.Actor.tell(Mountable.TryMount(player1, 1), probe.ref) // Reinforced in driver mount allowing all except MAX vehicle.Actor.tell(Mountable.TryMount(player1, 1), probe.ref) // Reinforced in driver mount allowing all except MAX
checkCanMount(probe, "Reinforced in driver mount allowing all except MAX") VehicleControlTest.checkCanMount(probe, "Reinforced in driver mount allowing all except MAX")
// Reset to allow further driver mount mounting tests // Reset to allow further driver mount mounting tests
vehicle.Actor.tell(Mountable.TryDismount(player1, 0), probe.ref) vehicle.Actor.tell(Mountable.TryDismount(player1, 0), probe.ref)
probe.receiveOne(500 milliseconds) //discard probe.receiveOne(500 milliseconds) //discard
vehicle.Owner = None //ensure vehicle.Owner = None //ensure
vehicle.OwnerName = None //ensure vehicle.OwnerName = None //ensure
vehicle.Actor.tell(Mountable.TryMount(player3, 1), probe.ref) // Agile in driver mount allowing all except MAX vehicle.Actor.tell(Mountable.TryMount(player3, 1), probe.ref) // Agile in driver mount allowing all except MAX
checkCanMount(probe, "Agile in driver mount allowing all except MAX") VehicleControlTest.checkCanMount(probe, "Agile in driver mount allowing all except MAX")
vehicle.Actor.tell(Mountable.TryMount(player1, 3), probe.ref) // Reinforced in passenger mount allowing all except MAX vehicle.Actor.tell(Mountable.TryMount(player1, 3), probe.ref) // Reinforced in passenger mount allowing all except MAX
checkCanMount(probe, "Reinforced in passenger mount allowing all except MAX") VehicleControlTest.checkCanMount(probe, "Reinforced in passenger mount allowing all except MAX")
vehicle.Actor.tell(Mountable.TryMount(player2, 11), probe.ref) // MAX in MAX-only mount vehicle.Actor.tell(Mountable.TryMount(player2, 11), probe.ref) // MAX in MAX-only mount
checkCanMount(probe, "MAX in MAX-only mount") VehicleControlTest.checkCanMount(probe, "MAX in MAX-only mount")
} }
} }
} }
@ -621,7 +602,7 @@ class VehicleControlShieldsNotChargingTooEarlyTest extends ActorTest {
// } // }
// // // //
// val beamer_wep = Tool(GlobalDefinitions.beamer) // val beamer_wep = Tool(GlobalDefinitions.beamer)
// val p_source = PlayerSource( Player(Avatar(0, "TestTarget", PlanetSideEmpire.NC, CharacterGender.Female, 1, CharacterVoice.Mute)) ) // val p_source = PlayerSource( Player(Avatar(0, "TestTarget", PlanetSideEmpire.NC, CharacterSex.Female, 1, CharacterVoice.Mute)) )
// val projectile = Projectile(beamer_wep.Projectile, GlobalDefinitions.beamer, beamer_wep.FireMode, p_source, GlobalDefinitions.beamer.ObjectId, Vector3.Zero, Vector3.Zero) // val projectile = Projectile(beamer_wep.Projectile, GlobalDefinitions.beamer, beamer_wep.FireMode, p_source, GlobalDefinitions.beamer.ObjectId, Vector3.Zero, Vector3.Zero)
// val fury_dm = Vehicle(GlobalDefinitions.fury).DamageModel // val fury_dm = Vehicle(GlobalDefinitions.fury).DamageModel
// val obj = DamageInteraction(p_source, ProjectileReason(DamageResolution.Hit, projectile, fury_dm), Vector3(1.2f, 3.4f, 5.6f)) // val obj = DamageInteraction(p_source, ProjectileReason(DamageResolution.Hit, projectile, fury_dm), Vector3(1.2f, 3.4f, 5.6f))
@ -643,7 +624,7 @@ class VehicleControlShieldsNotChargingTooEarlyTest extends ActorTest {
class VehicleControlInteractWithWaterPartialTest extends ActorTest { class VehicleControlInteractWithWaterPartialTest extends ActorTest {
val vehicle = Vehicle(GlobalDefinitions.fury) //guid=2 val vehicle = Vehicle(GlobalDefinitions.fury) //guid=2
val player1 = val player1 =
Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) //guid=1 Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=1
val playerProbe = TestProbe() val playerProbe = TestProbe()
val guid = new NumberPoolHub(new MaxNumberSource(15)) val guid = new NumberPoolHub(new MaxNumberSource(15))
val pool = Pool(EnvironmentAttribute.Water, DeepSquare(-1, 10, 10, 0, 0)) val pool = Pool(EnvironmentAttribute.Water, DeepSquare(-1, 10, 10, 0, 0))
@ -694,7 +675,7 @@ class VehicleControlInteractWithWaterPartialTest extends ActorTest {
class VehicleControlInteractWithWaterTest extends ActorTest { class VehicleControlInteractWithWaterTest extends ActorTest {
val vehicle = Vehicle(GlobalDefinitions.fury) //guid=2 val vehicle = Vehicle(GlobalDefinitions.fury) //guid=2
val player1 = val player1 =
Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) //guid=1 Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=1
val avatarProbe = TestProbe() val avatarProbe = TestProbe()
val vehicleProbe = TestProbe() val vehicleProbe = TestProbe()
val guid = new NumberPoolHub(new MaxNumberSource(15)) val guid = new NumberPoolHub(new MaxNumberSource(15))
@ -765,7 +746,7 @@ class VehicleControlInteractWithWaterTest extends ActorTest {
class VehicleControlStopInteractWithWaterTest extends ActorTest { class VehicleControlStopInteractWithWaterTest extends ActorTest {
val vehicle = Vehicle(GlobalDefinitions.fury) //guid=2 val vehicle = Vehicle(GlobalDefinitions.fury) //guid=2
val player1 = val player1 =
Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) //guid=1 Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=1
val playerProbe = TestProbe() val playerProbe = TestProbe()
val guid = new NumberPoolHub(new MaxNumberSource(15)) val guid = new NumberPoolHub(new MaxNumberSource(15))
val pool = Pool(EnvironmentAttribute.Water, DeepSquare(-1, 10, 10, 0, 0)) val pool = Pool(EnvironmentAttribute.Water, DeepSquare(-1, 10, 10, 0, 0))
@ -829,7 +810,7 @@ class VehicleControlStopInteractWithWaterTest extends ActorTest {
class VehicleControlInteractWithLavaTest extends ActorTest { class VehicleControlInteractWithLavaTest extends ActorTest {
val vehicle = Vehicle(GlobalDefinitions.fury) //guid=2 val vehicle = Vehicle(GlobalDefinitions.fury) //guid=2
val player1 = val player1 =
Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) //guid=1 Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=1
val avatarProbe = TestProbe() val avatarProbe = TestProbe()
val vehicleProbe = TestProbe() val vehicleProbe = TestProbe()
val guid = new NumberPoolHub(new MaxNumberSource(15)) val guid = new NumberPoolHub(new MaxNumberSource(15))
@ -890,7 +871,7 @@ class VehicleControlInteractWithLavaTest extends ActorTest {
class VehicleControlInteractWithDeathTest extends ActorTest { class VehicleControlInteractWithDeathTest extends ActorTest {
val vehicle = Vehicle(GlobalDefinitions.fury) //guid=2 val vehicle = Vehicle(GlobalDefinitions.fury) //guid=2
val player1 = val player1 =
Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) //guid=1 Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=1
val guid = new NumberPoolHub(new MaxNumberSource(15)) val guid = new NumberPoolHub(new MaxNumberSource(15))
val pool = Pool(EnvironmentAttribute.Death, DeepSquare(-1, 10, 10, 0, 0)) val pool = Pool(EnvironmentAttribute.Death, DeepSquare(-1, 10, 10, 0, 0))
val zone = new Zone( val zone = new Zone(
@ -937,11 +918,10 @@ class VehicleControlInteractWithDeathTest extends ActorTest {
object VehicleControlTest { object VehicleControlTest {
import net.psforever.objects.avatar.Avatar import net.psforever.objects.avatar.Avatar
import net.psforever.types.{CharacterGender, PlanetSideEmpire} import net.psforever.types.{CharacterSex, PlanetSideEmpire}
val avatar1 = Avatar(0, "test1", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)
val avatar2 = Avatar(1, "test2", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)
val avatar1 = Avatar(0, "test1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)
val avatar2 = Avatar(1, "test2", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)
def checkCanNotMount(probe: TestProbe, id: String): Unit = { def checkCanNotMount(probe: TestProbe, id: String): Unit = {
val reply = probe.receiveOne(Duration.create(250, "ms")) val reply = probe.receiveOne(Duration.create(250, "ms"))

View file

@ -307,8 +307,8 @@ class VehicleTest extends Specification {
object VehicleTest { object VehicleTest {
import net.psforever.objects.avatar.Avatar import net.psforever.objects.avatar.Avatar
import net.psforever.types.{CharacterGender, PlanetSideEmpire} import net.psforever.types.{CharacterSex, PlanetSideEmpire}
val avatar1 = Avatar(0, "test1", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute) val avatar1 = Avatar(0, "test1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)
val avatar2 = Avatar(1, "test2", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute) val avatar2 = Avatar(1, "test2", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)
} }

View file

@ -20,7 +20,7 @@ class VitalityTest extends Specification {
val vSource = VehicleSource(vehicle) val vSource = VehicleSource(vehicle)
"accept a variety of events" in { "accept a variety of events" in {
val player = Player(Avatar(0, "TestCharacter", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) val player = Player(Avatar(0, "TestCharacter", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute))
val pSource = PlayerSource(player) val pSource = PlayerSource(player)
val projectile = Projectile(proj, wep, wep_fmode, player, Vector3(2, 2, 0), Vector3.Zero) val projectile = Projectile(proj, wep, wep_fmode, player, Vector3(2, 2, 0), Vector3.Zero)
val resprojectile = DamageInteraction( val resprojectile = DamageInteraction(
@ -47,7 +47,7 @@ class VitalityTest extends Specification {
} }
"return and clear the former list of vital activities" in { "return and clear the former list of vital activities" in {
val player = Player(Avatar(0, "TestCharacter", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) val player = Player(Avatar(0, "TestCharacter", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute))
val pSource = PlayerSource(player) val pSource = PlayerSource(player)
player.History(HealFromKit(pSource, 10, GlobalDefinitions.medkit)) player.History(HealFromKit(pSource, 10, GlobalDefinitions.medkit))
@ -71,7 +71,7 @@ class VitalityTest extends Specification {
} }
"get exactly one entry that was caused by projectile damage" in { "get exactly one entry that was caused by projectile damage" in {
val player = Player(Avatar(0, "TestCharacter", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) val player = Player(Avatar(0, "TestCharacter", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute))
val pSource = PlayerSource(player) val pSource = PlayerSource(player)
val projectile = Projectile(proj, wep, wep_fmode, player, Vector3(2, 2, 0), Vector3.Zero) val projectile = Projectile(proj, wep, wep_fmode, player, Vector3(2, 2, 0), Vector3.Zero)
val resprojectile = DamageInteraction( val resprojectile = DamageInteraction(

View file

@ -217,7 +217,7 @@ class ZonePopulationTest extends ActorTest {
val zone = new Zone("test", new ZoneMap(""), 0) { val zone = new Zone("test", new ZoneMap(""), 0) {
override def SetupNumberPools() = {} override def SetupNumberPools() = {}
} }
val avatar = Avatar(0, "Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Voice5) val avatar = Avatar(0, "Chord", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Voice5)
val player = Player(avatar) val player = Player(avatar)
player.GUID = PlanetSideGUID(1) player.GUID = PlanetSideGUID(1)
zone.actor = system.spawn(ZoneActor(zone), ZoneTest.TestName) zone.actor = system.spawn(ZoneActor(zone), ZoneTest.TestName)
@ -237,7 +237,7 @@ class ZonePopulationTest extends ActorTest {
val zone = new Zone("test", new ZoneMap(""), 0) { val zone = new Zone("test", new ZoneMap(""), 0) {
override def SetupNumberPools() = {} override def SetupNumberPools() = {}
} }
val avatar = Avatar(1, "Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Voice5) val avatar = Avatar(1, "Chord", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Voice5)
val player = Player(avatar) val player = Player(avatar)
player.GUID = PlanetSideGUID(1) player.GUID = PlanetSideGUID(1)
zone.actor = system.spawn(ZoneActor(zone), ZoneTest.TestName) zone.actor = system.spawn(ZoneActor(zone), ZoneTest.TestName)
@ -257,7 +257,7 @@ class ZonePopulationTest extends ActorTest {
/* TODO they need AvatarActor, which has further dependencies /* TODO they need AvatarActor, which has further dependencies
"associate user with a character" in { "associate user with a character" in {
val zone = new Zone("test", new ZoneMap(""), 0) { override def SetupNumberPools() = {} } val zone = new Zone("test", new ZoneMap(""), 0) { override def SetupNumberPools() = {} }
val avatar = Avatar(0, "Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Voice5) val avatar = Avatar(0, "Chord", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Voice5)
val player = Player(avatar) val player = Player(avatar)
player.GUID = PlanetSideGUID(1) player.GUID = PlanetSideGUID(1)
zone.actor = system.spawn(ZoneActor(zone), ZoneTest.TestName) zone.actor = system.spawn(ZoneActor(zone), ZoneTest.TestName)
@ -278,7 +278,7 @@ class ZonePopulationTest extends ActorTest {
"disassociate character from a user" in { "disassociate character from a user" in {
val zone = new Zone("test", new ZoneMap(""), 0) { override def SetupNumberPools() = {} } val zone = new Zone("test", new ZoneMap(""), 0) { override def SetupNumberPools() = {} }
val avatar = Avatar(0, "Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Voice5) val avatar = Avatar(0, "Chord", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Voice5)
val player = Player(avatar) val player = Player(avatar)
player.GUID = PlanetSideGUID(1) player.GUID = PlanetSideGUID(1)
zone.actor = system.spawn(ZoneActor(zone), ZoneTest.TestName) zone.actor = system.spawn(ZoneActor(zone), ZoneTest.TestName)
@ -301,7 +301,7 @@ class ZonePopulationTest extends ActorTest {
"user tries to Leave, but still has an associated character" in { "user tries to Leave, but still has an associated character" in {
val zone = new Zone("test", new ZoneMap(""), 0) { override def SetupNumberPools() = {} } val zone = new Zone("test", new ZoneMap(""), 0) { override def SetupNumberPools() = {} }
val avatar = Avatar(0, "Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Voice5) val avatar = Avatar(0, "Chord", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Voice5)
val player = Player(avatar) val player = Player(avatar)
player.GUID = PlanetSideGUID(1) player.GUID = PlanetSideGUID(1)
zone.actor = system.spawn(ZoneActor(zone), ZoneTest.TestName) zone.actor = system.spawn(ZoneActor(zone), ZoneTest.TestName)
@ -326,7 +326,7 @@ class ZonePopulationTest extends ActorTest {
"user tries to Spawn a character, but an associated character already exists" in { "user tries to Spawn a character, but an associated character already exists" in {
val zone = new Zone("test", new ZoneMap(""), 0) { override def SetupNumberPools() = {} } val zone = new Zone("test", new ZoneMap(""), 0) { override def SetupNumberPools() = {} }
val avatar = Avatar(0, "Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Voice5) val avatar = Avatar(0, "Chord", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Voice5)
val player1 = Player(avatar) val player1 = Player(avatar)
player1.GUID = PlanetSideGUID(1) player1.GUID = PlanetSideGUID(1)
val player2 = Player(avatar) val player2 = Player(avatar)
@ -354,7 +354,7 @@ class ZonePopulationTest extends ActorTest {
"user tries to Spawn a character, but did not Join first" in { "user tries to Spawn a character, but did not Join first" in {
val zone = new Zone("test", new ZoneMap(""), 0) { override def SetupNumberPools() = {} } val zone = new Zone("test", new ZoneMap(""), 0) { override def SetupNumberPools() = {} }
val avatar = Avatar(0, "Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Voice5) val avatar = Avatar(0, "Chord", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Voice5)
val player = Player(avatar) val player = Player(avatar)
player.GUID = PlanetSideGUID(1) player.GUID = PlanetSideGUID(1)
zone.actor = system.spawn(ZoneActor(zone), ZoneTest.TestName) zone.actor = system.spawn(ZoneActor(zone), ZoneTest.TestName)
@ -376,7 +376,7 @@ class ZonePopulationTest extends ActorTest {
val zone = new Zone("test", new ZoneMap(""), 0) { val zone = new Zone("test", new ZoneMap(""), 0) {
override def SetupNumberPools() = {} override def SetupNumberPools() = {}
} }
val avatar = Avatar(2, "Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Voice5) val avatar = Avatar(2, "Chord", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Voice5)
val player = Player(avatar) val player = Player(avatar)
player.GUID = PlanetSideGUID(1) player.GUID = PlanetSideGUID(1)
zone.actor = system.spawn(ZoneActor(zone), ZoneTest.TestName) zone.actor = system.spawn(ZoneActor(zone), ZoneTest.TestName)
@ -402,7 +402,7 @@ class ZonePopulationTest extends ActorTest {
val zone = new Zone("test", new ZoneMap(""), 0) { val zone = new Zone("test", new ZoneMap(""), 0) {
override def SetupNumberPools() = {} override def SetupNumberPools() = {}
} }
val player = Player(Avatar(3, "Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Voice5)) val player = Player(Avatar(3, "Chord", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Voice5))
player.GUID = PlanetSideGUID(1) player.GUID = PlanetSideGUID(1)
player.Release player.Release
zone.actor = system.spawn(ZoneActor(zone), ZoneTest.TestName) zone.actor = system.spawn(ZoneActor(zone), ZoneTest.TestName)
@ -419,7 +419,7 @@ class ZonePopulationTest extends ActorTest {
val zone = new Zone("test", new ZoneMap(""), 0) { val zone = new Zone("test", new ZoneMap(""), 0) {
override def SetupNumberPools() = {} override def SetupNumberPools() = {}
} }
val player = Player(Avatar(4, "Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Voice5)) val player = Player(Avatar(4, "Chord", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Voice5))
player.GUID = PlanetSideGUID(1) player.GUID = PlanetSideGUID(1)
player.Release player.Release
zone.actor = system.spawn(ZoneActor(zone), ZoneTest.TestName) zone.actor = system.spawn(ZoneActor(zone), ZoneTest.TestName)
@ -438,13 +438,13 @@ class ZonePopulationTest extends ActorTest {
val zone = new Zone("test", new ZoneMap(""), 0) { val zone = new Zone("test", new ZoneMap(""), 0) {
override def SetupNumberPools() = {} override def SetupNumberPools() = {}
} }
val player1 = Player(Avatar(5, "Chord1", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Voice5)) val player1 = Player(Avatar(5, "Chord1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Voice5))
player1.GUID = PlanetSideGUID(1) player1.GUID = PlanetSideGUID(1)
player1.Release player1.Release
val player2 = Player(Avatar(6, "Chord2", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Voice5)) val player2 = Player(Avatar(6, "Chord2", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Voice5))
player2.GUID = PlanetSideGUID(2) player2.GUID = PlanetSideGUID(2)
player2.Release player2.Release
val player3 = Player(Avatar(7, "Chord3", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Voice5)) val player3 = Player(Avatar(7, "Chord3", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Voice5))
player3.GUID = PlanetSideGUID(3) player3.GUID = PlanetSideGUID(3)
player3.Release player3.Release
zone.actor = system.spawn(ZoneActor(zone), ZoneTest.TestName) zone.actor = system.spawn(ZoneActor(zone), ZoneTest.TestName)
@ -469,7 +469,7 @@ class ZonePopulationTest extends ActorTest {
val zone = new Zone("test", new ZoneMap(""), 0) { val zone = new Zone("test", new ZoneMap(""), 0) {
override def SetupNumberPools() = {} override def SetupNumberPools() = {}
} }
val player = Player(Avatar(8, "Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Voice5)) val player = Player(Avatar(8, "Chord", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Voice5))
player.GUID = PlanetSideGUID(1) player.GUID = PlanetSideGUID(1)
//player.Release !!important //player.Release !!important
zone.actor = system.spawn(ZoneActor(zone), ZoneTest.TestName) zone.actor = system.spawn(ZoneActor(zone), ZoneTest.TestName)

View file

@ -6,12 +6,12 @@ import net.psforever.objects._
import net.psforever.objects.avatar.Avatar import net.psforever.objects.avatar.Avatar
import net.psforever.objects.guid.{GUIDTask, TaskResolver} import net.psforever.objects.guid.{GUIDTask, TaskResolver}
import net.psforever.objects.locker.LockerEquipment import net.psforever.objects.locker.LockerEquipment
import net.psforever.types.{CharacterGender, CharacterVoice, PlanetSideEmpire} import net.psforever.types.{CharacterSex, CharacterVoice, PlanetSideEmpire}
class GUIDTaskRegisterAvatarTest extends ActorTest { class GUIDTaskRegisterAvatarTest extends ActorTest {
"RegisterAvatar" in { "RegisterAvatar" in {
val (_, uns, taskResolver, probe) = GUIDTaskTest.CommonTestSetup val (_, uns, taskResolver, probe) = GUIDTaskTest.CommonTestSetup
val obj = Player(Avatar(0, "test", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) val obj = Player(Avatar(0, "test", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute))
val obj_wep = Tool(GlobalDefinitions.beamer) val obj_wep = Tool(GlobalDefinitions.beamer)
obj.Slot(0).Equipment = obj_wep obj.Slot(0).Equipment = obj_wep
val obj_wep_ammo = AmmoBox(GlobalDefinitions.energy_cell) val obj_wep_ammo = AmmoBox(GlobalDefinitions.energy_cell)

View file

@ -6,12 +6,12 @@ import net.psforever.objects._
import net.psforever.objects.avatar.Avatar import net.psforever.objects.avatar.Avatar
import net.psforever.objects.guid.{GUIDTask, TaskResolver} import net.psforever.objects.guid.{GUIDTask, TaskResolver}
import net.psforever.objects.locker.LockerEquipment import net.psforever.objects.locker.LockerEquipment
import net.psforever.types.{CharacterGender, CharacterVoice, PlanetSideEmpire} import net.psforever.types.{CharacterSex, CharacterVoice, PlanetSideEmpire}
class GUIDTaskRegisterPlayerTest extends ActorTest { class GUIDTaskRegisterPlayerTest extends ActorTest {
"RegisterPlayer" in { "RegisterPlayer" in {
val (_, uns, taskResolver, probe) = GUIDTaskTest.CommonTestSetup val (_, uns, taskResolver, probe) = GUIDTaskTest.CommonTestSetup
val obj = Player(Avatar(0, "test", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) val obj = Player(Avatar(0, "test", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute))
val obj_wep = Tool(GlobalDefinitions.beamer) val obj_wep = Tool(GlobalDefinitions.beamer)
obj.Slot(0).Equipment = obj_wep obj.Slot(0).Equipment = obj_wep
val obj_wep_ammo = AmmoBox(GlobalDefinitions.energy_cell) val obj_wep_ammo = AmmoBox(GlobalDefinitions.energy_cell)

View file

@ -6,12 +6,12 @@ import net.psforever.objects._
import net.psforever.objects.avatar.Avatar import net.psforever.objects.avatar.Avatar
import net.psforever.objects.guid.{GUIDTask, TaskResolver} import net.psforever.objects.guid.{GUIDTask, TaskResolver}
import net.psforever.objects.locker.LockerEquipment import net.psforever.objects.locker.LockerEquipment
import net.psforever.types.{CharacterGender, CharacterVoice, PlanetSideEmpire} import net.psforever.types.{CharacterSex, CharacterVoice, PlanetSideEmpire}
class GUIDTaskUnregisterAvatarTest extends ActorTest { class GUIDTaskUnregisterAvatarTest extends ActorTest {
"UnregisterAvatar" in { "UnregisterAvatar" in {
val (guid, uns, taskResolver, probe) = GUIDTaskTest.CommonTestSetup val (guid, uns, taskResolver, probe) = GUIDTaskTest.CommonTestSetup
val obj = Player(Avatar(0, "test", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) val obj = Player(Avatar(0, "test", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute))
val obj_wep = Tool(GlobalDefinitions.beamer) val obj_wep = Tool(GlobalDefinitions.beamer)
obj.Slot(0).Equipment = obj_wep obj.Slot(0).Equipment = obj_wep
val obj_wep_ammo = AmmoBox(GlobalDefinitions.energy_cell) val obj_wep_ammo = AmmoBox(GlobalDefinitions.energy_cell)

View file

@ -6,12 +6,12 @@ import net.psforever.objects._
import net.psforever.objects.avatar.Avatar import net.psforever.objects.avatar.Avatar
import net.psforever.objects.guid.{GUIDTask, TaskResolver} import net.psforever.objects.guid.{GUIDTask, TaskResolver}
import net.psforever.objects.locker.LockerEquipment import net.psforever.objects.locker.LockerEquipment
import net.psforever.types.{CharacterGender, CharacterVoice, PlanetSideEmpire} import net.psforever.types.{CharacterSex, CharacterVoice, PlanetSideEmpire}
class GUIDTaskUnregisterPlayerTest extends ActorTest { class GUIDTaskUnregisterPlayerTest extends ActorTest {
"UnregisterPlayer" in { "UnregisterPlayer" in {
val (guid, uns, taskResolver, probe) = GUIDTaskTest.CommonTestSetup val (guid, uns, taskResolver, probe) = GUIDTaskTest.CommonTestSetup
val obj = Player(Avatar(0, "test", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) val obj = Player(Avatar(0, "test", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute))
val obj_wep = Tool(GlobalDefinitions.beamer) val obj_wep = Tool(GlobalDefinitions.beamer)
obj.Slot(0).Equipment = obj_wep obj.Slot(0).Equipment = obj_wep
val obj_wep_ammo = AmmoBox(GlobalDefinitions.energy_cell) val obj_wep_ammo = AmmoBox(GlobalDefinitions.energy_cell)

View file

@ -12,7 +12,7 @@ import net.psforever.objects.serverobject.mount.{MountInfo, Mountable, Seat, Sea
import net.psforever.objects.serverobject.structures.{Building, StructureType} import net.psforever.objects.serverobject.structures.{Building, StructureType}
import net.psforever.objects.serverobject.terminals.Terminal import net.psforever.objects.serverobject.terminals.Terminal
import net.psforever.objects.zones.{Zone, ZoneMap} import net.psforever.objects.zones.{Zone, ZoneMap}
import net.psforever.types.{CharacterGender, CharacterVoice, PlanetSideEmpire, Vector3} import net.psforever.types.{CharacterSex, CharacterVoice, PlanetSideEmpire, Vector3}
import org.specs2.mutable.Specification import org.specs2.mutable.Specification
import scala.concurrent.duration.Duration import scala.concurrent.duration.Duration
@ -46,7 +46,7 @@ class ImplantTerminalMechTest extends Specification {
} }
"get passenger in a mount" in { "get passenger in a mount" in {
val player = Player(Avatar(0, "test", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) val player = Player(Avatar(0, "test", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute))
val obj = ImplantTerminalMech(GlobalDefinitions.implant_terminal_mech) val obj = ImplantTerminalMech(GlobalDefinitions.implant_terminal_mech)
obj.PassengerInSeat(player).isEmpty mustEqual true obj.PassengerInSeat(player).isEmpty mustEqual true
obj.Seats(0).mount(player) obj.Seats(0).mount(player)
@ -87,11 +87,11 @@ class ImplantTerminalMechControl2Test extends ActorTest {
} }
class ImplantTerminalMechControl3Test extends ActorTest { class ImplantTerminalMechControl3Test extends ActorTest {
import net.psforever.types.CharacterGender import net.psforever.types.CharacterSex
"ImplantTerminalMechControl" should { "ImplantTerminalMechControl" should {
"block a player from mounting" in { "block a player from mounting" in {
val (player1, mech) = ImplantTerminalMechTest.SetUpAgents(PlanetSideEmpire.TR) val (player1, mech) = ImplantTerminalMechTest.SetUpAgents(PlanetSideEmpire.TR)
val player2 = Player(Avatar(1, "test2", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) val player2 = Player(Avatar(1, "test2", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute))
mech.Actor ! Mountable.TryMount(player1, 1) mech.Actor ! Mountable.TryMount(player1, 1)
receiveOne(Duration.create(100, "ms")) //consume reply receiveOne(Duration.create(100, "ms")) //consume reply
@ -183,6 +183,6 @@ object ImplantTerminalMechTest {
map.linkTerminalToInterface(1, 2) map.linkTerminalToInterface(1, 2)
terminal.Actor = system.actorOf(Props(classOf[ImplantTerminalMechControl], terminal), "terminal-control") terminal.Actor = system.actorOf(Props(classOf[ImplantTerminalMechControl], terminal), "terminal-control")
(Player(Avatar(0, "test", faction, CharacterGender.Male, 0, CharacterVoice.Mute)), terminal) (Player(Avatar(0, "test", faction, CharacterSex.Male, 0, CharacterVoice.Mute)), terminal)
} }
} }

View file

@ -21,7 +21,7 @@ class MatrixTerminalTest extends Specification {
} }
"invalid message" in { "invalid message" in {
val player = Player(Avatar(0, "test", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) val player = Player(Avatar(0, "test", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute))
val msg = ItemTransactionMessage(PlanetSideGUID(1), TransactionType.Buy, 1, "lite_armor", 0, PlanetSideGUID(0)) val msg = ItemTransactionMessage(PlanetSideGUID(1), TransactionType.Buy, 1, "lite_armor", 0, PlanetSideGUID(0))
val terminal = Terminal(new MatrixTerminalDefinition(519)) val terminal = Terminal(new MatrixTerminalDefinition(519))
terminal.Owner = Vehicle(GlobalDefinitions.quadstealth) terminal.Owner = Vehicle(GlobalDefinitions.quadstealth)

View file

@ -11,7 +11,7 @@ import net.psforever.types._
import org.specs2.mutable.Specification import org.specs2.mutable.Specification
class OrderTerminalTest extends Specification { class OrderTerminalTest extends Specification {
val avatar = Avatar(0, "test", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute) val avatar = Avatar(0, "test", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)
val player = Player(avatar) val player = Player(avatar)
val building = new Building( val building = new Building(

View file

@ -17,7 +17,7 @@ import net.psforever.objects.serverobject.terminals.{
} }
import net.psforever.objects.zones.{Zone, ZoneMap} import net.psforever.objects.zones.{Zone, ZoneMap}
import net.psforever.objects.{GlobalDefinitions, Player} import net.psforever.objects.{GlobalDefinitions, Player}
import net.psforever.types.{CharacterGender, CharacterVoice, PlanetSideEmpire, PlanetSideGUID} import net.psforever.types.{CharacterSex, CharacterVoice, PlanetSideEmpire, PlanetSideGUID}
import org.specs2.mutable.Specification import org.specs2.mutable.Specification
import net.psforever.services.Service import net.psforever.services.Service
import net.psforever.services.local.LocalService import net.psforever.services.local.LocalService
@ -41,7 +41,7 @@ class ProximityTest extends Specification {
ProximityTest.avatarId.getAndIncrement(), ProximityTest.avatarId.getAndIncrement(),
"TestCharacter1", "TestCharacter1",
PlanetSideEmpire.VS, PlanetSideEmpire.VS,
CharacterGender.Female, CharacterSex.Female,
1, 1,
CharacterVoice.Voice1 CharacterVoice.Voice1
) )
@ -54,7 +54,7 @@ class ProximityTest extends Specification {
ProximityTest.avatarId.getAndIncrement(), ProximityTest.avatarId.getAndIncrement(),
"TestCharacter2", "TestCharacter2",
PlanetSideEmpire.VS, PlanetSideEmpire.VS,
CharacterGender.Female, CharacterSex.Female,
1, 1,
CharacterVoice.Voice1 CharacterVoice.Voice1
) )
@ -77,7 +77,7 @@ class ProximityTest extends Specification {
ProximityTest.avatarId.getAndIncrement(), ProximityTest.avatarId.getAndIncrement(),
"TestCharacter1", "TestCharacter1",
PlanetSideEmpire.VS, PlanetSideEmpire.VS,
CharacterGender.Female, CharacterSex.Female,
1, 1,
CharacterVoice.Voice1 CharacterVoice.Voice1
) )
@ -90,7 +90,7 @@ class ProximityTest extends Specification {
ProximityTest.avatarId.getAndIncrement(), ProximityTest.avatarId.getAndIncrement(),
"TestCharacter2", "TestCharacter2",
PlanetSideEmpire.VS, PlanetSideEmpire.VS,
CharacterGender.Female, CharacterSex.Female,
1, 1,
CharacterVoice.Voice1 CharacterVoice.Voice1
) )
@ -118,7 +118,7 @@ class ProximityTest extends Specification {
ProximityTest.avatarId.getAndIncrement(), ProximityTest.avatarId.getAndIncrement(),
"TestCharacter1", "TestCharacter1",
PlanetSideEmpire.VS, PlanetSideEmpire.VS,
CharacterGender.Female, CharacterSex.Female,
1, 1,
CharacterVoice.Voice1 CharacterVoice.Voice1
) )
@ -140,7 +140,7 @@ class ProximityTest extends Specification {
ProximityTest.avatarId.getAndIncrement(), ProximityTest.avatarId.getAndIncrement(),
"TestCharacter1", "TestCharacter1",
PlanetSideEmpire.VS, PlanetSideEmpire.VS,
CharacterGender.Female, CharacterSex.Female,
1, 1,
CharacterVoice.Voice1 CharacterVoice.Voice1
) )
@ -184,7 +184,7 @@ class ProximityTerminalControlStartTest extends ActorTest {
ProximityTest.avatarId.getAndIncrement(), ProximityTest.avatarId.getAndIncrement(),
"TestCharacter1", "TestCharacter1",
PlanetSideEmpire.VS, PlanetSideEmpire.VS,
CharacterGender.Female, CharacterSex.Female,
1, 1,
CharacterVoice.Voice1 CharacterVoice.Voice1
) )
@ -235,7 +235,7 @@ class ProximityTerminalControlTwoUsersTest extends ActorTest {
ProximityTest.avatarId.getAndIncrement(), ProximityTest.avatarId.getAndIncrement(),
"TestCharacter1", "TestCharacter1",
PlanetSideEmpire.VS, PlanetSideEmpire.VS,
CharacterGender.Female, CharacterSex.Female,
1, 1,
CharacterVoice.Voice1 CharacterVoice.Voice1
) )
@ -249,7 +249,7 @@ class ProximityTerminalControlTwoUsersTest extends ActorTest {
ProximityTest.avatarId.getAndIncrement(), ProximityTest.avatarId.getAndIncrement(),
"TestCharacter2", "TestCharacter2",
PlanetSideEmpire.VS, PlanetSideEmpire.VS,
CharacterGender.Female, CharacterSex.Female,
1, 1,
CharacterVoice.Voice1 CharacterVoice.Voice1
) )
@ -307,7 +307,7 @@ class ProximityTerminalControlStopTest extends ActorTest {
ProximityTest.avatarId.getAndIncrement(), ProximityTest.avatarId.getAndIncrement(),
"TestCharacter1", "TestCharacter1",
PlanetSideEmpire.VS, PlanetSideEmpire.VS,
CharacterGender.Female, CharacterSex.Female,
1, 1,
CharacterVoice.Voice1 CharacterVoice.Voice1
) )
@ -361,7 +361,7 @@ class ProximityTerminalControlNotStopTest extends ActorTest {
ProximityTest.avatarId.getAndIncrement(), ProximityTest.avatarId.getAndIncrement(),
"TestCharacter1", "TestCharacter1",
PlanetSideEmpire.VS, PlanetSideEmpire.VS,
CharacterGender.Female, CharacterSex.Female,
1, 1,
CharacterVoice.Voice1 CharacterVoice.Voice1
) )
@ -375,7 +375,7 @@ class ProximityTerminalControlNotStopTest extends ActorTest {
ProximityTest.avatarId.getAndIncrement(), ProximityTest.avatarId.getAndIncrement(),
"TestCharacter2", "TestCharacter2",
PlanetSideEmpire.VS, PlanetSideEmpire.VS,
CharacterGender.Female, CharacterSex.Female,
1, 1,
CharacterVoice.Voice1 CharacterVoice.Voice1
) )

View file

@ -143,6 +143,6 @@ object TerminalControlTest {
GlobalDefinitions.building GlobalDefinitions.building
) )
terminal.Owner.Faction = faction terminal.Owner.Faction = faction
(Player(Avatar(0, "test", faction, CharacterGender.Male, 0, CharacterVoice.Mute)), terminal) (Player(Avatar(0, "test", faction, CharacterSex.Male, 0, CharacterVoice.Mute)), terminal)
} }
} }