bongarippa

NIN

Aug 5th, 2017 (edited)
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 16.29 KB | None | 0 0
  1. -------------------------------------------------------------------------------------------------------------------
  2. -- Setup functions for this job. Generally should not be modified.
  3. -------------------------------------------------------------------------------------------------------------------
  4.  
  5. -- Initialization function for this job file.
  6. function get_sets()
  7. include('organizer-lib')
  8. mote_include_version = 2
  9.  
  10. -- Load and initialize the include file.
  11. include('Mote-Include.lua')
  12. end
  13.  
  14.  
  15. -- Setup vars that are user-independent. state.Buff vars initialized here will automatically be tracked.
  16. function job_setup()
  17. state.Buff.Migawari = buffactive.migawari or false
  18. state.Buff.Doom = buffactive.doom or false
  19. state.Buff.Yonin = buffactive.Yonin or false
  20. state.Buff.Innin = buffactive.Innin or false
  21. state.Buff.Futae = buffactive.Futae or false
  22.  
  23. determine_haste_group()
  24. end
  25.  
  26. -------------------------------------------------------------------------------------------------------------------
  27. -- User setup functions for this job. Recommend that these be overridden in a sidecar file.
  28. -------------------------------------------------------------------------------------------------------------------
  29.  
  30. -- Setup vars that are user-dependent. Can override this function in a sidecar file.
  31. function user_setup()
  32. state.OffenseMode:options('Normal', 'Acc')
  33. state.HybridMode:options('Normal', 'Evasion', 'PDT')
  34. state.WeaponskillMode:options('Normal', 'Acc', 'Mod')
  35. state.CastingMode:options('Normal', 'Resistant')
  36. state.PhysicalDefenseMode:options('PDT', 'Evasion')
  37.  
  38. gear.MovementFeet = {name="Danzo Sune-ate"}
  39. gear.DayFeet = "Danzo Sune-ate"
  40. gear.NightFeet = "Hachiya Kyahan"
  41.  
  42. select_movement_feet()
  43. select_default_macro_book()
  44. end
  45.  
  46.  
  47. -- Define sets and vars used by this job file.
  48. function init_gear_sets()
  49. --------------------------------------
  50. -- Precast sets
  51. --------------------------------------
  52.  
  53. -- Precast sets to enhance JAs
  54. sets.precast.JA['Mijin Gakure'] = {legs="Mochizuki Hakama"}
  55. sets.precast.JA['Futae'] = {legs="Iga Tekko +2"}
  56. sets.precast.JA['Sange'] = {legs="Mochizuki Chainmail"}
  57.  
  58. -- Waltz set (chr and vit)
  59. sets.precast.Waltz = {}
  60. -- Uk'uxkaj Cap, Daihanshi Habaki
  61.  
  62. -- Don't need any special gear for Healing Waltz.
  63. sets.precast.Waltz['Healing Waltz'] = {}
  64.  
  65. -- Set for acc on steps, since Yonin drops acc a fair bit
  66. sets.precast.Step = {}
  67.  
  68. sets.precast.Flourish1 = {waist="Chaac Belt"}
  69.  
  70. -- Fast cast sets for spells
  71.  
  72. sets.precast.FC = {ammo="Sapience Orb",
  73. head={ name="Herculean Helm", augments={'Accuracy+25','Weapon skill damage +4%','DEX+2','Attack+6',}},
  74. body={ name="Taeon Tabard", augments={'Pet: Accuracy+17 Pet: Rng. Acc.+17','Pet: Crit.hit rate +4','Crit. hit damage +2%',}},
  75. hands={ name="Leyline Gloves", augments={'Accuracy+15','Mag. Acc.+15','"Mag.Atk.Bns."+15','"Fast Cast"+3',}},
  76. neck="Orunmila's Torque",
  77. left_ear="Loquac. Earring",
  78. left_ring="Rahab Ring",
  79. right_ring="Kishar Ring"}
  80. sets.precast.FC.Utsusemi = set_combine(sets.precast.FC, {neck="Magoraga Beads",body="Mochizuki Chainmail"})
  81.  
  82. -- Snapshot for ranged
  83. sets.precast.RA = {}
  84.  
  85. -- Weaponskill sets
  86. -- Default set for any weaponskill that isn't any more specifically defined
  87. sets.precast.WS = {ammo="Seeth. Bomblet +1",
  88. head={ name="Herculean Helm", augments={'Accuracy+25','Weapon skill damage +4%','DEX+2','Attack+6',}},
  89. body={ name="Herculean Vest", augments={'Accuracy+8 Attack+8','Weapon skill damage +3%','STR+9','Accuracy+8','Attack+14',}},
  90. hands={ name="Herculean Gloves", augments={'Accuracy+26','"Triple Atk."+4','STR+6',}},
  91. legs="Hiza. Hizayoroi +2",
  92. feet={ name="Herculean Boots", augments={'Accuracy+27','"Triple Atk."+4','MND+8','Attack+15',}},
  93. neck="Fotia Gorget",
  94. waist="Fotia Belt",
  95. left_ear={ name="Moonshade Earring", augments={'Accuracy+4','TP Bonus +25',}},
  96. right_ear="Brutal Earring",
  97. left_ring="Ilabrat Ring",
  98. right_ring="Regal Ring",
  99. back="Letalis Mantle"}
  100. sets.precast.WS.Acc = set_combine(sets.precast.WS, {})
  101.  
  102. -- Specific weaponskill sets. Uses the base set if an appropriate WSMod version isn't found.
  103. sets.precast.WS['Blade: Jin'] = set_combine(sets.precast.WS,
  104. {head={ name="Adhemar Bonnet", augments={'DEX+10','AGI+10','Accuracy+15',}},
  105. body={ name="Herculean Vest", augments={'Accuracy+22','"Triple Atk."+4','DEX+5','Attack+11',}},
  106. legs={ name="Samnuha Tights", augments={'STR+10','DEX+10','"Dbl.Atk."+3','"Triple Atk."+3',}},
  107. left_ring="Epona's Ring"})
  108.  
  109. sets.precast.WS['Blade: Hi'] = set_combine(sets.precast.WS,
  110. {feet={ name="Herculean Boots", augments={'Attack+21','Crit. hit damage +3%','STR+10','Accuracy+9',}},
  111. right_ear="Infused Earring"})
  112.  
  113. sets.precast.WS['Blade: Shun'] = set_combine(sets.precast.WS, {head={ name="Adhemar Bonnet", augments={'DEX+10','AGI+10','Accuracy+15',}},
  114. body={ name="Herculean Vest", augments={'Accuracy+22','"Triple Atk."+4','DEX+5','Attack+11',}},
  115. legs={ name="Samnuha Tights", augments={'STR+10','DEX+10','"Dbl.Atk."+3','"Triple Atk."+3',}},
  116. left_ring="Epona's Ring"})
  117.  
  118. sets.precast.WS['Blade: Ten'] = set_combine(sets.precast.WS, {feet={ name="Herculean Boots", augments={'Attack+21','Crit. hit damage +3%','STR+10','Accuracy+9',}},
  119. right_ear="Odnowa Earring +1"})
  120.  
  121.  
  122. sets.precast.WS['Aeolian Edge'] = {}
  123.  
  124.  
  125. --------------------------------------
  126. -- Midcast sets
  127. --------------------------------------
  128.  
  129. sets.midcast.FastRecast = {}
  130.  
  131. sets.midcast.Utsusemi = set_combine(sets.midcast.SelfNinjutsu, {feet="Iga Kyahan +2"})
  132.  
  133. sets.midcast.ElementalNinjutsu = {}
  134.  
  135. sets.midcast.ElementalNinjutsu.Resistant = set_combine(sets.midcast.Ninjutsu, {})
  136.  
  137. sets.midcast.NinjutsuDebuff = {}
  138.  
  139. sets.midcast.NinjutsuBuff = {}
  140.  
  141. sets.midcast.RA = {}
  142. -- Hachiya Hakama/Thurandaut Tights +1
  143.  
  144. --------------------------------------
  145. -- Idle/resting/defense/etc sets
  146. --------------------------------------
  147.  
  148. -- Resting sets
  149. sets.resting = {}
  150.  
  151. -- Idle sets
  152. sets.idle = {ammo="Staunch Tathlum +1",
  153. head={ name="Dampening Tam", augments={'DEX+5','Accuracy+8','Mag. Acc.+8',}},
  154. body="Hiza. Haramaki +1",
  155. hands="Umuthi Gloves",
  156. legs={ name="Herculean Trousers", augments={'Attack+30','Phys. dmg. taken -4%','STR+6','Accuracy+9',}},
  157. feet="Danzo Sune-Ate",
  158. neck="Twilight Torque",
  159. waist="Flume Belt +1",
  160. left_ear="Genmei Earring",
  161. right_ear="Odnowa Earring +1",
  162. left_ring="Paguroidea Ring",
  163. right_ring="Defending Ring",
  164. back="Moonbeam Cape"}
  165.  
  166. sets.idle.Town = set_combine(sets.idle, {head="Glory Crown",body="Hachiryu Haramaki"})
  167.  
  168. sets.idle.Weak = {}
  169.  
  170. -- Defense sets
  171. sets.defense.Evasion = {}
  172.  
  173. sets.defense.PDT = {}
  174.  
  175. sets.defense.MDT = {}
  176.  
  177.  
  178. sets.Kiting = {feet=gear.MovementFeet}
  179.  
  180.  
  181. --------------------------------------
  182. -- Engaged sets
  183. --------------------------------------
  184.  
  185. -- Variations for TP weapon and (optional) offense/defense modes. Code will fall back on previous
  186. -- sets if more refined versions aren't defined.
  187. -- If you create a set with both offense and defense modes, the offense mode should be first.
  188. -- EG: sets.engaged.Dagger.Accuracy.Evasion
  189.  
  190. -- Normal melee group
  191. sets.engaged = {ammo="Yamarang",
  192. head={ name="Adhemar Bonnet", augments={'DEX+10','AGI+10','Accuracy+15',}},
  193. body={ name="Adhemar Jacket", augments={'DEX+10','AGI+10','Accuracy+15',}},
  194. hands={ name="Herculean Gloves", augments={'Accuracy+26','"Triple Atk."+4','STR+6',}},
  195. legs={ name="Samnuha Tights", augments={'STR+10','DEX+10','"Dbl.Atk."+3','"Triple Atk."+3',}},
  196. feet={ name="Herculean Boots", augments={'Accuracy+27','"Triple Atk."+4','MND+8','Attack+15',}},
  197. neck="Lissome Necklace",
  198. waist="Reiki Yotai",
  199. left_ear="Suppanomimi",
  200. right_ear="Brutal Earring",
  201. left_ring="Epona's Ring",
  202. right_ring="Hetairoi Ring",
  203. back="Letalis Mantle"}
  204.  
  205. sets.engaged.Acc = set_combine(sets.engaged, {legs="Hiza. Hizayoroi +2",
  206. right_ear="Telos Earring",
  207. right_ring="Ramuh Ring +1"})
  208.  
  209. sets.engaged.Evasion = set_combine(sets.engaged, {ammo="Yamarang",
  210. head={ name="Herculean Helm", augments={'Accuracy+25','Weapon skill damage +4%','DEX+2','Attack+6',}},
  211. body="Hiza. Haramaki +1",
  212. legs={ name="Herculean Trousers", augments={'Attack+30','Phys. dmg. taken -4%','STR+6','Accuracy+9',}},
  213. right_ring="Vengeful Ring"})
  214.  
  215. sets.engaged.Acc.Evasion = set_combine(sets.engaged.Evasion, {})
  216.  
  217. sets.engaged.PDT = {}
  218.  
  219. sets.engaged.Acc.PDT = {}
  220.  
  221. -- Custom melee group: High Haste (~20% DW)
  222. sets.engaged.HighHaste = set_combine(set.engaged, {})
  223.  
  224. sets.engaged.Acc.HighHaste = {}
  225.  
  226. sets.engaged.Evasion.HighHaste = {}
  227.  
  228.  
  229. sets.engaged.Acc.Evasion.HighHaste = {}
  230.  
  231. sets.engaged.PDT.HighHaste = {}
  232.  
  233. sets.engaged.Acc.PDT.HighHaste = {}
  234.  
  235. -- Custom melee group: Embrava Haste (7% DW)
  236. sets.engaged.EmbravaHaste = set_combine(sets.engaged, {body={ name="Herculean Vest", augments={'Accuracy+22','"Triple Atk."+4','DEX+5','Attack+11',}},
  237. left_ear="Telos Earring"})
  238.  
  239. sets.engaged.Acc.EmbravaHaste = set_combine(sets.engaged.Acc, {body={name="Herculean Vest", augments={'Accuracy+22','"Triple Atk."+4','DEX+5','Attack+11',}}})
  240.  
  241. sets.engaged.Evasion.EmbravaHaste = {}
  242.  
  243. sets.engaged.Acc.Evasion.EmbravaHaste = {}
  244.  
  245. sets.engaged.PDT.EmbravaHaste = {}
  246.  
  247. sets.engaged.Acc.PDT.EmbravaHaste = {}
  248.  
  249. -- Custom melee group: Max Haste (0% DW)
  250. sets.engaged.MaxHaste = set_combine(sets.engaged, {body={ name="Herculean Vest", augments={'Accuracy+22','"Triple Atk."+4','DEX+5','Attack+11',}},
  251. waist="Windbuffet Belt +1",
  252. left_ear="Telos Earring"})
  253.  
  254. sets.engaged.Acc.MaxHaste = set_combine(sets.engaged.Acc, {body={ name="Herculean Vest", augments={'Accuracy+22','"Triple Atk."+4','DEX+5','Attack+11',}},
  255. waist="Windbuffet Belt +1",})
  256.  
  257. sets.engaged.Evasion.MaxHaste = {}
  258.  
  259. sets.engaged.Acc.Evasion.MaxHaste = {}
  260.  
  261. sets.engaged.PDT.MaxHaste = {}
  262.  
  263. sets.engaged.Acc.PDT.MaxHaste = {}
  264.  
  265.  
  266. --------------------------------------
  267. -- Custom buff sets
  268. --------------------------------------
  269.  
  270. sets.buff.Migawari = {body="Iga Ningi +2"}
  271. sets.buff.Doom = {ring2="Saida Ring"}
  272. sets.buff.Yonin = {}
  273. sets.buff.Innin = {}
  274. end
  275.  
  276. -------------------------------------------------------------------------------------------------------------------
  277. -- Job-specific hooks for standard casting events.
  278. -------------------------------------------------------------------------------------------------------------------
  279.  
  280. -- Run after the general midcast() is done.
  281. -- eventArgs is the same one used in job_midcast, in case information needs to be persisted.
  282. function job_post_midcast(spell, action, spellMap, eventArgs)
  283. if state.Buff.Doom then
  284. equip(sets.buff.Doom)
  285. end
  286. end
  287.  
  288.  
  289. -- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
  290. function job_aftercast(spell, action, spellMap, eventArgs)
  291. if not spell.interrupted and spell.english == "Migawari: Ichi" then
  292. state.Buff.Migawari = true
  293. end
  294. end
  295.  
  296. -------------------------------------------------------------------------------------------------------------------
  297. -- Job-specific hooks for non-casting events.
  298. -------------------------------------------------------------------------------------------------------------------
  299.  
  300. -- Called when a player gains or loses a buff.
  301. -- buff == buff gained or lost
  302. -- gain == true if the buff was gained, false if it was lost.
  303. function job_buff_change(buff, gain)
  304. -- If we gain or lose any haste buffs, adjust which gear set we target.
  305. if S{'haste','march','embrava','haste samba'}:contains(buff:lower()) then
  306. determine_haste_group()
  307. handle_equipping_gear(player.status)
  308. elseif state.Buff[buff] ~= nil then
  309. handle_equipping_gear(player.status)
  310. end
  311. end
  312.  
  313. function job_status_change(new_status, old_status)
  314. if new_status == 'Idle' then
  315. select_movement_feet()
  316. end
  317. end
  318.  
  319.  
  320. -------------------------------------------------------------------------------------------------------------------
  321. -- User code that supplements standard library decisions.
  322. -------------------------------------------------------------------------------------------------------------------
  323.  
  324. -- Get custom spell maps
  325. function job_get_spell_map(spell, default_spell_map)
  326. if spell.skill == "Ninjutsu" then
  327. if not default_spell_map then
  328. if spell.target.type == 'SELF' then
  329. return 'NinjutsuBuff'
  330. else
  331. return 'NinjutsuDebuff'
  332. end
  333. end
  334. end
  335. end
  336.  
  337. -- Modify the default idle set after it was constructed.
  338. function customize_idle_set(idleSet)
  339. if state.Buff.Migawari then
  340. idleSet = set_combine(idleSet, sets.buff.Migawari)
  341. end
  342. if state.Buff.Doom then
  343. idleSet = set_combine(idleSet, sets.buff.Doom)
  344. end
  345. return idleSet
  346. end
  347.  
  348.  
  349. -- Modify the default melee set after it was constructed.
  350. function customize_melee_set(meleeSet)
  351. if state.Buff.Migawari then
  352. meleeSet = set_combine(meleeSet, sets.buff.Migawari)
  353. end
  354. if state.Buff.Doom then
  355. meleeSet = set_combine(meleeSet, sets.buff.Doom)
  356. end
  357. return meleeSet
  358. end
  359.  
  360. -- Called by the default 'update' self-command.
  361. function job_update(cmdParams, eventArgs)
  362. select_movement_feet()
  363. determine_haste_group()
  364. end
  365.  
  366. -------------------------------------------------------------------------------------------------------------------
  367. -- Utility functions specific to this job.
  368. -------------------------------------------------------------------------------------------------------------------
  369.  
  370. function determine_haste_group()
  371. -- We have three groups of DW in gear: Hachiya body/legs, Iga head + Patentia Sash, and DW earrings
  372.  
  373. -- Standard gear set reaches near capped delay with just Haste (77%-78%, depending on HQs)
  374.  
  375. -- For high haste, we want to be able to drop one of the 10% groups.
  376. -- Basic gear hits capped delay (roughly) with:
  377. -- 1 March + Haste
  378. -- 2 March
  379. -- Haste + Haste Samba
  380. -- 1 March + Haste Samba
  381. -- Embrava
  382.  
  383. -- High haste buffs:
  384. -- 2x Marches + Haste Samba == 19% DW in gear
  385. -- 1x March + Haste + Haste Samba == 22% DW in gear
  386. -- Embrava + Haste or 1x March == 7% DW in gear
  387.  
  388. -- For max haste (capped magic haste + 25% gear haste), we can drop all DW gear.
  389. -- Max haste buffs:
  390. -- Embrava + Haste+March or 2x March
  391. -- 2x Marches + Haste
  392.  
  393. -- So we want four tiers:
  394. -- Normal DW
  395. -- 20% DW -- High Haste
  396. -- 7% DW (earrings) - Embrava Haste (specialized situation with embrava and haste, but no marches)
  397. -- 0 DW - Max Haste
  398.  
  399. classes.CustomMeleeGroups:clear()
  400.  
  401. if buffactive.embrava and (buffactive.march == 2 or (buffactive.march and buffactive.haste)) then
  402. classes.CustomMeleeGroups:append('MaxHaste')
  403. elseif buffactive.march == 2 and buffactive.haste then
  404. classes.CustomMeleeGroups:append('MaxHaste')
  405. elseif buffactive.embrava and (buffactive.haste or buffactive.march) then
  406. classes.CustomMeleeGroups:append('EmbravaHaste')
  407. elseif buffactive.march == 1 and buffactive.haste and buffactive['haste samba'] then
  408. classes.CustomMeleeGroups:append('HighHaste')
  409. elseif buffactive.march == 2 then
  410. classes.CustomMeleeGroups:append('HighHaste')
  411. end
  412. end
  413.  
  414.  
  415. function select_movement_feet()
  416. if world.time >= 17*60 or world.time < 7*60 then
  417. gear.MovementFeet.name = gear.NightFeet
  418. else
  419. gear.MovementFeet.name = gear.DayFeet
  420. end
  421. end
  422.  
  423.  
  424. -- Select default macro book on initial load or subjob change.
  425. function select_default_macro_book()
  426. -- Default macro set/book
  427. if player.sub_job == 'DNC' then
  428. set_macro_page(4, 17)
  429. elseif player.sub_job == 'THF' then
  430. set_macro_page(5, 17)
  431. else
  432. set_macro_page(1, 17)
  433. end
  434. end
Add Comment
Please, Sign In to add comment