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