From 51d71ed732cc302e3d3f808062a2596d42e6f6e1 Mon Sep 17 00:00:00 2001 From: Jakob Gillich Date: Wed, 26 Aug 2020 02:18:44 +0200 Subject: [PATCH] Weapon-based MAX cooldowns --- .../actors/session/AvatarActor.scala | 34 ++++++++----------- .../psforever/actors/session/ChatActor.scala | 1 + .../actors/session/SessionActor.scala | 2 +- .../psforever/objects/GlobalDefinitions.scala | 20 +++++++---- .../net/psforever/objects/avatar/Avatar.scala | 22 +++++------- .../objects/avatar/PlayerControl.scala | 24 +++++-------- 6 files changed, 46 insertions(+), 57 deletions(-) diff --git a/src/main/scala/net/psforever/actors/session/AvatarActor.scala b/src/main/scala/net/psforever/actors/session/AvatarActor.scala index 693d7bac..a5f6bb32 100644 --- a/src/main/scala/net/psforever/actors/session/AvatarActor.scala +++ b/src/main/scala/net/psforever/actors/session/AvatarActor.scala @@ -735,30 +735,24 @@ class AvatarActor( case (name, purchaseTime) => val secondsSincePurchase = new Period(purchaseTime, LocalDateTime.now()).toStandardSeconds.getSeconds Avatar.purchaseCooldowns.find(_._1.Name == name) match { - case Some((GlobalDefinitions.NCMAX | GlobalDefinitions.TRMAX | GlobalDefinitions.VSMAX, cooldown)) - if cooldown.toSeconds - secondsSincePurchase > 0 => - val faction: String = avatar.faction.toString.toLowerCase - Seq( - //s"${faction}hev", - s"${faction}hev_antipersonnel", - s"${faction}hev_antivehicular", - s"${faction}hev_antiaircraft" - ).foreach { name => - sessionActor ! SessionActor.SendResponse( - AvatarVehicleTimerMessage( - session.get.player.GUID, - name, - cooldown.toSeconds - secondsSincePurchase, - unk1 = true - ) - ) - } - case Some((obj, cooldown)) if cooldown.toSeconds - secondsSincePurchase > 0 => + val faction: String = avatar.faction.toString.toLowerCase + val name = obj match { + case GlobalDefinitions.trhev_dualcycler | GlobalDefinitions.nchev_scattercannon | + GlobalDefinitions.vshev_quasar => + s"${faction}hev_antipersonnel" + case GlobalDefinitions.trhev_pounder | GlobalDefinitions.nchev_falcon | + GlobalDefinitions.vshev_comet => + s"${faction}hev_antivehicular" + case GlobalDefinitions.trhev_burster | GlobalDefinitions.nchev_sparrow | + GlobalDefinitions.vshev_starfire => + s"${faction}hev_antiaircraft" + case _ => obj.Name + } sessionActor ! SessionActor.SendResponse( AvatarVehicleTimerMessage( session.get.player.GUID, - obj.Name, + name, cooldown.toSeconds - secondsSincePurchase, unk1 = true ) diff --git a/src/main/scala/net/psforever/actors/session/ChatActor.scala b/src/main/scala/net/psforever/actors/session/ChatActor.scala index 72eaad47..91021579 100644 --- a/src/main/scala/net/psforever/actors/session/ChatActor.scala +++ b/src/main/scala/net/psforever/actors/session/ChatActor.scala @@ -769,6 +769,7 @@ class ChatActor( case CMT_HIDE_HELMET => Cosmetic.NoHelmet case CMT_TOGGLE_SHADES => Cosmetic.Sunglasses case CMT_TOGGLE_EARPIECE => Cosmetic.Earpiece + case _ => null } val on = contents match { diff --git a/src/main/scala/net/psforever/actors/session/SessionActor.scala b/src/main/scala/net/psforever/actors/session/SessionActor.scala index 80ac0e65..692c4d4d 100644 --- a/src/main/scala/net/psforever/actors/session/SessionActor.scala +++ b/src/main/scala/net/psforever/actors/session/SessionActor.scala @@ -5721,8 +5721,8 @@ class SessionActor extends Actor with MDCContextAware { None } }) - sendResponse(TargetingInfoMessage(targetInfo)) + case msg @ ActionCancelMessage(u1, u2, u3) => log.info("Cancelled: " + msg) progressBarUpdate.cancel() diff --git a/src/main/scala/net/psforever/objects/GlobalDefinitions.scala b/src/main/scala/net/psforever/objects/GlobalDefinitions.scala index b4eff0e8..29258a9c 100644 --- a/src/main/scala/net/psforever/objects/GlobalDefinitions.scala +++ b/src/main/scala/net/psforever/objects/GlobalDefinitions.scala @@ -667,10 +667,14 @@ object GlobalDefinitions { val dynomite = ToolDefinition(ObjectClass.dynomite) val trhev_dualcycler = new ToolDefinition(ObjectClass.trhev_dualcycler) { + Name = "trhev_dualcycler" + override def NextFireModeIndex(index: Int): Int = index } val trhev_pounder = new ToolDefinition(ObjectClass.trhev_pounder) { + Name = "trhev_pounder" + override def NextFireModeIndex(index: Int): Int = { //TODO other modes if (index == 0 || index == 3) { @@ -692,20 +696,22 @@ object GlobalDefinitions { } val trhev_burster = new ToolDefinition(ObjectClass.trhev_burster) { + Name = "trhev_burster" + override def NextFireModeIndex(index: Int): Int = index } - val nchev_scattercannon = ToolDefinition(ObjectClass.nchev_scattercannon) + val nchev_scattercannon = new ToolDefinition(ObjectClass.nchev_scattercannon) { Name = "nchev_scattercannon" } - val nchev_falcon = ToolDefinition(ObjectClass.nchev_falcon) + val nchev_falcon = new ToolDefinition(ObjectClass.nchev_falcon) { Name = "nchev_falcon" } - val nchev_sparrow = ToolDefinition(ObjectClass.nchev_sparrow) + val nchev_sparrow = new ToolDefinition(ObjectClass.nchev_sparrow) { Name = "nchev_sparrow" } - val vshev_quasar = ToolDefinition(ObjectClass.vshev_quasar) + val vshev_quasar = new ToolDefinition(ObjectClass.vshev_quasar) { Name = "vshev_quasar" } - val vshev_comet = ToolDefinition(ObjectClass.vshev_comet) + val vshev_comet = new ToolDefinition(ObjectClass.vshev_comet) { Name = "vshev_comet" } - val vshev_starfire = ToolDefinition(ObjectClass.vshev_starfire) + val vshev_starfire = new ToolDefinition(ObjectClass.vshev_starfire) { Name = "vshev_starfire" } val medicalapplicator = ToolDefinition(ObjectClass.medicalapplicator) @@ -1367,7 +1373,7 @@ object GlobalDefinitions { } else if (subtype == 3) { AA_MAX(faction) } else { - suppressor //there are no common pool MAX arms + suppressor // there are no common pool MAX arms } } diff --git a/src/main/scala/net/psforever/objects/avatar/Avatar.scala b/src/main/scala/net/psforever/objects/avatar/Avatar.scala index 60adc716..df0de0e2 100644 --- a/src/main/scala/net/psforever/objects/avatar/Avatar.scala +++ b/src/main/scala/net/psforever/objects/avatar/Avatar.scala @@ -45,19 +45,15 @@ object Avatar { GlobalDefinitions.vulture -> 5.minutes, GlobalDefinitions.wasp -> 5.minutes, GlobalDefinitions.flamethrower -> 3.minutes, - GlobalDefinitions.VSMAX -> 5.minutes, - GlobalDefinitions.NCMAX -> 5.minutes, - GlobalDefinitions.TRMAX -> 5.minutes, - // TODO weapon based cooldown - GlobalDefinitions.nchev_sparrow -> 5.minutes, - GlobalDefinitions.nchev_falcon -> 5.minutes, - GlobalDefinitions.nchev_scattercannon -> 5.minutes, - GlobalDefinitions.vshev_comet -> 5.minutes, - GlobalDefinitions.vshev_quasar -> 5.minutes, - GlobalDefinitions.vshev_starfire -> 5.minutes, - GlobalDefinitions.trhev_burster -> 5.minutes, - GlobalDefinitions.trhev_dualcycler -> 5.minutes, - GlobalDefinitions.trhev_pounder -> 5.minutes + GlobalDefinitions.nchev_sparrow -> 5.minutes, + GlobalDefinitions.nchev_falcon -> 5.minutes, + GlobalDefinitions.nchev_scattercannon -> 5.minutes, + GlobalDefinitions.vshev_comet -> 5.minutes, + GlobalDefinitions.vshev_quasar -> 5.minutes, + GlobalDefinitions.vshev_starfire -> 5.minutes, + GlobalDefinitions.trhev_burster -> 5.minutes, + GlobalDefinitions.trhev_dualcycler -> 5.minutes, + GlobalDefinitions.trhev_pounder -> 5.minutes ) val useCooldowns: Map[BasicDefinition, FiniteDuration] = Map( diff --git a/src/main/scala/net/psforever/objects/avatar/PlayerControl.scala b/src/main/scala/net/psforever/objects/avatar/PlayerControl.scala index d0cfda29..7f9db7df 100644 --- a/src/main/scala/net/psforever/objects/avatar/PlayerControl.scala +++ b/src/main/scala/net/psforever/objects/avatar/PlayerControl.scala @@ -190,16 +190,12 @@ class PlayerControl(player: Player, avatarActor: typed.ActorRef[AvatarActor.Comm val requestToChangeArmor = originalSuit != exosuit || originalSubtype != subtype val allowedToChangeArmor = Players.CertificationToUseExoSuit(player, exosuit, subtype) && (if (exosuit == ExoSuitType.MAX) { - val definition = player.avatar.faction match { - case PlanetSideEmpire.NC => GlobalDefinitions.NCMAX - case PlanetSideEmpire.TR => GlobalDefinitions.TRMAX - case PlanetSideEmpire.VS => GlobalDefinitions.VSMAX - } - player.avatar.purchaseCooldown(definition) match { + val weapon = GlobalDefinitions.MAXArms(subtype, player.Faction) + player.avatar.purchaseCooldown(weapon) match { case Some(_) => false case None => - avatarActor ! AvatarActor.UpdatePurchaseTime(definition) + avatarActor ! AvatarActor.UpdatePurchaseTime(weapon) true } } else { @@ -326,15 +322,11 @@ class PlayerControl(player: Player, avatarActor: typed.ActorRef[AvatarActor.Comm if ( Players.CertificationToUseExoSuit(player, exosuit, subtype) && (if (exosuit == ExoSuitType.MAX) { - val definition = player.avatar.faction match { - case PlanetSideEmpire.NC => GlobalDefinitions.NCMAX - case PlanetSideEmpire.TR => GlobalDefinitions.TRMAX - case PlanetSideEmpire.VS => GlobalDefinitions.VSMAX - } - player.avatar.purchaseCooldown(definition) match { + val weapon = GlobalDefinitions.MAXArms(subtype, player.Faction) + player.avatar.purchaseCooldown(weapon) match { case Some(_) => false case None => - avatarActor ! AvatarActor.UpdatePurchaseTime(definition) + avatarActor ! AvatarActor.UpdatePurchaseTime(weapon) true } } else { @@ -863,8 +855,8 @@ class PlayerControl(player: Player, avatarActor: typed.ActorRef[AvatarActor.Comm } def SwapItemCallback(item: Equipment, fromSlot: Int): Unit = { - val obj = ContainerObject - val zone = obj.Zone + val obj = ContainerObject + val zone = obj.Zone val toChannel = if (obj.VisibleSlots.contains(fromSlot)) zone.id else player.Name zone.AvatarEvents ! AvatarServiceMessage( toChannel,