package OffMeshLinkTags
using RTDB, Prereqs, Condition

OdaOffMeshLinkTag : OffMeshLinkTag
{
	tag = "OdaJump";
	prerequisites = 
	[
		{
			statType = "HasChargeJump";
			valueToCheck = 0;
			comparisonType = "Greater";
		} : StatPrereq, 
		{
			prereqClassName = "NPCRarityPrereq";
			string rarity = "Boss";
		} : IPrereq, 
		{
			statusEffect = "Oda.StealthMode";
		} : Prereqs.StatusEffectAbsentPrereq, 
		{
			statusEffect = "Oda.NoSandevistanMode";
		} : Prereqs.StatusEffectAbsentPrereq, 
		{
			checkType = "CheckType.Tag";
			tagToCheck = "Wounded";
		} : Prereqs.StatusEffectAbsentPrereq
	];
}

SmasherOffMeshLinkTag : OffMeshLinkTag
{
	tag = "SmasherJump";
	prerequisites = 
	[
		{
			statType = "HasChargeJump";
			valueToCheck = 0;
			comparisonType = "Greater";
		} : StatPrereq, 
		{
			prereqClassName = "NPCRarityPrereq";
			string rarity = "Boss";
		} : IPrereq, 
		{
			checkType = "CheckType.Tag";
			tagToCheck = "Wounded";
		} : Prereqs.StatusEffectAbsentPrereq, 
		{
			stateName = "Shoot";
			invert = true;
		} : Prereqs.CurrentHighLevelNPCStatePrereq
	];
}

SearchExlorationOffMeshLinkTag : OffMeshLinkTag
{
	tag = "SearchExloration";
	prerequisites = 
	[
		{
			stateName = "Alerted";
			invert = true;
		} : Prereqs.CurrentHighLevelNPCStatePrereq, 
		{
			stateName = "Combat";
			invert = true;
		} : Prereqs.CurrentHighLevelNPCStatePrereq, 
		{
			allowedTags = 
			[
				"Massive"
			];
			invert = true;
		} : VisualTagsPrereq, 
		{
			checkType = "CheckType.Tag";
			tagToCheck = "Wounded";
		} : Prereqs.StatusEffectAbsentPrereq
	];
}

OutOfCombatActionOffMeshLinkTag : OffMeshLinkTag
{
	tag = "OutOfCombatAction";
	prerequisites = 
	[
		{
			stateName = "Combat";
			invert = true;
		} : Prereqs.CurrentHighLevelNPCStatePrereq, 
		{
			allowedTags = 
			[
				"Massive"
			];
			invert = true;
		} : VisualTagsPrereq, 
		{
			checkType = "CheckType.Tag";
			tagToCheck = "Wounded";
		} : Prereqs.StatusEffectAbsentPrereq
	];
}

ChargeJump : OffMeshLinkTag
{
	tag = "ChargeJump";
	prerequisites = 
	[
		{
			allowedTypes = 
			[
				"NPCType.Human", "NPCType.Android"
			];
		} : NPCTypePrereq, 
		{
			allowedTags = 
			[
				"Massive"
			];
			invert = true;
		} : VisualTagsPrereq, 
		{
			checkType = "CheckType.Tag";
			tagToCheck = "Wounded";
		} : Prereqs.StatusEffectAbsentPrereq
	];
}

Jump : OffMeshLinkTag
{
	tag = "Jump";
	prerequisites = 
	[
		{
			allowedTypes = 
			[
				"NPCType.Human", "NPCType.Android"
			];
		} : NPCTypePrereq, 
		{
			allowedTags = 
			[
				"Massive"
			];
			invert = true;
		} : VisualTagsPrereq, 
		{
			checkType = "CheckType.Tag";
			tagToCheck = "Wounded";
		} : Prereqs.StatusEffectAbsentPrereq
	];
}

Ladder : OffMeshLinkTag
{
	tag = "Ladder";
	prerequisites = 
	[
		{
			allowedTypes = 
			[
				"NPCType.Human", "NPCType.Android"
			];
		} : NPCTypePrereq, 
		{
			allowedTags = 
			[
				"Massive"
			];
			invert = true;
		} : VisualTagsPrereq, 
		{
			checkType = "CheckType.Tag";
			tagToCheck = "Wounded";
		} : Prereqs.StatusEffectAbsentPrereq
	];
}

ThrusterJump : OffMeshLinkTag
{
	tag = "ThrusterJump";
	prerequisites = 
	[
		{
			allowedTypes = 
			[
				"NPCType.Human", "NPCType.Android"
			];
		} : NPCTypePrereq, 
		{
			allowedTags = 
			[
				"Massive"
			];
			invert = true;
		} : VisualTagsPrereq, 
		{
			checkType = "CheckType.Tag";
			tagToCheck = "Wounded";
		} : Prereqs.StatusEffectAbsentPrereq
	];
}

CombatActionOffMeshLinkTag : OffMeshLinkTag
{
	tag = "Armed";
	prerequisites = 
	[
		"Prereqs.RangedWeaponHeldPrereq", {
			allowedTags = 
			[
				"Massive"
			];
			invert = true;
		} : VisualTagsPrereq, 
		{
			checkType = "CheckType.Tag";
			tagToCheck = "Wounded";
		} : Prereqs.StatusEffectAbsentPrereq
	];
}

InCombatActionOffMeshLinkTag : OffMeshLinkTag
{
	tag = "InCombatAction";
	prerequisites = 
	[
		{
			stateName = "Combat";
			invert = false;
		} : Prereqs.CurrentHighLevelNPCStatePrereq, 
		{
			allowedTypes = 
			[
				"NPCType.Human"
			];
		} : NPCTypePrereq, 
		{
			allowedTags = 
			[
				"Massive"
			];
			invert = true;
		} : VisualTagsPrereq, 
		"Prereqs.NotLMGHeldPrereq", "Prereqs.NotHMGHeldPrereq", {
			prereqClassName = "gameMultiPrereq";
			aggregationType = "OR";
			nestedPrereqs = 
			[
				{
					target = "AIActionTarget.CombatTarget";
					distance = 12;
					invert = true;
				} : ActionTargetInDistancePrereq, 
				"Prereqs.MeleeWeaponHeldPrereq"
			];
		} : MultiPrereq, 
		{
			checkType = "CheckType.Tag";
			tagToCheck = "Wounded";
		} : Prereqs.StatusEffectAbsentPrereq
	];
}

DroneOffMeshLinkTag : OffMeshLinkTag
{
	tag = "Drone";
	prerequisites = 
	[
		{
			allowedTypes = 
			[
				"NPCType.Drone"
			];
		} : NPCTypePrereq
	];
}

FollowerOffMeshLinkTag : OffMeshLinkTag
{
	tag = "Follower";
	prerequisites = 
	[
		"Prereqs.NPCIsFollower"
	];
}

FollowerNotAllowedTag : OffMeshLinkTag
{
	tag = "FollowerNotAllowed";
	isAllowed = false;
	prerequisites = 
	[
		"Prereqs.NPCIsFollower"
	];
}

FollowerInCombatNotAllowedTag : OffMeshLinkTag
{
	tag = "FollowerInCombatNotAllowed";
	isAllowed = false;
	prerequisites = 
	[
		"Prereqs.NPCIsFollower", {
			stateName = "Combat";
			invert = false;
		} : Prereqs.CurrentHighLevelNPCStatePrereq
	];
}

ChildrenNotAllowedTag : OffMeshLinkTag
{
	tag = "ChildrenNotAllowed";
	isAllowed = false;
	prerequisites = 
	[
		"Prereqs.NPCIsChild"
	];
}

AndroidNotAllowedTag : OffMeshLinkTag
{
	tag = "AndroidNotAllowed";
	isAllowed = false;
	prerequisites = 
	[
		"Prereqs.NPCIsAndroid"
	];
}

LMGNotAllowedTag : OffMeshLinkTag
{
	tag = "LMGNotAllowed";
	isAllowed = false;
	prerequisites = 
	[
		"Prereqs.NPCIsLMG"
	];
}

CrowdNotAllowedTag : OffMeshLinkTag
{
	tag = "CrowdNotAllowed";
	isAllowed = false;
	prerequisites = 
	[
		"Prereqs.NPCIsCrowd"
	];
}

GenericLinkTag : OffMeshLinkTag
{
	tag = "OffMeshLink";
}

CerberusOffMeshLinkTag : OffMeshLinkTag
{
	tag = "Cerberus";
	prerequisites = 
	[
		"Prereqs.NPCIsCerberus"
	];
}

CerberusNotAllowedOffMeshLinkTag : OffMeshLinkTag
{
	tag = "CerberusNotAllowed";
	isAllowed = false;
	prerequisites = 
	[
		"Prereqs.NPCIsCerberus"
	];
}

