mirror of
https://github.com/2revoemag/PSF-BotServer.git
synced 2026-07-15 08:24:39 +00:00
grenade projectile flag on projectile definition; better timing control on aura behavior and integration with player control
This commit is contained in:
parent
2054586a0d
commit
d149e07e89
5 changed files with 106 additions and 36 deletions
|
|
@ -13,43 +13,63 @@ import scala.concurrent.ExecutionContext.Implicits.global
|
||||||
trait AuraEffectBehavior {
|
trait AuraEffectBehavior {
|
||||||
_ : Actor =>
|
_ : Actor =>
|
||||||
private var activeEffectIndex : Long = 0
|
private var activeEffectIndex : Long = 0
|
||||||
private var effectsToIds : mutable.HashMap[Aura.Value, List[Long]] = mutable.HashMap.empty[Aura.Value, List[Long]]
|
private var effectsToIds : mutable.HashMap[Aura.Value, List[Long]] = mutable.HashMap.empty[Aura.Value, List[Long]]
|
||||||
private var idsToTimers : mutable.LongMap[Cancellable] = mutable.LongMap.empty[Cancellable]
|
private var idsToTimers : mutable.LongMap[Cancellable] = mutable.LongMap.empty[Cancellable]
|
||||||
private var idsToEntries : mutable.LongMap[AuraEffectBehavior.Entry] = mutable.LongMap.empty[AuraEffectBehavior.Entry]
|
private var idsToEntries : mutable.LongMap[AuraEffectBehavior.Entry] = mutable.LongMap.empty[AuraEffectBehavior.Entry]
|
||||||
|
|
||||||
def AuraTargetObject : Player
|
def AuraTargetObject : Player
|
||||||
|
|
||||||
val auraBehavior : Receive = {
|
val auraBehavior : Receive = {
|
||||||
case AuraEffectBehavior.Aggravate(id, 0) =>
|
case AuraEffectBehavior.Aggravate(id, 0, 0) =>
|
||||||
CleanupEffect(id) match {
|
CancelEffectTimer(id)
|
||||||
case Aura.None => ;
|
PerformCleanupEffect(id)
|
||||||
case _ => UpdateAggravatedEffect(AuraTargetObject)
|
|
||||||
}
|
|
||||||
|
|
||||||
case AuraEffectBehavior.Aggravate(id, iteration) => ;
|
case AuraEffectBehavior.Aggravate(id, 0, leftoverTime) =>
|
||||||
idsToTimers.remove(id) match {
|
PerformAggravationAndRetimeEvent(id, iteration = 0, Some(leftoverTime), leftoverTime = 0)
|
||||||
case Some(timer) => timer.cancel
|
|
||||||
case _ => ;
|
case AuraEffectBehavior.Aggravate(id, iteration, leftover) => ;
|
||||||
}
|
PerformAggravationAndRetimeEvent(id, iteration - 1, None, leftover)
|
||||||
idsToEntries.get(id) match {
|
|
||||||
case Some(entry) =>
|
|
||||||
//TODO stuff ...
|
|
||||||
idsToTimers += id -> context.system.scheduler.scheduleOnce(
|
|
||||||
entry.effect.infliction_rate milliseconds, self, AuraEffectBehavior.Aggravate(id, iteration - 1))
|
|
||||||
case _ => ;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
def AggravationEffect(data : ResolvedProjectile) : Unit = {
|
def PerformAggravationAndRetimeEvent(id : Long, iteration : Int, time : Option[Long], leftoverTime : Long) : Unit = {
|
||||||
data.projectile.profile.Aggravated match {
|
CancelEffectTimer(id)
|
||||||
case Some(damage)
|
idsToEntries.get(id) match {
|
||||||
if data.projectile.profile.ProjectileDamageType == DamageType.Aggravated && damage.effect_type != Aura.None =>
|
case Some(entry) =>
|
||||||
AggravationEffect(damage, data)
|
//TODO stuff ...
|
||||||
|
idsToTimers += id -> context.system.scheduler.scheduleOnce(
|
||||||
|
time.getOrElse(entry.effect.infliction_rate) milliseconds,
|
||||||
|
self,
|
||||||
|
AuraEffectBehavior.Aggravate(id, iteration, leftoverTime)
|
||||||
|
)
|
||||||
|
case _ =>
|
||||||
|
PerformCleanupEffect(id)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
def CancelEffectTimer(id : Long) : Unit = {
|
||||||
|
idsToTimers.remove(id) match {
|
||||||
|
case Some(timer) => timer.cancel
|
||||||
case _ => ;
|
case _ => ;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private def AggravationEffect(aggravation : AggravatedDamage, data : ResolvedProjectile) : Unit = {
|
def PerformCleanupEffect(id : Long) : Unit = {
|
||||||
|
CleanupEffect(id) match {
|
||||||
|
case Aura.None => ;
|
||||||
|
case _ => UpdateAggravatedEffect(AuraTargetObject)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
def TryAggravationEffect(data : ResolvedProjectile) : Unit = {
|
||||||
|
data.projectile.profile.Aggravated match {
|
||||||
|
case Some(damage)
|
||||||
|
if data.projectile.profile.ProjectileDamageType == DamageType.Aggravated && damage.effect_type != Aura.None =>
|
||||||
|
TryAggravationEffect(damage, data)
|
||||||
|
case _ => ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private def TryAggravationEffect(aggravation : AggravatedDamage, data : ResolvedProjectile) : Unit = {
|
||||||
val effect = aggravation.effect_type
|
val effect = aggravation.effect_type
|
||||||
val obj = AuraTargetObject
|
val obj = AuraTargetObject
|
||||||
if(obj.Aura.contains(effect)) { //TODO cumulative?
|
if(obj.Aura.contains(effect)) { //TODO cumulative?
|
||||||
|
|
@ -76,7 +96,8 @@ trait AuraEffectBehavior {
|
||||||
idsToEntries += id -> AuraEffectBehavior.Entry(id, infos, aggravation, 0)
|
idsToEntries += id -> AuraEffectBehavior.Entry(id, infos, aggravation, 0)
|
||||||
//pair id with timer
|
//pair id with timer
|
||||||
val iterations = (aggravation.duration / infos.infliction_rate).toInt
|
val iterations = (aggravation.duration / infos.infliction_rate).toInt
|
||||||
idsToTimers += id -> context.system.scheduler.scheduleOnce(infos.infliction_rate milliseconds, self, AuraEffectBehavior.Aggravate(id, iterations))
|
val leftoverTime = aggravation.duration % infos.infliction_rate
|
||||||
|
idsToTimers += id -> context.system.scheduler.scheduleOnce(infos.infliction_rate milliseconds, self, AuraEffectBehavior.Aggravate(id, iterations, leftoverTime))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -112,6 +133,10 @@ trait AuraEffectBehavior {
|
||||||
idsToTimers.values.foreach { _.cancel }
|
idsToTimers.values.foreach { _.cancel }
|
||||||
idsToTimers.clear
|
idsToTimers.clear
|
||||||
effectsToIds.clear
|
effectsToIds.clear
|
||||||
|
}
|
||||||
|
|
||||||
|
def EndAllEffectsAndUpdate() : Unit = {
|
||||||
|
EndAllEffects()
|
||||||
UpdateAggravatedEffect(AuraTargetObject)
|
UpdateAggravatedEffect(AuraTargetObject)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -126,5 +151,5 @@ trait AuraEffectBehavior {
|
||||||
object AuraEffectBehavior {
|
object AuraEffectBehavior {
|
||||||
private case class Entry(id : Long, effect : AggravatedInfo, aggravation : AggravatedDamage, damage : Any)
|
private case class Entry(id : Long, effect : AggravatedInfo, aggravation : AggravatedDamage, damage : Any)
|
||||||
|
|
||||||
private case class Aggravate(id : Long, iteration : Int)
|
private case class Aggravate(id : Long, iterations : Int, leftover : Long)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5411,9 +5411,15 @@ class SessionActor extends Actor with MDCContextAware {
|
||||||
projectile.Velocity = projectile_vel
|
projectile.Velocity = projectile_vel
|
||||||
//direct_victim_uid
|
//direct_victim_uid
|
||||||
ValidObject(direct_victim_uid) match {
|
ValidObject(direct_victim_uid) match {
|
||||||
case Some(target: PlanetSideGameObject with FactionAffinity with Vitality) =>
|
case Some(
|
||||||
CheckForHitPositionDiscrepancy(projectile_guid, explosion_pos, target)
|
target: PlanetSideGameObject with FactionAffinity with Vitality
|
||||||
ResolveProjectileEntry(projectile, ProjectileResolution.Splash, target, target.Position) match {
|
) =>
|
||||||
|
CheckForHitPositionDiscrepancy(
|
||||||
|
projectile_guid,
|
||||||
|
explosion_pos,
|
||||||
|
target
|
||||||
|
)
|
||||||
|
ResolveProjectileEntry(projectile, ProjectileResolution.Splash, target, explosion_pos) match {
|
||||||
case Some(projectile) =>
|
case Some(projectile) =>
|
||||||
HandleDealingDamage(target, projectile)
|
HandleDealingDamage(target, projectile)
|
||||||
case None => ;
|
case None => ;
|
||||||
|
|
|
||||||
|
|
@ -2474,6 +2474,7 @@ object GlobalDefinitions {
|
||||||
dynomite_projectile.Damage1 = 175
|
dynomite_projectile.Damage1 = 175
|
||||||
dynomite_projectile.DamageAtEdge = 0.1f
|
dynomite_projectile.DamageAtEdge = 0.1f
|
||||||
dynomite_projectile.DamageRadius = 10f
|
dynomite_projectile.DamageRadius = 10f
|
||||||
|
dynomite_projectile.GrenadeProjectile = true
|
||||||
dynomite_projectile.ProjectileDamageType = DamageType.Splash
|
dynomite_projectile.ProjectileDamageType = DamageType.Splash
|
||||||
dynomite_projectile.InitialVelocity = 30
|
dynomite_projectile.InitialVelocity = 30
|
||||||
dynomite_projectile.Lifespan = 3f
|
dynomite_projectile.Lifespan = 3f
|
||||||
|
|
@ -2691,6 +2692,7 @@ object GlobalDefinitions {
|
||||||
frag_cartridge_projectile.Damage1 = 100
|
frag_cartridge_projectile.Damage1 = 100
|
||||||
frag_cartridge_projectile.DamageAtEdge = 0.1f
|
frag_cartridge_projectile.DamageAtEdge = 0.1f
|
||||||
frag_cartridge_projectile.DamageRadius = 7f
|
frag_cartridge_projectile.DamageRadius = 7f
|
||||||
|
frag_cartridge_projectile.GrenadeProjectile = true
|
||||||
frag_cartridge_projectile.ProjectileDamageType = DamageType.Splash
|
frag_cartridge_projectile.ProjectileDamageType = DamageType.Splash
|
||||||
frag_cartridge_projectile.InitialVelocity = 30
|
frag_cartridge_projectile.InitialVelocity = 30
|
||||||
frag_cartridge_projectile.Lifespan = 15f
|
frag_cartridge_projectile.Lifespan = 15f
|
||||||
|
|
@ -2703,6 +2705,7 @@ object GlobalDefinitions {
|
||||||
frag_cartridge_projectile_b.Damage1 = 100
|
frag_cartridge_projectile_b.Damage1 = 100
|
||||||
frag_cartridge_projectile_b.DamageAtEdge = 0.1f
|
frag_cartridge_projectile_b.DamageAtEdge = 0.1f
|
||||||
frag_cartridge_projectile_b.DamageRadius = 5f
|
frag_cartridge_projectile_b.DamageRadius = 5f
|
||||||
|
frag_cartridge_projectile_b.GrenadeProjectile = true
|
||||||
frag_cartridge_projectile_b.ProjectileDamageType = DamageType.Splash
|
frag_cartridge_projectile_b.ProjectileDamageType = DamageType.Splash
|
||||||
frag_cartridge_projectile_b.InitialVelocity = 30
|
frag_cartridge_projectile_b.InitialVelocity = 30
|
||||||
frag_cartridge_projectile_b.Lifespan = 2f
|
frag_cartridge_projectile_b.Lifespan = 2f
|
||||||
|
|
@ -2714,6 +2717,7 @@ object GlobalDefinitions {
|
||||||
frag_grenade_projectile.Damage1 = 100
|
frag_grenade_projectile.Damage1 = 100
|
||||||
frag_grenade_projectile.DamageAtEdge = 0.1f
|
frag_grenade_projectile.DamageAtEdge = 0.1f
|
||||||
frag_grenade_projectile.DamageRadius = 7f
|
frag_grenade_projectile.DamageRadius = 7f
|
||||||
|
frag_grenade_projectile.GrenadeProjectile = true
|
||||||
frag_grenade_projectile.ProjectileDamageType = DamageType.Splash
|
frag_grenade_projectile.ProjectileDamageType = DamageType.Splash
|
||||||
frag_grenade_projectile.InitialVelocity = 30
|
frag_grenade_projectile.InitialVelocity = 30
|
||||||
frag_grenade_projectile.Lifespan = 15f
|
frag_grenade_projectile.Lifespan = 15f
|
||||||
|
|
@ -2726,6 +2730,7 @@ object GlobalDefinitions {
|
||||||
frag_grenade_projectile_enh.Damage1 = 100
|
frag_grenade_projectile_enh.Damage1 = 100
|
||||||
frag_grenade_projectile_enh.DamageAtEdge = 0.1f
|
frag_grenade_projectile_enh.DamageAtEdge = 0.1f
|
||||||
frag_grenade_projectile_enh.DamageRadius = 7f
|
frag_grenade_projectile_enh.DamageRadius = 7f
|
||||||
|
frag_grenade_projectile_enh.GrenadeProjectile = true
|
||||||
frag_grenade_projectile_enh.ProjectileDamageType = DamageType.Splash
|
frag_grenade_projectile_enh.ProjectileDamageType = DamageType.Splash
|
||||||
frag_grenade_projectile_enh.InitialVelocity = 30
|
frag_grenade_projectile_enh.InitialVelocity = 30
|
||||||
frag_grenade_projectile_enh.Lifespan = 2f
|
frag_grenade_projectile_enh.Lifespan = 2f
|
||||||
|
|
@ -2776,6 +2781,7 @@ object GlobalDefinitions {
|
||||||
heavy_grenade_projectile.Damage4 = 66
|
heavy_grenade_projectile.Damage4 = 66
|
||||||
heavy_grenade_projectile.DamageAtEdge = 0.1f
|
heavy_grenade_projectile.DamageAtEdge = 0.1f
|
||||||
heavy_grenade_projectile.DamageRadius = 5f
|
heavy_grenade_projectile.DamageRadius = 5f
|
||||||
|
heavy_grenade_projectile.GrenadeProjectile = true
|
||||||
heavy_grenade_projectile.ProjectileDamageType = DamageType.Splash
|
heavy_grenade_projectile.ProjectileDamageType = DamageType.Splash
|
||||||
heavy_grenade_projectile.InitialVelocity = 75
|
heavy_grenade_projectile.InitialVelocity = 75
|
||||||
heavy_grenade_projectile.Lifespan = 5f
|
heavy_grenade_projectile.Lifespan = 5f
|
||||||
|
|
@ -2861,6 +2867,7 @@ object GlobalDefinitions {
|
||||||
jammer_cartridge_projectile.Damage1 = 0
|
jammer_cartridge_projectile.Damage1 = 0
|
||||||
jammer_cartridge_projectile.DamageAtEdge = 1.0f
|
jammer_cartridge_projectile.DamageAtEdge = 1.0f
|
||||||
jammer_cartridge_projectile.DamageRadius = 10f
|
jammer_cartridge_projectile.DamageRadius = 10f
|
||||||
|
jammer_cartridge_projectile.GrenadeProjectile = true
|
||||||
jammer_cartridge_projectile.ProjectileDamageType = DamageType.Splash
|
jammer_cartridge_projectile.ProjectileDamageType = DamageType.Splash
|
||||||
jammer_cartridge_projectile.InitialVelocity = 30
|
jammer_cartridge_projectile.InitialVelocity = 30
|
||||||
jammer_cartridge_projectile.Lifespan = 15f
|
jammer_cartridge_projectile.Lifespan = 15f
|
||||||
|
|
@ -2899,6 +2906,7 @@ object GlobalDefinitions {
|
||||||
jammer_cartridge_projectile_b.Damage1 = 0
|
jammer_cartridge_projectile_b.Damage1 = 0
|
||||||
jammer_cartridge_projectile_b.DamageAtEdge = 1.0f
|
jammer_cartridge_projectile_b.DamageAtEdge = 1.0f
|
||||||
jammer_cartridge_projectile_b.DamageRadius = 10f
|
jammer_cartridge_projectile_b.DamageRadius = 10f
|
||||||
|
jammer_cartridge_projectile_b.GrenadeProjectile = true
|
||||||
jammer_cartridge_projectile_b.ProjectileDamageType = DamageType.Splash
|
jammer_cartridge_projectile_b.ProjectileDamageType = DamageType.Splash
|
||||||
jammer_cartridge_projectile_b.InitialVelocity = 30
|
jammer_cartridge_projectile_b.InitialVelocity = 30
|
||||||
jammer_cartridge_projectile_b.Lifespan = 2f
|
jammer_cartridge_projectile_b.Lifespan = 2f
|
||||||
|
|
@ -2936,6 +2944,7 @@ object GlobalDefinitions {
|
||||||
jammer_grenade_projectile.Damage1 = 0
|
jammer_grenade_projectile.Damage1 = 0
|
||||||
jammer_grenade_projectile.DamageAtEdge = 1.0f
|
jammer_grenade_projectile.DamageAtEdge = 1.0f
|
||||||
jammer_grenade_projectile.DamageRadius = 10f
|
jammer_grenade_projectile.DamageRadius = 10f
|
||||||
|
jammer_grenade_projectile.GrenadeProjectile = true
|
||||||
jammer_grenade_projectile.ProjectileDamageType = DamageType.Splash
|
jammer_grenade_projectile.ProjectileDamageType = DamageType.Splash
|
||||||
jammer_grenade_projectile.InitialVelocity = 30
|
jammer_grenade_projectile.InitialVelocity = 30
|
||||||
jammer_grenade_projectile.Lifespan = 15f
|
jammer_grenade_projectile.Lifespan = 15f
|
||||||
|
|
@ -2974,6 +2983,7 @@ object GlobalDefinitions {
|
||||||
jammer_grenade_projectile_enh.Damage1 = 0
|
jammer_grenade_projectile_enh.Damage1 = 0
|
||||||
jammer_grenade_projectile_enh.DamageAtEdge = 1.0f
|
jammer_grenade_projectile_enh.DamageAtEdge = 1.0f
|
||||||
jammer_grenade_projectile_enh.DamageRadius = 10f
|
jammer_grenade_projectile_enh.DamageRadius = 10f
|
||||||
|
jammer_grenade_projectile_enh.GrenadeProjectile = true
|
||||||
jammer_grenade_projectile_enh.ProjectileDamageType = DamageType.Splash
|
jammer_grenade_projectile_enh.ProjectileDamageType = DamageType.Splash
|
||||||
jammer_grenade_projectile_enh.InitialVelocity = 30
|
jammer_grenade_projectile_enh.InitialVelocity = 30
|
||||||
jammer_grenade_projectile_enh.Lifespan = 3f
|
jammer_grenade_projectile_enh.Lifespan = 3f
|
||||||
|
|
@ -3104,6 +3114,7 @@ object GlobalDefinitions {
|
||||||
maelstrom_grenade_projectile.Damage1 = 60
|
maelstrom_grenade_projectile.Damage1 = 60
|
||||||
maelstrom_grenade_projectile.DamageRadius = 20f
|
maelstrom_grenade_projectile.DamageRadius = 20f
|
||||||
maelstrom_grenade_projectile.LashRadius = 5f
|
maelstrom_grenade_projectile.LashRadius = 5f
|
||||||
|
maelstrom_grenade_projectile.GrenadeProjectile = true
|
||||||
maelstrom_grenade_projectile.ProjectileDamageType = DamageType.Direct
|
maelstrom_grenade_projectile.ProjectileDamageType = DamageType.Direct
|
||||||
maelstrom_grenade_projectile.InitialVelocity = 30
|
maelstrom_grenade_projectile.InitialVelocity = 30
|
||||||
maelstrom_grenade_projectile.Lifespan = 2f
|
maelstrom_grenade_projectile.Lifespan = 2f
|
||||||
|
|
@ -3117,6 +3128,7 @@ object GlobalDefinitions {
|
||||||
maelstrom_grenade_projectile_contact.Damage1 = 60
|
maelstrom_grenade_projectile_contact.Damage1 = 60
|
||||||
maelstrom_grenade_projectile_contact.DamageRadius = 20f
|
maelstrom_grenade_projectile_contact.DamageRadius = 20f
|
||||||
maelstrom_grenade_projectile_contact.LashRadius = 5f
|
maelstrom_grenade_projectile_contact.LashRadius = 5f
|
||||||
|
maelstrom_grenade_projectile_contact.GrenadeProjectile = true
|
||||||
maelstrom_grenade_projectile_contact.ProjectileDamageType = DamageType.Direct
|
maelstrom_grenade_projectile_contact.ProjectileDamageType = DamageType.Direct
|
||||||
maelstrom_grenade_projectile_contact.InitialVelocity = 30
|
maelstrom_grenade_projectile_contact.InitialVelocity = 30
|
||||||
maelstrom_grenade_projectile_contact.Lifespan = 15f
|
maelstrom_grenade_projectile_contact.Lifespan = 15f
|
||||||
|
|
@ -3241,6 +3253,7 @@ object GlobalDefinitions {
|
||||||
mine_sweeper_projectile.Damage1 = 0
|
mine_sweeper_projectile.Damage1 = 0
|
||||||
mine_sweeper_projectile.DamageAtEdge = .33f
|
mine_sweeper_projectile.DamageAtEdge = .33f
|
||||||
mine_sweeper_projectile.DamageRadius = 25f
|
mine_sweeper_projectile.DamageRadius = 25f
|
||||||
|
mine_sweeper_projectile.GrenadeProjectile = true
|
||||||
mine_sweeper_projectile.ProjectileDamageType = DamageType.Splash
|
mine_sweeper_projectile.ProjectileDamageType = DamageType.Splash
|
||||||
mine_sweeper_projectile.InitialVelocity = 30
|
mine_sweeper_projectile.InitialVelocity = 30
|
||||||
mine_sweeper_projectile.Lifespan = 15f
|
mine_sweeper_projectile.Lifespan = 15f
|
||||||
|
|
@ -3252,6 +3265,7 @@ object GlobalDefinitions {
|
||||||
mine_sweeper_projectile_enh.Damage1 = 0
|
mine_sweeper_projectile_enh.Damage1 = 0
|
||||||
mine_sweeper_projectile_enh.DamageAtEdge = 0.33f
|
mine_sweeper_projectile_enh.DamageAtEdge = 0.33f
|
||||||
mine_sweeper_projectile_enh.DamageRadius = 25f
|
mine_sweeper_projectile_enh.DamageRadius = 25f
|
||||||
|
mine_sweeper_projectile_enh.GrenadeProjectile = true
|
||||||
mine_sweeper_projectile_enh.ProjectileDamageType = DamageType.Splash
|
mine_sweeper_projectile_enh.ProjectileDamageType = DamageType.Splash
|
||||||
mine_sweeper_projectile_enh.InitialVelocity = 30
|
mine_sweeper_projectile_enh.InitialVelocity = 30
|
||||||
mine_sweeper_projectile_enh.Lifespan = 3f
|
mine_sweeper_projectile_enh.Lifespan = 3f
|
||||||
|
|
@ -3455,11 +3469,12 @@ object GlobalDefinitions {
|
||||||
plasma_cartridge_projectile.Damage1 = 15
|
plasma_cartridge_projectile.Damage1 = 15
|
||||||
plasma_cartridge_projectile.DamageAtEdge = 0.2f
|
plasma_cartridge_projectile.DamageAtEdge = 0.2f
|
||||||
plasma_cartridge_projectile.DamageRadius = 7f
|
plasma_cartridge_projectile.DamageRadius = 7f
|
||||||
|
plasma_cartridge_projectile.GrenadeProjectile = true
|
||||||
plasma_cartridge_projectile.ProjectileDamageType = DamageType.Aggravated
|
plasma_cartridge_projectile.ProjectileDamageType = DamageType.Aggravated
|
||||||
plasma_cartridge_projectile.Aggravated = AggravatedDamage(
|
plasma_cartridge_projectile.Aggravated = AggravatedDamage(
|
||||||
List(AggravatedInfo(DamageType.Direct, 0.25f, 750), AggravatedInfo(DamageType.Splash, 0.25f, 1000)),
|
List(AggravatedInfo(DamageType.Direct, 0.25f, 750), AggravatedInfo(DamageType.Splash, 0.25f, 1000)),
|
||||||
Aura.Plasma,
|
Aura.Plasma,
|
||||||
0,
|
4000, //hard-coded default?
|
||||||
1.5f,
|
1.5f,
|
||||||
true,
|
true,
|
||||||
false
|
false
|
||||||
|
|
@ -3474,11 +3489,12 @@ object GlobalDefinitions {
|
||||||
plasma_cartridge_projectile_b.Damage1 = 15
|
plasma_cartridge_projectile_b.Damage1 = 15
|
||||||
plasma_cartridge_projectile_b.DamageAtEdge = 0.2f
|
plasma_cartridge_projectile_b.DamageAtEdge = 0.2f
|
||||||
plasma_cartridge_projectile_b.DamageRadius = 7f
|
plasma_cartridge_projectile_b.DamageRadius = 7f
|
||||||
|
plasma_cartridge_projectile_b.GrenadeProjectile = true
|
||||||
plasma_cartridge_projectile_b.ProjectileDamageType = DamageType.Aggravated
|
plasma_cartridge_projectile_b.ProjectileDamageType = DamageType.Aggravated
|
||||||
plasma_cartridge_projectile_b.Aggravated = AggravatedDamage(
|
plasma_cartridge_projectile_b.Aggravated = AggravatedDamage(
|
||||||
List(AggravatedInfo(DamageType.Direct, 0.25f, 750), AggravatedInfo(DamageType.Splash, 0.25f, 1000)),
|
List(AggravatedInfo(DamageType.Direct, 0.25f, 750), AggravatedInfo(DamageType.Splash, 0.25f, 1000)),
|
||||||
Aura.Plasma,
|
Aura.Plasma,
|
||||||
0,
|
4000, //hard-coded default?
|
||||||
1.5f,
|
1.5f,
|
||||||
true,
|
true,
|
||||||
false
|
false
|
||||||
|
|
@ -3492,11 +3508,12 @@ object GlobalDefinitions {
|
||||||
plasma_grenade_projectile.Damage1 = 30
|
plasma_grenade_projectile.Damage1 = 30
|
||||||
plasma_grenade_projectile.DamageAtEdge = 0.1f
|
plasma_grenade_projectile.DamageAtEdge = 0.1f
|
||||||
plasma_grenade_projectile.DamageRadius = 7f
|
plasma_grenade_projectile.DamageRadius = 7f
|
||||||
|
plasma_grenade_projectile.GrenadeProjectile = true
|
||||||
plasma_grenade_projectile.ProjectileDamageType = DamageType.Aggravated
|
plasma_grenade_projectile.ProjectileDamageType = DamageType.Aggravated
|
||||||
plasma_grenade_projectile.Aggravated = AggravatedDamage(
|
plasma_grenade_projectile.Aggravated = AggravatedDamage(
|
||||||
List(AggravatedInfo(DamageType.Direct, 0.25f, 750), AggravatedInfo(DamageType.Splash, 0.25f, 1000)),
|
List(AggravatedInfo(DamageType.Direct, 0.25f, 750), AggravatedInfo(DamageType.Splash, 0.25f, 1000)),
|
||||||
Aura.Plasma,
|
Aura.Plasma,
|
||||||
0,
|
4000, //hard-coded default?
|
||||||
1.5f,
|
1.5f,
|
||||||
true,
|
true,
|
||||||
false
|
false
|
||||||
|
|
@ -3511,11 +3528,12 @@ object GlobalDefinitions {
|
||||||
plasma_grenade_projectile_B.Damage1 = 30
|
plasma_grenade_projectile_B.Damage1 = 30
|
||||||
plasma_grenade_projectile_B.DamageAtEdge = 0.1f
|
plasma_grenade_projectile_B.DamageAtEdge = 0.1f
|
||||||
plasma_grenade_projectile_B.DamageRadius = 7f
|
plasma_grenade_projectile_B.DamageRadius = 7f
|
||||||
|
plasma_grenade_projectile_B.GrenadeProjectile = true
|
||||||
plasma_grenade_projectile_B.ProjectileDamageType = DamageType.Aggravated
|
plasma_grenade_projectile_B.ProjectileDamageType = DamageType.Aggravated
|
||||||
plasma_grenade_projectile_B.Aggravated = AggravatedDamage(
|
plasma_grenade_projectile_B.Aggravated = AggravatedDamage(
|
||||||
List(AggravatedInfo(DamageType.Direct, 0.25f, 750), AggravatedInfo(DamageType.Splash, 0.25f, 1000)),
|
List(AggravatedInfo(DamageType.Direct, 0.25f, 750), AggravatedInfo(DamageType.Splash, 0.25f, 1000)),
|
||||||
Aura.Plasma,
|
Aura.Plasma,
|
||||||
0,
|
4000, //hard-coded default?
|
||||||
1.5f,
|
1.5f,
|
||||||
true,
|
true,
|
||||||
false
|
false
|
||||||
|
|
@ -3532,6 +3550,7 @@ object GlobalDefinitions {
|
||||||
pounder_projectile.Damage4 = 132
|
pounder_projectile.Damage4 = 132
|
||||||
pounder_projectile.DamageAtEdge = 0.1f
|
pounder_projectile.DamageAtEdge = 0.1f
|
||||||
pounder_projectile.DamageRadius = 1f
|
pounder_projectile.DamageRadius = 1f
|
||||||
|
pounder_projectile.GrenadeProjectile = true
|
||||||
pounder_projectile.ProjectileDamageType = DamageType.Splash
|
pounder_projectile.ProjectileDamageType = DamageType.Splash
|
||||||
pounder_projectile.InitialVelocity = 120
|
pounder_projectile.InitialVelocity = 120
|
||||||
pounder_projectile.Lifespan = 2.5f
|
pounder_projectile.Lifespan = 2.5f
|
||||||
|
|
@ -3547,6 +3566,7 @@ object GlobalDefinitions {
|
||||||
pounder_projectile_enh.Damage4 = 132
|
pounder_projectile_enh.Damage4 = 132
|
||||||
pounder_projectile_enh.DamageAtEdge = 0.1f
|
pounder_projectile_enh.DamageAtEdge = 0.1f
|
||||||
pounder_projectile_enh.DamageRadius = 1f
|
pounder_projectile_enh.DamageRadius = 1f
|
||||||
|
pounder_projectile_enh.GrenadeProjectile = true
|
||||||
pounder_projectile_enh.ProjectileDamageType = DamageType.Splash
|
pounder_projectile_enh.ProjectileDamageType = DamageType.Splash
|
||||||
pounder_projectile_enh.InitialVelocity = 120
|
pounder_projectile_enh.InitialVelocity = 120
|
||||||
pounder_projectile_enh.Lifespan = 3.2f
|
pounder_projectile_enh.Lifespan = 3.2f
|
||||||
|
|
@ -3598,6 +3618,7 @@ object GlobalDefinitions {
|
||||||
ProjectileDefinition.CalculateDerivedFields(quasar_projectile)
|
ProjectileDefinition.CalculateDerivedFields(quasar_projectile)
|
||||||
|
|
||||||
radiator_grenade_projectile.Name = "radiator_grenade_projectile" // Todo : Radiator damages ?
|
radiator_grenade_projectile.Name = "radiator_grenade_projectile" // Todo : Radiator damages ?
|
||||||
|
radiator_grenade_projectile.GrenadeProjectile = true //not really, but technically yes
|
||||||
radiator_grenade_projectile.ProjectileDamageType = DamageType.Direct
|
radiator_grenade_projectile.ProjectileDamageType = DamageType.Direct
|
||||||
radiator_grenade_projectile.InitialVelocity = 30
|
radiator_grenade_projectile.InitialVelocity = 30
|
||||||
radiator_grenade_projectile.Lifespan = 3f
|
radiator_grenade_projectile.Lifespan = 3f
|
||||||
|
|
@ -3605,6 +3626,7 @@ object GlobalDefinitions {
|
||||||
|
|
||||||
radiator_sticky_projectile.Name = "radiator_sticky_projectile"
|
radiator_sticky_projectile.Name = "radiator_sticky_projectile"
|
||||||
// TODO for later, maybe : set_resource_parent radiator_sticky_projectile game_objects radiator_grenade_projectile
|
// TODO for later, maybe : set_resource_parent radiator_sticky_projectile game_objects radiator_grenade_projectile
|
||||||
|
radiator_sticky_projectile.GrenadeProjectile = true //not really, but technically yes
|
||||||
radiator_sticky_projectile.ProjectileDamageType = DamageType.Direct
|
radiator_sticky_projectile.ProjectileDamageType = DamageType.Direct
|
||||||
radiator_sticky_projectile.InitialVelocity = 30
|
radiator_sticky_projectile.InitialVelocity = 30
|
||||||
radiator_sticky_projectile.Lifespan = 4f
|
radiator_sticky_projectile.Lifespan = 4f
|
||||||
|
|
|
||||||
|
|
@ -30,13 +30,16 @@ class PlayerControl(player: Player, avatarActor: typed.ActorRef[AvatarActor.Comm
|
||||||
extends Actor
|
extends Actor
|
||||||
with JammableBehavior
|
with JammableBehavior
|
||||||
with Damageable
|
with Damageable
|
||||||
with ContainableBehavior {
|
with ContainableBehavior
|
||||||
|
with AuraEffectBehavior {
|
||||||
def JammableObject = player
|
def JammableObject = player
|
||||||
|
|
||||||
def DamageableObject = player
|
def DamageableObject = player
|
||||||
|
|
||||||
def ContainerObject = player
|
def ContainerObject = player
|
||||||
|
|
||||||
|
def AuraTargetObject = player
|
||||||
|
|
||||||
private[this] val log = org.log4s.getLogger(player.Name)
|
private[this] val log = org.log4s.getLogger(player.Name)
|
||||||
private[this] val damageLog = org.log4s.getLogger(Damageable.LogChannel)
|
private[this] val damageLog = org.log4s.getLogger(Damageable.LogChannel)
|
||||||
|
|
||||||
|
|
@ -53,11 +56,13 @@ class PlayerControl(player: Player, avatarActor: typed.ActorRef[AvatarActor.Comm
|
||||||
override def postStop(): Unit = {
|
override def postStop(): Unit = {
|
||||||
lockerControlAgent ! akka.actor.PoisonPill
|
lockerControlAgent ! akka.actor.PoisonPill
|
||||||
player.avatar.locker.Actor = Default.Actor
|
player.avatar.locker.Actor = Default.Actor
|
||||||
|
EndAllEffects()
|
||||||
}
|
}
|
||||||
|
|
||||||
def receive: Receive =
|
def receive: Receive =
|
||||||
jammableBehavior
|
jammableBehavior
|
||||||
.orElse(takesDamage)
|
.orElse(takesDamage)
|
||||||
|
.orElse(auraBehavior)
|
||||||
.orElse(containerBehavior)
|
.orElse(containerBehavior)
|
||||||
.orElse {
|
.orElse {
|
||||||
case Player.Die() =>
|
case Player.Die() =>
|
||||||
|
|
@ -544,9 +549,11 @@ class PlayerControl(player: Player, avatarActor: typed.ActorRef[AvatarActor.Comm
|
||||||
//alert damage source
|
//alert damage source
|
||||||
DamageAwareness(target, cause)
|
DamageAwareness(target, cause)
|
||||||
}
|
}
|
||||||
|
//special effects
|
||||||
if (Damageable.CanJammer(target, cause)) {
|
if (Damageable.CanJammer(target, cause)) {
|
||||||
target.Actor ! JammableUnit.Jammered(cause)
|
TryJammerEffectActivate(target, cause)
|
||||||
}
|
}
|
||||||
|
TryAggravationEffect(cause)
|
||||||
} else {
|
} else {
|
||||||
DestructionAwareness(target, Some(cause))
|
DestructionAwareness(target, Some(cause))
|
||||||
}
|
}
|
||||||
|
|
@ -599,6 +606,8 @@ class PlayerControl(player: Player, avatarActor: typed.ActorRef[AvatarActor.Comm
|
||||||
val nameChannel = target.Name
|
val nameChannel = target.Name
|
||||||
val zoneChannel = zone.id
|
val zoneChannel = zone.id
|
||||||
target.Die
|
target.Die
|
||||||
|
//aura effects cancel
|
||||||
|
EndAllEffects()
|
||||||
//unjam
|
//unjam
|
||||||
CancelJammeredSound(target)
|
CancelJammeredSound(target)
|
||||||
CancelJammeredStatus(target)
|
CancelJammeredStatus(target)
|
||||||
|
|
|
||||||
|
|
@ -36,6 +36,7 @@ class ProjectileDefinition(objectId: Int)
|
||||||
private var autoLock: Boolean = false
|
private var autoLock: Boolean = false
|
||||||
private var additionalEffect: Boolean = false
|
private var additionalEffect: Boolean = false
|
||||||
private var jammerProjectile: Boolean = false
|
private var jammerProjectile: Boolean = false
|
||||||
|
private var grenade_projectile : Boolean = false
|
||||||
private var aggravated_damage : Option[AggravatedDamage] = None
|
private var aggravated_damage : Option[AggravatedDamage] = None
|
||||||
//derived calculations
|
//derived calculations
|
||||||
private var distanceMax: Float = 0f
|
private var distanceMax: Float = 0f
|
||||||
|
|
@ -175,6 +176,13 @@ class ProjectileDefinition(objectId: Int)
|
||||||
JammerProjectile
|
JammerProjectile
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def GrenadeProjectile : Boolean = grenade_projectile
|
||||||
|
|
||||||
|
def GrenadeProjectile_=(isGrenade : Boolean) : Boolean = {
|
||||||
|
grenade_projectile = isGrenade
|
||||||
|
GrenadeProjectile
|
||||||
|
}
|
||||||
|
|
||||||
def Aggravated : Option[AggravatedDamage] = aggravated_damage
|
def Aggravated : Option[AggravatedDamage] = aggravated_damage
|
||||||
|
|
||||||
def Aggravated_=(damage : AggravatedDamage) : Option[AggravatedDamage] = Aggravated_=(Some(damage))
|
def Aggravated_=(damage : AggravatedDamage) : Option[AggravatedDamage] = Aggravated_=(Some(damage))
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue