From 5353323aee3194e39aeef2ef41bfa779128d9b90 Mon Sep 17 00:00:00 2001 From: ScrawnyRonnie Date: Sun, 3 Aug 2025 15:37:29 -0400 Subject: [PATCH] sddum delivery and squad chat --- .../scala/net/psforever/actors/net/MiddlewareActor.scala | 9 ++++++++- .../net/psforever/actors/session/csr/ChatLogic.scala | 4 ++-- .../net/psforever/actors/session/normal/ChatLogic.scala | 4 ++-- .../actors/session/normal/SquadHandlerLogic.scala | 2 ++ .../actors/session/support/SessionSquadHandlers.scala | 1 + 5 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/main/scala/net/psforever/actors/net/MiddlewareActor.scala b/src/main/scala/net/psforever/actors/net/MiddlewareActor.scala index 4e5c594a..0be4fffa 100644 --- a/src/main/scala/net/psforever/actors/net/MiddlewareActor.scala +++ b/src/main/scala/net/psforever/actors/net/MiddlewareActor.scala @@ -139,6 +139,12 @@ object MiddlewareActor { packet.isInstanceOf[KeepAliveMessage] } + /** `SquadDetailDefinitionUpdateMessage` [sometimes] doesn't make for a good travel partner + * as seen in issue #1176 and PR #1290 so deliver it alone */ + private def squadDetailDefinitionMessageGuard(packet: PlanetSidePacket): Boolean = { + packet.isInstanceOf[SquadDetailDefinitionUpdateMessage] + } + /** * A function for blanking tasks related to inbound packet resolution. * Do nothing. @@ -246,7 +252,8 @@ class MiddlewareActor( */ private val packetsBundledByThemselves: List[PlanetSidePacket => Boolean] = List( MiddlewareActor.keepAliveMessageGuard, - MiddlewareActor.characterInfoMessageGuard + MiddlewareActor.characterInfoMessageGuard, + MiddlewareActor.squadDetailDefinitionMessageGuard ) private val smpHistoryLength: Int = 100 diff --git a/src/main/scala/net/psforever/actors/session/csr/ChatLogic.scala b/src/main/scala/net/psforever/actors/session/csr/ChatLogic.scala index f90de34d..55e947a8 100644 --- a/src/main/scala/net/psforever/actors/session/csr/ChatLogic.scala +++ b/src/main/scala/net/psforever/actors/session/csr/ChatLogic.scala @@ -15,7 +15,7 @@ import net.psforever.objects.zones.Zone import net.psforever.packet.game.{ChatMsg, SetChatFilterMessage} import net.psforever.services.Service import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage} -import net.psforever.services.chat.{ChatChannel, DefaultChannel, SpectatorChannel} +import net.psforever.services.chat.{ChatChannel, DefaultChannel, SpectatorChannel, SquadChannel} import net.psforever.types.ChatMessageType.{CMT_TOGGLESPECTATORMODE, CMT_TOGGLE_GM} import net.psforever.types.{ChatMessageType, PlanetSideEmpire} import net.psforever.zones.Zones @@ -131,7 +131,7 @@ class ChatLogic(val ops: ChatOperations, implicit val context: ActorContext) ext ops.commandSend(session, message, comms) case (CMT_SQUAD, _, _) => - ops.commandSquad(session, message, comms) //todo SquadChannel, but what is the guid + ops.commandSquad(session, message, SquadChannel(sessionLogic.squad.squad_guid)) case (CMT_WHO | CMT_WHO_CSR | CMT_WHO_CR | CMT_WHO_PLATOONLEADERS | CMT_WHO_SQUADLEADERS | CMT_WHO_TEAMS, _, _) => ops.commandWho(session) diff --git a/src/main/scala/net/psforever/actors/session/normal/ChatLogic.scala b/src/main/scala/net/psforever/actors/session/normal/ChatLogic.scala index 052a1ebb..0d0cd12d 100644 --- a/src/main/scala/net/psforever/actors/session/normal/ChatLogic.scala +++ b/src/main/scala/net/psforever/actors/session/normal/ChatLogic.scala @@ -7,7 +7,7 @@ import net.psforever.actors.session.spectator.SpectatorMode import net.psforever.actors.session.support.{ChatFunctions, ChatOperations, SessionData} import net.psforever.objects.Session import net.psforever.packet.game.{ChatMsg, ServerType, SetChatFilterMessage} -import net.psforever.services.chat.DefaultChannel +import net.psforever.services.chat.{DefaultChannel, SquadChannel} import net.psforever.types.ChatMessageType import net.psforever.types.ChatMessageType.{CMT_TOGGLESPECTATORMODE, CMT_TOGGLE_GM} import net.psforever.util.Config @@ -77,7 +77,7 @@ class ChatLogic(val ops: ChatOperations, implicit val context: ActorContext) ext ops.commandSend(session, message, DefaultChannel) case (CMT_SQUAD, _, _) => - ops.commandSquad(session, message, DefaultChannel) //todo SquadChannel, but what is the guid + ops.commandSquad(session, message, SquadChannel(sessionLogic.squad.squad_guid)) case (CMT_WHO | CMT_WHO_CSR | CMT_WHO_CR | CMT_WHO_PLATOONLEADERS | CMT_WHO_SQUADLEADERS | CMT_WHO_TEAMS, _, _) => ops.commandWho(session) diff --git a/src/main/scala/net/psforever/actors/session/normal/SquadHandlerLogic.scala b/src/main/scala/net/psforever/actors/session/normal/SquadHandlerLogic.scala index 8a0ae9f3..79a472c8 100644 --- a/src/main/scala/net/psforever/actors/session/normal/SquadHandlerLogic.scala +++ b/src/main/scala/net/psforever/actors/session/normal/SquadHandlerLogic.scala @@ -210,6 +210,7 @@ class SquadHandlerLogic(val ops: SessionSquadHandlers, implicit val context: Act case Some((ourMember, ourIndex)) => //we are joining the squad //load each member's entry (our own too) + ops.squad_guid = squad.GUID ops.squad_supplement_id = squad.GUID.guid + 1 membershipPositions.foreach { case (member, index) => @@ -300,6 +301,7 @@ class SquadHandlerLogic(val ops: SessionSquadHandlers, implicit val context: Act avatarActor ! AvatarActor.SetLookingForSquad(false) //a finalization? what does this do? sendResponse(SquadDefinitionActionMessage(PlanetSideGUID(0), 0, SquadAction.Unknown(18))) + ops.squad_guid = PlanetSideGUID(0) ops.squad_supplement_id = 0 ops.squadUpdateCounter = 0 ops.updateSquad = ops.NoSquadUpdates diff --git a/src/main/scala/net/psforever/actors/session/support/SessionSquadHandlers.scala b/src/main/scala/net/psforever/actors/session/support/SessionSquadHandlers.scala index 25c43274..8f5e0e5b 100644 --- a/src/main/scala/net/psforever/actors/session/support/SessionSquadHandlers.scala +++ b/src/main/scala/net/psforever/actors/session/support/SessionSquadHandlers.scala @@ -53,6 +53,7 @@ class SessionSquadHandlers( private[session] val squadUI: mutable.LongMap[SquadUIElement] = new mutable.LongMap[SquadUIElement]() private[session] var squad_supplement_id: Int = 0 + private[session] var squad_guid: PlanetSideGUID = PlanetSideGUID(0) /** * When joining or creating a squad, the original state of the avatar's internal LFS variable is blanked. * This `WorldSessionActor`-local variable is then used to indicate the ongoing state of the LFS UI component,