mirror of
https://github.com/2revoemag/PSF-BotServer.git
synced 2026-01-20 02:24:45 +00:00
Merge pull request #396 from Mazo/turret-spam-reduction
Vanu turret actor message spam reduction
This commit is contained in:
commit
8301dbe855
|
|
@ -26,6 +26,7 @@ object FacilityTurret {
|
|||
}
|
||||
|
||||
final case class RechargeAmmo()
|
||||
final case class WeaponDischarged()
|
||||
|
||||
import akka.actor.ActorContext
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -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 _ => ;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
|
|
|
|||
Loading…
Reference in a new issue