mirror of
https://github.com/2revoemag/PSF-BotServer.git
synced 2026-03-02 03:33:40 +00:00
work on starfire damage profile; moved aura behavior into own folder and creates an aura container object; extended aura behavior to vehicles; applied target-control to aggravation effect
This commit is contained in:
parent
97e64d5edc
commit
66eb3b5b95
11 changed files with 241 additions and 104 deletions
|
|
@ -2,13 +2,13 @@
|
|||
package net.psforever.objects
|
||||
|
||||
import net.psforever.objects.avatar.Certification
|
||||
import net.psforever.objects.avatar.Aura
|
||||
import net.psforever.objects.ballistics.{AggravatedDamage, AggravatedInfo, Projectiles}
|
||||
import net.psforever.objects.ce.{DeployableCategory, DeployedItem}
|
||||
import net.psforever.objects.definition._
|
||||
import net.psforever.objects.definition.converter._
|
||||
import net.psforever.objects.equipment._
|
||||
import net.psforever.objects.inventory.InventoryTile
|
||||
import net.psforever.objects.serverobject.aggravated.Aura
|
||||
import net.psforever.objects.serverobject.doors.DoorDefinition
|
||||
import net.psforever.objects.serverobject.generator.GeneratorDefinition
|
||||
import net.psforever.objects.serverobject.implantmech.ImplantTerminalMechDefinition
|
||||
|
|
@ -2323,7 +2323,8 @@ object GlobalDefinitions {
|
|||
Aura.None,
|
||||
0,
|
||||
0f,
|
||||
true
|
||||
true,
|
||||
List(TargetValidation(EffectTarget.Category.Aircraft, EffectTarget.Validation.Aircraft))
|
||||
)
|
||||
aphelion_starfire_projectile.ExistsOnRemoteClients = true
|
||||
aphelion_starfire_projectile.RemoteClientData = (39577, 249) //starfire_projectile data
|
||||
|
|
@ -2454,7 +2455,11 @@ object GlobalDefinitions {
|
|||
AggravatedInfo(DamageType.Direct, 0.2f, 500),
|
||||
Aura.Comet,
|
||||
0,
|
||||
10f
|
||||
10f,
|
||||
List(
|
||||
TargetValidation(EffectTarget.Category.Player, EffectTarget.Validation.Player),
|
||||
TargetValidation(EffectTarget.Category.Vehicle, EffectTarget.Validation.Vehicle)
|
||||
)
|
||||
)
|
||||
comet_projectile.InitialVelocity = 80
|
||||
comet_projectile.Lifespan = 3.1f
|
||||
|
|
@ -2609,16 +2614,17 @@ object GlobalDefinitions {
|
|||
5000,
|
||||
0.1f,
|
||||
false,
|
||||
false
|
||||
false,
|
||||
List(TargetValidation(EffectTarget.Category.Player, EffectTarget.Validation.Player))
|
||||
)
|
||||
flamethrower_fireball.InitialVelocity = 15
|
||||
flamethrower_fireball.Lifespan = 1.2f
|
||||
ProjectileDefinition.CalculateDerivedFields(flamethrower_fireball)
|
||||
flamethrower_fireball.Modifiers = List(
|
||||
DamageModifiers.AggravatedDirect,
|
||||
DamageModifiers.AggravatedDirectBurn,
|
||||
DamageModifiers.AggravatedSplash,
|
||||
DamageModifiers.AggravatedSplashBurn,
|
||||
DamageModifiers.InfantryAggravatedDirect,
|
||||
DamageModifiers.InfantryAggravatedDirectBurn,
|
||||
DamageModifiers.InfantryAggravatedSplash,
|
||||
DamageModifiers.InfantryAggravatedSplashBurn,
|
||||
DamageModifiers.RadialDegrade
|
||||
)
|
||||
|
||||
|
|
@ -2638,7 +2644,8 @@ object GlobalDefinitions {
|
|||
5000,
|
||||
0.5f,
|
||||
false,
|
||||
false
|
||||
false,
|
||||
List(TargetValidation(EffectTarget.Category.Player, EffectTarget.Validation.Player))
|
||||
)
|
||||
flamethrower_projectile.DegradeDelay = 1.0f
|
||||
flamethrower_projectile.DegradeMultiplier = 0.5f
|
||||
|
|
@ -2646,8 +2653,8 @@ object GlobalDefinitions {
|
|||
flamethrower_projectile.Lifespan = 2.0f
|
||||
ProjectileDefinition.CalculateDerivedFields(flamethrower_projectile)
|
||||
flamethrower_projectile.Modifiers = List(
|
||||
DamageModifiers.AggravatedDirect,
|
||||
DamageModifiers.AggravatedDirectBurn,
|
||||
DamageModifiers.InfantryAggravatedDirect,
|
||||
DamageModifiers.InfantryAggravatedDirectBurn,
|
||||
DamageModifiers.MaxDistanceCutoff
|
||||
)
|
||||
|
||||
|
|
@ -3500,19 +3507,20 @@ object GlobalDefinitions {
|
|||
plasma_cartridge_projectile.Aggravated = AggravatedDamage(
|
||||
List(AggravatedInfo(DamageType.Direct, 0.25f, 750), AggravatedInfo(DamageType.Splash, 0.25f, 1000)),
|
||||
Aura.Plasma,
|
||||
4000, //hard-coded default?
|
||||
3000,
|
||||
1.5f,
|
||||
true,
|
||||
false
|
||||
false,
|
||||
List(TargetValidation(EffectTarget.Category.Player, EffectTarget.Validation.Player))
|
||||
)
|
||||
plasma_cartridge_projectile.InitialVelocity = 30
|
||||
plasma_cartridge_projectile.Lifespan = 15f
|
||||
ProjectileDefinition.CalculateDerivedFields(plasma_cartridge_projectile)
|
||||
plasma_cartridge_projectile.Modifiers = List(
|
||||
DamageModifiers.AggravatedDirect,
|
||||
DamageModifiers.AggravatedDirectBurn,
|
||||
DamageModifiers.AggravatedSplash,
|
||||
DamageModifiers.AggravatedSplashBurn,
|
||||
DamageModifiers.InfantryAggravatedDirect,
|
||||
DamageModifiers.InfantryAggravatedDirectBurn,
|
||||
DamageModifiers.InfantryAggravatedSplash,
|
||||
DamageModifiers.InfantryAggravatedSplashBurn,
|
||||
DamageModifiers.RadialDegrade
|
||||
)
|
||||
|
||||
|
|
@ -3527,19 +3535,20 @@ object GlobalDefinitions {
|
|||
plasma_cartridge_projectile_b.Aggravated = AggravatedDamage(
|
||||
List(AggravatedInfo(DamageType.Direct, 0.25f, 750), AggravatedInfo(DamageType.Splash, 0.25f, 1000)),
|
||||
Aura.Plasma,
|
||||
4000, //hard-coded default?
|
||||
3000,
|
||||
1.5f,
|
||||
true,
|
||||
false
|
||||
false,
|
||||
List(TargetValidation(EffectTarget.Category.Player, EffectTarget.Validation.Player))
|
||||
)
|
||||
plasma_cartridge_projectile_b.InitialVelocity = 30
|
||||
plasma_cartridge_projectile_b.Lifespan = 2f
|
||||
ProjectileDefinition.CalculateDerivedFields(plasma_cartridge_projectile_b)
|
||||
plasma_cartridge_projectile_b.Modifiers = List(
|
||||
DamageModifiers.AggravatedDirect,
|
||||
DamageModifiers.AggravatedDirectBurn,
|
||||
DamageModifiers.AggravatedSplash,
|
||||
DamageModifiers.AggravatedSplashBurn,
|
||||
DamageModifiers.InfantryAggravatedDirect,
|
||||
DamageModifiers.InfantryAggravatedDirectBurn,
|
||||
DamageModifiers.InfantryAggravatedSplash,
|
||||
DamageModifiers.InfantryAggravatedSplashBurn,
|
||||
DamageModifiers.RadialDegrade
|
||||
)
|
||||
|
||||
|
|
@ -3553,19 +3562,20 @@ object GlobalDefinitions {
|
|||
plasma_grenade_projectile.Aggravated = AggravatedDamage(
|
||||
List(AggravatedInfo(DamageType.Direct, 0.25f, 750), AggravatedInfo(DamageType.Splash, 0.25f, 1000)),
|
||||
Aura.Plasma,
|
||||
4000, //hard-coded default?
|
||||
3000,
|
||||
1.5f,
|
||||
true,
|
||||
false
|
||||
false,
|
||||
List(TargetValidation(EffectTarget.Category.Player, EffectTarget.Validation.Player))
|
||||
)
|
||||
plasma_grenade_projectile.InitialVelocity = 30
|
||||
plasma_grenade_projectile.Lifespan = 15f
|
||||
ProjectileDefinition.CalculateDerivedFields(plasma_grenade_projectile)
|
||||
plasma_grenade_projectile.Modifiers = List(
|
||||
DamageModifiers.AggravatedDirect,
|
||||
DamageModifiers.AggravatedDirectBurn,
|
||||
DamageModifiers.AggravatedSplash,
|
||||
DamageModifiers.AggravatedSplashBurn,
|
||||
DamageModifiers.InfantryAggravatedDirect,
|
||||
DamageModifiers.InfantryAggravatedDirectBurn,
|
||||
DamageModifiers.InfantryAggravatedSplash,
|
||||
DamageModifiers.InfantryAggravatedSplashBurn,
|
||||
DamageModifiers.RadialDegrade
|
||||
)
|
||||
|
||||
|
|
@ -3580,19 +3590,20 @@ object GlobalDefinitions {
|
|||
plasma_grenade_projectile_B.Aggravated = AggravatedDamage(
|
||||
List(AggravatedInfo(DamageType.Direct, 0.25f, 750), AggravatedInfo(DamageType.Splash, 0.25f, 1000)),
|
||||
Aura.Plasma,
|
||||
4000, //hard-coded default?
|
||||
3000,
|
||||
1.5f,
|
||||
true,
|
||||
false
|
||||
false,
|
||||
List(TargetValidation(EffectTarget.Category.Player, EffectTarget.Validation.Player))
|
||||
)
|
||||
plasma_grenade_projectile_B.InitialVelocity = 30
|
||||
plasma_grenade_projectile_B.Lifespan = 3f
|
||||
ProjectileDefinition.CalculateDerivedFields(plasma_grenade_projectile_B)
|
||||
plasma_grenade_projectile_B.Modifiers = List(
|
||||
DamageModifiers.AggravatedDirect,
|
||||
DamageModifiers.AggravatedDirectBurn,
|
||||
DamageModifiers.AggravatedSplash,
|
||||
DamageModifiers.AggravatedSplashBurn,
|
||||
DamageModifiers.InfantryAggravatedDirect,
|
||||
DamageModifiers.InfantryAggravatedDirectBurn,
|
||||
DamageModifiers.InfantryAggravatedSplash,
|
||||
DamageModifiers.InfantryAggravatedSplashBurn,
|
||||
DamageModifiers.RadialDegrade
|
||||
)
|
||||
|
||||
|
|
@ -3899,9 +3910,10 @@ object GlobalDefinitions {
|
|||
starfire_projectile.Aggravated = AggravatedDamage(
|
||||
AggravatedInfo(DamageType.Direct, 0.25f, 250),
|
||||
Aura.Comet,
|
||||
0,
|
||||
3000,
|
||||
0f,
|
||||
true
|
||||
true,
|
||||
List(TargetValidation(EffectTarget.Category.Aircraft, EffectTarget.Validation.Aircraft))
|
||||
)
|
||||
starfire_projectile.InitialVelocity = 45
|
||||
starfire_projectile.Lifespan = 7.8f
|
||||
|
|
@ -3910,6 +3922,11 @@ object GlobalDefinitions {
|
|||
starfire_projectile.AutoLock = true
|
||||
starfire_projectile.Packet = projectileConverter
|
||||
ProjectileDefinition.CalculateDerivedFields(starfire_projectile)
|
||||
starfire_projectile.Modifiers = List(
|
||||
DamageModifiers.StarfireAggravated,
|
||||
DamageModifiers.StarfireAggravatedBurn,
|
||||
DamageModifiers.RadialDegrade
|
||||
)
|
||||
|
||||
striker_missile_projectile.Name = "striker_missile_projectile"
|
||||
striker_missile_projectile.Damage0 = 35
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@ package net.psforever.objects
|
|||
|
||||
import net.psforever.objects.avatar.{
|
||||
Avatar,
|
||||
Aura => AuraEffect,
|
||||
LoadoutManager
|
||||
}
|
||||
import net.psforever.objects.definition.{
|
||||
|
|
@ -15,6 +14,7 @@ import net.psforever.objects.equipment.{Equipment, EquipmentSize, EquipmentSlot,
|
|||
import net.psforever.objects.inventory.{Container, GridInventory, InventoryItem}
|
||||
import net.psforever.objects.serverobject.PlanetSideServerObject
|
||||
import net.psforever.objects.serverobject.affinity.FactionAffinity
|
||||
import net.psforever.objects.serverobject.aggravated.AuraContainer
|
||||
import net.psforever.objects.vital.resistance.ResistanceProfile
|
||||
import net.psforever.objects.vital.{DamageResistanceModel, Vitality}
|
||||
import net.psforever.objects.zones.ZoneAware
|
||||
|
|
@ -30,7 +30,8 @@ class Player(var avatar: Avatar)
|
|||
with ResistanceProfile
|
||||
with Container
|
||||
with JammableUnit
|
||||
with ZoneAware {
|
||||
with ZoneAware
|
||||
with AuraContainer {
|
||||
Health = 0 //player health is artificially managed as a part of their lifecycle; start entity as dead
|
||||
Destroyed = true //see isAlive
|
||||
private var backpack: Boolean = false
|
||||
|
|
@ -57,8 +58,6 @@ class Player(var avatar: Avatar)
|
|||
|
||||
private var vehicleSeated: Option[PlanetSideGUID] = None
|
||||
|
||||
private var aura : Set[AuraEffect.Value] = Set.empty[AuraEffect.Value]
|
||||
|
||||
Continent = "home2" //the zone id
|
||||
|
||||
var spectator: Boolean = false
|
||||
|
|
@ -356,20 +355,6 @@ class Player(var avatar: Avatar)
|
|||
AwayFromKeyboard
|
||||
}
|
||||
|
||||
def Aura : Set[AuraEffect.Value] = aura
|
||||
|
||||
def AddEffectToAura(effect : AuraEffect.Value) : Set[AuraEffect.Value] = {
|
||||
if(effect != AuraEffect.None) {
|
||||
aura = aura + effect
|
||||
}
|
||||
Aura
|
||||
}
|
||||
|
||||
def RemoveEffectFromAura(effect : AuraEffect.Value) : Set[AuraEffect.Value] = {
|
||||
aura = aura - effect
|
||||
Aura
|
||||
}
|
||||
|
||||
private var usingSpecial: SpecialExoSuitDefinition.Mode.Value => SpecialExoSuitDefinition.Mode.Value =
|
||||
DefaultUsingSpecial
|
||||
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ import net.psforever.objects.inventory.{Container, GridInventory, InventoryItem,
|
|||
import net.psforever.objects.serverobject.mount.Mountable
|
||||
import net.psforever.objects.serverobject.PlanetSideServerObject
|
||||
import net.psforever.objects.serverobject.affinity.FactionAffinity
|
||||
import net.psforever.objects.serverobject.aggravated.AuraContainer
|
||||
import net.psforever.objects.serverobject.deploy.Deployment
|
||||
import net.psforever.objects.serverobject.hackable.Hackable
|
||||
import net.psforever.objects.serverobject.structures.AmenityOwner
|
||||
|
|
@ -78,7 +79,8 @@ class Vehicle(private val vehicleDef: VehicleDefinition)
|
|||
with StandardResistanceProfile
|
||||
with JammableUnit
|
||||
with CommonNtuContainer
|
||||
with Container {
|
||||
with Container
|
||||
with AuraContainer {
|
||||
private var faction: PlanetSideEmpire.Value = PlanetSideEmpire.NEUTRAL
|
||||
private var shields: Int = 0
|
||||
private var decal: Int = 0
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ import net.psforever.objects.ballistics.{PlayerSource, ResolvedProjectile}
|
|||
import net.psforever.objects.equipment._
|
||||
import net.psforever.objects.inventory.{GridInventory, InventoryItem}
|
||||
import net.psforever.objects.loadouts.Loadout
|
||||
import net.psforever.objects.serverobject.aggravated.AuraEffectBehavior
|
||||
import net.psforever.objects.serverobject.containable.{Containable, ContainableBehavior}
|
||||
import net.psforever.objects.vital.{PlayerSuicide, Vitality}
|
||||
import net.psforever.objects.serverobject.{CommonMessages, PlanetSideServerObject}
|
||||
|
|
|
|||
|
|
@ -89,10 +89,10 @@ object EffectTarget {
|
|||
false
|
||||
}
|
||||
|
||||
def AMS(target: PlanetSideGameObject): Boolean =
|
||||
def Vehicle(target: PlanetSideGameObject): Boolean =
|
||||
target match {
|
||||
case v: Vehicle =>
|
||||
v.Health > 0 && v.Definition == GlobalDefinitions.ams
|
||||
v.Health > 0
|
||||
case _ =>
|
||||
false
|
||||
}
|
||||
|
|
@ -104,5 +104,21 @@ object EffectTarget {
|
|||
case _ =>
|
||||
false
|
||||
}
|
||||
|
||||
def AMS(target: PlanetSideGameObject): Boolean =
|
||||
target match {
|
||||
case v: Vehicle =>
|
||||
v.Health > 0 && v.Definition == GlobalDefinitions.ams
|
||||
case _ =>
|
||||
false
|
||||
}
|
||||
|
||||
def Aircraft(target: PlanetSideGameObject): Boolean =
|
||||
target match {
|
||||
case v: Vehicle =>
|
||||
GlobalDefinitions.isFlightVehicle(v.Definition) && v.Health > 0
|
||||
case _ =>
|
||||
false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,7 +10,9 @@ import net.psforever.objects.inventory.{GridInventory, InventoryItem}
|
|||
import net.psforever.objects.serverobject.CommonMessages
|
||||
import net.psforever.objects.serverobject.mount.{Mountable, MountableBehavior}
|
||||
import net.psforever.objects.serverobject.affinity.{FactionAffinity, FactionAffinityBehavior}
|
||||
import net.psforever.objects.serverobject.aggravated.AuraEffectBehavior
|
||||
import net.psforever.objects.serverobject.containable.{Containable, ContainableBehavior}
|
||||
import net.psforever.objects.serverobject.damage.Damageable.Target
|
||||
import net.psforever.objects.serverobject.damage.DamageableVehicle
|
||||
import net.psforever.objects.serverobject.deploy.Deployment.DeploymentObject
|
||||
import net.psforever.objects.serverobject.deploy.{Deployment, DeploymentBehavior}
|
||||
|
|
@ -51,7 +53,8 @@ class VehicleControl(vehicle: Vehicle)
|
|||
with RepairableVehicle
|
||||
with JammableMountedWeapons
|
||||
with ContainableBehavior
|
||||
with AntTransferBehavior {
|
||||
with AntTransferBehavior
|
||||
with AuraEffectBehavior {
|
||||
|
||||
//make control actors belonging to utilities when making control actor belonging to vehicle
|
||||
vehicle.Utilities.foreach({ case (_, util) => util.Setup })
|
||||
|
|
@ -74,7 +77,9 @@ class VehicleControl(vehicle: Vehicle)
|
|||
|
||||
def ChargeTransferObject = vehicle
|
||||
|
||||
if (vehicle.Definition == GlobalDefinitions.ant) {
|
||||
def AuraTargetObject = vehicle
|
||||
|
||||
if(vehicle.Definition == GlobalDefinitions.ant) {
|
||||
findChargeTargetFunc = Vehicles.FindANTChargingSource
|
||||
findDischargeTargetFunc = Vehicles.FindANTDischargingTarget
|
||||
}
|
||||
|
|
@ -95,6 +100,7 @@ class VehicleControl(vehicle: Vehicle)
|
|||
context.stop(util().Actor)
|
||||
util().Actor = Default.Actor
|
||||
}
|
||||
EndAllEffects()
|
||||
}
|
||||
|
||||
def Enabled: Receive =
|
||||
|
|
@ -103,6 +109,7 @@ class VehicleControl(vehicle: Vehicle)
|
|||
.orElse(cargoBehavior)
|
||||
.orElse(jammableBehavior)
|
||||
.orElse(takesDamage)
|
||||
.orElse(auraBehavior)
|
||||
.orElse(canBeRepairedByNanoDispenser)
|
||||
.orElse(containerBehavior)
|
||||
.orElse(antBehavior)
|
||||
|
|
@ -579,6 +586,24 @@ class VehicleControl(vehicle: Vehicle)
|
|||
}
|
||||
out
|
||||
}
|
||||
|
||||
override def DamageAwareness(
|
||||
target: Target,
|
||||
cause: ResolvedProjectile,
|
||||
amount: Int
|
||||
): Unit = {
|
||||
TryAggravationEffect(cause)
|
||||
super.DamageAwareness(target, cause, amount)
|
||||
}
|
||||
|
||||
override def DestructionAwareness(
|
||||
target: Target,
|
||||
cause: ResolvedProjectile
|
||||
): Unit = {
|
||||
//aura effects cancel
|
||||
EndAllEffects()
|
||||
super.DestructionAwareness(target, cause)
|
||||
}
|
||||
}
|
||||
|
||||
object VehicleControl {
|
||||
|
|
|
|||
|
|
@ -1,7 +1,8 @@
|
|||
// Copyright (c) 2020 PSForever
|
||||
package net.psforever.objects.vital.damage
|
||||
|
||||
import net.psforever.objects.ballistics.{PlayerSource, ProjectileResolution, ResolvedProjectile}
|
||||
import net.psforever.objects.GlobalDefinitions
|
||||
import net.psforever.objects.ballistics.{PlayerSource, ProjectileResolution, ResolvedProjectile, VehicleSource}
|
||||
import net.psforever.objects.vital.DamageType
|
||||
import net.psforever.types.{ExoSuitType, Vector3}
|
||||
|
||||
|
|
@ -134,22 +135,22 @@ object DamageModifiers {
|
|||
}
|
||||
}
|
||||
|
||||
case object AggravatedDirect extends Mod {
|
||||
case object InfantryAggravatedDirect extends Mod {
|
||||
def Calculate: DamageModifiers.Format =
|
||||
BaseAggravatedFormula(ProjectileResolution.AggravatedDirect, DamageType.Direct)
|
||||
}
|
||||
|
||||
case object AggravatedSplash extends Mod {
|
||||
case object InfantryAggravatedSplash extends Mod {
|
||||
def Calculate: DamageModifiers.Format =
|
||||
BaseAggravatedFormula(ProjectileResolution.AggravatedSplash, DamageType.Splash)
|
||||
}
|
||||
|
||||
case object AggravatedDirectBurn extends Mod {
|
||||
case object InfantryAggravatedDirectBurn extends Mod {
|
||||
def Calculate: DamageModifiers.Format =
|
||||
BaseAggravatedBurnFormula(ProjectileResolution.AggravatedDirectBurn, DamageType.Direct)
|
||||
}
|
||||
|
||||
case object AggravatedSplashBurn extends Mod {
|
||||
case object InfantryAggravatedSplashBurn extends Mod {
|
||||
def Calculate: DamageModifiers.Format =
|
||||
BaseAggravatedBurnFormula(ProjectileResolution.AggravatedSplashBurn, DamageType.Splash)
|
||||
}
|
||||
|
|
@ -164,14 +165,18 @@ object DamageModifiers {
|
|||
): Int = {
|
||||
if (data.resolution == resolution) {
|
||||
(data.projectile.profile.Aggravated, data.target) match {
|
||||
case (Some(aggravation), p: PlayerSource) if p.ExoSuit == ExoSuitType.MAX =>
|
||||
val aggravatedDirectDamage = (aggravation.info.find(_.damage_type == damageType) match {
|
||||
case (Some(aggravation), p: PlayerSource) =>
|
||||
val aggravatedDamage = aggravation.info.find(_.damage_type == damageType) match {
|
||||
case Some(infos) =>
|
||||
damage * infos.degradation_percentage
|
||||
damage * infos.degradation_percentage + damage
|
||||
case _ =>
|
||||
damage toFloat
|
||||
}) * aggravation.max_factor
|
||||
damage + aggravatedDirectDamage toInt
|
||||
}
|
||||
if(p.ExoSuit == ExoSuitType.MAX) {
|
||||
(aggravatedDamage * aggravation.max_factor) toInt
|
||||
} else {
|
||||
aggravatedDamage toInt
|
||||
}
|
||||
case _ =>
|
||||
damage
|
||||
}
|
||||
|
|
@ -214,10 +219,54 @@ object DamageModifiers {
|
|||
}
|
||||
}
|
||||
case _ =>
|
||||
damage
|
||||
0
|
||||
}
|
||||
} else {
|
||||
damage
|
||||
}
|
||||
}
|
||||
|
||||
case object StarfireAggravated extends Mod {
|
||||
def Calculate: DamageModifiers.Format = formula
|
||||
|
||||
private def formula(damage: Int, data: ResolvedProjectile): Int = {
|
||||
if (data.resolution == ProjectileResolution.AggravatedDirect) {
|
||||
(data.projectile.profile.Aggravated, data.target) match {
|
||||
case (Some(aggravation), v : VehicleSource) if GlobalDefinitions.isFlightVehicle(v.Definition) =>
|
||||
aggravation.info.find(_.damage_type == DamageType.Direct) match {
|
||||
case Some(infos) =>
|
||||
(damage * infos.degradation_percentage + damage) toInt
|
||||
case _ =>
|
||||
damage
|
||||
}
|
||||
case _ =>
|
||||
damage
|
||||
}
|
||||
} else {
|
||||
damage
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
case object StarfireAggravatedBurn extends Mod {
|
||||
def Calculate: DamageModifiers.Format = formula
|
||||
|
||||
private def formula(damage: Int, data: ResolvedProjectile): Int = {
|
||||
if (data.resolution == ProjectileResolution.AggravatedDirectBurn) {
|
||||
(data.projectile.profile.Aggravated, data.target) match {
|
||||
case (Some(aggravation), v : VehicleSource) if GlobalDefinitions.isFlightVehicle(v.Definition) =>
|
||||
aggravation.info.find(_.damage_type == DamageType.Direct) match {
|
||||
case Some(infos) =>
|
||||
(damage * infos.degradation_percentage) toInt
|
||||
case _ =>
|
||||
damage
|
||||
}
|
||||
case _ =>
|
||||
0
|
||||
}
|
||||
} else {
|
||||
damage
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue