mirror of
https://github.com/psforever/PSF-LoginServer.git
synced 2026-01-19 18:44:45 +00:00
Fix period conversion exception
"Cannot convert to Seconds as this period contains months and months vary in length" during login
This commit is contained in:
parent
06e63dd960
commit
20011691f0
|
|
@ -59,9 +59,10 @@ import net.psforever.types.{
|
|||
import net.psforever.util.Database._
|
||||
import net.psforever.persistence
|
||||
import net.psforever.util.DefinitionUtil
|
||||
import org.joda.time.{LocalDateTime, Period}
|
||||
import org.joda.time.{LocalDateTime, Seconds}
|
||||
import net.psforever.services.ServiceManager
|
||||
import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage}
|
||||
|
||||
import scala.collection.mutable
|
||||
import scala.concurrent.{ExecutionContextExecutor, Future, Promise}
|
||||
import scala.util.{Failure, Success}
|
||||
|
|
@ -733,7 +734,8 @@ class AvatarActor(
|
|||
case RefreshPurchaseTimes() =>
|
||||
avatar.purchaseTimes.foreach {
|
||||
case (name, purchaseTime) =>
|
||||
val secondsSincePurchase = new Period(purchaseTime, LocalDateTime.now()).toStandardSeconds.getSeconds
|
||||
val secondsSincePurchase = Seconds.secondsBetween(purchaseTime, LocalDateTime.now()).getSeconds
|
||||
|
||||
Avatar.purchaseCooldowns.find(_._1.Name == name) match {
|
||||
case Some((obj, cooldown)) if cooldown.toSeconds - secondsSincePurchase > 0 =>
|
||||
val faction: String = avatar.faction.toString.toLowerCase
|
||||
|
|
@ -1096,7 +1098,7 @@ class AvatarActor(
|
|||
val converter: CharacterSelectConverter = new CharacterSelectConverter
|
||||
|
||||
avatars.filter(!_.deleted) foreach { a =>
|
||||
val secondsSinceLastLogin = new Period(a.lastLogin, LocalDateTime.now()).toStandardSeconds.getSeconds
|
||||
val secondsSinceLastLogin = Seconds.secondsBetween(a.lastLogin, LocalDateTime.now()).getSeconds
|
||||
val avatar = a.toAvatar
|
||||
val player = new Player(avatar)
|
||||
|
||||
|
|
|
|||
|
|
@ -4612,7 +4612,7 @@ class SessionActor extends Actor with MDCContextAware {
|
|||
ChatMessageType.UNK_225,
|
||||
false,
|
||||
"",
|
||||
s"@TimeUntilNextUse^${cooldown.toStandardSeconds.getSeconds}",
|
||||
s"@TimeUntilNextUse^${cooldown.getStandardSeconds}",
|
||||
None
|
||||
)
|
||||
)
|
||||
|
|
|
|||
|
|
@ -5,9 +5,10 @@ import net.psforever.objects.equipment.{EquipmentSize, EquipmentSlot}
|
|||
import net.psforever.objects.loadouts.{Loadout, SquadLoadout}
|
||||
import net.psforever.objects.{GlobalDefinitions, LockerContainer, LockerEquipment, OffhandEquipmentSlot}
|
||||
import net.psforever.types._
|
||||
import org.joda.time.{LocalDateTime, Period}
|
||||
import org.joda.time.{Duration, LocalDateTime, Seconds}
|
||||
|
||||
import scala.collection.immutable.Seq
|
||||
import scala.concurrent.duration.{FiniteDuration, _}
|
||||
import scala.concurrent.duration._
|
||||
|
||||
object Avatar {
|
||||
val purchaseCooldowns: Map[BasicDefinition, FiniteDuration] = Map(
|
||||
|
|
@ -105,13 +106,14 @@ case class Avatar(
|
|||
times: Map[String, LocalDateTime],
|
||||
cooldowns: Map[BasicDefinition, FiniteDuration],
|
||||
definition: BasicDefinition
|
||||
): Option[Period] = {
|
||||
): Option[Duration] = {
|
||||
times.get(definition.Name) match {
|
||||
case Some(purchaseTime) =>
|
||||
val secondsSincePurchase = new Period(purchaseTime, LocalDateTime.now()).toStandardSeconds.getSeconds
|
||||
val secondsSincePurchase = Seconds.secondsBetween(purchaseTime, LocalDateTime.now())
|
||||
val duration = secondsSincePurchase.toStandardDuration
|
||||
cooldowns.get(definition) match {
|
||||
case Some(cooldown) if (cooldown.toSeconds - secondsSincePurchase) > 0 =>
|
||||
Some(Period.seconds(cooldown.toSeconds.toInt - secondsSincePurchase))
|
||||
case Some(cooldown) if (cooldown.toSeconds - secondsSincePurchase.getSeconds) > 0 =>
|
||||
Some(duration)
|
||||
case _ => None
|
||||
}
|
||||
case None =>
|
||||
|
|
@ -120,12 +122,12 @@ case class Avatar(
|
|||
}
|
||||
|
||||
/** Returns the remaining purchase cooldown or None if an object is not on cooldown */
|
||||
def purchaseCooldown(definition: BasicDefinition): Option[Period] = {
|
||||
def purchaseCooldown(definition: BasicDefinition): Option[Duration] = {
|
||||
cooldown(purchaseTimes, Avatar.purchaseCooldowns, definition)
|
||||
}
|
||||
|
||||
/** Returns the remaining use cooldown or None if an object is not on cooldown */
|
||||
def useCooldown(definition: BasicDefinition): Option[Period] = {
|
||||
def useCooldown(definition: BasicDefinition): Option[Duration] = {
|
||||
cooldown(useTimes, Avatar.useCooldowns, definition)
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue