package RTDB

Attack
{
	CName className = "";
	CName attackName = "";
	string userDataPath = "";
	fk< AttackType > attackType = "";
	float range = 0.0f;
	float velocity = -1.0f;
	fk< StatModifier >[] statModifiers = 
	[
		"AttackModifier.BaseAlliedDamage", "AttackModifier.PhysicalAlliedDamage", "AttackModifier.ElectricAlliedDamage", "AttackModifier.ThermalAlliedDamage", "AttackModifier.ChemicalAlliedDamage"
	];
	bool useDefaultAimData = false;
	fk< StatusEffectAttackData >[] statusEffects = [];
	fk< DamageType > damageType = "";
	float playerIncomingDamageMultiplier = 1.0f;
	string[] hitFlags = [];
	int hitReactionSeverityMin = -1;
	int hitReactionSeverityMax = -1;
	fk< StatModifier >[] staminaCost = [];
	float explosionDamageVSVehicles = -1.0f;
}

Attack_GameEffect : Attack
{
	className = "Attack_GameEffect";
	CName effectName = "";
	CName effectTag = "";
	CName attackTag = "";
	CName audioTag = "";
	float audioAttackIndex = 0.0f;
	fk< Attack_GameEffect > explosionAttack = "";
}

Attack_Projectile : Attack
{
	className = "Attack_Projectile";
	CName projectileTemplateName = "";
	fk< Attack_GameEffect > explosionAttack = "";
}

DeviceAreaAttack : Attack_GameEffect
{
	effectName = "environmental_aoe";
	effectTag = "infinite";
	attackType = "AttackType.Effect";
}

AttackType
{
	string name = "";
	string comment = "";
}

AttackSubtype
{
	CName enumName = "";
	string enumComment = "";
}

Attack_Melee : Attack_GameEffect
{
	fk< AttackDirection > attackDirection = "";
	fk< AttackSubtype > attackSubtype = "";
	float blockCostFactor = 1.0f;
	bool canSkipBlock = false;
	bool dontScaleWithAttackSpeed = false;
	float weaponChargeCost = 0.f;
	float startupDuration = 0.f;
	float activeDuration = 0.f;
	float recoverDuration = 0.f;
	float activeHitDuration = 0.f;
	float recoverHitDuration = 0.f;
	float attackWindowOpen = 0.f;
	float attackWindowClosed = 0.f;
	float idleTransitionTime = 0.f;
	float holdTransitionTime = 0.f;
	float blockTransitionTime = 0.f;
	float attackEffectDuration = 0.f;
	CName impactFxSlot = "";
	float attackEffectDelay = 0.f;
	float impulseDelay = 0.f;
	float cameraSpaceImpulse = 0.f;
	float forwardImpulse = 0.f;
	float upImpulse = 0.f;
	bool useAdjustmentInsteadOfImpulse = false;
	bool enableAdjustingPlayerPositionToTarget = false;
	bool incrementsCombo = false;
	float standUpDelay = 0.f;
	Vector3 ikOffset = ( 0, 0, 0 );
	bool hasDeflectAnim = false;
	bool hasHitAnim = false;
	float trailStartDelay = 0.1f;
	float trailStopDelay = 0.5f;
	string trailAttackSide = "";
	CName vfxName = "";
	float duration = 0.f;
	float spawnDistance = 0.f;
	float radius = 0.f;
}

Attack_Landing : Attack_GameEffect
{
	fk< LandingFxPackage > fxPackage = "";
}

RangedAttackPackage
{
	fk< RangedAttack > defaultFire = "";
	fk< RangedAttack > chargeFire = "";
}

RangedAttack
{
	fk< Attack > playerAttack = "";
	fk< Attack > secondaryPlayerAttack = "";
	fk< Attack > NPCAttack = "";
	fk< Attack > playerTimeDilated = "";
	fk< Attack > secondaryPlayerTimeDilated = "";
	fk< Attack_Projectile > NPCTimeDilated = "";
}

AttackDirection
{
	fk< MeleeAttackDirection > direction = "";
	bool isThrust = false;
	bool useMiddlePosition = false;
	Vector3 startPosition = ( 0, 0, 0 );
	Vector3 middlePosition = ( 0, 0, 0 );
	Vector3 endPosition = ( 0, 0, 0 );
}

MeleeAttackDirection
{
	CName enumName = "";
	string enumComment = "";
}

StatusEffectAttackData
{
	fk< StatusEffect > statusEffect = "";
	fk< StatPool > resistPool = "";
	bool applyImmediately = false;
	float stacksToApply = 1;
}

