From 39d68b537defec1b875968ad0a6b3817cd53d6ea Mon Sep 17 00:00:00 2001 From: "Jason_DiDonato@yahoo.com" Date: Sun, 21 Mar 2021 08:09:41 -0400 Subject: [PATCH 1/4] adjusted logback.xml to facilitate two populated logs for different purposes; brief pass over all instance of log calls --- config/logback.xml | 71 +++- .../psforever/filters/LoggerPrefixFilter.java | 35 ++ .../net/psforever/actors/net/LoginActor.scala | 11 +- .../psforever/actors/net/SocketActor.scala | 2 +- .../actors/session/AvatarActor.scala | 16 +- .../psforever/actors/session/ChatActor.scala | 10 +- .../actors/session/SessionActor.scala | 354 ++++++++---------- .../net/psforever/login/TcpListener.scala | 2 +- .../net/psforever/objects/Deployables.scala | 2 - .../net/psforever/objects/Vehicles.scala | 2 +- .../objects/avatar/PlayerControl.scala | 10 +- .../objects/guid/actor/NumberPoolActor.scala | 2 +- .../guid/actor/UniqueNumberSystem.scala | 2 +- .../hackable/GenericHackables.scala | 2 +- .../serverobject/locks/IFFLockControl.scala | 2 +- .../terminals/CaptureTerminals.scala | 57 +++ .../objects/vehicles/CargoBehavior.scala | 2 - .../account/AccountIntermediaryService.scala | 10 +- .../account/AccountPersistenceService.scala | 2 +- .../services/avatar/AvatarService.scala | 3 - .../psforever/services/chat/ChatService.scala | 2 +- .../services/galaxy/GalaxyService.scala | 22 +- .../services/local/LocalService.scala | 23 +- .../local/support/DeployableRemover.scala | 2 +- .../local/support/HackClearActor.scala | 4 +- .../services/teamwork/SquadService.scala | 13 +- .../services/vehicle/VehicleService.scala | 14 +- .../vehicle/support/TurretUpgrader.scala | 4 +- 28 files changed, 365 insertions(+), 316 deletions(-) create mode 100644 server/src/main/java/net/psforever/filters/LoggerPrefixFilter.java create mode 100644 src/main/scala/net/psforever/objects/serverobject/terminals/CaptureTerminals.scala diff --git a/config/logback.xml b/config/logback.xml index 29871318..6b4d7411 100644 --- a/config/logback.xml +++ b/config/logback.xml @@ -10,24 +10,77 @@ - - logs/pslogin-debug_${bySecond}.log + + logs/psforever-general_${bySecond}.log + + logs/psforever-general_%d{yyyy-MM-dd}.gz + 40 + 10GB + %date{ISO8601} %5level "%X" %logger{35} - %msg%n + + + com.github.jasync.sql.db.postgresql.codec + + + + io.sentry.connection + + + + DamageResolution + - DEBUG + INFO - - logs/pslogin-trace_${bySecond}.log + + logs/psforever-debug_${bySecond}.log + + logs/psforever-debug_%d{yyyy-MM-dd}.gz + 40 + 10GB + %date{ISO8601} [%thread] %5level "%X" %logger{35} - %msg%n - - OFF - + + + com.github.jasync.sql.db.postgresql.encoders + + + + com.github.jasync.sql.db.postgresql.codec + + + + io.getquill.context.jasync + + + DEBUG + ACCEPT + DENY + + + TRACE + ACCEPT + DENY @@ -39,7 +92,7 @@ - + diff --git a/server/src/main/java/net/psforever/filters/LoggerPrefixFilter.java b/server/src/main/java/net/psforever/filters/LoggerPrefixFilter.java new file mode 100644 index 00000000..efc21796 --- /dev/null +++ b/server/src/main/java/net/psforever/filters/LoggerPrefixFilter.java @@ -0,0 +1,35 @@ +// 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 is occasionally appear in an abbreviated form. + */ +public class LoggerPrefixFilter extends Filter { + 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; + } + + public void start() { + if (this.prefix != null) { + super.start(); + } + } +} diff --git a/src/main/scala/net/psforever/actors/net/LoginActor.scala b/src/main/scala/net/psforever/actors/net/LoginActor.scala index 6632b3f9..271525f9 100644 --- a/src/main/scala/net/psforever/actors/net/LoginActor.scala +++ b/src/main/scala/net/psforever/actors/net/LoginActor.scala @@ -100,10 +100,9 @@ class LoginActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], conne val clientVersion = s"Client Version: $majorVersion.$minorVersion.$revision, $buildDate" 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 { -// log.info(s"New login UN:$username PW:$password. $clientVersion") - log.info(s"New login UN:$username. $clientVersion") + log.trace(s"New login UN:$username. $clientVersion") } accountLogin(username, password.get) @@ -115,7 +114,7 @@ class LoginActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], conne middlewareActor ! MiddlewareActor.Close() case _ => - log.debug(s"Unhandled GamePacket $pkt") + log.warn(s"Unhandled GamePacket $pkt") } def accountLogin(username: String, password: String): Unit = { @@ -212,7 +211,7 @@ class LoginActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], conne } def loginFailureResponse(username: String, newToken: String) = { - log.info("DB problem") + log.warn("DB problem") middlewareActor ! MiddlewareActor.Send( LoginRespMessage( newToken, @@ -227,7 +226,7 @@ class LoginActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], conne } def loginAccountFailureResponse(username: String, newToken: String) = { - log.info(s"Account $username inactive") + log.warn(s"Account $username inactive") middlewareActor ! MiddlewareActor.Send( LoginRespMessage( newToken, diff --git a/src/main/scala/net/psforever/actors/net/SocketActor.scala b/src/main/scala/net/psforever/actors/net/SocketActor.scala index 65155e3a..06ccf77d 100644 --- a/src/main/scala/net/psforever/actors/net/SocketActor.scala +++ b/src/main/scala/net/psforever/actors/net/SocketActor.scala @@ -82,7 +82,7 @@ object SocketActor { socketActor ! toSocket(message) } } else { - log.info("Network simulator dropped packet") + log.trace("Network simulator dropped packet") } } diff --git a/src/main/scala/net/psforever/actors/session/AvatarActor.scala b/src/main/scala/net/psforever/actors/session/AvatarActor.scala index 8143bfc0..d72fae5d 100644 --- a/src/main/scala/net/psforever/actors/session/AvatarActor.scala +++ b/src/main/scala/net/psforever/actors/session/AvatarActor.scala @@ -485,14 +485,20 @@ class AvatarActor( ItemTransactionResultMessage(terminalGuid, TransactionType.Learn, success = false) ) } else { - - val deps = Certification.values.filter(_.requires.contains(certification)).toSet - val remove = deps ++ Certification.values.filter(_.replaces.intersect(deps).nonEmpty).toSet + certification + var requiredByCert: Set[Certification] = Set(certification) + var removeThese: Set[Certification] = Set(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 .sequence( avatar.certifications - .intersect(remove) + .intersect(requiredByCert) .map(cert => { ctx .run( @@ -511,7 +517,7 @@ class AvatarActor( ItemTransactionResultMessage(terminalGuid, TransactionType.Sell, success = false) ) 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 => sessionActor ! SessionActor.SendResponse( PlanetsideAttributeMessage(session.get.player.GUID, 25, cert.value) diff --git a/src/main/scala/net/psforever/actors/session/ChatActor.scala b/src/main/scala/net/psforever/actors/session/ChatActor.scala index b5777126..010213a9 100644 --- a/src/main/scala/net/psforever/actors/session/ChatActor.scala +++ b/src/main/scala/net/psforever/actors/session/ChatActor.scala @@ -121,8 +121,6 @@ class ChatActor( Behaviors.same case Message(message) => - log.info("Chat: " + message) - val gmCommandAllowed = session.account.gm || Config.app.development.unprivilegedGmCommands.contains(message.messageType) @@ -916,7 +914,7 @@ class ChatActor( } case _ => - log.info(s"unhandled chat message $message") + log.warn(s"Unhandled chat message $message") } Behaviors.same @@ -945,7 +943,7 @@ class ChatActor( val args = message.contents.split(" ") val (name, time) = (args.lift(0), args.lift(1)) match { 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) case (Some(name), None) => (Some(name), Some(5)) case (Some(name), Some(time)) if time.toIntOption.isDefined => (Some(name), Some(time.toInt)) @@ -976,11 +974,11 @@ class ChatActor( } case (name, time) => - log.error(s"bad silence args $name $time") + log.warn(s"Bad silence args $name $time") } case _ => - log.error(s"unexpected messageType $message") + log.warn(s"Unexpected messageType $message") } Behaviors.same diff --git a/src/main/scala/net/psforever/actors/session/SessionActor.scala b/src/main/scala/net/psforever/actors/session/SessionActor.scala index b5898ba8..ffaea457 100644 --- a/src/main/scala/net/psforever/actors/session/SessionActor.scala +++ b/src/main/scala/net/psforever/actors/session/SessionActor.scala @@ -6,7 +6,6 @@ import akka.actor.typed.scaladsl.adapter._ import akka.actor.{Actor, ActorRef, Cancellable, MDCContextAware} import akka.pattern.ask import akka.util.Timeout - import net.psforever.actors.net.MiddlewareActor import net.psforever.services.ServiceManager.Lookup import net.psforever.objects.locker.LockerContainer @@ -371,19 +370,14 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con def receive: Receive = { case LookupResult("accountIntermediary", endpoint) => accountIntermediary = endpoint - log.info("ID: " + session.id + " Got account intermediary service " + endpoint) case LookupResult("accountPersistence", endpoint) => accountPersistence = endpoint - log.info("ID: " + session.id + " Got account persistence service " + endpoint) case LookupResult("galaxy", endpoint) => galaxyService = endpoint - log.info("ID: " + session.id + " Got galaxy service " + endpoint) case LookupResult("squad", endpoint) => squadService = endpoint - log.info("ID: " + session.id + " Got squad service " + endpoint) case LookupResult("propertyOverrideManager", endpoint) => propertyOverrideManager = endpoint - log.info("ID: " + session.id + " Got propertyOverrideManager service " + endpoint) case ICS.InterstellarClusterServiceKey.Listing(listings) => cluster = listings.head @@ -479,7 +473,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con zoningChatMessageType = ChatMessageType.CMT_QUIT zoningStatus = Zoning.Status.Request beginZoningCountdown(() => { - log.info("Good-bye") + log.info(s"Good-bye, ${player.Name}") ImmediateDisconnect() }) @@ -914,18 +908,18 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con case Deployment.CanDeploy(obj, state) => if (state == DriveState.Deploying) { - log.info(s"DeployRequest: $obj transitioning to deploy state") + log.trace(s"DeployRequest: $obj transitioning to deploy state") } else if (state == DriveState.Deployed) { - log.info(s"DeployRequest: $obj has been Deployed") + log.trace(s"DeployRequest: $obj has been Deployed") } else { CanNotChangeDeployment(obj, state, "incorrect deploy state") } case Deployment.CanUndeploy(obj, state) => if (state == DriveState.Undeploying) { - log.info(s"DeployRequest: $obj transitioning to undeploy state") + log.trace(s"DeployRequest: $obj transitioning to undeploy state") } else if (state == DriveState.Mobile) { - log.info(s"DeployRequest: $obj is Mobile") + log.trace(s"DeployRequest: $obj is Mobile") } else { CanNotChangeDeployment(obj, state, "incorrect undeploy state") } @@ -938,7 +932,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con } case Zone.Population.PlayerHasLeft(zone, None) => - log.info(s"${avatar.name} does not have a body on ${zone.id}") + log.trace(s"${avatar.name} does not have a body on ${zone.id}") case Zone.Population.PlayerHasLeft(zone, Some(tplayer)) => if (tplayer.isAlive) { @@ -1099,7 +1093,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con RemoverActor.AddTask(obj, continent, Some(0 seconds)) ) } else { - log.info(s"FinalizeDeployable: setup for telepad #${guid.guid} in zone ${continent.id}") + log.debug(s"FinalizeDeployable: setup for telepad #${guid.guid} in zone ${continent.id}") obj.Router = routerGUID //necessary; forwards link to the router DeployableBuildActivity(obj) RemoveOldEquipmentFromInventory(player)(tool) @@ -1200,7 +1194,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con case Zone.Nowhere => RequestSanctuaryZoneSpawn(player, currentZone = 0) case zone => - log.info(s"Zone ${zone.id} will now load") + log.info(s"Zone ${zone.id} will now load for ${player.Name}") loadConfZone = true val oldZone = continent session = session.copy(zone = zone) @@ -1224,7 +1218,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con } case ICS.ZoneResponse(zone) => - log.info(s"Zone ${zone.get.id} will now load") + log.info(s"Zone ${zone.get.id} will now load for ${player.Name}") loadConfZone = true val oldZone = session.zone session = session.copy(zone = zone.get) @@ -1391,11 +1385,10 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con log.warn(s"Vital target ${target.Definition.Name} damage resolution not supported using this method") case ResponseToSelf(pkt) => - //log.info(s"Received a direct message: $pkt") sendResponse(pkt) case ReceiveAccountData(account) => - log.info(s"ReceiveAccountData ${account}") + log.trace(s"ReceiveAccountData $account") session = session.copy(account = account) avatarActor ! AvatarActor.SetAccount(account) @@ -1523,10 +1516,10 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con _: Int, _: Option[Equipment] ) => - log.info(s"$msg") + log.trace(s"$msg") case msg @ Containable.CanNotPutItemInSlot(_: PlanetSideServerObject with Container, _: Equipment, _: Int) => - log.info(s"$msg") + log.trace(s"$msg") case default => log.warn(s"Invalid packet class received: $default from ${sender()}") @@ -2279,8 +2272,6 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con case LocalResponse.SendHackMessageHackCleared(target_guid, unk1, unk2) => log.trace(s"Clearing hack for ${target_guid}") - // Reset hack state for all players - sendResponse(HackMessage(0, target_guid, guid, 0, unk1, HackState.HackCleared, unk2)) case LocalResponse.HackObject(target_guid, unk1, unk2) => HackObject(target_guid, unk1, unk2) @@ -2394,7 +2385,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con case Mountable.CanMount(obj: Vehicle, seat_number, _) => CancelZoningProcessWithDescriptiveReason("cancel_mount") val obj_guid: PlanetSideGUID = obj.GUID - log.info(s"MountVehicleMsg: ${player.Name}_guid mounts $obj_guid @ $seat_number") + log.info(s"MountVehicleMsg: ${player.Name} mounts ${obj.Definition.Name} in seat $seat_number") CancelAllProximityUnits() sendResponse(PlanetsideAttributeMessage(obj_guid, 0, obj.Health)) sendResponse(PlanetsideAttributeMessage(obj_guid, 68, obj.Shields)) //shield health @@ -3019,7 +3010,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con * @param tplayer the target player */ def HandleSetCurrentAvatar(tplayer: Player): Unit = { - log.info(s"HandleSetCurrentAvatar - ${tplayer.Name}") + log.trace(s"HandleSetCurrentAvatar - ${tplayer.Name}") session = session.copy(player = tplayer) val guid = tplayer.GUID UpdateDeployableUIElements(Deployables.InitializeDeployableUIElements(avatar)) @@ -3273,7 +3264,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con accountIntermediary ! RetrieveAccountData(token) case msg @ MountVehicleCargoMsg(player_guid, cargo_guid, carrier_guid, unk4) => - log.info(msg.toString) + log.trace(msg.toString) (continent.GUID(cargo_guid), continent.GUID(carrier_guid)) match { case (Some(cargo: Vehicle), Some(carrier: Vehicle)) => carrier.CargoHolds.find({ case (_, hold) => !hold.isOccupied }) match { @@ -3292,7 +3283,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con } case msg @ DismountVehicleCargoMsg(player_guid, cargo_guid, bailed, requestedByPassenger, kicked) => - log.info(msg.toString) + log.trace(msg.toString) //when kicked by carrier driver, player_guid will be PlanetSideGUID(0) //when exiting of the cargo vehicle driver's own accord, player_guid will be the cargo vehicle driver continent.GUID(cargo_guid) match { @@ -3320,7 +3311,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con keepAliveFunc() case msg @ BeginZoningMessage() => - log.info("Reticulating splines ...") + log.trace("Reticulating splines ...") zoneLoaded = None val continentId = continent.id val faction = player.Faction @@ -3347,7 +3338,6 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con foundDeployables.foreach(obj => { if (avatar.deployables.Add(obj)) { obj.Owner = guid - log.info(s"Found a ${obj.Definition.Name} of ours while loading the zone") } }) //render deployable objects @@ -3440,7 +3430,6 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con }) //load active players in zone (excepting players who are seated or players who are us) val live = continent.LivePlayers - log.info(s"loading players $live") live .filterNot(tplayer => { tplayer.GUID == player.GUID || tplayer.VehicleSeated.nonEmpty @@ -3699,7 +3688,6 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con unk5, unk6 ) => - //log.info(s"$msg") persist() turnCounterFunc(avatar_guid) val isMoving = WorldEntity.isMoving(vel) @@ -3782,7 +3770,6 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con player.zoneInteraction() case msg @ ChildObjectStateMessage(object_guid, pitch, yaw) => - //log.info(s"$msg") //the majority of the following check retrieves information to determine if we are in control of the child FindContainedWeapon match { case (Some(o), Some(tool)) => @@ -3832,7 +3819,6 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con is_decelerating, is_cloaked ) => - //log.info(s"$msg") GetVehicleAndSeat() match { case (Some(obj), Some(0)) => //we're driving the vehicle @@ -3899,7 +3885,6 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con //log.info(s"VehicleSubState: $vehicle_guid, ${player.Name}_guid, $vehicle_pos, $vehicle_ang, $vel, $unk1, $unk2") case msg @ ProjectileStateMessage(projectile_guid, shot_pos, shot_vel, shot_orient, seq, end, target_guid) => - //log.trace(s"ProjectileState: $msg") val index = projectile_guid.guid - Projectile.baseUID projectiles(index) match { case Some(projectile) if projectile.HasGUID => @@ -3927,13 +3912,13 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con } case msg @ ReleaseAvatarRequestMessage() => - log.info(s"ReleaseAvatarRequest: ${player.GUID} on ${continent.id} has released") + log.info(s"ReleaseAvatarRequest: ${player.Name} on ${continent.id} has released") reviveTimer.cancel() GoToDeploymentMap() HandleReleaseAvatar(player, continent) case msg @ SpawnRequestMessage(u1, spawnGroup, u3, u4, zoneNumber) => - log.info(s"SpawnRequestMessage: $msg") + log.info(s"SpawnRequestMessage: ${player.Name} on ${continent.id} wants to respawn in $zoneNumber") if (deadState != DeadState.RespawnTime) { deadState = DeadState.RespawnTime cluster ! ICS.GetNearbySpawnPoint( @@ -3958,27 +3943,25 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con chatActor ! ChatActor.Message(msg) case msg @ VoiceHostRequest(unk, PlanetSideGUID(player_guid), data) => - log.info("Player " + player_guid + " requested in-game voice chat.") + log.trace("Player " + player_guid + " requested in-game voice chat.") sendResponse(VoiceHostKill()) case msg @ VoiceHostInfo(player_guid, data) => sendResponse(VoiceHostKill()) case msg @ ChangeAmmoMessage(item_guid, unk1) => - log.info("ChangeAmmo: " + msg) FindContainedEquipment match { case (Some(_), Some(obj: ConstructionItem)) => PerformConstructionItemAmmoChange(obj, obj.AmmoTypeIndex) case (Some(obj), Some(tool: Tool)) => PerformToolAmmoChange(tool, obj) case (_, Some(obj)) => - log.error(s"ChangeAmmo: the object ${obj.Definition.Name} is not a valid type") + log.error(s"ChangeAmmo: the ${obj.Definition.Name} in ${player.Name}'s hands does not contain ammunition") case (_, None) => log.error(s"ChangeAmmo: can not find $item_guid") } case msg @ ChangeFireModeMessage(item_guid, fire_mode) => - log.info("ChangeFireMode: " + msg) FindEquipment match { case Some(obj: PlanetSideGameObject with FireModeSwitch[_]) => val originalModeIndex = obj.FireModeIndex @@ -3994,7 +3977,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con obj.FireModeIndex = originalModeIndex sendResponse(ChangeFireModeMessage(tool_guid, originalModeIndex)) //reinforcement } else { - log.info(s"ChangeFireMode: changing $tool_guid to fire mode $modeIndex") + log.info(s"ChangeFireMode: ${player.Name} is changing his ${obj.Definition.Name} to fire mode $modeIndex") sendResponse(ChangeFireModeMessage(tool_guid, modeIndex)) continent.AvatarEvents ! AvatarServiceMessage( continent.id, @@ -4008,7 +3991,6 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con } case msg @ ChangeFireStateMessage_Start(item_guid) => - log.trace("ChangeFireState_Start: " + msg) if (shooting.isEmpty) { FindEquipment match { case Some(tool: Tool) => @@ -4036,7 +4018,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con } } else { log.warn( - s"ChangeFireState_Start: ${tool.Definition.Name} magazine is empty before trying to shoot bullet" + s"ChangeFireState_Start: ${player.Name}'s ${tool.Definition.Name} magazine was empty before trying to shoot!" ) EmptyMagazine(item_guid, tool) } @@ -4054,7 +4036,6 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con } case msg @ ChangeFireStateMessage_Stop(item_guid) => - log.trace("ChangeFireState_Stop: " + msg) prefire = None shootingStop = System.currentTimeMillis() val weapon: Option[Equipment] = if (shooting.contains(item_guid)) { @@ -4122,11 +4103,9 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con progressBarValue = None case msg @ EmoteMsg(avatar_guid, emote) => - log.info("Emote: " + msg) sendResponse(EmoteMsg(avatar_guid, emote)) case msg @ DropItemMessage(item_guid) => - log.info(s"DropItem: $msg") ValidObject(item_guid) match { case Some(anItem: Equipment) => player.FreeHand.Equipment match { @@ -4151,7 +4130,6 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con } case msg @ PickupItemMessage(item_guid, player_guid, unk1, unk2) => - log.info(s"PickupItem: $msg") ValidObject(item_guid) match { case Some(item: Equipment) => player.Fit(item) match { @@ -4163,13 +4141,12 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con } case _ => log.warn( - s"PickupItem: ${player.Name} requested an item that doesn't exist in this zone; assume client-side garbage data" + s"PickupItem: ${player.Name} requested an item that doesn't seem to exist" ) sendResponse(ObjectDeleteMessage(item_guid, 0)) } case msg @ ReloadMessage(item_guid, ammo_clip, unk1) => - log.info("Reload: " + msg) FindContainedWeapon match { case (Some(obj), Some(tool: Tool)) => val currentMagazine: Int = tool.Magazine @@ -4203,7 +4180,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con modifyFunc(box, reloadValue - tailReloadValue) reloadValue }) + currentMagazine - log.info(s"ReloadMessage: success, $tool <- $actualReloadValue ${tool.AmmoType}") + log.info(s"ReloadMessage: ${player.Name} successfully reloaded $actualReloadValue ${tool.AmmoType} into $tool") tool.Magazine = actualReloadValue sendResponse(ReloadMessage(item_guid, actualReloadValue, unk1)) continent.AvatarEvents ! AvatarServiceMessage( @@ -4212,7 +4189,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con ) } } else { - log.warn(s"ReloadMessage: item $item_guid can not reload (full=$magazineSize, want=$reloadValue)") + log.warn(s"ReloadMessage: the $tool in ${player.Name}'s hand can not reload (full=$magazineSize, want=$reloadValue)") } case (_, Some(_)) => log.error(s"ReloadMessage: the object that was found for $item_guid was not a Tool") @@ -4221,11 +4198,10 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con } case msg @ ObjectHeldMessage(avatar_guid, held_holsters, unk1) => - log.debug(s"ObjectHeld: $msg") val before = player.DrawnSlot if (before != held_holsters) { if (player.ExoSuit == ExoSuitType.MAX && held_holsters != 0) { - log.info(s"ObjectHeld: ${player.Name} is denied changing hands to $held_holsters as a MAX") + log.warn(s"ObjectHeld: ${player.Name} is denied changing hands to $held_holsters as a MAX") player.DrawnSlot = 0 sendResponse(ObjectHeldMessage(avatar_guid, 0, true)) } else if ((player.DrawnSlot = held_holsters) != before) { @@ -4233,12 +4209,12 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con player.Continent, AvatarAction.ObjectHeld(player.GUID, player.LastDrawnSlot) ) - // Ignore non-equipment holsters //todo: check current suit holster slots? if (held_holsters >= 0 && held_holsters < 5) { player.Holsters()(held_holsters).Equipment match { case Some(unholsteredItem: Equipment) => + log.info(s"ObjectHeld: ${player.Name} has drawn a $unholsteredItem from its holster") if (unholsteredItem.Definition == GlobalDefinitions.remote_electronics_kit) { // Player has unholstered a REK - we need to set an atttribute on the REK itself to change the beam/icon colour to the correct one for the player's hack level continent.AvatarEvents ! AvatarServiceMessage( @@ -4266,12 +4242,11 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con avatarActor ! AvatarActor.SuspendStaminaRegeneration(2.5 seconds) case msg @ ZipLineMessage(player_guid, forwards, action, path_id, pos) => - log.info("ZipLineMessage: " + msg) val (isTeleporter: Boolean, path: Option[ZipLinePath]) = continent.zipLinePaths.find(x => x.PathId == path_id) match { case Some(x) => (x.IsTeleporter, Some(x)) case _ => - log.warn(s"Couldn't find zipline path ${path_id} in zone ${continent.Number} / ${continent.id}") + log.warn(s"$player.Name} couldn't find a zipline path $path_id in zone ${continent.id}") (false, None) } if (isTeleporter) { @@ -4295,7 +4270,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con sendResponse(ZipLineMessage(player_guid, forwards, action, 0, pos)) case _ => log.warn( - s"Tried to do something with a zipline but can't handle it. forwards: ${forwards} action: ${action} path_id: ${path_id} zone: ${continent.Number} / ${continent.id}" + s"${player.Name} tried to do something with a zipline but can't handle it. forwards: ${forwards} action: ${action} path_id: ${path_id} zone: ${continent.Number} / ${continent.id}" ) } } @@ -4317,9 +4292,9 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con (vehicle.MountedIn.isEmpty || !vehicle.Seats.values.exists(_.isOccupied)) ) { vehicle.Actor ! Vehicle.Deconstruct() - log.info(s"RequestDestroy: vehicle $vehicle") + //log.info(s"RequestDestroy: vehicle $vehicle") } else { - log.info(s"RequestDestroy: must own vehicle in order to deconstruct it") + log.warn(s"RequestDestroy: ${player.Name} must own vehicle in order to deconstruct it") } case Some(obj: BoomerTrigger) => @@ -4332,7 +4307,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con ) //continent.Deployables ! Zone.Deployable.Dismiss(boomer) case Some(thing) => - log.info(s"RequestDestroy: BoomerTrigger object connected to wrong object - $thing") + log.warn(s"RequestDestroy: BoomerTrigger object connected to wrong object - $thing") case None => ; } } @@ -4404,10 +4379,8 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con case msg @ ObjectDeleteMessage(object_guid, unk1) => sendResponse(ObjectDeleteMessage(object_guid, 0)) - log.info("ObjectDelete: " + msg) case msg @ MoveItemMessage(item_guid, source_guid, destination_guid, dest, _) => - log.info(s"MoveItem: $msg") (continent.GUID(source_guid), continent.GUID(destination_guid), ValidObject(item_guid)) match { case ( Some(source: PlanetSideServerObject with Container), @@ -4416,21 +4389,20 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con ) => ContainableMoveItem(player.Name, source, destination, item, dest) case (None, _, _) => - log.error(s"MoveItem: wanted to move $item_guid from $source_guid, but could not find source object") + log.error(s"MoveItem: ${player.Name} wanted to move $item_guid from $source_guid, but could not find source object") case (_, None, _) => log.error( - s"MoveItem: wanted to move $item_guid to $destination_guid, but could not find destination object" + s"MoveItem: ${player.Name} wanted to move $item_guid to $destination_guid, but could not find destination object" ) case (_, _, None) => - log.error(s"MoveItem: wanted to move $item_guid, but could not find it") + log.error(s"MoveItem: ${player.Name} wanted to move $item_guid, but could not find it") case _ => log.error( - s"MoveItem: wanted to move $item_guid from $source_guid to $destination_guid, but multiple problems were encountered" + s"MoveItem: ${player.Name} wanted to move $item_guid from $source_guid to $destination_guid, but multiple problems were encountered" ) } case msg @ LootItemMessage(item_guid, target_guid) => - log.info(s"LootItem: $msg") (ValidObject(item_guid), continent.GUID(target_guid)) match { case (Some(item: Equipment), Some(destination: PlanetSideServerObject with Container)) => //figure out the source @@ -4453,20 +4425,20 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con case (Some((source, Some(_))), Some(dest)) => ContainableMoveItem(player.Name, source, destination, item, dest) case (None, _) => - log.error(s"LootItem: can not find where $item is put currently") + log.error(s"LootItem: ${player.Name} can not find where $item is put currently") case (_, None) => - log.error(s"LootItem: can not find somwhere to put $item in $destination") + log.error(s"LootItem: ${player.Name} can not find anywhere to put $item in $destination") case _ => log.error( - s"LootItem: wanted to move $item_guid to $target_guid, but multiple problems were encountered" + s"LootItem: ${player.Name}wanted to move $item_guid to $target_guid, but multiple problems were encountered" ) } case (Some(obj), _) => - log.warn(s"LootItem: item $obj is (probably) not lootable") + log.warn(s"LootItem: item $obj is (probably) not lootable to ${player.Name}") case (None, _) => - log.warn(s"LootItem: can not find $item_guid") + log.warn(s"LootItem: ${player.Name} can not find $item_guid") case (_, None) => - log.warn(s"LootItem: can not find where to put $item_guid") + log.warn(s"LootItem: ${player.Name} can not find where to put $item_guid") } case msg @ AvatarImplantMessage(player_guid, action, slot, status) => @@ -4480,7 +4452,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con avatarActor ! AvatarActor.DeactivateImplant(implant.definition.implantType) } case Some(implant) if !implant.initialized => () - case _ => log.error(s"AvatarImplantMessage for unknown implant ${msg}") + case _ => log.error(s"AvatarImplantMessage: ${player.Name} has an unknown implant in $slot") } } @@ -4497,7 +4469,6 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con unk8, itemType ) => - //log.info("UseItem: " + msg) // TODO: Not all fields in the response are identical to source in real packet logs (but seems to be ok) // TODO: Not all incoming UseItemMessage's respond with another UseItemMessage (i.e. doors only send out GenericObjectStateMsg) val equipment = player.Slot(player.DrawnSlot).Equipment match { @@ -4523,7 +4494,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con CancelZoningProcessWithDescriptiveReason("cancel_use") if (obj.isBackpack) { if (equipment.isEmpty) { - log.info(s"UseItem: ${player.Name} looting the corpse of $obj") + log.info(s"UseItem: ${player.Name} is looting the corpse of ${obj.Name}") sendResponse( UseItemMessage( avatar_guid, @@ -4631,12 +4602,12 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con true } } else { - log.warn(s"UseItem: $kit behavior not supported") + log.warn(s"UseItem: Your $kit behavior is not supported, ${player.Name}") false } case None => - log.error(s"UseItem: anticipated a $kit, but can't find it") + log.error(s"UseItem: Anticipated a $kit for ${player.Name}, but can't find it") false } if (kitIsUsed) { @@ -4665,9 +4636,9 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con } case Some(item) => - log.warn(s"UseItem: looking for Kit to use, but found $item instead") + log.warn(s"UseItem: ${player.Name} looking for Kit to use, but found $item instead") case None => - log.warn(s"UseItem: anticipated a Kit $item_used_guid, but can't find it") + log.warn(s"UseItem: anticipated a Kit $item_used_guid for ${player.Name}, but can't find it") } } else if (itemType == ObjectClass.avatar && unk3) { equipment match { @@ -4686,7 +4657,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con CancelZoningProcessWithDescriptiveReason("cancel_use") locker.Actor ! CommonMessages.Use(player, Some(item)) case None if locker.Faction == player.Faction || !locker.HackedBy.isEmpty => - log.trace(s"UseItem: ${player.Name} accessing a locker") + log.info(s"UseItem: ${player.Name} is accessing a locker") CancelZoningProcessWithDescriptiveReason("cancel_use") val playerLocker = player.avatar.locker sendResponse( @@ -4777,7 +4748,6 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con } case Some(terminal: Terminal) => - log.info(s"$msg") equipment match { case Some(item) => CancelZoningProcessWithDescriptiveReason("cancel_use") @@ -4829,7 +4799,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con ) ) case None => - log.error("UseItem: expected seated vehicle, but found none") + log.error(s"UseItem: Expecting a seated vehicle, ${player.Name} found none") } } else if (tdef == GlobalDefinitions.teleportpad_terminal) { //explicit request @@ -4953,25 +4923,23 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con case Some(obj) => CancelZoningProcessWithDescriptiveReason("cancel_use") - log.warn(s"UseItem: don't know how to handle $obj") + log.warn(s"UseItem: ${player.Name} don't know how to handle $obj") case None => - log.error(s"UseItem: can not find object $object_guid") + log.error(s"UseItem: ${player.Name} can not find object $object_guid") } case msg @ ProximityTerminalUseMessage(player_guid, object_guid, _) => - log.trace(s"ProximityTerminalUse: $msg") continent.GUID(object_guid) match { case Some(obj: Terminal with ProximityUnit) => HandleProximityTerminalUse(obj) case Some(obj) => ; - log.warn(s"ProximityTerminalUse: object does not have proximity effects - $obj") + log.warn(s"ProximityTerminalUse: $obj does not have proximity effects for ${player.Name}") case None => - log.warn(s"ProximityTerminalUse: no object with guid $object_guid found") + log.warn(s"ProximityTerminalUse: ${player.Name} can not find an oject with guid $object_guid") } case msg @ UnuseItemMessage(player_guid, object_guid) => - log.info(s"UnuseItem: $msg") ValidObject(object_guid) match { case Some(obj: Player) => UnaccessContainer(obj) @@ -4984,7 +4952,6 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con } case msg @ DeployObjectMessage(guid, unk1, pos, orient, unk2) => - log.info(s"DeployObject: $msg") //the hand with the construction item is no longer drawn //TODO consider player.Slot(player.LastDrawnSlot) (player.Holsters().find(slot => slot.Equipment.nonEmpty && slot.Equipment.get.GUID == guid) match { @@ -5000,7 +4967,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con case turret => turret } - log.info(s"DeployObject: Constructing a ${ammoType}") + log.info(s"DeployObject: ${player.Name} is constructing a $ammoType deployable") CancelZoningProcessWithDescriptiveReason("cancel_use") val dObj: PlanetSideGameObject with Deployable = Deployables.Make(ammoType)() dObj.Position = pos @@ -5016,21 +4983,19 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con continent.tasks ! CallBackForTask(tasking, continent.Deployables, Zone.Deployable.Build(dObj, obj)) case Some(obj) => - log.warn(s"DeployObject: $obj is something?") + log.warn(s"DeployObject: What is $obj, ${player.Name}? It's not a construction tool!") case None => - log.warn("DeployObject: nothing?") + log.warn(s"DeployObject: nothing, ${player.Name}? It's not a construction tool!") } case msg @ GenericObjectActionMessage(object_guid, code) => - //log.info(s"$msg") ValidObject(object_guid) match { case Some(tool: Tool) => if (tool.Definition == GlobalDefinitions.maelstrom && code == 35) { //maelstrom primary fire mode effect (no target) HandleWeaponFireAccountability(object_guid, PlanetSideGUID(Projectile.baseUID)) } - case _ => - log.info(s"$msg") + case _ => ; } case msg @ GenericObjectStateMsg(object_guid, unk1) => @@ -5057,7 +5022,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con player.AwayFromKeyboard = false } if (action == 15) { //max deployment - log.info(s"GenericObject: $player is anchored") + log.info(s"GenericObject: ${player.Name} is anchored") player.UsingSpecial = SpecialExoSuitDefinition.Mode.Anchored continent.AvatarEvents ! AvatarServiceMessage( continent.id, @@ -5075,10 +5040,10 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con tool.ToFireMode = convertFireModeIndex sendResponse(ChangeFireModeMessage(tool.GUID, convertFireModeIndex)) case _ => - log.warn(s"GenericObject: $player is MAX with an unexpected weapon - ${definition.Name}") + log.warn(s"GenericObject: ${player.Name} is a MAX with an unexpected weapon - ${definition.Name}") } } else if (action == 16) { //max deployment - log.info(s"GenericObject: $player has released the anchors") + log.info(s"GenericObject: ${player.Name} has released the anchors") player.UsingSpecial = SpecialExoSuitDefinition.Mode.Normal continent.AvatarEvents ! AvatarServiceMessage( continent.id, @@ -5102,17 +5067,17 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con if (player.ExoSuit == ExoSuitType.MAX) { ToggleMaxSpecialState(enable = true) } else { - log.warn("Got GenericActionMessage 20 but can't handle it") + log.warn(s"${player.Name} got GenericActionMessage 20 but can't handle it") } } else if (action == 21) { if (player.ExoSuit == ExoSuitType.MAX) { player.Faction match { case PlanetSideEmpire.NC => ToggleMaxSpecialState(enable = false) - case _ => log.warn(s"Player ${player.Name} tried to cancel an uncancellable MAX special ability") + case _ => log.warn(s"${player.Name} tried to cancel an uncancellable MAX special ability") } } else { - log.warn("Got GenericActionMessage 21 but can't handle it") + log.warn(s"${player.Name} got GenericActionMessage 21 but can't handle it") } } else if (action == 36) { //Looking For Squad ON if (squadUI.nonEmpty) { @@ -5142,35 +5107,32 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con } case msg @ ItemTransactionMessage(terminal_guid, transaction_type, _, _, _, _) => - log.info("ItemTransaction: " + msg) continent.GUID(terminal_guid) match { case Some(term: Terminal) => - log.info(s"ItemTransaction: ${term.Definition.Name} found") + log.info(s"ItemTransaction: ${player.Name} is using a terminal") if (lastTerminalOrderFulfillment) { lastTerminalOrderFulfillment = false CancelZoningProcessWithDescriptiveReason("cancel_use") term.Actor ! Terminal.Request(player, msg) } case Some(obj: PlanetSideGameObject) => - log.error(s"ItemTransaction: $obj is not a terminal") + log.error(s"ItemTransaction: $obj is not a terminal, ${player.Name}") case _ => - log.error(s"ItemTransaction: $terminal_guid does not exist") + log.error(s"ItemTransaction: $terminal_guid does not exist, ${player.Name}") } case msg @ FavoritesRequest(player_guid, loadoutType, action, line, label) => CancelZoningProcessWithDescriptiveReason("cancel_use") - log.info(s"FavoritesRequest: $msg") + log.info(s"FavoritesRequest: ${player.Name} wishes to load a saved favorite entry") action match { case FavoritesAction.Save => avatarActor ! AvatarActor.SaveLoadout(player, loadoutType, label, line) case FavoritesAction.Delete => avatarActor ! AvatarActor.DeleteLoadout(player, loadoutType, line) - case FavoritesAction.Unknown => log.warn("FavoritesRequest: unknown favorites action") + case FavoritesAction.Unknown => log.warn(s"FavoritesRequest: ${player.Name} requested an unknown favorites action") } - case msg @ WeaponDelayFireMessage(seq_time, weapon_guid) => - log.info("WeaponDelayFire: " + msg) + case msg @ WeaponDelayFireMessage(seq_time, weapon_guid) => ; case msg @ WeaponDryFireMessage(weapon_guid) => - log.debug("WeaponDryFireMessage: " + msg) FindWeapon match { case Some(tool: Tool) => continent.AvatarEvents ! AvatarServiceMessage( @@ -5193,14 +5155,12 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con unk6, unk7 ) => - log.debug(s"WeaponFire: $msg") HandleWeaponFire(weapon_guid, projectile_guid, shot_origin) case msg @ WeaponLazeTargetPositionMessage(weapon, pos1, pos2) => - log.info("Lazing position: " + pos2.toString) + //log.info(s"Lazing position: ${pos2.toString}") case msg @ ObjectDetectedMessage(guid1, guid2, unk, targets) => - //log.info(s"Detection: $msg") FindWeapon match { case Some(weapon) if weapon.Projectile.AutoLock => //projectile with auto-lock instigates a warning on the target @@ -5223,7 +5183,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con unk3, unk4 ) => - log.info(s"Hit: $msg") + log.trace(s"Hit: $msg") //find defined projectile FindProjectileEntry(projectile_guid) match { case Some(projectile) => @@ -5298,7 +5258,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con unk4, targets ) => - log.info(s"Splash: $msg") + log.trace(s"Splash: $msg") FindProjectileEntry(projectile_guid) match { case Some(projectile) => val profile = projectile.profile @@ -5382,16 +5342,15 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con unk1, unk2 ) => - log.info(s"WarpgateRequest: $msg") CancelZoningProcessWithDescriptiveReason("cancel_use") if (deadState != DeadState.RespawnTime) { continent.Buildings.values.find(building => building.GUID == building_guid) match { - case Some(wg: WarpGate) if (wg.Active && (GetKnownVehicleAndSeat() match { + case Some(wg: WarpGate) if wg.Active && (GetKnownVehicleAndSeat() match { case (Some(vehicle), _) => wg.Definition.VehicleAllowance && !wg.Definition.NoWarp.contains(vehicle.Definition) case _ => true - })) => + }) => deadState = DeadState.RespawnTime cluster ! ICS.GetSpawnPoint( destinationZoneGuid.guid, @@ -5399,33 +5358,32 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con destinationBuildingGuid, context.self ) + log.info(s"WarpgateRequest: ${player.Name} is trying to use a warp gate") - case Some(wg: WarpGate) if (!wg.Active) => - log.info(s"WarpgateRequest: inactive WarpGate") + case Some(wg: WarpGate) if !wg.Active => + log.warn(s"WarpgateRequest: ${player.Name} is knocking on an inactive warp gate") case _ => deadState = DeadState.RespawnTime RequestSanctuaryZoneSpawn(player, continent.Number) } } else { - log.warn("WarpgateRequest: request consumed; already respawning ...") + log.warn(s"WarpgateRequest: your request was already consumed, ${player.Name}; already working on it ...") } case msg @ MountVehicleMsg(player_guid, mountable_guid, entry_point) => - log.info("MountVehicleMsg: " + msg) ValidObject(mountable_guid) match { case Some(obj: Mountable) => obj.Actor ! Mountable.TryMount(player, entry_point) case None | Some(_) => - log.warn(s"MountVehicleMsg: not a mountable thing") + log.warn(s"MountVehicleMsg: object ${mountable_guid.guid} not a mountable thing, ${player.Name}") } case msg @ DismountVehicleMsg(player_guid, bailType, wasKickedByDriver) => //TODO optimize this later - log.info(s"DismountVehicleMsg: $msg") //common warning for this section - def dismountWarning(msg: String): Unit = { - log.warn(s"$msg; some vehicle might not know that a player is no longer sitting in it") + def dismountWarning(note: String): Unit = { + log.warn(s"$note; some vehicle might not know that ${player.Name} is no longer sitting in it") } if (player.GUID == player_guid) { //normally disembarking from a mount @@ -5447,7 +5405,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con obj.PassengerInSeat(player) match { case Some(0) if controlled.nonEmpty => log.warn( - s"DismountVehicleMsg: can not dismount from vehicle as driver while server has asserted control; please wait ..." + s"DismountVehicleMsg: ${player.Name} can not dismount from vehicle as driver while server has asserted control; please wait ..." ) case Some(seat_num) => obj.Actor ! Mountable.TryDismount(player, seat_num) @@ -5501,7 +5459,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con case (None, _) => ; log.warn(s"DismountVehicleMsg: ${player.Name} can not find his vehicle") case (_, None) => ; - log.warn(s"DismountVehicleMsg: player $player_guid could not be found to kick") + log.warn(s"DismountVehicleMsg: player $player_guid could not be found to kick, ${player.Name}") case _ => log.warn(s"DismountVehicleMsg: object is either not a Mountable or not a Player") } @@ -5511,14 +5469,14 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con } case msg @ DeployRequestMessage(player_guid, vehicle_guid, deploy_state, unk2, unk3, pos) => - log.info(s"DeployRequest: $msg") if (player.avatar.vehicle.contains(vehicle_guid) && player.avatar.vehicle == player.VehicleSeated) { continent.GUID(vehicle_guid) match { case Some(obj: Vehicle) => + log.info(s"DeployRequest: ${player.Name} is requesting a deployment change for ${obj.Definition.Name}") obj.Actor ! Deployment.TryDeploymentChange(deploy_state) case _ => - log.error(s"DeployRequest: can not find $vehicle_guid in scope") + log.error(s"DeployRequest: can not find vehicle $vehicle_guid") avatarActor ! AvatarActor.SetVehicle(None) } } else { @@ -5526,14 +5484,12 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con } case msg @ AvatarGrenadeStateMessage(player_guid, state) => - log.info("AvatarGrenadeStateMessage: " + msg) + log.info("AvatarGrenadeStateMessage: " + msg) //TODO I thought I had this working? case msg @ SquadDefinitionActionMessage(u1, u2, action) => - log.info(s"SquadDefinitionAction: $msg") squadService ! SquadServiceMessage(player, continent, SquadServiceAction.Definition(u1, u2, action)) case msg @ SquadMembershipRequest(request_type, char_id, unk3, player_name, unk5) => - log.info(s"$msg") squadService ! SquadServiceMessage( player, continent, @@ -5541,11 +5497,10 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con ) case msg @ SquadWaypointRequest(request, _, wtype, unk, info) => - log.info(s"Waypoint Request: $msg") squadService ! SquadServiceMessage(player, continent, SquadServiceAction.Waypoint(request, wtype, unk, info)) case msg @ GenericCollisionMsg(u1, p, t, php, thp, pv, tv, ppos, tpos, u2, u3, u4) => - log.debug("Ouch! " + msg) + log.info(s"${player.Name} would be in intense and excruciating pain right now if collison worked") case msg @ BugReportMessage( version_major, @@ -5559,10 +5514,10 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con summary, desc ) => - log.info("BugReportMessage: " + msg) + log.info(s"BugReportMessage: ${player.Name} filed $msg") case msg @ BindPlayerMessage(action, bindDesc, unk1, logging, unk2, unk3, unk4, pos) => - log.info("BindPlayerMessage: " + msg) + //log.info("BindPlayerMessage: " + msg) case msg @ PlanetsideAttributeMessage(object_guid, attribute_type, attribute_value) => log.info("PlanetsideAttributeMessage: " + msg) @@ -5573,7 +5528,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con vehicle.PermissionGroup(attribute_type, attribute_value) match { case Some(allow) => val group = AccessPermissionGroup(attribute_type - 10) - log.info(s"Vehicle attributes: vehicle ${vehicle.GUID} access permission $group changed to $allow") + log.info(s"Vehicle attributes: ${player.Name} changed ${vehicle.Definition.Name}'s access permission $group changed to $allow") continent.VehicleEvents ! VehicleServiceMessage( continent.id, VehicleAction.SeatPermissions(player.GUID, vehicle.GUID, attribute_type, attribute_value) @@ -5611,7 +5566,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con case None => ; } } else { - log.warn(s"Vehicle attributes: unsupported change on vehicle $object_guid - $attribute_type") + log.warn(s"Vehicle attributes: unsupported change on vehicle $object_guid - $attribute_type, ${player.Name}") } } else { log.warn(s"Vehicle attributes: ${player.Name} does not own vehicle ${vehicle.GUID} and can not change it") @@ -5622,7 +5577,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con avatarActor ! AvatarActor.SetCosmetics(Cosmetic.valuesFromAttributeValue(attribute_value)) case _ => - log.warn(s"echo unknown attributes behavior") + log.warn(s"echoing unknown attributes behavior") sendResponse(PlanetsideAttributeMessage(object_guid, attribute_type, attribute_value)) } @@ -5636,27 +5591,23 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con } case _ => log.warn( - s"FacilityBenefitShieldChargeRequest: can not find vehicle ${vehicleGUID.guid} in zone ${continent.id}" + s"FacilityBenefitShieldChargeRequest: ${player.Name} can not find vehicle ${vehicleGUID.guid} in zone ${continent.id}" ) } case None => - log.warn(s"FacilityBenefitShieldChargeRequest: player ${player.Name} is not seated in a vehicle") + log.warn(s"FacilityBenefitShieldChargeRequest: ${player.Name} is not seated in a vehicle") } case msg @ BattleplanMessage(char_id, player_name, zone_id, diagrams) => - log.info("Battleplan: " + msg) + log.info(s"Battleplan: ${player.Name} has a brilliant idea that no one will ever see") - case msg @ CreateShortcutMessage(player_guid, slot, unk, add, shortcut) => - log.debug("CreateShortcutMessage: " + msg) + case msg @ CreateShortcutMessage(player_guid, slot, unk, add, shortcut) => ; - case msg @ FriendsRequest(action, friend) => - log.info("FriendsRequest: " + msg) + case msg @ FriendsRequest(action, friend) => ; - case msg @ HitHint(source_guid, player_guid) => - log.trace(s"HitHint: $msg") //HitHint is manually distributed for proper operation + case msg @ HitHint(source_guid, player_guid) => ; //HitHint is manually distributed for proper operation case msg @ TargetingImplantRequest(list) => - log.info("TargetingImplantRequest: " + msg) val targetInfo: List[TargetInfo] = list.flatMap(x => { continent.GUID(x.target_guid) match { case Some(player: Player) => @@ -5669,7 +5620,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con Some(TargetInfo(player.GUID, health, armor)) case _ => - log.warn(s"Target info requested for guid ${x.target_guid} but is not a player") + log.warn(s"TargetingImplantRequest: The target info that ${player.Name} requested for guid ${x.target_guid} is not for a player") None } }) @@ -5685,11 +5636,11 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con ) case msg @ ActionCancelMessage(u1, u2, u3) => - log.info("Cancelled: " + msg) progressBarUpdate.cancel() progressBarValue = None - case default => log.error(s"Unhandled GamePacket $pkt") + case _ => + log.warn(s"Unhandled GamePacket $pkt") } /** @@ -5716,7 +5667,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con } def Execute(resolver: ActorRef): Unit = { - log.info(s"Player $localPlayer is registered") + log.trace(s"Player $localPlayer is registered") resolver ! Success(this) localAnnounce ! NewPlayerLoaded(localPlayer) //alerts WorldSessionActor } @@ -5753,7 +5704,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con } def Execute(resolver: ActorRef): Unit = { - log.info(s"Player $localPlayer is registered") + log.trace(s"Player $localPlayer is registered") resolver ! Success(this) localAnnounce ! PlayerLoaded(localPlayer) //alerts WorldSessionActor } @@ -5789,7 +5740,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con } def Execute(resolver: ActorRef): Unit = { - log.info(s"Vehicle $localVehicle is registered") + log.trace(s"Vehicle $localVehicle is registered") resolver ! Success(this) } }, @@ -5841,7 +5792,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con } def Execute(resolver: ActorRef): Unit = { - log.info(s"Vehicle $localVehicle is registered") + log.trace(s"Vehicle $localVehicle is registered") localDriver.VehicleSeated = localVehicle.GUID Vehicles.Own(localVehicle, localDriver) localAnnounce ! PlayerLoaded(localDriver) @@ -6412,28 +6363,28 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con ) //handle inventory contents - box.Capacity = (if (sumReloadValue <= fullMagazine) { + box.Capacity = if (sumReloadValue <= fullMagazine) { sumReloadValue } else { val splitReloadAmmo: Int = sumReloadValue - fullMagazine log.info( - s"ChangeAmmo: taking ${originalBoxCapacity - splitReloadAmmo} from a box of ${originalBoxCapacity} $requestedAmmoType" + s"ChangeAmmo: ${player.Name} takes ${originalBoxCapacity - splitReloadAmmo} from a box of ${originalBoxCapacity} $requestedAmmoType ammo" ) val boxForInventory = AmmoBox(box.Definition, splitReloadAmmo) continent.tasks ! stowNewFunc(boxForInventory) fullMagazine - }) + } sendResponse( InventoryStateMessage(box.GUID, tool.GUID, box.Capacity) ) //should work for both players and vehicles - log.info(s"ChangeAmmo: loading ${box.Capacity} $requestedAmmoType into ${tool.GUID} @ $ammoSlotIndex") + log.info(s"ChangeAmmo: ${player.Name} loads ${box.Capacity} $requestedAmmoType into ${tool.GUID} in $ammoSlotIndex") if (previousBox.Capacity > 0) { //divide capacity across other existing and not full boxes of that ammo type var capacity = previousBox.Capacity val iter = obj.Inventory.Items .filter(entry => { entry.obj match { - case (item: AmmoBox) => + case item: AmmoBox => item.AmmoType == originalAmmoType && item.FullCapacity != item.Capacity case _ => false @@ -6446,7 +6397,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con val entry = iter.next() val item: AmmoBox = entry.obj.asInstanceOf[AmmoBox] val ammoAllocated = math.min(item.FullCapacity - item.Capacity, capacity) - log.info(s"ChangeAmmo: putting $ammoAllocated back into a box of ${item.Capacity} $originalAmmoType") + log.info(s"ChangeAmmo: ${player.Name} put $ammoAllocated back into a box of ${item.Capacity} $originalAmmoType") capacity -= ammoAllocated modifyFunc(item, -ammoAllocated) } @@ -6527,13 +6478,13 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con val ammoType = tool.AmmoType FindEquipmentStock(player, FindToolThatUses(ammoType), 3, CountGrenades).reverse match { //do not search sidearm holsters case Nil => - log.info(s"no more $ammoType grenades") + log.info(s"${player.Name} has no more $ammoType grenades to throw") RemoveOldEquipmentFromInventory(player)(tool) case x :: xs => //this is similar to ReloadMessage val box = x.obj.asInstanceOf[Tool] val tailReloadValue: Int = if (xs.isEmpty) { 0 } - else { xs.map(_.obj.asInstanceOf[Tool].Magazine).reduce(_ + _) } + else { xs.map(_.obj.asInstanceOf[Tool].Magazine).sum } val sumReloadValue: Int = box.Magazine + tailReloadValue val actualReloadValue = if (sumReloadValue <= 3) { RemoveOldEquipmentFromInventory(player)(x.obj) @@ -6542,7 +6493,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con ModifyAmmunition(player)(box.AmmoSlot.Box, 3 - tailReloadValue) 3 } - log.info(s"found $actualReloadValue more $ammoType grenades to throw") + log.info(s"${player.Name} found $actualReloadValue more $ammoType grenades to throw") ModifyAmmunition(player)( tool.AmmoSlot.Box, -actualReloadValue @@ -6596,7 +6547,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con } else { "" } - log.error(s"DeployRequest: $obj can not transition to $state - $reason$mobileShift") + log.error(s"DeployRequest: ${player.Name} can not transition $obj to $state - $reason$mobileShift") } /** @@ -6968,12 +6919,11 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con zone.id, VehicleAction.UnloadVehicle(player.GUID, vehicle, vehicleToDelete) ) - log.info( + log.trace( s"AvatarCreate: cleaning up ghost of transitioning vehicle ${vehicle.Definition.Name}@${vehicleToDelete.guid} in zone ${zone.id}" ) } Vehicles.ReloadAccessPermissions(vehicle, player.Name) - //log.info(s"AvatarCreate (vehicle): $guid -> $data") AvatarCreateInVehicle(player, vehicle, seat) case _ => @@ -6986,7 +6936,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con continent.id, AvatarAction.LoadPlayer(guid, ObjectClass.avatar, guid, packet.ConstructorData(player).get, None) ) - //log.info(s"AvatarCreate: $guid -> $data") + log.trace(s"AvatarCreate: $guid -> $data") log.trace(s"AvatarCreate: ${player.Name}") } continent.Population ! Zone.Population.Spawn(avatar, player, avatarActor) @@ -7101,7 +7051,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con Some(ObjectCreateMessageParent(vguid, seat)) ) ) - //log.info(s"AvatarCreateInVehicle: $pguid -> pdata") + log.trace(s"AvatarCreateInVehicle: $pguid -> pdata") } /** @@ -7137,18 +7087,20 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con //vehicle and driver/passenger val vdef = vehicle.Definition val vguid = vehicle.GUID - if (seat == 0) { + val vdata = if (seat == 0) { val seat = vehicle.Seats(0) seat.unmount(player) - val vdata = vdef.Packet.ConstructorData(vehicle).get + val _vdata = vdef.Packet.ConstructorData(vehicle).get sendResponse(ObjectCreateMessage(vehicle.Definition.ObjectId, vguid, vdata)) seat.mount(player) + _vdata } else { - val vdata = vdef.Packet.ConstructorData(vehicle).get - sendResponse(ObjectCreateMessage(vehicle.Definition.ObjectId, vguid, vdata)) + val _vdata = vdef.Packet.ConstructorData(vehicle).get + sendResponse(ObjectCreateMessage(vehicle.Definition.ObjectId, vguid, _vdata)) + _vdata } Vehicles.ReloadAccessPermissions(vehicle, continent.id) - //log.info(s"AvatarCreate (vehicle): $vguid -> $vdata") + log.trace(s"AvatarCreate (vehicle): $vguid -> $vdata") val pdef = player.avatar.definition val pguid = player.GUID val parent = ObjectCreateMessageParent(vguid, seat) @@ -7156,7 +7108,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con val pdata = pdef.Packet.DetailedConstructorData(player).get player.VehicleSeated = vguid sendResponse(ObjectCreateDetailedMessage(pdef.ObjectId, pguid, pdata)) - //log.info(s"AvatarRejoin: $vguid -> $vdata") + log.trace(s"AvatarRejoin: $pguid -> $pdata") if (seat == 0 || vehicle.WeaponControlledFromSeat(seat).nonEmpty) { sendResponse(ObjectAttachMessage(vguid, pguid, seat)) AccessContainer(vehicle) @@ -7173,7 +7125,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con val data = packet.DetailedConstructorData(player).get val guid = player.GUID sendResponse(ObjectCreateDetailedMessage(ObjectClass.avatar, guid, data)) - //log.info(s"AvatarRejoin: $guid -> $data") + log.trace(s"AvatarRejoin: $guid -> $data") log.trace(s"AvatarRejoin: ${player.Name}") } //cautious redundancy @@ -7343,7 +7295,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con */ def RequestSanctuaryZoneSpawn(tplayer: Player, currentZone: Int): Unit = { if (currentZone == Zones.sanctuaryZoneNumber(tplayer.Faction)) { - log.error("RequestSanctuaryZoneSpawn called for player already in sanctuary.") + log.error(s"RequestSanctuaryZoneSpawn: ${player.Name} is already in faction Sanctuary zone.") sendResponse(DisconnectMessage("RequestSanctuaryZoneSpawn called for player already in sanctuary.")) return } @@ -7447,7 +7399,6 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con */ def StopUsingProximityUnit(terminal: Terminal with ProximityUnit): Unit = { val term_guid = terminal.GUID - //log.trace(s"StopUsingProximityUnit: attempting to stop using proximity unit ${terminal.Definition.Name}@${term_guid.guid}") val targets = FindProximityUnitTargetsInScope(terminal) if (targets.nonEmpty) { if (usingMedicalTerminal.contains(term_guid)) { @@ -7771,7 +7722,6 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con PlayerActionsToCancel() avatarActor ! AvatarActor.DeactivateActiveImplants() avatarActor ! AvatarActor.SuspendStaminaRegeneration(3 seconds) - log.info(s"MountVehicleMsg: ${player.Name}_guid mounts $obj @ $seatNum") sendResponse(ObjectAttachMessage(obj_guid, player_guid, seatNum)) continent.VehicleEvents ! VehicleServiceMessage( continent.id, @@ -7787,7 +7737,9 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con */ def DismountAction(tplayer: Player, obj: PlanetSideGameObject with Mountable, seatNum: Int): Unit = { val player_guid: PlanetSideGUID = tplayer.GUID - log.info(s"DismountVehicleMsg: ${tplayer.Name} dismounts $obj from $seatNum") + log.info( + s"DismountVehicleMsg: ${tplayer.Name} dismounts a ${obj.Definition.asInstanceOf[ObjectDefinition].Name} from seat $seatNum" + ) keepAliveFunc = NormalKeepAlive sendResponse(DismountVehicleMsg(player_guid, BailType.Normal, wasKickedByDriver = false)) continent.VehicleEvents ! VehicleServiceMessage( @@ -7991,7 +7943,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con obj.ModePermissions ) && originalAmmoIndex != obj.AmmoTypeIndex) log.info( - s"ChangeFireMode: construction object ${obj.Definition.Name} changed to ${obj.AmmoType} (mode ${obj.FireModeIndex})" + s"ChangeFireMode: ${player.Name} switched construction object ${obj.Definition.Name} to ${obj.AmmoType} (mode ${obj.FireModeIndex})" ) sendResponse(ChangeAmmoMessage(obj.GUID, obj.AmmoTypeIndex)) } @@ -8053,7 +8005,6 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con val item = definition.Item val deployables = avatar.deployables val (curr, max) = deployables.CountDeployable(item) - log.info(s"DeployableBuildActivity: ${definition.Name}") //two potential messages related to numerical limitations of deployables if (!avatar.deployables.Available(obj)) { val (removed, msg) = { @@ -8081,7 +8032,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con } case None => ; //should be an invalid case log.warn( - s"DeployableBuildActivity: how awkward: we probably shouldn't be allowed to build this deployable right now" + s"DeployableBuildActivity: how awkward: ${player.Name} probably shouldn't be allowed to build this deployable right now" ) } } else if (obj.isInstanceOf[TelepadDeployable]) { @@ -8164,11 +8115,11 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con } else { player.Find(tool) match { case Some(newIndex) => - log.warn(s"$logDecorator: looking for item in $index, but item was found at $newIndex instead") + log.warn(s"$logDecorator: ${player.Name} was looking for an item in his hand $index, but item was found at $newIndex instead") player.Slot(newIndex).Equipment = None true case None => - log.error(s"$logDecorator: could not find the target ${tool.Definition.Name}") + log.error(s"$logDecorator: ${player.Name} could not find the target ${tool.Definition.Name}") false } } @@ -8234,7 +8185,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con } } else { log.warn( - s"FindReplacementConstructionItem: slot $index needs to be empty before a replacement ${definition.Name} can be installed" + s"FindReplacementConstructionItem: ${player.Name}, your $index hand needs to be empty before a replacement ${definition.Name} can be installed" ) } } @@ -8274,22 +8225,19 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con case Some((parent, Some(slot))) => obj.Position = Vector3.Zero RemoveOldEquipmentFromInventory(parent)(obj) - log.info(s"RequestDestroy: equipment $obj") true case _ => if (player.avatar.locker.Inventory.Remove(object_guid)) { sendResponse(ObjectDeleteMessage(object_guid, 0)) - log.info(s"RequestDestroy: equipment $obj") true } else if (continent.EquipmentOnGround.contains(obj)) { obj.Position = Vector3.Zero continent.Ground ! Zone.Ground.RemoveItem(object_guid) continent.AvatarEvents ! AvatarServiceMessage.Ground(RemoverActor.ClearSpecific(List(obj), continent)) - log.info(s"RequestDestroy: equipment $obj on ground") true } else { - log.warn(s"RequestDestroy: equipment $obj exists, but can not be reached") + log.warn(s"RequestDestroy: equipment $obj exists, but ${player.Name} can not reach it to dispose of it") false } } @@ -8397,7 +8345,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con * does not factor in any time required for loading zone or game objects */ def LoadZonePhysicalSpawnPoint(zoneId: String, pos: Vector3, ori: Vector3, respawnTime: FiniteDuration): Unit = { - log.info(s"Load in zone $zoneId at position $pos in $respawnTime") + log.info(s"LoadZonePhysicalSpawnPoint: ${player.Name} will load in zone $zoneId at position $pos in $respawnTime") respawnTimer.cancel() reviveTimer.cancel() deadState = DeadState.RespawnTime @@ -8461,7 +8409,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con * @param zoneId the zone in which the player will be placed */ def LoadZoneAsPlayer(targetPlayer: Player, zoneId: String): Unit = { - log.debug(s"loadZoneAsPlayer ${targetPlayer.avatar.name} $zoneId") + log.info(s"LoadZoneAsPlayer ${targetPlayer.avatar.name} loading into $zoneId") if (!zoneReload && zoneId == continent.id) { if (player.isBackpack) { // important! test the actor-wide player ref, not the parameter // respawning from unregistered player @@ -8542,9 +8490,8 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con * @return a tuple composed of an `ActorRef` destination and a message to send to that destination */ def LoadZoneInVehicleAsDriver(vehicle: Vehicle, zoneId: String): Unit = { - log.info(s"LoadZoneInVehicleAsDriver: ${player.Name} is driving a ${vehicle.Definition.Name}") + log.info(s"LoadZoneInVehicleAsDriver: ${player.Name} loading into $zoneId, driving a ${vehicle.Definition.Name}") val manifest = vehicle.PrepareGatingManifest() - log.info(s"$manifest") val pguid = player.GUID val toChannel = manifest.file val topLevel = interstellarFerryTopLevelGUID.getOrElse(vehicle.GUID) @@ -8555,7 +8502,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con manifest.cargo.foreach { case ("MISSING_DRIVER", index) => val cargo = vehicle.CargoHolds(index).occupant.get - log.error(s"LoadZoneInVehicleAsDriver: eject cargo in hold $index; vehicle missing driver") + log.error(s"LoadZoneInVehicleAsDriver: ${player.Name} must eject cargo in hold $index; vehicle is missing driver") CargoBehavior.HandleVehicleCargoDismount(cargo.GUID, cargo, vehicle.GUID, vehicle, false, false, true) case (name, index) => val cargo = vehicle.CargoHolds(index).occupant.get @@ -8634,7 +8581,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con * @return a tuple composed of an `ActorRef` destination and a message to send to that destination */ def LoadZoneInVehicleAsPassenger(vehicle: Vehicle, zoneId: String): Unit = { - log.info(s"LoadZoneInVehicleAsPassenger: ${player.Name} is the passenger of a ${vehicle.Definition.Name}") + log.info(s"LoadZoneInVehicleAsPassenger: ${player.Name} loading into $zoneId as the passenger of a ${vehicle.Definition.Name}") if (!zoneReload && zoneId == continent.id) { //transferring a vehicle between spawn points (warp gates) in the same zone self ! PlayerLoaded(player) @@ -8683,7 +8630,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con ) } case None => - log.error("LoadZoneTransferPassengerMessages: expected a manifest for zone transfer; got nothing") + log.error(s"LoadZoneTransferPassengerMessages: ${player.Name} expected a manifest for zone transfer; got nothing") } } @@ -8844,7 +8791,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con LocalAction.RouterTelepadTransport(pguid, pguid, sguid, dguid) ) } else { - log.warn(s"UseRouterTelepadSystem: can not teleport") + log.warn(s"UseRouterTelepadSystem: ${player.Name} can not teleport") } recentTeleportAttempt = time } @@ -8956,7 +8903,6 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con .sortBy(tube => Vector3.DistanceSquared(tube.Position, player.Position)) .headOption match { case Some(tube) => - log.info("DrawCurrentAmsSpawnPoint - new @ams spawn point drawn") sendResponse( BindPlayerMessage( BindStatus.Available, @@ -8970,7 +8916,6 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con ) ) case None => - log.info("DrawCurrentAmsSpawnPoint - no @ams spawn point drawn") sendResponse( BindPlayerMessage( BindStatus.Unavailable, @@ -9120,7 +9065,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con case PlanetSideEmpire.NC => if (player.Capacitor > 0) player.UsingSpecial = SpecialExoSuitDefinition.Mode.Shielded case _ => - log.warn(s"Player ${player.Name} tried to use a MAX special ability but their faction doesn't have one") + log.warn(s"${player.Name} tried to use a MAX special ability but their faction doesn't have one") } if ( player.UsingSpecial == SpecialExoSuitDefinition.Mode.Overdrive || player.UsingSpecial == SpecialExoSuitDefinition.Mode.Shielded @@ -9332,7 +9277,6 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con * @see `persist` */ def KeepAlivePersistence(): Unit = { - //log.info(s"KeepAlive in a vehicle - $upstreamMessageCount") interimUngunnedVehicle = None persist() turnCounterFunc(player.GUID) @@ -9378,8 +9322,8 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con case None => false } ) { - log.trace( - s"WeaponFireMessage: overwriting unresolved projectile ${projectileGUID.guid}" + log.debug( + s"WeaponFireMessage: overwriting unresolved projectile ${projectileGUID.guid}, known to ${player.Name}" ) } val (angle, attribution, acceptableDistanceToOwner) = obj match { diff --git a/src/main/scala/net/psforever/login/TcpListener.scala b/src/main/scala/net/psforever/login/TcpListener.scala index 1a65c966..820ba79f 100644 --- a/src/main/scala/net/psforever/login/TcpListener.scala +++ b/src/main/scala/net/psforever/login/TcpListener.scala @@ -26,7 +26,7 @@ class TcpListener[T <: Actor](actorClass: Class[T], nextActorName: String, liste def receive = { case Tcp.Bound(local) => - log.info(s"Now listening on TCP:$local") + log.debug(s"Now listening on TCP:$local") context.become(ready(sender())) case Tcp.CommandFailed(Tcp.Bind(_, address, _, _, _)) => diff --git a/src/main/scala/net/psforever/objects/Deployables.scala b/src/main/scala/net/psforever/objects/Deployables.scala index 704eb076..a43f4d1a 100644 --- a/src/main/scala/net/psforever/objects/Deployables.scala +++ b/src/main/scala/net/psforever/objects/Deployables.scala @@ -128,7 +128,6 @@ object Deployables { * @param avatar the player's core */ def InitializeDeployableQuantities(avatar: Avatar): Boolean = { - log.info("Setting up combat engineering ...") avatar.deployables.Initialize(avatar.certifications) } @@ -137,7 +136,6 @@ object Deployables { * @param avatar the player's core */ def InitializeDeployableUIElements(avatar: Avatar): List[(Int, Int, Int, Int)] = { - log.info("Setting up combat engineering UI ...") avatar.deployables.UpdateUI() } diff --git a/src/main/scala/net/psforever/objects/Vehicles.scala b/src/main/scala/net/psforever/objects/Vehicles.scala index 89fa4cee..9812e4f8 100644 --- a/src/main/scala/net/psforever/objects/Vehicles.scala +++ b/src/main/scala/net/psforever/objects/Vehicles.scala @@ -226,7 +226,7 @@ object Vehicles { * @param unk na; used by `HackMessage` as `unk5` */ def FinishHackingVehicle(target: Vehicle, hacker: Player, unk: Long)(): Unit = { - log.info(s"Vehicle guid: ${target.GUID} has been jacked") + log.info(s"Vehicle ${target.Definition.Name}#${target.GUID.guid} has been jacked by ${hacker.Name}") val zone = target.Zone // Forcefully dismount any cargo target.CargoHolds.values.foreach(cargoHold => { diff --git a/src/main/scala/net/psforever/objects/avatar/PlayerControl.scala b/src/main/scala/net/psforever/objects/avatar/PlayerControl.scala index e50a376b..0af21931 100644 --- a/src/main/scala/net/psforever/objects/avatar/PlayerControl.scala +++ b/src/main/scala/net/psforever/objects/avatar/PlayerControl.scala @@ -328,7 +328,7 @@ class PlayerControl(player: Player, avatarActor: typed.ActorRef[AvatarActor.Comm ) 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 fallbackSuit = ExoSuitType.Standard val originalSuit = player.ExoSuit @@ -371,7 +371,7 @@ class PlayerControl(player: Player, avatarActor: typed.ActorRef[AvatarActor.Comm (exosuit, subtype) } else { 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) } @@ -710,6 +710,12 @@ class PlayerControl(player: Player, avatarActor: typed.ActorRef[AvatarActor.Comm super.CancelJammeredStatus(target) //uninitialize implants 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 ${if(player.Sex==CharacterGender.Male){"himself"}else{"herself"}}.") + } events ! AvatarServiceMessage( nameChannel, AvatarAction.Killed(player_guid, target.VehicleSeated) diff --git a/src/main/scala/net/psforever/objects/guid/actor/NumberPoolActor.scala b/src/main/scala/net/psforever/objects/guid/actor/NumberPoolActor.scala index 0f759226..edc0408e 100644 --- a/src/main/scala/net/psforever/objects/guid/actor/NumberPoolActor.scala +++ b/src/main/scala/net/psforever/objects/guid/actor/NumberPoolActor.scala @@ -44,7 +44,7 @@ class NumberPoolActor(pool: NumberPool) extends Actor { sender() ! NumberPoolActor.ReturnNumberResult(number, ex, id) case msg => - log.info(s"received an unexpected message - ${msg.toString}") + log.warn(s"Received an unexpected message - ${msg.toString}") } } diff --git a/src/main/scala/net/psforever/objects/guid/actor/UniqueNumberSystem.scala b/src/main/scala/net/psforever/objects/guid/actor/UniqueNumberSystem.scala index 47f5c996..06f0eca9 100644 --- a/src/main/scala/net/psforever/objects/guid/actor/UniqueNumberSystem.scala +++ b/src/main/scala/net/psforever/objects/guid/actor/UniqueNumberSystem.scala @@ -103,7 +103,7 @@ class UniqueNumberSystem(private val guid: NumberPoolHub, private val poolActors } } catch { case _: Exception => - log.info(s"$obj is already unregistered") + log.warn(s"$obj is already unregistered") callback ! Success(obj) } diff --git a/src/main/scala/net/psforever/objects/serverobject/hackable/GenericHackables.scala b/src/main/scala/net/psforever/objects/serverobject/hackable/GenericHackables.scala index 0614472c..c50e016a 100644 --- a/src/main/scala/net/psforever/objects/serverobject/hackable/GenericHackables.scala +++ b/src/main/scala/net/psforever/objects/serverobject/hackable/GenericHackables.scala @@ -104,7 +104,7 @@ object GenericHackables { def FinishHacking(target: PlanetSideServerObject with Hackable, user: Player, unk: Long)(): Unit = { import akka.pattern.ask 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 import scala.concurrent.ExecutionContext.Implicits.global val tplayer = user diff --git a/src/main/scala/net/psforever/objects/serverobject/locks/IFFLockControl.scala b/src/main/scala/net/psforever/objects/serverobject/locks/IFFLockControl.scala index 9d0f7902..f2c9890e 100644 --- a/src/main/scala/net/psforever/objects/serverobject/locks/IFFLockControl.scala +++ b/src/main/scala/net/psforever/objects/serverobject/locks/IFFLockControl.scala @@ -41,7 +41,7 @@ class IFFLockControl(lock: IFFLock) ) } else { 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"Player - Faction=${player.Faction}") } diff --git a/src/main/scala/net/psforever/objects/serverobject/terminals/CaptureTerminals.scala b/src/main/scala/net/psforever/objects/serverobject/terminals/CaptureTerminals.scala new file mode 100644 index 00000000..af6864db --- /dev/null +++ b/src/main/scala/net/psforever/objects/serverobject/terminals/CaptureTerminals.scala @@ -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.toString}") + // 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}") + } + } +} diff --git a/src/main/scala/net/psforever/objects/vehicles/CargoBehavior.scala b/src/main/scala/net/psforever/objects/vehicles/CargoBehavior.scala index 509525cf..87553af2 100644 --- a/src/main/scala/net/psforever/objects/vehicles/CargoBehavior.scala +++ b/src/main/scala/net/psforever/objects/vehicles/CargoBehavior.scala @@ -160,8 +160,6 @@ object CargoBehavior { VehicleAction.SendResponse(PlanetSideGUID(0), PlanetsideAttributeMessage(cargoGUID, 68, cargo.Shields)) ) val (attachMsg, mountPointMsg) = CargoMountBehaviorForAll(carrier, cargo, mountPoint) - log.info(s"HandleCheckCargoMounting: $attachMsg") - log.info(s"HandleCheckCargoMounting: $mountPointMsg") false } else if (distance > 625 || iteration >= 40) { //vehicles moved too far away or took too long to get into proper position; abort mounting diff --git a/src/main/scala/net/psforever/services/account/AccountIntermediaryService.scala b/src/main/scala/net/psforever/services/account/AccountIntermediaryService.scala index ea619aca..87d11f8d 100644 --- a/src/main/scala/net/psforever/services/account/AccountIntermediaryService.scala +++ b/src/main/scala/net/psforever/services/account/AccountIntermediaryService.scala @@ -33,29 +33,29 @@ class AccountIntermediaryService extends Actor { // Called by the LoginSessionActor case StoreAccountData(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 case RetrieveAccountData(token) => accountsByToken.remove(token) match { case Some(acc) => sender() ! ReceiveAccountData(acc) - log.info(s"Retrieving intermediary account data for $acc") + log.trace(s"Retrieving intermediary account data for $acc") case None => log.error(s"Unable to retrieve intermediary account data for $token") } case StoreIPAddress(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) => val address: Option[IPAddress] = IPAddressBySessionID.remove(sessionID) if (address.nonEmpty) { 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 { - 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 => diff --git a/src/main/scala/net/psforever/services/account/AccountPersistenceService.scala b/src/main/scala/net/psforever/services/account/AccountPersistenceService.scala index aefe374a..ce0b7239 100644 --- a/src/main/scala/net/psforever/services/account/AccountPersistenceService.scala +++ b/src/main/scala/net/psforever/services/account/AccountPersistenceService.scala @@ -410,7 +410,7 @@ class PersistenceMonitor(name: String, squadService: ActorRef) extends Actor { Deployables.Disown(inZone, avatar, context.parent) inZone.Population.tell(Zone.Population.Leave(avatar), 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}") } } diff --git a/src/main/scala/net/psforever/services/avatar/AvatarService.scala b/src/main/scala/net/psforever/services/avatar/AvatarService.scala index 27b3faad..49c758c2 100644 --- a/src/main/scala/net/psforever/services/avatar/AvatarService.scala +++ b/src/main/scala/net/psforever/services/avatar/AvatarService.scala @@ -25,7 +25,6 @@ class AvatarService(zone: Zone) extends Actor { case Service.Join(channel) => val path = s"/$channel/Avatar" val who = sender() - log.info(s"$who has joined $path") AvatarEvents.subscribe(who, path) case Service.Leave(None) => @@ -33,8 +32,6 @@ class AvatarService(zone: Zone) extends Actor { case Service.Leave(Some(channel)) => val path = s"/$channel/Avatar" - val who = sender() - log.info(s"$who has left $path") AvatarEvents.unsubscribe(sender(), path) case Service.LeaveAll() => diff --git a/src/main/scala/net/psforever/services/chat/ChatService.scala b/src/main/scala/net/psforever/services/chat/ChatService.scala index 36ad052b..9bbcd115 100644 --- a/src/main/scala/net/psforever/services/chat/ChatService.scala +++ b/src/main/scala/net/psforever/services/chat/ChatService.scala @@ -142,7 +142,7 @@ class ChatService(context: ActorContext[ChatService.Command]) extends AbstractBe ) case (None, _, _, _) => - log.error("received message from non-subscribed actor") + log.warn("received message from non-subscribed actor") } diff --git a/src/main/scala/net/psforever/services/galaxy/GalaxyService.scala b/src/main/scala/net/psforever/services/galaxy/GalaxyService.scala index 678f99a5..d0463aa6 100644 --- a/src/main/scala/net/psforever/services/galaxy/GalaxyService.scala +++ b/src/main/scala/net/psforever/services/galaxy/GalaxyService.scala @@ -9,38 +9,26 @@ import net.psforever.services.{GenericEventBus, Service} class GalaxyService extends Actor { private[this] val log = org.log4s.getLogger - override def preStart() = { - log.info("Starting...") - } - val GalaxyEvents = new GenericEventBus[GalaxyServiceResponse] def receive: Receive = { case Service.Join(faction) if "TRNCVS".containsSlice(faction) => val path = s"/$faction/Galaxy" - val who = sender() - log.trace(s"$who has joined $path") - GalaxyEvents.subscribe(who, path) + GalaxyEvents.subscribe(sender(), path) case Service.Join("galaxy") => val path = s"/Galaxy" - val who = sender() - log.trace(s"$who has joined $path") - GalaxyEvents.subscribe(who, path) + GalaxyEvents.subscribe(sender(), path) case Service.Join(channel) => val path = s"/$channel/Galaxy" - val who = sender() - log.trace(s"$who has joined $path") - GalaxyEvents.subscribe(who, path) + GalaxyEvents.subscribe(sender(), path) case Service.Leave(None) => GalaxyEvents.unsubscribe(sender()) case Service.Leave(Some(channel)) => val path = s"/$channel/Galaxy" - val who = sender() - log.trace(s"$who has left $path") GalaxyEvents.unsubscribe(sender(), path) case Service.LeaveAll() => @@ -53,7 +41,7 @@ class GalaxyService extends Actor { 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( GalaxyServiceResponse( s"/$forChannel/Galaxy", @@ -69,6 +57,6 @@ class GalaxyService extends Actor { ) case msg => - log.info(s"Unhandled message $msg from ${sender()}") + log.warn(s"Unhandled message $msg from ${sender()}") } } diff --git a/src/main/scala/net/psforever/services/local/LocalService.scala b/src/main/scala/net/psforever/services/local/LocalService.scala index cedf3c23..7c184a6b 100644 --- a/src/main/scala/net/psforever/services/local/LocalService.scala +++ b/src/main/scala/net/psforever/services/local/LocalService.scala @@ -28,27 +28,19 @@ class LocalService(zone: Zone) extends Actor { context.actorOf(Props[RouterTelepadActivation](), s"${zone.id}-telepad-activate-agent") private[this] val log = org.log4s.getLogger - override def preStart() = { - log.trace(s"Awaiting ${zone.id} local events ...") - } - val LocalEvents = new GenericEventBus[LocalServiceResponse] def receive: Receive = { case Service.Join(channel) => val path = s"/$channel/Local" - val who = sender() - log.info(s"$who has joined $path") - LocalEvents.subscribe(who, path) + LocalEvents.subscribe(sender(), path) case Service.Leave(None) => LocalEvents.unsubscribe(sender()) case Service.Leave(Some(channel)) => val path = s"/$channel/Local" - val who = sender() - log.info(s"$who has left $path") - LocalEvents.unsubscribe(who, path) + LocalEvents.unsubscribe(sender(), path) case Service.LeaveAll() => LocalEvents.unsubscribe(sender()) @@ -229,13 +221,6 @@ class LocalService(zone: Zone) extends Actor { //response from HackClearActor case HackClearActor.SendHackMessageHackCleared(target_guid, _, unk1, unk2) => 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 case Terminal.StartProximityEffect(terminal) => @@ -323,7 +308,7 @@ class LocalService(zone: Zone) extends Actor { //get rid of previous linked remote telepad (if any) zone.GUID(internalTelepad.Telepad) match { 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" ) old.Active = false @@ -333,7 +318,7 @@ class LocalService(zone: Zone) extends Actor { } internalTelepad.Telepad = remoteTelepad.GUID 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}" ) LocalEvents.publish( diff --git a/src/main/scala/net/psforever/services/local/support/DeployableRemover.scala b/src/main/scala/net/psforever/services/local/support/DeployableRemover.scala index c7aeef7f..0d8f1e65 100644 --- a/src/main/scala/net/psforever/services/local/support/DeployableRemover.scala +++ b/src/main/scala/net/psforever/services/local/support/DeployableRemover.scala @@ -50,7 +50,7 @@ class DeployableRemover(taskResolver: ActorRef) extends RemoverActor(taskResolve override def SecondJob(entry: RemoverActor.Entry): Unit = { 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) super.SecondJob(entry) } diff --git a/src/main/scala/net/psforever/services/local/support/HackClearActor.scala b/src/main/scala/net/psforever/services/local/support/HackClearActor.scala index 3f2fe614..a74c2345 100644 --- a/src/main/scala/net/psforever/services/local/support/HackClearActor.scala +++ b/src/main/scala/net/psforever/services/local/support/HackClearActor.scala @@ -83,12 +83,12 @@ class HackClearActor() extends Actor { case Some(hackEntry) => 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" ) import scala.concurrent.ExecutionContext.Implicits.global 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.") } } diff --git a/src/main/scala/net/psforever/services/teamwork/SquadService.scala b/src/main/scala/net/psforever/services/teamwork/SquadService.scala index d59bcf49..ab90f163 100644 --- a/src/main/scala/net/psforever/services/teamwork/SquadService.scala +++ b/src/main/scala/net/psforever/services/teamwork/SquadService.scala @@ -124,11 +124,7 @@ class SquadService extends Actor { private[this] val log = org.log4s.getLogger private def debug(msg: String): Unit = { - log.info(msg) - } - - override def preStart(): Unit = { - log.info("Starting...") + log.debug(msg) } override def postStop(): Unit = { @@ -321,7 +317,7 @@ class SquadService extends Actor { case str if str.matches("//d+") => Publish(to.toLong, msg, excluded) 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) => user ! SquadServiceResponse("", msg) 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 => val path = s"/$faction/Squad" val who = sender() - debug(s"$who has joined $path") SquadEvents.subscribe(who, path) //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 path = s"/$char_id/Squad" val who = sender() - debug(s"$who has joined $path") context.watch(who) UserEvents += longCharId -> who refused(longCharId) = Nil @@ -407,7 +401,6 @@ class SquadService extends Actor { case Service.Leave(Some(faction)) if "TRNCVS".indexOf(faction) > -1 => val path = s"/$faction/Squad" val who = sender() - debug(s"$who has left $path") SquadEvents.unsubscribe(who, path) case Service.Leave(Some(char_id)) => diff --git a/src/main/scala/net/psforever/services/vehicle/VehicleService.scala b/src/main/scala/net/psforever/services/vehicle/VehicleService.scala index 3a89b717..5edb6c04 100644 --- a/src/main/scala/net/psforever/services/vehicle/VehicleService.scala +++ b/src/main/scala/net/psforever/services/vehicle/VehicleService.scala @@ -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[this] val log = org.log4s.getLogger - override def preStart() = { - log.trace(s"Awaiting ${zone.id} vehicle events ...") - } - val VehicleEvents = new GenericEventBus[VehicleServiceResponse] def receive = { case Service.Join(channel) => val path = s"/$channel/Vehicle" - val who = sender() - log.info(s"$who has joined $path") - VehicleEvents.subscribe(who, path) + VehicleEvents.subscribe(sender(), path) case Service.Leave(None) => VehicleEvents.unsubscribe(sender()) case Service.Leave(Some(channel)) => val path = s"/$channel/Vehicle" - val who = sender() - log.info(s"$who has left $path") - VehicleEvents.unsubscribe(who, path) + VehicleEvents.unsubscribe(sender(), path) case Service.LeaveAll() => VehicleEvents.unsubscribe(sender()) @@ -387,7 +379,7 @@ class VehicleService(zone: Zone) extends Actor { } 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 diff --git a/src/main/scala/net/psforever/services/vehicle/support/TurretUpgrader.scala b/src/main/scala/net/psforever/services/vehicle/support/TurretUpgrader.scala index cb7ba4e7..d3709e71 100644 --- a/src/main/scala/net/psforever/services/vehicle/support/TurretUpgrader.scala +++ b/src/main/scala/net/psforever/services/vehicle/support/TurretUpgrader.scala @@ -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) target.Upgrade = upgrade //perform upgrade @@ -228,7 +228,7 @@ class TurretUpgrader extends SupportActor[TurretUpgrader.Entry] { def FinishUpgradingTurret(entry: TurretUpgrader.Entry)(): Unit = { val target = entry.obj.asInstanceOf[FacilityTurret] val zone = entry.zone - info(s"Wall turret finished ${target.Upgrade} upgrade") + trace(s"Wall turret finished ${target.Upgrade} upgrade") target.ConfirmUpgrade(entry.upgrade) val targetGUID = target.GUID if (target.Health > 0) { From 9798e27d29918293e93837f9be1f53719f41fccd Mon Sep 17 00:00:00 2001 From: "Jason_DiDonato@yahoo.com" Date: Sun, 21 Mar 2021 14:22:00 -0400 Subject: [PATCH 2/4] gender was never the same thing as sex; for now, I just need easy pronouns for the log --- config/logback.xml | 4 +- .../test/scala/PacketCodingActorTest.scala | 4 +- .../objects/AutoRepairIntegrationTest.scala | 10 +- .../scala/actor/objects/AutoRepairTest.scala | 14 +- .../actor/objects/VehicleSpawnPadTest.scala | 6 +- .../actor/service/AvatarServiceTest.scala | 12 +- .../actors/session/AvatarActor.scala | 6 +- .../actors/session/SessionActor.scala | 298 +++++++++--------- .../psforever/objects/GlobalDefinitions.scala | 2 +- .../scala/net/psforever/objects/Player.scala | 2 +- .../net/psforever/objects/avatar/Avatar.scala | 2 +- .../objects/avatar/PlayerControl.scala | 2 +- .../converter/CorpseConverter.scala | 2 +- .../objects/vehicles/CargoBehavior.scala | 4 +- .../game/CharacterCreateRequestMessage.scala | 6 +- .../objectcreate/BasicCharacterData.scala | 4 +- .../CharacterAppearanceData.scala | 2 +- .../net/psforever/persistence/Avatar.scala | 4 +- .../net/psforever/types/CharacterGender.scala | 16 - .../net/psforever/types/CharacterSex.scala | 45 +++ .../net/psforever/types/CharacterVoice.scala | 2 +- .../CharacterCreateRequestMessageTest.scala | 6 +- .../game/objectcreate/CharacterDataTest.scala | 12 +- .../DetailedCharacterDataTest.scala | 24 +- .../MountedVehiclesTest.scala | 4 +- src/test/scala/objects/AvatarTest.scala | 18 +- src/test/scala/objects/ConverterTest.scala | 2 +- src/test/scala/objects/DamageModelTests.scala | 20 +- src/test/scala/objects/DamageableTest.scala | 60 ++-- src/test/scala/objects/DeployableTest.scala | 25 +- src/test/scala/objects/DoorTest.scala | 4 +- .../scala/objects/FacilityTurretTest.scala | 8 +- src/test/scala/objects/GeneratorTest.scala | 18 +- src/test/scala/objects/IFFLockTest.scala | 2 +- src/test/scala/objects/LoadoutTest.scala | 4 +- src/test/scala/objects/MountableTest.scala | 8 +- .../scala/objects/PlayerControlTest.scala | 32 +- src/test/scala/objects/PlayerTest.scala | 66 ++-- src/test/scala/objects/ProjectileTest.scala | 6 +- src/test/scala/objects/RepairableTest.scala | 12 +- src/test/scala/objects/ResourceSiloTest.scala | 4 +- src/test/scala/objects/UtilityTest.scala | 2 +- .../scala/objects/VehicleControlTest.scala | 54 +--- src/test/scala/objects/VehicleTest.scala | 6 +- src/test/scala/objects/VitalityTest.scala | 6 +- src/test/scala/objects/ZoneTest.scala | 28 +- .../guidtask/GUIDTaskRegisterAvatarTest.scala | 4 +- .../guidtask/GUIDTaskRegisterPlayerTest.scala | 4 +- .../GUIDTaskUnregisterAvatarTest.scala | 4 +- .../GUIDTaskUnregisterPlayerTest.scala | 4 +- .../terminal/ImplantTerminalMechTest.scala | 10 +- .../objects/terminal/MatrixTerminalTest.scala | 2 +- .../objects/terminal/OrderTerminalTest.scala | 2 +- .../objects/terminal/ProximityTest.scala | 26 +- .../terminal/TerminalControlTest.scala | 2 +- 55 files changed, 481 insertions(+), 455 deletions(-) delete mode 100644 src/main/scala/net/psforever/types/CharacterGender.scala create mode 100644 src/main/scala/net/psforever/types/CharacterSex.scala diff --git a/config/logback.xml b/config/logback.xml index 6b4d7411..65059390 100644 --- a/config/logback.xml +++ b/config/logback.xml @@ -77,11 +77,11 @@ ACCEPT DENY - + diff --git a/server/src/test/scala/PacketCodingActorTest.scala b/server/src/test/scala/PacketCodingActorTest.scala index 724b1463..7450451a 100644 --- a/server/src/test/scala/PacketCodingActorTest.scala +++ b/server/src/test/scala/PacketCodingActorTest.scala @@ -485,7 +485,7 @@ class PacketCodingActorITest extends ActorTest { BasicCharacterData( "IlllIIIlllIlIllIlllIllI", PlanetSideEmpire.VS, - CharacterGender.Female, + CharacterSex.Female, 41, CharacterVoice.Voice1 ), @@ -600,7 +600,7 @@ class PacketCodingActorKTest extends ActorTest { BasicCharacterData( "IlllIIIlllIlIllIlllIllI", PlanetSideEmpire.VS, - CharacterGender.Female, + CharacterSex.Female, 41, CharacterVoice.Voice1 ), diff --git a/server/src/test/scala/actor/objects/AutoRepairIntegrationTest.scala b/server/src/test/scala/actor/objects/AutoRepairIntegrationTest.scala index 24b3c144..cc3ea960 100644 --- a/server/src/test/scala/actor/objects/AutoRepairIntegrationTest.scala +++ b/server/src/test/scala/actor/objects/AutoRepairIntegrationTest.scala @@ -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) 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() val weapon = new Tool(GlobalDefinitions.suppressor) val terminal = new Terminal(AutoRepairIntegrationTest.terminal_definition) @@ -164,7 +164,7 @@ class AutoRepairFacilityIntegrationAntGiveNtuTest extends FreedContextActorTest expectNoMessage(1000 milliseconds) var buildingMap = new TrieMap[Int, Building]() 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 terminal = new Terminal(AutoRepairIntegrationTest.slow_terminal_definition) val silo = new ResourceSilo() @@ -255,7 +255,7 @@ class AutoRepairFacilityIntegrationTerminalDestroyedTerminalAntTest extends Free expectNoMessage(1000 milliseconds) var buildingMap = new TrieMap[Int, Building]() 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 ant = Vehicle(GlobalDefinitions.ant) val terminal = new Terminal(AutoRepairIntegrationTest.slow_terminal_definition) @@ -357,7 +357,7 @@ class AutoRepairFacilityIntegrationTerminalIncompleteRepairTest extends FreedCon expectNoMessage(1000 milliseconds) var buildingMap = new TrieMap[Int, Building]() 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 ant = Vehicle(GlobalDefinitions.ant) 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) 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() val weapon = new Tool(GlobalDefinitions.suppressor) val terminal = new Terminal(AutoRepairIntegrationTest.terminal_definition) diff --git a/server/src/test/scala/actor/objects/AutoRepairTest.scala b/server/src/test/scala/actor/objects/AutoRepairTest.scala index 3e9b3246..ef61ecbf 100644 --- a/server/src/test/scala/actor/objects/AutoRepairTest.scala +++ b/server/src/test/scala/actor/objects/AutoRepairTest.scala @@ -20,13 +20,13 @@ import net.psforever.objects.vital.projectile.ProjectileReason import net.psforever.objects.zones.{Zone, ZoneMap} import net.psforever.objects.{GlobalDefinitions, Player, Tool} 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._ class AutoRepairRequestNtuTest extends FreedContextActorTest { 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() val weapon = new Tool(GlobalDefinitions.suppressor) val terminal = new Terminal(AutoRepairTest.terminal_definition) @@ -87,7 +87,7 @@ class AutoRepairRequestNtuTest extends FreedContextActorTest { class AutoRepairRequestNtuRepeatTest extends FreedContextActorTest { 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() val weapon = new Tool(GlobalDefinitions.suppressor) val terminal = new Terminal(AutoRepairTest.terminal_definition) @@ -151,7 +151,7 @@ class AutoRepairRequestNtuRepeatTest extends FreedContextActorTest { class AutoRepairNoRequestNtuTest extends FreedContextActorTest { 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() val weapon = new Tool(GlobalDefinitions.suppressor) val terminal = new Terminal(AutoRepairTest.terminal_definition) @@ -209,7 +209,7 @@ class AutoRepairNoRequestNtuTest extends FreedContextActorTest { class AutoRepairRestoreRequestNtuTest extends FreedContextActorTest { 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() val weapon = new Tool(GlobalDefinitions.suppressor) val terminal = new Terminal(AutoRepairTest.terminal_definition) @@ -274,7 +274,7 @@ class AutoRepairRestoreRequestNtuTest extends FreedContextActorTest { class AutoRepairRepairWithNtuTest extends FreedContextActorTest { 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() val weapon = new Tool(GlobalDefinitions.suppressor) val terminal = new Terminal(AutoRepairTest.terminal_definition) @@ -336,7 +336,7 @@ class AutoRepairRepairWithNtuTest extends FreedContextActorTest { class AutoRepairRepairWithNtuUntilDoneTest extends FreedContextActorTest { 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() val weapon = new Tool(GlobalDefinitions.suppressor) val terminal = new Terminal(AutoRepairTest.terminal_definition) diff --git a/server/src/test/scala/actor/objects/VehicleSpawnPadTest.scala b/server/src/test/scala/actor/objects/VehicleSpawnPadTest.scala index 79a2fa0a..81b3f0a2 100644 --- a/server/src/test/scala/actor/objects/VehicleSpawnPadTest.scala +++ b/server/src/test/scala/actor/objects/VehicleSpawnPadTest.scala @@ -58,7 +58,7 @@ class VehicleSpawnControl3Test extends ActorTest { val (vehicle, player, pad, zone) = VehicleSpawnPadControlTest.SetUpAgents(PlanetSideEmpire.TR) //we can recycle the vehicle and the player for each order 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.Continent = zone.id player2.Spawn() @@ -216,7 +216,7 @@ object VehicleSpawnPadControlTest { import net.psforever.objects.serverobject.structures.Building import net.psforever.objects.vehicles.VehicleControl import net.psforever.objects.Tool - import net.psforever.types.CharacterGender + import net.psforever.types.CharacterSex val vehicle = Vehicle(GlobalDefinitions.two_man_assault_buggy) val weapon = vehicle.WeaponControlledFromSeat(1).get.asInstanceOf[Tool] @@ -245,7 +245,7 @@ object VehicleSpawnPadControlTest { pad.Owner.Faction = faction pad.Zone = zone 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") player.Zone = zone player.Spawn() diff --git a/server/src/test/scala/actor/service/AvatarServiceTest.scala b/server/src/test/scala/actor/service/AvatarServiceTest.scala index 0c05c783..ec324027 100644 --- a/server/src/test/scala/actor/service/AvatarServiceTest.scala +++ b/server/src/test/scala/actor/service/AvatarServiceTest.scala @@ -181,7 +181,7 @@ class DroptItemTest 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.Slot(5).Equipment.get.GUID = PlanetSideGUID(11) val c1data = obj.Definition.Packet.DetailedConstructorData(obj).get @@ -335,7 +335,7 @@ class PlayerStateTest 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) tool.GUID = PlanetSideGUID(40) @@ -512,7 +512,7 @@ class AvatarReleaseTest extends FreedContextActorTest { GUID(guid) } 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.Slot(5).Equipment.get) obj.Zone = zone @@ -563,7 +563,7 @@ class AvatarReleaseEarly1Test extends FreedContextActorTest { GUID(guid) } 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.Slot(5).Equipment.get) obj.Zone = zone @@ -615,13 +615,13 @@ class AvatarReleaseEarly2Test extends FreedContextActorTest { GUID(guid) } 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.Slot(5).Equipment.get) obj.Zone = zone obj.Release 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 objAlt.GUID = PlanetSideGUID(3) objAlt.Slot(5).Equipment.get.GUID = PlanetSideGUID(4) diff --git a/src/main/scala/net/psforever/actors/session/AvatarActor.scala b/src/main/scala/net/psforever/actors/session/AvatarActor.scala index d72fae5d..460efe18 100644 --- a/src/main/scala/net/psforever/actors/session/AvatarActor.scala +++ b/src/main/scala/net/psforever/actors/session/AvatarActor.scala @@ -47,7 +47,7 @@ import net.psforever.packet.game.{ PlanetsideAttributeMessage } import net.psforever.types.{ - CharacterGender, + CharacterSex, CharacterVoice, ExoSuitType, ImplantType, @@ -98,7 +98,7 @@ object AvatarActor { name: String, head: Int, voice: CharacterVoice.Value, - gender: CharacterGender.Value, + gender: CharacterSex, empire: PlanetSideEmpire.Value ) extends Command @@ -1275,7 +1275,7 @@ class AvatarActor( .run(query[persistence.Loadout].filter(_.avatarId == lift(avatar.id))) .map { loadouts => 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) loadout.items.split("/").foreach { diff --git a/src/main/scala/net/psforever/actors/session/SessionActor.scala b/src/main/scala/net/psforever/actors/session/SessionActor.scala index ffaea457..a414e69b 100644 --- a/src/main/scala/net/psforever/actors/session/SessionActor.scala +++ b/src/main/scala/net/psforever/actors/session/SessionActor.scala @@ -349,7 +349,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con out case None => //delete stale entity reference from client - log.warn(s"${player.Name} has an invalid reference to GUID ${id.get} in zone ${continent.id}") + log.warn(s"ValidObject - ${player.Name} has an invalid GUID ${id.get.guid}, believing it in ${player.Sex.possessive} locker") sendResponse(ObjectDeleteMessage(id.get, 0)) None } @@ -359,7 +359,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con case None if id.nonEmpty && id.get != PlanetSideGUID(0) => //delete stale entity reference from client - log.warn(s"${player.Name} has an invalid reference to GUID ${id.get} in zone ${continent.id}") + log.warn(s"${player.Name} has an invalid reference to GUID ${id.get.guid} in zone ${continent.id}") sendResponse(ObjectDeleteMessage(id.get, 0)) None @@ -556,7 +556,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con vehicle.Seats(index).mount(player) Some(vehicle) case Some((name, index)) => - log.warn(s"TransferPassenger: mount $index is already occupied") + log.warn(s"TransferPassenger: $player tried to mount seat $index when it was already occupied, and was rebuked") None case None => None @@ -943,7 +943,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con log.warn(s"${tplayer.Name} can not spawn in zone ${zone.id}; why?") case Zone.Population.PlayerAlreadySpawned(zone, tplayer) => - log.warn(s"${tplayer.Name} is already spawned on zone ${zone.id}; a clerical error?") + log.warn(s"${tplayer.Name} is already spawned on zone ${zone.id}; is this a clerical error?") case ICS.SpawnPointResponse(response) => zoningType match { @@ -955,8 +955,9 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con cluster ! ICS.GetInstantActionSpawnPoint(player.Faction, context.self) }) - case zoningType => - val currentZoningType = zoningType + case _ => + log.warn(s"SpawnPointResponse: ${player.Name}'s zoning was not in order at the time a response was received; attempting to guess what ${player.Sex.pronounSubject} wants to do") + val previousZoningType = zoningType CancelZoningProcess() PlayerActionsToCancel() CancelAllProximityUnits() @@ -970,14 +971,14 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con player } val (pos, ori) = spawnPoint.SpecificPoint(obj) - if (zoningType == Zoning.Method.InstantAction) - LoadZonePhysicalSpawnPoint(zone.id, pos, ori, 0 seconds) + if (previousZoningType == Zoning.Method.InstantAction) + LoadZonePhysicalSpawnPoint(zone.id, pos, ori, respawnTime = 0 seconds) else LoadZonePhysicalSpawnPoint(zone.id, pos, ori, CountSpawnDelay(zone.id, spawnPoint, continent.id)) case None => - log.error("got None spawn point response from InterstellarClusterService") - Thread.sleep(1000) // throttle in case of infinite loop - RequestSanctuaryZoneSpawn(player, 0) + log.warn(s"SpawnPointResponse: ${player.Name} received no spawn point response when asking InterstellarClusterService; sending home") + //Thread.sleep(1000) // throttle in case of infinite loop + RequestSanctuaryZoneSpawn(player, currentZone = 0) } } @@ -990,12 +991,12 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con case msg @ Zone.Vehicle.HasSpawned(zone, vehicle) => ; case msg @ Zone.Vehicle.CanNotSpawn(zone, vehicle, reason) => - log.warn(s"$msg") + log.warn(s"${player.Name}'s ${vehicle.Definition.Name} can not spawn in ${zone.id} because $reason") case msg @ Zone.Vehicle.HasDespawned(zone, vehicle) => ; case msg @ Zone.Vehicle.CanNotDespawn(zone, vehicle, reason) => - log.warn(s"$msg") + log.warn(s"${player.Name}'s ${vehicle.Definition.Name} can not deconstruct in ${zone.id} because $reason") case Zone.Deployable.DeployableIsBuilt(obj, tool) => val index = player.Find(tool) match { @@ -1019,7 +1020,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con case GlobalDefinitions.router_telepad => ; case _ => log.warn( - s"Zone.Deployable.DeployableIsBuilt: not sure what kind of construction item to animate - ${tool.Definition}" + s"Zone.Deployable.DeployableIsBuilt: not sure what kind of construction item to animate - ${tool.Definition.Name}" ) } import scala.concurrent.ExecutionContext.Implicits.global @@ -1116,9 +1117,9 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con sendResponse(GenericObjectActionMessage(guid, 21)) //reset build cooldown sendResponse(ObjectDeployedMessage.Failure(definition.Name)) log.warn( - s"FinalizeDeployable: deployable ${definition.asInstanceOf[BaseDeployableDefinition].Item}@$guid not handled by specific case" + s"FinalizeDeployable: deployable ${definition.Item}@$guid not handled by specific case" ) - log.warn(s"FinalizeDeployable: deployable will be cleaned up, but may not get unregistered properly") + log.warn(s"FinalizeDeployable: deployable ${definition.Item}@$guid will be cleaned up, but may not get unregistered properly") TryDropFDU(tool, index, obj.Position) obj.Position = Vector3.Zero continent.Deployables ! Zone.Deployable.Dismiss(obj) @@ -1194,7 +1195,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con case Zone.Nowhere => RequestSanctuaryZoneSpawn(player, currentZone = 0) case zone => - log.info(s"Zone ${zone.id} will now load for ${player.Name}") + log.trace(s"zone ${zone.id} will now load for ${player.Name}") loadConfZone = true val oldZone = continent session = session.copy(zone = zone) @@ -1218,7 +1219,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con } case ICS.ZoneResponse(zone) => - log.info(s"Zone ${zone.get.id} will now load for ${player.Name}") + log.trace(s"Zone ${zone.get.id} will now load for ${player.Name}") loadConfZone = true val oldZone = session.zone session = session.copy(zone = zone.get) @@ -1239,7 +1240,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con case NewPlayerLoaded(tplayer) => //new zone - log.info(s"Player ${tplayer.Name} has been loaded") + log.info(s"Player ${tplayer.Name} has spawned into ${tplayer.Zone.id}") tplayer.avatar = avatar session = session.copy(player = tplayer) avatarActor ! AvatarActor.CreateImplants() @@ -1296,7 +1297,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con } /** - * The user is either already in the current zone and merely transporting himself from one location to another, + * The user is either already in the current zone and merely transporting from one location to another, * also called "dying", or occasionally "deconstructing," * or is completely switching in between zones. * These correspond to the message `NewPlayerLoaded` for the case of "dying" or the latter zone switching case, @@ -1318,21 +1319,21 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con val waitingOnUpstream = upstreamMessageCount == 0 if (attempt >= max_attempts && waitingOnUpstream) { log.warn( - s"SetCurrentAvatar-max attempt failure: " + + s"SetCurrentAvatar/${player.Name}: max attempt failure: " + s"zone=${if (zoneLoaded.contains(true)) "loaded" else if (zoneLoaded.contains(false)) "failed" - else "unloaded"}," + - s"guid=${tplayer.HasGUID}, control=${(tplayer.Actor != Default.Actor)}, avatar=$waitingOnUpstream" + else "unloaded"}, " + + s"guid=${tplayer.HasGUID}, control=${tplayer.Actor != Default.Actor}, no upstream messaging" ) zoneLoaded match { case None | Some(false) => log.warn( - "SetCurrentAvatar-max attempt failure: failed to load intended destination zone; routing to faction sanctuary" + s"SetCurrentAvatar/${player.Name}: max attempt failure: failed to load intended destination zone; routing to faction sanctuary" ) RequestSanctuaryZoneSpawn(tplayer, continent.Number) case _ => log.warn( - "SetCurrentAvatar-max attempt failure: the zone loaded but elements remain unready; restarting the process ..." + s"SetCurrentAvatar/${player.Name}: max attempt failure: the zone loaded but elements remain unready; restarting the process ..." ) val pos = shiftPosition.getOrElse(player.Position) val orient = shiftOrientation.getOrElse(player.Orientation) @@ -1382,7 +1383,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con } case Vitality.DamageResolution(target: PlanetSideGameObject, _) => - log.warn(s"Vital target ${target.Definition.Name} damage resolution not supported using this method") + log.warn(s"DamageResolution: vital target ${target.Definition.Name} damage resolution not supported") case ResponseToSelf(pkt) => sendResponse(pkt) @@ -1499,12 +1500,12 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con case _ => //fall back to sanctuary/prior? - log.error(s"LoginInfo: player $playerName could not be found in game world") + log.info(s"LoginInfo: player $playerName could not be found in game world") self.forward(PlayerToken.LoginInfo(playerName, Zone.Nowhere, pos)) } case PlayerToken.CanNotLogin(playerName, reason) => - log.warn(s"LoginInfo: player $playerName is denied login for reason: $reason") + log.warn(s"LoginInfo: $playerName is denied login for reason - $reason") reason match { case PlayerToken.DeniedLoginReason.Kicked => KickedByAdministration() case _ => sendResponse(DisconnectMessage("You will be logged out.")) @@ -1693,7 +1694,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con else PlanetSideGUID(0) reply match { case AvatarResponse.TeardownConnection() => - log.info("ending session by event system request (relog)") + log.trace(s"ending ${player.Name}'s old session by event system request (relog)") context.stop(self) case AvatarResponse.SendResponse(msg) => @@ -1984,12 +1985,11 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con // Check that the magazine is still empty before sending WeaponDryFireMessage // As it could have been reloaded since the packet was dispatched, which would make other clients not see it firing continent.GUID(weapon_guid) match { - case Some(tool: Tool) => { + case Some(tool: Tool) => if (tool.Magazine == 0) { sendResponse(WeaponDryFireMessage(weapon_guid)) } - } - case _ => log.warn(s"Tried to send WeaponDryFire but GUID ${weapon_guid} does not seem to be a Tool") + case _ => ; } } @@ -2385,7 +2385,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con case Mountable.CanMount(obj: Vehicle, seat_number, _) => CancelZoningProcessWithDescriptiveReason("cancel_mount") val obj_guid: PlanetSideGUID = obj.GUID - log.info(s"MountVehicleMsg: ${player.Name} mounts ${obj.Definition.Name} in seat $seat_number") + log.info(s"${player.Name} mounts ${obj.Definition.Name} in seat $seat_number") CancelAllProximityUnits() sendResponse(PlanetsideAttributeMessage(obj_guid, 0, obj.Health)) sendResponse(PlanetsideAttributeMessage(obj_guid, 68, obj.Shields)) //shield health @@ -2436,7 +2436,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con keepAliveFunc = KeepAlivePersistence case Mountable.CanMount(obj: Mountable, _, _) => - log.warn(s"MountVehicleMsg: $obj is some generic mountable object and nothing will happen") + log.warn(s"MountVehicleMsg: $obj is some mountable object and nothing will happen for ${player.Name}") case Mountable.CanDismount(obj: ImplantTerminalMech, seat_num, _) => DismountAction(tplayer, obj, seat_num) @@ -2505,7 +2505,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con DismountAction(tplayer, obj, seat_num) case Mountable.CanDismount(obj: Mountable, _, _) => - log.warn(s"DismountVehicleMsg: $obj is some generic mountable object and nothing will happen") + log.warn(s"DismountVehicleMsg: $obj is some dismountable object but nothing will happen for ${player.Name}") case Mountable.CanNotMount(obj: Vehicle, mount_point) => log.warn(s"MountVehicleMsg: ${tplayer.Name} attempted to mount $obj's mount $mount_point, but was not allowed") @@ -2597,7 +2597,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con slot.Equipment = entry.obj case None => log.warn( - s"applying default loadout to $vehicle on spawn, but can not find a mounted weapon @ ${entry.start}" + s"BuyVehicle: ${player.Name} tries to apply default loadout to $vehicle on spawn, but can not find a mounted weapon for ${entry.start}" ) } }) @@ -2620,11 +2620,11 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con case Terminal.NoDeal() => val order: String = if (msg == null) { - s"order $msg" - } else { "missing order" + } else { + s"${msg.transaction_type} order" } - log.warn(s"${tplayer.Name} made a request but the terminal rejected the $order") + log.warn(s"NoDeal: ${tplayer.Name} made a request but the terminal rejected the $order") sendResponse(ItemTransactionResultMessage(msg.terminal_guid, msg.transaction_type, false)) lastTerminalOrderFulfillment = true @@ -3254,8 +3254,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con def handleGamePkt(pkt: PlanetSideGamePacket) = pkt match { case ConnectToWorldRequestMessage(server, token, majorVersion, minorVersion, revision, buildDate, unk) => - val clientVersion = s"Client Version: $majorVersion.$minorVersion.$revision, $buildDate" - log.info(s"New world login to $server with Token:$token. $clientVersion") + log.trace(s"ConnectToWorldRequestMessage: client with versioning $majorVersion.$minorVersion.$revision, $buildDate has sent token $token to the server") sendResponse(ChatMsg(ChatMessageType.CMT_CULLWATERMARK, false, "", "", None)) import scala.concurrent.ExecutionContext.Implicits.global clientKeepAlive.cancel() @@ -3272,12 +3271,12 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con cargo.Actor ! CargoBehavior.CheckCargoMounting(carrier_guid, mountPoint, 0) case _ => log.warn( - s"MountVehicleCargoMsg: target carrier vehicle (${carrier.Definition.Name}) does not have a cargo hold" + s"MountVehicleCargoMsg: ${player.Name} trying to load cargo into a ${carrier.Definition.Name} which oes not have a cargo hold" ) } case (None, _) | (Some(_), None) => log.warn( - s"MountVehicleCargoMsg: one or more of the target vehicles do not exist - $carrier_guid or $cargo_guid" + s"MountVehicleCargoMsg: ${player.Name} lost a vehicle while working with cargo - either $carrier_guid or $cargo_guid" ) case _ => ; } @@ -3464,11 +3463,10 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con _.GUID != vehicle.GUID } case Some(_) => - //vehicle, but we're not seated in it + log.warn(s"BeginZoningMessage: ${player.Name} thought ${player.Sex.pronounSubject} was sitting in a vehicle, but it just evaporated around ${player.Sex.pronounObject}") player.VehicleSeated = None (b, List.empty[Vehicle]) case None => - //throw error since VehicleSeated didn't point to a vehicle? player.VehicleSeated = None (b, List.empty[Vehicle]) } @@ -3791,16 +3789,15 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con ) } else { log.warn( - s"ChildObjectState: ${player.Name} is using a different controllable agent than #${object_guid.guid}" + s"ChildObjectState: ${player.Name} is using a different controllable agent than entity ${object_guid.guid}" ) } case (Some(obj), None) => log.warn( - s"ChildObjectState: ${player.Name} can not find any controllable agent, let alone #${object_guid.guid}" + s"ChildObjectState: ${player.Name} can not find any controllable agent, let alone entity ${object_guid.guid}" ) case (None, _) => ; //TODO status condition of "playing getting out of vehicle to allow for late packets without warning - //log.warn(s"ChildObjectState: player ${player.Name} not related to anything with a controllable agent") } if (player.death_by == -1) { KickedByAdministration() @@ -3873,7 +3870,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con //TODO placing a "not driving" warning here may trigger as we are disembarking the vehicle case (_, Some(index)) => log.error( - s"VehicleState: player should not be dispatching this kind of packet from vehicle#$vehicle_guid when not the driver ($index)" + s"VehicleState: ${player.Name} should not be dispatching this kind of packet from vehicle ${vehicle_guid.guid} when not the driver (actually, seat $index)" ) case _ => ; } @@ -3882,7 +3879,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con } case msg @ VehicleSubStateMessage(vehicle_guid, player_guid, vehicle_pos, vehicle_ang, vel, unk1, unk2) => - //log.info(s"VehicleSubState: $vehicle_guid, ${player.Name}_guid, $vehicle_pos, $vehicle_ang, $vel, $unk1, $unk2") + log.debug(s"VehicleSubState: $vehicle_guid, ${player.Name}_guid, $vehicle_pos, $vehicle_ang, $vel, $unk1, $unk2") case msg @ ProjectileStateMessage(projectile_guid, shot_pos, shot_vel, shot_orient, seq, end, target_guid) => val index = projectile_guid.guid - Projectile.baseUID @@ -3912,13 +3909,13 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con } case msg @ ReleaseAvatarRequestMessage() => - log.info(s"ReleaseAvatarRequest: ${player.Name} on ${continent.id} has released") + log.info(s"${player.Name} on ${continent.id} has released") reviveTimer.cancel() GoToDeploymentMap() HandleReleaseAvatar(player, continent) case msg @ SpawnRequestMessage(u1, spawnGroup, u3, u4, zoneNumber) => - log.info(s"SpawnRequestMessage: ${player.Name} on ${continent.id} wants to respawn in $zoneNumber") + log.info(s"${player.Name} on ${continent.id} wants to respawn in zone #$zoneNumber") if (deadState != DeadState.RespawnTime) { deadState = DeadState.RespawnTime cluster ! ICS.GetNearbySpawnPoint( @@ -3933,20 +3930,22 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con context.self ) } else { - log.warn("SpawnRequestMessage: request consumed; already respawning ...") + log.warn(s"SpawnRequestMessage: request consumed because ${player.Name} is already respawning ...") } - case msg @ SetChatFilterMessage(send_channel, origin, whitelist) => - //log.info("SetChatFilters: " + msg) + case _ : SetChatFilterMessage => //msg @ SetChatFilterMessage(send_channel, origin, whitelist) => ; - case msg: ChatMsg => + case msg : ChatMsg => chatActor ! ChatActor.Message(msg) - case msg @ VoiceHostRequest(unk, PlanetSideGUID(player_guid), data) => - log.trace("Player " + player_guid + " requested in-game voice chat.") + case _ : VoiceHostRequest => + log.trace(s"${player.Name} requested in-game voice chat.") sendResponse(VoiceHostKill()) + sendResponse( + ChatMsg(ChatMessageType.CMT_OPEN, false, "", "Try our Discord at https://discord.gg/0nRe5TNbTYoUruA4", None) + ) - case msg @ VoiceHostInfo(player_guid, data) => + case _ : VoiceHostInfo => sendResponse(VoiceHostKill()) case msg @ ChangeAmmoMessage(item_guid, unk1) => @@ -3956,9 +3955,9 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con case (Some(obj), Some(tool: Tool)) => PerformToolAmmoChange(tool, obj) case (_, Some(obj)) => - log.error(s"ChangeAmmo: the ${obj.Definition.Name} in ${player.Name}'s hands does not contain ammunition") + log.warn(s"ChangeAmmo: the ${obj.Definition.Name} in ${player.Name}'s hands does not contain ammunition") case (_, None) => - log.error(s"ChangeAmmo: can not find $item_guid") + log.warn(s"ChangeAmmo: can not find $item_guid") } case msg @ ChangeFireModeMessage(item_guid, fire_mode) => @@ -3977,7 +3976,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con obj.FireModeIndex = originalModeIndex sendResponse(ChangeFireModeMessage(tool_guid, originalModeIndex)) //reinforcement } else { - log.info(s"ChangeFireMode: ${player.Name} is changing his ${obj.Definition.Name} to fire mode $modeIndex") + log.info(s"${player.Name} is changing his ${obj.Definition.Name} to fire mode #$modeIndex") sendResponse(ChangeFireModeMessage(tool_guid, modeIndex)) continent.AvatarEvents ! AvatarServiceMessage( continent.id, @@ -3985,9 +3984,9 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con ) } case Some(_) => - log.error(s"ChangeFireMode: the object that was found for $item_guid does not possess fire modes") + log.warn(s"ChangeFireMode: the object that was found for $item_guid does not possess fire modes") case None => - log.error(s"ChangeFireMode: can not find $item_guid") + log.warn(s"ChangeFireMode: can not find $item_guid") } case msg @ ChangeFireStateMessage_Start(item_guid) => @@ -4018,7 +4017,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con } } else { log.warn( - s"ChangeFireState_Start: ${player.Name}'s ${tool.Definition.Name} magazine was empty before trying to shoot!" + s"ChangeFireState_Start: ${player.Name}'s ${tool.Definition.Name} magazine was empty before trying to shoot" ) EmptyMagazine(item_guid, tool) } @@ -4031,7 +4030,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con AvatarAction.ChangeFireState_Start(player.GUID, item_guid) ) case None => - log.error(s"ChangeFireState_Start: can not find $item_guid") + log.warn(s"ChangeFireState_Start: can not find $item_guid") } } @@ -4072,7 +4071,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con ) Some(tool) case _ => - log.warn(s"ChangeFireState_Stop: received an unexpected message about $item_guid") + log.warn(s"ChangeFireState_Stop: ${player.Name} never started firing item ${item_guid.guid} in the first place?") None } } @@ -4126,7 +4125,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con log.warn(s"DropItem: ${player.Name} wanted to drop a $obj, but that isn't possible") case None => sendResponse(ObjectDeleteMessage(item_guid, 0)) //this is fine; item doesn't exist to the server anyway - log.warn(s"DropItem: ${player.Name} wanted to drop an item ($item_guid), but it was nowhere to be found") + log.warn(s"DropItem: ${player.Name} wanted to drop an item ${item_guid.guid}, but it was nowhere to be found") } case msg @ PickupItemMessage(item_guid, player_guid, unk1, unk2) => @@ -4141,29 +4140,25 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con } case _ => log.warn( - s"PickupItem: ${player.Name} requested an item that doesn't seem to exist" + s"PickupItem: ${player.Name} requested an item ${item_guid.guid} that doesn't seem to exist" ) - sendResponse(ObjectDeleteMessage(item_guid, 0)) } case msg @ ReloadMessage(item_guid, ammo_clip, unk1) => FindContainedWeapon match { - case (Some(obj), Some(tool: Tool)) => + case (Some(obj: PlanetSideServerObject with Container), Some(tool: Tool)) => val currentMagazine: Int = tool.Magazine val magazineSize: Int = tool.MaxMagazine val reloadValue: Int = magazineSize - currentMagazine if (magazineSize > 0 && reloadValue > 0) { FindEquipmentStock(obj, FindAmmoBoxThatUses(tool.AmmoType), reloadValue, CountAmmunition).reverse match { - case Nil => - log.warn(s"ReloadMessage: no ammunition could be found for $item_guid") + case Nil => ; case x :: xs => val (deleteFunc, modifyFunc): (Equipment => Future[Any], (AmmoBox, Int) => Unit) = obj match { case veh: Vehicle => (RemoveOldEquipmentFromInventory(veh), ModifyAmmunitionInVehicle(veh)) - case o: PlanetSideServerObject with Container => - (RemoveOldEquipmentFromInventory(o), ModifyAmmunition(o)) case _ => - throw new Exception("ReloadMessage: should be a server object, not a regular game object") + (RemoveOldEquipmentFromInventory(obj), ModifyAmmunition(obj)) } xs.foreach { item => deleteFunc(item.obj) } val box = x.obj.asInstanceOf[AmmoBox] @@ -4180,7 +4175,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con modifyFunc(box, reloadValue - tailReloadValue) reloadValue }) + currentMagazine - log.info(s"ReloadMessage: ${player.Name} successfully reloaded $actualReloadValue ${tool.AmmoType} into $tool") + log.info(s"${player.Name} successfully reloaded $actualReloadValue ${tool.AmmoType} into $tool") tool.Magazine = actualReloadValue sendResponse(ReloadMessage(item_guid, actualReloadValue, unk1)) continent.AvatarEvents ! AvatarServiceMessage( @@ -4189,12 +4184,12 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con ) } } else { - log.warn(s"ReloadMessage: the $tool in ${player.Name}'s hand can not reload (full=$magazineSize, want=$reloadValue)") + log.warn(s"ReloadMessage: the ${tool.Definition.Name} under ${player.Name}'s control can not reload (full=$magazineSize, want=$reloadValue)") } case (_, Some(_)) => - log.error(s"ReloadMessage: the object that was found for $item_guid was not a Tool") + log.warn(s"ReloadMessage: the object that was found for $item_guid was not a Tool") case (_, None) => - log.error(s"ReloadMessage: can not find $item_guid") + log.warn(s"ReloadMessage: can not find $item_guid") } case msg @ ObjectHeldMessage(avatar_guid, held_holsters, unk1) => @@ -4214,7 +4209,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con if (held_holsters >= 0 && held_holsters < 5) { player.Holsters()(held_holsters).Equipment match { case Some(unholsteredItem: Equipment) => - log.info(s"ObjectHeld: ${player.Name} has drawn a $unholsteredItem from its holster") + log.info(s"${player.Name} has drawn a $unholsteredItem from its holster") if (unholsteredItem.Definition == GlobalDefinitions.remote_electronics_kit) { // Player has unholstered a REK - we need to set an atttribute on the REK itself to change the beam/icon colour to the correct one for the player's hack level continent.AvatarEvents ! AvatarServiceMessage( @@ -4434,11 +4429,11 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con ) } case (Some(obj), _) => - log.warn(s"LootItem: item $obj is (probably) not lootable to ${player.Name}") + log.error(s"LootItem: item $obj is (probably) not lootable to ${player.Name}") case (None, _) => - log.warn(s"LootItem: ${player.Name} can not find $item_guid") + log.error(s"LootItem: ${player.Name} can not find $item_guid") case (_, None) => - log.warn(s"LootItem: ${player.Name} can not find where to put $item_guid") + log.error(s"LootItem: ${player.Name} can not find where to put $item_guid") } case msg @ AvatarImplantMessage(player_guid, action, slot, status) => @@ -4452,7 +4447,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con avatarActor ! AvatarActor.DeactivateImplant(implant.definition.implantType) } case Some(implant) if !implant.initialized => () - case _ => log.error(s"AvatarImplantMessage: ${player.Name} has an unknown implant in $slot") + case _ => log.error(s"AvatarImplantMessage: ${player.Name} has an unknown implant in $slot") } } @@ -4494,7 +4489,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con CancelZoningProcessWithDescriptiveReason("cancel_use") if (obj.isBackpack) { if (equipment.isEmpty) { - log.info(s"UseItem: ${player.Name} is looting the corpse of ${obj.Name}") + log.info(s"${player.Name} is looting the corpse of ${obj.Name}") sendResponse( UseItemMessage( avatar_guid, @@ -4638,7 +4633,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con case Some(item) => log.warn(s"UseItem: ${player.Name} looking for Kit to use, but found $item instead") case None => - log.warn(s"UseItem: anticipated a Kit $item_used_guid for ${player.Name}, but can't find it") + log.error(s"UseItem: anticipated a Kit $item_used_guid for ${player.Name}, but can't find it") } } else if (itemType == ObjectClass.avatar && unk3) { equipment match { @@ -4656,8 +4651,8 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con case Some(item) => CancelZoningProcessWithDescriptiveReason("cancel_use") locker.Actor ! CommonMessages.Use(player, Some(item)) - case None if locker.Faction == player.Faction || !locker.HackedBy.isEmpty => - log.info(s"UseItem: ${player.Name} is accessing a locker") + case None if locker.Faction == player.Faction || locker.HackedBy.nonEmpty => + log.info(s"${player.Name} is accessing a locker") CancelZoningProcessWithDescriptiveReason("cancel_use") val playerLocker = player.avatar.locker sendResponse( @@ -4936,7 +4931,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con case Some(obj) => ; log.warn(s"ProximityTerminalUse: $obj does not have proximity effects for ${player.Name}") case None => - log.warn(s"ProximityTerminalUse: ${player.Name} can not find an oject with guid $object_guid") + log.error(s"ProximityTerminalUse: ${player.Name} can not find an oject with guid $object_guid") } case msg @ UnuseItemMessage(player_guid, object_guid) => @@ -4967,7 +4962,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con case turret => turret } - log.info(s"DeployObject: ${player.Name} is constructing a $ammoType deployable") + log.info(s"${player.Name} is constructing a $ammoType deployable") CancelZoningProcessWithDescriptiveReason("cancel_use") val dObj: PlanetSideGameObject with Deployable = Deployables.Make(ammoType)() dObj.Position = pos @@ -4983,9 +4978,9 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con continent.tasks ! CallBackForTask(tasking, continent.Deployables, Zone.Deployable.Build(dObj, obj)) case Some(obj) => - log.warn(s"DeployObject: What is $obj, ${player.Name}? It's not a construction tool!") + log.warn(s"DeployObject: what is $obj, ${player.Name}? It's not a construction tool!") case None => - log.warn(s"DeployObject: nothing, ${player.Name}? It's not a construction tool!") + log.error(s"DeployObject: nothing, ${player.Name}? It's not a construction tool!") } case msg @ GenericObjectActionMessage(object_guid, code) => @@ -4999,13 +4994,12 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con } case msg @ GenericObjectStateMsg(object_guid, unk1) => - log.info("GenericObjectState: " + msg) + log.debug("GenericObjectState: " + msg) case msg @ GenericActionMessage(action) => - log.info(s"GenericAction: $msg") if (player == null) { if (action == 29) { - log.info("AFK state reported during login") + log.debug("GenericObjectState: AFK state reported during login") } } else { val (toolOpt, definition) = player.Slot(0).Equipment match { @@ -5022,7 +5016,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con player.AwayFromKeyboard = false } if (action == 15) { //max deployment - log.info(s"GenericObject: ${player.Name} is anchored") + log.info(s"${player.Name} has anchored ${player.Sex.pronounObject}self to the ground") player.UsingSpecial = SpecialExoSuitDefinition.Mode.Anchored continent.AvatarEvents ! AvatarServiceMessage( continent.id, @@ -5040,10 +5034,10 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con tool.ToFireMode = convertFireModeIndex sendResponse(ChangeFireModeMessage(tool.GUID, convertFireModeIndex)) case _ => - log.warn(s"GenericObject: ${player.Name} is a MAX with an unexpected weapon - ${definition.Name}") + log.warn(s"GenericObject: ${player.Name} is a MAX with an unexpected attachment - ${definition.Name}") } } else if (action == 16) { //max deployment - log.info(s"GenericObject: ${player.Name} has released the anchors") + log.info(s"${player.Name} has released the anchors") player.UsingSpecial = SpecialExoSuitDefinition.Mode.Normal continent.AvatarEvents ! AvatarServiceMessage( continent.id, @@ -5061,23 +5055,23 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con tool.ToFireMode = convertFireModeIndex sendResponse(ChangeFireModeMessage(tool.GUID, convertFireModeIndex)) case _ => - log.warn(s"GenericObject: $player is MAX with an unexpected weapon - ${definition.Name}") + log.warn(s"GenericObject: $player is MAX with an unexpected attachment - ${definition.Name}") } } else if (action == 20) { if (player.ExoSuit == ExoSuitType.MAX) { ToggleMaxSpecialState(enable = true) } else { - log.warn(s"${player.Name} got GenericActionMessage 20 but can't handle it") + log.warn(s"GenericActionMessage: ${player.Name} can't handle action code 20") } } else if (action == 21) { if (player.ExoSuit == ExoSuitType.MAX) { player.Faction match { case PlanetSideEmpire.NC => ToggleMaxSpecialState(enable = false) - case _ => log.warn(s"${player.Name} tried to cancel an uncancellable MAX special ability") + case _ => log.warn(s"GenericActionMessage: ${player.Name} tried to cancel an uncancellable MAX special ability") } } else { - log.warn(s"${player.Name} got GenericActionMessage 21 but can't handle it") + log.warn(s"GenericActionMessage: ${player.Name} can't handle action code 21") } } else if (action == 36) { //Looking For Squad ON if (squadUI.nonEmpty) { @@ -5103,13 +5097,15 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con } else if (avatar.lookingForSquad) { avatarActor ! AvatarActor.SetLookingForSquad(false) } + } else { + log.debug(s"$msg") } } case msg @ ItemTransactionMessage(terminal_guid, transaction_type, _, _, _, _) => continent.GUID(terminal_guid) match { case Some(term: Terminal) => - log.info(s"ItemTransaction: ${player.Name} is using a terminal") + log.info(s"${player.Name} is using a terminal") if (lastTerminalOrderFulfillment) { lastTerminalOrderFulfillment = false CancelZoningProcessWithDescriptiveReason("cancel_use") @@ -5123,7 +5119,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con case msg @ FavoritesRequest(player_guid, loadoutType, action, line, label) => CancelZoningProcessWithDescriptiveReason("cancel_use") - log.info(s"FavoritesRequest: ${player.Name} wishes to load a saved favorite entry") + log.info(s"${player.Name} wishes to load a saved favorite loadout") action match { case FavoritesAction.Save => avatarActor ! AvatarActor.SaveLoadout(player, loadoutType, label, line) case FavoritesAction.Delete => avatarActor ! AvatarActor.DeleteLoadout(player, loadoutType, line) @@ -5139,7 +5135,10 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con continent.id, AvatarAction.WeaponDryFire(player.GUID, weapon_guid) ) - case _ => ; + case Some(_) => + log.warn(s"WeaponDryFire: ${player.Name}'s weapon ${weapon_guid.guid} does not seem to be a weapon") + case None => + log.error(s"WeaponDryFire: ${player.Name}'s weapon ${weapon_guid.guid} does not seem to exist") } case msg @ WeaponFireMessage( @@ -5157,8 +5156,8 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con ) => HandleWeaponFire(weapon_guid, projectile_guid, shot_origin) - case msg @ WeaponLazeTargetPositionMessage(weapon, pos1, pos2) => - //log.info(s"Lazing position: ${pos2.toString}") + case msg @ WeaponLazeTargetPositionMessage(_, _, pos2) => + log.debug(s"${player.Name} is lazing the position $pos2; to what ends?") case msg @ ObjectDetectedMessage(guid1, guid2, unk, targets) => FindWeapon match { @@ -5183,7 +5182,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con unk3, unk4 ) => - log.trace(s"Hit: $msg") + log.trace(s"${player.Name} hits with $msg") //find defined projectile FindProjectileEntry(projectile_guid) match { case Some(projectile) => @@ -5258,7 +5257,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con unk4, targets ) => - log.trace(s"Splash: $msg") + log.trace(s"${player.Name} splashes with $msg") FindProjectileEntry(projectile_guid) match { case Some(projectile) => val profile = projectile.profile @@ -5319,7 +5318,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con } case msg @ LashMessage(seq_time, killer_guid, victim_guid, projectile_guid, hit_pos, unk1) => - log.info(s"Lash: $msg") + log.trace(s"${player.Name} lashes with $msg") ValidObject(victim_guid) match { case Some(target: PlanetSideGameObject with FactionAffinity with Vitality) => CheckForHitPositionDiscrepancy(projectile_guid, hit_pos, target) @@ -5358,7 +5357,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con destinationBuildingGuid, context.self ) - log.info(s"WarpgateRequest: ${player.Name} is trying to use a warp gate") + log.info(s"${player.Name} is trying to use a warp gate") case Some(wg: WarpGate) if !wg.Active => log.warn(s"WarpgateRequest: ${player.Name} is knocking on an inactive warp gate") @@ -5368,22 +5367,23 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con RequestSanctuaryZoneSpawn(player, continent.Number) } } else { - log.warn(s"WarpgateRequest: your request was already consumed, ${player.Name}; already working on it ...") + log.debug(s"WarpgateRequest: your request was already consumed, ${player.Name}; already working on it ...") } case msg @ MountVehicleMsg(player_guid, mountable_guid, entry_point) => ValidObject(mountable_guid) match { case Some(obj: Mountable) => obj.Actor ! Mountable.TryMount(player, entry_point) + case None | Some(_) => - log.warn(s"MountVehicleMsg: object ${mountable_guid.guid} not a mountable thing, ${player.Name}") + log.error(s"MountVehicleMsg: object ${mountable_guid.guid} not a mountable thing, ${player.Name}") } case msg @ DismountVehicleMsg(player_guid, bailType, wasKickedByDriver) => //TODO optimize this later //common warning for this section def dismountWarning(note: String): Unit = { - log.warn(s"$note; some vehicle might not know that ${player.Name} is no longer sitting in it") + log.error(s"$note; some vehicle might not know that ${player.Name} is no longer sitting in it") } if (player.GUID == player_guid) { //normally disembarking from a mount @@ -5469,22 +5469,26 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con } case msg @ DeployRequestMessage(player_guid, vehicle_guid, deploy_state, unk2, unk3, pos) => - if (player.avatar.vehicle.contains(vehicle_guid) && player.avatar.vehicle == player.VehicleSeated) { - continent.GUID(vehicle_guid) match { - case Some(obj: Vehicle) => - log.info(s"DeployRequest: ${player.Name} is requesting a deployment change for ${obj.Definition.Name}") - obj.Actor ! Deployment.TryDeploymentChange(deploy_state) + if (player.avatar.vehicle.contains(vehicle_guid)) { + if (player.avatar.vehicle == player.VehicleSeated) { + continent.GUID(vehicle_guid) match { + case Some(obj: Vehicle) => + log.info(s"${player.Name} is requesting a deployment change for ${obj.Definition.Name}") + obj.Actor ! Deployment.TryDeploymentChange(deploy_state) - case _ => - log.error(s"DeployRequest: can not find vehicle $vehicle_guid") - avatarActor ! AvatarActor.SetVehicle(None) + case _ => + log.error(s"DeployRequest: ${player.Name} can not find vehicle $vehicle_guid") + avatarActor ! AvatarActor.SetVehicle(None) + } + } else { + log.warn(s"${player.Name} must be mounted to request a deployment change") } } else { log.warn(s"DeployRequest: ${player.Name} does not own the deploying $vehicle_guid object") } case msg @ AvatarGrenadeStateMessage(player_guid, state) => - log.info("AvatarGrenadeStateMessage: " + msg) //TODO I thought I had this working? + log.debug(s"${player.Name} lofts his grenade high ... $msg") //TODO I thought I had this working? case msg @ SquadDefinitionActionMessage(u1, u2, action) => squadService ! SquadServiceMessage(player, continent, SquadServiceAction.Definition(u1, u2, action)) @@ -5514,13 +5518,13 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con summary, desc ) => - log.info(s"BugReportMessage: ${player.Name} filed $msg") + log.warn(s"${player.Name} filed a $msg") + log.debug(s"$msg") case msg @ BindPlayerMessage(action, bindDesc, unk1, logging, unk2, unk3, unk4, pos) => //log.info("BindPlayerMessage: " + msg) case msg @ PlanetsideAttributeMessage(object_guid, attribute_type, attribute_value) => - log.info("PlanetsideAttributeMessage: " + msg) ValidObject(object_guid) match { case Some(vehicle: Vehicle) => if (player.avatar.vehicle.contains(vehicle.GUID)) { @@ -5528,7 +5532,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con vehicle.PermissionGroup(attribute_type, attribute_value) match { case Some(allow) => val group = AccessPermissionGroup(attribute_type - 10) - log.info(s"Vehicle attributes: ${player.Name} changed ${vehicle.Definition.Name}'s access permission $group changed to $allow") + log.info(s"${player.Name} changed ${vehicle.Definition.Name}'s access permission $group changed to $allow") continent.VehicleEvents ! VehicleServiceMessage( continent.id, VehicleAction.SeatPermissions(player.GUID, vehicle.GUID, attribute_type, attribute_value) @@ -5569,7 +5573,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con log.warn(s"Vehicle attributes: unsupported change on vehicle $object_guid - $attribute_type, ${player.Name}") } } else { - log.warn(s"Vehicle attributes: ${player.Name} does not own vehicle ${vehicle.GUID} and can not change it") + log.warn(s"PlanetsideAttributeMessage: vehicle attributes - ${player.Name} does not own vehicle ${vehicle.GUID} and can not change it") } // Cosmetics options @@ -5577,7 +5581,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con avatarActor ! AvatarActor.SetCosmetics(Cosmetic.valuesFromAttributeValue(attribute_value)) case _ => - log.warn(s"echoing unknown attributes behavior") + log.warn(s"PlanetsideAttributeMessage: echoing unknown attributes behavior $attribute_type back to ${player.Name}") sendResponse(PlanetsideAttributeMessage(object_guid, attribute_type, attribute_value)) } @@ -5599,7 +5603,9 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con } case msg @ BattleplanMessage(char_id, player_name, zone_id, diagrams) => - log.info(s"Battleplan: ${player.Name} has a brilliant idea that no one will ever see") + val lament: String = s"${player.Name} has a brilliant idea that no one will ever see" + log.info(lament) + log.debug(s"BattleplanMessage: $lament - $msg") case msg @ CreateShortcutMessage(player_guid, slot, unk, add, shortcut) => ; @@ -6367,8 +6373,8 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con sumReloadValue } else { val splitReloadAmmo: Int = sumReloadValue - fullMagazine - log.info( - s"ChangeAmmo: ${player.Name} takes ${originalBoxCapacity - splitReloadAmmo} from a box of ${originalBoxCapacity} $requestedAmmoType ammo" + log.trace( + s"${player.Name} takes ${originalBoxCapacity - splitReloadAmmo} from a box of $originalBoxCapacity $requestedAmmoType ammo" ) val boxForInventory = AmmoBox(box.Definition, splitReloadAmmo) continent.tasks ! stowNewFunc(boxForInventory) @@ -6377,7 +6383,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con sendResponse( InventoryStateMessage(box.GUID, tool.GUID, box.Capacity) ) //should work for both players and vehicles - log.info(s"ChangeAmmo: ${player.Name} loads ${box.Capacity} $requestedAmmoType into ${tool.GUID} in $ammoSlotIndex") + log.info(s"${player.Name} loads ${box.Capacity} $requestedAmmoType into ${tool.GUID} in $ammoSlotIndex") if (previousBox.Capacity > 0) { //divide capacity across other existing and not full boxes of that ammo type var capacity = previousBox.Capacity @@ -6397,7 +6403,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con val entry = iter.next() val item: AmmoBox = entry.obj.asInstanceOf[AmmoBox] val ammoAllocated = math.min(item.FullCapacity - item.Capacity, capacity) - log.info(s"ChangeAmmo: ${player.Name} put $ammoAllocated back into a box of ${item.Capacity} $originalAmmoType") + log.info(s"${player.Name} put $ammoAllocated back into a box of ${item.Capacity} $originalAmmoType") capacity -= ammoAllocated modifyFunc(item, -ammoAllocated) } @@ -7738,7 +7744,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con def DismountAction(tplayer: Player, obj: PlanetSideGameObject with Mountable, seatNum: Int): Unit = { val player_guid: PlanetSideGUID = tplayer.GUID log.info( - s"DismountVehicleMsg: ${tplayer.Name} dismounts a ${obj.Definition.asInstanceOf[ObjectDefinition].Name} from seat $seatNum" + s"${tplayer.Name} dismounts a ${obj.Definition.asInstanceOf[ObjectDefinition].Name} from seat $seatNum" ) keepAliveFunc = NormalKeepAlive sendResponse(DismountVehicleMsg(player_guid, BailType.Normal, wasKickedByDriver = false)) @@ -7943,7 +7949,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con obj.ModePermissions ) && originalAmmoIndex != obj.AmmoTypeIndex) log.info( - s"ChangeFireMode: ${player.Name} switched construction object ${obj.Definition.Name} to ${obj.AmmoType} (mode ${obj.FireModeIndex})" + s"${player.Name} switched construction object ${obj.Definition.Name} to ${obj.AmmoType} (mode #${obj.FireModeIndex})" ) sendResponse(ChangeAmmoMessage(obj.GUID, obj.AmmoTypeIndex)) } @@ -8119,7 +8125,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con player.Slot(newIndex).Equipment = None true case None => - log.error(s"$logDecorator: ${player.Name} could not find the target ${tool.Definition.Name}") + log.warn(s"$logDecorator: ${player.Name} could not find the target ${tool.Definition.Name}") false } } @@ -8345,7 +8351,9 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con * does not factor in any time required for loading zone or game objects */ def LoadZonePhysicalSpawnPoint(zoneId: String, pos: Vector3, ori: Vector3, respawnTime: FiniteDuration): Unit = { - log.info(s"LoadZonePhysicalSpawnPoint: ${player.Name} will load in zone $zoneId at position $pos in $respawnTime") + val msg = s"${player.Name} will load in zone $zoneId at position $pos in $respawnTime" + log.info(msg) + log.debug(s"LoadZonePhysicalSpawnPoint: $msg") respawnTimer.cancel() reviveTimer.cancel() deadState = DeadState.RespawnTime @@ -8409,7 +8417,9 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con * @param zoneId the zone in which the player will be placed */ def LoadZoneAsPlayer(targetPlayer: Player, zoneId: String): Unit = { - log.info(s"LoadZoneAsPlayer ${targetPlayer.avatar.name} loading into $zoneId") + val msg: String = s"${targetPlayer.avatar.name} loading into $zoneId" + log.info(msg) + log.debug(s"LoadZoneAsPlayer: $msg") if (!zoneReload && zoneId == continent.id) { if (player.isBackpack) { // important! test the actor-wide player ref, not the parameter // respawning from unregistered player @@ -8490,7 +8500,9 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con * @return a tuple composed of an `ActorRef` destination and a message to send to that destination */ def LoadZoneInVehicleAsDriver(vehicle: Vehicle, zoneId: String): Unit = { - log.info(s"LoadZoneInVehicleAsDriver: ${player.Name} loading into $zoneId, driving a ${vehicle.Definition.Name}") + val msg: String = s"${player.Name} loading into $zoneId, driving a ${vehicle.Definition.Name}" + log.info(msg) + log.debug(s"LoadZoneInVehicleAsDriver: $msg") val manifest = vehicle.PrepareGatingManifest() val pguid = player.GUID val toChannel = manifest.file @@ -8502,7 +8514,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con manifest.cargo.foreach { case ("MISSING_DRIVER", index) => val cargo = vehicle.CargoHolds(index).occupant.get - log.error(s"LoadZoneInVehicleAsDriver: ${player.Name} must eject cargo in hold $index; vehicle is missing driver") + log.warn(s"LoadZoneInVehicleAsDriver: ${player.Name} must eject cargo in hold $index; vehicle is missing driver") CargoBehavior.HandleVehicleCargoDismount(cargo.GUID, cargo, vehicle.GUID, vehicle, false, false, true) case (name, index) => val cargo = vehicle.CargoHolds(index).occupant.get @@ -8581,7 +8593,9 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con * @return a tuple composed of an `ActorRef` destination and a message to send to that destination */ def LoadZoneInVehicleAsPassenger(vehicle: Vehicle, zoneId: String): Unit = { - log.info(s"LoadZoneInVehicleAsPassenger: ${player.Name} loading into $zoneId as the passenger of a ${vehicle.Definition.Name}") + val msg: String = s"${player.Name} loading into $zoneId as the passenger of a ${vehicle.Definition.Name}\"" + log.info(msg) + log.debug(s"LoadZoneInVehicleAsPassenger: $msg") if (!zoneReload && zoneId == continent.id) { //transferring a vehicle between spawn points (warp gates) in the same zone self ! PlayerLoaded(player) diff --git a/src/main/scala/net/psforever/objects/GlobalDefinitions.scala b/src/main/scala/net/psforever/objects/GlobalDefinitions.scala index 78e5c6b2..9208bc40 100644 --- a/src/main/scala/net/psforever/objects/GlobalDefinitions.scala +++ b/src/main/scala/net/psforever/objects/GlobalDefinitions.scala @@ -1646,7 +1646,7 @@ object GlobalDefinitions { 1.093750f // same regardless of gender } else if (p.ExoSuit == ExoSuitType.MAX) { 1.906250f // VS female MAX - } else if (p.Sex == CharacterGender.Male) { + } else if (p.Sex == CharacterSex.Male) { obj.Definition.MaxDepth // male } else { 1.546875f // female diff --git a/src/main/scala/net/psforever/objects/Player.scala b/src/main/scala/net/psforever/objects/Player.scala index 80d2b027..4f1f8b33 100644 --- a/src/main/scala/net/psforever/objects/Player.scala +++ b/src/main/scala/net/psforever/objects/Player.scala @@ -79,7 +79,7 @@ class Player(var avatar: Avatar) def Faction: PlanetSideEmpire.Value = avatar.faction - def Sex: CharacterGender.Value = avatar.sex + def Sex: CharacterSex = avatar.sex def Head: Int = avatar.head diff --git a/src/main/scala/net/psforever/objects/avatar/Avatar.scala b/src/main/scala/net/psforever/objects/avatar/Avatar.scala index c823e4fe..9433f93b 100644 --- a/src/main/scala/net/psforever/objects/avatar/Avatar.scala +++ b/src/main/scala/net/psforever/objects/avatar/Avatar.scala @@ -72,7 +72,7 @@ case class Avatar( id: Int, name: String, faction: PlanetSideEmpire.Value, - sex: CharacterGender.Value, + sex: CharacterSex, head: Int, voice: CharacterVoice.Value, bep: Long = 0, diff --git a/src/main/scala/net/psforever/objects/avatar/PlayerControl.scala b/src/main/scala/net/psforever/objects/avatar/PlayerControl.scala index 0af21931..7d25e127 100644 --- a/src/main/scala/net/psforever/objects/avatar/PlayerControl.scala +++ b/src/main/scala/net/psforever/objects/avatar/PlayerControl.scala @@ -714,7 +714,7 @@ class PlayerControl(player: Player, avatarActor: typed.ActorRef[AvatarActor.Comm case Some(a) => damageLog.info(s"DisplayDestroy: ${a.defender} was killed by ${a.attacker}") case _ => - damageLog.info(s"DisplayDestroy: ${player.Name} killed ${if(player.Sex==CharacterGender.Male){"himself"}else{"herself"}}.") + damageLog.info(s"DisplayDestroy: ${player.Name} killed ${player.Sex.pronounObject}self.") } events ! AvatarServiceMessage( nameChannel, diff --git a/src/main/scala/net/psforever/objects/definition/converter/CorpseConverter.scala b/src/main/scala/net/psforever/objects/definition/converter/CorpseConverter.scala index 686e89dd..dcdf82fd 100644 --- a/src/main/scala/net/psforever/objects/definition/converter/CorpseConverter.scala +++ b/src/main/scala/net/psforever/objects/definition/converter/CorpseConverter.scala @@ -30,7 +30,7 @@ class CorpseConverter extends AvatarConverter { */ private def MakeAppearanceData(obj: Player): Int => CharacterAppearanceData = { 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( obj.Faction, bops = false, diff --git a/src/main/scala/net/psforever/objects/vehicles/CargoBehavior.scala b/src/main/scala/net/psforever/objects/vehicles/CargoBehavior.scala index 87553af2..464ebb65 100644 --- a/src/main/scala/net/psforever/objects/vehicles/CargoBehavior.scala +++ b/src/main/scala/net/psforever/objects/vehicles/CargoBehavior.scala @@ -183,7 +183,7 @@ object CargoBehavior { ) ) 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" //obviously, don't do this } else { @@ -281,7 +281,7 @@ object CargoBehavior { ) ) 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" //obviously, don't do this } else if (iteration > 40) { diff --git a/src/main/scala/net/psforever/packet/game/CharacterCreateRequestMessage.scala b/src/main/scala/net/psforever/packet/game/CharacterCreateRequestMessage.scala index 35a5c70e..addf15d7 100644 --- a/src/main/scala/net/psforever/packet/game/CharacterCreateRequestMessage.scala +++ b/src/main/scala/net/psforever/packet/game/CharacterCreateRequestMessage.scala @@ -2,7 +2,7 @@ package net.psforever.packet.game 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.codecs._ import shapeless.{::, HNil} @@ -14,7 +14,7 @@ final case class CharacterCreateRequestMessage( name: String, headId: Int, voiceId: CharacterVoice.Value, - gender: CharacterGender.Value, + gender: CharacterSex, empire: PlanetSideEmpire.Value ) extends PlanetSideGamePacket { type Packet = CharacterCreateRequestMessage @@ -29,7 +29,7 @@ object CharacterCreateRequestMessage extends Marshallable[CharacterCreateRequest ("name" | PacketHelpers.encodedWideString) :: ("headId" | uint8L) :: ("voiceId" | character_voice_codec) :: - ("gender" | CharacterGender.codec) :: + ("gender" | CharacterSex.codec) :: ("empire" | PlanetSideEmpire.codec) ).exmap[CharacterCreateRequestMessage]( { diff --git a/src/main/scala/net/psforever/packet/game/objectcreate/BasicCharacterData.scala b/src/main/scala/net/psforever/packet/game/objectcreate/BasicCharacterData.scala index 82047b17..ecb96742 100644 --- a/src/main/scala/net/psforever/packet/game/objectcreate/BasicCharacterData.scala +++ b/src/main/scala/net/psforever/packet/game/objectcreate/BasicCharacterData.scala @@ -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 appearance coincides with the data available from the `CharacterCreateRequestMessage` packet. * @see `PlanetSideEmpire`
- * `CharacterGender` + * `CharacterSex` * @param name the unique name of the avatar; * minimum of two characters * @param faction the empire to which the avatar belongs @@ -21,7 +21,7 @@ import net.psforever.types._ final case class BasicCharacterData( name: String, faction: PlanetSideEmpire.Value, - sex: CharacterGender.Value, + sex: CharacterSex, head: Int, voice: CharacterVoice.Value ) diff --git a/src/main/scala/net/psforever/packet/game/objectcreate/CharacterAppearanceData.scala b/src/main/scala/net/psforever/packet/game/objectcreate/CharacterAppearanceData.scala index b4ea7d43..70a0ee16 100644 --- a/src/main/scala/net/psforever/packet/game/objectcreate/CharacterAppearanceData.scala +++ b/src/main/scala/net/psforever/packet/game/objectcreate/CharacterAppearanceData.scala @@ -304,7 +304,7 @@ object CharacterAppearanceData extends Marshallable[CharacterAppearanceData] { ("name" | PacketHelpers.encodedWideStringAligned(namePadding(name_padding, data.v2))) :: ("exosuit" | ExoSuitType.codec) :: ("unk5" | uint2) :: //unknown - ("sex" | CharacterGender.codec) :: + ("sex" | CharacterSex.codec) :: ("head" | uint8L) :: ("voice" | CharacterVoice.codec) :: ("unk6" | uint32L) :: diff --git a/src/main/scala/net/psforever/persistence/Avatar.scala b/src/main/scala/net/psforever/persistence/Avatar.scala index 082b05a1..be0cf099 100644 --- a/src/main/scala/net/psforever/persistence/Avatar.scala +++ b/src/main/scala/net/psforever/persistence/Avatar.scala @@ -3,7 +3,7 @@ package net.psforever.persistence import net.psforever.objects.avatar import net.psforever.objects.avatar.Cosmetic import org.joda.time.LocalDateTime -import net.psforever.types.{CharacterGender, CharacterVoice, PlanetSideEmpire} +import net.psforever.types.{CharacterSex, CharacterVoice, PlanetSideEmpire} case class Avatar( id: Int, @@ -27,7 +27,7 @@ case class Avatar( id, name, PlanetSideEmpire(factionId), - CharacterGender(genderId), + CharacterSex(genderId), headId, CharacterVoice(voiceId), bep, diff --git a/src/main/scala/net/psforever/types/CharacterGender.scala b/src/main/scala/net/psforever/types/CharacterGender.scala deleted file mode 100644 index 8f05bca9..00000000 --- a/src/main/scala/net/psforever/types/CharacterGender.scala +++ /dev/null @@ -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) -} diff --git a/src/main/scala/net/psforever/types/CharacterSex.scala b/src/main/scala/net/psforever/types/CharacterSex.scala new file mode 100644 index 00000000..28b8d237 --- /dev/null +++ b/src/main/scala/net/psforever/types/CharacterSex.scala @@ -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) +} diff --git a/src/main/scala/net/psforever/types/CharacterVoice.scala b/src/main/scala/net/psforever/types/CharacterVoice.scala index 007b96c4..a6e287d4 100644 --- a/src/main/scala/net/psforever/types/CharacterVoice.scala +++ b/src/main/scala/net/psforever/types/CharacterVoice.scala @@ -10,7 +10,7 @@ import scodec.codecs.uint * 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; * a female character with either entry would become mute, however. - * @see `CharacterGender` + * @see `CharacterSex` */ object CharacterVoice extends Enumeration { type Type = Value diff --git a/src/test/scala/game/CharacterCreateRequestMessageTest.scala b/src/test/scala/game/CharacterCreateRequestMessageTest.scala index a0134a8f..5d841c72 100644 --- a/src/test/scala/game/CharacterCreateRequestMessageTest.scala +++ b/src/test/scala/game/CharacterCreateRequestMessageTest.scala @@ -4,7 +4,7 @@ package game import org.specs2.mutable._ import net.psforever.packet._ import net.psforever.packet.game._ -import net.psforever.types.{CharacterGender, CharacterVoice, PlanetSideEmpire} +import net.psforever.types.{CharacterSex, CharacterVoice, PlanetSideEmpire} import scodec.bits._ class CharacterCreateRequestMessageTest extends Specification { @@ -16,7 +16,7 @@ class CharacterCreateRequestMessageTest extends Specification { name mustEqual "TestChar" head mustEqual 50 voice mustEqual CharacterVoice.Voice5 - gender mustEqual CharacterGender.Female + gender mustEqual CharacterSex.Female faction mustEqual PlanetSideEmpire.NC case _ => ko @@ -25,7 +25,7 @@ class CharacterCreateRequestMessageTest extends Specification { "encode" in { 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 pkt mustEqual string diff --git a/src/test/scala/game/objectcreate/CharacterDataTest.scala b/src/test/scala/game/objectcreate/CharacterDataTest.scala index 840abcf6..82a7b376 100644 --- a/src/test/scala/game/objectcreate/CharacterDataTest.scala +++ b/src/test/scala/game/objectcreate/CharacterDataTest.scala @@ -40,7 +40,7 @@ class CharacterDataTest extends Specification { case CharacterAppearanceData(a, b, ribbons) => a.app.name mustEqual "ScrawnyRonnie" 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.voice mustEqual CharacterVoice.Voice5 a.data.bops mustEqual false @@ -157,7 +157,7 @@ class CharacterDataTest extends Specification { case CharacterAppearanceData(a, b, ribbons) => a.app.name mustEqual "ScrawnyRonnie" 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.voice mustEqual CharacterVoice.Voice5 a.data.bops mustEqual false @@ -226,7 +226,7 @@ class CharacterDataTest extends Specification { case CharacterAppearanceData(a, b, ribbons) => a.app.name mustEqual "Angello" 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.voice mustEqual CharacterVoice.Voice2 a.data.bops mustEqual false @@ -300,7 +300,7 @@ class CharacterDataTest extends Specification { BasicCharacterData( "ScrawnyRonnie", PlanetSideEmpire.TR, - CharacterGender.Male, + CharacterSex.Male, 5, CharacterVoice.Voice5 ), @@ -408,7 +408,7 @@ class CharacterDataTest extends Specification { BasicCharacterData( "ScrawnyRonnie", PlanetSideEmpire.TR, - CharacterGender.Male, + CharacterSex.Male, 5, CharacterVoice.Voice5 ), @@ -524,7 +524,7 @@ class CharacterDataTest extends Specification { BasicCharacterData( "Angello", PlanetSideEmpire.VS, - CharacterGender.Male, + CharacterSex.Male, 10, CharacterVoice.Voice2 ), diff --git a/src/test/scala/game/objectcreatedetailed/DetailedCharacterDataTest.scala b/src/test/scala/game/objectcreatedetailed/DetailedCharacterDataTest.scala index 8b28c142..ce539a45 100644 --- a/src/test/scala/game/objectcreatedetailed/DetailedCharacterDataTest.scala +++ b/src/test/scala/game/objectcreatedetailed/DetailedCharacterDataTest.scala @@ -70,7 +70,7 @@ class DetailedCharacterDataTest extends Specification { case CharacterAppearanceData(a, b, ribbons) => a.app.name mustEqual "IlllIIIlllIlIllIlllIllI" 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.voice mustEqual CharacterVoice.Voice1 a.data.bops mustEqual false @@ -258,7 +258,7 @@ class DetailedCharacterDataTest extends Specification { case CharacterAppearanceData(a, b, ribbons) => a.app.name mustEqual "IlllIIIlllIlIllIlllIllI" 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.voice mustEqual CharacterVoice.Voice1 a.data.bops mustEqual false @@ -443,7 +443,7 @@ class DetailedCharacterDataTest extends Specification { case CharacterAppearanceData(a, b, ribbons) => a.app.name mustEqual "HaHaATRMax" 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.voice mustEqual CharacterVoice.Voice1 a.data.bops mustEqual false @@ -670,7 +670,7 @@ class DetailedCharacterDataTest extends Specification { case CharacterAppearanceData(a, b, ribbons) => a.app.name mustEqual "KiCkJr" 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.voice mustEqual CharacterVoice.Voice4 a.data.bops mustEqual false @@ -1189,7 +1189,7 @@ class DetailedCharacterDataTest extends Specification { a.app mustEqual BasicCharacterData( "CCRIDER", PlanetSideEmpire.NC, - CharacterGender.Male, + CharacterSex.Male, 20, CharacterVoice.Voice3 ) @@ -1336,7 +1336,7 @@ class DetailedCharacterDataTest extends Specification { a.app mustEqual BasicCharacterData( "xRider912", PlanetSideEmpire.TR, - CharacterGender.Male, + CharacterSex.Male, 4, CharacterVoice.Voice1 ) @@ -1515,7 +1515,7 @@ class DetailedCharacterDataTest extends Specification { BasicCharacterData( "IlllIIIlllIlIllIlllIllI", PlanetSideEmpire.VS, - CharacterGender.Female, + CharacterSex.Female, 41, CharacterVoice.Voice1 ), @@ -1697,7 +1697,7 @@ class DetailedCharacterDataTest extends Specification { BasicCharacterData( "IlllIIIlllIlIllIlllIllI", PlanetSideEmpire.VS, - CharacterGender.Female, + CharacterSex.Female, 41, CharacterVoice.Voice1 ), @@ -1886,7 +1886,7 @@ class DetailedCharacterDataTest extends Specification { BasicCharacterData( "HaHaATRMax", PlanetSideEmpire.TR, - CharacterGender.Male, + CharacterSex.Male, 57, CharacterVoice.Voice1 ), @@ -2103,7 +2103,7 @@ class DetailedCharacterDataTest extends Specification { BasicCharacterData( "KiCkJr", PlanetSideEmpire.NC, - CharacterGender.Male, + CharacterSex.Male, 24, CharacterVoice.Voice4 ), @@ -3588,7 +3588,7 @@ class DetailedCharacterDataTest extends Specification { BasicCharacterData( "CCRIDER", PlanetSideEmpire.NC, - CharacterGender.Male, + CharacterSex.Male, 20, CharacterVoice.Voice3 ), @@ -4512,7 +4512,7 @@ class DetailedCharacterDataTest extends Specification { BasicCharacterData( "xRider912", PlanetSideEmpire.TR, - CharacterGender.Male, + CharacterSex.Male, 4, CharacterVoice.Voice1 ), diff --git a/src/test/scala/game/objectcreatevehicle/MountedVehiclesTest.scala b/src/test/scala/game/objectcreatevehicle/MountedVehiclesTest.scala index 7b45ed48..9a85310d 100644 --- a/src/test/scala/game/objectcreatevehicle/MountedVehiclesTest.scala +++ b/src/test/scala/game/objectcreatevehicle/MountedVehiclesTest.scala @@ -57,7 +57,7 @@ class MountedVehiclesTest extends Specification { a.app mustEqual BasicCharacterData( "ScrawnyRonnie", PlanetSideEmpire.TR, - CharacterGender.Male, + CharacterSex.Male, 5, CharacterVoice.Voice5 ) @@ -146,7 +146,7 @@ class MountedVehiclesTest extends Specification { BasicCharacterData( "ScrawnyRonnie", PlanetSideEmpire.TR, - CharacterGender.Male, + CharacterSex.Male, 5, CharacterVoice.Voice5 ), diff --git a/src/test/scala/objects/AvatarTest.scala b/src/test/scala/objects/AvatarTest.scala index a5a4c47d..7a7dbbc7 100644 --- a/src/test/scala/objects/AvatarTest.scala +++ b/src/test/scala/objects/AvatarTest.scala @@ -6,12 +6,12 @@ import net.psforever.objects._ import net.psforever.objects.avatar.{Avatar, BattleRank, Implant} import net.psforever.objects.definition.ImplantDefinition 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._ class AvatarTest extends Specification { 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) player.Slot(0).Equipment = Tool(beamer) player.Slot(2).Equipment = Tool(suppressor) @@ -26,10 +26,10 @@ class AvatarTest extends Specification { } "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.faction mustEqual PlanetSideEmpire.TR - av.sex mustEqual CharacterGender.Male + av.sex mustEqual CharacterSex.Male av.head mustEqual 0 av.voice mustEqual CharacterVoice.Voice5 av.bep mustEqual 0 @@ -39,7 +39,7 @@ class AvatarTest extends Specification { } "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.copy(bep = -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 "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(0) must beNone obj.implants(1) must beNone @@ -61,7 +61,7 @@ class AvatarTest extends Specification { 0, "Chord", PlanetSideEmpire.TR, - CharacterGender.Male, + CharacterSex.Male, 0, CharacterVoice.Voice5, bep = BattleRank.BR6.experience @@ -81,7 +81,7 @@ class AvatarTest extends Specification { "can not install the same type of implant twice" in { val testplant1 = 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[ AssertionError ] @@ -91,7 +91,7 @@ class AvatarTest extends Specification { val testplant1 = Implant(new ImplantDefinition(ImplantType.AdvancedRegen)) val testplant2 = Implant(new ImplantDefinition(ImplantType.Surge)) 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( bep = BattleRank.BR12.value, implants = Seq(Some(testplant1), Some(testplant2), Some(testplant3)) diff --git a/src/test/scala/objects/ConverterTest.scala b/src/test/scala/objects/ConverterTest.scala index f1c56c17..6938a734 100644 --- a/src/test/scala/objects/ConverterTest.scala +++ b/src/test/scala/objects/ConverterTest.scala @@ -648,7 +648,7 @@ class ConverterTest extends Specification { } "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 = { /* Create an AmmoBoxDefinition with which to build two AmmoBoxes diff --git a/src/test/scala/objects/DamageModelTests.scala b/src/test/scala/objects/DamageModelTests.scala index 352c2fbd..13f60d95 100644 --- a/src/test/scala/objects/DamageModelTests.scala +++ b/src/test/scala/objects/DamageModelTests.scala @@ -26,7 +26,7 @@ class DamageCalculationsTests extends Specification { val wep_prof = wep_fmode.Add val proj = DamageModelTests.projectile 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 target = Vehicle(GlobalDefinitions.fury) target.Position = Vector3(10, 0, 0) @@ -450,7 +450,7 @@ class DamageCalculationsTests extends Specification { "galaxy gunship reduction (target is not a vehicle)" in { 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( SourceEntry(tplayer), ProjectileReason( @@ -479,7 +479,7 @@ class ResistanceCalculationsTests extends Specification { val wep = GlobalDefinitions.galaxy_gunship_cannon val wep_fmode = Tool(wep).FireMode 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) "ResistanceCalculations" should { @@ -515,7 +515,7 @@ class ResistanceCalculationsTests extends Specification { } "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 val resprojectile = DamageInteraction( SourceEntry(target), @@ -592,7 +592,7 @@ class ResolutionCalculationsTests extends Specification { val wep = GlobalDefinitions.galaxy_gunship_cannon val wep_fmode = Tool(wep).FireMode 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() 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) } - 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.Spawn() "calculate no max damage for vehicles" in { @@ -740,7 +740,7 @@ class DamageModelTests extends Specification { val wep_tool = Tool(wep) val wep_fmode = wep_tool.FireMode 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() 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 { 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.Health mustEqual 100 tplayer.Armor mustEqual 50 @@ -789,7 +789,7 @@ class DamageModelTests extends Specification { "resolve infantry targets in a specific way" in { 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.Health mustEqual 100 tplayer.Armor mustEqual 50 @@ -811,7 +811,7 @@ class DamageModelTests extends Specification { "resolve infantry targets, with damage overflow" in { 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.Health mustEqual 100 tplayer.Armor mustEqual 50 diff --git a/src/test/scala/objects/DamageableTest.scala b/src/test/scala/objects/DamageableTest.scala index e5c218f1..4809d153 100644 --- a/src/test/scala/objects/DamageableTest.scala +++ b/src/test/scala/objects/DamageableTest.scala @@ -35,7 +35,7 @@ import net.psforever.objects.vital.base.DamageResolution import net.psforever.objects.vital.projectile.ProjectileReason 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 weaponA = Tool(GlobalDefinitions.phoenix) //decimator 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 { 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) val target = new Terminal(new TerminalDefinition(0) { Damageable = true @@ -240,7 +240,7 @@ class DamageableTest extends Specification { "permit jamming friendly targets if the target is hacked" in { 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) val target = new SensorDeployable(GlobalDefinitions.motionalarmsensor) 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 gen = Generator(GlobalDefinitions.generator) //guid=2 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(gen, 2) guid.register(player1, 3) @@ -355,7 +355,7 @@ class DamageableEntityDestroyedTest extends ActorTest { mech.Position = Vector3(1, 0, 0) mech.Actor = system.actorOf(Props(classOf[ImplantTerminalMechControl], mech), "mech-control") 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.Spawn() 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 gen = Generator(GlobalDefinitions.generator) //guid=2 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() guid.register(building, 1) 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 term = Terminal(GlobalDefinitions.order_terminal) //guid=2 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() guid.register(building, 1) 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 mech = ImplantTerminalMech(GlobalDefinitions.implant_terminal_mech) //guid=2 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.Position = Vector3(2, 2, 2) 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() guid.register(building, 1) 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 mech = ImplantTerminalMech(GlobalDefinitions.implant_terminal_mech) //guid=2 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.Position = Vector3(2, 2, 2) val player1Probe = TestProbe() player1.Actor = player1Probe.ref 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() val player2Probe = TestProbe() player2.Actor = player2Probe.ref @@ -784,13 +784,13 @@ class DamageableWeaponTurretDamageTest extends ActorTest { turret.Zone = zone turret.Position = Vector3(1, 0, 0) 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.Position = Vector3(2, 2, 2) val player1Probe = TestProbe() player1.Actor = player1Probe.ref 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() val player2Probe = TestProbe() player2.Actor = player2Probe.ref @@ -882,13 +882,13 @@ class DamageableWeaponTurretJammerTest extends ActorTest { val turretWeapon = turret.Weapons.values.head.Equipment.get.asInstanceOf[Tool] 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.Position = Vector3(2, 2, 2) val player1Probe = TestProbe() player1.Actor = player1Probe.ref 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() val player2Probe = TestProbe() player2.Actor = player2Probe.ref @@ -982,13 +982,13 @@ class DamageableWeaponTurretDestructionTest extends ActorTest { val turretWeapon = turret.Weapons.values.head.Equipment.get.asInstanceOf[Tool] 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.Position = Vector3(2, 2, 2) val player1Probe = TestProbe() player1.Actor = player1Probe.ref 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() val player2Probe = TestProbe() player2.Actor = player2Probe.ref @@ -1133,13 +1133,13 @@ class DamageableVehicleDamageTest extends ActorTest { atv.Position = Vector3(1, 0, 0) 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.Position = Vector3(2, 0, 0) val player1Probe = TestProbe() player1.Actor = player1Probe.ref 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() val player2Probe = TestProbe() player2.Actor = player2Probe.ref @@ -1242,18 +1242,18 @@ class DamageableVehicleDamageMountedTest extends ActorTest { atv.Actor = system.actorOf(Props(classOf[VehicleControl], atv), "atv-control") 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.Position = Vector3(2, 0, 0) val player1Probe = TestProbe() player1.Actor = player1Probe.ref 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() val player2Probe = TestProbe() player2.Actor = player2Probe.ref 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() val player3Probe = TestProbe() player3.Actor = player3Probe.ref @@ -1387,18 +1387,18 @@ class DamageableVehicleJammeringMountedTest extends ActorTest { lodestar.Position = Vector3(1, 0, 0) 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.Position = Vector3(2, 0, 0) val player1Probe = TestProbe() player1.Actor = player1Probe.ref 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() val player2Probe = TestProbe() player2.Actor = player2Probe.ref 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() val player3Probe = TestProbe() 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 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.Position = Vector3(2, 0, 0) val player1Probe = TestProbe() player1.Actor = player1Probe.ref 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() val player2Probe = TestProbe() player2.Actor = player2Probe.ref @@ -1595,18 +1595,18 @@ class DamageableVehicleDestroyMountedTest extends ActorTest { lodestar.Position = Vector3(1, 0, 0) 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.Position = Vector3(2, 0, 0) val player1Probe = TestProbe() player1.Actor = player1Probe.ref 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() val player2Probe = TestProbe() player2.Actor = player2Probe.ref 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() val player3Probe = TestProbe() player3.Actor = player3Probe.ref diff --git a/src/test/scala/objects/DeployableTest.scala b/src/test/scala/objects/DeployableTest.scala index 3f73d8b1..f8eca34b 100644 --- a/src/test/scala/objects/DeployableTest.scala +++ b/src/test/scala/objects/DeployableTest.scala @@ -320,10 +320,10 @@ class ExplosiveDeployableJammerTest extends ActorTest { val j_mine = Deployables.Make(DeployedItem.jammer_mine)().asInstanceOf[ExplosiveDeployable] //guid=1 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() 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() val weapon = Tool(GlobalDefinitions.jammer_grenade) //guid=5 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 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() 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() val weapon = Tool(GlobalDefinitions.jammer_grenade) //guid=5 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 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() 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() val weapon = Tool(GlobalDefinitions.suppressor) //guid=5 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") 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) val reply1a = receiveOne(200 milliseconds) 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") 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) val reply1a = receiveOne(200 milliseconds) assert(reply1a.isInstanceOf[Mountable.MountMessages]) @@ -702,7 +702,7 @@ class TurretControlBlockMountTest extends ActorTest { assert(reply1b.response.isInstanceOf[Mountable.CanMount]) 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) val reply2a = receiveOne(200 milliseconds) 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") 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) val reply1a = receiveOne(200 milliseconds) 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") 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) + val reply1a = receiveOne(200 milliseconds) assert(reply1a.isInstanceOf[Mountable.MountMessages]) val reply1b = reply1a.asInstanceOf[Mountable.MountMessages] @@ -775,7 +776,7 @@ class TurretControlBetrayalMountTest extends ActorTest { val probe = new TestProbe(system) 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) obj.Actor.tell(Mountable.TryMount(player, 1), probe.ref) val reply1a = probe.receiveOne(200 milliseconds) diff --git a/src/test/scala/objects/DoorTest.scala b/src/test/scala/objects/DoorTest.scala index bc908e66..72e08daf 100644 --- a/src/test/scala/objects/DoorTest.scala +++ b/src/test/scala/objects/DoorTest.scala @@ -20,7 +20,7 @@ import org.specs2.mutable.Specification import scala.concurrent.duration._ 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 { "construct" in { @@ -148,7 +148,7 @@ object DoorControlTest { GlobalDefinitions.building ) 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) (player, door) } diff --git a/src/test/scala/objects/FacilityTurretTest.scala b/src/test/scala/objects/FacilityTurretTest.scala index 99d1f8b9..90e0e944 100644 --- a/src/test/scala/objects/FacilityTurretTest.scala +++ b/src/test/scala/objects/FacilityTurretTest.scala @@ -100,7 +100,7 @@ class FacilityTurretControl1Test 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) obj.GUID = PlanetSideGUID(1) obj.Actor = system.actorOf(Props(classOf[FacilityTurretControl], obj), "turret-control") @@ -127,7 +127,7 @@ class FacilityTurretControl2Test 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) obj.GUID = PlanetSideGUID(1) obj.Actor = system.actorOf(Props(classOf[FacilityTurretControl], obj), "turret-control") @@ -153,7 +153,7 @@ class FacilityTurretControl3Test 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) obj.GUID = PlanetSideGUID(1) 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 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.Position = Vector3(2, 2, 2) val player1Probe = TestProbe() diff --git a/src/test/scala/objects/GeneratorTest.scala b/src/test/scala/objects/GeneratorTest.scala index 8a951699..5dab52a7 100644 --- a/src/test/scala/objects/GeneratorTest.scala +++ b/src/test/scala/objects/GeneratorTest.scala @@ -66,7 +66,7 @@ class GeneratorControlDamageTest extends ActorTest { gen.Actor = system.actorOf(Props(classOf[GeneratorControl], gen), "generator-control") 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.Spawn() @@ -149,7 +149,7 @@ class GeneratorControlCriticalTest extends ActorTest { gen.Actor = system.actorOf(Props(classOf[GeneratorControl], gen), "generator-control") 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.Spawn() @@ -234,7 +234,7 @@ class GeneratorControlDestroyedTest extends ActorTest { gen.Actor = system.actorOf(Props(classOf[GeneratorControl], gen), "generator-control") 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.Spawn() player1.Actor = TestProbe().ref @@ -343,13 +343,13 @@ class GeneratorControlKillsTest extends ActorTest { gen.Actor = system.actorOf(Props(classOf[GeneratorControl], gen), "generator-control") 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.Spawn() val player1Probe = TestProbe() player1.Actor = player1Probe.ref 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.Spawn() val player2Probe = TestProbe() @@ -481,7 +481,7 @@ class GeneratorControlNotDestroyTwice extends ActorTest { val building = Building("test-building", 1, 1, zone, StructureType.Facility) //guid=1 val gen = Generator(GeneratorTest.generator_definition) //guid=2 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() guid.register(building, 1) guid.register(gen, 2) @@ -572,7 +572,7 @@ class GeneratorControlNotDamageIfExplodingTest extends ActorTest { gen.Actor = system.actorOf(Props(classOf[GeneratorControl], gen), "generator-control") 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.Spawn() val player1Probe = TestProbe() @@ -671,7 +671,7 @@ class GeneratorControlNotRepairIfExplodingTest extends ActorTest { gen.Actor = system.actorOf(Props(classOf[GeneratorControl], gen), "generator-control") 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.Spawn() val player1Probe = TestProbe() @@ -774,7 +774,7 @@ class GeneratorControlRepairPastRestorePoint extends ActorTest { gen.Actor = system.actorOf(Props(classOf[GeneratorControl], gen), "generator-control") 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.Spawn() val player1Probe = TestProbe() diff --git a/src/test/scala/objects/IFFLockTest.scala b/src/test/scala/objects/IFFLockTest.scala index b40779d2..a5c008db 100644 --- a/src/test/scala/objects/IFFLockTest.scala +++ b/src/test/scala/objects/IFFLockTest.scala @@ -98,6 +98,6 @@ object IFFLockControlTest { GlobalDefinitions.building ) 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) } } diff --git a/src/test/scala/objects/LoadoutTest.scala b/src/test/scala/objects/LoadoutTest.scala index 426741ac..e2cc2142 100644 --- a/src/test/scala/objects/LoadoutTest.scala +++ b/src/test/scala/objects/LoadoutTest.scala @@ -3,13 +3,13 @@ package objects import net.psforever.objects._ 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.avatar.Avatar import org.specs2.mutable._ 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 = { new Player(avatar) { diff --git a/src/test/scala/objects/MountableTest.scala b/src/test/scala/objects/MountableTest.scala index e761d4d3..2dc7a45e 100644 --- a/src/test/scala/objects/MountableTest.scala +++ b/src/test/scala/objects/MountableTest.scala @@ -8,7 +8,7 @@ import net.psforever.objects.avatar.Avatar import net.psforever.objects.definition.ObjectDefinition import net.psforever.objects.serverobject.mount._ 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 @@ -25,7 +25,7 @@ class MountableControl1Test extends ActorTest { class MountableControl2Test extends ActorTest { "MountableControl" should { "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 obj.Actor = system.actorOf(Props(classOf[MountableTest.MountableTestControl], obj), "mountable") val msg = Mountable.TryMount(player, 0) @@ -46,8 +46,8 @@ class MountableControl2Test extends ActorTest { class MountableControl3Test extends ActorTest { "MountableControl" should { "block a player from mounting" in { - val player1 = Player(Avatar(0, "test1", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) - val player2 = Player(Avatar(1, "test2", 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, CharacterSex.Male, 0, CharacterVoice.Mute)) val obj = new MountableTest.MountableTestObject obj.Actor = system.actorOf(Props(classOf[MountableTest.MountableTestControl], obj), "mountable") obj.Actor ! Mountable.TryMount(player1, 0) diff --git a/src/test/scala/objects/PlayerControlTest.scala b/src/test/scala/objects/PlayerControlTest.scala index 7af1b712..7960f1c4 100644 --- a/src/test/scala/objects/PlayerControlTest.scala +++ b/src/test/scala/objects/PlayerControlTest.scala @@ -26,9 +26,9 @@ import scala.concurrent.duration._ class PlayerControlHealTest extends ActorTest { 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 = - 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 guid = new NumberPoolHub(new MaxNumberSource(15)) val zone = new Zone("test", new ZoneMap("test"), 0) { @@ -111,7 +111,7 @@ class PlayerControlHealTest extends ActorTest { } class PlayerControlHealSelfTest extends ActorTest { 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 guid = new NumberPoolHub(new MaxNumberSource(15)) val zone = new Zone("test", new ZoneMap("test"), 0) { @@ -186,9 +186,9 @@ class PlayerControlHealSelfTest extends ActorTest { class PlayerControlRepairTest extends ActorTest { 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 = - 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 guid = new NumberPoolHub(new MaxNumberSource(15)) val zone = new Zone("test", new ZoneMap("test"), 0) { @@ -282,7 +282,7 @@ class PlayerControlRepairTest extends ActorTest { class PlayerControlRepairSelfTest extends ActorTest { 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 guid = new NumberPoolHub(new MaxNumberSource(15)) val zone = new Zone("test", new ZoneMap("test"), 0) { @@ -357,9 +357,9 @@ class PlayerControlRepairSelfTest extends ActorTest { class PlayerControlDamageTest extends ActorTest { 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 = - 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 activityProbe = TestProbe() val guid = new NumberPoolHub(new MaxNumberSource(15)) @@ -462,9 +462,9 @@ class PlayerControlDamageTest extends ActorTest { class PlayerControlDeathStandingTest extends ActorTest { 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 = - 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 activityProbe = TestProbe() val guid = new NumberPoolHub(new MaxNumberSource(15)) @@ -600,9 +600,9 @@ class PlayerControlDeathStandingTest extends ActorTest { class PlayerControlDeathSeatedTest extends ActorTest { 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 = - 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 activityProbe = TestProbe() val guid = new NumberPoolHub(new MaxNumberSource(15)) @@ -756,7 +756,7 @@ class PlayerControlDeathSeatedTest extends ActorTest { class PlayerControlInteractWithWaterTest extends ActorTest { 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 guid = new NumberPoolHub(new MaxNumberSource(15)) val pool = Pool(EnvironmentAttribute.Water, DeepSquare(-1, 10, 10, 0, 0)) @@ -808,7 +808,7 @@ class PlayerControlInteractWithWaterTest extends ActorTest { class PlayerControlStopInteractWithWaterTest extends ActorTest { 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 guid = new NumberPoolHub(new MaxNumberSource(15)) val pool = Pool(EnvironmentAttribute.Water, DeepSquare(-1, 10, 10, 0, 0)) @@ -871,7 +871,7 @@ class PlayerControlStopInteractWithWaterTest extends ActorTest { class PlayerControlInteractWithLavaTest extends ActorTest { 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 guid = new NumberPoolHub(new MaxNumberSource(15)) val pool = Pool(EnvironmentAttribute.Lava, DeepSquare(-1, 10, 10, 0, 0)) @@ -931,7 +931,7 @@ class PlayerControlInteractWithLavaTest extends ActorTest { class PlayerControlInteractWithDeathTest extends ActorTest { 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 guid = new NumberPoolHub(new MaxNumberSource(15)) val pool = Pool(EnvironmentAttribute.Death, DeepSquare(-1, 10, 10, 0, 0)) diff --git a/src/test/scala/objects/PlayerTest.scala b/src/test/scala/objects/PlayerTest.scala index a4bd0c13..4b645bf0 100644 --- a/src/test/scala/objects/PlayerTest.scala +++ b/src/test/scala/objects/PlayerTest.scala @@ -6,6 +6,7 @@ import net.psforever.objects._ import net.psforever.objects.avatar.Avatar import net.psforever.objects.definition.{SimpleItemDefinition, SpecialExoSuitDefinition} import net.psforever.objects.equipment.EquipmentSize +import net.psforever.objects.inventory.InventoryItem import net.psforever.objects.locker.LockerEquipment import net.psforever.types.{PlanetSideGUID, _} import org.specs2.mutable._ @@ -16,7 +17,7 @@ class PlayerTest extends Specification { def TestPlayer( name: String, faction: PlanetSideEmpire.Value, - sex: CharacterGender.Value, + sex: CharacterSex, head: Int, voice: CharacterVoice.Value ): Player = { @@ -25,7 +26,7 @@ class PlayerTest extends Specification { "Player" should { "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.FacingYawUpper mustEqual 0 obj.Jumping mustEqual false @@ -43,7 +44,7 @@ class PlayerTest extends Specification { } "(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.Health mustEqual 0 obj.Armor mustEqual 0 @@ -56,7 +57,7 @@ class PlayerTest extends Specification { } "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.Health mustEqual 100 obj.Armor mustEqual 50 @@ -72,7 +73,7 @@ class PlayerTest extends Specification { } "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.Armor = 35 //50 -> 35 obj.isAlive mustEqual true @@ -85,7 +86,7 @@ class PlayerTest extends Specification { } "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.isAlive mustEqual true obj.isBackpack mustEqual false @@ -95,7 +96,7 @@ class PlayerTest extends Specification { } "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.isBackpack mustEqual false obj.Release @@ -104,7 +105,7 @@ class PlayerTest extends Specification { } "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 = 123 obj.MaxHealth mustEqual 123 @@ -114,7 +115,7 @@ class PlayerTest extends Specification { } // "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.Armor = 34 // obj.Stamina = 45 @@ -135,7 +136,7 @@ class PlayerTest extends Specification { // } "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.ExoSuit = ExoSuitType.Agile obj.VisibleSlots mustEqual Set(0, 1, 2, 4) @@ -148,7 +149,7 @@ class PlayerTest extends Specification { } "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.Slot(0).Size mustEqual EquipmentSize.Pistol obj.Slot(1).Size mustEqual EquipmentSize.Blocked @@ -162,7 +163,7 @@ class PlayerTest extends Specification { "draw equipped holsters only" in { 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).Equipment = wep obj.DrawnSlot mustEqual Player.HandsDownSlot @@ -175,7 +176,7 @@ class PlayerTest extends Specification { "remember the last drawn holster" in { val wep1 = SimpleItem(SimpleItemDefinition(149)) val wep2 = SimpleItem(SimpleItemDefinition(149)) - val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Voice5) + val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Voice5) obj.Slot(0).Size = EquipmentSize.Pistol obj.Slot(0).Equipment = wep1 obj.Slot(1).Size = EquipmentSize.Pistol @@ -214,7 +215,7 @@ class PlayerTest extends Specification { "hold something in their free hand" in { 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.get.Definition.ObjectId mustEqual 149 @@ -222,14 +223,14 @@ class PlayerTest extends Specification { "provide an invalid hand that can not hold anything" in { 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.isEmpty mustEqual true } "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.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 { - 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) obj.FreeHand.Equipment.isEmpty mustEqual true @@ -256,12 +257,12 @@ class PlayerTest extends Specification { } "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 } "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 = { val item = Tool(beamer) item.GUID = PlanetSideGUID(1) @@ -297,7 +298,7 @@ class PlayerTest extends Specification { } "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 item2 = Kit(medkit) val item3 = AmmoBox(GlobalDefinitions.bullet_9mm) @@ -306,7 +307,7 @@ class PlayerTest extends Specification { obj.FreeHand.Equipment = item3 obj.Collisions(0, 1, 1) match { - case Success(List(item)) => + case Success(List(item: InventoryItem)) => item.obj mustEqual item1 item.start mustEqual 0 case _ => @@ -320,7 +321,7 @@ class PlayerTest extends Specification { } //holsters, nothing obj.Collisions(6, 1, 1) match { - case Success(List(item)) => + case Success(List(item: InventoryItem)) => item.obj mustEqual item2 item.start mustEqual 6 case _ => @@ -328,16 +329,17 @@ class PlayerTest extends Specification { } //inventory obj.Collisions(Player.FreeHandSlot, 1, 1) match { - case Success(List(item)) => + case Success(List(item: InventoryItem)) => item.obj mustEqual item3 item.start mustEqual Player.FreeHandSlot case _ => ko } //free hand + ok } "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 = PlanetSideGUID(65) obj.VehicleSeated.contains(PlanetSideGUID(65)) mustEqual true @@ -346,7 +348,7 @@ class PlayerTest extends Specification { } "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 = Some(PlanetSideGUID(65)) obj.avatar.vehicle.contains(PlanetSideGUID(65)) mustEqual true @@ -355,21 +357,21 @@ class PlayerTest extends Specification { } "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 = "ugd01" obj.Continent mustEqual "ugd01" } "special is typically normal and can not be changed from normal" in { - val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Voice5) + val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Voice5) obj.UsingSpecial mustEqual SpecialExoSuitDefinition.Mode.Normal obj.UsingSpecial = SpecialExoSuitDefinition.Mode.Shielded obj.UsingSpecial mustEqual SpecialExoSuitDefinition.Mode.Normal } "a TR MAX can change its special to Overdrive or Anchored" in { - val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Voice5) + val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Voice5) obj.ExoSuit = ExoSuitType.MAX obj.UsingSpecial mustEqual SpecialExoSuitDefinition.Mode.Normal obj.UsingSpecial = SpecialExoSuitDefinition.Mode.Anchored @@ -384,7 +386,7 @@ class PlayerTest extends Specification { } "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.UsingSpecial mustEqual SpecialExoSuitDefinition.Mode.Normal obj.UsingSpecial = SpecialExoSuitDefinition.Mode.Shielded @@ -394,13 +396,13 @@ class PlayerTest extends Specification { } "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.UsingSpecial mustEqual SpecialExoSuitDefinition.Mode.Normal objtr.UsingSpecial = SpecialExoSuitDefinition.Mode.Shielded objtr.UsingSpecial mustEqual SpecialExoSuitDefinition.Mode.Normal - val objnc = TestPlayer("Chord", PlanetSideEmpire.NC, CharacterGender.Male, 0, CharacterVoice.Voice5) + val objnc = TestPlayer("Chord", PlanetSideEmpire.NC, CharacterSex.Male, 0, CharacterVoice.Voice5) objnc.ExoSuit = ExoSuitType.MAX objnc.UsingSpecial mustEqual SpecialExoSuitDefinition.Mode.Normal 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 { - 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.UsingSpecial mustEqual SpecialExoSuitDefinition.Mode.Normal obj.UsingSpecial = SpecialExoSuitDefinition.Mode.Anchored diff --git a/src/test/scala/objects/ProjectileTest.scala b/src/test/scala/objects/ProjectileTest.scala index 418a2883..cf57cbbe 100644 --- a/src/test/scala/objects/ProjectileTest.scala +++ b/src/test/scala/objects/ProjectileTest.scala @@ -13,7 +13,7 @@ import net.psforever.types.{PlanetSideGUID, _} import org.specs2.mutable.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) "Range" should { @@ -209,7 +209,7 @@ class ProjectileTest extends Specification { "contain timely information" in { 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.Position = Vector3(1.2f, 3.4f, 5.6f) 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? val beamer_wep = Tool(GlobalDefinitions.beamer) 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 projectile = Projectile( beamer_wep.Projectile, diff --git a/src/test/scala/objects/RepairableTest.scala b/src/test/scala/objects/RepairableTest.scala index 70750d44..6adf2f99 100644 --- a/src/test/scala/objects/RepairableTest.scala +++ b/src/test/scala/objects/RepairableTest.scala @@ -37,7 +37,7 @@ class RepairableEntityRepairTest extends ActorTest { val building = Building("test-building", 1, 1, zone, StructureType.Facility) //guid=1 val gen = Generator(GlobalDefinitions.generator) //guid=2 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() guid.register(building, 1) 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 gen = Generator(GlobalDefinitions.generator) //guid=2 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() guid.register(building, 1) 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 term = Terminal(GlobalDefinitions.order_terminal) //guid=2 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() guid.register(building, 1) guid.register(term, 2) @@ -251,7 +251,7 @@ class RepairableTurretWeapon extends ActorTest { val turretWeapon = turret.Weapons.values.head.Equipment.get.asInstanceOf[Tool] 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.Position = Vector3(2, 2, 2) val player1Probe = TestProbe() @@ -337,7 +337,7 @@ class RepairableVehicleRepair extends ActorTest { val atvWeapon = atv.Weapons(1).Equipment.get.asInstanceOf[Tool] 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.Position = Vector3(2, 2, 2) val player1Probe = TestProbe() @@ -410,7 +410,7 @@ class RepairableVehicleRestoration extends ActorTest { val atvWeapon = atv.Weapons(1).Equipment.get.asInstanceOf[Tool] 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.Position = Vector3(2, 2, 2) val player1Probe = TestProbe() diff --git a/src/test/scala/objects/ResourceSiloTest.scala b/src/test/scala/objects/ResourceSiloTest.scala index a6f5e06c..612b5d1b 100644 --- a/src/test/scala/objects/ResourceSiloTest.scala +++ b/src/test/scala/objects/ResourceSiloTest.scala @@ -154,7 +154,7 @@ class ResourceSiloControlUseTest extends FreedContextActorTest { expectNoMessage(1000 milliseconds) var buildingMap = new TrieMap[Int, Building]() 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 silo = new ResourceSilo() val catchall = new TestProbe(system).ref @@ -427,7 +427,7 @@ class ResourceSiloControlNoUpdateTest extends ActorTest { object ResourceSiloTest { 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 { diff --git a/src/test/scala/objects/UtilityTest.scala b/src/test/scala/objects/UtilityTest.scala index 31b615df..b342ba8a 100644 --- a/src/test/scala/objects/UtilityTest.scala +++ b/src/test/scala/objects/UtilityTest.scala @@ -60,7 +60,7 @@ class UtilityTest extends Specification { val veh = Vehicle(GlobalDefinitions.quadstealth) veh.Faction = PlanetSideEmpire.TR 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) obj().Owner = veh //hack obj().GUID = PlanetSideGUID(1) diff --git a/src/test/scala/objects/VehicleControlTest.scala b/src/test/scala/objects/VehicleControlTest.scala index 63342d6f..8a6f6353 100644 --- a/src/test/scala/objects/VehicleControlTest.scala +++ b/src/test/scala/objects/VehicleControlTest.scala @@ -330,25 +330,6 @@ class VehicleControlMountingBlockedExosuitTest extends ActorTest { override def VehicleEvents: 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) vehicle.Faction = PlanetSideEmpire.TR vehicle.GUID = PlanetSideGUID(10) @@ -379,28 +360,28 @@ class VehicleControlMountingBlockedExosuitTest extends ActorTest { val probe = new TestProbe(system) // disallow 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 - 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 - 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 - checkCanNotMount(probe, "Agile in MAX-only mount") + VehicleControlTest.checkCanNotMount(probe, "Agile in MAX-only mount") //allow 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 vehicle.Actor.tell(Mountable.TryDismount(player1, 0), probe.ref) probe.receiveOne(500 milliseconds) //discard vehicle.Owner = None //ensure vehicle.OwnerName = None //ensure 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 - 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 - 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 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 fury_dm = Vehicle(GlobalDefinitions.fury).DamageModel // 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 { val vehicle = Vehicle(GlobalDefinitions.fury) //guid=2 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 guid = new NumberPoolHub(new MaxNumberSource(15)) val pool = Pool(EnvironmentAttribute.Water, DeepSquare(-1, 10, 10, 0, 0)) @@ -694,7 +675,7 @@ class VehicleControlInteractWithWaterPartialTest extends ActorTest { class VehicleControlInteractWithWaterTest extends ActorTest { val vehicle = Vehicle(GlobalDefinitions.fury) //guid=2 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 vehicleProbe = TestProbe() val guid = new NumberPoolHub(new MaxNumberSource(15)) @@ -765,7 +746,7 @@ class VehicleControlInteractWithWaterTest extends ActorTest { class VehicleControlStopInteractWithWaterTest extends ActorTest { val vehicle = Vehicle(GlobalDefinitions.fury) //guid=2 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 guid = new NumberPoolHub(new MaxNumberSource(15)) val pool = Pool(EnvironmentAttribute.Water, DeepSquare(-1, 10, 10, 0, 0)) @@ -829,7 +810,7 @@ class VehicleControlStopInteractWithWaterTest extends ActorTest { class VehicleControlInteractWithLavaTest extends ActorTest { val vehicle = Vehicle(GlobalDefinitions.fury) //guid=2 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 vehicleProbe = TestProbe() val guid = new NumberPoolHub(new MaxNumberSource(15)) @@ -890,7 +871,7 @@ class VehicleControlInteractWithLavaTest extends ActorTest { class VehicleControlInteractWithDeathTest extends ActorTest { val vehicle = Vehicle(GlobalDefinitions.fury) //guid=2 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 pool = Pool(EnvironmentAttribute.Death, DeepSquare(-1, 10, 10, 0, 0)) val zone = new Zone( @@ -937,11 +918,10 @@ class VehicleControlInteractWithDeathTest extends ActorTest { object VehicleControlTest { import net.psforever.objects.avatar.Avatar - import net.psforever.types.{CharacterGender, 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) + import net.psforever.types.{CharacterSex, PlanetSideEmpire} + 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 = { val reply = probe.receiveOne(Duration.create(250, "ms")) diff --git a/src/test/scala/objects/VehicleTest.scala b/src/test/scala/objects/VehicleTest.scala index 87bd79c6..3293946b 100644 --- a/src/test/scala/objects/VehicleTest.scala +++ b/src/test/scala/objects/VehicleTest.scala @@ -307,8 +307,8 @@ class VehicleTest extends Specification { object VehicleTest { 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) } diff --git a/src/test/scala/objects/VitalityTest.scala b/src/test/scala/objects/VitalityTest.scala index e8aab79b..da8a2408 100644 --- a/src/test/scala/objects/VitalityTest.scala +++ b/src/test/scala/objects/VitalityTest.scala @@ -20,7 +20,7 @@ class VitalityTest extends Specification { val vSource = VehicleSource(vehicle) "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 projectile = Projectile(proj, wep, wep_fmode, player, Vector3(2, 2, 0), Vector3.Zero) val resprojectile = DamageInteraction( @@ -47,7 +47,7 @@ class VitalityTest extends Specification { } "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) 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 { - 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 projectile = Projectile(proj, wep, wep_fmode, player, Vector3(2, 2, 0), Vector3.Zero) val resprojectile = DamageInteraction( diff --git a/src/test/scala/objects/ZoneTest.scala b/src/test/scala/objects/ZoneTest.scala index e754e594..77a5bd78 100644 --- a/src/test/scala/objects/ZoneTest.scala +++ b/src/test/scala/objects/ZoneTest.scala @@ -217,7 +217,7 @@ class ZonePopulationTest extends ActorTest { 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) player.GUID = PlanetSideGUID(1) zone.actor = system.spawn(ZoneActor(zone), ZoneTest.TestName) @@ -237,7 +237,7 @@ class ZonePopulationTest extends ActorTest { val zone = new Zone("test", new ZoneMap(""), 0) { 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) player.GUID = PlanetSideGUID(1) zone.actor = system.spawn(ZoneActor(zone), ZoneTest.TestName) @@ -257,7 +257,7 @@ class ZonePopulationTest extends ActorTest { /* TODO they need AvatarActor, which has further dependencies "associate user with a character" in { 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) player.GUID = PlanetSideGUID(1) zone.actor = system.spawn(ZoneActor(zone), ZoneTest.TestName) @@ -278,7 +278,7 @@ class ZonePopulationTest extends ActorTest { "disassociate character from a user" in { 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) player.GUID = PlanetSideGUID(1) 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 { 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) player.GUID = PlanetSideGUID(1) 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 { 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) player1.GUID = PlanetSideGUID(1) val player2 = Player(avatar) @@ -354,7 +354,7 @@ class ZonePopulationTest extends ActorTest { "user tries to Spawn a character, but did not Join first" in { 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) player.GUID = PlanetSideGUID(1) zone.actor = system.spawn(ZoneActor(zone), ZoneTest.TestName) @@ -376,7 +376,7 @@ class ZonePopulationTest extends ActorTest { val zone = new Zone("test", new ZoneMap(""), 0) { 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) player.GUID = PlanetSideGUID(1) zone.actor = system.spawn(ZoneActor(zone), ZoneTest.TestName) @@ -402,7 +402,7 @@ class ZonePopulationTest extends ActorTest { val zone = new Zone("test", new ZoneMap(""), 0) { 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.Release zone.actor = system.spawn(ZoneActor(zone), ZoneTest.TestName) @@ -419,7 +419,7 @@ class ZonePopulationTest extends ActorTest { val zone = new Zone("test", new ZoneMap(""), 0) { 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.Release zone.actor = system.spawn(ZoneActor(zone), ZoneTest.TestName) @@ -438,13 +438,13 @@ class ZonePopulationTest extends ActorTest { val zone = new Zone("test", new ZoneMap(""), 0) { 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.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.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.Release zone.actor = system.spawn(ZoneActor(zone), ZoneTest.TestName) @@ -469,7 +469,7 @@ class ZonePopulationTest extends ActorTest { val zone = new Zone("test", new ZoneMap(""), 0) { 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.Release !!important zone.actor = system.spawn(ZoneActor(zone), ZoneTest.TestName) diff --git a/src/test/scala/objects/guidtask/GUIDTaskRegisterAvatarTest.scala b/src/test/scala/objects/guidtask/GUIDTaskRegisterAvatarTest.scala index d791a6b8..4f4171fa 100644 --- a/src/test/scala/objects/guidtask/GUIDTaskRegisterAvatarTest.scala +++ b/src/test/scala/objects/guidtask/GUIDTaskRegisterAvatarTest.scala @@ -6,12 +6,12 @@ import net.psforever.objects._ import net.psforever.objects.avatar.Avatar import net.psforever.objects.guid.{GUIDTask, TaskResolver} import net.psforever.objects.locker.LockerEquipment -import net.psforever.types.{CharacterGender, CharacterVoice, PlanetSideEmpire} +import net.psforever.types.{CharacterSex, CharacterVoice, PlanetSideEmpire} class GUIDTaskRegisterAvatarTest extends ActorTest { "RegisterAvatar" in { 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) obj.Slot(0).Equipment = obj_wep val obj_wep_ammo = AmmoBox(GlobalDefinitions.energy_cell) diff --git a/src/test/scala/objects/guidtask/GUIDTaskRegisterPlayerTest.scala b/src/test/scala/objects/guidtask/GUIDTaskRegisterPlayerTest.scala index 53ad4752..bb9ba900 100644 --- a/src/test/scala/objects/guidtask/GUIDTaskRegisterPlayerTest.scala +++ b/src/test/scala/objects/guidtask/GUIDTaskRegisterPlayerTest.scala @@ -6,12 +6,12 @@ import net.psforever.objects._ import net.psforever.objects.avatar.Avatar import net.psforever.objects.guid.{GUIDTask, TaskResolver} import net.psforever.objects.locker.LockerEquipment -import net.psforever.types.{CharacterGender, CharacterVoice, PlanetSideEmpire} +import net.psforever.types.{CharacterSex, CharacterVoice, PlanetSideEmpire} class GUIDTaskRegisterPlayerTest extends ActorTest { "RegisterPlayer" in { 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) obj.Slot(0).Equipment = obj_wep val obj_wep_ammo = AmmoBox(GlobalDefinitions.energy_cell) diff --git a/src/test/scala/objects/guidtask/GUIDTaskUnregisterAvatarTest.scala b/src/test/scala/objects/guidtask/GUIDTaskUnregisterAvatarTest.scala index aff46a39..9121e317 100644 --- a/src/test/scala/objects/guidtask/GUIDTaskUnregisterAvatarTest.scala +++ b/src/test/scala/objects/guidtask/GUIDTaskUnregisterAvatarTest.scala @@ -6,12 +6,12 @@ import net.psforever.objects._ import net.psforever.objects.avatar.Avatar import net.psforever.objects.guid.{GUIDTask, TaskResolver} import net.psforever.objects.locker.LockerEquipment -import net.psforever.types.{CharacterGender, CharacterVoice, PlanetSideEmpire} +import net.psforever.types.{CharacterSex, CharacterVoice, PlanetSideEmpire} class GUIDTaskUnregisterAvatarTest extends ActorTest { "UnregisterAvatar" in { 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) obj.Slot(0).Equipment = obj_wep val obj_wep_ammo = AmmoBox(GlobalDefinitions.energy_cell) diff --git a/src/test/scala/objects/guidtask/GUIDTaskUnregisterPlayerTest.scala b/src/test/scala/objects/guidtask/GUIDTaskUnregisterPlayerTest.scala index 4c62dc0b..a10df710 100644 --- a/src/test/scala/objects/guidtask/GUIDTaskUnregisterPlayerTest.scala +++ b/src/test/scala/objects/guidtask/GUIDTaskUnregisterPlayerTest.scala @@ -6,12 +6,12 @@ import net.psforever.objects._ import net.psforever.objects.avatar.Avatar import net.psforever.objects.guid.{GUIDTask, TaskResolver} import net.psforever.objects.locker.LockerEquipment -import net.psforever.types.{CharacterGender, CharacterVoice, PlanetSideEmpire} +import net.psforever.types.{CharacterSex, CharacterVoice, PlanetSideEmpire} class GUIDTaskUnregisterPlayerTest extends ActorTest { "UnregisterPlayer" in { 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) obj.Slot(0).Equipment = obj_wep val obj_wep_ammo = AmmoBox(GlobalDefinitions.energy_cell) diff --git a/src/test/scala/objects/terminal/ImplantTerminalMechTest.scala b/src/test/scala/objects/terminal/ImplantTerminalMechTest.scala index 4e1da10a..eb046576 100644 --- a/src/test/scala/objects/terminal/ImplantTerminalMechTest.scala +++ b/src/test/scala/objects/terminal/ImplantTerminalMechTest.scala @@ -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.terminals.Terminal 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 scala.concurrent.duration.Duration @@ -46,7 +46,7 @@ class ImplantTerminalMechTest extends Specification { } "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) obj.PassengerInSeat(player).isEmpty mustEqual true obj.Seats(0).mount(player) @@ -87,11 +87,11 @@ class ImplantTerminalMechControl2Test extends ActorTest { } class ImplantTerminalMechControl3Test extends ActorTest { - import net.psforever.types.CharacterGender + import net.psforever.types.CharacterSex "ImplantTerminalMechControl" should { "block a player from mounting" in { 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) receiveOne(Duration.create(100, "ms")) //consume reply @@ -183,6 +183,6 @@ object ImplantTerminalMechTest { map.linkTerminalToInterface(1, 2) 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) } } diff --git a/src/test/scala/objects/terminal/MatrixTerminalTest.scala b/src/test/scala/objects/terminal/MatrixTerminalTest.scala index 2a531556..47f1ac36 100644 --- a/src/test/scala/objects/terminal/MatrixTerminalTest.scala +++ b/src/test/scala/objects/terminal/MatrixTerminalTest.scala @@ -21,7 +21,7 @@ class MatrixTerminalTest extends Specification { } "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 terminal = Terminal(new MatrixTerminalDefinition(519)) terminal.Owner = Vehicle(GlobalDefinitions.quadstealth) diff --git a/src/test/scala/objects/terminal/OrderTerminalTest.scala b/src/test/scala/objects/terminal/OrderTerminalTest.scala index dd4a3a8a..51f5df9e 100644 --- a/src/test/scala/objects/terminal/OrderTerminalTest.scala +++ b/src/test/scala/objects/terminal/OrderTerminalTest.scala @@ -11,7 +11,7 @@ import net.psforever.types._ import org.specs2.mutable.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 building = new Building( diff --git a/src/test/scala/objects/terminal/ProximityTest.scala b/src/test/scala/objects/terminal/ProximityTest.scala index b7f31d67..8df74b1c 100644 --- a/src/test/scala/objects/terminal/ProximityTest.scala +++ b/src/test/scala/objects/terminal/ProximityTest.scala @@ -17,7 +17,7 @@ import net.psforever.objects.serverobject.terminals.{ } import net.psforever.objects.zones.{Zone, ZoneMap} 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 net.psforever.services.Service import net.psforever.services.local.LocalService @@ -41,7 +41,7 @@ class ProximityTest extends Specification { ProximityTest.avatarId.getAndIncrement(), "TestCharacter1", PlanetSideEmpire.VS, - CharacterGender.Female, + CharacterSex.Female, 1, CharacterVoice.Voice1 ) @@ -54,7 +54,7 @@ class ProximityTest extends Specification { ProximityTest.avatarId.getAndIncrement(), "TestCharacter2", PlanetSideEmpire.VS, - CharacterGender.Female, + CharacterSex.Female, 1, CharacterVoice.Voice1 ) @@ -77,7 +77,7 @@ class ProximityTest extends Specification { ProximityTest.avatarId.getAndIncrement(), "TestCharacter1", PlanetSideEmpire.VS, - CharacterGender.Female, + CharacterSex.Female, 1, CharacterVoice.Voice1 ) @@ -90,7 +90,7 @@ class ProximityTest extends Specification { ProximityTest.avatarId.getAndIncrement(), "TestCharacter2", PlanetSideEmpire.VS, - CharacterGender.Female, + CharacterSex.Female, 1, CharacterVoice.Voice1 ) @@ -118,7 +118,7 @@ class ProximityTest extends Specification { ProximityTest.avatarId.getAndIncrement(), "TestCharacter1", PlanetSideEmpire.VS, - CharacterGender.Female, + CharacterSex.Female, 1, CharacterVoice.Voice1 ) @@ -140,7 +140,7 @@ class ProximityTest extends Specification { ProximityTest.avatarId.getAndIncrement(), "TestCharacter1", PlanetSideEmpire.VS, - CharacterGender.Female, + CharacterSex.Female, 1, CharacterVoice.Voice1 ) @@ -184,7 +184,7 @@ class ProximityTerminalControlStartTest extends ActorTest { ProximityTest.avatarId.getAndIncrement(), "TestCharacter1", PlanetSideEmpire.VS, - CharacterGender.Female, + CharacterSex.Female, 1, CharacterVoice.Voice1 ) @@ -235,7 +235,7 @@ class ProximityTerminalControlTwoUsersTest extends ActorTest { ProximityTest.avatarId.getAndIncrement(), "TestCharacter1", PlanetSideEmpire.VS, - CharacterGender.Female, + CharacterSex.Female, 1, CharacterVoice.Voice1 ) @@ -249,7 +249,7 @@ class ProximityTerminalControlTwoUsersTest extends ActorTest { ProximityTest.avatarId.getAndIncrement(), "TestCharacter2", PlanetSideEmpire.VS, - CharacterGender.Female, + CharacterSex.Female, 1, CharacterVoice.Voice1 ) @@ -307,7 +307,7 @@ class ProximityTerminalControlStopTest extends ActorTest { ProximityTest.avatarId.getAndIncrement(), "TestCharacter1", PlanetSideEmpire.VS, - CharacterGender.Female, + CharacterSex.Female, 1, CharacterVoice.Voice1 ) @@ -361,7 +361,7 @@ class ProximityTerminalControlNotStopTest extends ActorTest { ProximityTest.avatarId.getAndIncrement(), "TestCharacter1", PlanetSideEmpire.VS, - CharacterGender.Female, + CharacterSex.Female, 1, CharacterVoice.Voice1 ) @@ -375,7 +375,7 @@ class ProximityTerminalControlNotStopTest extends ActorTest { ProximityTest.avatarId.getAndIncrement(), "TestCharacter2", PlanetSideEmpire.VS, - CharacterGender.Female, + CharacterSex.Female, 1, CharacterVoice.Voice1 ) diff --git a/src/test/scala/objects/terminal/TerminalControlTest.scala b/src/test/scala/objects/terminal/TerminalControlTest.scala index 3f8c45ae..b236b5c2 100644 --- a/src/test/scala/objects/terminal/TerminalControlTest.scala +++ b/src/test/scala/objects/terminal/TerminalControlTest.scala @@ -143,6 +143,6 @@ object TerminalControlTest { GlobalDefinitions.building ) 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) } } From 2fbe9267252954fc6cc8be51b9d4c29c3fe63f2f Mon Sep 17 00:00:00 2001 From: "Jason_DiDonato@yahoo.com" Date: Mon, 22 Mar 2021 17:45:35 -0400 Subject: [PATCH 3/4] tweaks for 'gender -> sex' change --- src/main/scala/net/psforever/actors/session/AvatarActor.scala | 2 +- src/main/scala/net/psforever/actors/session/SessionActor.scala | 2 +- src/main/scala/net/psforever/persistence/Avatar.scala | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/scala/net/psforever/actors/session/AvatarActor.scala b/src/main/scala/net/psforever/actors/session/AvatarActor.scala index 460efe18..954e5b6e 100644 --- a/src/main/scala/net/psforever/actors/session/AvatarActor.scala +++ b/src/main/scala/net/psforever/actors/session/AvatarActor.scala @@ -306,7 +306,7 @@ class AvatarActor( _.factionId -> lift(empire.id), _.headId -> lift(head), _.voiceId -> lift(voice.id), - _.genderId -> lift(gender.id), + _.genderId -> lift(gender.value), _.bep -> lift(Config.app.game.newAvatar.br.experience), _.cep -> lift(Config.app.game.newAvatar.cr.experience) ) diff --git a/src/main/scala/net/psforever/actors/session/SessionActor.scala b/src/main/scala/net/psforever/actors/session/SessionActor.scala index a414e69b..f8da832f 100644 --- a/src/main/scala/net/psforever/actors/session/SessionActor.scala +++ b/src/main/scala/net/psforever/actors/session/SessionActor.scala @@ -8593,7 +8593,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con * @return a tuple composed of an `ActorRef` destination and a message to send to that destination */ def LoadZoneInVehicleAsPassenger(vehicle: Vehicle, zoneId: String): Unit = { - val msg: String = s"${player.Name} loading into $zoneId as the passenger of a ${vehicle.Definition.Name}\"" + val msg: String = s"${player.Name} loading into $zoneId as the passenger of a ${vehicle.Definition.Name}" log.info(msg) log.debug(s"LoadZoneInVehicleAsPassenger: $msg") if (!zoneReload && zoneId == continent.id) { diff --git a/src/main/scala/net/psforever/persistence/Avatar.scala b/src/main/scala/net/psforever/persistence/Avatar.scala index be0cf099..24dae5f1 100644 --- a/src/main/scala/net/psforever/persistence/Avatar.scala +++ b/src/main/scala/net/psforever/persistence/Avatar.scala @@ -27,7 +27,7 @@ case class Avatar( id, name, PlanetSideEmpire(factionId), - CharacterSex(genderId), + CharacterSex.valuesToEntriesMap(genderId), headId, CharacterVoice(voiceId), bep, From eea549707a6387ebc2307c01b9382ae5a566c125 Mon Sep 17 00:00:00 2001 From: "Jason_DiDonato@yahoo.com" Date: Thu, 25 Mar 2021 15:15:51 -0400 Subject: [PATCH 4/4] added other logging filters, include a custom one for suppressing duplicate messages within a time period --- build.sbt | 3 +- config/logback.xml | 35 +- ...ApplyCooldownToDuplicateLoggingFilter.java | 77 ++++ .../psforever/filters/LoggerPrefixFilter.java | 5 +- .../net/psforever/actors/net/LoginActor.scala | 2 +- .../actors/net/MiddlewareActor.scala | 2 +- .../actors/session/AvatarActor.scala | 4 +- .../actors/session/SessionActor.scala | 370 +++++++++--------- .../net/psforever/objects/Deployables.scala | 32 +- .../net/psforever/objects/Vehicles.scala | 2 +- .../serverobject/painbox/PainboxControl.scala | 2 +- .../resourcesilo/ResourceSiloControl.scala | 2 +- .../terminals/CaptureTerminals.scala | 2 +- .../terminals/capture/CaptureTerminals.scala | 2 +- .../serverobject/turret/WeaponTurrets.scala | 2 +- .../objects/vehicles/CargoBehavior.scala | 9 +- .../account/AccountIntermediaryService.scala | 4 - .../account/AccountPersistenceService.scala | 1 - .../services/avatar/AvatarService.scala | 4 - .../local/support/HackCaptureActor.scala | 8 +- .../local/support/HackClearActor.scala | 4 +- .../properties/PropertyOverrideManager.scala | 6 +- src/test/scala/objects/EnvironmentTest.scala | 4 +- .../scala/objects/OrbitalShuttleTest.scala | 8 +- 24 files changed, 353 insertions(+), 237 deletions(-) create mode 100644 server/src/main/java/net/psforever/filters/ApplyCooldownToDuplicateLoggingFilter.java diff --git a/build.sbt b/build.sbt index 4fece775..faa1f4c7 100644 --- a/build.sbt +++ b/build.sbt @@ -79,7 +79,8 @@ lazy val psforeverSettings = Seq( "io.circe" %% "circe-generic" % "0.13.0", "io.circe" %% "circe-parser" % "0.13.0", "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 coverageExcludedPackages := "net\\.psforever\\.actors\\.session\\.SessionActor.*" diff --git a/config/logback.xml b/config/logback.xml index 65059390..60bcdffd 100644 --- a/config/logback.xml +++ b/config/logback.xml @@ -14,12 +14,24 @@ logs/psforever-general_${bySecond}.log logs/psforever-general_%d{yyyy-MM-dd}.gz - 40 + 60 10GB - %date{ISO8601} %5level "%X" %logger{35} - %msg%n + %date{ISO8601} %5level %logger{35} - %msg%n + + + + encrypted + + Unexpected packet type EncryptedPacket + + encrypted.matches(formattedMessage) + + DENY + NEUTRAL + com.github.jasync.sql.db.postgresql.codec @@ -88,6 +103,18 @@ WARN + + + + encrypted + + Unexpected packet type EncryptedPacket + + encrypted.matches(formattedMessage) + + DENY + NEUTRAL +
diff --git a/server/src/main/java/net/psforever/filters/ApplyCooldownToDuplicateLoggingFilter.java b/server/src/main/java/net/psforever/filters/ApplyCooldownToDuplicateLoggingFilter.java new file mode 100644 index 00000000..38a77d02 --- /dev/null +++ b/server/src/main/java/net/psforever/filters/ApplyCooldownToDuplicateLoggingFilter.java @@ -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 { + private long cooldown; + private ConcurrentHashMap 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 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(); + } +} diff --git a/server/src/main/java/net/psforever/filters/LoggerPrefixFilter.java b/server/src/main/java/net/psforever/filters/LoggerPrefixFilter.java index efc21796..851b3282 100644 --- a/server/src/main/java/net/psforever/filters/LoggerPrefixFilter.java +++ b/server/src/main/java/net/psforever/filters/LoggerPrefixFilter.java @@ -9,7 +9,9 @@ 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 is occasionally appear in an abbreviated form. + * 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 { private String prefix; @@ -27,6 +29,7 @@ public class LoggerPrefixFilter extends Filter { this.prefix = name; } + @Override public void start() { if (this.prefix != null) { super.start(); diff --git a/src/main/scala/net/psforever/actors/net/LoginActor.scala b/src/main/scala/net/psforever/actors/net/LoginActor.scala index 271525f9..dc6cd398 100644 --- a/src/main/scala/net/psforever/actors/net/LoginActor.scala +++ b/src/main/scala/net/psforever/actors/net/LoginActor.scala @@ -196,7 +196,7 @@ class LoginActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], conne } 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( LoginRespMessage( newToken, diff --git a/src/main/scala/net/psforever/actors/net/MiddlewareActor.scala b/src/main/scala/net/psforever/actors/net/MiddlewareActor.scala index 470ca404..80381a7f 100644 --- a/src/main/scala/net/psforever/actors/net/MiddlewareActor.scala +++ b/src/main/scala/net/psforever/actors/net/MiddlewareActor.scala @@ -295,7 +295,7 @@ class MiddlewareActor( Behaviors.same 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 Behaviors.same diff --git a/src/main/scala/net/psforever/actors/session/AvatarActor.scala b/src/main/scala/net/psforever/actors/session/AvatarActor.scala index 954e5b6e..38fecd82 100644 --- a/src/main/scala/net/psforever/actors/session/AvatarActor.scala +++ b/src/main/scala/net/psforever/actors/session/AvatarActor.scala @@ -326,7 +326,7 @@ class AvatarActor( result.onComplete { 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) sendAvatars(account) case Failure(e) => log.error(e)("db failure") @@ -353,7 +353,7 @@ class AvatarActor( result.onComplete { case Success(_) => - log.debug(s"avatar $id deleted") + log.debug(s"AvatarActor: avatar $id deleted") sessionActor ! SessionActor.SendResponse(ActionResultMessage.Pass) sendAvatars(account) case Failure(e) => log.error(e)("db failure") diff --git a/src/main/scala/net/psforever/actors/session/SessionActor.scala b/src/main/scala/net/psforever/actors/session/SessionActor.scala index f8da832f..f313a819 100644 --- a/src/main/scala/net/psforever/actors/session/SessionActor.scala +++ b/src/main/scala/net/psforever/actors/session/SessionActor.scala @@ -354,12 +354,17 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con None } + case Some(obj) if obj.HasGUID && obj.GUID != id.get => + log.error(s"ValidObject: ${player.Name} found an object that isn't the one ${player.Sex.pronounSubject} thought it was in zone ${continent.id}") + log.debug(s"ValidObject: potentially fatal error in ${continent.id} - requested ${id.get}, got ${obj.Definition.Name} with ${obj.GUID}; GUID mismatch") + None + case out @ Some(obj) if obj.HasGUID => out case None if id.nonEmpty && id.get != PlanetSideGUID(0) => //delete stale entity reference from client - log.warn(s"${player.Name} has an invalid reference to GUID ${id.get.guid} in zone ${continent.id}") + log.error(s"${player.Name} has an invalid reference to GUID ${id.get.guid} in zone ${continent.id}") sendResponse(ObjectDeleteMessage(id.get, 0)) None @@ -419,8 +424,8 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con case SetSpeed(speed) => session = session.copy(speed = speed) - case SetFlying(flying) => - session = session.copy(flying = flying) + case SetFlying(_flying) => + session = session.copy(flying = _flying) case SetSpectator(spectator) => session.player.spectator = spectator @@ -703,7 +708,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con ourMember.ZoneId, unk7 = 0 ) - ) //repeat of our entry + ) val playerGuid = player.GUID //turn lfs off val factionChannel = s"${player.Faction}" @@ -932,7 +937,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con } case Zone.Population.PlayerHasLeft(zone, None) => - log.trace(s"${avatar.name} does not have a body on ${zone.id}") + log.trace(s"PlayerHasLeft: ${avatar.name} does not have a body on ${zone.id}") case Zone.Population.PlayerHasLeft(zone, Some(tplayer)) => if (tplayer.isAlive) { @@ -955,8 +960,10 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con cluster ! ICS.GetInstantActionSpawnPoint(player.Faction, context.self) }) - case _ => - log.warn(s"SpawnPointResponse: ${player.Name}'s zoning was not in order at the time a response was received; attempting to guess what ${player.Sex.pronounSubject} wants to do") + case ztype => + if (ztype != Zoning.Method.None) { + log.warn(s"SpawnPointResponse: ${player.Name}'s zoning was not in order at the time a response was received; attempting to guess what ${player.Sex.pronounSubject} wants to do") + } val previousZoningType = zoningType CancelZoningProcess() PlayerActionsToCancel() @@ -1195,7 +1202,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con case Zone.Nowhere => RequestSanctuaryZoneSpawn(player, currentZone = 0) case zone => - log.trace(s"zone ${zone.id} will now load for ${player.Name}") + log.trace(s"ZoneResponse: zone ${zone.id} will now load for ${player.Name}") loadConfZone = true val oldZone = continent session = session.copy(zone = zone) @@ -1219,7 +1226,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con } case ICS.ZoneResponse(zone) => - log.trace(s"Zone ${zone.get.id} will now load for ${player.Name}") + log.trace(s"ZoneResponse: zone ${zone.get.id} will now load for ${player.Name}") loadConfZone = true val oldZone = session.zone session = session.copy(zone = zone.get) @@ -1240,7 +1247,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con case NewPlayerLoaded(tplayer) => //new zone - log.info(s"Player ${tplayer.Name} has spawned into ${tplayer.Zone.id}") + log.info(s"${tplayer.Name} has spawned into ${session.zone.id}") tplayer.avatar = avatar session = session.copy(player = tplayer) avatarActor ! AvatarActor.CreateImplants() @@ -1517,10 +1524,10 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con _: Int, _: Option[Equipment] ) => - log.trace(s"$msg") + log.debug(s"ItemPutInSlot: $msg") case msg @ Containable.CanNotPutItemInSlot(_: PlanetSideServerObject with Container, _: Equipment, _: Int) => - log.trace(s"$msg") + log.debug(s"CanNotPutItemInSlot: $msg") case default => log.warn(s"Invalid packet class received: $default from ${sender()}") @@ -1629,6 +1636,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con * @param spawnPosition the destination drop position */ def LoadZoneLaunchDroppod(zone: Zone, spawnPosition: Vector3): Unit = { + log.info(s"${player.Name} is launching to ${zone.id} in ${player.Sex.possessive} droppod") CancelZoningProcess() PlayerActionsToCancel() CancelAllProximityUnits() @@ -1707,6 +1715,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con case AvatarResponse.Revive(target_guid) => if (tplayer_guid == target_guid) { + log.info(s"No time for rest, ${player.Name}. Back on your feet!") reviveTimer.cancel() deadState = DeadState.Alive player.Revive @@ -1982,14 +1991,16 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con case AvatarResponse.WeaponDryFire(weapon_guid) => if (tplayer_guid != guid) { - // Check that the magazine is still empty before sending WeaponDryFireMessage - // As it could have been reloaded since the packet was dispatched, which would make other clients not see it firing continent.GUID(weapon_guid) match { case Some(tool: Tool) => + // check that the magazine is still empty before sending WeaponDryFireMessage + // if it has been reloaded since then, other clients not see it firing if (tool.Magazine == 0) { sendResponse(WeaponDryFireMessage(weapon_guid)) } - case _ => ; + case Some(_) => + sendResponse(WeaponDryFireMessage(weapon_guid)) + case None => ; } } @@ -2124,7 +2135,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con /** * Enforce constraints on bulk purchases as determined by a given player's previous purchase times and hard acquisition delays. - * Intended to assist in sanitizing loadout information from the perspectvie of the player, or target owner. + * Intended to assist in sanitizing loadout information from the perspective of the player, or target owner. * The equipment is expected to be unregistered and already fitted to their ultimate slot in the target container. * @param player the player whose purchasing constraints are to be tested * @param target the location in which the equipment will be stowed @@ -2200,14 +2211,14 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con case LocalResponse.DoorCloses(door_guid) => //door closes for everyone sendResponse(GenericObjectStateMsg(door_guid, 17)) - case LocalResponse.EliminateDeployable(obj: TurretDeployable, guid, pos) => + case LocalResponse.EliminateDeployable(obj: TurretDeployable, dguid, pos) => if (obj.Destroyed) { - DeconstructDeployable(obj, guid, pos) + DeconstructDeployable(obj, dguid, pos) } else { obj.Destroyed = true DeconstructDeployable( obj, - guid, + dguid, pos, obj.Orientation, if (obj.MountPoints.isEmpty) 2 @@ -2215,28 +2226,28 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con ) } - case LocalResponse.EliminateDeployable(obj: ExplosiveDeployable, guid, pos) => + case LocalResponse.EliminateDeployable(obj: ExplosiveDeployable, dguid, pos) => if (obj.Destroyed || obj.Jammed || obj.Health == 0) { - DeconstructDeployable(obj, guid, pos) + DeconstructDeployable(obj, dguid, pos) } else { obj.Destroyed = true - DeconstructDeployable(obj, guid, pos, obj.Orientation, 2) + DeconstructDeployable(obj, dguid, pos, obj.Orientation, 2) } - case LocalResponse.EliminateDeployable(obj: ComplexDeployable, guid, pos) => + case LocalResponse.EliminateDeployable(obj: ComplexDeployable, dguid, pos) => if (obj.Destroyed) { - DeconstructDeployable(obj, guid, pos) + DeconstructDeployable(obj, dguid, pos) } else { obj.Destroyed = true - DeconstructDeployable(obj, guid, pos, obj.Orientation, 1) + DeconstructDeployable(obj, dguid, pos, obj.Orientation, 1) } - case LocalResponse.EliminateDeployable(obj: TelepadDeployable, guid, pos) => + case LocalResponse.EliminateDeployable(obj: TelepadDeployable, dguid, pos) => //if active, deactivate if (obj.Active) { obj.Active = false - sendResponse(GenericObjectActionMessage(guid, 29)) - sendResponse(GenericObjectActionMessage(guid, 30)) + sendResponse(GenericObjectActionMessage(dguid, 29)) + sendResponse(GenericObjectActionMessage(dguid, 30)) } //determine if no replacement teleport system exists continent.GUID(obj.Router) match { @@ -2245,7 +2256,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con if ( router.Utility(UtilityType.internal_router_telepad_deployable) match { case Some(internalTelepad: Utility.InternalTelepad) => - internalTelepad.Telepad.contains(guid) //same telepad + internalTelepad.Telepad.contains(dguid) //same telepad case _ => true } ) { @@ -2256,22 +2267,22 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con } //standard deployable elimination behavior if (obj.Destroyed) { - DeconstructDeployable(obj, guid, pos) + DeconstructDeployable(obj, dguid, pos) } else { obj.Destroyed = true - DeconstructDeployable(obj, guid, pos, obj.Orientation, 2) + DeconstructDeployable(obj, dguid, pos, obj.Orientation, 2) } - case LocalResponse.EliminateDeployable(obj, guid, pos) => + case LocalResponse.EliminateDeployable(obj, dguid, pos) => if (obj.Destroyed) { - DeconstructDeployable(obj, guid, pos) + DeconstructDeployable(obj, dguid, pos) } else { obj.Destroyed = true - DeconstructDeployable(obj, guid, pos, obj.Orientation, 2) + DeconstructDeployable(obj, dguid, pos, obj.Orientation, 2) } case LocalResponse.SendHackMessageHackCleared(target_guid, unk1, unk2) => - log.trace(s"Clearing hack for ${target_guid}") + //log.trace(s"Clearing hack for $target_guid") case LocalResponse.HackObject(target_guid, unk1, unk2) => HackObject(target_guid, unk1, unk2) @@ -2413,6 +2424,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con case Mountable.CanMount(obj: FacilityTurret, seat_number, mount_point) => CancelZoningProcessWithDescriptiveReason("cancel_mount") if (!obj.isUpgrading) { + log.info(s"${player.Name} mounts ${obj.Definition.Name}") if (obj.Definition == GlobalDefinitions.vanu_sentry_turret) { obj.Zone.LocalEvents ! LocalServiceMessage(obj.Zone.id, LocalAction.SetEmpire(obj.GUID, player.Faction)) } @@ -2458,6 +2470,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con else { //get ready for orbital drop DismountAction(tplayer, obj, seat_num) + log.info(s"${player.Name} is prepped for dropping") //DismountAction(...) uses vehicle service, so use that service to coordinate the remainder of the messages continent.VehicleEvents ! VehicleServiceMessage( player.Name, @@ -2698,8 +2711,9 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con ) } - case VehicleResponse.KickPassenger(seat_num, wasKickedByDriver, vehicle_guid) => - // seat_num seems to be correct if passenger is kicked manually by driver, but always seems to return 4 if user is kicked by mount permissions + case VehicleResponse.KickPassenger(_, wasKickedByDriver, vehicle_guid) => + //seat number (first field) seems to be correct if passenger is kicked manually by driver + //but always seems to return 4 if user is kicked by mount permissions changing sendResponse(DismountVehicleMsg(guid, BailType.Kicked, wasKickedByDriver)) player.VehicleSeated = None if (tplayer_guid == guid) { @@ -2858,14 +2872,14 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con DriverVehicleControl(vehicle, vehicle.Definition.AutoPilotSpeed2) case VehicleResponse.PeriodicReminder(cause, data) => - val msg: String = (cause match { + val msg: String = cause match { case VehicleSpawnPad.Reminders.Blocked => s"The vehicle spawn where you placed your order is blocked. ${data.getOrElse("")}" case VehicleSpawnPad.Reminders.Queue => - s"Your position in the vehicle spawn queue is ${data.getOrElse("last")}." + s"Your position in the vehicle spawn queue is ${data.getOrElse("dead last")}." case VehicleSpawnPad.Reminders.Cancelled => "Your vehicle order has been cancelled." - }) + } sendResponse(ChatMsg(ChatMessageType.CMT_OPEN, true, "", msg, None)) case VehicleResponse.ChangeLoadout(target, old_weapons, added_weapons, old_inventory, new_inventory) => @@ -2875,23 +2889,23 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con if (player.avatar.vehicle.contains(target)) { //owner: must unregister old equipment, and register and install new equipment (old_weapons ++ old_inventory).foreach { - case (obj, guid) => - sendResponse(ObjectDeleteMessage(guid, 0)) + case (obj, eguid) => + sendResponse(ObjectDeleteMessage(eguid, 0)) continent.tasks ! GUIDTask.UnregisterEquipment(obj)(continent.GUID) } ApplyPurchaseTimersBeforePackingLoadout(player, vehicle, added_weapons ++ new_inventory) } else if (accessedContainer.contains(target)) { //external participant: observe changes to equipment - (old_weapons ++ old_inventory).foreach { case (_, guid) => sendResponse(ObjectDeleteMessage(guid, 0)) } + (old_weapons ++ old_inventory).foreach { case (_, eguid) => sendResponse(ObjectDeleteMessage(eguid, 0)) } } vehicle.PassengerInSeat(player) match { case Some(seatNum) => //participant: observe changes to equipment - (old_weapons ++ old_inventory).foreach { case (_, guid) => sendResponse(ObjectDeleteMessage(guid, 0)) } + (old_weapons ++ old_inventory).foreach { case (_, eguid) => sendResponse(ObjectDeleteMessage(eguid, 0)) } UpdateWeaponAtSeatPosition(vehicle, seatNum) case None => //observer: observe changes to external equipment - old_weapons.foreach { case (_, guid) => sendResponse(ObjectDeleteMessage(guid, 0)) } + old_weapons.foreach { case (_, eguid) => sendResponse(ObjectDeleteMessage(eguid, 0)) } } case _ => ; } @@ -3030,8 +3044,9 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con player.Actor ! JammableUnit.ClearJammeredStatus() player.Actor ! JammableUnit.ClearJammeredSound() } - // TODO only when respawning after death - avatarActor ! AvatarActor.ResetImplants() + if (deadState != DeadState.Alive) { + avatarActor ! AvatarActor.ResetImplants() + } sendResponse(PlanetsideAttributeMessage(PlanetSideGUID(0), 82, 0)) //TODO if Medkit does not have shortcut, add to a free slot or write over slot 64 @@ -3060,6 +3075,9 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con //TODO 30 for a new character only? sendResponse(AvatarStatisticsMessage(2, Statistics(0L))) }) + if (tplayer.ExoSuit == ExoSuitType.MAX) { + sendResponse(PlanetsideAttributeMessage(guid, 7, tplayer.Capacitor.toLong)) + } //AvatarAwardMessage //DisplayAwardMessage sendResponse(PlanetsideStringAttributeMessage(guid, 0, "Outfit Name")) @@ -3089,8 +3107,8 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con avatarActor ! AvatarActor.SetVehicle(None) } GetVehicleAndSeat() match { - //we're falling case (Some(vehicle), _) if vehicle.Definition == GlobalDefinitions.droppod => + //we're falling sendResponse( DroppodFreefallingMessage( vehicle.GUID, @@ -3154,7 +3172,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con /** * These messages are dispatched when first starting up the client and connecting to the server for the first time. - * While many of thee messages will be reused for other situations, they appear in this order only during startup. + * While many of these messages will be reused for other situations, they appear in this order only during startup. */ def FirstTimeSquadSetup(): Unit = { sendResponse(SquadDetailDefinitionUpdateMessage.Init) @@ -3263,7 +3281,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con accountIntermediary ! RetrieveAccountData(token) case msg @ MountVehicleCargoMsg(player_guid, cargo_guid, carrier_guid, unk4) => - log.trace(msg.toString) + log.debug(s"MountVehicleCargoMsg: $msg") (continent.GUID(cargo_guid), continent.GUID(carrier_guid)) match { case (Some(cargo: Vehicle), Some(carrier: Vehicle)) => carrier.CargoHolds.find({ case (_, hold) => !hold.isOccupied }) match { @@ -3282,7 +3300,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con } case msg @ DismountVehicleCargoMsg(player_guid, cargo_guid, bailed, requestedByPassenger, kicked) => - log.trace(msg.toString) + log.debug(s"DismountVehicleCargoMsg: $msg") //when kicked by carrier driver, player_guid will be PlanetSideGUID(0) //when exiting of the cargo vehicle driver's own accord, player_guid will be the cargo vehicle driver continent.GUID(cargo_guid) match { @@ -3310,7 +3328,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con keepAliveFunc() case msg @ BeginZoningMessage() => - log.trace("Reticulating splines ...") + log.trace(s"BeginZoningMessage: ${player.Name} is reticulating ${continent.id}'s splines ...") zoneLoaded = None val continentId = continent.id val faction = player.Faction @@ -3939,7 +3957,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con chatActor ! ChatActor.Message(msg) case _ : VoiceHostRequest => - log.trace(s"${player.Name} requested in-game voice chat.") + log.trace(s"VoiceHostRequest: ${player.Name} requested in-game voice chat.") sendResponse(VoiceHostKill()) sendResponse( ChatMsg(ChatMessageType.CMT_OPEN, false, "", "Try our Discord at https://discord.gg/0nRe5TNbTYoUruA4", None) @@ -3952,7 +3970,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con FindContainedEquipment match { case (Some(_), Some(obj: ConstructionItem)) => PerformConstructionItemAmmoChange(obj, obj.AmmoTypeIndex) - case (Some(obj), Some(tool: Tool)) => + case (Some(obj: PlanetSideServerObject), Some(tool: Tool)) => PerformToolAmmoChange(tool, obj) case (_, Some(obj)) => log.warn(s"ChangeAmmo: the ${obj.Definition.Name} in ${player.Name}'s hands does not contain ammunition") @@ -4168,16 +4186,17 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con xs.map(_.obj.asInstanceOf[AmmoBox].Capacity).sum } val sumReloadValue: Int = box.Capacity + tailReloadValue - val actualReloadValue = (if (sumReloadValue <= reloadValue) { - deleteFunc(box) - sumReloadValue - } else { - modifyFunc(box, reloadValue - tailReloadValue) - reloadValue - }) + currentMagazine - log.info(s"${player.Name} successfully reloaded $actualReloadValue ${tool.AmmoType} into $tool") - tool.Magazine = actualReloadValue - sendResponse(ReloadMessage(item_guid, actualReloadValue, unk1)) + val actualReloadValue = if (sumReloadValue <= reloadValue) { + deleteFunc(box) + sumReloadValue + } else { + modifyFunc(box, reloadValue - tailReloadValue) + reloadValue + } + val finalReloadValue = actualReloadValue + currentMagazine + log.info(s"${player.Name} successfully reloaded $reloadValue ${tool.AmmoType} into ${tool.Definition.Name}") + tool.Magazine = finalReloadValue + sendResponse(ReloadMessage(item_guid, finalReloadValue, unk1)) continent.AvatarEvents ! AvatarServiceMessage( continent.id, AvatarAction.Reload(player.GUID, item_guid) @@ -4241,7 +4260,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con continent.zipLinePaths.find(x => x.PathId == path_id) match { case Some(x) => (x.IsTeleporter, Some(x)) case _ => - log.warn(s"$player.Name} couldn't find a zipline path $path_id in zone ${continent.id}") + log.warn(s"${player.Name} couldn't find a zipline path $path_id in zone ${continent.id}") (false, None) } if (isTeleporter) { @@ -4265,7 +4284,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con sendResponse(ZipLineMessage(player_guid, forwards, action, 0, pos)) case _ => log.warn( - s"${player.Name} tried to do something with a zipline but can't handle it. forwards: ${forwards} action: ${action} path_id: ${path_id} zone: ${continent.Number} / ${continent.id}" + s"${player.Name} tried to do something with a zipline but can't handle it. forwards: $forwards action: $action path_id: $path_id zone: ${continent.Number} / ${continent.id}" ) } } @@ -4720,6 +4739,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con (!obj.PermissionGroup(AccessPermissionGroup.Trunk.id).contains(VehicleLockState.Locked) || obj.Owner .contains(player.GUID)) ) { + log.info(s"${player.Name} is looking in the ${obj.Definition.Name}'s trunk") CancelZoningProcessWithDescriptiveReason("cancel_use") obj.AccessingTrunk = player.GUID AccessContainer(obj) @@ -4763,6 +4783,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con ) { FindLocalVehicle match { case Some(vehicle) => + log.info(s"${player.Name} is accessing a ${terminal.Definition.Name} for ${player.Sex.possessive} ${vehicle.Definition.Name}") sendResponse( UseItemMessage( avatar_guid, @@ -4798,12 +4819,14 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con } } else if (tdef == GlobalDefinitions.teleportpad_terminal) { //explicit request + log.info(s"${player.Name} is purchasing a router telepad") CancelZoningProcessWithDescriptiveReason("cancel_use") terminal.Actor ! Terminal.Request( player, ItemTransactionMessage(object_guid, TransactionType.Buy, 0, "router_telepad", 0, PlanetSideGUID(0)) ) } else { + log.info(s"${player.Name} is accessing a ${terminal.Definition.Name}") CancelZoningProcessWithDescriptiveReason("cancel_use") sendResponse( UseItemMessage( @@ -4832,6 +4855,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con obj.Actor ! CommonMessages.Use(player, Some(item)) case None if player.Faction == obj.Faction => //deconstruction + log.info(s"${player.Name} is deconstructing at the ${obj.Owner.Definition.Name}'s spawns") CancelZoningProcessWithDescriptiveReason("cancel_use") PlayerActionsToCancel() CancelAllProximityUnits() @@ -4918,7 +4942,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con case Some(obj) => CancelZoningProcessWithDescriptiveReason("cancel_use") - log.warn(s"UseItem: ${player.Name} don't know how to handle $obj") + log.warn(s"UseItem: ${player.Name} does not know how to handle $obj") case None => log.error(s"UseItem: ${player.Name} can not find object $object_guid") @@ -5105,8 +5129,8 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con case msg @ ItemTransactionMessage(terminal_guid, transaction_type, _, _, _, _) => continent.GUID(terminal_guid) match { case Some(term: Terminal) => - log.info(s"${player.Name} is using a terminal") if (lastTerminalOrderFulfillment) { + log.trace(s"ItemTransactionMessage: ${player.Name} is submitting an order") lastTerminalOrderFulfillment = false CancelZoningProcessWithDescriptiveReason("cancel_use") term.Actor ! Terminal.Request(player, msg) @@ -5129,16 +5153,14 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con case msg @ WeaponDelayFireMessage(seq_time, weapon_guid) => ; case msg @ WeaponDryFireMessage(weapon_guid) => - FindWeapon match { - case Some(tool: Tool) => + FindWeapon.orElse { continent.GUID(weapon_guid) } match { + case Some(_: Equipment) => continent.AvatarEvents ! AvatarServiceMessage( continent.id, AvatarAction.WeaponDryFire(player.GUID, weapon_guid) ) - case Some(_) => - log.warn(s"WeaponDryFire: ${player.Name}'s weapon ${weapon_guid.guid} does not seem to be a weapon") - case None => - log.error(s"WeaponDryFire: ${player.Name}'s weapon ${weapon_guid.guid} does not seem to exist") + case _ => + log.warn(s"WeaponDryFire: ${player.Name}'s weapon ${weapon_guid.guid} is either not a weapon or does not exist") } case msg @ WeaponFireMessage( @@ -5182,7 +5204,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con unk3, unk4 ) => - log.trace(s"${player.Name} hits with $msg") + log.trace(s"${player.Name} lands a hit - $msg") //find defined projectile FindProjectileEntry(projectile_guid) match { case Some(projectile) => @@ -5257,7 +5279,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con unk4, targets ) => - log.trace(s"${player.Name} splashes with $msg") + log.trace(s"${player.Name} splashes some targets - $msg") FindProjectileEntry(projectile_guid) match { case Some(projectile) => val profile = projectile.profile @@ -5318,7 +5340,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con } case msg @ LashMessage(seq_time, killer_guid, victim_guid, projectile_guid, hit_pos, unk1) => - log.trace(s"${player.Name} lashes with $msg") + log.trace(s"${player.Name} lashes some targets - $msg") ValidObject(victim_guid) match { case Some(target: PlanetSideGameObject with FactionAffinity with Vitality) => CheckForHitPositionDiscrepancy(projectile_guid, hit_pos, target) @@ -5488,7 +5510,8 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con } case msg @ AvatarGrenadeStateMessage(player_guid, state) => - log.debug(s"${player.Name} lofts his grenade high ... $msg") //TODO I thought I had this working? + //TODO I thought I had this working? + log.info(s"${player.Name} has $state ${player.Sex.possessive} grenade") case msg @ SquadDefinitionActionMessage(u1, u2, action) => squadService ! SquadServiceMessage(player, continent, SquadServiceAction.Definition(u1, u2, action)) @@ -5504,7 +5527,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con squadService ! SquadServiceMessage(player, continent, SquadServiceAction.Waypoint(request, wtype, unk, info)) case msg @ GenericCollisionMsg(u1, p, t, php, thp, pv, tv, ppos, tpos, u2, u3, u4) => - log.info(s"${player.Name} would be in intense and excruciating pain right now if collison worked") + log.info(s"${player.Name} would be in intense and excruciating pain right now if collision worked") case msg @ BugReportMessage( version_major, @@ -5518,7 +5541,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con summary, desc ) => - log.warn(s"${player.Name} filed a $msg") + log.warn(s"${player.Name} filed a bug report") log.debug(s"$msg") case msg @ BindPlayerMessage(action, bindDesc, unk1, logging, unk2, unk3, unk4, pos) => @@ -5532,7 +5555,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con vehicle.PermissionGroup(attribute_type, attribute_value) match { case Some(allow) => val group = AccessPermissionGroup(attribute_type - 10) - log.info(s"${player.Name} changed ${vehicle.Definition.Name}'s access permission $group changed to $allow") + log.info(s"${player.Name} changed ${vehicle.Definition.Name}'s access permission $group to $allow") continent.VehicleEvents ! VehicleServiceMessage( continent.id, VehicleAction.SeatPermissions(player.GUID, vehicle.GUID, attribute_type, attribute_value) @@ -5570,10 +5593,10 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con case None => ; } } else { - log.warn(s"Vehicle attributes: unsupported change on vehicle $object_guid - $attribute_type, ${player.Name}") + log.warn(s"PlanetsideAttribute: vehicle attributes - unsupported change on vehicle $object_guid - $attribute_type, ${player.Name}") } } else { - log.warn(s"PlanetsideAttributeMessage: vehicle attributes - ${player.Name} does not own vehicle ${vehicle.GUID} and can not change it") + log.warn(s"PlanetsideAttribute: vehicle attributes - ${player.Name} does not own vehicle ${vehicle.GUID} and can not change it") } // Cosmetics options @@ -5581,7 +5604,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con avatarActor ! AvatarActor.SetCosmetics(Cosmetic.valuesFromAttributeValue(attribute_value)) case _ => - log.warn(s"PlanetsideAttributeMessage: echoing unknown attributes behavior $attribute_type back to ${player.Name}") + log.warn(s"PlanetsideAttribute: echoing unknown attributes behavior $attribute_type back to ${player.Name}") sendResponse(PlanetsideAttributeMessage(object_guid, attribute_type, attribute_value)) } @@ -5605,7 +5628,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con case msg @ BattleplanMessage(char_id, player_name, zone_id, diagrams) => val lament: String = s"${player.Name} has a brilliant idea that no one will ever see" log.info(lament) - log.debug(s"BattleplanMessage: $lament - $msg") + log.debug(s"Battleplan: $lament - $msg") case msg @ CreateShortcutMessage(player_guid, slot, unk, add, shortcut) => ; @@ -5626,7 +5649,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con Some(TargetInfo(player.GUID, health, armor)) case _ => - log.warn(s"TargetingImplantRequest: The target info that ${player.Name} requested for guid ${x.target_guid} is not for a player") + log.warn(s"TargetingImplantRequest: the info that ${player.Name} requested for target ${x.target_guid} is not for a player") None } }) @@ -6144,7 +6167,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con * Common preparation for disengaging from a corpse. * Leave the corpse-specific group that was used for shared updates. * Deconstruct every object in the backpack's inventory. - * @param vehicle the vehicle + * @param tplayer the corpse */ def UnaccessCorpseContainer(tplayer: Player): Unit = { accessedContainer = None @@ -6303,7 +6326,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con * @param tool na * @param obj na */ - def PerformToolAmmoChange(tool: Tool, obj: PlanetSideGameObject with Container): Unit = { + def PerformToolAmmoChange(tool: Tool, obj: PlanetSideServerObject with Container): Unit = { val originalAmmoType = tool.AmmoType do { val requestedAmmoType = tool.NextAmmoType @@ -6313,23 +6336,14 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con case Nil => ; case x :: xs => val (deleteFunc, modifyFunc): (Equipment => Future[Any], (AmmoBox, Int) => Unit) = obj match { - case (veh: Vehicle) => + case veh: Vehicle => (RemoveOldEquipmentFromInventory(veh), ModifyAmmunitionInVehicle(veh)) - case o: PlanetSideServerObject with Container => - (RemoveOldEquipmentFromInventory(o), ModifyAmmunition(o)) case _ => - throw new Exception( - "PerformToolAmmoChange: (remove/modify) should be a server object, not a regular game object" - ) - } - val (stowNewFunc, stowFunc): (Equipment => TaskResolver.GiveTask, Equipment => Future[Any]) = obj match { - case o: PlanetSideServerObject with Container => - (PutNewEquipmentInInventoryOrDrop(o), PutEquipmentInInventoryOrDrop(o)) - case _ => - throw new Exception( - "PerformToolAmmoChange: (new/put) should be a server object, not a regular game object" - ) + (RemoveOldEquipmentFromInventory(obj), ModifyAmmunition(obj)) } + val (stowNewFunc, stowFunc): (Equipment => TaskResolver.GiveTask, Equipment => Future[Any]) = + (PutNewEquipmentInInventoryOrDrop(obj), PutEquipmentInInventoryOrDrop(obj)) + xs.foreach(item => { obj.Inventory -= x.start deleteFunc(item.obj) @@ -6339,7 +6353,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con val box = x.obj.asInstanceOf[AmmoBox] val originalBoxCapacity = box.Capacity val tailReloadValue: Int = if (xs.isEmpty) { 0 } - else { xs.map(_.obj.asInstanceOf[AmmoBox].Capacity).reduceLeft(_ + _) } + else { xs.map(_.obj.asInstanceOf[AmmoBox].Capacity).sum } val sumReloadValue: Int = originalBoxCapacity + tailReloadValue val previousBox = tool.AmmoSlot.Box //current magazine in tool sendResponse(ObjectDetachMessage(tool.GUID, previousBox.GUID, Vector3.Zero, 0f)) @@ -6374,7 +6388,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con } else { val splitReloadAmmo: Int = sumReloadValue - fullMagazine log.trace( - s"${player.Name} takes ${originalBoxCapacity - splitReloadAmmo} from a box of $originalBoxCapacity $requestedAmmoType ammo" + s"PerformToolAmmoChange: ${player.Name} takes ${originalBoxCapacity - splitReloadAmmo} from a box of $originalBoxCapacity $requestedAmmoType ammo" ) val boxForInventory = AmmoBox(box.Definition, splitReloadAmmo) continent.tasks ! stowNewFunc(boxForInventory) @@ -6383,7 +6397,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con sendResponse( InventoryStateMessage(box.GUID, tool.GUID, box.Capacity) ) //should work for both players and vehicles - log.info(s"${player.Name} loads ${box.Capacity} $requestedAmmoType into ${tool.GUID} in $ammoSlotIndex") + log.info(s"${player.Name} loads ${box.Capacity} $requestedAmmoType into the ${tool.Definition.Name}") if (previousBox.Capacity > 0) { //divide capacity across other existing and not full boxes of that ammo type var capacity = previousBox.Capacity @@ -6420,9 +6434,9 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con } AmmoBox.Split(previousBox) match { case Nil | List(_) => ; //done (the former case is technically not possible) - case _ :: xs => + case _ :: toUpdate => modifyFunc(previousBox, 0) //update to changed capacity value - xs.foreach(box => { continent.tasks ! stowNewFunc(box) }) + toUpdate.foreach(box => { continent.tasks ! stowNewFunc(box) }) } } else { continent.tasks ! GUIDTask.UnregisterObjectTask(previousBox)(continent.GUID) @@ -6459,8 +6473,8 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con def NewItemDrop(obj: PlanetSideServerObject with Container, zone: Zone)(item: Equipment): TaskResolver.GiveTask = { TaskResolver.GiveTask( new Task() { - private val localItem = item - private val localFunc: (Equipment) => Unit = NormalItemDrop(obj, zone) + private val localItem = item + private val localFunc: Equipment => Unit = NormalItemDrop(obj, zone) override def Description: String = s"dropping a new ${localItem.Definition.Name} on the ground" @@ -6925,11 +6939,13 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con zone.id, VehicleAction.UnloadVehicle(player.GUID, vehicle, vehicleToDelete) ) - log.trace( + log.debug( s"AvatarCreate: cleaning up ghost of transitioning vehicle ${vehicle.Definition.Name}@${vehicleToDelete.guid} in zone ${zone.id}" ) } Vehicles.ReloadAccessPermissions(vehicle, player.Name) + log.debug(s"AvatarCreate (vehicle): ${player.Name}'s ${vehicle.Definition.Name}") + log.trace(s"AvatarCreate (vehicle): ${player.Name}'s ${vehicle.Definition.Name} - $vguid -> $vdata") AvatarCreateInVehicle(player, vehicle, seat) case _ => @@ -6942,8 +6958,8 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con continent.id, AvatarAction.LoadPlayer(guid, ObjectClass.avatar, guid, packet.ConstructorData(player).get, None) ) - log.trace(s"AvatarCreate: $guid -> $data") - log.trace(s"AvatarCreate: ${player.Name}") + log.debug(s"AvatarCreate: ${player.Name}") + log.trace(s"AvatarCreate: ${player.Name} - $guid -> $data") } continent.Population ! Zone.Population.Spawn(avatar, player, avatarActor) //cautious redundancy @@ -7038,6 +7054,8 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con tplayer.VehicleSeated = None val pdata = pdef.Packet.DetailedConstructorData(tplayer).get tplayer.VehicleSeated = vguid + log.debug(s"AvatarCreateInVehicle: ${player.Name}") + log.trace(s"AvatarCreateInVehicle: ${player.Name} - $pguid -> $pdata") sendResponse(ObjectCreateDetailedMessage(pdef.ObjectId, pguid, pdata)) if (seat == 0 || vehicle.WeaponControlledFromSeat(seat).nonEmpty) { sendResponse(ObjectAttachMessage(vguid, pguid, seat)) @@ -7057,7 +7075,6 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con Some(ObjectCreateMessageParent(vguid, seat)) ) ) - log.trace(s"AvatarCreateInVehicle: $pguid -> pdata") } /** @@ -7097,7 +7114,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con val seat = vehicle.Seats(0) seat.unmount(player) val _vdata = vdef.Packet.ConstructorData(vehicle).get - sendResponse(ObjectCreateMessage(vehicle.Definition.ObjectId, vguid, vdata)) + sendResponse(ObjectCreateMessage(vehicle.Definition.ObjectId, vguid, _vdata)) seat.mount(player) _vdata } else { @@ -7106,7 +7123,8 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con _vdata } Vehicles.ReloadAccessPermissions(vehicle, continent.id) - log.trace(s"AvatarCreate (vehicle): $vguid -> $vdata") + log.debug(s"AvatarCreate (vehicle): ${player.Name}'s ${vehicle.Definition.Name}") + log.trace(s"AvatarCreate (vehicle): ${player.Name}'s ${vehicle.Definition.Name} - $vguid -> $vdata") val pdef = player.avatar.definition val pguid = player.GUID val parent = ObjectCreateMessageParent(vguid, seat) @@ -7114,7 +7132,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con val pdata = pdef.Packet.DetailedConstructorData(player).get player.VehicleSeated = vguid sendResponse(ObjectCreateDetailedMessage(pdef.ObjectId, pguid, pdata)) - log.trace(s"AvatarRejoin: $pguid -> $pdata") + log.debug(s"AvatarRejoin: ${player.Name} - $pguid -> $pdata") if (seat == 0 || vehicle.WeaponControlledFromSeat(seat).nonEmpty) { sendResponse(ObjectAttachMessage(vguid, pguid, seat)) AccessContainer(vehicle) @@ -7123,7 +7141,6 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con interimUngunnedVehicle = Some(vguid) interimUngunnedVehicleSeat = Some(seat) } - log.info(s"AvatarRejoin: ${player.Name} in ${vehicle.Definition.Name}") case _ => player.VehicleSeated = None @@ -7131,8 +7148,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con val data = packet.DetailedConstructorData(player).get val guid = player.GUID sendResponse(ObjectCreateDetailedMessage(ObjectClass.avatar, guid, data)) - log.trace(s"AvatarRejoin: $guid -> $data") - log.trace(s"AvatarRejoin: ${player.Name}") + log.debug(s"AvatarRejoin: ${player.Name} - $guid -> $data") } //cautious redundancy deadState = DeadState.Alive @@ -7157,6 +7173,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con val obj = Player.Respawn(tplayer) DefinitionUtil.applyDefaultLoadout(obj) obj.death_by = tplayer.death_by + obj.silenced = tplayer.silenced obj } @@ -7301,26 +7318,25 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con */ def RequestSanctuaryZoneSpawn(tplayer: Player, currentZone: Int): Unit = { if (currentZone == Zones.sanctuaryZoneNumber(tplayer.Faction)) { - log.error(s"RequestSanctuaryZoneSpawn: ${player.Name} is already in faction Sanctuary zone.") - sendResponse(DisconnectMessage("RequestSanctuaryZoneSpawn called for player already in sanctuary.")) - return - } - - continent.GUID(player.VehicleSeated) match { - case Some(obj: Vehicle) if !obj.Destroyed => - cluster ! ICS.GetRandomSpawnPoint( - Zones.sanctuaryZoneNumber(player.Faction), - player.Faction, - Seq(SpawnGroup.WarpGate), - context.self - ) - case _ => - cluster ! ICS.GetRandomSpawnPoint( - Zones.sanctuaryZoneNumber(player.Faction), - player.Faction, - Seq(SpawnGroup.Sanctuary), - context.self - ) + log.error(s"RequestSanctuaryZoneSpawn: ${player.Name} is already in faction sanctuary zone.") + sendResponse(DisconnectMessage("RequestSanctuaryZoneSpawn: player is already in sanctuary.")) + } else { + continent.GUID(player.VehicleSeated) match { + case Some(obj : Vehicle) if !obj.Destroyed => + cluster ! ICS.GetRandomSpawnPoint( + Zones.sanctuaryZoneNumber(player.Faction), + player.Faction, + Seq(SpawnGroup.WarpGate), + context.self + ) + case _ => + cluster ! ICS.GetRandomSpawnPoint( + Zones.sanctuaryZoneNumber(player.Faction), + player.Faction, + Seq(SpawnGroup.Sanctuary), + context.self + ) + } } } @@ -7372,7 +7388,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con case _: Vehicle => terminal.Actor ! CommonMessages.Use(player, Some((target, continent.VehicleEvents))) case _ => - log.error(s"StartUsingProximityUnit: can not deal with target $target") + log.error(s"StartUsingProximityUnit: ${player.Name}, this ${terminal.Definition.Name} can not deal with target $target") } terminal.Definition match { case GlobalDefinitions.adv_med_terminal | GlobalDefinitions.medical_terminal => @@ -7633,7 +7649,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con if (0 <= index && index < projectiles.length) { projectiles(index) } else { - log.warn(s"ResolveProjectile: expected projectile, but ${projectile_guid.guid} not found") + log.trace(s"ResolveProjectile: ${player.Name} expected projectile, but ${projectile_guid.guid} not found") None } } @@ -7655,7 +7671,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con case Some(projectile) => ResolveProjectileInteraction(projectile, resolution, target, pos) case None => - log.warn(s"ResolveProjectile: expected projectile, but ${projectile_guid.guid} not found") + log.trace(s"ResolveProjectile: ${player.Name} expected projectile, but ${projectile_guid.guid} not found") None } } @@ -7695,7 +7711,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con pos: Vector3 ): Option[DamageInteraction] = { if (projectile.isMiss) { - log.error("expected projectile was already counted as a missed shot; can not resolve any further") + log.warn("expected projectile was already counted as a missed shot; can not resolve any further") None } else { projectile.Resolve() @@ -7744,7 +7760,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con def DismountAction(tplayer: Player, obj: PlanetSideGameObject with Mountable, seatNum: Int): Unit = { val player_guid: PlanetSideGUID = tplayer.GUID log.info( - s"${tplayer.Name} dismounts a ${obj.Definition.asInstanceOf[ObjectDefinition].Name} from seat $seatNum" + s"${tplayer.Name} dismounts a ${obj.Definition.asInstanceOf[ObjectDefinition].Name} from seat #$seatNum" ) keepAliveFunc = NormalKeepAlive sendResponse(DismountVehicleMsg(player_guid, BailType.Normal, wasKickedByDriver = false)) @@ -7770,13 +7786,16 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con val func = data.calculate() target match { case obj: Player if obj.CanDamage && obj.Actor != Default.Actor => + log.info(s"${player.Name} is attacking ${obj.Name}") // auto kick players damaging spectators if (obj.spectator && obj != player) { AdministrativeKick(player) } else { obj.Actor ! Vitality.Damage(func) } - case obj: Vehicle if obj.CanDamage => obj.Actor ! Vitality.Damage(func) + case obj: Vehicle if obj.CanDamage => + log.info(s"${player.Name} is attacking ${obj.OwnerName.getOrElse("someone")}'s ${obj.Definition.Name}") + obj.Actor ! Vitality.Damage(func) case obj: Amenity if obj.CanDamage => obj.Actor ! Vitality.Damage(func) case obj: ComplexDeployable if obj.CanDamage => obj.Actor ! Vitality.Damage(func) @@ -7921,11 +7940,11 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con def NextConstructionItemFireMode(obj: ConstructionItem, originalModeIndex: Int): ConstructionFireMode = { do { obj.NextFireMode - if (!ConstructionItemPermissionComparison(player.avatar.certifications, obj.ModePermissions)) { + if (!Deployables.constructionItemPermissionComparison(player.avatar.certifications, obj.ModePermissions)) { PerformConstructionItemAmmoChange(obj, obj.AmmoTypeIndex) } sendResponse(ChangeFireModeMessage(obj.GUID, obj.FireModeIndex)) - } while (!ConstructionItemPermissionComparison( + } while (!Deployables.constructionItemPermissionComparison( player.avatar.certifications, obj.ModePermissions ) && originalModeIndex != obj.FireModeIndex) @@ -7944,7 +7963,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con def PerformConstructionItemAmmoChange(obj: ConstructionItem, originalAmmoIndex: Int): Unit = { do { obj.NextAmmoType - } while (!ConstructionItemPermissionComparison( + } while (!Deployables.constructionItemPermissionComparison( player.avatar.certifications, obj.ModePermissions ) && originalAmmoIndex != obj.AmmoTypeIndex) @@ -7954,35 +7973,6 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con sendResponse(ChangeAmmoMessage(obj.GUID, obj.AmmoTypeIndex)) } - /** - * 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) - } - /** * Common actions related to constructing a new `Deployable` object in the game environment.
*
@@ -8159,7 +8149,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con val definition = tool.Definition if (player.Slot(index).Equipment.isEmpty) { - FindEquipmentStock(player, { (e) => e.Definition == definition }, 1) match { + FindEquipmentStock(player, { e => e.Definition == definition }, 1) match { case x :: _ => val guid = player.GUID val obj = x.obj.asInstanceOf[ConstructionItem] @@ -8351,9 +8341,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con * does not factor in any time required for loading zone or game objects */ def LoadZonePhysicalSpawnPoint(zoneId: String, pos: Vector3, ori: Vector3, respawnTime: FiniteDuration): Unit = { - val msg = s"${player.Name} will load in zone $zoneId at position $pos in $respawnTime" - log.info(msg) - log.debug(s"LoadZonePhysicalSpawnPoint: $msg") + log.info(s"${player.Name} will load in zone $zoneId at position $pos in $respawnTime") respawnTimer.cancel() reviveTimer.cancel() deadState = DeadState.RespawnTime @@ -8417,9 +8405,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con * @param zoneId the zone in which the player will be placed */ def LoadZoneAsPlayer(targetPlayer: Player, zoneId: String): Unit = { - val msg: String = s"${targetPlayer.avatar.name} loading into $zoneId" - log.info(msg) - log.debug(s"LoadZoneAsPlayer: $msg") + log.debug(s"LoadZoneAsPlayer: ${targetPlayer.avatar.name} loading into $zoneId") if (!zoneReload && zoneId == continent.id) { if (player.isBackpack) { // important! test the actor-wide player ref, not the parameter // respawning from unregistered player @@ -8500,7 +8486,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con * @return a tuple composed of an `ActorRef` destination and a message to send to that destination */ def LoadZoneInVehicleAsDriver(vehicle: Vehicle, zoneId: String): Unit = { - val msg: String = s"${player.Name} loading into $zoneId, driving a ${vehicle.Definition.Name}" + val msg: String = s"${player.Name} is driving a ${vehicle.Definition.Name}" log.info(msg) log.debug(s"LoadZoneInVehicleAsDriver: $msg") val manifest = vehicle.PrepareGatingManifest() @@ -8593,7 +8579,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con * @return a tuple composed of an `ActorRef` destination and a message to send to that destination */ def LoadZoneInVehicleAsPassenger(vehicle: Vehicle, zoneId: String): Unit = { - val msg: String = s"${player.Name} loading into $zoneId as the passenger of a ${vehicle.Definition.Name}" + val msg: String = s"${player.Name} is the passenger of a ${vehicle.Definition.Name}" log.info(msg) log.debug(s"LoadZoneInVehicleAsPassenger: $msg") if (!zoneReload && zoneId == continent.id) { @@ -9177,7 +9163,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con if (hitPositionDiscrepancy > Config.app.antiCheat.hitPositionDiscrepancyThreshold) { // If the target position on the server does not match the position where the projectile landed within reason there may be foul play log.warn( - s"Shot guid $projectile_guid has hit location discrepancy with target location. Target: ${target.Position} Reported: $hitPos, Distance: $hitPositionDiscrepancy / ${math.sqrt(hitPositionDiscrepancy).toFloat}; suspect" + s"${player.Name}'s shot #${projectile_guid.guid} has hit discrepancy with target. Target: ${target.Position}, Reported: $hitPos, Distance: $hitPositionDiscrepancy / ${math.sqrt(hitPositionDiscrepancy).toFloat}; suspect" ) } } @@ -9297,6 +9283,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con } def AdministrativeKick(tplayer: Player) = { + log.warn(s"${tplayer.Name} has been kicked by ${player.Name}") tplayer.death_by = -1 accountPersistence ! AccountPersistenceService.Kick(tplayer.Name) //get out of that vehicle @@ -9314,8 +9301,11 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con def KickedByAdministration(): Unit = { sendResponse(DisconnectMessage("@kick_w")) - Thread.sleep(300) - middlewareActor ! MiddlewareActor.Teardown() + context.system.scheduler.scheduleOnce( + delay = 300 milliseconds, + middlewareActor.toClassic, + MiddlewareActor.Teardown() + ) } def ImmediateDisconnect(): Unit = { @@ -9382,7 +9372,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con projectiles(projectileIndex) = Some(projectile.quality(initialQuality)) if (projectile_info.ExistsOnRemoteClients) { log.trace( - s"WeaponFireMessage: ${projectile_info.Name} is a remote projectile" + s"WeaponFireMessage: ${player.Name}'s ${projectile_info.Name} is a remote projectile" ) continent.tasks ! (if (projectile.HasGUID) { continent.AvatarEvents ! AvatarServiceMessage( diff --git a/src/main/scala/net/psforever/objects/Deployables.scala b/src/main/scala/net/psforever/objects/Deployables.scala index a43f4d1a..3799c18c 100644 --- a/src/main/scala/net/psforever/objects/Deployables.scala +++ b/src/main/scala/net/psforever/objects/Deployables.scala @@ -2,7 +2,7 @@ package net.psforever.objects import akka.actor.ActorRef -import net.psforever.objects.avatar.Avatar +import net.psforever.objects.avatar.{Avatar, Certification} import scala.concurrent.duration._ import net.psforever.objects.ce.{Deployable, DeployedItem} @@ -13,7 +13,7 @@ import net.psforever.services.RemoverActor import net.psforever.services.local.{LocalAction, LocalServiceMessage} object Deployables { - private val log = org.log4s.getLogger("Deployables") + //private val log = org.log4s.getLogger("Deployables") object Make { def apply(item: DeployedItem.Value): () => PlanetSideGameObject with Deployable = cemap(item) @@ -139,4 +139,32 @@ object Deployables { 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) + } } diff --git a/src/main/scala/net/psforever/objects/Vehicles.scala b/src/main/scala/net/psforever/objects/Vehicles.scala index 9812e4f8..aed7c017 100644 --- a/src/main/scala/net/psforever/objects/Vehicles.scala +++ b/src/main/scala/net/psforever/objects/Vehicles.scala @@ -226,7 +226,7 @@ object Vehicles { * @param unk na; used by `HackMessage` as `unk5` */ def FinishHackingVehicle(target: Vehicle, hacker: Player, unk: Long)(): Unit = { - log.info(s"Vehicle ${target.Definition.Name}#${target.GUID.guid} has been jacked by ${hacker.Name}") + log.info(s"${hacker.Name} has jacked a ${target.Definition.Name}") val zone = target.Zone // Forcefully dismount any cargo target.CargoHolds.values.foreach(cargoHold => { diff --git a/src/main/scala/net/psforever/objects/serverobject/painbox/PainboxControl.scala b/src/main/scala/net/psforever/objects/serverobject/painbox/PainboxControl.scala index f38201cf..4930bff5 100644 --- a/src/main/scala/net/psforever/objects/serverobject/painbox/PainboxControl.scala +++ b/src/main/scala/net/psforever/objects/serverobject/painbox/PainboxControl.scala @@ -24,7 +24,7 @@ class PainboxControl(painbox: Painbox) extends PoweredAmenityControl { if (painbox.Owner.Continent.matches("c[0-9]")) { //are we in a safe zone? // 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 } else { if (painbox.Definition.HasNearestDoorDependency) { diff --git a/src/main/scala/net/psforever/objects/serverobject/resourcesilo/ResourceSiloControl.scala b/src/main/scala/net/psforever/objects/serverobject/resourcesilo/ResourceSiloControl.scala index 0d03f5ab..fb873f84 100644 --- a/src/main/scala/net/psforever/objects/serverobject/resourcesilo/ResourceSiloControl.scala +++ b/src/main/scala/net/psforever/objects/serverobject/resourcesilo/ResourceSiloControl.scala @@ -99,7 +99,7 @@ class ResourceSiloControl(resourceSilo: ResourceSilo) // Only send updated capacitor display value to all clients if it has actually changed if (resourceSilo.CapacitorDisplay != siloDisplayBeforeChange) { 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.id, diff --git a/src/main/scala/net/psforever/objects/serverobject/terminals/CaptureTerminals.scala b/src/main/scala/net/psforever/objects/serverobject/terminals/CaptureTerminals.scala index af6864db..cc638369 100644 --- a/src/main/scala/net/psforever/objects/serverobject/terminals/CaptureTerminals.scala +++ b/src/main/scala/net/psforever/objects/serverobject/terminals/CaptureTerminals.scala @@ -23,7 +23,7 @@ object CaptureTerminals { 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.toString}") + 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 { diff --git a/src/main/scala/net/psforever/objects/serverobject/terminals/capture/CaptureTerminals.scala b/src/main/scala/net/psforever/objects/serverobject/terminals/capture/CaptureTerminals.scala index 7e0dee5a..06109a34 100644 --- a/src/main/scala/net/psforever/objects/serverobject/terminals/capture/CaptureTerminals.scala +++ b/src/main/scala/net/psforever/objects/serverobject/terminals/capture/CaptureTerminals.scala @@ -23,7 +23,7 @@ object CaptureTerminals { import akka.pattern.ask 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 import scala.concurrent.ExecutionContext.Implicits.global ask(target.Actor, CommonMessages.Hack(hackingPlayer, target))(1 second).mapTo[Boolean].onComplete { diff --git a/src/main/scala/net/psforever/objects/serverobject/turret/WeaponTurrets.scala b/src/main/scala/net/psforever/objects/serverobject/turret/WeaponTurrets.scala index a1f6017f..ef3e9d78 100644 --- a/src/main/scala/net/psforever/objects/serverobject/turret/WeaponTurrets.scala +++ b/src/main/scala/net/psforever/objects/serverobject/turret/WeaponTurrets.scala @@ -46,7 +46,7 @@ object WeaponTurrets { * @param upgrade the upgrade being applied to the turret (usually, it's weapon system) */ 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 events = zone.VehicleEvents events ! VehicleServiceMessage.TurretUpgrade(TurretUpgrader.ClearSpecific(List(target), zone)) diff --git a/src/main/scala/net/psforever/objects/vehicles/CargoBehavior.scala b/src/main/scala/net/psforever/objects/vehicles/CargoBehavior.scala index 464ebb65..be16cb45 100644 --- a/src/main/scala/net/psforever/objects/vehicles/CargoBehavior.scala +++ b/src/main/scala/net/psforever/objects/vehicles/CargoBehavior.scala @@ -147,7 +147,7 @@ object CargoBehavior { ) if (distance <= 64) { //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 hold.mount(cargo) cargo.Velocity = None @@ -163,7 +163,7 @@ object CargoBehavior { false } else if (distance > 625 || iteration >= 40) { //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" ) val cargoDriverGUID = cargo.Seats(0).occupant.get.GUID @@ -261,7 +261,7 @@ object CargoBehavior { ) if (distance > 225) { //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" ) val cargoDriverGUID = cargo.Seats(0).occupant.get.GUID @@ -401,8 +401,7 @@ object CargoBehavior { events ! VehicleServiceMessage(zoneId, VehicleAction.SendResponse(GUID0, ejectCargoMsg)) events ! VehicleServiceMessage(zoneId, VehicleAction.SendResponse(GUID0, detachCargoMsg)) events ! VehicleServiceMessage(zoneId, VehicleAction.SendResponse(GUID0, resetCargoMsg)) - log.debug(ejectCargoMsg.toString) - log.debug(detachCargoMsg.toString) + log.debug(s"HandleVehicleCargoDismount: eject - $ejectCargoMsg, detach - $detachCargoMsg") if (driverOpt.isEmpty) { //TODO cargo should drop like a rock like normal; until then, deconstruct it cargo.Actor ! Vehicle.Deconstruct() diff --git a/src/main/scala/net/psforever/services/account/AccountIntermediaryService.scala b/src/main/scala/net/psforever/services/account/AccountIntermediaryService.scala index 87d11f8d..8db0d20a 100644 --- a/src/main/scala/net/psforever/services/account/AccountIntermediaryService.scala +++ b/src/main/scala/net/psforever/services/account/AccountIntermediaryService.scala @@ -25,10 +25,6 @@ class AccountIntermediaryService extends Actor { private val IPAddressBySessionID = mutable.Map[Long, IPAddress]() private[this] val log = org.log4s.getLogger - override def preStart() = { - log.trace("Starting...") - } - def receive = { // Called by the LoginSessionActor case StoreAccountData(token, account) => diff --git a/src/main/scala/net/psforever/services/account/AccountPersistenceService.scala b/src/main/scala/net/psforever/services/account/AccountPersistenceService.scala index ce0b7239..b314a69c 100644 --- a/src/main/scala/net/psforever/services/account/AccountPersistenceService.scala +++ b/src/main/scala/net/psforever/services/account/AccountPersistenceService.scala @@ -59,7 +59,6 @@ class AccountPersistenceService extends Actor { */ override def preStart(): Unit = { ServiceManager.serviceManager ! ServiceManager.Lookup("squad") - log.trace("Awaiting system service hooks ...") } override def postStop(): Unit = { diff --git a/src/main/scala/net/psforever/services/avatar/AvatarService.scala b/src/main/scala/net/psforever/services/avatar/AvatarService.scala index 49c758c2..1fd8fbf4 100644 --- a/src/main/scala/net/psforever/services/avatar/AvatarService.scala +++ b/src/main/scala/net/psforever/services/avatar/AvatarService.scala @@ -15,10 +15,6 @@ class AvatarService(zone: Zone) extends Actor { private[this] val log = org.log4s.getLogger - override def preStart() = { - log.trace(s"Awaiting ${zone.id} avatar events ...") - } - val AvatarEvents = new GenericEventBus[AvatarServiceResponse] //AvatarEventBus def receive = { diff --git a/src/main/scala/net/psforever/services/local/support/HackCaptureActor.scala b/src/main/scala/net/psforever/services/local/support/HackCaptureActor.scala index 606d3990..e6856853 100644 --- a/src/main/scala/net/psforever/services/local/support/HackCaptureActor.scala +++ b/src/main/scala/net/psforever/services/local/support/HackCaptureActor.scala @@ -25,7 +25,7 @@ class HackCaptureActor extends Actor { def receive: Receive = { 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 { case GlobalDefinitions.capture_terminal => @@ -49,7 +49,7 @@ class HackCaptureActor extends Actor { hackedObjects.find(_.target == target) match { case Some(_) => 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) case _ => ; @@ -70,7 +70,7 @@ class HackCaptureActor extends Actor { val finishedHacks = hackedObjects.filter(x => now - x.hack_timestamp >= x.duration.toNanos) hackedObjects = stillHacked 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 entry.target.Actor ! CommonMessages.ClearHack() @@ -143,7 +143,7 @@ class HackCaptureActor extends Actor { val short_timeout: FiniteDuration = 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 clearTrigger = context.system.scheduler.scheduleOnce(short_timeout, self, HackCaptureActor.ProcessCompleteHacks()) } diff --git a/src/main/scala/net/psforever/services/local/support/HackClearActor.scala b/src/main/scala/net/psforever/services/local/support/HackClearActor.scala index a74c2345..0fcd4fed 100644 --- a/src/main/scala/net/psforever/services/local/support/HackClearActor.scala +++ b/src/main/scala/net/psforever/services/local/support/HackClearActor.scala @@ -84,11 +84,11 @@ class HackClearActor() extends Actor { val short_timeout: FiniteDuration = math.max(1, hackEntry.duration - (now - hackEntry.time)) nanoseconds 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 clearTrigger = context.system.scheduler.scheduleOnce(short_timeout, self, HackClearActor.TryClearHacks()) - case None => log.debug("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.") } } diff --git a/src/main/scala/net/psforever/services/properties/PropertyOverrideManager.scala b/src/main/scala/net/psforever/services/properties/PropertyOverrideManager.scala index f296341c..967828f4 100644 --- a/src/main/scala/net/psforever/services/properties/PropertyOverrideManager.scala +++ b/src/main/scala/net/psforever/services/properties/PropertyOverrideManager.scala @@ -31,16 +31,16 @@ class PropertyOverrideManager extends Actor { } 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) { - 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 } 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) } diff --git a/src/test/scala/objects/EnvironmentTest.scala b/src/test/scala/objects/EnvironmentTest.scala index ed848f21..0ee7e3c2 100644 --- a/src/test/scala/objects/EnvironmentTest.scala +++ b/src/test/scala/objects/EnvironmentTest.scala @@ -207,13 +207,13 @@ class EnvironmentAttributeTest extends Specification { "GantryDenialField" should { "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() EnvironmentAttribute.GantryDenialField.canInteractWith(obj) mustEqual true } "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 EnvironmentAttribute.GantryDenialField.canInteractWith(obj) mustEqual false } diff --git a/src/test/scala/objects/OrbitalShuttleTest.scala b/src/test/scala/objects/OrbitalShuttleTest.scala index aebce4f2..9493280e 100644 --- a/src/test/scala/objects/OrbitalShuttleTest.scala +++ b/src/test/scala/objects/OrbitalShuttleTest.scala @@ -5,13 +5,13 @@ import net.psforever.objects.{GlobalDefinitions, Player, Vehicle} import net.psforever.objects.avatar.Avatar import net.psforever.objects.serverobject.shuttle.OrbitalShuttle 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 class OrbitalShuttleTest extends Specification { - val testAvatar1 = Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute) - val testAvatar2 = Avatar(1, "TestCharacter2", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute) - val testAvatar3 = Avatar(2, "TestCharacter3", 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, CharacterSex.Male, 0, CharacterVoice.Mute) + val testAvatar3 = Avatar(2, "TestCharacter3", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute) "OrbitalShuttle" should { "construct (proper definition)" in {