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