landsandboat/scripts/globals/gambits.lua

150 lines
3.7 KiB
Lua

-----------------------------------
-- Gambits decision making system
-----------------------------------
ai = ai or {}
-- Target
ai.target =
{
SELF = 0,
PARTY = 1,
TARGET = 2,
MASTER = 3,
TANK = 4,
MELEE = 5,
RANGED = 6,
CASTER = 7,
TOP_ENMITY = 8,
CURILLA = 9, -- Special case for Rainemard
PARTY_DEAD = 10,
PARTY_MULTI = 11,
TRIGGER_SELF_ACTION_TARGET = 12, -- Triggers get checked on the trust but the action target is the battleTarget
TRIGGER_TARGET_ACTION_SELF = 13, -- Triggers get checked on the battleTarget but the action target is the trust
}
ai.t = ai.target
-- Logic
ai.logic =
{
AND = 0,
}
ai.logic.OR = setmetatable(
{ value = 1 },
{
__call = function(self, ...)
local args = { ... }
local conditions = {}
for _, condition in ipairs(args) do
if type(condition) == 'table' then
table.insert(conditions, condition)
else
error('ai.logic.OR expects only tables as arguments, got ' .. type(condition))
end
end
return {
logic = self.value,
conditions = conditions,
}
end,
}
)
ai.l = ai.logic
-- Condition
ai.condition =
{
ALWAYS = 0,
HPP_LT = 1,
HPP_GTE = 2,
MPP_LT = 3,
MPP_GTE = 4,
TP_LT = 5,
TP_GTE = 6,
LVL_LT = 7,
LVL_GTE = 8,
STATUS = 9,
NOT_STATUS = 10,
STATUS_FLAG = 11,
HAS_TOP_ENMITY = 12,
NOT_HAS_TOP_ENMITY = 13,
SC_AVAILABLE = 14,
NOT_SC_AVAILABLE = 15,
MB_AVAILABLE = 16,
READYING_WS = 17,
READYING_MS = 18,
READYING_JA = 19,
CASTING_MA = 20,
CASTING_DEBUFF = 21,
RANDOM = 22,
NO_SAMBA = 23,
NO_STORM = 24,
PT_HAS_TANK = 25,
NOT_PT_HAS_TANK = 26,
IS_ECOSYSTEM = 27,
HP_MISSING = 28,
CASTING_ELEMENT_MA = 29,
CAST_ELE_MA_SELF = 30,
CASTING_ELE_MA_AOE = 31,
NEED_ELE_BAREFFECT = 32,
NO_MAX_RUNE = 33,
HAS_RUNES = 34,
LUNGE_MB_AVAILABLE = 35,
SUB_ANIMATION = 36,
JA_ON_COOLDOWN = 37,
VAL_URIEL_CHECK = 38,
TIMER = 39, -- argument in seconds
}
ai.c = ai.condition
-- Reaction
ai.reaction =
{
ATTACK = 0,
RATTACK = 1,
MA = 2,
JA = 3,
WS = 4,
MS = 5,
ANIM_STRING = 6,
}
ai.r = ai.reaction
-- Select
ai.select =
{
HIGHEST = 0,
LOWEST = 1,
SPECIFIC = 2,
RANDOM = 3,
MB_ELEMENT = 4,
SPECIAL_AYAME = 5,
SPECIAL_AUGUST = 6,
BEST_AGAINST_TARGET = 7,
BEST_SAMBA = 8,
HIGHEST_WALTZ = 9,
ENTRUSTED = 10,
BEST_INDI = 11,
STORM_DAY = 12,
HELIX_DAY = 13,
EN_MOB_WEAKNESS = 14,
STORM_MOB_WEAKNESS = 15,
HELIX_MOB_WEAKNESS = 16,
DEF_BAR_ELEMENT = 17,
RUNE_DAY = 18,
RANDOM_ANIMATION = 19,
}
ai.s = ai.select
-- TP Move Trigger
ai.tp =
{
ASAP = 0,
RANDOM = 1,
OPENER = 2,
CLOSER = 3, -- Will Hold TP Indefinitely to close a SC
CLOSER_UNTIL_TP = 4, -- Will Hold TP to close a SC until a certain threshold
}