diff --git a/src/main/scala/net/psforever/actors/session/AvatarActor.scala b/src/main/scala/net/psforever/actors/session/AvatarActor.scala index 1aa2c6caf..035f2e1d1 100644 --- a/src/main/scala/net/psforever/actors/session/AvatarActor.scala +++ b/src/main/scala/net/psforever/actors/session/AvatarActor.scala @@ -62,7 +62,6 @@ import net.psforever.util.DefinitionUtil import org.joda.time.{LocalDateTime, Period} import net.psforever.services.ServiceManager import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage} -import net.psforever.objects.Deployables import scala.collection.mutable import scala.concurrent.{ExecutionContextExecutor, Future, Promise} import scala.util.{Failure, Success} @@ -711,7 +710,9 @@ class AvatarActor( case UpdatePurchaseTime(definition, time) => if (!Avatar.purchaseCooldowns.contains(definition)) { - log.warn(s"UpdatePurchaseTime message for item '${definition.Name}' without cooldown") + // TODO only send for items with cooldowns + //log.warn(s"UpdatePurchaseTime message for item '${definition.Name}' without cooldown") + return Behaviors.same } // TODO save to db avatar = avatar.copy(purchaseTimes = avatar.purchaseTimes.updated(definition.Name, time)) diff --git a/src/main/scala/net/psforever/actors/session/ChatActor.scala b/src/main/scala/net/psforever/actors/session/ChatActor.scala index 4ecbe26ff..72eaad47a 100644 --- a/src/main/scala/net/psforever/actors/session/ChatActor.scala +++ b/src/main/scala/net/psforever/actors/session/ChatActor.scala @@ -770,6 +770,7 @@ class ChatActor( case CMT_TOGGLE_SHADES => Cosmetic.Sunglasses case CMT_TOGGLE_EARPIECE => Cosmetic.Earpiece } + val on = contents match { case "on" => true case "off" => false @@ -811,7 +812,7 @@ class ChatActor( if (session.avatar.certifications.size < Certification.values.size) { avatarActor ! AvatarActor.SetCertifications(Certification.values.toSet) } else { - avatarActor ! AvatarActor.SetCertifications(Set()) + avatarActor ! AvatarActor.SetCertifications(Certification.values.filter(_.cost == 0).toSet) } sessionActor ! SessionActor.SendResponse( message.copy( diff --git a/src/main/scala/net/psforever/objects/Deployables.scala b/src/main/scala/net/psforever/objects/Deployables.scala index 5a12719d3..704eb0760 100644 --- a/src/main/scala/net/psforever/objects/Deployables.scala +++ b/src/main/scala/net/psforever/objects/Deployables.scala @@ -2,7 +2,7 @@ package net.psforever.objects import akka.actor.ActorRef -import net.psforever.objects.avatar.{Avatar, Certification} +import net.psforever.objects.avatar.Avatar import scala.concurrent.duration._ import net.psforever.objects.ce.{Deployable, DeployedItem} diff --git a/src/main/scala/net/psforever/objects/avatar/Cosmetic.scala b/src/main/scala/net/psforever/objects/avatar/Cosmetic.scala index 146c61004..8d980fe0d 100644 --- a/src/main/scala/net/psforever/objects/avatar/Cosmetic.scala +++ b/src/main/scala/net/psforever/objects/avatar/Cosmetic.scala @@ -49,8 +49,11 @@ case object Cosmetic extends IntEnum[Cosmetic] { */ def valuesToAttributeValue(values: Set[Cosmetic]): Long = { values.foldLeft(1) { - case (sum, NoHelmet) => sum - NoHelmet.value - case (sum, entry) => sum + entry.value + case (sum, NoHelmet) => sum - 1 + case (sum, BrimmedCap) => sum + 2 + case (sum, Sunglasses) => sum + 4 + case (sum, Earpiece) => sum + 8 + case (sum, Beret) => sum + 16 } } diff --git a/src/main/scala/net/psforever/services/chat/ChatService.scala b/src/main/scala/net/psforever/services/chat/ChatService.scala index bcaacbc72..d34c340b0 100644 --- a/src/main/scala/net/psforever/services/chat/ChatService.scala +++ b/src/main/scala/net/psforever/services/chat/ChatService.scala @@ -81,7 +81,7 @@ class ChatService(context: ActorContext[ChatService.Command]) extends AbstractBe ) subs.find(_.session.player.Name == message.recipient) match { case Some(JoinChannel(receiver, _, _)) => - receiver ! MessageResponse(session, message, channel) + receiver ! MessageResponse(session, message.copy(recipient = session.player.Name), channel) case None => sender ! MessageResponse( session, @@ -146,17 +146,23 @@ class ChatService(context: ActorContext[ChatService.Command]) extends AbstractBe } + case CMT_SQUAD => + subs.foreach(_.actor ! MessageResponse(session, message, channel)) + case CMT_NOTE => - subs.filter(_.session.player.Name == message.recipient).foreach { - case JoinChannel(actor, _, _) => - actor ! MessageResponse(session, message.copy(recipient = session.player.Name), channel) - } + subs + .filter(_.session.player.Name == message.recipient) + .foreach( + _.actor ! MessageResponse(session, message.copy(recipient = session.player.Name), channel) + ) // faction commands case CMT_OPEN | CMT_PLATOON | CMT_COMMAND => - subs.filter(_.session.player.Faction == session.player.Faction).foreach { - case JoinChannel(actor, _, _) => actor ! MessageResponse(session, message, channel) - } + subs + .filter(_.session.player.Faction == session.player.Faction) + .foreach( + _.actor ! MessageResponse(session, message, channel) + ) case CMT_GMBROADCAST_NC => subs.filter(_.session.player.Faction == PlanetSideEmpire.NC).foreach { diff --git a/src/main/scala/net/psforever/services/local/LocalService.scala b/src/main/scala/net/psforever/services/local/LocalService.scala index fa4e43a7c..bcbfb5656 100644 --- a/src/main/scala/net/psforever/services/local/LocalService.scala +++ b/src/main/scala/net/psforever/services/local/LocalService.scala @@ -253,6 +253,10 @@ class LocalService(zone: Zone) extends Actor { log.info("Base hack completed, but base was out of NTU.") } + // FIXME shitty workaround so we don't get a "resecured by owner" message + // SetFaction must be processed before we can keep going + Thread.sleep(1000) + // Reset CC back to normal operation self ! LocalServiceMessage( zone.id,