Send tactical squad chat only to squad members

This commit is contained in:
Jakob Gillich 2021-04-18 01:21:07 +02:00
parent 22de086bb8
commit 765262f51a
2 changed files with 57 additions and 41 deletions

View file

@ -371,18 +371,23 @@ class ChatActor(
customNtuValue match { customNtuValue match {
// x = n0% of maximum capacitance // x = n0% of maximum capacitance
case Some(value) if value > -1 && value < 11 => case Some(value) if value > -1 && value < 11 =>
silos.collect { case silo: ResourceSilo => silos.collect {
silo.Actor ! ResourceSilo.UpdateChargeLevel(value * silo.MaxNtuCapacitor * 0.1f - silo.NtuCapacitor) case silo: ResourceSilo =>
silo.Actor ! ResourceSilo.UpdateChargeLevel(
value * silo.MaxNtuCapacitor * 0.1f - silo.NtuCapacitor
)
} }
// capacitance set to x (where x > 10) exactly, within limits // capacitance set to x (where x > 10) exactly, within limits
case Some(value) => case Some(value) =>
silos.collect { case silo: ResourceSilo => silos.collect {
case silo: ResourceSilo =>
silo.Actor ! ResourceSilo.UpdateChargeLevel(value - silo.NtuCapacitor) silo.Actor ! ResourceSilo.UpdateChargeLevel(value - silo.NtuCapacitor)
} }
case None => case None =>
// x >= n0% of maximum capacitance and x <= maximum capacitance // x >= n0% of maximum capacitance and x <= maximum capacitance
val rand = new scala.util.Random val rand = new scala.util.Random
silos.collect { case silo: ResourceSilo => silos.collect {
case silo: ResourceSilo =>
val a = 7 val a = 7
val b = 10 - a val b = 10 - a
val tenth = silo.MaxNtuCapacitor * 0.1f val tenth = silo.MaxNtuCapacitor * 0.1f
@ -475,14 +480,11 @@ class ChatActor(
// [all [<empire>|none]] // [all [<empire>|none]]
(Some(1) | None, Some(0), None, Some(_), None) => (Some(1) | None, Some(0), None, Some(_), None) =>
val buildings: Seq[Building] = buildingsOption.getOrElse( val buildings: Seq[Building] = buildingsOption.getOrElse(
session.zone.Buildings session.zone.Buildings.values.filter { building =>
.values
.filter { building =>
building.PlayersInSOI.exists { soiPlayer => building.PlayersInSOI.exists { soiPlayer =>
session.player.CharId == soiPlayer.CharId session.player.CharId == soiPlayer.CharId
} }
} }.toSeq
.toSeq
) )
buildings foreach { building => buildings foreach { building =>
// TODO implement timer // TODO implement timer
@ -563,12 +565,21 @@ class ChatActor(
ChatChannel.Default() ChatChannel.Default()
) )
case (CMT_VOICE, _, _) => case (CMT_VOICE, _, contents) =>
// SH prefix are tactical voice macros only sent to squad
if (contents.startsWith("SH")) {
channels.foreach {
case channel: ChatChannel.Squad =>
chatService ! ChatService.Message(session, message.copy(recipient = session.player.Name), channel)
case _ =>
}
} else {
chatService ! ChatService.Message( chatService ! ChatService.Message(
session, session,
message.copy(recipient = session.player.Name), message.copy(recipient = session.player.Name),
ChatChannel.Default() ChatChannel.Default()
) )
}
case (CMT_TELL, _, _) if !session.player.silenced => case (CMT_TELL, _, _) if !session.player.silenced =>
chatService ! ChatService.Message( chatService ! ChatService.Message(
@ -690,7 +701,10 @@ class ChatActor(
case (None, Some(waypoint)) if waypoint == "-list" => case (None, Some(waypoint)) if waypoint == "-list" =>
val zone = PointOfInterest.get(session.player.Zone.id) val zone = PointOfInterest.get(session.player.Zone.id)
zone match { zone match {
case Some(zone: PointOfInterest) => sessionActor ! SessionActor.SendResponse(ChatMsg(UNK_229, true, "", PointOfInterest.listAll(zone), None)) case Some(zone: PointOfInterest) =>
sessionActor ! SessionActor.SendResponse(
ChatMsg(UNK_229, true, "", PointOfInterest.listAll(zone), None)
)
case _ => ChatMsg(UNK_229, true, "", s"unknown player zone '${session.player.Zone.id}'", None) case _ => ChatMsg(UNK_229, true, "", s"unknown player zone '${session.player.Zone.id}'", None)
} }
case (None, Some(waypoint)) if waypoint != "-help" => case (None, Some(waypoint)) if waypoint != "-help" =>
@ -939,7 +953,8 @@ class ChatActor(
case CMT_VOICE => case CMT_VOICE =>
if ( if (
session.zone == fromSession.zone && session.zone == fromSession.zone &&
Vector3.Distance(session.player.Position, fromSession.player.Position) < 25 Vector3.Distance(session.player.Position, fromSession.player.Position) < 25 ||
message.contents.startsWith("SH") // tactical squad voice macro
) { ) {
sessionActor ! SessionActor.SendResponse(message) sessionActor ! SessionActor.SendResponse(message)
} }

View file

@ -63,8 +63,9 @@ class ChatService(context: ActorContext[ChatService.Command]) extends AbstractBe
case Message(session, message, channel) => case Message(session, message, channel) =>
(channel, message.messageType) match { (channel, message.messageType) match {
case (ChatChannel.Squad(_), CMT_SQUAD) => ; case (ChatChannel.Squad(_), CMT_SQUAD) => ()
case (ChatChannel.Default(), messageType) if messageType != CMT_SQUAD => ; case (ChatChannel.Squad(_), CMT_VOICE) if message.contents.startsWith("SH") => ()
case (ChatChannel.Default(), messageType) if messageType != CMT_SQUAD => ()
case _ => case _ =>
log.error(s"invalid chat channel $channel for messageType ${message.messageType}") log.error(s"invalid chat channel $channel for messageType ${message.messageType}")
return this return this