diff --git a/src/main/scala/net/psforever/actors/net/MiddlewareActor.scala b/src/main/scala/net/psforever/actors/net/MiddlewareActor.scala index 4e5c594a8..0be4fffa0 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 f90de34da..55e947a8a 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 052a1ebb4..0d0cd12db 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 8a0ae9f3c..79a472c83 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 25c43274f..8f5e0e5b2 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,