mirror of
https://github.com/2revoemag/PSF-BotServer.git
synced 2026-07-15 16:34:39 +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
3 changed files with 16 additions and 12 deletions
|
|
@ -59,9 +59,10 @@ import net.psforever.types.{
|
||||||
import net.psforever.util.Database._
|
import net.psforever.util.Database._
|
||||||
import net.psforever.persistence
|
import net.psforever.persistence
|
||||||
import net.psforever.util.DefinitionUtil
|
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.ServiceManager
|
||||||
import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage}
|
import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage}
|
||||||
|
|
||||||
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}
|
||||||
|
|
@ -733,7 +734,8 @@ class AvatarActor(
|
||||||
case RefreshPurchaseTimes() =>
|
case RefreshPurchaseTimes() =>
|
||||||
avatar.purchaseTimes.foreach {
|
avatar.purchaseTimes.foreach {
|
||||||
case (name, purchaseTime) =>
|
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 {
|
Avatar.purchaseCooldowns.find(_._1.Name == name) match {
|
||||||
case Some((obj, cooldown)) if cooldown.toSeconds - secondsSincePurchase > 0 =>
|
case Some((obj, cooldown)) if cooldown.toSeconds - secondsSincePurchase > 0 =>
|
||||||
val faction: String = avatar.faction.toString.toLowerCase
|
val faction: String = avatar.faction.toString.toLowerCase
|
||||||
|
|
@ -1096,7 +1098,7 @@ class AvatarActor(
|
||||||
val converter: CharacterSelectConverter = new CharacterSelectConverter
|
val converter: CharacterSelectConverter = new CharacterSelectConverter
|
||||||
|
|
||||||
avatars.filter(!_.deleted) foreach { a =>
|
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 avatar = a.toAvatar
|
||||||
val player = new Player(avatar)
|
val player = new Player(avatar)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4612,7 +4612,7 @@ class SessionActor extends Actor with MDCContextAware {
|
||||||
ChatMessageType.UNK_225,
|
ChatMessageType.UNK_225,
|
||||||
false,
|
false,
|
||||||
"",
|
"",
|
||||||
s"@TimeUntilNextUse^${cooldown.toStandardSeconds.getSeconds}",
|
s"@TimeUntilNextUse^${cooldown.getStandardSeconds}",
|
||||||
None
|
None
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -5,9 +5,10 @@ import net.psforever.objects.equipment.{EquipmentSize, EquipmentSlot}
|
||||||
import net.psforever.objects.loadouts.{Loadout, SquadLoadout}
|
import net.psforever.objects.loadouts.{Loadout, SquadLoadout}
|
||||||
import net.psforever.objects.{GlobalDefinitions, LockerContainer, LockerEquipment, OffhandEquipmentSlot}
|
import net.psforever.objects.{GlobalDefinitions, LockerContainer, LockerEquipment, OffhandEquipmentSlot}
|
||||||
import net.psforever.types._
|
import net.psforever.types._
|
||||||
import org.joda.time.{LocalDateTime, Period}
|
import org.joda.time.{Duration, LocalDateTime, Seconds}
|
||||||
|
|
||||||
import scala.collection.immutable.Seq
|
import scala.collection.immutable.Seq
|
||||||
import scala.concurrent.duration.{FiniteDuration, _}
|
import scala.concurrent.duration._
|
||||||
|
|
||||||
object Avatar {
|
object Avatar {
|
||||||
val purchaseCooldowns: Map[BasicDefinition, FiniteDuration] = Map(
|
val purchaseCooldowns: Map[BasicDefinition, FiniteDuration] = Map(
|
||||||
|
|
@ -105,13 +106,14 @@ case class Avatar(
|
||||||
times: Map[String, LocalDateTime],
|
times: Map[String, LocalDateTime],
|
||||||
cooldowns: Map[BasicDefinition, FiniteDuration],
|
cooldowns: Map[BasicDefinition, FiniteDuration],
|
||||||
definition: BasicDefinition
|
definition: BasicDefinition
|
||||||
): Option[Period] = {
|
): Option[Duration] = {
|
||||||
times.get(definition.Name) match {
|
times.get(definition.Name) match {
|
||||||
case Some(purchaseTime) =>
|
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 {
|
cooldowns.get(definition) match {
|
||||||
case Some(cooldown) if (cooldown.toSeconds - secondsSincePurchase) > 0 =>
|
case Some(cooldown) if (cooldown.toSeconds - secondsSincePurchase.getSeconds) > 0 =>
|
||||||
Some(Period.seconds(cooldown.toSeconds.toInt - secondsSincePurchase))
|
Some(duration)
|
||||||
case _ => None
|
case _ => None
|
||||||
}
|
}
|
||||||
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 */
|
/** 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)
|
cooldown(purchaseTimes, Avatar.purchaseCooldowns, definition)
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Returns the remaining use cooldown or None if an object is not on cooldown */
|
/** 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)
|
cooldown(useTimes, Avatar.useCooldowns, definition)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue