· 9 years ago · Nov 28, 2016, 12:58 AM
1-------------------------------------------------------------------------------------------------------------------
2-- Setup functions for this job. Generally should not be modified.
3-------------------------------------------------------------------------------------------------------------------
4
5-- Initialization function for this job file.
6function get_sets()
7 mote_include_version = 2
8
9 -- Load and initialize the include file.
10 include('Mote-Include.lua')
11 include('organizer-lib')
12
13end
14
15
16-- Setup vars that are user-independent. state.Buff vars initialized here will automatically be tracked.
17
18-------------------------------------------------------------------------------------------------------------------
19-- User setup functions for this job. Recommend that these be overridden in a sidecar file.
20-------------------------------------------------------------------------------------------------------------------
21
22-- Setup vars that are user-dependent. Can override this function in a sidecar file.
23function job_setup()
24 state.OffenseMode:options('None', 'Locked')
25 state.CastingMode:options('Normal', 'Mid', 'Resistant', 'CMP','DeatMB')
26 state.IdleMode:options('Normal', 'PDT')
27
28 MagicBurstIndex = 0
29 state.MagicBurst = M(false, 'Magic Burst')
30 state.ConsMP = M(false, 'AF Body')
31 state.DeatCast = M(false, 'Death Mode')
32 element_table = L{'Earth','Wind','Ice','Fire','Water','Lightning'}
33 state.AOE = M(false, 'AOE')
34
35 lowTierNukes = S{'Stone', 'Water', 'Aero', 'Fire', 'Blizzard', 'Thunder',
36 'Stone II', 'Water II', 'Aero II', 'Fire II', 'Blizzard II', 'Thunder II',
37 'Stone III', 'Water III', 'Aero III', 'Fire III', 'Blizzard III', 'Thunder III',
38 'Stonega', 'Waterga', 'Aeroga', 'Firaga', 'Blizzaga', 'Thundaga',
39 'Stonega II', 'Waterga II', 'Aeroga II', 'Firaga II', 'Blizzaga II', 'Thundaga II'}
40
41 degrade_array = {
42 ['Fire'] = {'Fire','Fire II','Fire III','Fire IV','Fire V','Fire VI'},
43 ['Firega'] = {'Firaga','Firaga II','Firaga III','Firaja'},
44 ['Ice'] = {'Blizzard','Blizzard II','Blizzard III','Blizzard IV','Blizzard V','Blizzard VI'},
45 ['Icega'] = {'Blizzaga','Blizzaga II','Blizzaga III','Blizzaja'},
46 ['Wind'] = {'Aero','Aero II','Aero III','Aero IV','Aero V','Aero VI'},
47 ['Windga'] = {'Aeroga','Aeroga II','Aeroga III','Aeroja'},
48 ['Earth'] = {'Stone','Stone II','Stone III','Stone IV','Stone V','Stone VI'},
49 ['Earthga'] = {'Stonega','Stonega II','Stonega III','Stoneja'},
50 ['Lightning'] = {'Thunder','Thunder II','Thunder III','Thunder IV','Thunder V','Thunder VI'},
51 ['Lightningga'] = {'Thundaga','Thundaga II','Thundaga III','Thundaja'},
52 ['Water'] = {'Water', 'Water II','Water III', 'Water IV','Water V','Water VI'},
53 ['Waterga'] = {'Waterga','Waterga II','Waterga III','Waterja'},
54 ['Aspirs'] = {'Aspir','Aspir II','Aspir III'},
55 ['Sleepgas'] = {'Sleepga','Sleepga II'}
56 }
57 -- Additional local binds
58 -- Additional local binds
59 send_command('bind f9 gs c cycle CastingMode')
60 send_command('bind !` gs c toggle MagicBurst')
61 send_command('bind ^` gs c toggle ConsMP')
62 send_command('bind @` gs c toggle DeatCast')
63 send_command('bind f10 gs c cycle IdleMode')
64
65 send_command('bind !k input /klimaform')
66
67 send_command('bind !o input /myrkr <me>')
68
69 send_command('bind @Q input //send inamorata /fullcircle')
70
71 send_command('bind !p input //send inamorata /follow Diaboli')
72 --Melee Ina
73
74 send_command('bind !] input //send inamorata /indifocus')
75 send_command('bind ![ input //send inamorata /geolanguor bt')
76 send_command('bind !L input //send inamorata /dia2 bt')
77
78 --Magic Ina
79 send_command('bind ^] input //send inamorata /indiacumen')
80 send_command('bind ^[ input //send inamorata /geomalaise bt')
81 send_command('bind !L input //send inamorata /dia2 bt')
82
83 --Def Ina
84 send_command('bind @] input //send inamorata /indiattunement')
85 send_command('bind @[ input //send inamorata /geovex bt')
86 send_command('bind !L input //send inamorata /dia2 bt')
87
88 --Augments
89 gear.nuke_cape = { name="Taranus's Cape", augments={'INT+20','Mag. Acc+20 /Mag. Dmg.+20','INT+10','"Mag.Atk.Bns."+10',}}
90 gear.FC_cape = { name="Taranus's Cape", augments={'INT+20','Mag. Acc+20 /Mag. Dmg.+20','"Fast Cast"+10',}}
91
92 gear.aspir_head = {name= ""}
93 gear.aspir_body = {name="Amalric Doublet"}
94 gear.aspir_hands = {name="Amalric Gages"}
95 gear.aspir_legs = {name="Amalric Slops"}
96 gear.aspir_feet = { name="Merlinic Crackows", augments={'Mag. Acc.+22 "Mag.Atk.Bns."+22','"Occult Acumen"+3','INT+6','Mag. Acc.+10','"Mag.Atk.Bns."+5',}}
97
98 gear.fc_head = { name="Merlinic Hood", augments={'"Mag.Atk.Bns."+30','"Fast Cast"+5','Mag. Acc.+4',}}
99 gear.fc_feet = { name="Merlinic Crackows", augments={'Mag. Acc.+7','"Fast Cast"+6','CHR+5','"Mag.Atk.Bns."+3',}}
100
101 gear.nuke_head ={ name="Merlinic Hood", augments={'Mag. Acc.+20 "Mag.Atk.Bns."+20','Magic burst mdg.+11%','INT+2','Mag. Acc.+1','"Mag.Atk.Bns."+12',}}
102 gear.nuke_body = {name="Merlinic Jubbah"}
103 gear.nuke_hands = { name="Amalric Gages"}
104 gear.nuke_legs={ name="Merlinic Shalwar", augments={'Mag. Acc.+25 "Mag.Atk.Bns."+25','Magic dmg. taken -4%','INT+3','Mag. Acc.+9',}}
105 gear.nuke_feet = { name="Jhakri Pigaches +1"}
106
107 gear.burst_head ={ name="Merlinic Hood", augments={'Mag. Acc.+20 "Mag.Atk.Bns."+20','Magic burst mdg.+11%','INT+2','Mag. Acc.+1','"Mag.Atk.Bns."+12',}}
108 gear.burst_body = {name = "Merlinic Jubbah"}
109 gear.burst_hands = {name="Amalric Gages"}
110 gear.burst_legs = { name="Merlinic Shalwar", augments={'Mag. Acc.+25 "Mag.Atk.Bns."+25','Magic dmg. taken -4%','INT+3','Mag. Acc.+9',}}
111 gear.burst_feet = { name="Jhakri Pigaches +1"}
112
113
114 organizer_items = {aeonic="Khatvanga"}
115 select_default_macro_book()
116end
117
118-- Called when this job file is unloaded (eg: job change)
119function user_unload()
120 send_command('unbind ^`')
121 send_command('unbind @`')
122end
123
124
125-- Define sets and vars used by this job file.
126function init_gear_sets()
127 --------------------------------------
128 -- Start defining the sets
129 --------------------------------------
130
131 ---- Precast Sets ----
132
133 -- Precast sets to enhance JAs
134 sets.precast.JA['Mana Wall'] = {back="Taranus's cape",feet="Wicce Sabots +1"}
135
136 sets.precast.JA.Manafont = {body="Sorcerer's Coat +2"}
137
138 -- equip to maximize HP (for Tarus) and minimize MP loss before using convert
139 sets.precast.JA.Convert = {}
140
141
142 -- Fast cast sets for spells
143
144 sets.precast.FC = {
145 main="Lathi",
146 sub="Niobid Strap",
147 ammo="Sapience Orb",
148 head={ name="Merlinic Hood", augments={'"Mag.Atk.Bns."+30','"Fast Cast"+5','Mag. Acc.+4',}},
149 body="Shango Robe",
150 hands={ name="Merlinic Dastanas", augments={'"Fast Cast"+6','CHR+9','"Mag.Atk.Bns."+12',}},
151 legs={ name="Psycloth Lappas", augments={'MP+80','Mag. Acc.+15','"Fast Cast"+7',}},
152 feet={ name="Merlinic Crackows", augments={'Mag. Acc.+7','"Fast Cast"+6','CHR+5','"Mag.Atk.Bns."+3',}},
153 neck="Baetyl Pendant",
154 waist="Witful Belt",
155 left_ear="Enchntr. Earring +1",
156 right_ear="Loquac. Earring",
157 left_ring="Rahab Ring",
158 right_ring="Weather. Ring",
159 back="Perimede Cape",
160 }
161
162 sets.precast.SCHFC = {
163 main="Lathi",
164 sub="Niobid Strap",
165 ammo="Impatiens",
166 head={ name="Merlinic Hood", augments={'"Mag.Atk.Bns."+30','"Fast Cast"+5','Mag. Acc.+4',}},
167 body="Shango Robe",
168 hands={ name="Merlinic Dastanas", augments={'"Fast Cast"+6','CHR+9','"Mag.Atk.Bns."+12',}},
169 legs={ name="Psycloth Lappas", augments={'MP+80','Mag. Acc.+15','"Fast Cast"+7',}},
170 feet={ name="Merlinic Crackows", augments={'Mag. Acc.+7','"Fast Cast"+6','CHR+5','"Mag.Atk.Bns."+3',}},
171 neck="Baetyl Pendant",
172 waist="Witful Belt",
173 left_ear="Enchntr. Earring +1",
174 right_ear="Loquac. Earring",
175 left_ring="Lebeche Ring",
176 right_ring="Weather. Ring",
177 back={ name="Taranus's Cape", augments={'INT+20','Mag. Acc+20 /Mag. Dmg.+20','"Fast Cast"+10',}},
178}
179
180 sets.precast.FC['Enhancing Magic'] = set_combine(sets.precast.FC, {waist="Siegel Sash"})
181 sets.precast.FC['Enfeebling Magic'] = sets.precast.FC
182 sets.precast.FC['Elemental Magic'] = set_combine(sets.precast.FC, {ear1="Barkarole earring"})
183 sets.precast.FC['Healing Magic'] = set_combine(sets.precast.FC, {body="Heka's Kalasiris",legs="Doyen pants", back="Pahtli Cape"})
184
185
186 --Death sets
187 -- Default Idle set while Death Mode is on
188 sets.DeatCastIdle = {
189 main="Grioavolr",
190 sub="Niobid Strap",
191 ammo="Pemphredo Tathlum",
192 head="Pixie Hairpin +1",
193 neck="Loricate Torque +1",
194 ear1="Barkaro. Earring",
195 ear2="Etiolation Earring",
196 body="Amalric Doublet",
197 hands="Amalric Gages",
198 left_ring="Defending Ring",
199 right_ring={ name="Dark Ring", augments={'Phys. dmg. taken -3%','Spell interruption rate down -5%','Breath dmg. taken -5%',}},
200 back="Bane Cape",
201 waist="Fucho-no-obi",
202 legs="Amalric Slops",
203 feet="Amalric Nails"
204 }
205 -- Default FC set when Death Mode is on and no matching DeatMB subtable is found for specific spell
206 ---More specific FC sets under Death Mode could be implemented, but I really saw no point.
207 sets.precast.FC.DeatMB = {
208 main="Grioavolr",
209 sub="Niobid Strap",
210 ammo="Pemphredo Tathlum",
211 head="Amalric Coif",
212 neck="Baetyl Pendant",
213 ear1="Etiolation Earring",
214 ear2="Loquacious Earring",
215 body="Shango Robe",
216 hands="Otomi Gloves",
217 ring1="Mephitas's Ring +1",
218 ring2="Weatherspoon Ring",
219 back=gear.FC_cape,
220 waist="Witful Belt",
221 legs="Psycloth Lappas",
222 feet="Amalric Nails"
223 }
224 -- Base midcast table for actually casting 'Death'
225 sets.midcast['Death'] = {}
226 -- Set to be imposed on top of above base Death set when Death Mode and Magic Burst Mode are both on
227 sets.MB_death = {
228 main="Grioavolr",
229 sub="Niobid Strap",
230 ammo="Strobilus",
231 head="Pixie Hairpin +1",
232 neck="Mizu. Kubikazari",
233 ear1="Barkaro. Earring",
234 ear2="Static Earring",
235 body="Amalric Doublet",
236 hands="Amalric Gages",
237 ring1="Mephitas's Ring +1",
238 ring2="Archon Ring",
239 back=gear.nuke_cape,
240 waist="Hachirin-No-Obi",
241 legs="Amalric Slops",
242 feet="Amalric Nails"
243 }
244
245 -- Weaponskill sets
246 -- Default set for any weaponskill that isn't any more specifically defined
247 sets.precast.WS = {}
248 -- Specific weaponskill sets. Uses the base set if an appropriate WSMod version isn't found.
249 sets.precast.WS['Myrkr'] = {
250 ammo="Pemphredo Tathlum",
251 head="Amalric Coif",
252 neck="Sanctity Necklace",
253 ear1="Etiolation Earring",
254 ear2="Moonshade Earring",
255 body="Amalric Doublet",
256 hands="Otomi Gloves",
257 ring1="Metamorph Ring",
258 ring2="Mephitas's Ring +1",
259 back="Bane Cape",
260 waist="Shinjutsu-no-obi",
261 legs="Amalric Slops",
262 feet="Amalric Nails"}
263
264 ---- Midcast Sets ----
265 sets.midcast.FastRecast = {
266 ammo="",
267 head="Amalric Coif",
268 neck="",
269 ear1="Etiolation Earring",
270 ear2="Loquacious Earring",
271 body="Shango Robe",
272 hands="Merlinic Dastanas",
273 ring1="Rahab Ring",
274 ring2="Weatherspoon Ring",
275 back="Bane Cape",
276 waist="Witful Belt",
277 legs="Psycloth Lappas",
278 feet="Merlinic Crackows"}
279
280 sets.midcast['Healing Magic'] = {main="",sub="",
281 head="Vanya Hood", neck="Nodens Gorget", ear1="", ear2="Loquacious Earring",
282 body="Vanya Robe", hands="Telchine Gloves", ring1="", ring2="",
283 back="Pahtli Cape", waist="" , legs="Gyve Trousers", feet=""}
284
285 sets.midcast['Enhancing Magic'] = {main="", sub="", ammo="",
286 head="Befouled Crown", neck="Incanter's Torque", ear1="", ear2="",
287 body="", hands="", ring1="", ring2="",
288 back="",waist="",legs="",feet=""}
289
290 sets.midcast.Refresh = set_combine(sets.midcast['Enhancing Magic'], {waist="Gishdubar Sash"})
291 sets.midcast.Haste = {}
292 sets.midcast.Phalanx = {}
293 sets.midcast.Aquaveil = {}
294 sets.midcast.Stoneskin = set_combine(sets.midcast['Enhancing Magic'], {neck="Nodens Gorget", waist="Siegel Sash"})
295
296 sets.midcast['Enfeebling Magic'] = {
297 main="Lathi",
298 sub="Niobid Strap",
299 ammo="Plumose Sachet",
300 head="Befouled Crown",
301 body="Vanya Robe",
302 hands={ name="Amalric Gages", augments={'INT+10','Mag. Acc.+15','"Mag.Atk.Bns."+15',}},
303 legs={ name="Psycloth Lappas", augments={'MP+80','Mag. Acc.+15','"Fast Cast"+7',}},
304 feet={ name="Medium's Sabots", augments={'MP+45','MND+9','"Conserve MP"+5','"Cure" potency +4%',}},
305 neck="Incanter's Torque",
306 waist="Luminary Sash",
307 left_ear="Barkaro. Earring",
308 right_ear="Hermetic Earring",
309 right_ring="Weather. Ring",
310 back={ name="Taranus's Cape", augments={'INT+20','Mag. Acc+20 /Mag. Dmg.+20','INT+10','"Mag.Atk.Bns."+10',}},
311 }
312
313 sets.midcast['Enfeebling Magic'].Mid = set_combine(sets.midcast['Enfeebling Magic'],{})
314 sets.midcast['Enfeebling Magic'].Resistant = set_combine(sets.midcast['Enfeebling Magic'].Mid, { })
315 sets.midcast.ElementalEnfeeble = sets.midcast['Enfeebling Magic']
316
317 sets.midcast['Dark Magic'] = {
318 ammo="Plumose Sachet",
319 head="Amalric Coif",
320 neck="Incanter's Torque", --+10--
321 ear1="Etiolation Earring",
322 ear2="Loquacious Earring",
323 body="Shango Robe", --+15--
324 hands="Arch. Gloves",
325 ring1="Rahab Ring",
326 ring2="",
327 back="Bane Cape", --+2--
328 waist="Witful Belt",
329 legs="Psycloth Lappas",
330 feet="Merlinic Crackows"}
331
332 sets.midcast.Drains = set_combine(sets.midcast['Dark Magic'], {main="Lathi", sub="Niobid Strap", ammo="Pemphredo Tathlum",
333 head="Pixie Hairpin +1", neck="Incanter's Torque", ear2="Friomisi Earring", ear1="Barkaro. Earring",
334 body="Amalric Doublet", hands="Amalric Gages", ring1="Archon Ring", ring2="Evanescence Ring",
335 back="Bane Cape",waist="Fucho-no-obi",legs="Amalric Slops",feet="Merlinic Crackows"})
336
337 sets.midcast.Aspirs = sets.midcast.Drains
338 sets.midcast.Stun = {}
339
340 -- Elemental Magic sets
341
342 sets.midcast['Elemental Magic'] = {
343 main="Lathi",
344 sub="Niobid Strap",
345 ammo="Pemphredo Tathlum",
346 head=gear.nuke_head,
347 neck="Saevus Pendant +1",
348 ear1="Barkaro. Earring",
349 ear2="Friomisi Earring",
350 body=gear.nuke_body,
351 hands=gear.nuke_hands,
352 ring1="Shiva Ring +1",
353 ring2="Shiva Ring +1",
354 back=gear.nuke_cape,
355 waist="Refoccilation Stone",
356 legs=gear.nuke_legs,
357 feet=gear.nuke_feet,
358 }
359
360 sets.midcast['Elemental Magic'].Mid = set_combine(sets.midcast['Elemental Magic'], {
361 main="Lathi",
362 sub="Niobid Strap",
363 ammo="Pemphredo Tathlum",
364 head="Jhakri Coronal +1",
365 neck="Sanctity Necklace",
366 ear1="Barkaro. Earring",
367 ear2="Hermetic Earring",
368 body=gear.nuke_body,
369 hands="Amalric Gages",
370 ring1="Shiva Ring +1",
371 ring2="Shiva Ring +1",
372 back=gear.nuke_cape,
373 waist="Refoccilation Stone",
374 legs=gear.nuke_legs,
375 feet=gear.nuke_feet
376 })
377
378 sets.midcast['Elemental Magic'].Resistant = set_combine(sets.midcast['Elemental Magic'].Mid, {neck="Sanctity Necklace"})
379 sets.midcast['Elemental Magic'].CMP = set_combine(sets.midcast['Elemental Magic'], {})
380
381 sets.midcast['Elemental Magic'].HighTierNuke = set_combine(sets.midcast['Elemental Magic'], {})
382 sets.midcast['Elemental Magic'].HighTierNuke.Mid = set_combine(sets.midcast['Elemental Magic'].HighTierNuke, {})
383 sets.midcast['Elemental Magic'].HighTierNuke.Resistant = set_combine(sets.midcast['Elemental Magic'].HighTierNuke.Mid, {})
384 sets.midcast['Elemental Magic'].HighTierNuke.CMP = set_combine(sets.midcast['Elemental Magic'].HighTierNuke, {})
385
386 sets.midcast.Impact = {head=empty,body="Twilight Cloak"}
387
388 --Death Midcast subtables
389 ---The foremost set for each magic skill exists to fall back on while Death Mode is on, and no more specifically defined set
390 ---exists for the spell
391 ----To add more specific sets, as seen below on line 163, define a specific set for either the spell's name or corresponding spellMap
392 ----(This set can be the empty set '{}', if you don't care to use it outside of Death Mode or something)
393 ----e.g. sets.midcast.Tornado = {}
394 ----Then define another set subtable, e.g. sets.midcast.Tornado.DeatMB = {what-have-you}
395 sets.midcast.FastRecast.DeatMB = sets.precast.FC.DeatMB
396
397 ---Death Enhancing Magic
398 sets.midcast['Enhancing Magic'].DeatMB = set_combine(sets.precast.FC.DeatMB, {})
399 ----Death Refresh specific
400 sets.midcast.Refresh.DeatMB = set_combine(sets.midcast['Enhancing Magic'].DeatMB, {head="Amalric Coif"})
401
402 ---Death Enfeebling Magic
403 sets.midcast['Enfeebling Magic'].DeatMB = set_combine(sets.precast.FC.DeatMB, {})
404
405 ---Death Dark Magic
406 sets.midcast['Dark Magic'].DeatMB = set_combine(sets.precast.FC.DeatMB, {})
407 ----Death Aspirs spellMap specific
408 sets.midcast.Aspirs.DeatMB = set_combine(sets.precast.FC.DeatMB, {})
409
410 ---Death Elemental Magic
411 sets.midcast['Elemental Magic'].DeatMB = set_combine(sets.precast.FC.DeatMB, {})
412
413 ---Death Healing Magic
414 sets.midcast['Healing Magic'].DeatMB = set_combine(sets.precast.FC.DeatMB, {})
415
416 --Set to be overlaid on top of the default midcast set for the spell you're casting when Magic Burst mode is toggled on
417 --(excluding when Death Mode is on.[see: sets.MB_death])
418 sets.magic_burst = {
419 ammo="Pemphredo Tathlum",
420 head={ name="Merlinic Hood", augments={'Mag. Acc.+20 "Mag.Atk.Bns."+20','Magic burst mdg.+11%','INT+2','Mag. Acc.+1','"Mag.Atk.Bns."+12',}},
421 body={ name="Merlinic Jubbah", augments={'Mag. Acc.+24 "Mag.Atk.Bns."+24','Magic dmg. taken -3%','CHR+1','Mag. Acc.+14','"Mag.Atk.Bns."+1',}},
422 hands={ name="Amalric Gages", augments={'INT+10','Mag. Acc.+15','"Mag.Atk.Bns."+15',}},
423 legs={ name="Merlinic Shalwar", augments={'Mag. Acc.+20 "Mag.Atk.Bns."+20','Magic burst mdg.+6%','INT+7','"Mag.Atk.Bns."+14',}},
424 feet={ name="Merlinic Crackows", augments={'Mag. Acc.+25 "Mag.Atk.Bns."+25','Magic burst mdg.+9%','INT+7',}},
425 neck="Mizu. Kubikazari",
426 waist="Refoccilation Stone",
427 left_ear="Barkaro. Earring",
428 right_ear="Friomisi Earring",
429 left_ring="Mujin Band",
430 right_ring="Shiva Ring +1",
431 back={ name="Taranus's Cape", augments={'INT+20','Mag. Acc+20 /Mag. Dmg.+20','INT+10','"Mag.Atk.Bns."+10',}},
432 }
433
434 --Set to be equipped when Day/Weather match current spell element
435 sets.Obi = {waist='Hachirin-no-Obi'}
436
437 -- Resting sets
438 sets.resting = {main="",ammo="",
439 head="Orvail Corona +1",neck="Eidolon Pendant", ear1="", ear2="",
440 body="Jhakri Robe +1",hands="",ring1="Angha Ring",ring2="Paguroidea Ring",
441 back="Felicitas Cape +1", waist="Austerity Belt +1",legs="Menhit Slacks",feet=""}
442
443 -- Idle sets
444 -- Normal refresh idle set
445 sets.idle = {main="Lathi",
446 sub="Niobid Strap",
447 ammo="Brigantia Pebble",
448 head="Befouled Crown",
449 neck="Loricate Torque +1", --6%--
450 ear1="Etiolation Earring",
451 ear2="Infused Earring",
452 body="Witching Robe",
453 hands="Hagondes Cuffs +1", --4%--
454 left_ring="Defending Ring",
455 right_ring={ name="Dark Ring", augments={'Phys. dmg. taken -3%','Spell interruption rate down -5%','Breath dmg. taken -5%',}},
456 back="Umbra Cape", --6%--
457 waist="Fucho-no-obi",
458 legs="Assid. Pants +1",
459 feet="Herald's Gaiters"
460 }
461
462 -- Idle mode that keeps PDT gear on, but doesn't prevent normal gear swaps for precast/etc.
463 sets.idle.PDT = {
464 ammo="Brigantia Pebble",
465 head="Hagondes Hat +1", --3%--
466 neck="Loricate Torque +1", --6%--
467 ear1="Etiolation Earring",
468 ear2="Infused Earring",
469 body="Hagondes Coat +1", --4%--
470 hands="Hagondes Cuffs +1", --4%--
471 left_ring="Defending Ring",
472 right_ring={ name="Dark Ring", augments={'Phys. dmg. taken -3%','Spell interruption rate down -5%','Breath dmg. taken -5%',}},
473 back="Umbra Cape", --6%--
474 waist="",
475 legs="Hagondes Pants +1", --3%--
476 feet="Hag. Sabots +1"} --4%--}
477
478 -- Town gear.
479 sets.idle.Town = sets.idle
480
481 sets.TreasureHunter = {waist="Chaac Belt"}
482
483 -- Set for Conserve MP toggle, puts AF body on
484 sets.ConsMP = {body="Spaekona's coat +1"}
485
486 -- Defense sets
487 sets.defense.PDT = {}
488
489 sets.defense.MDT = {}
490
491 sets.Kiting = {feet="Herald's gaiters"}
492
493 sets.latent_refresh = {waist="Fucho-no-obi"}
494
495 -- Buff sets: Gear that needs to be worn to actively enhance a current player buff.
496
497 sets.buff['Mana Wall'] = {back="Taranus's cape",feet="Wicce Sabots +1"}
498
499 -- Engaged sets
500
501 -- Variations for TP weapon and (optional) offense/defense modes. Code will fall back on previous
502 -- sets if more refined versions aren't defined.
503 -- If you create a set with both offense and defense modes, the offense mode should be first.
504 -- EG: sets.engaged.Dagger.Accuracy.Evasion
505
506 -- Normal melee group
507 --!!!!!Commented out until I make rule to handle engaged set during death mode (will use customize_melee_set)
508 --[[sets.engaged = {}]]
509
510end
511-------------------------------------------------------------------------------------------------------------------
512-- Job-specific hooks for standard casting events.
513-------------------------------------------------------------------------------------------------------------------
514
515-- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
516-- Set eventArgs.useMidcastGear to true if we want midcast gear equipped on precast.
517
518function job_precast(spell, action, spellMap, eventArgs)
519 enable('feet','back')
520 if state.DeatCast.value then
521 if spell.action_type == 'Magic' then
522 classes.CustomClass = 'DeatMB'
523 end
524 elseif spell.type == 'BlackMagic' and spell.target.type == 'MONSTER' then
525 refine_various_spells(spell, action, spellMap, eventArgs)
526 end
527end
528
529function job_post_precast(spell, action, spellMap, eventArgs)
530 if state.DeatCast.value then
531 return
532 elseif spell.english == "Impact" then
533 equip({head=empty,body="Twilight Cloak"})
534 elseif spellMap == 'Cure' or spellMap == 'Curaga' then
535 gear.default.obi_waist = "Hachirin-no-obi"
536 end
537 if player.sub_job =='SCH' and spell.action_type == 'Magic' then
538 equip({back=gear.FC_cape})
539 end
540end
541
542-- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
543function job_midcast(spell, action, spellMap, eventArgs)
544 if state.DeatCast.value then
545 if spell.action_type == 'Magic' then
546 if spell.english == 'Death' then
547 equip(sets.midcast['Death'])
548 else
549 classes.CustomClass = 'DeatMB'
550 state.CastingMode:set('DeatMB')
551 end
552 end
553 end
554end
555
556function job_post_midcast(spell, action, spellMap, eventArgs)
557 if spell.action_type == 'Magic' and state.MagicBurst.value then
558 if state.DeatCast.value then
559 if spell.english == 'Death' then
560 equip(sets.MB_death)
561 elseif spell.skill == 'Elemental Magic' then
562 if state.MagicBurst.value and sets.magic_burst then
563 local equipSet = sets.magic_burst
564 if equipSet[spell.english] then
565 equipSet = equipSet[spell.english]
566 end
567 if equipSet[spellMap] then
568 equipSet = equipSet[spellMap]
569 end
570 if equipSet[state.CastingMode.value] then
571 equipSet = equipSet[state.CastingMode.value]
572 end
573 equip(equipSet)
574 end
575 end
576 elseif spell.skill == 'Elemental Magic' then
577 if state.MagicBurst.value and sets.magic_burst then
578 local equipSet = sets.magic_burst
579 if equipSet[spell.english] then
580 equipSet = equipSet[spell.english]
581 end
582 if equipSet[spellMap] then
583 equipSet = equipSet[spellMap]
584 end
585 if equipSet[state.CastingMode.value] then
586 equipSet = equipSet[state.CastingMode.value]
587 end
588 equip(equipSet)
589 end
590 end
591 end
592 if spell.element == world.day_element or spell.element == world.weather_element then
593 if string.find(spell.english,'helix') then
594 equip(sets.midcast.Helix)
595 else
596 equip(sets.Obi)
597 end
598 end
599 if spell.skill == 'Elemental Magic' and state.ConsMP.value and not state.DeatCast.value then
600 equip(sets.ConsMP)
601 end
602end
603
604function job_aftercast(spell, action, spellMap, eventArgs)
605 -- Lock feet after using Mana Wall.
606 if buffactive['Mana Wall'] and not state.DeatCast.value then
607 enable('feet','back')
608 equip(sets.buff['Mana Wall'])
609 disable('feet','back')
610 end
611 if not spell.interrupted then
612 if spell.english == "Sleep II" or spell.english == "Sleepga II" then -- Sleep II Countdown --
613 send_command('wait 60;input /echo Sleep Effect: [WEARING OFF IN 30 SEC.];wait 15;input /echo Sleep Effect: [WEARING OFF IN 15 SEC.];wait 10;input /echo Sleep Effect: [WEARING OFF IN 5 SEC.]')
614 elseif spell.english == "Sleep" or spell.english == "Sleepga" then -- Sleep & Sleepga Countdown --
615 send_command('wait 30;input /echo Sleep Effect: [WEARING OFF IN 30 SEC.];wait 15;input /echo Sleep Effect: [WEARING OFF IN 15 SEC.];wait 10;input /echo Sleep Effect: [WEARING OFF IN 5 SEC.]')
616 elseif spell.english == "Break" then -- Break Countdown --
617 send_command('wait 25;input /echo Break Effect: [WEARING OFF IN 5 SEC.]')
618 elseif spell.english == "Paralyze" then -- Paralyze Countdown --
619 send_command('wait 115;input /echo Paralyze Effect: [WEARING OFF IN 5 SEC.]')
620 elseif spell.english == "Slow" then -- Slow Countdown --
621 send_command('wait 115;input /echo Slow Effect: [WEARING OFF IN 5 SEC.]')
622 end
623 end
624
625end
626
627function nuke(spell, action, spellMap, eventArgs)
628 if player.target.type == 'MONSTER' then
629 if state.AOE.value then
630 send_command('input /ma "'..degrade_array[element_table:append('ga')][#degrade_array[element_table:append('ga')]]..'" '..tostring(player.target.name))
631 else
632 send_command('input /ma "'..degrade_array[element_table][#degrade_array[element_table]]..'" '..tostring(player.target.name))
633 end
634 else
635 add_to_chat(5,'A Monster is not targetted.')
636 end
637end
638
639function job_self_command(commandArgs, eventArgs)
640 if commandArgs[1] == 'element' then
641 if commandArgs[2] then
642 if element_table:contains(commandArgs[2]) then
643 element_table = commandArgs[2]
644 add_to_chat(5, 'Current Nuke element ['..element_table..']')
645 else
646 add_to_chat(5,'Incorrect Element value')
647 return
648 end
649 else
650 add_to_chat(5,'No element specified')
651 end
652 elseif commandArgs[1] == 'nuke' then
653 nuke()
654 end
655end
656
657
658function refine_various_spells(spell, action, spellMap, eventArgs)
659 local aspirs = S{'Aspir','Aspir II','Aspir III'}
660 local sleeps = S{'Sleep','Sleep II'}
661 local sleepgas = S{'Sleepga','Sleepga II'}
662
663 local newSpell = spell.english
664 local spell_recasts = windower.ffxi.get_spell_recasts()
665 local cancelling = 'All '..spell.english..' spells are on cooldown. Cancelling spell casting.'
666
667 local spell_index
668
669 if spell_recasts[spell.recast_id] > 0 then
670 if spell.skill == 'Elemental Magic' then
671 local ele = tostring(spell.element):append('ga')
672 --local ele2 = string.sub(ele,1,-2)
673 if table.find(degrade_array[ele],spell.name) then
674 spell_index = table.find(degrade_array[ele],spell.name)
675 if spell_index > 1 then
676 newSpell = degrade_array[ele][spell_index - 1]
677 add_to_chat(8,spell.name..' Canceled: ['..player.mp..'/'..player.max_mp..'MP::'..player.mpp..'%] Casting '..newSpell..' instead.')
678 send_command('@input /ma '..newSpell..' '..tostring(spell.target.raw))
679 eventArgs.cancel = true
680 end
681 else
682 spell_index = table.find(degrade_array[spell.element],spell.name)
683 if spell_index > 1 then
684 newSpell = degrade_array[spell.element][spell_index - 1]
685 add_to_chat(8,spell.name..' Canceled: ['..player.mp..'/'..player.max_mp..'MP::'..player.mpp..'%] Casting '..newSpell..' instead.')
686 send_command('@input /ma '..newSpell..' '..tostring(spell.target.raw))
687 eventArgs.cancel = true
688 end
689 end
690 elseif aspirs:contains(spell.name) then
691 spell_index = table.find(degrade_array['Aspirs'],spell.name)
692 if spell_index > 1 then
693 newSpell = degrade_array['Aspirs'][spell_index - 1]
694 add_to_chat(8,spell.name..' Canceled: ['..player.mp..'/'..player.max_mp..'MP::'..player.mpp..'%] Casting '..newSpell..' instead.')
695 send_command('@input /ma '..newSpell..' '..tostring(spell.target.raw))
696 eventArgs.cancel = true
697 end
698 elseif sleepgas:contains(spell.name) then
699 spell_index = table.find(degrade_array['Sleepgas'],spell.name)
700 if spell_index > 1 then
701 newSpell = degrade_array['Sleepgas'][spell_index - 1]
702 add_to_chat(8,spell.name..' Canceled: ['..player.mp..'/'..player.max_mp..'MP::'..player.mpp..'%] Casting '..newSpell..' instead.')
703 send_command('@input /ma '..newSpell..' '..tostring(spell.target.raw))
704 eventArgs.cancel = true
705 end
706 end
707 end
708end
709
710-------------------------------------------------------------------------------------------------------------------
711-- Job-specific hooks for non-casting events.
712-------------------------------------------------------------------------------------------------------------------
713
714
715-- Called when a player gains or loses a buff.
716-- buff == buff gained or lost
717-- gain == true if the buff was gained, false if it was lost.
718function job_buff_change(buff, gain)
719 -- Unlock feet when Mana Wall buff is lost.
720 if buff == "Mana Wall" and not gain then
721 enable('feet','back')
722 handle_equipping_gear(player.status)
723 end
724 if buff == "Commitment" and not gain then
725 equip({ring2="Capacity Ring"})
726 if player.equipment.right_ring == "Capacity Ring" then
727 disable("ring2")
728 else
729 enable("ring2")
730 end
731 end
732end
733
734-- Handle notifications of general user state change.
735function job_state_change(stateField, newValue, oldValue)
736 if stateField == 'Offense Mode' then
737 if newValue == 'Locked' then
738 disable('main','sub','range')
739 else
740 enable('main','sub','range')
741 end
742 end
743 if stateField == 'Death Mode' then
744 if newValue == true then
745 state.OffenseMode:set('Locked')
746 predeathcastmode = state.CastingMode.value
747 --[[Insert 'equip(<set consisting of Death weapon and sub, to have them automatically lock when changing into Death mode>)']]
748 elseif newValue == false then
749 state.CastingMode:set(predeathcastmode)
750 end
751 end
752end
753
754
755-------------------------------------------------------------------------------------------------------------------
756-- User code that supplements standard library decisions.
757-------------------------------------------------------------------------------------------------------------------
758--[[function job_update(cmdParams, eventArgs)
759 job_display_current_state(eventArgs)
760 eventArgs.handled = true
761end]]
762
763function display_current_job_state(eventArgs)
764 eventArgs.handled = true
765 local msg = ''
766
767 if state.OffenseMode.value ~= 'None' then
768 msg = msg .. 'Combat ['..state.OffenseMode.value..']'
769
770 if state.CombatForm.has_value then
771 msg = msg .. ' (' .. state.CombatForm.value .. ')'
772 end
773 msg = msg .. ', '
774 end
775 --[[if state.HybridMode.value ~= 'Normal' then
776 msg = msg .. '/' .. state.HybridMode.value
777 end]]
778
779 msg = msg .. 'Casting ['..state.CastingMode.value..'], Idle ['..state.IdleMode.value..']'
780
781 if state.MagicBurst.value then
782 msg = msg .. ', MB [ON]'
783 else
784 msg = msg .. ', MB [OFF]'
785 end
786 if state.ConsMP.value then
787 msg = msg .. ', AF Body [ON]'
788 else
789 msg = msg .. ', AF Body [OFF]'
790 end
791 if state.DeatCast.value then
792 msg = msg .. ', Death Mode [ON]'
793 else
794 msg = msg .. ', Death Mode [OFF]'
795 end
796 if state.DefenseMode.value ~= 'None' then
797 msg = msg .. ', ' .. 'Defense: ' .. state.DefenseMode.value .. ' (' .. state[state.DefenseMode.value .. 'DefenseMode'].value .. ')'
798 end
799
800 if state.Kiting.value then
801 msg = msg .. ', Kiting [ON]'
802 end
803
804 if state.PCTargetMode.value ~= 'default' then
805 msg = msg .. ', Target PC: '..state.PCTargetMode.value
806 end
807
808 if state.SelectNPCTargets.value == true then
809 msg = msg .. ', Target NPCs'
810 end
811
812 add_to_chat(122, msg)
813end
814
815-- Custom spell mapping.
816function job_get_spell_map(spell, default_spell_map)
817 if spell.skill == 'Elemental Magic' and default_spell_map ~= 'ElementalEnfeeble' then
818 if lowTierNukes:contains(spell.english) then
819 return 'LowTierNuke'
820 else
821 return 'HighTierNuke'
822 end
823 end
824end
825
826-- Modify the default idle set after it was constructed.
827--- This is where I handle Death Mode Idle set construction, rather than weave it into the Idle state var
828function customize_idle_set(idleSet)
829 if state.DeatCast.value then
830 idleSet = set_combine(idleSet, sets.DeatCastIdle)
831 end
832 if player.mpp < 51 then
833 idleSet = set_combine(idleSet, sets.latent_refresh)
834 end
835 if buffactive['Mana Wall'] then
836 idleSet = set_combine(idleSet, sets.buff['Mana Wall'])
837 end
838 return idleSet
839end
840--- This is where I handle Death Mode Melee set modifications
841function customize_melee_set(meleeSet)
842 if state.DeatCast.value then
843 meleeSet = set_combine(meleeSet, sets.DeatCastIdle)
844 end
845 if buffactive['Mana Wall'] then
846 meleeSet = set_combine(meleeSet, sets.buff['Mana Wall'])
847 end
848 return meleeSet
849end
850
851
852-------------------------------------------------------------------------------------------------------------------
853-- Utility functions specific to this job.
854-------------------------------------------------------------------------------------------------------------------
855
856-- Select default macro book on initial load or subjob change.
857function select_default_macro_book()
858 set_macro_page(1, 15)
859end