Bug fixes

* /certadd retains zero-cost certs
* Fix squad chat
* Fix tells showing wrong name
* Add workaround for premature resecure messages
This commit is contained in:
Jakob Gillich 2020-08-25 23:04:24 +02:00
parent eeae2073ac
commit cc38ee3f3f
6 changed files with 29 additions and 14 deletions

View file

@ -62,7 +62,6 @@ import net.psforever.util.DefinitionUtil
import org.joda.time.{LocalDateTime, Period} import org.joda.time.{LocalDateTime, Period}
import net.psforever.services.ServiceManager import net.psforever.services.ServiceManager
import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage} import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage}
import net.psforever.objects.Deployables
import scala.collection.mutable import scala.collection.mutable
import scala.concurrent.{ExecutionContextExecutor, Future, Promise} import scala.concurrent.{ExecutionContextExecutor, Future, Promise}
import scala.util.{Failure, Success} import scala.util.{Failure, Success}
@ -711,7 +710,9 @@ class AvatarActor(
case UpdatePurchaseTime(definition, time) => case UpdatePurchaseTime(definition, time) =>
if (!Avatar.purchaseCooldowns.contains(definition)) { 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 // TODO save to db
avatar = avatar.copy(purchaseTimes = avatar.purchaseTimes.updated(definition.Name, time)) avatar = avatar.copy(purchaseTimes = avatar.purchaseTimes.updated(definition.Name, time))

View file

@ -770,6 +770,7 @@ class ChatActor(
case CMT_TOGGLE_SHADES => Cosmetic.Sunglasses case CMT_TOGGLE_SHADES => Cosmetic.Sunglasses
case CMT_TOGGLE_EARPIECE => Cosmetic.Earpiece case CMT_TOGGLE_EARPIECE => Cosmetic.Earpiece
} }
val on = contents match { val on = contents match {
case "on" => true case "on" => true
case "off" => false case "off" => false
@ -811,7 +812,7 @@ class ChatActor(
if (session.avatar.certifications.size < Certification.values.size) { if (session.avatar.certifications.size < Certification.values.size) {
avatarActor ! AvatarActor.SetCertifications(Certification.values.toSet) avatarActor ! AvatarActor.SetCertifications(Certification.values.toSet)
} else { } else {
avatarActor ! AvatarActor.SetCertifications(Set()) avatarActor ! AvatarActor.SetCertifications(Certification.values.filter(_.cost == 0).toSet)
} }
sessionActor ! SessionActor.SendResponse( sessionActor ! SessionActor.SendResponse(
message.copy( message.copy(

View file

@ -2,7 +2,7 @@
package net.psforever.objects package net.psforever.objects
import akka.actor.ActorRef import akka.actor.ActorRef
import net.psforever.objects.avatar.{Avatar, Certification} import net.psforever.objects.avatar.Avatar
import scala.concurrent.duration._ import scala.concurrent.duration._
import net.psforever.objects.ce.{Deployable, DeployedItem} import net.psforever.objects.ce.{Deployable, DeployedItem}

View file

@ -49,8 +49,11 @@ case object Cosmetic extends IntEnum[Cosmetic] {
*/ */
def valuesToAttributeValue(values: Set[Cosmetic]): Long = { def valuesToAttributeValue(values: Set[Cosmetic]): Long = {
values.foldLeft(1) { values.foldLeft(1) {
case (sum, NoHelmet) => sum - NoHelmet.value case (sum, NoHelmet) => sum - 1
case (sum, entry) => sum + entry.value case (sum, BrimmedCap) => sum + 2
case (sum, Sunglasses) => sum + 4
case (sum, Earpiece) => sum + 8
case (sum, Beret) => sum + 16
} }
} }

View file

@ -81,7 +81,7 @@ class ChatService(context: ActorContext[ChatService.Command]) extends AbstractBe
) )
subs.find(_.session.player.Name == message.recipient) match { subs.find(_.session.player.Name == message.recipient) match {
case Some(JoinChannel(receiver, _, _)) => case Some(JoinChannel(receiver, _, _)) =>
receiver ! MessageResponse(session, message, channel) receiver ! MessageResponse(session, message.copy(recipient = session.player.Name), channel)
case None => case None =>
sender ! MessageResponse( sender ! MessageResponse(
session, 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 => case CMT_NOTE =>
subs.filter(_.session.player.Name == message.recipient).foreach { subs
case JoinChannel(actor, _, _) => .filter(_.session.player.Name == message.recipient)
actor ! MessageResponse(session, message.copy(recipient = session.player.Name), channel) .foreach(
} _.actor ! MessageResponse(session, message.copy(recipient = session.player.Name), channel)
)
// faction commands // faction commands
case CMT_OPEN | CMT_PLATOON | CMT_COMMAND => case CMT_OPEN | CMT_PLATOON | CMT_COMMAND =>
subs.filter(_.session.player.Faction == session.player.Faction).foreach { subs
case JoinChannel(actor, _, _) => actor ! MessageResponse(session, message, channel) .filter(_.session.player.Faction == session.player.Faction)
} .foreach(
_.actor ! MessageResponse(session, message, channel)
)
case CMT_GMBROADCAST_NC => case CMT_GMBROADCAST_NC =>
subs.filter(_.session.player.Faction == PlanetSideEmpire.NC).foreach { subs.filter(_.session.player.Faction == PlanetSideEmpire.NC).foreach {

View file

@ -253,6 +253,10 @@ class LocalService(zone: Zone) extends Actor {
log.info("Base hack completed, but base was out of NTU.") 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 // Reset CC back to normal operation
self ! LocalServiceMessage( self ! LocalServiceMessage(
zone.id, zone.id,