diff --git a/src/main/scala/net/psforever/actors/session/AvatarActor.scala b/src/main/scala/net/psforever/actors/session/AvatarActor.scala index b4c9cd46..aee28883 100644 --- a/src/main/scala/net/psforever/actors/session/AvatarActor.scala +++ b/src/main/scala/net/psforever/actors/session/AvatarActor.scala @@ -366,13 +366,19 @@ class AvatarActor( result.onComplete { case Success((loadouts, implants, certs, locker)) => + val validatedLocker = if (avatar.locker.HasGUID || avatar.locker.Inventory.Size > 0) { + //if locker shows indication of being previously used, this player is rejoining an active session + avatar.locker + } else { + locker + } avatar = avatar.copy( loadouts = loadouts, // make sure we always have the base certifications certifications = certs.map(cert => Certification.withValue(cert.id)).toSet ++ Config.app.game.baseCertifications, implants = implants.map(implant => Some(Implant(implant.toImplantDefinition))).padTo(3, None), - locker = locker + locker = validatedLocker ) staminaRegenTimer.cancel() diff --git a/src/main/scala/net/psforever/actors/session/SessionActor.scala b/src/main/scala/net/psforever/actors/session/SessionActor.scala index 73d67cd5..55739fb6 100644 --- a/src/main/scala/net/psforever/actors/session/SessionActor.scala +++ b/src/main/scala/net/psforever/actors/session/SessionActor.scala @@ -1418,7 +1418,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con //rejoin current avatar/player log.info(s"LoginInfo: player $playerName is alive") deadState = DeadState.Alive - session = session.copy(player = p) + session = session.copy(player = p, avatar = a) persist() setupAvatarFunc = AvatarRejoin avatarActor ! AvatarActor.ReplaceAvatar(a) @@ -1428,7 +1428,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con //convert player to a corpse (unless in vehicle); automatic recall to closest spawn point log.info(s"LoginInfo: player $playerName is dead") deadState = DeadState.Dead - session = session.copy(player = p) + session = session.copy(player = p, avatar = a) persist() player.Zone = inZone HandleReleaseAvatar(p, inZone) @@ -1449,7 +1449,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con tplayer.Release //for proper respawn tplayer.Zone = inZone tplayer - } + }, avatar = a ) avatarActor ! AvatarActor.ReplaceAvatar(a) avatarActor ! AvatarActor.LoginAvatar(context.self) diff --git a/src/main/scala/net/psforever/objects/locker/LockerEquipment.scala b/src/main/scala/net/psforever/objects/locker/LockerEquipment.scala index cded00c9..b69fc1e5 100644 --- a/src/main/scala/net/psforever/objects/locker/LockerEquipment.scala +++ b/src/main/scala/net/psforever/objects/locker/LockerEquipment.scala @@ -8,7 +8,7 @@ import net.psforever.types.{PlanetSideEmpire, PlanetSideGUID} /** * A wrapper class that allows a player-facing locker component - * to be treated standard `Equipment` object in the player's fifth (sixth) slot. + * to be treated like a standard `Equipment` object in the player's fifth (sixth) slot. * (The opposite is not true - the equipment does not get treated as a locker component.) * During packet conversion and registration and general access in terms of holsters or "equipment slots", * the component may be be treated the same as other existing objects at the same level.