LauEra

WAR.lua

Mar 17th, 2017
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 19.32 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.  
  7. function get_sets()
  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.  
  17. function job_setup()
  18.             state.Buff['Aftermath'] = buffactive['Aftermath: Lv.1'] or
  19.             buffactive['Aftermath: Lv.2'] or
  20.             buffactive['Aftermath: Lv.3'] or false
  21.             state.Buff['Mighty Strikes'] = buffactive['Mighty Strikes'] or false
  22. end
  23.  
  24.  
  25. -------------------------------------------------------------------------------------------------------------------
  26. -- User setup functions for this job.  Recommend that these be overridden in a sidecar file.
  27. -------------------------------------------------------------------------------------------------------------------
  28.  
  29. -- Setup vars that are user-dependent.  Can override this function in a sidecar file.
  30.  
  31. function user_setup()
  32.     state.OffenseMode:options('Normal', 'Axe', 'Dual', 'PDT')
  33.     state.WeaponskillMode:options('Normal', 'ACC')
  34.     state.IdleMode:options('Normal', 'Regen')
  35. end
  36.  
  37. function init_gear_sets()
  38.    
  39.     --------------------------------------
  40.     -- Precast sets
  41.     --------------------------------------
  42.    
  43.     -- Sets to apply to arbitrary JAs
  44.     sets.precast.JA.Berserk = {feet="Warrior's Calligae"}
  45.    
  46.     sets.precast.JA['Aggressor'] = {body="Warrior's Lorica"}
  47.    
  48.     sets.precast.JA['Warcry'] = {head="Warrior's Mask"}
  49.  
  50.     sets.precast.JA['Provoke'] = {head="Warrior's Mask",body="Hydra Haubert",hands="Hydra Moufles",
  51.         legs="Warrior's Cuisses",feet="Warrior's Calligae",neck="Ritter Gorget",waist="Warwolf Belt",
  52.         back="Cerb. Mantle +1"}
  53.    
  54.     -- Sets for fast cast gear for spells
  55.    
  56.     sets.precast.FC = {ammo="Bibiki Seashell",
  57.         head="Walahra Turban",neck="Evasion Torque",ear1="Triton Earring",ear2="Loquacious Earring",
  58.         body="Scorpion Harness +1",hands="Dusk Gloves +1",ring1="Blitz Ring",ring2="Defending Ring",
  59.         back="Boxer's Mantle",waist="Velocious Belt",legs="Byakko's Haidate",feet="Dusk Ledelsens +1"}
  60.  
  61.     -- Fast cast gear for specific spells or spell maps
  62.    
  63.     sets.precast.FC.Utsusemi = sets.precast.FC
  64.  
  65.     -- Weaponskill sets
  66.    
  67.     sets.precast.WS = {ammo="Fire Bomblet",
  68.         head="Hecatomb Cap +1",neck="Peacock Amulet",ear1="Harmonius Earring",ear2="Brutal Earring",
  69.         body="Armada Hauberk",hands="Hecatomb Mittens +1",ring1="Flame Ring",ring2="Rajas Ring",
  70.         back="Cerberus Mantle +1",waist="Warwolf Belt",legs="Hachiryu Haidate",feet="Hecatomb Leggings +1"}
  71.    
  72.     sets.precast.WS.ACC = {ammo="Fire Bomblet",
  73.         head="Hecatomb Cap +1",neck="Peacock Amulet",ear1="Harmonius Earring Earring",ear2="Brutal Earring",
  74.         body="Armada Hauberk",hands="Hecatomb Mittens +1",ring1="Toreador's Ring",ring2="Rajas Ring",
  75.         back="Cuchulain's Mantle",waist="Warwolf Belt",legs="Hachiryu Haidate",feet="Hecatomb Leggings +1"}
  76.  
  77.    
  78.     -- Specific weaponskill sets.
  79.     --Gorget=Snow/Aqua. Chain=Induration/Reverberation. Mod= STR 50%
  80.    
  81.     sets.precast.WS['Raging Rush'] = set_combine(sets.precast.WS, {neck="Aqua Gorget"})
  82.     sets.precast.WS['Raging Rush'].ACC = set_combine(sets.precast.WS.ACC['Raging Rush'], {})
  83.    
  84.     --DR 20.4% or 52/256. 20/40/60Sec.  Gorget=Flame/Light. Chain=Light/Fusion. Mod= STR 80%
  85.    
  86.     sets.precast.WS['Metatron Torment'] = set_combine(sets.precast.WS, {neck="Flame Gorget"})
  87.     sets.precast.WS['Metatron Torment'].ACC = set_combine(sets.precast.WS.ACC['Metatron Torment'], {neck="Flame Gorget"})
  88.    
  89.     --Gorget=Aqua/Snow. Chain=Distortion/Detonation. Mod= STR 60%/VIT 60%
  90.    
  91.     sets.precast.WS['Steel Cyclone'] = {neck="Snow Gorget"}
  92.     sets.precast.WS['Steel Cyclone'].ACC = set_combine(sets.precast.WS.ACC['Steel Cyclone'], {neck="Breeze Gorget"})
  93.    
  94.     --Gorget=Aqua. Chain=Distortion Mod= STR 50%/VIT 50%
  95.    
  96.     sets.precast.WS['Full Break'] = set_combine(sets.precast.WS, {neck="Aqua Gorget"})
  97.     sets.precast.WS['Full Break'].ACC = set_combine(sets.precast.WS.ACC['Full Break'], {neck="Aqua Gorget"})
  98.    
  99.     --Gorget=Soil. Chain=Scission Mod= STR 50%
  100.    
  101.     sets.precast.WS['Rampage'] = set_combine(sets.precast.WS, {neck="Soil Gorget"})
  102.     sets.precast.WS['Rampage'].ACC = set_combine(sets.precast.WS.ACC['Rampage'], {neck="Soil Gorget",ring1="Toreador's Ring"})
  103.    
  104.     --Gorget=Aqua/Snow. Chain=Distortion/Detonation Mod= STR 73%  
  105.    
  106.     sets.precast.WS['Ruinator'] = set_combine(sets.precast.WS, {neck="Breeze Gorget"})
  107.     sets.precast.WS['Ruinator'].ACC = set_combine(sets.precast.WS.ACC['Ruinator'], {neck="Snow Gorget",ring1="Toreador's Ring"})
  108.    
  109.    
  110.     --Gorget=Shadow/Soil. Chain=Gravitation/Scission Mod= MND 73%  
  111.    
  112.     sets.precast.WS['Requiescat'] = set_combine(sets.precast.WS, {neck="Soil Gorget"})
  113.     sets.precast.WS['Requiescat'].ACC = set_combine(sets.precast.WS.ACC['Requiescat'], {neck="Soil Gorget"})
  114.      
  115.    
  116.     --Gorget=Flame/Light/Thunder. Chain=Fusion/Impact/Scission Mod= MND 73%
  117.    
  118.     sets.precast.WS['Realmrazer'] = set_combine(sets.precast.WS, {neck="Flame Gorget"})
  119.     sets.precast.WS['Realmrazer'].ACC = set_combine(sets.precast.WS.ACC['Realmrazer'], {neck="Flame Gorget",ring1="Toreador's Ring"})
  120.    
  121.    
  122.     sets.precast.WS['Cloudsplitter'] = set_combine(sets.precast.WS, {neck="Soil Gorget"})
  123.     sets.precast.WS['Cloudsplitter'].Acc = set_combine(sets.precast.WS.Acc, {neck="Temperance Torque"})
  124.    
  125.     --------------------------------------
  126.     -- Midcast sets
  127.     --------------------------------------
  128.  
  129.     -- Generic spell recast set
  130.    
  131.     sets.midcast.FastRecast = {ammo="Bibiki Seashell",
  132.         head="Walahra Turban",neck="Evasion Torque",ear1="Triton Earring",ear2="Loquacious Earring",
  133.         body="Scorpion Harness +1",hands="Dusk Gloves +1",ring1="Blitz Ring",ring2="Defending Ring",
  134.         back="Boxer's Mantle",waist="Velocious Belt",legs="Byakko's Haidate",feet="Aurum Sabatons"}
  135.        
  136.     -- Specific spells
  137.    
  138.     sets.midcast.Utsusemi = {ammo="Bibiki Seashell",
  139.         head="Walahra Turban",neck="Evasion Torque",ear1="Triton Earring",ear2="Loquacious Earring",
  140.         body="Scorpion Harness +1",hands="Dusk Gloves +1",ring1="Blitz Ring",ring2="Defending Ring",
  141.         back="Boxer's Mantle",waist="Velocious Belt",legs="Byakko's Haidate",feet="Aurum Sabatons"}
  142.  
  143.    
  144.     --------------------------------------
  145.     -- Idle/resting/defense/etc sets
  146.     --------------------------------------
  147.    
  148.     -- Resting sets
  149.     sets.resting = {}
  150.    
  151.  
  152.     -- Idle sets
  153.    
  154.     sets.idle = {ammo="Fire Bomblet",
  155.         head="Walahra Turban",neck="Temperance Torque",ear1="Brutal Earring",ear2="Ethereal Earring",
  156.         body="Armada Hauberk",hands="Dusk Gloves +1",ring1="Toreador's Ring",ring2="Defending Ring",
  157.         back="Cerberus Mantle +1",waist="Velocious Belt",legs="Byakko's Haidate",feet="Hermes' Sandals"}
  158.  
  159.     sets.idle.Town = {ammo="Fire Bomblet",
  160.         head="Walahra Turban",neck="Temperance Torque",ear1="Ethereal Earring",ear2="Brutal Earring",
  161.         body="Armada Hauberk",hands="Dusk Gloves +1",ring1="Toreador's Ring",ring2="Defending Ring",
  162.         back="Cerberus Mantle +1",waist="Velocious Belt",legs="Byakko's Haidate",feet="Hermes' Sandals"}
  163.    
  164.     sets.idle.Regen = {ammo="Bibiki Seashell",
  165.         head="Walahra Turban",neck="Orochi Nodowa",ear1="Triton Earring",ear2="Ethereal Earring",
  166.         body="Barone Corazza",hands="Dusk Gloves +1",ring1="Hercules' Ring",ring2="Defending Ring",
  167.         back="Boxer's Mantle",waist="Velocious Belt",legs="Byakko's Haidate",feet="Dusk Ledelsens +1"}
  168.    
  169.     sets.idle.Weak = {}
  170.    
  171.     -- Defense sets
  172.    
  173.     sets.defense.PDT = {ammo="Bibiki Seashell",
  174.         head="Darksteel Cap +1",neck="Evasion Torque",ear1="Triton Earring",ear2="Ethereal Earring",
  175.         body="Valhalla Breastplate",hands="Heavy Gauntlets",ring1="Defending Ring",ring2="Jelly Ring",
  176.         back="Boxer's Mantle +1",waist="Scouter's Rope",legs="Darksteel Subligar +1",feet="Darksteel Leggings +1"}
  177.  
  178.     -- Gear to wear for kiting
  179.    
  180.     sets.Kiting = {}
  181.  
  182.     --------------------------------------
  183.     -- Engaged sets
  184.     --------------------------------------
  185.  
  186.     -- Variations for TP weapon and (optional) offense/defense modes.  Code will fall back on previous
  187.     -- sets if more refined versions aren't defined.
  188.     -- If you create a set with both offense and defense modes, the offense mode should be first.
  189.     -- EG: sets.engaged.Dagger.Accuracy.Evasion
  190.    
  191.     -- Normal melee group
  192.     -- If using a weapon that isn't specified later, the basic engaged sets should automatically be used.
  193.     -- Equip the weapon you want to use and engage, disengage, or force update with f12, the correct gear will be used; default weapon is whats equip when file loads.
  194.    
  195.     sets.engaged = {ammo="Fire Bomblet",
  196.         head="Walahra Turban",neck="Fortitude Torque",ear1="Ethereal Earring",ear2="Brutal Earring",
  197.         body="Armada Hauberk",hands="Dusk Gloves +1",ring1="Toreador's Ring",ring2="Rajas Ring",
  198.         back="Cerberus Mantle +1",waist="Velocious Belt",legs="Byakko's Haidate",feet="Aurum Sabatons"}
  199.    
  200.     sets.engaged.Axe = set_combine(sets.engaged, {ammo="Fire Bomblet",
  201.         head="Walahra Turban",neck="Temperance Torque",ear1="Suppanomimi",ear2="Brutal Earring",
  202.         body="Armada Hauberk",hands="Dusk Gloves +1",ring1="Toreador's Ring",ring2="Rajas Ring",
  203.         back="Cerberus Mantle +1",waist="Velocious Belt",legs="Byakko's Haidate",feet="Aurum Sabatons"})
  204.    
  205.     sets.engaged.Dual = set_combine(sets.engaged.ACC, {ammo="Fire Bomblet",
  206.         head="Walahra Turban",neck="Peacock Amulet",ear1="Suppanomimi",ear2="Brutal Earring",
  207.         body="Armada Hauberk",hands="Dusk Gloves +1",ring1="Toreador's Ring",ring2="Rajas Ring",
  208.         back="Cuchulain's Mantle",waist="Velocious Belt",legs="Byakko's Haidate",feet="Aurum Sabatons"})
  209.        
  210.     --------------------------------------
  211.     -- Custom buff sets
  212.     --------------------------------------
  213.     -- Mighty Strikes TP Gear, combines with current melee set.
  214.     sets.buff.MS = {}
  215.     -- Day/Element Helm, if helm is not in inventory or wardrobe, this will not fire, for those who do not own one
  216.     sets.WSDayBonus = {}
  217.     -- Earrings to use with Upheaval when TP is 3000
  218.     sets.VIT_earring = {}
  219.     sets.VIT_earring = {}
  220.     -- Earrings to use with all other weaponskills when TP is 3000
  221.     sets.STR_earring = {}
  222.     -- Mantle to use with Upheaval on Darksday
  223.     sets.Upheaval_shadow = {}
  224. end
  225.  
  226. -------------------------------------------------------------------------------------------------------------------
  227. -- Job-specific hooks for standard casting events.
  228. -------------------------------------------------------------------------------------------------------------------
  229.  
  230. -- Set eventArgs.handled to true if we don't want any automatic target handling to be done.
  231. function job_pretarget(spell, action, spellMap, eventArgs)
  232.  
  233. end
  234.  
  235. -- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
  236. -- Set eventArgs.useMidcastGear to true if we want midcast gear equipped on precast.
  237. function job_precast(spell, action, spellMap, eventArgs)
  238.  
  239. end
  240.  
  241. -- Run after the default precast() is done.
  242. -- eventArgs is the same one used in job_precast, in case information needs to be persisted.
  243.  
  244. function precast(spell)
  245.     if sets.JA[spell.english] then
  246.         equip(sets.JA[spell.english])
  247.         end
  248.      if spell.english == 'Berserk' then
  249.                 equip(sets.precast.JA['Berserk'])
  250.         end
  251.       if spell.english == 'Aggressor' then
  252.                 equip(sets.precast.JA['Aggressor'])
  253.         end
  254.        if spell.english == 'Warcry' then
  255.                 equip(sets.precast.JA['Warcry'])
  256.         end
  257. end
  258.    
  259. -- Run after the default midcast() is done.
  260. -- eventArgs is the same one used in job_midcast, in case information needs to be persisted.
  261.  
  262. function job_post_midcast(spell, action, spellMap, eventArgs)
  263.     if spell.action_type == 'Ranged Attack' or
  264.       (spell.type == 'WeaponSkill' and (spell.skill == 'Marksmanship' or spell.skill == 'Archery')) then
  265.         if world.time >= 6*60 or world.time < 18*60 then -- Dusk to Dawn time. if world.time >= 17*60 or world.time < 7*60 then
  266.             equip({ear1="Ladybug Earring +1", ear2="Ladybug Earring +1"})
  267.             end
  268.         end
  269.        
  270.     if spell.type == 'WeaponSkill' then
  271.         if world.time >= 18*60 or world.time < 6*60 then
  272.             equip({ear1="Vampire Earring"})
  273.             end
  274.         end
  275. end
  276.    
  277. -- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
  278.  
  279. function job_aftercast(spell, action, spellMap, eventArgs)
  280.     if spell.english == "Tomahawk" and not spell.interrupted then
  281.         send_command('timers create "Tomahawk" 90 down')
  282.     end
  283. end
  284.  
  285. -- Run after the default aftercast() is done.
  286. -- eventArgs is the same one used in job_aftercast, in case information needs to be persisted.
  287.  
  288. function job_post_aftercast(spell, action, spellMap, eventArgs)
  289.  
  290. end
  291.  
  292. -------------------------------------------------------------------------------------------------------------------
  293. -- Job-specific hooks for non-casting events.
  294. -------------------------------------------------------------------------------------------------------------------
  295.  
  296. -- Called when the player's status changes.
  297.  
  298. function job_status_change(newStatus, oldStatus, eventArgs)
  299.     update_combat_weapon()
  300.     update_melee_groups()
  301.  
  302. end
  303.  
  304. -- Called when a player gains or loses a buff.
  305. -- buff == buff gained or lost
  306. -- gain == true if the buff was gained, false if it was lost.
  307.  
  308. function job_buff_change(buff, gain)
  309.     if buff == "Aftermath: Lv.3" or buff == "Aftermath" then
  310.         classes.CustomMeleeGroups:clear()
  311.         if (buff == "Aftermath: Lv.3" and gain) or buffactive["Aftermath: Lv.3"] then
  312.             if player.equipment.main == "Conqueror" then
  313.                 classes.CustomMeleeGroups:append('AM3')
  314.                 if gain then
  315.                     send_command('timers create "Aftermath: Lv.3" 180 down;wait 120;input /echo Aftermath: Lv.3 [WEARING OFF IN 60 SEC.];wait 30;input /echo Aftermath: Lv.3 [WEARING OFF IN 30 SEC.];wait 20;input /echo Aftermath: Lv.3 [WEARING OFF IN 10 SEC.]')
  316.                 else
  317.                     send_command('timers delete "Aftermath: Lv.3"')
  318.                     add_to_chat(123,'AM3: [OFF]')
  319.                 end
  320.             end
  321.         end
  322.         if (buff == "Aftermath" and gain) or buffactive.Aftermath then
  323.             if player.equipment.main == "Bravura" and state.HybridMode.value == 'PDT' then
  324.                 classes.CustomMeleeGroups:append('AM')
  325.             end
  326.         end
  327.     end
  328.     if buff == "Aftermath: Lv.3" or buff == "Aftermath" then
  329.         handle_equipping_gear(player.status)
  330.     end
  331.     if buff == 'Warcry' and gain then
  332.         send_command('timers create "Warcry" 60 down abilities/00255.png')
  333.         else
  334.         send_command('timers delete "Warcry"')
  335.     end
  336.     if buff == "sleep" and gain and player.hp > 200 and player.status == "Engaged" then
  337.         equip({neck="Berserker's Torque"})
  338.         else
  339.         handle_equipping_gear(player.status)
  340.     end
  341. end
  342.  
  343. -------------------------------------------------------------------------------------------------------------------
  344. -- User code that supplements standard library decisions.
  345. -------------------------------------------------------------------------------------------------------------------
  346.  
  347. -- Return a customized weaponskill mode to use for weaponskill sets.
  348. -- Don't return anything if you're not overriding the default value.
  349.  
  350. function get_custom_wsmode(spell, spellMap, default_wsmode)
  351.     local wsmode = ''
  352.     if state.Buff['Mighty Strikes'] then
  353.         wsmode = wsmode .. 'MS'
  354.     end
  355.         if wsmode ~= '' then
  356.             return wsmode
  357.     end
  358.         if defaut_wsmode == 'Normal' then
  359.         if spell.english == "Cloudsplitter" and (world.day_element == 'Lightning' or world.day_element == 'Lightning') then
  360.             equip(sets.obi[spell.element])
  361.         end
  362.     end
  363. end
  364.  
  365. -- Modify the default melee set after it was constructed.
  366. function customize_melee_set(meleeSet)
  367.     if buffactive["Mighty Strikes"] then
  368.         meleeSet = set_combine(meleeSet, sets.buff.MS)
  369.     end
  370.     return meleeSet
  371. end
  372.  
  373. -- Called by the 'update' self-command, for common needs.
  374. -- Set eventArgs.handled to true if we don't want automatic equipping of gear.
  375. function job_update(cmdParams, eventArgs)
  376.     update_combat_weapon()
  377.     update_melee_groups()
  378. end
  379.  
  380. -- Set eventArgs.handled to true if we don't want the automatic display to be run.
  381. function display_current_job_state(eventArgs)
  382. local msg = 'Melee'
  383. if state.CombatForm.has_value then
  384. msg = msg .. ' (' .. state.CombatForm.value .. ')'
  385. end
  386. if state.CombatWeapon.has_value then
  387. msg = msg .. ' (' .. state.CombatWeapon.value .. ')'
  388. end
  389. msg = msg .. ': '
  390. msg = msg .. state.OffenseMode.value
  391. if state.HybridMode.value ~= 'Normal' then
  392. msg = msg .. '/' .. state.HybridMode.value
  393. end
  394. msg = msg .. ', WS: ' .. state.WeaponskillMode.value
  395. if state.DefenseMode.value ~= 'None' then
  396. msg = msg .. ', ' .. 'Defense: ' .. state.DefenseMode.value .. ' (' .. state[state.DefenseMode.value .. 'DefenseMode'].value .. ')'
  397. end
  398. if state.Kiting.value == true then
  399. msg = msg .. ', Kiting'
  400. end
  401. if state.PCTargetMode.value ~= 'default' then
  402. msg = msg .. ', Target PC: '..state.PCTargetMode.value
  403. end
  404. if state.SelectNPCTargets.value == true then
  405. msg = msg .. ', Target NPCs'
  406. end
  407. add_to_chat(122, msg)
  408. eventArgs.handled = true
  409. end
  410.  
  411. -------------------------------------------------------------------------------------------------------------------
  412. -- Utility functions specific to this job.
  413. -------------------------------------------------------------------------------------------------------------------
  414.  
  415. -- Select default macro book on initial load or subjob change.
  416. function select_default_macro_book()
  417.     if player.sub_job == 'DNC' then
  418.         set_macro_page(6, 1)
  419.     elseif player.sub_job == 'WAR' then
  420.         set_macro_page(6, 1)
  421.     elseif player.sub_job == 'NIN' then
  422.         set_macro_page(6, 1)
  423.     else
  424.         set_macro_page(6, 1)
  425.     end
  426. end
  427.  
  428.  
  429. function update_combat_weapon()
  430.     state.CombatWeapon:set(player.equipment.main)
  431. end
  432.  
  433. function update_melee_groups()
  434.     classes.CustomMeleeGroups:clear()
  435.     if buffactive['Aftermath: Lv.3'] and player.equipment.main == "Conqueror" then
  436.         classes.CustomMeleeGroups:append('AM3')
  437.     end
  438.     if buffactive.Aftermath and player.equipment.main == "Bravura" and state.HybridMode.value == 'PDT' then
  439.         classes.CustomMeleeGroups:append('AM')
  440.     end
  441. end
  442.  
  443. function is_sc_element_today(spell)
  444.     if spell.type ~= 'WeaponSkill' then
  445.         return
  446.     end
  447.  
  448.    local weaponskill_elements = S{}:
  449.     union(skillchain_elements[spell.skillchain_a]):
  450.     union(skillchain_elements[spell.skillchain_b]):
  451.     union(skillchain_elements[spell.skillchain_c])
  452.  
  453.     if weaponskill_elements:contains(world.day_element) then
  454.         return true
  455.     else
  456.         return false
  457.     end
  458. end
Add Comment
Please, Sign In to add comment