package Effectors
using RTDB, Prereqs, Perks, BaseStats, BaseStatusEffect

EvaluateEncumbranceEffector : Effector
{
	prereqRecord = 
	{
		statType = "CarryCapacity";
		valueToCheck = 0;
		notifyOnAnyChange = true;
	} : StatPrereq;
	effectorClassName = "EncumbranceEvaluationEffector";
}

VehicleCombatRangeBoost : ApplyStatGroupOnWeapon
{
	prereqRecord = 
	{
		CName prereqClassName = "gameMultiPrereq";
		CName aggregationType = "AND";
		fk< IPrereq >[] nestedPrereqs = 
		[
			"Prereqs.IsInVehiclePrereq", "Prereqs.RangedWeaponHeldPrereq"
		];
	} : MultiPrereq;
	fk< StatModifierGroup > statGroup = 
	{
		statModifiers = 
		[
			{
				statType = "BaseStats.EffectiveRange";
				modifierType = "Additive";
				value = 100.f;
			} : ConstantStatModifier
		];
	} : StatModifierGroup;
}

TogglePlayerFlashlight : Effector
{
	prereqRecord = 
	{
		stateName = "Default";
		isInState = false;
	} : HighLevelPSMPrereq;
	effectorClassName = "TogglePlayerFlashlight";
}

ColdBlood_Area_01_Perk_1_Effector : ApplyStatusEffectEffector
{
	prereqRecord = "Prereqs.AnyNonCivilianTakedownOrKill";
	statusEffect = "BaseStatusEffect.ColdBlood";
	removeWithEffector = false;
}

OnEnemyKilledStatpoolModifierEffector : ApplyEffectorOnPlayer
{
	effectorToApply = 
	{
		prereqRecord = 
		{
			nestedPrereqs = 
			[
				{
					conditions += 
					[
						{
							statusEffect = "Defeated";
							checkType = "CheckType.Type";
							invert = true;
						} : StatusEffectPresentHitPrereqCondition
					];
				} : Perks.IsTargetKilled, 
				{
					conditions += 
					[
						{
							hitFlag = "FinisherTriggered";
						} : HitFlagHitPrereqCondition
					];
				} : PostProcessHitTriggered, 
				"Prereqs.AnyTakedown"
			];
		} : ORPrereq;
		statPoolUpdates = 
		[
			{
				statPoolType = "BaseStatPools.Health";
				statModifiers = 
				[
					{
						statType = "BaseStats.HealthRegainOnKill";
						refStat = "BaseStats.HealthRegainOnKill";
						modifierType = "Additive";
						opSymbol = "*";
						value = 1.0f;
					} : CombinedStatModifier
				];
			} : StatPoolUpdate
		];
		bool usePercent = true;
	} : ModifyStatPoolValueEffector;
}

CritChanceVsElectrocutedEnemiesEffector : ModifyAttackCritChanceEffector
{
	prereqRecord = 
	{
		nestedPrereqs = 
		[
			{
				conditions += 
				[
					{
						invert = true;
					} : SelfHitPrereqCondition, 
					{
						statusEffect = "Electrocuted";
						checkType = "CheckType.Type";
					} : StatusEffectPresentHitPrereqCondition
				];
			} : ProcessHitTriggered, 
			{
				conditions += 
				[
					{
						invert = true;
					} : SelfHitPrereqCondition, 
					{
						statusEffect = "EMP";
						checkType = "CheckType.Type";
					} : StatusEffectPresentHitPrereqCondition
				];
			} : ProcessHitTriggered
		];
	} : ORPrereq;
	critChance = 
	[
		{
			statType = "BaseStats.CritChance";
			modifierType = "Additive";
			refObject = "Player";
			refStat = "BaseStats.BonusCritChanceVsElectrocutedEnemies";
			opSymbol = "*";
			value = 0.01f;
		} : CombinedStatModifier
	];
}

RamOnKillEffector : ModifyStatPoolValueEffector
{
	prereqRecord = "Prereqs.AnyTakedownOrKill";
	statPoolUpdates = 
	[
		{
			statPoolType = "BaseStatPools.Memory";
			statModifiers = 
			[
				{
					statType = "BaseStats.Memory";
					modifierType = "Additive";
					refObject = "Self";
					refStat = "BaseStats.RamOnKill";
					opSymbol = "*";
					value = 1f;
				} : CombinedStatModifier
			];
		}
	];
}

HealOnKillingBleedingTargetEffector : ModifyStatPoolValueEffector
{
	prereqRecord = "Prereqs.AnyTakedownOrKillOnBleedingTarget";
	statPoolUpdates = 
	[
		{
			statPoolType = "BaseStatPools.Health";
			statModifiers = 
			[
				{
					statType = "BaseStats.Health";
					modifierType = "Additive";
					refObject = "Self";
					refStat = "BaseStats.HealOnKillingBleedingTarget";
					opSymbol = "*";
					value = 1f;
				} : CombinedStatModifier
			];
		}
	];
}

ADSSpeedPercentBonusEffector : ApplyStatGroupOnWeapon
{
	prereqRecord = "Prereqs.RangedWeaponHeldPrereq";
	statGroup = 
	{
		statModifiers = 
		[
			{
				statType = "BaseStats.AimInTime";
				modifierType = "AdditiveMultiplier";
				refObject = "Player";
				refStat = "BaseStats.ADSSpeedPercentBonus";
				opSymbol = "*";
				value = -1f;
			} : CombinedStatModifier
		];
	};
}

RecoilPercentBonusEffector : ApplyStatGroupOnWeapon
{
	prereqRecord = "Prereqs.RangedWeaponHeldPrereq";
	statGroup = 
	{
		statModifiers = 
		[
			{
				statType = "BaseStats.RecoilKickMax";
				modifierType = "AdditiveMultiplier";
				refObject = "Player";
				refStat = "BaseStats.RecoilPercentBonus";
				opSymbol = "*";
				value = -1f;
			} : CombinedStatModifier, 
			{
				statType = "BaseStats.RecoilKickMin";
				modifierType = "AdditiveMultiplier";
				refObject = "Player";
				refStat = "BaseStats.RecoilPercentBonus";
				opSymbol = "*";
				value = -1f;
			} : CombinedStatModifier
		];
	};
}

ReloadSpeedPercentBonusEffector : ApplyStatGroupOnWeapon
{
	prereqRecord = "Prereqs.RangedWeaponHeldPrereq";
	statGroup = 
	{
		statModifiers = 
		[
			{
				statType = "BaseStats.ReloadTime";
				modifierType = "AdditiveMultiplier";
				refObject = "Player";
				refStat = "BaseStats.ReloadSpeedPercentBonus";
				opSymbol = "*";
				value = -1f;
			} : CombinedStatModifier, 
			{
				statType = "BaseStats.EmptyReloadTime";
				modifierType = "AdditiveMultiplier";
				refObject = "Player";
				refStat = "BaseStats.ReloadSpeedPercentBonus";
				opSymbol = "*";
				value = -1f;
			} : CombinedStatModifier
		];
	};
}

RemoveReduceNextUltimateHackCostReductionSE : RemoveStatusEffectsEffector
{
	statusEffects = 
	[
		"BaseStatusEffect.ReduceUltimateHackCost"
	];
}

JugglerPerkRemoveKnifeCooldowns : ApplyStatusEffectEffector
{
	statusEffect = "BaseStatusEffect.JugglerPerkRemoveKnifeCooldownsSE";
	applicationTarget = "Player";
}

Android_ExplodeOnElectricDeathEffector : TriggerAttackOnOwnerEffect
{
	prereqRecord = 
	{
		stateName = "Dead";
	} : Prereqs.HighLevelNPCStatePrereq;
	attackRecord = "Attacks.AndroidDeathExplosion";
}

Android_ExplodeOnElectricDeathEffectorVFX : Effector
{
	prereqRecord = 
	{
		stateName = "Dead";
	} : Prereqs.HighLevelNPCStatePrereq;
	CName effectorClassName = "PlayVFXEffector";
	CName vfxName = "empExplosionDestruction";
}

ApplyDoTOnCyberwareMalfunctionEffector : ApplyStatusEffectEffector
{
	prereqRecord = 
	{
		statType = "CyberwareMalfunctionStacks";
		valueToCheck = 3;
		comparisonType = "GreaterOrEqual";
	} : StatPrereq;
	statusEffect = "BaseStatusEffect.CyberwareMalfunctionDamageOverTime";
	applicationTarget = "Owner";
	instigator = "Player";
}

ApplyDisableCWOnCyberwareMalfunctionEffector : ApplyStatusEffectEffector
{
	prereqRecord = 
	{
		statType = "CyberwareMalfunctionStacks";
		valueToCheck = 2;
		comparisonType = "Equal";
	} : StatPrereq;
	statusEffect = "BaseStatusEffect.DisableCyberwareAndCyberwareStatusEffects";
	applicationTarget = "Owner";
	instigator = "Player";
	removeWithEffector = false;
}

NotifyPoliceEffector : Effector
{
	CName effectorClassName = "NotifyPoliceEffector";
}

RewardPlayerWithCrimeScoreEffector : Effector
{
	CName effectorClassName = "RewardPlayerWithCrimeScoreEffector";
}

NPCMeleeWeaponHitEffector : ApplyStatusEffectEffector
{
	prereqRecord = 
	{
		conditions = 
		[
			{
				instigatorType = "Player";
				invert = true;
			} : Prereqs.InstigatorTypeHitPrereqCondition
		];
	} : Prereqs.PreProcessHitTriggered;
	statusEffect = "BaseStatusEffect.NPCBaseMeleeDebuff";
	applicationTarget = "Target";
}

BladeWeaponHitEffector : ApplyStatusEffectEffector
{
	prereqRecord = "Prereqs.ProcessHitTriggered";
	statusEffect = "BaseStatusEffect.MinorBleeding";
	applicationTarget = "Target";
}

LootHighlightEffector : Effector
{
	effectorClassName = "ToggleMaterialOverlayEffector";
	string effectPath = "loot_highlight";
	CName effectTag = "dead_body_highlight";
}

ChaosWeaponCustomEffectorBase : ApplyStatGroupEffector
{
	effectorClassName = "ChaosWeaponCustomEffector";
	prereqRecord = "Perks.PlayerNotReloading";
	applicationTarget = "Weapon";
}

ChaosWeaponCritChanceCustomEffector : ChaosWeaponCustomEffectorBase
{
	statGroup = 
	{
		statModifiers = 
		[
			{
				statType = "BaseStats.SpecialDamage";
				modifierType = "Additive";
				min = -1;
				max = 1;
			} : RandomStatModifier, 
			{
				statType = "BaseStats.CritChance";
				modifierType = "Additive";
				value = 1f;
			} : ConstantStatModifier, 
			{
				statType = "BaseStats.CritChance";
				modifierType = "Additive";
				refStat = "BaseStats.SpecialDamage";
				refObject = "Self";
				opSymbol = "*";
				value = 49.f;
			} : CombinedStatModifier
		];
	};
}

ChaosWeaponElementalDamageCustomEffector : ChaosWeaponCustomEffectorBase
{
	effectorClassName = "ChaosWeaponDamageTypeEffector";
}

ChaosWeaponDebuffApplicationCustomEffector : ChaosWeaponCustomEffectorBase
{
	statGroup = 
	{
		statModifiers = 
		[
			{
				statType = "BaseStats.BleedingApplicationRate";
				modifierType = "Additive";
				refStat = "BaseStats.PhysicalDamage";
				refObject = "Self";
				opSymbol = "*";
				value = 1f;
			} : CombinedStatModifier, 
			{
				statType = "BaseStats.BleedingApplicationRate";
				modifierType = "Multiplier";
				refStat = "BaseStats.DealsPhysicalDamage";
				opSymbol = "*";
				value = 1f;
			} : CombinedStatModifier, 
			{
				statType = "BaseStats.BleedingApplicationRate";
				modifierType = "Multiplier";
				min = 0.1f;
				max = 2.0f;
			} : RandomStatModifier, 
			{
				statType = "BaseStats.BurningApplicationRate";
				modifierType = "Additive";
				refStat = "BaseStats.ThermalDamage";
				refObject = "Self";
				opSymbol = "*";
				value = 1f;
			} : CombinedStatModifier, 
			{
				statType = "BaseStats.BurningApplicationRate";
				modifierType = "Multiplier";
				min = 0.1f;
				max = 2.0f;
			} : RandomStatModifier, 
			{
				statType = "BaseStats.BurningApplicationRate";
				modifierType = "Multiplier";
				refStat = "BaseStats.DealsThermalDamage";
				opSymbol = "*";
				value = 1f;
			} : CombinedStatModifier, 
			{
				statType = "BaseStats.PoisonedApplicationRate";
				modifierType = "Additive";
				refStat = "BaseStats.ChemicalDamage";
				refObject = "Self";
				opSymbol = "*";
				value = 1f;
			} : CombinedStatModifier, 
			{
				statType = "BaseStats.PoisonedApplicationRate";
				modifierType = "Multiplier";
				min = 0.1f;
				max = 2.0f;
			} : RandomStatModifier, 
			{
				statType = "BaseStats.PoisonedApplicationRate";
				modifierType = "Multiplier";
				refStat = "BaseStats.DealsChemicalDamage";
				opSymbol = "*";
				value = 1f;
			} : CombinedStatModifier, 
			{
				statType = "BaseStats.ElectrocutedApplicationRate";
				modifierType = "Additive";
				refStat = "BaseStats.ElectricDamage";
				refObject = "Self";
				opSymbol = "*";
				value = 1f;
			} : CombinedStatModifier, 
			{
				statType = "BaseStats.ElectrocutedApplicationRate";
				modifierType = "Multiplier";
				min = 0.1f;
				max = 2.0f;
			} : RandomStatModifier, 
			{
				statType = "BaseStats.ElectrocutedApplicationRate";
				modifierType = "Multiplier";
				refStat = "BaseStats.DealsElectricDamage";
				opSymbol = "*";
				value = 1f;
			} : CombinedStatModifier, 
			{
				statType = "BaseStats.DealsPhysicalDamage";
				modifierType = "Additive";
				refStat = "BaseStats.PhysicalDamage";
				opSymbol = "*";
				value = 1f;
			} : CombinedStatModifier, 
			{
				statType = "BaseStats.DealsThermalDamage";
				modifierType = "Additive";
				refStat = "BaseStats.ThermalDamage";
				opSymbol = "*";
				value = 1f;
			} : CombinedStatModifier, 
			{
				statType = "BaseStats.DealsChemicalDamage";
				modifierType = "Additive";
				refStat = "BaseStats.ChemicalDamage";
				opSymbol = "*";
				value = 1f;
			} : CombinedStatModifier, 
			{
				statType = "BaseStats.DealsElectricDamage";
				modifierType = "Additive";
				refStat = "BaseStats.ElectricDamage";
				opSymbol = "*";
				value = 1f;
			} : CombinedStatModifier
		];
	};
}

Phase1 : Effector
{
	fk< IPrereq > prereqRecord = 
	{
		prereqClassName = "GameTimePrereq";
		float delay = 120.0f;
	} : IPrereq;
	CName effectorClassName = "StopAndPlayVFXEffector";
	CName vfxToStop = "hacking_glitch_low";
	CName vfxToStart = "hacking_glitch_medium";
}

Phase2 : Effector
{
	fk< IPrereq > prereqRecord = 
	{
		prereqClassName = "GameTimePrereq";
		float delay = 240.0f;
	} : IPrereq;
	CName effectorClassName = "StopAndPlayVFXEffector";
	CName vfxToStop = "hacking_glitch_medium";
	CName vfxToStart = "hacking_glitch_heavy";
}

Phase3_VFX : Effector
{
	fk< IPrereq > prereqRecord = 
	{
		prereqClassName = "GameTimePrereq";
		float delay = 360.0f;
	} : IPrereq;
	CName effectorClassName = "StopVFXEffector";
	CName vfxToStop = "hacking_glitch_heavy";
}

GrabAttackEffector01 : ContinuousAttackEffector
{
	fk< IPrereq > prereqRecord = 
	{
		duration = 2.3f;
	} : Prereqs.DurationPrereq;
	CName effectorClassName = "TriggerContinuousAttackEffector";
	attackRecord = "Effectors.GrabAttack01";
	delayTime = 99999999999.f;
	timeDilationDriver = "Effectors.TDD_Source";
}

GrabAttackEffector02 : ContinuousAttackEffector
{
	fk< IPrereq > prereqRecord = 
	{
		duration = 2.9f;
	} : Prereqs.DurationPrereq;
	CName effectorClassName = "TriggerContinuousAttackEffector";
	attackRecord = "Effectors.GrabAttack02";
	delayTime = 99999999999.f;
	timeDilationDriver = "Effectors.TDD_Source";
}

GrabAttackEffector03 : ContinuousAttackEffector
{
	fk< IPrereq > prereqRecord = 
	{
		duration = 8.7f;
	} : Prereqs.DurationPrereq;
	CName effectorClassName = "TriggerContinuousAttackEffector";
	attackRecord = "Effectors.GrabAttack03";
	delayTime = 99999999999.f;
	timeDilationDriver = "Effectors.TDD_Source";
}

GrabAttack : Attack_GameEffect
{
	attackType = "AttackType.Explosion";
	effectName = "sasquatch_explosions";
	effectTag = "invisible_explosion";
	range = 4.0f;
}

GrabAttack01 : GrabAttack
{
	range = 0.25f;
	hitFlags = 
	[
		"FriendlyFire"
	];
	fk< StatModifier >[] statModifiers = 
	[
		"Effectors.SasquatchGrabDamage01"
	];
}

SasquatchGrabDamage01 : CombinedStatModifier
{
	statType = "BaseStats.PhysicalDamage";
	modifierType = "Additive";
	refStat = "BaseStats.DPS";
	refObject = "Root";
	opSymbol = "*";
	value = 0.05f;
}

GrabAttack02 : GrabAttack
{
	range = 0.25f;
	hitFlags = 
	[
		"FriendlyFire"
	];
	fk< StatModifier >[] statModifiers = 
	[
		"Effectors.SasquatchGrabDamage02"
	];
}

SasquatchGrabDamage02 : CombinedStatModifier
{
	statType = "BaseStats.PhysicalDamage";
	modifierType = "Additive";
	refStat = "BaseStats.DPS";
	refObject = "Root";
	opSymbol = "*";
	value = 0.05f;
}

GrabAttack03 : GrabAttack
{
	range = 0.25f;
	hitFlags = 
	[
		"FriendlyFire"
	];
	fk< StatModifier >[] statModifiers = 
	[
		"Effectors.SasquatchGrabDamage03"
	];
}

SasquatchGrabDamage03 : CombinedStatModifier
{
	statType = "BaseStats.PhysicalDamage";
	modifierType = "Additive";
	refStat = "BaseStats.DPS";
	refObject = "Root";
	opSymbol = "*";
	value = 0.05f;
}

ChimeraSelfDestructPhase1 : Effector
{
	fk< IPrereq > prereqRecord = 
	{
		prereqClassName = "GameTimePrereq";
		float delay = 0.0f;
	} : IPrereq;
	CName effectorClassName = "StopAndPlayVFXEffector";
	CName vfxToStart = "self_destruction_stage_1";
}

ChimeraSelfDestructPhase2 : Effector
{
	fk< IPrereq > prereqRecord = 
	{
		prereqClassName = "GameTimePrereq";
		float delay = 15.0f;
	} : IPrereq;
	CName effectorClassName = "StopAndPlayVFXEffector";
	CName vfxToStop = "self_destruction_stage_1";
	CName vfxToStart = "self_destruction_stage_2";
}

ChimeraSelfDestructPhase3 : Effector
{
	fk< IPrereq > prereqRecord = 
	{
		prereqClassName = "GameTimePrereq";
		float delay = 30.0f;
	} : IPrereq;
	CName effectorClassName = "StopAndPlayVFXEffector";
	CName vfxToStop = "self_destruction_stage_2";
	CName vfxToStart = "self_destruction_stage_3";
}

TEST : ApplyStatGroupEffector
{
	prereqRecord = "Prereqs.UsingCoverPSMPrereq";
	CName effectorClassName = "ApplyStatGroupEffector";
	fk< StatModifierGroup > statGroup = 
	{
		statModifiers = 
		[
			{
				statType = "BaseStats.Health";
				modifierType = "Additive";
				value = 1000f;
			} : ConstantStatModifier
		];
	} : StatModifierGroup;
	applicationTarget = "";
}

TEST2 : Effector
{
	prereqRecord = "Prereqs.HitAttackTypePrereq";
	CName effectorClassName = "ModifyDamageEffector";
	string operationType = "Multiply";
	float value = 5f;
}

TEST3 : ApplyEffectorEffector
{
	prereqRecord = "Prereqs.KatanaHeldPrereq";
	effectorClassName = "ApplyEffectorEffector";
	fk< Effector > effectorToApply = 
	{
		prereqRecord = 
		{
			prereqClassName = "HitFlagPrereq";
			string hitFlag = "WasDeflected";
			bool isSynchronous = true;
			string callbackType = "HitTriggered";
			string pipelineStage = "PostProcess";
		} : IPrereq;
		CName effectorClassName = "ApplyStatusEffectEffector";
		fk< StatusEffect > statusEffect = "BaseStatusEffect.Kenjutsu_Area_05_Perk_1_Buff_Level_1";
		applicationTarget = "";
	} : ApplyStatusEffectEffector;
	applicationTarget = "";
}

TEST4 : ApplyStatGroupEffector
{
	prereqRecord = 
	{
		bool isInState = true;
		string stateName = "Block";
	} : MeleeWeaponPSMPrereq;
	CName effectorClassName = "ApplyStatGroupEffector";
	fk< StatModifierGroup > statGroup = 
	{
		statModifiers = 
		[
			{
				statType = "BaseStats.Health";
				modifierType = "Additive";
				value = 1000f;
			} : ConstantStatModifier
		];
	} : StatModifierGroup;
	applicationTarget = "";
}

TEST5 : Effector
{
	prereqRecord = "Prereqs.ProcessHitReceived";
	effectorClassName = "SetTimeDilationEffector";
	CName reason = "TEST5 Effector";
	float dilation = 0.3f;
	float duration = 3f;
}

TEST6 : Effector
{
	fk< IPrereq > prereqRecord = "Prereqs.AlwaysTruePrereq";
	CName effectorClassName = "ApplyShaderOnEquipmentEffector";
	CName overrideMaterialName = "cloaking_effect";
	CName overrideMaterialTag = "cloak";
}

TESTW : ApplyStatusEffectByChanceEffector
{
	prereqRecord = 
	{
		stateName = "Jump";
	} : LocomotionPSMPrereq;
	fk< StatusEffect > statusEffect = "BaseStatusEffect.Burning";
	fk< StatModifier >[] effectorChance = 
	[
		{
			value = 0.6f;
		} : EffectorChanceModifier
	];
}

WeaponMalfunctionBlowUpWeapon : TriggerAttackOnOwnerEffect
{
	prereqRecord = "Prereqs.AlwaysTruePrereq";
	attackRecord = "Attacks.WeaponMalfunctionBlowWeaponHackAttack";
	playerAsInstigator = true;
	triggerHitReaction = true;
}

WeaponMalfunctionBlowUpWeaponManMassive : TriggerAttackOnOwnerEffect
{
	prereqRecord = "Prereqs.AlwaysTruePrereq";
	attackRecord = "Attacks.WeaponMalfunctionBlowWeaponHackAttackManMassive";
	playerAsInstigator = true;
	triggerHitReaction = true;
}

ForceSuicideMeleeWeapon : TriggerAttackOnOwnerEffect
{
	prereqRecord = "Prereqs.AlwaysTruePrereq";
	attackRecord = "Attacks.ForceSuicideMeleeAttack";
	playerAsInstigator = true;
	attackPositionSlotName = "Head";
}

ForceSuicideGunWeapon : TriggerAttackOnOwnerEffect
{
	prereqRecord = "Prereqs.AlwaysTruePrereq";
	attackRecord = "Attacks.ForceSuicideGunAttack";
	playerAsInstigator = true;
	attackPositionSlotName = "Head";
}

BossForceSuicideGunWeapon : TriggerAttackOnOwnerEffect
{
	prereqRecord = "Prereqs.AlwaysTruePrereq";
	attackRecord = "Attacks.BossForceSuicideGunAttack";
	playerAsInstigator = true;
	attackPositionSlotName = "Head";
}

BossBlackWallAttack : TriggerAttackOnOwnerEffect
{
	prereqRecord = "Prereqs.AlwaysTruePrereq";
	attackRecord = "Attacks.BossBlackwallAttack";
	playerAsInstigator = true;
	attackPositionSlotName = "Head";
}

CyberwareMalfunctionAttackEffector : TriggerAttackOnOwnerEffect
{
	prereqRecord = "Prereqs.AlwaysTruePrereq";
	attackRecord = "Attacks.CyberwareMalfunctionAttack";
	playerAsInstigator = true;
	triggerHitReaction = true;
}

DismemberEffector : TriggerAttackOnOwnerEffect
{
	effectorClassName = "DismemberEffector";
	prereqRecord = "Prereqs.AlwaysTruePrereq";
	CName bodyPart = "HEAD";
	CName woundType = "CLEAN";
	Vector3 hitPosition = ( 0.0f, 0.0f, 0.0f );
	bool isCritical = true;
}

DismemberHeadEffector : DismemberEffector
{
	CName bodyPart = "HEAD";
	CName woundType = "CLEAN";
	Vector3 hitPosition = ( 0.2f, 0.3f, 1.f );
	bool isCritical = true;
}

HealthtregenEffector : ApplyStatGroupOnPlayer
{
	prereqRecord = 
	{
		nestedPrereqs = 
		[
			{
				statusEffect = "HousingStatusEffect.Refreshed";
			} : RTDB.StatusEffectPrereq, 
			{
				statType = "HealthInCombatRegenEnabled";
				valueToCheck = 2;
				comparisonType = "Equal";
			} : StatPrereq
		];
	} : ANDPrereq;
	statGroup = 
	{
		statModifiers = 
		[
			{
				statType = "BaseStats.HealthInCombatRegenRateMult";
				modifierType = "Additive";
				value = 0.15f;
			} : ConstantStatModifier
		];
	};
}

IntrinsicModsEffector : ApplyStatGroupOnWeapon
{
	prereqRecord = "Prereqs.RangedWeaponHeldPrereq";
	statGroup = 
	{
		statModifiers = 
		[
			{
				statType = "BaseStats.ZoomLevel";
				modifierType = "Additive";
				refStat = "BaseStats.IntrinsicZoomLevelBonus";
				refObject = "Player";
				opSymbol = "*";
				value = 1f;
			} : CombinedStatModifier, 
			{
				statType = "BaseStats.ReloadTimeBonus";
				modifierType = "Additive";
				refStat = "BaseStats.IntrinsicReloadTimeBonus";
				refObject = "Player";
				opSymbol = "*";
				value = -0.01f;
			} : CombinedStatModifier
		];
	};
}

PoisonImmunityEffector : RemoveStatusEffectsEffector
{
	prereqRecord = 
	{
		statType = "PoisonImmunity";
		valueToCheck = 0;
		comparisonType = "Greater";
	} : StatPrereq;
	string[] effectTypes = 
	[
		"Poisoned"
	];
}

BleedingImmunityEffector : RemoveStatusEffectsEffector
{
	prereqRecord = 
	{
		statType = "BleedingImmunity";
		valueToCheck = 0;
		comparisonType = "Greater";
	} : StatPrereq;
	string[] effectTypes = 
	[
		"Bleeding"
	];
}

BurningImmunityEffector : RemoveStatusEffectsEffector
{
	prereqRecord = 
	{
		statType = "BurningImmunity";
		valueToCheck = 0;
		comparisonType = "Greater";
	} : StatPrereq;
	string[] effectTypes = 
	[
		"Burning"
	];
}

StunImmunityEffector : RemoveStatusEffectsEffector
{
	prereqRecord = 
	{
		statType = "StunImmunity";
		valueToCheck = 0;
		comparisonType = "Greater";
	} : StatPrereq;
	string[] effectTypes = 
	[
		"stunned"
	];
}

BlindImmunityEffector : RemoveStatusEffectsEffector
{
	prereqRecord = 
	{
		statType = "BlindImmunity";
		valueToCheck = 0;
		comparisonType = "Greater";
	} : StatPrereq;
	string[] effectTypes = 
	[
		"Blind"
	];
}

KnockdownImmunityEffector : RemoveStatusEffectsEffector
{
	prereqRecord = 
	{
		statType = "KnockdownImmunity";
		valueToCheck = 0;
		comparisonType = "Greater";
	} : StatPrereq;
	string[] effectTypes = 
	[
		"Knockdown"
	];
}

QuickHackImmunityEffector : RemoveStatusEffectsEffector
{
	prereqRecord = 
	{
		statType = "QuickHackImmunity";
		valueToCheck = 0;
		comparisonType = "Greater";
	} : StatPrereq;
	string[] effectTypes = 
	[
		"Quickhack"
	];
}

ElectrocuteImmunityEffector : RemoveStatusEffectsEffector
{
	prereqRecord = 
	{
		statType = "ElectrocuteImmunity";
		valueToCheck = 0;
		comparisonType = "Greater";
	} : StatPrereq;
	string[] effectTypes = 
	[
		"Electrocuted"
	];
}

EMPImmunityEffector : RemoveStatusEffectsEffector
{
	prereqRecord = 
	{
		statType = "EMPImmunity";
		valueToCheck = 0;
		comparisonType = "Greater";
	} : StatPrereq;
	string[] effectTypes = 
	[
		"EMP"
	];
}

UnconsciousImmunityEffector : RemoveStatusEffectsEffector
{
	prereqRecord = 
	{
		statType = "UnconsciousImmunity";
		valueToCheck = 0;
		comparisonType = "Greater";
	} : StatPrereq;
	string[] effectTypes = 
	[
		"Unconscious"
	];
}

SystemCollapseImmunityEffector : RemoveStatusEffectsEffector
{
	prereqRecord = 
	{
		statType = "SystemCollapseImmunity";
		valueToCheck = 0;
		comparisonType = "Greater";
	} : StatPrereq;
	string[] effectTypes = 
	[
		"SystemCollapse"
	];
}

UnderwaterExtinguish : ApplyStatGroupOnPlayer
{
	prereqRecord = 
	{
		stateName = "Diving";
		isInState = true;
	} : SwimmingPSMPrereq;
	statGroup = 
	{
		statModifiers = 
		[
			{
				statType = "BaseStats.BurningImmunity";
				modifierType = "Additive";
				value = 1f;
			} : ConstantStatModifier
		];
	};
}

ShotgunDamageController : MultiplyDamage
{
	prereqRecord = 
	{
		conditions += 
		[
			{
				weaponType = "Shotgun";
				onlyOncePerShot = true;
			} : WeaponTypeHitPrereqCondition, 
			{
				attackType = "Ranged";
			} : AttackTypeHitPrereqCondition
		];
	} : ProcessHitReceived;
	value = 3;
}

PlayerEnteredCombat : ApplyStatusEffectOnPlayer
{
	prereqRecord = 
	{
		stateName = "InCombat";
		isInState = true;
	} : CombatPSMPrereq;
	statusEffect = "BaseStatusEffect.PlayerJustEnteredCombat";
}

InVehicleDamageReductionEffector : MultiplyDamage
{
	prereqRecord = 
	{
		nestedPrereqs = 
		[
			"Perks.IsPlayerDrivingOrInTransition", "Prereqs.ProcessHitReceived"
		];
	} : MultiPrereq;
	statForValue = "BaseStats.InVehicleDamageTakenPercent";
}

TutorialCyberwarePriceSwitch : ApplyStatGroupOnPlayer
{
	prereqRecord = "Prereqs.AlwaysTruePrereq";
	statGroup = 
	{
		statModifiers = 
		[
			{
				statType = "BaseStats.PostTutorialCyberwarePrice";
				modifierType = "Additive";
				value = 1f;
			} : ConstantStatModifier
		];
	};
}

PostLexWilsonBuyPriceSwitch : ApplyStatGroupOnPlayer
{
	prereqRecord = "Prereqs.Lexington_Wilson_Acquired";
	statGroup = 
	{
		statModifiers = 
		[
			{
				statType = "BaseStats.PostLexWilsonBuyPrice";
				modifierType = "Additive";
				value = 1f;
			} : ConstantStatModifier
		];
	};
}

UsedHealingItemOrCyberwareEffector : ApplyStatusEffectEffector
{
	effectorClassName = "ApplyStatusEffectEffector";
	fk< StatusEffect > statusEffect = "BaseStatusEffect.UsedHealingItemOrCyberwareStatusEffect";
	removeWithEffector = false;
}

ConvertDamageToDoTEffector : Effector
{
	prereqRecord = "Prereqs.PostProcessHitReceived";
	effectorClassName = "ConvertDamageToDoTEffector";
	float damageConversion = 0;
	float dotDistributionTime = 5;
}

ApplyAccumulatedDoTEffector : ContinuousAttackEffector
{
	prereqRecord = 
	{
		prereqClassName = "ConstantStatPoolPrereq";
		statPoolType = "AccumulatedDoT";
		valueToCheck = 
		[
			{
				statType = "BaseStats.AccumulatedDoT";
				modifierType = "Additive";
				value = 0.0f;
			} : ConstantStatModifier
		];
		comparisonType = "Greater";
		comparePercentage = false;
	} : StatPoolPrereq;
	CName effectorClassName = "ApplyAccumulatedDoTEffector";
	delayTime = 1f;
	attackRecord = "Attacks.AccumulatedDoTTick";
}

HardToKillDamageModificationEffector : Effector
{
	float criticalHealthThreshold = 20.0;
	prereqRecord = "Prereqs.PostProcessHitReceived";
	effectorClassName = "HardToKillDamageModificationEffector";
}

UnstoppableEffector : ContinuousEffector
{
	delayTime = 0.4f;
	effectorClassName = "UnstoppableEffector";
}

JuggernautEffector : ContinuousEffector
{
	delayTime = 0.4f;
	effectorClassName = "JuggernautEffector";
}

StuckInEffector : ContinuousEffector
{
	delayTime = 0.5f;
	effectorClassName = "StuckInEffector";
	float maxEnemyDistance = 4.f;
	fk< StatusEffect > statusEffect = "";
}

ScaleOvershieldDecayOverTimeEffector : ContinuousEffector
{
	delayTime = 0.5f;
	effectorClassName = "ScaleOvershieldDecayOverTimeEffector";
	timeDilationDriver = "Effectors.TDD_Source";
	float b = 1.15f;
	float kInit = -20.0f;
	float k = 2.5f;
	float maxDecay = 200.0f;
}

StatusEffectBasedTimeBankEffector : Effector
{
	effectorClassName = "StatusEffectBasedTimeBankEffector";
}

StatPoolBasedTimeBankEffector : ContinuousEffector
{
	effectorClassName = "StatPoolBasedTimeBankEffector";
	fk< StatPool > statPoolType = "";
	delayTime = 1f;
}

SadismEffector : ModifyStatPoolValueEffector
{
	prereqRecord = "Perks.IsTargetKilled";
	float healingItemChargeRestorePercentage = 0.25f;
	effectorClassName = "SadismEffector";
}

ModifyStatusEffectDurationEffector : Effector
{
	effectorClassName = "ModifyStatusEffectDurationEffector";
	CName[] gameplayTags = [];
	float change = 0f;
	bool isPercentage = false;
	bool listenConstantly = false;
	bool canGoOverInitialDuration = true;
}

ModifyStatusEffectDurationOnAttackEffector : Effector
{
	effectorClassName = "ModifyStatusEffectDurationOnAttackEffector";
	CName[] gameplayTags = [];
	float change = 0f;
	bool isPercentage = false;
}

ModifyCyberwareCooldownDurationEffector : ModifyStatusEffectDurationEffector
{
	gameplayTags += 
	[
		"PlayerCyberwareCooldown"
	];
}

AttachCloakVisionBlocker : Effector
{
	prereqRecord = 
	{
		isInState = false;
	} : IsPlayerGrappling;
	effectorClassName = "AttachOpticalCamoVisionBlockerEffector";
	CName visionBlockerTypeName = "OpticalCamo";
	Vector3 visionBlockerOffset = ( 0.f, 0.f, 0.f );
	float visionBlockerRadius = 0.5f;
	float visionBlockerHeight = 1.f;
	float visionBlockerDetectionModifier = 0.1f;
	float visionBlockerTBHModifier = 1.f;
	bool isBlockingCompletely = false;
	bool blocksParent = false;
}

AttachPerfectCloakVisionBlocker : AttachCloakVisionBlocker
{
	CName visionBlockerTypeName = "OpticalCamoLegendary";
	float visionBlockerDetectionModifier = 0.f;
	bool isBlockingCompletely = true;
}

AttachCloakVisionBlockerUncommon : AttachCloakVisionBlocker
{
	CName visionBlockerTypeName = "OpticalCamoRare";
	float visionBlockerDetectionModifier = 0.7f;
}

AttachCloakVisionBlockerRare : AttachCloakVisionBlocker
{
	CName visionBlockerTypeName = "OpticalCamoRare";
	float visionBlockerDetectionModifier = 0.5f;
}

AttachCloakVisionBlockerEpic : AttachCloakVisionBlocker
{
	CName visionBlockerTypeName = "OpticalCamoEpic";
	float visionBlockerDetectionModifier = 0.3f;
}

AttachCloakVisionBlockerLegendary : AttachCloakVisionBlocker
{
	CName visionBlockerTypeName = "OpticalCamoLegendary";
	float visionBlockerDetectionModifier = 0.1f;
}

ApplyQuickhackEffector : Effector
{
	effectorClassName = "ApplyQuickhackEffector";
	prereqRecord = "Perks.IsHitTargetAlive";
	fk< ObjectAction > objectAction = "";
	float uploadChance = 1.f;
	float uploadTime = 0.f;
}

MonoWireQuickHackApplyEffector : ApplyEffectorOnPlayer
{
	prereqRecord = 
	{
		statType = "CanUseNewMeleewareAttackSpyTree";
		valueToCheck = 0;
		comparisonType = "Greater";
	} : StatPrereq;
	effectorToApply = 
	{
		prereqRecord = 
		{
			conditions += 
			[
				{
					CName weaponType = "Melee";
				} : WeaponTypeHitPrereqCondition
			];
		} : IsHitTargetAlive;
		effectorClassName = "MonoWireQuickHackApplyEffector";
	} : Effector;
}

InitiateCyberwareExplosionEffector : Effector
{
	effectorClassName = "InitiateCyberwareExplosionEffector";
	fk< Attack > attackRecord = "";
	float maxRangeAddition = 10.0f;
}

ModifyDamageWithCyberwareCountEffector : Effector
{
	prereqRecord = 
	{
		conditions = 
		[
			{
				hitFlag = "CWExplosion";
			} : HitFlagHitPrereqCondition
		];
	} : ProcessHitTriggered;
	effectorClassName = "ModifyDamageWithCyberwareCountEffector";
	float minPlayerHealthPercentage = 1.0f;
	float playerIncomingDamageMultiplier = 0.5f;
	float playerMaxIncomingDamage = 0.3f;
	float damageBuffAmount = 1.0f;
	float damageBuffRarity = 0.05f;
	CName playVFXOnHitTargets = "";
	fk< StatusEffect > statusEffectRecord = "";
}

TriggerAttackOnNearbyEnemiesEffector : Effector
{
	effectorClassName = "TriggerAttackOnNearbyEnemiesEffector";
	fk< Attack > attackRecord = "";
	int targetHowManyEnemies = 0;
	CName playVFXOnHitTargets = "";
	fk< StatusEffect > statusEffectRecord = "";
	float targetMaxDistance = 0f;
	float targetMinDistance = 0f;
	bool ignoreCivilians = true;
}

ModifyStatPoolValueQuickhackCostEffector : Effector
{
	effectorClassName = "ModifyStatPoolValueQuickhackCostEffector";
	string statPoolType = "";
	float statPoolValue = 0;
	float recoverMemoryAmount = 0;
	bool skipLastCombatHack = false;
}

PowerUpCyberwareEffector : Effector
{
	effectorClassName = "PowerUpCyberwareEffector";
	string targetEquipArea = "";
	int targetEquipSlotIndex = 0;
}

StaminaRatioCalculatorEffector : StatPoolBasedStatusEffectEffector
{
	statPool = "BaseStatPools.Stamina";
	statusEffect = "BaseStatusEffect.StaminaRatioCalculator";
	statPoolStep = 1f;
	stepUsesPercent = true;
	maxStacks = 100;
}

ModifyDamagePerHackEffector : ModifyDamageEffector
{
	prereqRecord = 
	{
		conditions += 
		[
			{
				hitFlag = "QuickHack";
			} : HitFlagHitPrereqCondition, 
			{
				hitFlag = "UltimateQuickHack";
				invertHitFlag = true;
			} : HitFlagHitPrereqCondition
		];
	} : ProcessHitTriggered;
	effectorClassName = "ModifyDamagePerHackEffector";
	bool countOnlyUnique = true;
}

LimfaticNanoChargeSystemEffector : ContinuousEffector
{
	effectorClassName = "LimfaticNanoChargeSystemEffector";
	fk< StatusEffect > statusEffect = "";
	float maxDistance = 0f;
	delayTime = 0.5f;
}

WeaponChargeRatioCalculatorEffector : StatPoolBasedStatusEffectEffector
{
	statPool = "BaseStatPools.WeaponCharge";
	statusEffect = "BaseStatusEffect.WeaponChargeRatioCalculator";
	statPoolStep = 5f;
	stepUsesPercent = true;
	maxStacks = 20;
	targetOfStatPoolCheck = "Weapon";
}

NanoTechPlatesEffector : Effector
{
	effectorClassName = "NanoTechPlatesEffector";
	float chanceToTrigger = 0f;
	int nanoPlatesStacks = 5;
	float timeWindow = 5;
	float minTimeBetweenBlocks = 0.5;
}

TriggerAttackByChanceEffector : TriggerAttackEffector
{
	effectorClassName = "TriggerAttackByChanceEffector";
	float chance = 0f;
	fk< Stat > statForChance = "";
	fk< StatusEffect > selfStatusEffect = "";
}

RefreshQhWithTagInAreaEffector : Effector
{
	effectorClassName = "RefreshQhWithTagInAreaEffector";
	CName[] tags = [];
	float range = 0;
}

RipAndTearEffector : MultiplyDamage
{
	CName effectorClassName = "RipAndTearEffector";
	string statusEffectToRemove = "";
	CName sfxName = "";
	CName vfxName = "";
}

BloodlustHealingEffector : Effector
{
	CName effectorClassName = "BloodlustHealingEffector";
	float maxDistance = 5.0f;
	float healAmount = 50.0f;
	bool usePercent = false;
}

HighlightEffector : ContinuousEffector
{
	effectorClassName = "HighlightEffector";
	float maxDistance = 10f;
	bool highlightVisible = false;
	CName searchFilter = "TechPreviewNPC";
	CName targetingSet = "Visible";
	float delayTime = 0.5f;
}

KiroshiHighlightEffector : HighlightEffector
{
	effectorClassName = "KiroshiHighlightEffector";
	maxDistance = 10f;
	bool onlyClosestToCrosshair = false;
	bool onlyClosestByDistance = false;
	bool onlyWhileAiming = false;
}

HauntedCyberdeckEquippedEffector : ToggleFactEffector
{
	prereqRecord = 
	{
		statusEffect = "BaseStatusEffect.Haunted_Deck_Equipped";
	} : StatusEffectPrereq;
	fact = "haunted_deck_equipped";
}

AllIconic_OW_CW_Purchased_TreasureChest_Failsafe_Effector : ApplyEffectorOnPlayer
{
	prereqRecord = "LootPrereqs.AllIconic_OS_CW_Purchased";
	effectorToApply = 
	{
		prereqRecord = 
		{
			nestedPrereqs = 
			[
				{
					fact = "iconic_os_cw_looted_from_treasure_chest";
					value = 0;
					comparisonType = "LessOrEqual";
				} : FactValuePrereq, 
				{
					duration = 1f;
				} : DurationPrereq
			];
		} : ANDPrereq;
		statusEffect = "BaseStatusEffect.AllIconicCWFromTreasureChestPurchased";
	} : ApplyStatusEffectOnPlayer;
}

MainBossEffector : ApplyStatusEffectEffector
{
	statusEffect = "BaseStatusEffect.MainBossSE";
}

ICECounterHackEffector : Effector
{
	effectorClassName = "ICECounterHackEffector";
	fk< ObjectAction > objectAction = "";
}

ClearQuickhackQueueEffector : Effector
{
	effectorClassName = "ClearQuickhackQueueEffector";
}

ModifyStatPoolValuePerHitEffector : ModifyStatPoolValueEffector
{
	effectorClassName = "ModifyStatPoolValuePerHitEffector";
	float damageScaleFactor = 0f;
}

NoICECooldown : StatusEffectAbsentPrereq
{
	statusEffect = "BaseStatusEffect.ICECounterHackCooldown";
}

