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 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))

View file

@ -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(

View file

@ -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}

View file

@ -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
}
}

View file

@ -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 {

View file

@ -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,