Skip to content

Commit 22913d0

Browse files
authored
[trust, sql, lua, core] Trust Tank audit and cleanup (#10002)
* lua_baseentity getShieldSize amend to account for trust * trustentity.cpp: spawn, addition to set maxHP/maxMP for HP/MP mods * trust script audit, set correct values and cleanup * trustentity addition for getShieldSize() and default shield size * naming prefix MOBMOD_TRUST amendment and remove unnecessary comments * Change party wake on sleep gambits to only check for SLEEP_I
1 parent 6a6232a commit 22913d0

18 files changed

Lines changed: 412 additions & 191 deletions

scripts/actions/spells/trust/aaev.lua

Lines changed: 46 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
-----------------------------------
22
-- Trust: AAEV
3+
-- Possesses Fast Cast, Cure Potency Bonus+50%, Damage Taken-10%, HP+20%, MP+50%, Converts 5% of Damage Taken to MP.
4+
-- Lacks Provoke; however, AAEV's additional Fast Cast trait reduces the recast time on Flash and Reprisal for solid enmity control.
5+
-- AAEV has improved Shield stats compared to other trusts, implied by the [Nov 2021 Patch Notes]. This would also make her Reprisal better.
6+
-- Ark Angel Elvaan doesn't use any WHM-only abilities or spells, but /WHM has Auto-Regen and Magic Defense Bonus, making her a good physical/magical hybrid tank.
7+
-- Uses Rampart when her target is under the effects of Chainspell, Manafont, or Astral Flow.
8+
-- Uses Shield Strike to interrupt enemies casting high tier spells.
9+
-- Holds up to 2000 TP to try to close skillchains.
310
-----------------------------------
411
---@type TSpellTrust
512
local spellObject = {}
@@ -19,6 +26,7 @@ spellObject.onMobSpawn = function(mob)
1926
mob:setMobMod(xi.mobMod.CAN_PARRY, 3)
2027

2128
local lvl = mob:getMainLvl()
29+
local lastSynergyBonus = 0
2230
local shieldMasteryPower = 0
2331

2432
if lvl >= 96 then
@@ -32,13 +40,13 @@ spellObject.onMobSpawn = function(mob)
3240
end
3341

3442
mob:setMod(xi.mod.SHIELD_MASTERY_TP, shieldMasteryPower)
35-
mob:setMod(xi.mod.SHIELDBLOCKRATE, 45) -- 45% base block rate
43+
mob:setMod(xi.mod.SHIELDBLOCKRATE, 45)
3644
mob:addMod(xi.mod.FASTCAST, 30)
3745
mob:addMod(xi.mod.CURE_POTENCY, 50)
38-
mob:addMod(xi.mod.DMG, -10)
46+
mob:addMod(xi.mod.ENMITY, 25)
47+
mob:addMod(xi.mod.DMG, -1000) -- Damage Taken -10%
3948
mob:addMod(xi.mod.HPP, 20)
4049
mob:addMod(xi.mod.ABSORB_PHYSDMG_TO_MP, 5)
41-
local lastSynergyBonus = 0
4250

4351
-- Dynamic modifier that checks party member list on tick to apply
4452
mob:addListener('COMBAT_TICK', 'AAEV_CTICK', function(mobArg)
@@ -75,40 +83,52 @@ spellObject.onMobSpawn = function(mob)
7583
mobArg:delMod(xi.mod.MEVA, lastSynergyBonus)
7684
-- Add the new bonus
7785
mobArg:addMod(xi.mod.MEVA, targetBonus)
78-
7986
-- Update lastSynergyBonus
8087
lastSynergyBonus = targetBonus
8188
end
8289
end)
8390

84-
-----------------------------------
85-
-- Gambits
86-
-----------------------------------
87-
-- 1 condition
88-
mob:addGambit(ai.t.TARGET, { ai.c.NOT_STATUS, xi.effect.FLASH }, { ai.r.MA, ai.s.SPECIFIC, xi.magic.spell.FLASH })
89-
mob:addGambit(ai.t.SELF, { ai.c.HPP_LT, 75 }, { ai.r.MA, ai.s.HIGHEST, xi.magic.spellFamily.CURE })
90-
mob:addGambit(ai.t.PARTY, { ai.c.HPP_LT, 50 }, { ai.r.MA, ai.s.HIGHEST, xi.magic.spellFamily.CURE })
91-
mob:addGambit(ai.t.TARGET, { ai.c.CASTING_ELE_MA_AOE, 0 }, { ai.r.MS, ai.s.SPECIFIC, 3714 }) -- Shield Strike
92-
mob:addGambit(ai.t.TARGET, { ai.c.STATUS, xi.effect.MANAFONT }, { ai.r.JA, ai.s.SPECIFIC, xi.ja.RAMPART })
93-
mob:addGambit(ai.t.TARGET, { ai.c.STATUS, xi.effect.CHAINSPELL }, { ai.r.JA, ai.s.SPECIFIC, xi.ja.RAMPART })
94-
mob:addGambit(ai.t.TARGET, { ai.c.STATUS, xi.effect.ASTRAL_FLOW }, { ai.r.JA, ai.s.SPECIFIC, xi.ja.RAMPART })
95-
mob:addGambit(ai.t.SELF, { ai.c.NOT_STATUS, xi.effect.PHALANX }, { ai.r.MA, ai.s.SPECIFIC, xi.magic.spell.PHALANX })
96-
mob:addGambit(ai.t.SELF, { ai.c.NOT_STATUS, xi.effect.REPRISAL }, { ai.r.MA, ai.s.SPECIFIC, xi.magic.spell.REPRISAL })
97-
mob:addGambit(ai.t.SELF, { ai.c.NOT_STATUS, xi.effect.SENTINEL }, { ai.r.JA, ai.s.SPECIFIC, xi.ja.SENTINEL })
98-
mob:addGambit(ai.t.SELF, { ai.c.NOT_STATUS, xi.effect.ENLIGHT }, { ai.r.MA, ai.s.SPECIFIC, xi.magic.spell.ENLIGHT })
99-
mob:addGambit(ai.t.SELF, { ai.c.NOT_STATUS, xi.effect.DIVINE_EMBLEM }, { ai.r.JA, ai.s.SPECIFIC, xi.ja.DIVINE_EMBLEM })
100-
mob:addGambit(ai.t.SELF, { ai.c.NOT_STATUS, xi.effect.PALISADE }, { ai.r.JA, ai.s.SPECIFIC, xi.ja.PALISADE })
101-
102-
-- 2 conditions
103-
mob:addGambit(ai.t.SELF, { { ai.c.MPP_LT, 25 }, { ai.c.TP_GTE, 1000 }, }, { ai.r.JA, ai.s.SPECIFIC, xi.ja.CHIVALRY })
91+
if lvl >= 15 then
92+
mob:addGambit(ai.t.TARGET, { ai.c.CASTING_ELE_MA_AOE, 0 }, { ai.r.MS, ai.s.SPECIFIC, xi.mobSkill.SHIELD_STRIKE_TRUST })
93+
end
94+
95+
if lvl >= 30 then
96+
mob:addGambit(ai.t.SELF, { ai.c.NOT_STATUS, xi.effect.SENTINEL }, { ai.r.JA, ai.s.SPECIFIC, xi.ja.SENTINEL })
97+
end
98+
99+
if lvl >= 50 then
100+
mob:addGambit(ai.t.SELF, { { ai.c.MPP_LT, 50 }, { ai.c.TP_GTE, 1000 } }, { ai.r.JA, ai.s.SPECIFIC, xi.ja.CHIVALRY })
101+
end
102+
103+
if lvl >= 62 then
104+
mob:addGambit(ai.t.TARGET, { ai.c.STATUS, xi.effect.MANAFONT }, { ai.r.JA, ai.s.SPECIFIC, xi.ja.RAMPART })
105+
mob:addGambit(ai.t.TARGET, { ai.c.STATUS, xi.effect.CHAINSPELL }, { ai.r.JA, ai.s.SPECIFIC, xi.ja.RAMPART })
106+
mob:addGambit(ai.t.TARGET, { ai.c.STATUS, xi.effect.ASTRAL_FLOW }, { ai.r.JA, ai.s.SPECIFIC, xi.ja.RAMPART })
107+
end
108+
109+
if lvl >= 75 then
110+
mob:addGambit(ai.t.TARGET, { ai.c.NOT_STATUS, xi.effect.FLASH }, { ai.r.JA, ai.s.SPECIFIC, xi.ja.DIVINE_EMBLEM })
111+
end
112+
113+
if lvl >= 95 then
114+
mob:addGambit(ai.t.SELF, { ai.c.NOT_STATUS, xi.effect.PALISADE }, { ai.r.JA, ai.s.SPECIFIC, xi.ja.PALISADE })
115+
end
116+
117+
mob:addGambit(ai.t.TARGET, { ai.c.NOT_STATUS, xi.effect.FLASH }, { ai.r.MA, ai.s.SPECIFIC, xi.magic.spell.FLASH })
118+
mob:addGambit(ai.t.SELF, { ai.c.HPP_LT, 75 }, { ai.r.MA, ai.s.HIGHEST, xi.magic.spellFamily.CURE })
119+
mob:addGambit(ai.t.PARTY, { ai.c.HPP_LT, 50 }, { ai.r.MA, ai.s.HIGHEST, xi.magic.spellFamily.CURE })
120+
mob:addGambit(ai.t.SELF, { ai.c.NOT_STATUS, xi.effect.ENLIGHT }, { ai.r.MA, ai.s.SPECIFIC, xi.magic.spell.ENLIGHT })
121+
mob:addGambit(ai.t.SELF, { ai.c.NOT_STATUS, xi.effect.PHALANX }, { ai.r.MA, ai.s.SPECIFIC, xi.magic.spell.PHALANX })
122+
mob:addGambit(ai.t.SELF, { ai.c.NOT_STATUS, xi.effect.REPRISAL }, { ai.r.MA, ai.s.SPECIFIC, xi.magic.spell.REPRISAL })
123+
mob:addGambit(ai.t.PARTY, { ai.c.STATUS, xi.effect.SLEEP_I }, { ai.r.MA, ai.s.SPECIFIC, xi.magic.spell.CURE })
104124

105125
mob:setTrustTPSkillSettings(ai.tp.CLOSER_UNTIL_TP, ai.s.RANDOM, 2000)
106126

107127
mob:addListener('WEAPONSKILL_USE', 'AAEV_WEAPONSKILL_USE', function(mobArg, target, skill, tp, action)
108128
local skillId = skill:getID()
109-
if skillId == xi.mobSkill.ARROGANCE_INCARNATE_2 then
129+
if skillId == xi.mobSkill.ARROGANCE_INCARNATE_TRUST then
110130
xi.trust.message(mobArg, xi.trust.messageOffset.SPECIAL_MOVE_1)
111-
elseif skillId == xi.mobSkill.DOMINION_SLASH_2 then
131+
elseif skillId == xi.mobSkill.DOMINION_SLASH_TRUST then
112132
xi.trust.message(mobArg, xi.trust.messageOffset.SPECIAL_MOVE_2)
113133
end
114134
end)

scripts/actions/spells/trust/aahm.lua

Lines changed: 33 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
-----------------------------------
22
-- Trust: AAHM
3+
-- Possesses HP+20%
4+
-- Possesses an Utsusemi +1 trait which grants AA HM an extra shadow.
5+
-- If there is a Tank in the party, behaves as a damage dealer: Uses Innin, Berserk.
6+
-- If there are no other tanks in the party, behaves as a tank: Uses Yonin, Warcry.
7+
-- Uses Provoke in both situations in order to be sub tank.
8+
-- Casts debuffs when does not have hate.
9+
-- Uses weapon skills at 1000 TP and does not try to skillchain.
310
-----------------------------------
411
---@type TSpellTrust
512
local spellObject = {}
@@ -17,10 +24,14 @@ spellObject.onMobSpawn = function(mob)
1724

1825
mob:addMobMod(xi.mobMod.CAN_PARRY, 3)
1926

20-
mob:addMod(xi.mod.HPP, 20)
2127
mob:addMod(xi.mod.UTSUSEMI_BONUS, 1)
2228
mob:addMod(xi.mod.FASTCAST, 30)
29+
mob:addMod(xi.mod.ENMITY, 15)
2330
mob:addMod(xi.mod.DUAL_WIELD, 10)
31+
mob:addMod(xi.mod.DMG, -500) -- Damage Taken -5%
32+
mob:addMod(xi.mod.HPP, 20)
33+
34+
local lvl = mob:getMainLvl()
2435
local lastSynergyBonus = 0
2536

2637
-- Dynamic modifier that checks party member list on tick to apply
@@ -50,34 +61,38 @@ spellObject.onMobSpawn = function(mob)
5061

5162
-- Determine what the bonus should be
5263
local targetBonus = (synergyCount == #synergyMembers) and 50 or 0
53-
5464
-- Only update if the state has changed
5565
if targetBonus ~= lastSynergyBonus then
5666
-- Subtract exactly what we added last time
5767
mobArg:delMod(xi.mod.MEVA, lastSynergyBonus)
5868
-- Add the new bonus
5969
mobArg:addMod(xi.mod.MEVA, targetBonus)
60-
6170
-- Update lastSynergyBonus
6271
lastSynergyBonus = targetBonus
6372
end
6473
end)
6574

66-
-----------------------------------
67-
-- Gambits
68-
-----------------------------------
69-
-- 1 condition
70-
mob:addGambit(ai.t.SELF, { ai.c.NOT_STATUS, xi.effect.MIGAWARI }, { ai.r.MA, ai.s.SPECIFIC, xi.magic.spell.MIGAWARI_ICHI })
71-
mob:addGambit(ai.t.SELF, { ai.c.NOT_STATUS, xi.effect.COPY_IMAGE }, { ai.r.MA, ai.s.HIGHEST, xi.magic.spellFamily.UTSUSEMI })
72-
mob:addGambit(ai.t.TARGET, { ai.c.ALWAYS, 0 }, { ai.r.JA, ai.s.SPECIFIC, xi.ja.PROVOKE })
73-
mob:addGambit(ai.t.TARGET, { ai.c.NOT_HAS_TOP_ENMITY, 0 }, { ai.r.MA, ai.s.HIGHEST, xi.magic.spellFamily.HOJO }, 45)
74-
mob:addGambit(ai.t.TARGET, { ai.c.NOT_HAS_TOP_ENMITY, 0 }, { ai.r.MA, ai.s.HIGHEST, xi.magic.spellFamily.KURAYAMI }, 45)
75-
76-
-- 2 conditions
77-
mob:addGambit(ai.t.SELF, { { ai.c.PT_HAS_TANK, 0 }, { ai.c.NOT_STATUS, xi.effect.YONIN }, }, { ai.r.JA, ai.s.SPECIFIC, xi.ja.YONIN })
78-
mob:addGambit(ai.t.SELF, { { ai.c.PT_HAS_TANK, 0 }, { ai.c.NOT_STATUS, xi.effect.WARCRY }, }, { ai.r.JA, ai.s.SPECIFIC, xi.ja.WARCRY })
79-
mob:addGambit(ai.t.SELF, { { ai.c.NOT_PT_HAS_TANK, 0 }, { ai.c.NOT_STATUS, xi.effect.INNIN }, }, { ai.r.JA, ai.s.SPECIFIC, xi.ja.INNIN })
80-
mob:addGambit(ai.t.SELF, { { ai.c.NOT_PT_HAS_TANK, 0 }, { ai.c.NOT_STATUS, xi.effect.BERSERK }, }, { ai.r.JA, ai.s.SPECIFIC, xi.ja.BERSERK })
75+
if lvl >= 10 then
76+
mob:addGambit(ai.t.TARGET, { ai.c.ALWAYS, 0 }, { ai.r.JA, ai.s.SPECIFIC, xi.ja.PROVOKE })
77+
end
78+
79+
if lvl >= 30 then
80+
mob:addGambit(ai.t.SELF, { { ai.c.NOT_PT_HAS_TANK, 0 }, { ai.c.NOT_STATUS, xi.effect.BERSERK } }, { ai.r.JA, ai.s.SPECIFIC, xi.ja.BERSERK })
81+
end
82+
83+
if lvl >= 40 then
84+
mob:addGambit(ai.t.SELF, { { ai.c.NOT_PT_HAS_TANK, 0 }, { ai.c.NOT_STATUS, xi.effect.INNIN } }, { ai.r.JA, ai.s.SPECIFIC, xi.ja.INNIN })
85+
mob:addGambit(ai.t.SELF, { { ai.c.PT_HAS_TANK, 0 }, { ai.c.NOT_STATUS, xi.effect.YONIN } }, { ai.r.JA, ai.s.SPECIFIC, xi.ja.YONIN })
86+
end
87+
88+
if lvl >= 70 then
89+
mob:addGambit(ai.t.SELF, { { ai.c.PT_HAS_TANK, 0 }, { ai.c.NOT_STATUS, xi.effect.WARCRY } }, { ai.r.JA, ai.s.SPECIFIC, xi.ja.WARCRY })
90+
end
91+
92+
mob:addGambit(ai.t.SELF, { ai.c.NOT_STATUS, xi.effect.MIGAWARI }, { ai.r.MA, ai.s.SPECIFIC, xi.magic.spell.MIGAWARI_ICHI })
93+
mob:addGambit(ai.t.SELF, { ai.c.NOT_STATUS, xi.effect.COPY_IMAGE }, { ai.r.MA, ai.s.HIGHEST, xi.magic.spellFamily.UTSUSEMI })
94+
mob:addGambit(ai.t.TARGET, { ai.c.NOT_HAS_TOP_ENMITY, 0 }, { ai.r.MA, ai.s.HIGHEST, xi.magic.spellFamily.HOJO }, 30)
95+
mob:addGambit(ai.t.TARGET, { ai.c.NOT_HAS_TOP_ENMITY, 0 }, { ai.r.MA, ai.s.HIGHEST, xi.magic.spellFamily.KURAYAMI }, 30)
8196

8297
mob:setTrustTPSkillSettings(ai.tp.ASAP, ai.s.RANDOM)
8398

scripts/actions/spells/trust/amchuchu.lua

Lines changed: 70 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,13 @@
11
-----------------------------------
22
-- Trust: Amchuchu
3+
-- Possesses Inspiration (50% Fast Cast effect during Vallation, is party-wide during Valiance), Converts 5% of Physical Damage Taken to MP.
4+
-- Only casts enhancing spells on herself.
5+
-- Uses Embolden when casting Protect.
6+
-- She can rapidly generate Volatile Enmity for initial threat or recovery from enmity reset attacks with a cornucopia of abilties and spells like Provoke, Flash, and Foil.
7+
-- Uses Runes resisting the element of the current day. After taking magic damage, uses the appropriate Bar-spell and changes runes.
8+
-- Uses One for All in response to enemies casting high-tier damaging spells.
9+
-- Magic Bursts Level 4 Light or Level 4 Darkness skillchains using Lunge.
10+
-- Holds up to 3000 TP to close skillchains. Weapon skills are a lower priority,
311
-----------------------------------
412
---@type TSpellTrust
513
local spellObject = {}
@@ -18,40 +26,69 @@ spellObject.onMobSpawn = function(mob)
1826
mob:addMobMod(xi.mobMod.CAN_PARRY, 3)
1927

2028
mob:addMod(xi.mod.INSPIRATION_FAST_CAST, 50)
29+
mob:addMod(xi.mod.ENMITY, 15)
30+
mob:addMod(xi.mod.DMG, -500) -- Damage Taken -5%
31+
mob:addMod(xi.mod.HPP, 10)
32+
mob:addMod(xi.mod.MPP, 10)
2133

22-
-----------------------------------
23-
-- Gambits
24-
-----------------------------------
25-
-- 1 condition
26-
mob:addGambit(ai.t.SELF, { ai.c.NOT_HAS_TOP_ENMITY, 0 }, { ai.r.JA, ai.s.SPECIFIC, xi.ja.PROVOKE })
27-
mob:addGambit(ai.t.TARGET, { ai.c.CASTING_ELE_MA_AOE, 0 }, { ai.r.JA, ai.s.SPECIFIC, xi.ja.ONE_FOR_ALL })
28-
mob:addGambit(ai.t.TARGET, { ai.c.CASTING_ELE_MA_AOE, 0 }, { ai.r.JA, ai.s.SPECIFIC, xi.ja.VALIANCE })
29-
mob:addGambit(ai.t.TARGET, { ai.c.NOT_STATUS, xi.effect.FLASH }, { ai.r.MA, ai.s.SPECIFIC, xi.magic.spell.FLASH })
30-
mob:addGambit(ai.t.SELF, { ai.c.NOT_STATUS, xi.effect.PHALANX }, { ai.r.MA, ai.s.SPECIFIC, xi.magic.spell.PHALANX })
31-
mob:addGambit(ai.t.SELF, { ai.c.NO_MAX_RUNE, 0 }, { ai.r.JA, ai.s.RUNE_DAY, xi.ja.IGNIS })
32-
mob:addGambit(ai.t.SELF, { ai.c.HPP_LT, 50 }, { ai.r.JA, ai.s.SPECIFIC, xi.ja.VIVACIOUS_PULSE })
33-
mob:addGambit(ai.t.SELF, { ai.c.NOT_STATUS, xi.effect.SWORDPLAY }, { ai.r.JA, ai.s.SPECIFIC, xi.ja.SWORDPLAY })
34-
mob:addGambit(ai.t.SELF, { ai.c.NOT_STATUS, xi.effect.FOIL }, { ai.r.MA, ai.s.SPECIFIC, xi.magic.spell.FOIL })
35-
mob:addGambit(ai.t.SELF, { ai.c.NOT_STATUS, xi.effect.EMBOLDEN }, { ai.r.JA, ai.s.SPECIFIC, xi.ja.EMBOLDEN })
36-
mob:addGambit(ai.t.SELF, { ai.c.NOT_STATUS, xi.effect.PROTECT }, { ai.r.MA, ai.s.HIGHEST, xi.magic.spellFamily.PROTECT })
37-
mob:addGambit(ai.t.SELF, { ai.c.NOT_STATUS, xi.effect.SHELL }, { ai.r.MA, ai.s.HIGHEST, xi.magic.spellFamily.SHELL })
38-
mob:addGambit(ai.t.SELF, { ai.c.NOT_STATUS, xi.effect.BERSERK }, { ai.r.JA, ai.s.SPECIFIC, xi.ja.BERSERK })
39-
mob:addGambit(ai.t.SELF, { ai.c.HPP_LT, 75 }, { ai.r.JA, ai.s.SPECIFIC, xi.ja.BATTUTA })
40-
mob:addGambit(ai.t.TARGET, { ai.c.LUNGE_MB_AVAILABLE, 0 }, { ai.r.JA, ai.s.SPECIFIC, xi.ja.LUNGE })
41-
mob:addGambit(ai.t.TARGET, { ai.c.LUNGE_MB_AVAILABLE, 0 }, { ai.r.JA, ai.s.SPECIFIC, xi.ja.SWIPE })
42-
mob:addGambit(ai.t.TARGET, { ai.c.CAST_ELE_MA_SELF, xi.effect.VALLATION }, { ai.r.JA, ai.s.SPECIFIC, xi.ja.VALLATION })
43-
44-
-- 2 conditions
45-
mob:addGambit(ai.t.TARGET, { { ai.c.CAST_ELE_MA_SELF, 0 }, { ai.c.NEED_ELE_BAREFFECT, 0 }, }, { ai.r.MA, ai.s.DEF_BAR_ELEMENT, 0 })
46-
mob:addGambit(ai.t.SELF, { { ai.c.NOT_STATUS, xi.effect.REGEN }, { ai.c.HPP_LT, 75 }, }, { ai.r.MA, ai.s.HIGHEST, xi.magic.spellFamily.REGEN })
47-
mob:addGambit(ai.t.SELF, { { ai.c.NOT_STATUS, xi.effect.REFRESH }, { ai.c.MPP_LT, 75 }, }, { ai.r.MA, ai.s.SPECIFIC, xi.magic.spell.REFRESH })
48-
49-
-- 3 conditions
50-
mob:addGambit(
51-
ai.t.SELF,
52-
{ { ai.c.NOT_STATUS, xi.effect.STONESKIN }, { ai.c.HPP_LT, 75 }, { ai.c.MPP_GTE, 50 }, },
53-
{ ai.r.MA, ai.s.SPECIFIC, xi.magic.spell.STONESKIN }
54-
)
34+
local lvl = mob:getMainLvl()
35+
36+
if lvl >= 5 then
37+
mob:addGambit(ai.t.SELF, { ai.c.NO_MAX_RUNE, 0 }, { ai.r.JA, ai.s.RUNE_DAY, xi.ja.IGNIS })
38+
end
39+
40+
if lvl >= 10 then
41+
mob:addGambit(ai.t.TARGET, { ai.c.ALWAYS, 0 }, { ai.r.JA, ai.s.SPECIFIC, xi.ja.PROVOKE })
42+
mob:addGambit(ai.t.TARGET, { ai.c.CAST_ELE_MA_SELF, xi.effect.VALLATION }, { ai.r.JA, ai.s.SPECIFIC, xi.ja.VALLATION })
43+
end
44+
45+
if lvl >= 20 then
46+
mob:addGambit(ai.t.SELF, { ai.c.NOT_STATUS, xi.effect.SWORDPLAY }, { ai.r.JA, ai.s.SPECIFIC, xi.ja.SWORDPLAY })
47+
end
48+
49+
if lvl >= 25 then
50+
mob:addGambit(ai.t.TARGET, { ai.c.LUNGE_MB_AVAILABLE, 0 }, { ai.r.JA, ai.s.SPECIFIC, xi.ja.LUNGE })
51+
mob:addGambit(ai.t.TARGET, { ai.c.LUNGE_MB_AVAILABLE, 0 }, { ai.r.JA, ai.s.SPECIFIC, xi.ja.SWIPE })
52+
end
53+
54+
if lvl >= 30 then
55+
mob:addGambit(ai.t.SELF, { ai.c.NOT_STATUS, xi.effect.BERSERK }, { ai.r.JA, ai.s.SPECIFIC, xi.ja.BERSERK })
56+
end
57+
58+
if lvl >= 50 then
59+
mob:addGambit(ai.t.TARGET, { ai.c.CASTING_ELE_MA_AOE, 0 }, { ai.r.JA, ai.s.SPECIFIC, xi.ja.VALIANCE })
60+
end
61+
62+
if lvl >= 60 then
63+
mob:addGambit(ai.t.SELF, { ai.c.NOT_STATUS, xi.effect.EMBOLDEN }, { ai.r.JA, ai.s.SPECIFIC, xi.ja.EMBOLDEN })
64+
end
65+
66+
if lvl >= 65 then
67+
mob:addGambit(ai.t.SELF, { ai.c.HPP_LT, 50 }, { ai.r.JA, ai.s.SPECIFIC, xi.ja.VIVACIOUS_PULSE })
68+
end
69+
70+
if lvl >= 75 then
71+
mob:addGambit(ai.t.SELF, { ai.c.HPP_LT, 75 }, { ai.r.JA, ai.s.SPECIFIC, xi.ja.BATTUTA })
72+
end
73+
74+
if lvl >= 95 then
75+
mob:addGambit(ai.t.TARGET, { ai.c.CASTING_ELE_MA_AOE, 0 }, { ai.r.JA, ai.s.SPECIFIC, xi.ja.ONE_FOR_ALL })
76+
end
77+
78+
mob:addGambit(ai.t.TARGET, { ai.c.NOT_STATUS, xi.effect.FLASH }, { ai.r.MA, ai.s.SPECIFIC, xi.magic.spell.FLASH })
79+
mob:addGambit(ai.t.SELF, { ai.c.NOT_STATUS, xi.effect.PHALANX }, { ai.r.MA, ai.s.SPECIFIC, xi.magic.spell.PHALANX })
80+
mob:addGambit(ai.t.SELF, { ai.c.NOT_STATUS, xi.effect.FOIL }, { ai.r.MA, ai.s.SPECIFIC, xi.magic.spell.FOIL })
81+
mob:addGambit(ai.t.SELF, { ai.c.NOT_STATUS, xi.effect.PROTECT }, { ai.r.MA, ai.s.HIGHEST, xi.magic.spellFamily.PROTECT })
82+
mob:addGambit(ai.t.SELF, { ai.c.NOT_STATUS, xi.effect.SHELL }, { ai.r.MA, ai.s.HIGHEST, xi.magic.spellFamily.SHELL })
83+
84+
mob:addGambit(ai.t.TARGET, { { ai.c.CAST_ELE_MA_SELF, 0 }, { ai.c.NEED_ELE_BAREFFECT, 0 }, }, { ai.r.MA, ai.s.DEF_BAR_ELEMENT, 0 })
85+
mob:addGambit(ai.t.SELF, { { ai.c.NOT_STATUS, xi.effect.REGEN }, { ai.c.HPP_LT, 75 }, }, { ai.r.MA, ai.s.HIGHEST, xi.magic.spellFamily.REGEN })
86+
mob:addGambit(ai.t.SELF, { { ai.c.NOT_STATUS, xi.effect.REFRESH }, { ai.c.MPP_LT, 75 }, }, { ai.r.MA, ai.s.SPECIFIC, xi.magic.spell.REFRESH })
87+
88+
mob:addGambit(ai.t.SELF, {
89+
{ ai.c.NOT_STATUS, xi.effect.STONESKIN },
90+
{ ai.c.HPP_LT, 75 },
91+
{ ai.c.MPP_GTE, 50 }, }, { ai.r.MA, ai.s.SPECIFIC, xi.magic.spell.STONESKIN })
5592

5693
mob:setTrustTPSkillSettings(ai.tp.CLOSER_UNTIL_TP, ai.s.HIGHEST, 3000)
5794

0 commit comments

Comments
 (0)