added painbox damage history event

This commit is contained in:
FateJH 2020-01-03 15:29:13 -05:00
parent 4261693ae1
commit d2ef5a76a4
8 changed files with 28 additions and 24 deletions

View file

@ -39,6 +39,7 @@ class PainboxControl(painbox: Painbox) extends Actor {
//todo: Account for overlapping pain fields
//todo: Pain module
//todo: REK boosting
val guid = painbox.GUID
val owner = painbox.Owner.asInstanceOf[Building]
val faction = owner.Faction
if(faction != PlanetSideEmpire.NEUTRAL && (!painbox.Definition.HasNearestDoorDependency || (painbox.Definition.HasNearestDoorDependency && nearestDoor.Open.nonEmpty))) {
@ -50,7 +51,7 @@ class PainboxControl(painbox: Painbox) extends Actor {
.collect { case p if p.Faction != faction
&& p.Health > 0
&& Vector3.DistanceSquared(p.Position, position) < radius =>
events ! AvatarServiceMessage(p.Name, AvatarAction.EnvironmentalDamage(p.GUID, damage))
events ! AvatarServiceMessage(p.Name, AvatarAction.EnvironmentalDamage(p.GUID, guid, damage))
}
}

View file

@ -4,6 +4,7 @@ package net.psforever.objects.vital
import net.psforever.objects.PlanetSideGameObject
import net.psforever.objects.ballistics.{PlayerSource, ResolvedProjectile, SourceEntry, VehicleSource}
import net.psforever.objects.definition.KitDefinition
import net.psforever.objects.serverobject.painbox.Painbox
import net.psforever.objects.serverobject.terminals.TerminalDefinition
import net.psforever.objects.vital.resolution.ResolutionCalculations
import net.psforever.types.{ExoSuitType, ImplantType}
@ -35,6 +36,8 @@ final case class VehicleShieldCharge(target : VehicleSource, amount : Int) exten
final case class DamageFromProjectile(data : ResolvedProjectile) extends DamagingActivity(data.target)
final case class DamageFromPainbox(target : PlayerSource, painbox : Painbox, damage : Int) extends DamagingActivity(target)
final case class PlayerSuicide(target : PlayerSource) extends DamagingActivity(target)
/**

View file

@ -26,7 +26,7 @@ class SphereOfInfluenceActor(zone: Zone) extends Actor {
case SOI.Populate() =>
UpdateSOI()
case SOI.StopPopulation() =>
case SOI.Stop() =>
context.become(Stopped)
populateTick.cancel
sois.foreach { case (facility, _) => facility.PlayersInSOI = Nil }
@ -35,7 +35,7 @@ class SphereOfInfluenceActor(zone: Zone) extends Actor {
}
def Stopped : Receive = Build.orElse {
case SOI.Populate() =>
case SOI.Start() =>
context.become(Running)
UpdateSOI()
@ -53,6 +53,7 @@ class SphereOfInfluenceActor(zone: Zone) extends Actor {
def UpdateSOI(): Unit = {
SOI.Populate(sois.iterator, zone.LivePlayers)
populateTick.cancel
populateTick = context.system.scheduler.scheduleOnce(5 seconds, self, SOI.Populate())
}
}
@ -63,7 +64,9 @@ object SOI {
/** Populate the list of players within a SOI **/
final case class Populate()
/** Stop sorting players into sois */
final case class StopPopulation()
final case class Start()
/** Stop sorting players into sois */
final case class Stop()
@tailrec
def Populate(buildings : Iterator[(Building, Int)], players : List[Player]) : Unit = {

View file

@ -472,20 +472,12 @@ class Zone(private val zoneId : String, zoneMap : ZoneMap, zoneNumber : Int) {
def StartPlayerManagementSystems() : Unit = {
println(s"start player management for $Id")
soi ! SOI.Populate()
// buildings.values.foreach { _.Amenities.collect {
// case box : Painbox =>
// box.Actor ! Painbox.Start()
// } }
soi ! SOI.Start()
}
def StopPlayerManagementSystems() : Unit = {
println(s"stop player management for $Id")
soi ! SOI.StopPopulation()
// buildings.values.foreach { _.Amenities.collect {
// case box : Painbox =>
// box.Actor ! Painbox.Stop()
// } }
soi ! SOI.Stop()
}
def Activity : ActorRef = projector

View file

@ -65,9 +65,9 @@ class AvatarService(zone : Zone) extends Actor {
AvatarEvents.publish(
AvatarServiceResponse(s"/$forChannel/Avatar", player_guid, AvatarResponse.ConcealPlayer())
)
case AvatarAction.EnvironmentalDamage(player_guid, amount) =>
case AvatarAction.EnvironmentalDamage(player_guid, source_guid, amount) =>
AvatarEvents.publish(
AvatarServiceResponse(s"/$forChannel/Avatar", player_guid, AvatarResponse.EnvironmentalDamage(player_guid, amount))
AvatarServiceResponse(s"/$forChannel/Avatar", player_guid, AvatarResponse.EnvironmentalDamage(player_guid, source_guid, amount))
)
case AvatarAction.Damage(player_guid, target, resolution_function) =>
AvatarEvents.publish(

View file

@ -31,7 +31,7 @@ object AvatarAction {
final case class ChangeFireState_Start(player_guid : PlanetSideGUID, weapon_guid : PlanetSideGUID) extends Action
final case class ChangeFireState_Stop(player_guid : PlanetSideGUID, weapon_guid : PlanetSideGUID) extends Action
final case class ConcealPlayer(player_guid : PlanetSideGUID) extends Action
final case class EnvironmentalDamage(player_guid : PlanetSideGUID, amount: Int) extends Action
final case class EnvironmentalDamage(player_guid : PlanetSideGUID, source_guid : PlanetSideGUID, amount: Int) extends Action
final case class Damage(player_guid : PlanetSideGUID, target : Player, resolution_function : ResolutionCalculations.Output) extends Action
final case class DeployItem(player_guid : PlanetSideGUID, item : PlanetSideGameObject with Deployable) extends Action
final case class Destroy(victim : PlanetSideGUID, killer : PlanetSideGUID, weapon : PlanetSideGUID, pos : Vector3) extends Action

View file

@ -25,7 +25,7 @@ object AvatarResponse {
final case class ChangeFireState_Start(weapon_guid : PlanetSideGUID) extends Response
final case class ChangeFireState_Stop(weapon_guid : PlanetSideGUID) extends Response
final case class ConcealPlayer() extends Response
final case class EnvironmentalDamage(target : PlanetSideGUID, amount : Int) extends Response
final case class EnvironmentalDamage(target : PlanetSideGUID, source_guid : PlanetSideGUID, amount : Int) extends Response
final case class DamageResolution(target : Player, resolution_function : ResolutionCalculations.Output) extends Response
final case class Destroy(victim : PlanetSideGUID, killer : PlanetSideGUID, weapon : PlanetSideGUID, pos : Vector3) extends Response
final case class DestroyDisplay(killer : SourceEntry, victim : SourceEntry, method : Int, unk : Int) extends Response