Merge pull request #396 from Mazo/turret-spam-reduction

Vanu turret actor message spam reduction
This commit is contained in:
Mazo 2020-04-29 23:50:59 +01:00 committed by GitHub
commit 8301dbe855
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 24 additions and 6 deletions

View file

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

View file

@ -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 _ => ;
}

View file

@ -265,7 +265,7 @@ class WorldSessionActor extends Actor
def ValidObject(id : Option[PlanetSideGUID]) : Option[PlanetSideGameObject] = continent.GUID(id) match {
case out@Some(obj) if obj.HasGUID =>
out
case None if id.nonEmpty =>
case None if id.nonEmpty && id.get != PlanetSideGUID(0) =>
//delete stale entity reference from client
log.warn(s"Player ${player.Name} has an invalid reference to GUID ${id.get} in zone ${continent.Id}.")
//sendResponse(ObjectDeleteMessage(id.get, 0))
@ -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")