mirror of
https://github.com/psforever/PSF-LoginServer.git
synced 2026-07-16 08:55:18 +00:00
when a player is respawning, other players do not send their own update PSM's
This commit is contained in:
parent
a8f488b00f
commit
1f14df0e0a
1 changed files with 16 additions and 12 deletions
|
|
@ -73,9 +73,9 @@ class SessionAvatarHandlers(
|
||||||
canSeeReallyFar
|
canSeeReallyFar
|
||||||
) if isNotSameTarget =>
|
) if isNotSameTarget =>
|
||||||
val pstateToSave = pstate.copy(timestamp = 0)
|
val pstateToSave = pstate.copy(timestamp = 0)
|
||||||
val (lastMsg, lastTime, lastPosition, wasSpectating) = lastSeenStreamMessage(guid.guid) match {
|
val (lastMsg, lastTime, lastPosition, wasSpectating, wasVisible) = lastSeenStreamMessage(guid.guid) match {
|
||||||
case SessionAvatarHandlers.LastUpstream(Some(msg), time) => (Some(msg), time, msg.pos, msg.spectator)
|
case SessionAvatarHandlers.LastUpstream(Some(msg), visible, time) => (Some(msg), time, msg.pos, msg.spectator, visible)
|
||||||
case _ => (None, 0L, Vector3.Zero, false)
|
case _ => (None, 0L, Vector3.Zero, false, false)
|
||||||
}
|
}
|
||||||
val drawConfig = Config.app.game.playerDraw
|
val drawConfig = Config.app.game.playerDraw
|
||||||
val maxRange = drawConfig.rangeMax * drawConfig.rangeMax //sq.m
|
val maxRange = drawConfig.rangeMax * drawConfig.rangeMax //sq.m
|
||||||
|
|
@ -85,8 +85,10 @@ class SessionAvatarHandlers(
|
||||||
val wasInVisibleRange = Vector3.DistanceSquared(lastPosition, pos) <= maxRange
|
val wasInVisibleRange = Vector3.DistanceSquared(lastPosition, pos) <= maxRange
|
||||||
val now = System.currentTimeMillis() //ms
|
val now = System.currentTimeMillis() //ms
|
||||||
val durationSince = now - lastTime //ms
|
val durationSince = now - lastTime //ms
|
||||||
if ((!spectating && inVisibleRange && !lastMsg.contains(pstateToSave)) ||
|
val released = player.isReleased
|
||||||
(inVisibleRange && wasSpectating && !spectating)) { //this condition is unlikely, but ...
|
if (!released &&
|
||||||
|
((!spectating && inVisibleRange && !lastMsg.contains(pstateToSave)) ||
|
||||||
|
(inVisibleRange && wasSpectating && !spectating))) { //this condition is unlikely, but ...
|
||||||
lazy val targetDelay = {
|
lazy val targetDelay = {
|
||||||
val populationOver = math.max(
|
val populationOver = math.max(
|
||||||
0,
|
0,
|
||||||
|
|
@ -120,13 +122,15 @@ class SessionAvatarHandlers(
|
||||||
isCloaking
|
isCloaking
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
lastSeenStreamMessage(guid.guid) = SessionAvatarHandlers.LastUpstream(Some(pstateToSave), now)
|
lastSeenStreamMessage(guid.guid) = SessionAvatarHandlers.LastUpstream(Some(pstateToSave), visible=true, now)
|
||||||
} else {
|
} else {
|
||||||
lastSeenStreamMessage(guid.guid) = SessionAvatarHandlers.LastUpstream(Some(pstateToSave), lastTime)
|
lastSeenStreamMessage(guid.guid) = SessionAvatarHandlers.LastUpstream(Some(pstateToSave), visible=false, lastTime)
|
||||||
}
|
}
|
||||||
} else if (
|
} else if (
|
||||||
|
(!spectating && wasInVisibleRange && !inVisibleRange) ||
|
||||||
(inVisibleRange && !wasSpectating && spectating) ||
|
(inVisibleRange && !wasSpectating && spectating) ||
|
||||||
(!spectating && wasInVisibleRange && !inVisibleRange)) {
|
(wasVisible && released)
|
||||||
|
) {
|
||||||
//must hide
|
//must hide
|
||||||
val lat = (1 + hidingPlayerRandomizer.nextInt(continent.map.scale.height.toInt)).toFloat
|
val lat = (1 + hidingPlayerRandomizer.nextInt(continent.map.scale.height.toInt)).toFloat
|
||||||
sendResponse(
|
sendResponse(
|
||||||
|
|
@ -141,7 +145,7 @@ class SessionAvatarHandlers(
|
||||||
is_cloaked = isCloaking
|
is_cloaked = isCloaking
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
lastSeenStreamMessage(guid.guid) = SessionAvatarHandlers.LastUpstream(Some(pstateToSave), now)
|
lastSeenStreamMessage(guid.guid) = SessionAvatarHandlers.LastUpstream(Some(pstateToSave), visible=false, now)
|
||||||
}
|
}
|
||||||
|
|
||||||
case AvatarResponse.ObjectHeld(slot, _)
|
case AvatarResponse.ObjectHeld(slot, _)
|
||||||
|
|
@ -544,9 +548,9 @@ class SessionAvatarHandlers(
|
||||||
}
|
}
|
||||||
|
|
||||||
object SessionAvatarHandlers {
|
object SessionAvatarHandlers {
|
||||||
private[support] case class LastUpstream(msg: Option[AvatarResponse.PlayerState], time: Long)
|
private[support] case class LastUpstream(msg: Option[AvatarResponse.PlayerState], visible: Boolean, time: Long)
|
||||||
|
|
||||||
private[support] def blankUpstreamMessages(n: Int): Array[LastUpstream] = {
|
private[support] def blankUpstreamMessages(n: Int): Array[LastUpstream] = {
|
||||||
Array.fill[SessionAvatarHandlers.LastUpstream](n)(elem = LastUpstream(None, 0L))
|
Array.fill[SessionAvatarHandlers.LastUpstream](n)(elem = LastUpstream(None, visible=false, 0L))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue