package RTDB

AISquadParams
{
	fk< AITicket >[] allTickets = [];
	fk< AITicket >[] overridenTickets = [];
	fk< AITicketType >[] prohibitedTickets = [];
}

AITicket
{
	fk< AITicketType > ticketType = "";
	fk< AIDifficulty > difficulty = "";
	fk< AIComparison > difficultyComparisonOp = "";
	int minNumberOfTickets = -1;
	int maxNumberOfTickets = -1;
	float percentageNumberOfTickets = -1.f;
	bool scaleNumberOfTicketsFromWorkspots = false;
	fk< AIActionCooldown >[] cooldowns = [];
	float timeout = 5.f;
	float minTicketDesyncTime = 0.f;
	float maxTicketDesyncTime = 0.f;
	fk< AITicketType >[] syncWithTickets = [];
	float syncTimeout = -1.f;
	bool revokeOnTimeout = false;
	bool releaseAll = false;
	fk< AITicketCondition >[] activationCondition = [];
	fk< AITicketCondition >[] deactivationCondition = [];
	float deactivationConditionCheckInterval = 1.f;
	float conditionSuccessDuration = 0.f;
	bool startCooldownOnFailure = true;
}

AIActionTicket : AITicket
{
}

AITacticTicket : AITicket
{
	fk< AISectorType >[] sectors = [];
	bool offensiveTactic = false;
	float tacticTimeout = 7.f;
}

AIRingTicket : AITicket
{
	fk< AIRingType > ringType = "AIRingType.Undefined";
}

AITicketCondition
{
	bool invert = false;
}

AITicketFilter : AITicketCondition
{
	bool resetMembers = false;
	bool resetMembersIncludingUnwillings = false;
	bool skipSelfOnce = false;
}

AITicketCheck : AITicketCondition
{
	bool optionalFastExit = false;
}

AISquadDistanceRelationToTargetCheck : AITicketCheck
{
	fk< AIActionTarget > target = "";
	float ringRadius = 0.0f;
}

AISquadDistanceRelationToSectorCheck : AITicketCheck
{
	fk< AISectorType >[] sectors = [];
}

AISquadItemPriorityFilter : AITicketFilter
{
	bool restoreOnFail = true;
}

