From 31440d341b34adff672cdf00381dd27e2362bdc0 Mon Sep 17 00:00:00 2001 From: Mazo Date: Wed, 29 Apr 2020 22:31:07 +0100 Subject: [PATCH] Reduce the amount of actor message spam from vanu turrets recharging their ammo constantly --- .../serverobject/turret/FacilityTurret.scala | 1 + .../turret/FacilityTurretControl.scala | 21 ++++++++++++++----- .../src/main/scala/WorldSessionActor.scala | 6 ++++++ 3 files changed, 23 insertions(+), 5 deletions(-) diff --git a/common/src/main/scala/net/psforever/objects/serverobject/turret/FacilityTurret.scala b/common/src/main/scala/net/psforever/objects/serverobject/turret/FacilityTurret.scala index b0305305..082540cf 100644 --- a/common/src/main/scala/net/psforever/objects/serverobject/turret/FacilityTurret.scala +++ b/common/src/main/scala/net/psforever/objects/serverobject/turret/FacilityTurret.scala @@ -26,6 +26,7 @@ object FacilityTurret { } final case class RechargeAmmo() + final case class WeaponDischarged() import akka.actor.ActorContext /** diff --git a/common/src/main/scala/net/psforever/objects/serverobject/turret/FacilityTurretControl.scala b/common/src/main/scala/net/psforever/objects/serverobject/turret/FacilityTurretControl.scala index 4a65d656..4f139241 100644 --- a/common/src/main/scala/net/psforever/objects/serverobject/turret/FacilityTurretControl.scala +++ b/common/src/main/scala/net/psforever/objects/serverobject/turret/FacilityTurretControl.scala @@ -3,7 +3,7 @@ package net.psforever.objects.serverobject.turret import akka.actor.Actor import net.psforever.objects.ballistics.ResolvedProjectile -import net.psforever.objects.{GlobalDefinitions, Player, Tool} +import net.psforever.objects.{DefaultCancellable, GlobalDefinitions, Player, Tool} import net.psforever.objects.equipment.{Ammo, JammableMountedWeapons} import net.psforever.objects.serverobject.CommonMessages import net.psforever.objects.serverobject.mount.MountableBehavior @@ -39,10 +39,9 @@ class FacilityTurretControl(turret : FacilityTurret) extends Actor def JammableObject = turret def DamageableObject = turret def RepairableObject = turret - if(turret.Definition == GlobalDefinitions.vanu_sentry_turret) { - // todo: Schedule this to start when weapon is discharged, not all the time - context.system.scheduler.schedule(3 seconds, 200 milliseconds, self, FacilityTurret.RechargeAmmo()) - } + + // Used for timing ammo recharge for vanu turrets in caves + var weaponAmmoRechargeTimer = DefaultCancellable.obj def receive : Receive = checkBehavior .orElse(jammableBehavior) @@ -65,6 +64,13 @@ class FacilityTurretControl(turret : FacilityTurret) extends Actor case _ => ; } + case FacilityTurret.WeaponDischarged() => + if(weaponAmmoRechargeTimer != DefaultCancellable.obj) { + weaponAmmoRechargeTimer.cancel() + } + + weaponAmmoRechargeTimer = context.system.scheduler.schedule(3 seconds, 200 milliseconds, self, FacilityTurret.RechargeAmmo()) + case FacilityTurret.RechargeAmmo() => val weapon = turret.ControlledWeapon(1).get.asInstanceOf[net.psforever.objects.Tool] // recharge when last shot fired 3s delay, +1, 200ms interval @@ -77,6 +83,11 @@ class FacilityTurretControl(turret : FacilityTurret) extends Actor } } + if(weapon.Magazine == weapon.MaxMagazine && weaponAmmoRechargeTimer != DefaultCancellable.obj) { + weaponAmmoRechargeTimer.cancel() + weaponAmmoRechargeTimer = DefaultCancellable.obj + } + case _ => ; } diff --git a/pslogin/src/main/scala/WorldSessionActor.scala b/pslogin/src/main/scala/WorldSessionActor.scala index 3de9e5a3..160f756a 100644 --- a/pslogin/src/main/scala/WorldSessionActor.scala +++ b/pslogin/src/main/scala/WorldSessionActor.scala @@ -5850,6 +5850,12 @@ class WorldSessionActor extends Actor }) } projectilesToCleanUp(projectileIndex) = false + + obj match { + case turret : FacilityTurret if turret.Definition == GlobalDefinitions.vanu_sentry_turret => + turret.Actor ! FacilityTurret.WeaponDischarged() + case _ => ; + } } else { log.warn(s"WeaponFireMessage: $player's ${tool.Definition.Name} projectile is too far from owner position at time of discharge ($distanceToOwner > $acceptableDistanceToOwner); suspect")