diff --git a/src/main/scala/net/psforever/actors/session/AvatarActor.scala b/src/main/scala/net/psforever/actors/session/AvatarActor.scala index f49912835..b4c9cd46a 100644 --- a/src/main/scala/net/psforever/actors/session/AvatarActor.scala +++ b/src/main/scala/net/psforever/actors/session/AvatarActor.scala @@ -745,9 +745,10 @@ class AvatarActor( case UpdateUseTime(definition, time) => if (!Avatar.useCooldowns.contains(definition)) { - log.warn(s"UpdateUseTime message for item '${definition.Name}' without cooldown") + log.warn(s"${avatar.name} is updating a use time for item '${definition.Name}' that has no cooldown") } avatar = avatar.copy(useTimes = avatar.useTimes.updated(definition.Name, time)) + sessionActor ! SessionActor.UseCooldownRenewed(definition, time) Behaviors.same case RefreshPurchaseTimes() => diff --git a/src/main/scala/net/psforever/actors/session/SessionActor.scala b/src/main/scala/net/psforever/actors/session/SessionActor.scala index a7a6a7f5e..67d57ff8b 100644 --- a/src/main/scala/net/psforever/actors/session/SessionActor.scala +++ b/src/main/scala/net/psforever/actors/session/SessionActor.scala @@ -68,6 +68,7 @@ import net.psforever.services.{RemoverActor, Service, ServiceManager, Interstell import net.psforever.types._ import net.psforever.util.{Config, DefinitionUtil} import net.psforever.zones.Zones +import org.joda.time.LocalDateTime import org.log4s.MDC import scala.collection.mutable @@ -117,6 +118,8 @@ object SessionActor { final case class Kick(player: Player, time: Option[Long] = None) extends Command + final case class UseCooldownRenewed(definition: BasicDefinition, time: LocalDateTime) extends Command + /** * The message that progresses some form of user-driven activity with a certain eventual outcome * and potential feedback per cycle. @@ -548,6 +551,13 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con case SetSilenced(silenced) => player.silenced = silenced + case UseCooldownRenewed(definition, _) => + definition match { + case _: KitDefinition => + kitToBeUsed = None + case _ => ; + } + case CommonMessages.Progress(rate, finishedAction, stepAction) => if (progressBarValue.isEmpty) { progressBarValue = Some(-rate) @@ -2084,7 +2094,6 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con } case AvatarResponse.UseKit(kguid, kObjId) => - kitToBeUsed = None sendResponse( UseItemMessage( tplayer_guid, @@ -4562,7 +4571,9 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con case (Some(kit: Kit), None) => kitToBeUsed = Some(item_used_guid) player.Actor ! CommonMessages.Use(player, Some(kit)) - case (Some(_: Kit), Some(_)) | (None, Some(_)) => ; //a kit is already queued to be used; ignore this request + case (Some(_: Kit), Some(_)) | (None, Some(_)) => + //a kit is already queued to be used; ignore this request + sendResponse(ChatMsg(ChatMessageType.UNK_225, false, "", "Please wait ...", None)) case (Some(item), _) => log.error(s"UseItem: ${player.Name} looking for Kit to use, but found $item instead") case (None, None) =>