mirror of
https://github.com/2revoemag/PSF-BotServer.git
synced 2026-01-20 02:24:45 +00:00
Squads Again Again Again
Let's Try Squads Again
This commit is contained in:
commit
d76b41365c
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -28,21 +28,21 @@ class SquadHandlerLogic(val ops: SessionSquadHandlers, implicit val context: Act
|
|||
/* packet */
|
||||
|
||||
def handleSquadDefinitionAction(pkt: SquadDefinitionActionMessage): Unit = {
|
||||
/*if (!player.spectator) {
|
||||
if (!player.spectator) {
|
||||
val SquadDefinitionActionMessage(u1, u2, action) = pkt
|
||||
squadService ! SquadServiceMessage(player, continent, SquadServiceAction.Definition(u1, u2, action))
|
||||
}*/
|
||||
}
|
||||
}
|
||||
|
||||
def handleSquadMemberRequest(pkt: SquadMembershipRequest): Unit = {
|
||||
/* if (!player.spectator) {
|
||||
if (!player.spectator) {
|
||||
val SquadMembershipRequest(request_type, char_id, unk3, player_name, unk5) = pkt
|
||||
squadService ! SquadServiceMessage(
|
||||
player,
|
||||
continent,
|
||||
SquadServiceAction.Membership(request_type, char_id, unk3, player_name, unk5)
|
||||
)
|
||||
}*/
|
||||
}
|
||||
}
|
||||
|
||||
def handleSquadWaypointRequest(pkt: SquadWaypointRequest): Unit = {
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -3853,7 +3853,7 @@ class ZoningOperations(
|
|||
}
|
||||
|
||||
def startEnqueueSquadMessages: Boolean = {
|
||||
sessionLogic.zoning.zoneReload && sessionLogic.zoning.spawn.setAvatar && player.isAlive
|
||||
!sessionLogic.zoning.zoneReload && sessionLogic.zoning.spawn.setAvatar && player.isAlive
|
||||
}
|
||||
|
||||
def enqueueNewActivity(newTasking: SpawnOperations.ActivityQueuedTask): Unit = {
|
||||
|
|
|
|||
|
|
@ -368,6 +368,7 @@ class SquadInvitationManager(subs: SquadSubscriptionEntity, parent: ActorRef) {
|
|||
charId,
|
||||
SquadResponse.Membership(SquadResponseType.Cancel, charId, Some(0L), name, unk5 = false)
|
||||
)
|
||||
case None => ()
|
||||
}
|
||||
None
|
||||
}
|
||||
|
|
|
|||
|
|
@ -274,8 +274,8 @@ class SquadService extends Actor {
|
|||
SquadActionMembershipCancel(cancellingPlayer, tplayer)
|
||||
|
||||
case SquadAction.Membership(SquadRequestType.Promote, _, _, _, _) => ()
|
||||
// case SquadAction.Membership(SquadRequestType.Promote, promotingPlayer, Some(_promotedPlayer), promotedName, _) =>
|
||||
// SquadActionMembershipPromote(promotingPlayer, _promotedPlayer, promotedName, SquadServiceMessage(tplayer, zone, action), sender())
|
||||
case SquadAction.Membership(SquadRequestType.Promote, promotingPlayer, Some(_promotedPlayer), promotedName, _) =>
|
||||
SquadActionMembershipPromote(promotingPlayer, _promotedPlayer, promotedName, SquadServiceMessage(tplayer, zone, action), sender())
|
||||
|
||||
case SquadAction.Membership(event, _, _, _, _) =>
|
||||
info(s"SquadAction.Membership: $event is not yet supported")
|
||||
|
|
|
|||
|
|
@ -653,7 +653,7 @@ class SquadSwitchboard(
|
|||
if (squad.Leader.CharId == char_id) {
|
||||
membership.lift(position) match {
|
||||
case Some(toMember) =>
|
||||
//SquadActionMembershipPromote(char_id, toMember.CharId)
|
||||
SquadActionMembershipPromote(char_id, toMember.CharId)
|
||||
case _ => ;
|
||||
}
|
||||
} else {
|
||||
|
|
@ -684,7 +684,7 @@ class SquadSwitchboard(
|
|||
def SquadActionMembership(action: Any): Unit = {
|
||||
action match {
|
||||
case SquadAction.Membership(SquadRequestType.Promote, promotingPlayer, Some(promotedPlayer), _, _) =>
|
||||
//SquadActionMembershipPromote(promotingPlayer, promotedPlayer)
|
||||
SquadActionMembershipPromote(promotingPlayer, promotedPlayer)
|
||||
|
||||
case SquadAction.Membership(event, _, _, _, _) =>
|
||||
log.debug(s"SquadAction.Membership: $event is not supported here")
|
||||
|
|
|
|||
|
|
@ -40,10 +40,10 @@ final case class IndirectInvite(originalRequester: Player, features: SquadFeatur
|
|||
val leaderCharId = player.CharId
|
||||
val invitedPlayer = originalRequester.CharId
|
||||
manager
|
||||
.handleVacancyInvite(features, invitedPlayer, invitedPlayer, originalRequester)
|
||||
.handleVacancyInvite(features, invitedPlayer, leaderCharId, originalRequester)
|
||||
.collect {
|
||||
case (_, position) if manager.joinSquad(originalRequester, features, position) =>
|
||||
manager.acceptanceMessages(invitedPlayer, invitedPlayer, originalRequester.Name)
|
||||
manager.acceptanceMessages(leaderCharId, invitedPlayer, originalRequester.Name)
|
||||
//clean up invitations specifically for this squad and this position
|
||||
val cleanedUpActiveInvitesForSquadAndPosition = manager.cleanUpActiveInvitesForSquadAndPosition(features.Squad.GUID, position)
|
||||
cleanedUpActiveInvitesForSquadAndPosition.collect { case (id, _) =>
|
||||
|
|
@ -79,7 +79,7 @@ final case class IndirectInvite(originalRequester: Player, features: SquadFeatur
|
|||
.orElse {
|
||||
manager.publish(
|
||||
leaderCharId,
|
||||
SquadResponse.SquadRelatedComment(s"Your invitation to ${player.Name} was accepted, but failed.")
|
||||
SquadResponse.SquadRelatedComment(s"Your invitation to ${originalRequester.Name} was accepted, but failed.")
|
||||
)
|
||||
manager.publish(
|
||||
invitedPlayer,
|
||||
|
|
|
|||
|
|
@ -114,7 +114,7 @@ final case class InvitationToCreateASquad(futureSquadLeader: Player)
|
|||
SquadResponse.Membership(SquadResponseType.Reject, invitingPlayerCharId, Some(rejectingPlayer), player.Name, unk5 = false)
|
||||
)
|
||||
manager.publish(
|
||||
rejectingPlayer,
|
||||
invitingPlayerCharId,
|
||||
SquadResponse.SquadRelatedComment(s"Your request to form a squad has been refused.")
|
||||
)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -109,10 +109,10 @@ final case class InvitationToJoinSquad(charId: Long, name: String, features: Squ
|
|||
//rejectingPlayer is the would-be squad member; the squad leader sent the request and was rejected
|
||||
doRejection(manager, player, rejectingPlayer)
|
||||
manager.rejectionMessages(rejectingPlayer, charId, player.Name)
|
||||
manager.publish(
|
||||
/*manager.publish(
|
||||
rejectingPlayer,
|
||||
SquadResponse.SquadRelatedComment(s"Your request to join squad '${features.Squad.Task}' has been refused.")
|
||||
)
|
||||
)*/
|
||||
}
|
||||
|
||||
def doRejection(
|
||||
|
|
|
|||
Loading…
Reference in a new issue