Reduce the amount of actor message spam from vanu turrets recharging their ammo constantly

This commit is contained in:
Mazo 2020-04-29 22:31:07 +01:00
parent eabb952683
commit 31440d341b
3 changed files with 23 additions and 5 deletions

View file

@ -26,6 +26,7 @@ object FacilityTurret {
} }
final case class RechargeAmmo() final case class RechargeAmmo()
final case class WeaponDischarged()
import akka.actor.ActorContext import akka.actor.ActorContext
/** /**

View file

@ -3,7 +3,7 @@ package net.psforever.objects.serverobject.turret
import akka.actor.Actor import akka.actor.Actor
import net.psforever.objects.ballistics.ResolvedProjectile 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.equipment.{Ammo, JammableMountedWeapons}
import net.psforever.objects.serverobject.CommonMessages import net.psforever.objects.serverobject.CommonMessages
import net.psforever.objects.serverobject.mount.MountableBehavior import net.psforever.objects.serverobject.mount.MountableBehavior
@ -39,10 +39,9 @@ class FacilityTurretControl(turret : FacilityTurret) extends Actor
def JammableObject = turret def JammableObject = turret
def DamageableObject = turret def DamageableObject = turret
def RepairableObject = turret def RepairableObject = turret
if(turret.Definition == GlobalDefinitions.vanu_sentry_turret) {
// todo: Schedule this to start when weapon is discharged, not all the time // Used for timing ammo recharge for vanu turrets in caves
context.system.scheduler.schedule(3 seconds, 200 milliseconds, self, FacilityTurret.RechargeAmmo()) var weaponAmmoRechargeTimer = DefaultCancellable.obj
}
def receive : Receive = checkBehavior def receive : Receive = checkBehavior
.orElse(jammableBehavior) .orElse(jammableBehavior)
@ -65,6 +64,13 @@ class FacilityTurretControl(turret : FacilityTurret) extends Actor
case _ => ; 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() => case FacilityTurret.RechargeAmmo() =>
val weapon = turret.ControlledWeapon(1).get.asInstanceOf[net.psforever.objects.Tool] val weapon = turret.ControlledWeapon(1).get.asInstanceOf[net.psforever.objects.Tool]
// recharge when last shot fired 3s delay, +1, 200ms interval // 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 _ => ; case _ => ;
} }

View file

@ -5850,6 +5850,12 @@ class WorldSessionActor extends Actor
}) })
} }
projectilesToCleanUp(projectileIndex) = false projectilesToCleanUp(projectileIndex) = false
obj match {
case turret : FacilityTurret if turret.Definition == GlobalDefinitions.vanu_sentry_turret =>
turret.Actor ! FacilityTurret.WeaponDischarged()
case _ => ;
}
} }
else { else {
log.warn(s"WeaponFireMessage: $player's ${tool.Definition.Name} projectile is too far from owner position at time of discharge ($distanceToOwner > $acceptableDistanceToOwner); suspect") log.warn(s"WeaponFireMessage: $player's ${tool.Definition.Name} projectile is too far from owner position at time of discharge ($distanceToOwner > $acceptableDistanceToOwner); suspect")