diff --git a/src/main/scala/net/psforever/actors/net/LoginActor.scala b/src/main/scala/net/psforever/actors/net/LoginActor.scala index dc6cd398b..3656316b7 100644 --- a/src/main/scala/net/psforever/actors/net/LoginActor.scala +++ b/src/main/scala/net/psforever/actors/net/LoginActor.scala @@ -105,7 +105,7 @@ class LoginActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], conne log.trace(s"New login UN:$username. $clientVersion") } - accountLogin(username, password.get) + accountLogin(username, password.getOrElse("")) case ConnectToWorldRequestMessage(name, _, _, _, _, _, _) => log.info(s"Connect to world request for '$name'") diff --git a/src/main/scala/net/psforever/actors/net/SocketActor.scala b/src/main/scala/net/psforever/actors/net/SocketActor.scala index 06ccf77dd..3e431230e 100644 --- a/src/main/scala/net/psforever/actors/net/SocketActor.scala +++ b/src/main/scala/net/psforever/actors/net/SocketActor.scala @@ -135,19 +135,21 @@ class SocketActor( val sessionReaper: Cancellable = context.system.scheduler.scheduleWithFixedDelay(0.seconds, 5.seconds)(() => { val now = System.currentTimeMillis() packetActors.keys.foreach(addr => { - incomingTimes.get(addr) match { - case Some(time) => - if (now - time > Config.app.network.session.inboundGraceTime.toMillis) { - context.self ! StopChild(packetActors(addr)) + packetActors.get(addr) match { + case Some(child) => + if( + (incomingTimes.get(addr) match { + case Some(time) => now - time > Config.app.network.session.inboundGraceTime.toMillis + case _ => false + }) || + (outgoingTimes.get(addr) match { + case Some(time) => now - time > Config.app.network.session.outboundGraceTime.toMillis + case _ => false + }) + ) { + context.self ! StopChild(child) } - case _ => () - } - outgoingTimes.get(addr) match { - case Some(time) => - if (now - time > Config.app.network.session.outboundGraceTime.toMillis) { - context.self ! StopChild(packetActors(addr)) - } - case _ => () + case _ => ; } }) }) diff --git a/src/main/scala/net/psforever/actors/session/AvatarActor.scala b/src/main/scala/net/psforever/actors/session/AvatarActor.scala index 3f2ec18ba..2981b5c4e 100644 --- a/src/main/scala/net/psforever/actors/session/AvatarActor.scala +++ b/src/main/scala/net/psforever/actors/session/AvatarActor.scala @@ -1283,6 +1283,10 @@ class AvatarActor( case "Kit" => doll.Slot(objectIndex).Equipment = Kit(DefinitionUtil.idToDefinition(objectId).asInstanceOf[KitDefinition]) + case "Telepad" | "BoomerTrigger" => ; + //special types of equipment that are not actually loaded + case name => + log.error(s"failing to add unknown equipment to a loadout - $name") } toolAmmo foreach { toolAmmo => diff --git a/src/main/scala/net/psforever/actors/session/ChatActor.scala b/src/main/scala/net/psforever/actors/session/ChatActor.scala index 0b794725b..b8f4ecba7 100644 --- a/src/main/scala/net/psforever/actors/session/ChatActor.scala +++ b/src/main/scala/net/psforever/actors/session/ChatActor.scala @@ -262,7 +262,7 @@ class ChatActor( sessionActor ! SessionActor.Suicide() } - case (CMT_DESTROY, _, contents) => + case (CMT_DESTROY, _, contents) if contents.matches("\\d+") => val guid = contents.toInt session.zone.GUID(session.zone.map.terminalToSpawnPad.getOrElse(guid, guid)) match { case Some(pad: VehicleSpawnPad) => diff --git a/src/main/scala/net/psforever/actors/session/SessionActor.scala b/src/main/scala/net/psforever/actors/session/SessionActor.scala index 1b2558885..7ea560009 100644 --- a/src/main/scala/net/psforever/actors/session/SessionActor.scala +++ b/src/main/scala/net/psforever/actors/session/SessionActor.scala @@ -174,12 +174,12 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con private[this] val damageLog = org.log4s.getLogger(Damageable.LogChannel) var avatarActor: typed.ActorRef[AvatarActor.Command] = context.spawnAnonymous(AvatarActor(context.self)) var chatActor: typed.ActorRef[ChatActor.Command] = context.spawnAnonymous(ChatActor(context.self, avatarActor)) - var accountIntermediary: ActorRef = ActorRef.noSender - var accountPersistence: ActorRef = ActorRef.noSender - var galaxyService: ActorRef = ActorRef.noSender - var squadService: ActorRef = ActorRef.noSender - var propertyOverrideManager: ActorRef = Actor.noSender - var cluster: typed.ActorRef[ICS.Command] = Actor.noSender + var accountIntermediary: ActorRef = Default.Actor + var accountPersistence: ActorRef = Default.Actor + var galaxyService: ActorRef = Default.Actor + var squadService: ActorRef = Default.Actor + var propertyOverrideManager: ActorRef = Default.Actor + var cluster: typed.ActorRef[ICS.Command] = Default.Actor var _session: Session = Session() var progressBarValue: Option[Float] = None var shooting: Option[PlanetSideGUID] = None //ChangeFireStateMessage_Start @@ -3316,13 +3316,16 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con * only the zone-specific squad members will receive the important messages about their squad member's spawn. */ def RespawnSquadSetup(): Unit = { - if (squadUI.nonEmpty) { - sendResponse(PlanetsideAttributeMessage(player.GUID, 31, squad_supplement_id)) - continent.AvatarEvents ! AvatarServiceMessage( - s"${player.Faction}", - AvatarAction.PlanetsideAttribute(player.GUID, 31, squad_supplement_id) - ) - sendResponse(PlanetsideAttributeMessage(player.GUID, 32, squadUI(player.CharId).index)) + squadUI.get(player.CharId) match { + case Some(elem) => + sendResponse(PlanetsideAttributeMessage(player.GUID, 31, squad_supplement_id)) + continent.AvatarEvents ! AvatarServiceMessage( + s"${player.Faction}", + AvatarAction.PlanetsideAttribute(player.GUID, 31, squad_supplement_id) + ) + sendResponse(PlanetsideAttributeMessage(player.GUID, 32, elem.index)) + case _ => + log.warn(s"RespawnSquadSetup: asked to redraw squad information, but ${player.Name} has no squad element for squad $squad_supplement_id") } }