Advertisement
Loire

Loire Run

Nov 12th, 2015
148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 27.90 KB | None | 0 0
  1. -- NOTE: I do not play run, so this will not be maintained for 'active' use.
  2. -- It is added to the repository to allow people to have a baseline to build from,
  3. -- and make sure it is up-to-date with the library API.
  4.  
  5.  
  6. -------------------------------------------------------------------------------------------------------------------
  7. -- Setup functions for this job.  Generally should not be modified.
  8. -------------------------------------------------------------------------------------------------------------------
  9.  
  10. -- Initialization function for this job file.
  11. function get_sets()
  12.     mote_include_version = 2
  13.  
  14.     -- Load and initialize the include file.
  15.     include('Mote-Include.lua')
  16. end
  17.  
  18.     include('organizer-lib')
  19.    
  20. -- Setup vars that are user-independent.
  21. function job_setup()
  22.     -- Table of entries
  23.     rune_timers = T{}
  24.     -- entry = rune, index, expires
  25.    
  26.     if player.main_job_level >= 65 then
  27.         max_runes = 3
  28.     elseif player.main_job_level >= 35 then
  29.         max_runes = 2
  30.     elseif player.main_job_level >= 5 then
  31.         max_runes = 1
  32.     else
  33.         max_runes = 0
  34.     end
  35. end
  36.  
  37. -------------------------------------------------------------------------------------------------------------------
  38. -- User setup functions for this job.  Recommend that these be overridden in a sidecar file.
  39. -------------------------------------------------------------------------------------------------------------------
  40.  
  41. function user_setup()
  42.     state.OffenseMode:options('Normal', 'DD', 'Acc', 'PDT', 'MDT', 'BDT')
  43.     state.WeaponskillMode:options('Normal', 'Acc')
  44.     state.PhysicalDefenseMode:options('PDT')   
  45.     state.CastingMode:options('Normal','Interupt') 
  46.     state.IdleMode:options('Regen', 'Refresh')
  47.  
  48.     select_default_macro_book()
  49.  
  50.     gear.tp_HercHead = {name="Herculean Helm", augments={'Accuracy+23 Attack+23','"Store TP"+2','Accuracy+14','Attack+10',}}
  51.     gear.tp_HercBody = {name="Herculean Vest", augments={'Accuracy+30','"Triple Atk."+2','DEX+13',}}
  52.     gear.tp_HercHands = {name="Herculean Gloves", augments={'Accuracy+23 Attack+23','Crit.hit rate+2','DEX+8','Attack+5',}}
  53.     gear.tp_HercLegs = {name="Herculean Trousers", augments={'Accuracy+16 Attack+16','Accuracy+14','Attack+9',}}
  54.     gear.tp_HercFeet = {name="Herculean Boots", augments={'Accuracy+25 Attack+25','Crit. hit damage +2%','STR+9','Accuracy+7','Attack+8',}}
  55.     gear.ws_HercHead = {name="Herculean Helm", augments={'Accuracy+21','Weapon skill damage +4%','AGI+6',}}
  56.     gear.ws_HercBody = {name="Herculean Vest", augments={'Accuracy+18 Attack+18','Weapon skill damage +2%','STR+5','Accuracy+11',}}
  57.     gear.ws_HercHands = {name="Herculean Gloves", augments={'Accuracy+27','"Waltz" potency +6%','STR+14','Attack+14',}}
  58.     gear.ws_HercLegs = {}
  59.     gear.ws_HercFeet = {name="Herculean Boots", augments={'Accuracy+14','Weapon skill damage +3%','STR+12',}}
  60.     gear.mab_HercHead = {name="Herculean Helm", augments={'Mag. Acc.+5','Magic burst mdg.+5%','INT+5','"Mag.Atk.Bns."+12',}}
  61.     gear.mab_HercBody = {name="Herculean Vest", augments={'Mag. Acc.+18 "Mag.Atk.Bns."+18','Magic burst mdg.+6%','Mag. Acc.+1','"Mag.Atk.Bns."+7',}}
  62.     gear.mab_HercHands = {name="Herculean Gloves", augments={'Mag. Acc.+19 "Mag.Atk.Bns."+19','STR+1','"Mag.Atk.Bns."+10',}}
  63.     gear.mab_HercLegs = {name="Herculean Trousers", augments={'"Mag.Atk.Bns."+16','Magic burst mdg.+6%','MND+1','Mag. Acc.+13',}}
  64.     gear.mab_HercFeet = {}
  65.        
  66.     gear.Interupt_TaeonHead = {name="Taeon Chapeau", augments={'Spell interruption rate down -9%',}}
  67.     gear.Interupt_TaeonBody = {name="Taeon Tabard", augments ={'Spell interruption rate down -9%',}}   
  68.    
  69.     gear.FC_TaeonBody = {name="Taeon Tabard", augments ={'"Fast Cast"+5',}}
  70.    
  71.     info.RuneEnchantment = S{"Tellus", "Unda", "Flabra", "Ignis", "Gelus", "Sulpor", "Lux", "Tenebrae"}
  72.    
  73. end
  74.  
  75.  
  76. function init_gear_sets()
  77.     sets.enmity = {ammo="Aqreqaq Bomblet",
  78.             head="Halitus Helm", neck="Warder's Charm +1", ear1="Trux Earring", ear2="Cryptic Earring",
  79.             body="Emet Harness +1", hands="Kurys Gloves", ring1="Pernicious ring", ring2="Supershear Ring",
  80.             back="Evasionist's Cape", waist="Goading Belt", legs="Eri. Leg Guards +1", feet="Erilaz Greaves +1"}
  81.  
  82.     --------------------------------------
  83.     -- Precast sets
  84.     --------------------------------------
  85.  
  86.     -- Precast sets to enhance JAs
  87.     sets.precast.JA['Vallation'] =set_combine(sets.enmity, {body="Runeist coat +1", legs="Futhark trousers +1"})
  88.     sets.precast.JA['Valiance'] = sets.precast.JA['Vallation']
  89.     sets.precast.JA['Pflug'] = set_combine(sets.enmity, {feet="Runeist bottes +1"})
  90.     sets.precast.JA['Battuta'] = set_combine(sets.enmity, {head="Futhark Bandeau +1"})
  91.     sets.precast.JA['Liement'] = set_combine(sets.enmity, {body="Futhark Coat +1"})
  92.     sets.precast.JA['Lunge'] = {ammo="Ghastly Tathlum +1",
  93.             head=gear.mab_HercHead, neck="Baetyl Pendant", ear1="Crematio Earring", ear2="Friomisi Earring",
  94.             body=gear.mab_HercBody, hands="Leyline Gloves", ring1="Fenrir Ring +1", ring2="Fenrir Ring +1",
  95.             back="Argocham. Mantle", waist="Eschan Stone", legs=gear.mab_HercLegs, feet="Manabyss Pigaches"}
  96.            
  97.     sets.precast.JA['Swipe'] = sets.precast.JA['Lunge']
  98.     sets.precast.JA['Gambit'] = set_combine(sets.enmity, {hands="Runeist Mitons +1"})
  99.     sets.precast.JA['Rayke'] = set_combine(sets.enmity, {feet="Futhark Boots +1"})
  100.     sets.precast.JA['Elemental Sforzo'] = set_combine(sets.enmity, {body="Futhark Coat +1"})
  101.     sets.precast.JA['Swordplay'] = set_combine(sets.enmity, {hands="Futhark Mitons +1"})
  102.     sets.precast.JA['Embolden'] = set_combine(sets.enmity, {back="Evasionist's Cape"})
  103.     sets.precast.JA['Vivacious Pulse'] = set_combine(sets.enmity, {head="Erilaz Galea +1", legs="Rune. Trousers +1"})
  104.     sets.precast.JA['One For All'] = set_combine(sets.enmity, {})
  105.     sets.precast.JA['Provoke'] = sets.enmity
  106.     sets.precast.JA['Sekkanoki'] = sets.enmity
  107.     sets.precast.JA['Meditate'] = sets.enmity
  108.     sets.precast.JA['Warding Circle'] = sets.enmity
  109.     sets.precast.JA['Seigan'] = sets.enmity
  110.     sets.precast.JA['Third Eye'] = sets.enmity
  111.     sets.precast.JA['Hasso'] = sets.enmity 
  112.  
  113.     -- Fast cast sets for spells
  114.     sets.precast.FC = {ammo="Impatiens",
  115.             head="Runeist bandeau +1", neck="Orunmila's Torque", ear1="Loquacious Earring", ear2="Enchntr. Earring +1",
  116.             body=gear.FC_TaeonBody, hands="Leyline Gloves", ring1="Weather. Ring", ring2="Prolix Ring",
  117.             legs="Rawhide Trousers", feet="Chelona Boots +1"}
  118.            
  119.     sets.precast.FC['Enhancing Magic'] = set_combine(sets.precast.FC, {waist="Siegel Sash", legs="Futhark Trousers +1"})
  120.     sets.precast.FC['Utsusemi: Ichi'] = set_combine(sets.precast.FC, {neck='Magoraga beads', body="Passion Jacket",})
  121.     sets.precast.FC['Utsusemi: Ni'] = set_combine(sets.precast.FC['Utsusemi: Ichi'], {})
  122.  
  123.  
  124.     -- Weaponskill sets
  125.     sets.precast.WS = {ammo="Floestone",
  126.             head=gear.ws_HercHead, neck="Fotia Gorget", ear1="Vulcan's Pearl", ear2="Moonshade Earring",
  127.             body=gear.ws_HercBody, hands=gear.ws_HercHands, ring1="Ifrit Ring +1", ring2="Ifrit Ring +1",
  128.             back="Buquwik Cape", waist="Fotia Belt", legs="Taeon Tights", feet=gear.ws_HercFeet}
  129.    
  130.     sets.precast.WS['Resolution'] = {ammo="Floestone",
  131.             head=gear.ws_HercHead, neck="Fotia Gorget", ear1="Vulcan's Pearl", ear2="Moonshade Earring",
  132.             body="Adhemar Jacket", hands="Erilaz Gauntlets +1", ring1="Ifrit Ring +1", ring2="Ifrit Ring +1",
  133.             back="Buquwik Cape", waist="Fotia Belt", legs="Taeon Tights", feet=gear.ws_HercFeet}
  134.            
  135.     sets.precast.WS['Resolution'].Acc = set_combine(sets.precast.WS['Resolution'].Normal,
  136.             {ammo="Amar Cluster",
  137.             ear1="Cessance Earring",
  138.             body=gear.ws_HercBody, ring1="Rufescent Ring",
  139.             back="Grounded Mantle +1", feet=gear.ws_HercFeet})
  140.            
  141.     sets.precast.WS['Ground Strike'] = {ammo="Floestone",
  142.             head=gear.ws_HercHead, neck="Fotia Gorget", ear1="Ishvara Earring", ear2="Moonshade Earring",
  143.             body=gear.ws_HercBody, hands="Erilaz Gauntlets +1", ring1="Ifrit Ring +1", ring2="Ifrit Ring +1",
  144.             back="Buquwik Cape", waist="Fotia Belt", legs="Taeon Tights", feet=gear.ws_HercFeet}
  145.            
  146.     sets.precast.WS['Ground Strike'].Acc = set_combine(sets.precast.WS['Ground Strike'].Normal,
  147.             {ammo="Amar Cluster",
  148.             ear1="Cessance Earring",
  149.             body=gear.ws_HercBody, ring1="Rufescent Ring",
  150.             back="Grounded Mantle +1", feet=gear.ws_HercFeet})         
  151.            
  152.     sets.precast.WS['Savage Blade'] = {ammo="Floestone",
  153.             head=gear.ws_HercHead, neck="Fotia Gorget", ear1="Vulcan's Pearl", ear2="Moonshade Earring",
  154.             body="Adhemar Jacket", hands=gear.ws_HercHands, ring1="Ifrit Ring +1", ring2="Ifrit Ring +1",
  155.             back="Buquwik Cape", waist="Fotia Belt", legs="Taeon Tights", feet=gear.ws_HercFeet}
  156.  
  157.     sets.precast.WS['Savage Blade'].Acc = set_combine(sets.precast.WS['Savage Blade'].Normal,
  158.             {ammo="Amar Cluster",
  159.             ear1="Cessance Earring",
  160.             body=gear.ws_HercBody, ring1="Rufescent Ring",
  161.             back="Grounded Mantle +1", feet=gear.ws_HercFeet})         
  162.  
  163.     sets.precast.WS['Swift Blade'] = {ammo="Floestone",
  164.             head=gear.ws_HercHead, neck="Fotia Gorget", ear1="Vulcan's Pearl", ear2="Moonshade Earring",
  165.             body="Adhemar Jacket", hands="Erilaz Gauntlets +1", ring1="Ifrit Ring +1", ring2="Ifrit Ring +1",
  166.             back="Buquwik Cape", waist="Fotia Belt", legs="Taeon Tights", feet=gear.ws_HercFeet}
  167.            
  168.     sets.precast.WS['Swift Blade'].Acc = set_combine(sets.precast.WS['Swift Blade'].Normal,
  169.             {ammo="Amar Cluster",
  170.             ear1="Cessance Earring",
  171.             body=gear.ws_HercBody, ring1="Rufescent Ring",
  172.             back="Grounded Mantle +1", feet=gear.ws_HercFeet})         
  173.            
  174.     sets.precast.WS['Dimidiation'] = {ammo="Jukukik Feather",
  175.             head=gear.ws_HercHead, neck="Fotia Gorget", ear1="Ishvara Earring", ear2="Moonshade Earring",
  176.             body="Adhemar Jacket", hands="Rawhide Gloves", ring1="Ramuh Ring +1", ring2="Ramuh Ring +1",
  177.             back="Kayapa Cape", waist="Fotia Belt", legs="Taeon Tights", feet=gear.ws_HercFeet}
  178.            
  179.     sets.precast.WS['Dimidiation'].Acc = set_combine(sets.precast.WS['Dimidiation'].Normal,
  180.         {ammo="Falcon Eye", head=gear.ws_HercHead, ear1="Cessance Earring",})
  181.        
  182.     sets.precast.WS['Herculean Slash'] = set_combine(sets.precast['Lunge'], {})
  183.     sets.precast.WS['Herculean Slash'].Acc = set_combine(sets.precast.WS['Herculean Slash'].Normal, {})
  184.    
  185.     sets.precast.WS['Sanguine Blade'] = set_combine(sets.precast['Lunge'], {ring1="Archon Ring"})
  186.     sets.precast.WS['Sanguine Blade'].Acc = set_combine(sets.precast.WS['Sanguine Blade'].Normal, {})
  187.  
  188.  
  189.     --------------------------------------
  190.     -- Midcast sets
  191.     --------------------------------------
  192.    
  193.     sets.midcast.FastRecast = {}
  194.     sets.midcast['Enhancing Magic'] = {head="Erilaz Galea +1", neck="Colossus's torque", ear1="Andoaa Earring",
  195.         hands="Runeist mitons +1", waist="Olympus Sash",
  196.         back="Merciful Cape", legs="Futhark Trousers +1"}
  197.     sets.midcast['Phalanx'] = set_combine(sets.midcast['Enhancing Magic'], {head="Futhark Bandeau +1"})
  198.     sets.midcast['Regen'] = {head="Runeist Bandeau +1", legs="Futhark Trousers +1"}
  199.     sets.midcast['Refresh'] = set_combine(sets.enmity, {head="Erilaz Galea +1"})
  200.     sets.midcast['Stoneskin'] = {waist="Siegel Sash"}
  201.     sets.midcast.Cure = set_combine(sets.enmity, {neck="Colossus's Torque", feet="Futhark Boots +1"})
  202.     sets.midcast['Flash'] = {ammo="Aqreqaq Bomblet",
  203.             head="Halitus Helm", neck="Warder's Charm +1", ear1="Trux Earring", ear2="Cryptic Earring",
  204.             body="Emet Harness +1", hands="Kurys Gloves", ring1="Pernicious ring", ring2="Supershear Ring",
  205.             back="Evasionist's Cape", waist="Goading Belt", legs="Eri. Leg Guards +1", feet="Erilaz Greaves +1"}
  206.     sets.midcast['Foil'] = sets.midcast['Flash']
  207.     sets.midcast['Crusade'] = sets.midcast['Flash']
  208.     sets.midcast['Blue Magic'] = sets.midcast['Flash']
  209.     sets.midcast['Aquaveil'] = set_combine(sets.midcast['Enhancing Magic'],
  210.             {ammo="Impatiens",
  211.             head=gear.Interupt_TaeonHead,
  212.             body=gear.Interupt_TaeonBody, hands="Rawhide Gloves", ring2="Evanescence Ring",
  213.             waist="Rumination Sash", legs="Carmine Cuisses +1", feet="Karasutengu",})
  214.    
  215.     sets.midcast['Flash'].Interupt = set_combine(sets.midcast['Flash'],
  216.             {ammo="Impatiens",
  217.             head=gear.Interupt_TaeonHead,
  218.             body=gear.Interupt_TaeonBody, hands="Rawhide Gloves", ring2="Evanescence Ring",
  219.             waist="Rumination Sash", legs="Carmine Cuisses +1", feet="Karasutengu",})
  220.    
  221.     sets.midcast['Enhancing Magic'].Interupt = set_combine(sets.midcast['Enhancing Magic'],
  222.             {ammo="Impatiens",
  223.             head=gear.Interupt_TaeonHead,
  224.             body=gear.Interupt_TaeonBody, hands="Rawhide Gloves", ring2="Evanescence Ring",
  225.             waist="Rumination Sash", legs="Carmine Cuisses +1", feet="Karasutengu",})
  226.            
  227.     sets.midcast['Phalanx'].Interupt = set_combine(sets.midcast['Enhancing Magic'],
  228.             {ammo="Impatiens",
  229.             head=gear.Interupt_TaeonHead,
  230.             body=gear.Interupt_TaeonBody, hands="Rawhide Gloves", ring2="Evanescence Ring",
  231.             waist="Rumination Sash", legs="Carmine Cuisses +1", feet="Karasutengu",})
  232.  
  233.     sets.midcast['Crusade'].Interupt = set_combine(sets.midcast['Crusade'],
  234.             {ammo="Impatiens",
  235.             head=gear.Interupt_TaeonHead,
  236.             body=gear.Interupt_TaeonBody, hands="Rawhide Gloves", ring2="Evanescence Ring",
  237.             waist="Rumination Sash", legs="Carmine Cuisses +1", feet="Karasutengu",})          
  238.    
  239.     sets.midcast['Foil'].Interupt = set_combine(sets.midcast['Foil'],
  240.             {ammo="Impatiens",
  241.             head=gear.Interupt_TaeonHead,
  242.             body=gear.Interupt_TaeonBody, hands="Rawhide Gloves", ring2="Evanescence Ring",
  243.             waist="Rumination Sash", legs="Carmine Cuisses +1", feet="Karasutengu",})  
  244.  
  245.     sets.midcast['Blue Magic'].Interupt = set_combine(sets.midcast['Blue Magic'],
  246.             {ammo="Impatiens",
  247.             head=gear.Interupt_TaeonHead,
  248.             body=gear.Interupt_TaeonBody, hands="Rawhide Gloves", ring2="Evanescence Ring",
  249.             waist="Rumination Sash", legs="Carmine Cuisses +1", feet="Karasutengu",})
  250.  
  251.     sets.midcast.Cure.Interupt = set_combine(sets.midcast.Cure,
  252.             {ammo="Impatiens",
  253.             head=gear.Interupt_TaeonHead,
  254.             body=gear.Interupt_TaeonBody, hands="Rawhide Gloves", ring2="Evanescence Ring",
  255.             waist="Rumination Sash", legs="Carmine Cuisses +1", feet="Karasutengu",})  
  256.  
  257.     --------------------------------------
  258.     -- Idle/resting/defense/etc sets
  259.     --------------------------------------
  260.  
  261.     sets.idle = {ammo="Vanir Battery",
  262.             head="Rawhide Mask", neck="Sanctity Necklace", ear1="Genmei earring", ear2="Etiolation earring",
  263.             body="Runeist Coat +1", hands="Runeist Mitons +1", ring1="Sheltered Ring", ring2="Paguroidea ring",
  264.             back="Reiki Cloak", waist="Fucho-no-Obi", legs="Carmine Cuisses +1", feet="Erilaz Greaves +1"}
  265.            
  266.     sets.idle.Refresh = set_combine(sets.idle, {body="Runeist Coat +1", waist="Fucho-no-obi"})
  267.            
  268.     sets.defense.PDT = {ammo="Aqreqaq Bomblet",
  269.             head="Lithelimb Cap", neck="Twilight Torque", ear1="Genmei Earring", ear2={ name="Black Earring", augments={'Phys. dmg. taken -2%','"Resist Poison"+2',}},
  270.             body="Erilaz Surcoat +1", hands="Runeist Mitons +1", ring1="Defending Ring", ring2={ name="Dark Ring", augments={'Enemy crit. hit rate -2','Magic dmg. taken -3%','Phys. dmg. taken -6%',}},
  271.             waist="Flume Belt", legs="Eri. Leg Guards +1", feet="Erilaz Greaves +1",
  272.             back="Evasionist's Cape",}
  273.  
  274.     sets.defense.MDT = {ammo="Vanir Battery",
  275.             head="Erilaz Galea +1", neck="Warder's Charm +1", ear1="Sanare Earring", ear2="Etiolation Earring",
  276.             body="Runeist Coat +1", hands="Runeist Mitons +1", ring1="Defending Ring", ring2="Shadow Ring",
  277.             back="Reiki Cloak", waist="Lieutenant's Sash", legs="Mes'yohi Slacks", feet="Erilaz Greaves +1",}
  278.    
  279.     sets.defense.BDT = {ammo="Vanir Battery",
  280.             head="Erilaz Galea +1", neck="Twilight Torque", ear1="Genmei Earring", ear2="Sanare Earring",
  281.             body="Futhark Coat +1", hands="Kurys Gloves", ring1="Defending Ring", ring2="Dark Ring",
  282.             back="Mollusca Mantle", waist="Lieutenant's Sash", legs="Mes'yohi Slacks", feet="Erilaz Greaves +1",}
  283.  
  284.            
  285.     sets.Kiting = {legs="Carmine Cuisses +1"}
  286.  
  287.  
  288.     --------------------------------------
  289.     -- Engaged sets
  290.     --------------------------------------
  291.  
  292.     sets.engaged = {ammo="Ginsen",
  293.             head="Dampening Tam", neck="Combatant's Torque", ear1="Telos Earring", ear2="Brutal Earring",
  294.             body=gear.tp_HercBody, hands=gear.tp_HercHands, ring1="Epona's Ring", ring2="Petrov Ring",
  295.             back="Bleating Mantle", waist="Windbuffet Belt +1", legs="Taeon Tights", feet=gear.tp_HercFeet}
  296.            
  297.     sets.engaged.DD = {ammo="Ginsen",
  298.             head="Dampening Tam", neck="Asperity Necklace", ear1="Trux Earring", ear2="Brutal Earring",
  299.             body="Adhemar Jacket", hands=gear.tp_HercHands, ring1="Epona's Ring", ring2="Petrov Ring",
  300.             back="Bleating Mantle", waist="Windbuffet Belt +1", legs="Ta'lab Trousers", feet=gear.tp_HercFeet}
  301.            
  302.     sets.engaged.Acc = {ammo="Falcon Eye",
  303.             head=gear.tp_HercHead, neck="Combatant's Torque", ear1="Digni. Earring", ear2="Telos Earring",
  304.             body=gear.tp_HercBody, hands=gear.tp_HercHands, ring1="Ramuh Ring +1", ring2="Ramuh Ring +1",
  305.             back="Grounded Mantle +1", waist="Kentarch Belt +1", legs="Carmine Cuisses +1", feet=gear.tp_HercFeet}
  306.  
  307.     sets.engaged.PDT = {ammo="Amar Cluster",
  308.             head="Lithelimb Cap", neck="Combatant's Torque", ear1="Genmei Earring", ear2="Black Earring",
  309.             body="Erilaz Surcoat +1", hands="Erilaz Gauntlets +1", ring1="Defending Ring", ring2="Dark Ring",
  310.             back="Evasionist's Cape", waist="Flume Belt", legs="Eri. Leg Guards +1", feet="Erilaz Greaves +1"}
  311.            
  312.     sets.engaged.MDT = {ammo="Vanir Battery",
  313.             head="Dampening Tam", neck="Twilight Torque", ear1="Sanare Earring", ear2="Etiolation Earring",
  314.             body="Runeist Coat +1", hands="Futhark Mitons +1", ring1="Defending Ring", ring2="Shadow Ring",
  315.             back="Engulfer Cape +1", waist="Flume Belt", legs="Eri. Leg Guards +1", feet="Erilaz Greaves +1"}
  316.            
  317.     sets.engaged.BDT = {ammo="Vanir Battery",
  318.             head="Erilaz Galea +1", neck="Twilight Torque", ear1="Genmei Earring", ear2="Sanare Earring",
  319.             body="Futhark Coat +1", hands="Kurys Gloves", ring1="Defending Ring", ring2="Dark Ring",
  320.             back="Mollusca Mantle", waist="Lieutenant's Sash", legs="Eri. Leg Guards +1", feet="Erilaz Greaves +1",}           
  321.  
  322.     sets.engaged.DW = {ammo="Ginsen",
  323.             head="Dampening Tam", neck="Combatant's Torque", ear1="Telos Earring", ear2="Brutal Earring",
  324.             body="Adhemar Jacket", hands=gear.tp_HercHands, ring1="Epona's Ring", ring2="Petrov Ring",
  325.             back="Bleating Mantle", waist="Reiki Yotai", legs="Taeon Tights", feet=gear.tp_HercFeet}
  326.            
  327.     sets.engaged.DW.DD = {ammo="Ginsen",
  328.             head="Dampening Tam", neck="Asperity Necklace", ear1="Trux Earring", ear2="Brutal Earring",
  329.             body="Adhemar Jacket", hands=gear.tp_HercHands, ring1="Epona's Ring", ring2="Petrov Ring",
  330.             back="Bleating Mantle", waist="Windbuffet Belt +1", legs="Ta'lab Trousers", feet=gear.tp_HercFeet}
  331.            
  332.     sets.engaged.DW.Acc = {ammo="Falcon Eye",
  333.             head=gear.tp_HercHead, neck="Combatant's Torque", ear1="Telos Earring", ear2="Digni. Earring",
  334.             body="Adhemar Jacket", hands=gear.tp_HercHands, ring1="Ramuh Ring +1", ring2="Ramuh Ring +1",
  335.             back="Grounded Mantle +1", waist="Reiki Yotai", legs="Carmine Cuisses +1", feet=gear.tp_HercFeet}
  336.  
  337.     sets.engaged.DW.PDT = {ammo="Amar Cluster",
  338.             head="Lithelimb Cap", neck="Combatant's Torque", ear1="Genmei Earring", ear2="Black Earring",
  339.             body="Erilaz Surcoat +1", hands="Erilaz Gauntlets +1", ring1="Defending Ring", ring2="Dark Ring",
  340.             back="Evasionist's Cape", waist="Flume Belt", legs="Eri. Leg Guards +1", feet="Erilaz Greaves +1"}
  341.            
  342.     sets.engaged.DW.MDT = {ammo="Vanir Battery",
  343.             head="Dampening Tam", neck="Twilight Torque", ear1="Sanare Earring", ear2="Etiolation Earring",
  344.             body="Runeist Coat +1", hands="Futhark Mitons +1", ring1="Defending Ring", ring2="Shadow Ring",
  345.             back="Engulfer Cape +1", waist="Flume Belt", legs="Eri. Leg Guards +1", feet="Erilaz Greaves +1"}
  346.            
  347.     sets.engaged.DW.BDT = {ammo="Vanir Battery",
  348.             head="Erilaz Galea +1", neck="Twilight Torque", ear1="Genmei Earring", ear2="Sanare Earring",
  349.             body="Futhark Coat +1", hands="Kurys Gloves", ring1="Defending Ring", ring2="Dark Ring",
  350.             back="Mollusca Mantle", waist="Lieutenant's Sash", legs="Eri. Leg Guards +1", feet="Erilaz Greaves +1",}           
  351.            
  352.            
  353.            
  354.     sets.engaged.repulse = {}
  355.    
  356.     sets.engaged.Aettir = {main="Aettir", sub="Alber Strap",}
  357.     sets.engaged.Reikiko = {main="Reikiko"}
  358.     sets.engaged.Fettering = {main="Fettering Blade"}  
  359.  
  360. end
  361.  
  362. ------------------------------------------------------------------
  363. -- Action events
  364. ------------------------------------------------------------------
  365.  
  366. -- Run after the default midcast() is done.
  367. -- eventArgs is the same one used in job_midcast, in case information needs to be persisted.
  368. function job_post_midcast(spell, action, spellMap, eventArgs)
  369.     if spell.english == 'Lunge' or spell.english == 'Swipe' then
  370.         local obi = get_obi(get_rune_obi_element())
  371.         if obi then
  372.             equip({waist=obi})
  373.         end
  374.     end
  375. end
  376.  
  377.  
  378. function job_aftercast(spell)
  379.     if not spell.interrupted then
  380.         if spell.type == 'Rune' then
  381.             update_timers(spell)
  382.         elseif spell.name == "Lunge" or spell.name == "Gambit" or spell.name == 'Rayke' then
  383.             reset_timers()
  384.         elseif spell.name == "Swipe" then
  385.             send_command(trim(1))
  386.         end
  387.     end
  388. end
  389.  
  390.  
  391. -------------------------------------------------------------------------------------------------------------------
  392. -- Customization hooks for idle and melee sets, after they've been automatically constructed.
  393. -------------------------------------------------------------------------------------------------------------------
  394.  
  395. -------------------------------------------------------------------------------------------------------------------
  396. -- General hooks for other events.
  397. -------------------------------------------------------------------------------------------------------------------
  398. function job_precast(spell)
  399.     if info.RuneEnchantment:contains(spell.english) then
  400.         equip(sets.enmity)
  401.     end
  402. end
  403. -------------------------------------------------------------------------------------------------------------------
  404. -- User code that supplements self-commands.
  405. -------------------------------------------------------------------------------------------------------------------
  406. function job_update(cmdParams, eventArgs)
  407.     update_combat_form()
  408. end
  409.  
  410. function update_combat_form()
  411.     -- Check for H2H or single-wielding
  412.     if player.equipment.sub == "Bloodrain Strap" or player.equipment.sub == "Vivid Strap" or player.equipment.sub == "Alber Strap" or player.equipment.sub == 'empty' then
  413.         state.CombatForm:reset()
  414.     else
  415.         state.CombatForm:set('DW')
  416.     end
  417. end
  418. -------------------------------------------------------------------------------------------------------------------
  419. -- Utility functions specific to this job.
  420. -------------------------------------------------------------------------------------------------------------------
  421.  
  422.  
  423.  
  424.  
  425.  
  426. -- Select default macro book on initial load or subjob change.
  427. function select_default_macro_book()
  428.     -- Default macro set/book
  429.     if player.sub_job == 'WAR' then
  430.         set_macro_page(3, 18)
  431.     elseif player.sub_job == 'NIN' then
  432.         set_macro_page(1, 18)
  433.     elseif player.sub_job == 'SAM' then
  434.         set_macro_page(2, 18)
  435.     elseif player.sub_job == 'BLU' then
  436.         set_macro_page(3, 18)      
  437.     else
  438.         set_macro_page(2, 18)
  439.     end
  440. end
  441.  
  442. function get_rune_obi_element()
  443.     weather_rune = buffactive[elements.rune_of[world.weather_element] or '']
  444.     day_rune = buffactive[elements.rune_of[world.day_element] or '']
  445.    
  446.     local found_rune_element
  447.    
  448.     if weather_rune and day_rune then
  449.         if weather_rune > day_rune then
  450.             found_rune_element = world.weather_element
  451.         else
  452.             found_rune_element = world.day_element
  453.         end
  454.     elseif weather_rune then
  455.         found_rune_element = world.weather_element
  456.     elseif day_rune then
  457.         found_rune_element = world.day_element
  458.     end
  459.    
  460.     return found_rune_element
  461. end
  462.  
  463. function get_obi(element)
  464.     if element and elements.obi_of[element] then
  465.         return (player.inventory[elements.obi_of[element]] or player.wardrobe[elements.obi_of[element]]) and elements.obi_of[element]
  466.     end
  467. end
  468.  
  469.  
  470. ------------------------------------------------------------------
  471. -- Timer manipulation
  472. ------------------------------------------------------------------
  473.  
  474. -- Add a new run to the custom timers, and update index values for existing timers.
  475. function update_timers(spell)
  476.     local expires_time = os.time() + 300
  477.     local entry_index = rune_count(spell.name) + 1
  478.  
  479.     local entry = {rune=spell.name, index=entry_index, expires=expires_time}
  480.  
  481.     rune_timers:append(entry)
  482.     local cmd_queue = create_timer(entry).. ';wait 0.05;'
  483.    
  484.     cmd_queue = cmd_queue .. trim()
  485.  
  486.     -- add_to_chat(123,'cmd_queue='..cmd_queue)
  487.  
  488.     send_command(cmd_queue)
  489. end
  490.  
  491. -- Get the command string to create a custom timer for the provided entry.
  492. function create_timer(entry)
  493.     local timer_name = '"Rune: ' .. entry.rune .. '-' .. tostring(entry.index) .. '"'
  494.     local duration = entry.expires - os.time()
  495.     return 'timers c ' .. timer_name .. ' ' .. tostring(duration) .. ' down'
  496. end
  497.  
  498. -- Get the command string to delete a custom timer for the provided entry.
  499. function delete_timer(entry)
  500.     local timer_name = '"Rune: ' .. entry.rune .. '-' .. tostring(entry.index) .. '"'
  501.     return 'timers d ' .. timer_name .. ''
  502. end
  503.  
  504. -- Reset all timers
  505. function reset_timers()
  506.     local cmd_queue = ''
  507.     for index,entry in pairs(rune_timers) do
  508.         cmd_queue = cmd_queue .. delete_timer(entry) .. ';wait 0.05;'
  509.     end
  510.     rune_timers:clear()
  511.     send_command(cmd_queue)
  512. end
  513.  
  514. -- Get a count of the number of runes of a given type
  515. function rune_count(rune)
  516.     local count = 0
  517.     local current_time = os.time()
  518.     for _,entry in pairs(rune_timers) do
  519.         if entry.rune == rune and entry.expires > current_time then
  520.             count = count + 1
  521.         end
  522.     end
  523.     return count
  524. end
  525.  
  526. -- Remove the oldest rune(s) from the table, until we're below the max_runes limit.
  527. -- If given a value n, remove n runes from the table.
  528. function trim(n)
  529.     local cmd_queue = ''
  530.  
  531.     local to_remove = n or (rune_timers:length() - max_runes)
  532.  
  533.     while to_remove > 0 and rune_timers:length() > 0 do
  534.         local oldest
  535.         for index,entry in pairs(rune_timers) do
  536.             if oldest == nil or entry.expires < rune_timers[oldest].expires then
  537.                 oldest = index
  538.             end
  539.         end
  540.        
  541.         cmd_queue = cmd_queue .. prune(rune_timers[oldest].rune)
  542.         to_remove = to_remove - 1
  543.     end
  544.    
  545.     return cmd_queue
  546. end
  547.  
  548. -- Drop the index of all runes of a given type.
  549. -- If the index drops to 0, it is removed from the table.
  550. function prune(rune)
  551.     local cmd_queue = ''
  552.    
  553.     for index,entry in pairs(rune_timers) do
  554.         if entry.rune == rune then
  555.             cmd_queue = cmd_queue .. delete_timer(entry) .. ';wait 0.05;'
  556.             entry.index = entry.index - 1
  557.         end
  558.     end
  559.  
  560.     for index,entry in pairs(rune_timers) do
  561.         if entry.rune == rune then
  562.             if entry.index == 0 then
  563.                 rune_timers[index] = nil
  564.             else
  565.                 cmd_queue = cmd_queue .. create_timer(entry) .. ';wait 0.05;'
  566.             end
  567.         end
  568.     end
  569.    
  570.     return cmd_queue
  571. end
  572.  
  573.  
  574. ------------------------------------------------------------------
  575. -- Reset events
  576. ------------------------------------------------------------------
  577.  
  578. windower.raw_register_event('zone change',reset_timers)
  579. windower.raw_register_event('logout',reset_timers)
  580. windower.raw_register_event('status change',function(new, old)
  581.     if gearswap.res.statuses[new].english == 'Dead' then
  582.         reset_timers()
  583.     end
  584. end)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement