package Effectors
using RTDB, Prereqs

SetFactEffector : Effector
{
	CName effectorClassName = "SetFactEffector";
	CName fact = "";
	int value = 0;
}

ToggleFactEffector : Effector
{
	CName effectorClassName = "ToggleFactEffector";
	CName fact = "";
	int valueOn = 1;
	int valueOff = 0;
}

SetFactBasedOnClearAreaEffector : Effector
{
	CName effectorClassName = "SetFactBasedOnClearAreaEffector";
	CName fact = "";
	CName[] factSuffixes = 
	[
		"_n", "_ne", "_e", "_se", "_s", "_sw", "_w", "_nw"
	];
	float[] vectorRotations = 
	[
		0, 45, 90, 135, 180, -135, -90, -45
	];
	int value = 0;
	float distance = 3.0;
	float width = 1.1;
	float fromHeight = 0.1;
	float height = 1.8;
}

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

RemoveStatusEffectsEffector : Effector
{
	CName effectorClassName = "RemoveStatusEffectsEffector";
	string[] statusEffects = [];
	string[] effectTypes = [];
	CName[] effectTags = [];
}

RemoveStatusEffectOnAttackEffector : Effector
{
	CName effectorClassName = "RemoveStatusEffectOnAttackEffector";
	string[] statusEffects = [];
	string[] effectTypes = [];
	CName[] effectTags = [];
}

ResetDevelopmentPointsEffector : Effector
{
	CName effectorClassName = "ResetDevelopmentPointsEffector";
	string pointsType = "";
}

BuyAttributeEffector : Effector
{
	CName effectorClassName = "BuyAttributeEffector";
	string attributeType = "";
}

Crack : TriggerHackingMinigameEffector
{
}

SimpleTriggerAttackEffect : TriggerAttackEffector
{
	CName effectorClassName = "SimpleTriggerAttackEffect";
	bool shouldDelay = false;
}

TriggerAttackOnEffectBase : TriggerAttackEffector
{
	CName attackPositionSlotName = "Chest";
	bool playerAsInstigator = false;
	bool triggerHitReaction = false;
	bool isRandom = false;
	float applicationChance = 1f;
}

TriggerAttackOnOwnerEffect : TriggerAttackOnEffectBase
{
	CName effectorClassName = "TriggerAttackOnOwnerEffect";
}

TriggerAttackOnTargetEffect : TriggerAttackOnEffectBase
{
	CName effectorClassName = "TriggerAttackOnTargetEffect";
}

TriggerAttackOnAttackEffect : TriggerAttackOnEffectBase
{
	CName effectorClassName = "TriggerAttackOnAttackEffect";
	bool useHitPosition = false;
}

PlayVFXEffector : Effector
{
	CName effectorClassName = "PlayVFXEffector";
	CName vfxName = "";
	bool startOnUninitialize = false;
}

StopVFXEffector : Effector
{
	CName effectorClassName = "StopVFXEffector";
	CName vfxName = "";
}

StopAndPlayVFXEffector : Effector
{
	CName effectorClassName = "StopAndPlayVFXEffector";
	CName vfxToStart = "";
	CName vfxToStop = "";
}

ChangeAppearanceEffector : Effector
{
	CName effectorClassName = "ChangeAppearanceEffector";
	CName appearanceName = "";
	bool resetAppearance = true;
	CName overrideMaterialName = "";
}

ApplyShaderEffector : Effector
{
	CName effectorClassName = "ApplyShaderEffector";
	CName overrideMaterialName = "";
	CName overrideMaterialTag = "";
	bool applyToOwner = true;
	bool applyToWeapon = false;
}

ModifyDamageEffector : Effector
{
	CName effectorClassName = "ModifyDamageEffector";
	string operationType = "";
	float value = 0f;
	fk< Stat > statForValue = "";
}

SampleMulti : Effector
{
	prereqRecord = 
	{
		valueToCheck = 10.0f;
		statType = "Accuracy";
		comparisonType = "GreaterOrEqual";
	} : StatPrereq;
	CName effectorClassName = "StopAndPlayVFXEffector";
	CName vfxToStart = "hacking_glitch_medium";
	CName vfxToStop = "hacking_glitch_medium";
}

PlayVFXOnHitPositionEffector : Effector
{
	CName effectorClassName = "PlayVFXOnHitPositionEffector";
	CName effectName = "";
	CName effectTag = "";
	CName applicationTarget = "Target";
}

PlaySFXEffector : Effector
{
	CName effectorClassName = "PlaySFXEffector";
	CName activationSFXName = "";
	CName deactivationSFXName = "";
	bool startOnUninitialize = false;
	bool unique = false;
}

StopSFXEffector : Effector
{
	CName effectorClassName = "StopSFXEffector";
	CName sfxName = "";
}

StopAndPlaySFXEffector : Effector
{
	CName effectorClassName = "StopAndPlaySFXEffector";
	CName sfxToStart = "";
	CName sfxToStop = "";
}

SelfDestructEffect : TriggerAttackOnOwnerEffect
{
	prereqRecord = 
	{
		duration = 1.5f;
	} : Prereqs.DurationPrereq;
	attackRecord = "NPCAttacks.SelfDestructionBomb";
}

StopSelfDestructEffect : StopVFXEffector
{
	fk< IPrereq > prereqRecord = 
	{
		duration = 1.5f;
	} : Prereqs.DurationPrereq;
	CName effectorClassName = "StopVFXEffector";
	CName vfxName = "status_electrocuted";
}

