Weapon-based MAX cooldowns

This commit is contained in:
Jakob Gillich 2020-08-26 02:18:44 +02:00
parent 8ea2ffad0f
commit 51d71ed732
6 changed files with 46 additions and 57 deletions

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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