package Attacks
using RTDB

DeviceAttack : Attack_GameEffect
{
	attackType = "AttackType.Explosion";
	effectName = "explosions";
	effectTag = "default_explosion_device";
	range = 2.0f;
	explosionDamageVSVehicles = 600.0f;
}

E3MallDestruction_ExplosionMediumKill : DeviceAttack
{
	effectTag = "e3_only_default_explosion";
	fk< StatModifier >[] statModifiers = 
	[
		{
			statType = "BaseStats.PhysicalDamage";
			modifierType = "Additive";
			refStat = "BaseStats.Health";
			refObject = "Root";
			opSymbol = "*";
			value = 2f;
		} : CombinedStatModifier
	];
	range = 4.0f;
}

Explosion : ExplosionMedium
{
}

ExplosiveDeviceAttackBase : DeviceAttack
{
	hitFlags += 
	[
		"OverridePlayerDamageWithFixedPercentage", "OverrideNPCDamageBasedOnTiers", "DeviceExplosionAttack"
	];
	statModifiers = 
	[
		{
			statType = "BaseStats.PhysicalDamage";
			modifierType = "Additive";
			value = 1;
		} : ConstantStatModifier
	];
	float trashNPCMaxHPDamage = 0.2;
	float weakNPCMaxHPDamage = 0.2;
	float normalNPCMaxHPDamage = 0.2;
	float rareNPCMaxHPDamage = 0.2;
	float eliteNPCMaxHPDamage = 0.2;
	float bossNPCMaxHPDamage = 0.05;
	float overridePlayerDamageFixedPercentage = 0.1;
}

ExplosionEnormous : ExplosiveDeviceAttackBase
{
	float trashNPCMaxHPDamage = 3;
	float weakNPCMaxHPDamage = 2.5;
	float normalNPCMaxHPDamage = 2.0;
	float rareNPCMaxHPDamage = 1.95;
	float eliteNPCMaxHPDamage = 1.7;
	float bossNPCMaxHPDamage = 0.08;
	range = 10.0f;
	overridePlayerDamageFixedPercentage = 0.75;
}

ExplosionLarge : ExplosiveDeviceAttackBase
{
	float trashNPCMaxHPDamage = 1.8;
	float weakNPCMaxHPDamage = 1.6;
	float normalNPCMaxHPDamage = 1.4;
	float rareNPCMaxHPDamage = 1.2;
	float eliteNPCMaxHPDamage = 0.75;
	float bossNPCMaxHPDamage = 0.06;
	overridePlayerDamageFixedPercentage = 0.5;
	range = 8.0f;
}

ExplosionMedium : ExplosiveDeviceAttackBase
{
	float trashNPCMaxHPDamage = 1.5;
	float weakNPCMaxHPDamage = 1.3;
	float normalNPCMaxHPDamage = 1;
	float rareNPCMaxHPDamage = 0.75;
	float eliteNPCMaxHPDamage = 0.5;
	float bossNPCMaxHPDamage = 0.04;
	overridePlayerDamageFixedPercentage = 0.35;
	range = 6.0f;
}

ExplosionSmall : ExplosiveDeviceAttackBase
{
	float trashNPCMaxHPDamage = 1.3;
	float weakNPCMaxHPDamage = 1.2;
	float normalNPCMaxHPDamage = 1.1;
	float rareNPCMaxHPDamage = 0.6;
	float eliteNPCMaxHPDamage = 0.25;
	float bossNPCMaxHPDamage = 0.02;
	overridePlayerDamageFixedPercentage = 0.15;
	range = 4.0f;
}

ExplosionSmall_Thermal : ExplosiveDeviceAttackBase
{
	fk< StatModifier >[] statModifiers = 
	[
		{
			statType = "BaseStats.PhysicalDamage";
		} : TargetMaxHealth, 
		{
			statType = "BaseStats.PhysicalDamage";
			modifierType = "Multiplier";
			value = 0.25f;
		} : ConstantStatModifier
	];
	fk< StatusEffectAttackData >[] statusEffects = 
	[
		{
			statusEffect = "BaseStatusEffect.Burning";
			resistPool = "BaseStatPools.BurningTrigger";
			applyImmediately = true;
		}
	];
	overridePlayerDamageFixedPercentage = 0.25;
	range = 3.0f;
}

ExplosionLargeKill : DeviceAttack
{
	fk< StatModifier >[] statModifiers = 
	[
		{
			statType = "BaseStats.PhysicalDamage";
		} : TargetMaxHealth, 
		{
			statType = "BaseStats.PhysicalDamage";
			modifierType = "Multiplier";
			value = 2f;
		} : ConstantStatModifier
	];
	range = 7.0f;
}

ExplosionSmallKill : DeviceAttack
{
	fk< StatModifier >[] statModifiers = 
	[
		{
			statType = "BaseStats.PhysicalDamage";
		} : TargetMaxHealth, 
		{
			statType = "BaseStats.PhysicalDamage";
			modifierType = "Multiplier";
			value = 2f;
		} : ConstantStatModifier
	];
	range = 3.0f;
}

ExplosionMediumKill : DeviceAttack
{
	fk< StatModifier >[] statModifiers = 
	[
		{
			statType = "BaseStats.PhysicalDamage";
		} : TargetMaxHealth, 
		{
			statType = "BaseStats.PhysicalDamage";
			modifierType = "Multiplier";
			value = 2f;
		} : ConstantStatModifier
	];
	range = 4.0f;
}

CarExplosionKill : DeviceAttack
{
	fk< StatModifier >[] statModifiers = 
	[
		{
			statType = "BaseStats.PhysicalDamage";
		} : TargetMaxHealth, 
		{
			statType = "BaseStats.PhysicalDamage";
			modifierType = "Multiplier";
			value = 2f;
		} : ConstantStatModifier
	];
	range = 3.7f;
}

ToxicGas : DeviceAttack
{
	attackType = "AttackType.Effect";
	effectTag = "explosion";
	fk< StatusEffectAttackData >[] statusEffects = 
	[
		{
			statusEffect = "BaseStatusEffect.Poisoned";
			resistPool = "BaseStatPools.PoisonTrigger";
			applyImmediately = true;
		}
	];
}

FanBlades : DeviceAttack
{
	fk< StatModifier >[] statModifiers = 
	[
		{
			statType = "BaseStats.PhysicalDamage";
			modifierType = "Additive";
			value = 2000;
		} : ConstantStatModifier
	];
	range = 2.0f;
}

FireExtinguisherBlind : ExplosiveDeviceAttackBase
{
	effectName = "explosions";
	effectTag = "aoe_no_visual_effect";
	attackType = "AttackType.PressureWave";
	fk< StatusEffectAttackData >[] statusEffects = 
	[
		{
			statusEffect = "BaseStatusEffect.Blind";
			applyImmediately = true;
		}
	];
	fk< StatModifier >[] statModifiers = 
	[
		{
			statType = "BaseStats.PhysicalDamage";
		} : TargetMaxHealth, 
		{
			statType = "BaseStats.PhysicalDamage";
			modifierType = "Multiplier";
			value = 0.1f;
		} : ConstantStatModifier
	];
	overridePlayerDamageFixedPercentage = 0.05;
	range = 5.0f;
}

BlindExplosion : DeviceAttack
{
	effectName = "explosions";
	effectTag = "flashbang_explosion";
	fk< StatusEffectAttackData >[] statusEffects = 
	[
		{
			statusEffect = "BaseStatusEffect.Blind";
			applyImmediately = true;
		}
	];
	attackType = "AttackType.Ranged";
	range = 10.0f;
}

LadderDrop : DeviceAttack
{
	fk< StatusEffectAttackData >[] statusEffects = 
	[
		{
			statusEffect = "BaseStatusEffect.Knockdown";
			applyImmediately = true;
		}
	];
	fk< StatModifier >[] statModifiers = 
	[
		{
			statType = "BaseStats.PhysicalDamage";
			modifierType = "Additive";
			refStat = "BaseStats.Health";
			refObject = "Target";
			opSymbol = "*";
			value = 1.1f;
		} : CombinedStatModifier
	];
	playerIncomingDamageMultiplier = 0.15;
	range = 1.0f;
}

Electric : DeviceAttack
{
	fk< StatModifier >[] statModifiers = 
	[
		{
			statType = "BaseStats.ElectricDamage";
		} : TargetMaxHealth, 
		{
			statType = "BaseStats.ElectricDamage";
			modifierType = "Multiplier";
			value = 0.5f;
		} : ConstantStatModifier
	];
	range = 7.0f;
}

AOE_Neutral : DeviceAreaAttack
{
}

AOE_Bleeding : DeviceAreaAttack
{
	fk< StatusEffectAttackData >[] statusEffects = 
	[
		{
			statusEffect = "BaseStatusEffect.Bleeding";
			applyImmediately = true;
		}
	];
	hitFlags = 
	[
		"CanDamageSelf"
	];
}

AOE_Blind : DeviceAreaAttack
{
	fk< StatusEffectAttackData >[] statusEffects = 
	[
		{
			statusEffect = "BaseStatusEffect.Blind";
			applyImmediately = true;
		}
	];
}

AOE_Burning : DeviceAreaAttack
{
	fk< StatusEffectAttackData >[] statusEffects = 
	[
		{
			statusEffect = "BaseStatusEffect.Burning";
			applyImmediately = true;
		}
	];
	hitFlags = 
	[
		"CanDamageSelf"
	];
}

AOE_KnockUnconscious : DeviceAreaAttack
{
	effectName = "environmental_aoe";
	effectTag = "infinite";
	fk< StatusEffectAttackData >[] statusEffects = 
	[
		{
			statusEffect = "BaseStatusEffect.Unconscious";
			applyImmediately = true;
		}
	];
	hitFlags = 
	[
		"CanDamageSelf"
	];
}

AOE_SmokeScreen : DeviceAreaAttack
{
	effectName = "environmental_aoe";
	effectTag = "infinite";
	fk< StatusEffectAttackData >[] statusEffects = 
	[
		{
			statusEffect = "BaseStatusEffect.Blind";
			applyImmediately = true;
		}
	];
}

AOE_Stun : DeviceAreaAttack
{
	effectName = "environmental_aoe";
	effectTag = "infinite";
	fk< StatusEffectAttackData >[] statusEffects = 
	[
		{
			statusEffect = "BaseStatusEffect.Stun";
			applyImmediately = true;
		}
	];
}

AOE_ImpairedHearing : DeviceAreaAttack
{
	effectName = "environmental_aoe";
	effectTag = "infinite";
	fk< StatusEffectAttackData >[] statusEffects = 
	[
		{
			statusEffect = "BaseStatusEffect.HearingImpaired";
			applyImmediately = true;
		}
	];
}

AOE_GreaterImpairedHearing : DeviceAreaAttack
{
	effectName = "environmental_aoe";
	effectTag = "infinite";
	fk< StatusEffectAttackData >[] statusEffects = 
	[
		{
			statusEffect = "BaseStatusEffect.SeverelyHearingImpaired";
			applyImmediately = true;
		}
	];
}

AOE_ReducedVisibility : DeviceAreaAttack
{
	effectName = "environmental_aoe";
	effectTag = "infinite";
	fk< StatusEffectAttackData >[] statusEffects = 
	[
		{
			statusEffect = "BaseStatusEffect.ReducedVisibility";
			applyImmediately = true;
		}
	];
}

AOE_GreaterReducedVisibility : DeviceAreaAttack
{
	effectName = "environmental_aoe";
	effectTag = "infinite";
	fk< StatusEffectAttackData >[] statusEffects = 
	[
		{
			statusEffect = "BaseStatusEffect.GreaterReducedVisibility";
			applyImmediately = true;
		}
	];
}

Trap_Attack_Base : DeviceAttack
{
	effectName = "activated_trap";
	effectTag = "trapAttack";
}

Trap_Car_Lift : Trap_Attack_Base
{
	fk< StatModifier >[] statModifiers = 
	[
		{
			statType = "BaseStats.PhysicalDamage";
			modifierType = "Additive";
			value = 1;
		} : ConstantStatModifier
	];
	fk< StatusEffectAttackData >[] statusEffects = 
	[
		{
			statusEffect = "BaseStatusEffect.DeviceTrapHit";
			applyImmediately = true;
		}
	];
	hitFlags = 
	[
		"Nonlethal"
	];
}

Trap_Crate_Falling : Trap_Attack_Base
{
	fk< StatusEffectAttackData >[] statusEffects = 
	[
		{
			statusEffect = "BaseStatusEffect.Burning";
			applyImmediately = true;
		}
	];
	fk< StatModifier >[] statModifiers = 
	[
		{
			statType = "BaseStats.PhysicalDamage";
		} : TargetBaseHealth, 
		{
			statType = "BaseStats.PhysicalDamage";
			modifierType = "Multiplier";
			value = 0.6f;
		} : ConstantStatModifier
	];
}

Trap_Crates_Wall : Trap_Attack_Base
{
	effectTag = "physicalCollisionTrapAttack";
	fk< StatModifier >[] statModifiers = 
	[
		{
			statType = "BaseStats.PhysicalDamage";
			modifierType = "Additive";
			value = 1;
		} : ConstantStatModifier
	];
	fk< StatusEffectAttackData >[] statusEffects = 
	[
		{
			statusEffect = "BaseStatusEffect.DeviceTrapHit";
			applyImmediately = true;
		}
	];
	hitFlags = 
	[
		"Nonlethal"
	];
}

Trap_Catwalk_Segment : Trap_Attack_Base
{
	effectTag = "physicalCollisionTrapAttack";
	fk< StatModifier >[] statModifiers = 
	[
		{
			statType = "BaseStats.PhysicalDamage";
			modifierType = "Additive";
			value = 1;
		} : ConstantStatModifier
	];
	fk< StatusEffectAttackData >[] statusEffects = 
	[
		{
			statusEffect = "BaseStatusEffect.DeviceTrapHit";
			applyImmediately = true;
		}
	];
	hitFlags = 
	[
		"Nonlethal"
	];
}

Trap_Industrial_Arm_Poke : Trap_Attack_Base
{
	fk< StatusEffectAttackData >[] statusEffects = 
	[
		{
			statusEffect = "BaseStatusEffect.Knockdown";
			applyImmediately = true;
		}
	];
	fk< StatModifier >[] statModifiers = 
	[
		{
			statType = "BaseStats.PhysicalDamage";
			modifierType = "Additive";
			value = 20;
		} : ConstantStatModifier
	];
}

BarbedWire : Trap_Attack_Base
{
	fk< StatusEffectAttackData >[] statusEffects = 
	[
		{
			statusEffect = "BaseStatusEffect.BarbedWireKnockdown";
			applyImmediately = true;
		}
	];
	hitFlags = 
	[
		"FriendlyFire", "CanDamageSelf", "IgnoreVehicles"
	];
	statModifiers = 
	[
		{
			statType = "BaseStats.PhysicalDamage";
			modifierType = "Additive";
			value = 5;
		} : ConstantStatModifier
	];
}

BarbedWireNoEntity : Trap_Attack_Base
{
	effectTag = "barbedWireAttack";
	fk< StatusEffectAttackData >[] statusEffects = 
	[
		{
			statusEffect = "BaseStatusEffect.BarbedWireKnockdown";
			applyImmediately = true;
		}
	];
	hitFlags = 
	[
		"FriendlyFire", "CanDamageSelf", "IgnoreVehicles"
	];
	statModifiers = 
	[
		{
			statType = "BaseStats.PhysicalDamage";
			modifierType = "Additive";
			value = 5;
		} : ConstantStatModifier
	];
}

PhysicalPercentageDeviceAttack : Trap_Attack_Base
{
	effectName = "activated_trap";
	effectTag = "directTrapHit";
	damageType = "DamageTypes.Physical";
	fk< StatModifier >[] statModifiers = 
	[
		{
			statType = "BaseStats.PhysicalDamage";
		} : TargetMaxHealth, 
		{
			statType = "BaseStats.PhysicalDamage";
			modifierType = "Multiplier";
			value = 0.3f;
		} : ConstantStatModifier
	];
}

CarMediumKill : CarExplosionKill
{
	effectTag = "default_explosion_car";
	fk< StatModifier >[] statModifiers = 
	[
		{
			statType = "BaseStats.PhysicalDamage";
			refObject = "Target";
		} : TargetMaxHealth, 
		{
			statType = "BaseStats.PhysicalDamage";
			modifierType = "Multiplier";
			value = 1f;
		} : ConstantStatModifier
	];
}

Trap_Magnet_Attack : Trap_Attack_Base
{
	effectTag = "magnetAttack";
	fk< StatModifier >[] statModifiers = 
	[
		{
			statType = "BaseStats.ElectricDamage";
			modifierType = "Additive";
			value = 1;
		} : ConstantStatModifier
	];
	fk< StatusEffectAttackData >[] statusEffects = 
	[
		{
			statusEffect = "BaseStatusEffect.MagnetDeviceHit";
			applyImmediately = true;
		}
	];
	hitFlags = 
	[
		"Nonlethal", "MagnetForce"
	];
}

