Advertisement
Loire

Loire Pld

Feb 8th, 2016
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 25.77 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 = 2
  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', 'Acc', 'Hybrid', 'PDT', 'MDT', 'BDT')
  43.     state.WeaponskillMode:options('Normal', 'Acc')
  44.     state.PhysicalDefenseMode:options('PDT', 'MDT', 'BDT')
  45.     state.IdleMode:options('Regen', 'Refresh', 'DT')
  46.     state.CastingMode:options('Normal','Interupt') 
  47.  
  48.     select_default_macro_book()
  49.  
  50.     info.RuneEnchantment = S{"Tellus", "Unda", "Flabra", "Ignis", "Gelus", "Sulpor", "Lux", "Tenebrae"}
  51.     info.Shields = S{"Ochain", "Aegis"}
  52.    
  53.     gear.tp_ValorHead = {name="Valorous Mask", augments={'Accuracy+25 Attack+25','"Dbl.Atk."+4','MND+6','Accuracy+13',}}
  54.     gear.tp_ValorBody = {name="Valorous Mail", augments={'Accuracy+24 Attack+24','AGI+8','Accuracy+11',}}
  55.     gear.tp_ValorHands = {name="Valorous Mitts", augments={'Accuracy+23 Attack+23','AGI+7','Accuracy+14','Attack+15',}}
  56.     gear.tp_ValorLegs = {name="Valor. Hose", augments={'Accuracy+15 Attack+15','Crit.hit rate+2','DEX+10','Accuracy+12',}}
  57.     gear.tp_ValorFeet = {name="Valorous Greaves", augments={'Accuracy+29','"Store TP"+6','VIT+1','Attack+14',}}
  58.     gear.ws_ValorHead = {name="Valorous Mask", augments={'Accuracy+26','Weapon skill damage +4%','Attack+1',}}
  59.     gear.ws_ValorBody = {}
  60.     gear.ws_ValorHands = {name="Valorous Mitts", augments={'Accuracy+29','Weapon skill damage +4%','STR+6','Attack+8',}}
  61.     gear.ws_ValorLegs = {name="Valor. Hose", augments={'Accuracy+23 Attack+23','Weapon Skill Acc.+15','VIT+7','Accuracy+14','Attack+12',}}
  62.     gear.ws_ValorFeet = {name="Valorous Greaves", augments={'Accuracy+29','"Store TP"+6','VIT+1','Attack+14',}}
  63.     gear.dt_ValorLegs = {name="Valor. Hose", augments={'Accuracy+14','Phys. dmg. taken -2%','DEX+8',}}
  64.    
  65.     send_command('bind ^` gs equip sets.engaged.Ochain')
  66.     send_command('bind !` gs equip sets.engaged.Aegis')
  67.    
  68.    
  69. end
  70.  
  71. function user_unload()
  72.     send_command('unbind ^`')
  73.     send_command('unbind !`')
  74. end
  75.  
  76. function init_gear_sets()
  77.     sets.enmity = {ammo="Amar Cluster",
  78.             head="Loess Barbuta +1", neck="Warder's Charm +1", ear1="Trux Earring", ear2="Cryptic Earring",
  79.             body="Odyss. Chestplate", hands="Yorium Gauntlets", ring1="Pernicious ring", ring2="Supershear Ring",
  80.             back="Reiki Cloak", waist="Goading Belt", legs="Cab. Breeches +1", feet="Eschite Greaves"}
  81.  
  82.     --------------------------------------
  83.     -- Precast sets
  84.     --------------------------------------
  85.  
  86.     -- Precast sets to enhance JAs
  87.  
  88.     sets.precast.JA = sets.enmity
  89.     sets.precast.JA['Invincible'] = set_combine(sets.enmity, {legs="Cab. Breeches +1",})
  90.     sets.precast.JA['Shield Bash'] = set_combine(sets.enmity, {hands="Cab. Gauntlets +1", ear1="Knightly Earring", ring1="Fenian Ring",})
  91.     sets.precast.JA['Holy Circle'] = set_combine(sets.enmity, {feet="Rev. Leggings +1",})  
  92.     sets.precast.JA['Sentinel'] = set_combine(sets.enmity, {feet="Cab. Leggings +1"})
  93.     sets.precast.JA['Cover'] = set_combine(sets.enmity, {head="Rev. Coronet +1", body="Cab. Surcoat +1"})
  94.    
  95.     sets.precast.JA['Rampart'] = set_combine(sets.enmity, {
  96.         head="Cab. Coronet +1", ear1="Genmei Earring",
  97.         body="Jumalik Mail", hands="Umuthi Gloves", ring1="Petrov Ring", ring2="Supershear Ring",
  98.         back="Weard Mantle", legs="Osmium Cuisses", feet="Rev. Leggings +1"})
  99.        
  100.     sets.precast.JA['Fealty'] = set_combine(sets.enmity, {body="Cab. Surcoat +1"})
  101.    
  102.     sets.precast.JA['Chivalry'] = set_combine(sets.enmity, {
  103.         head="Rev. Coronet +1", ear1="Genmei Earring",
  104.         body="Emet Harness +1", hands="Cab. Gauntlets +1",
  105.         legs="Mes'yohi Slacks", feet="Amm Greaves"})
  106.        
  107.     sets.precast.JA['Divine Emblem'] = set_combine(sets.enmity, {feet="Chev. Sabatons +1",})
  108.     sets.precast.JA['Sepulcher'] = set_combine(sets.enmity, {})
  109.     sets.precast.JA['Palisade'] = set_combine(sets.enmity, {})
  110.     sets.precast.JA['Intervene'] = sets.precast.JA['Shield Bash']  
  111.    
  112.     -- Fast cast sets for spells
  113.     sets.precast.FC = {ammo="Impatiens",
  114.             head="Chev. Armet +1", neck="Orunmila's Torque", ear1="Loquacious Earring", ear2="Enchntr. Earring +1",
  115.             body="Rev. Surcoat +1", hands="Leyline Gloves", ring1="Weather. Ring", ring2="Prolix Ring",
  116.             legs="Homam Cosciales", feet="Odyssean Greaves"}
  117.            
  118.     sets.precast.FC['Enhancing Magic'] = set_combine(sets.precast.FC, {waist="Siegel Sash",})
  119.     sets.precast.FC['Utsusemi: Ichi'] = set_combine(sets.precast.FC, {})
  120.     sets.precast.FC['Utsusemi: Ni'] = set_combine(sets.precast.FC['Utsusemi: Ichi'], {})
  121.  
  122.  
  123.     -- Weaponskill sets
  124.     sets.precast.WS = {ammo="Floestone",
  125.             head=gear.ws_ValorHead, neck="Fotia Gorget", ear1="Brutal Earring", ear2="Moonshade Earring",
  126.             body="Acro Surcoat", hands=gear.ws_ValorHands, ring1="Ifrit Ring +1", ring2="Ifrit Ring +1",
  127.             back="Buquwik Cape", waist="Fotia Belt", legs=gear.ws_ValorLegs, feet="Acro Leggings"}
  128.            
  129.     sets.precast.WS.Acc = set_combine(sets.precast.WS.Normal,
  130.             {ammo="Amar Cluster",
  131.             ear1="Zwazo Earring +1",
  132.             ring1="Rufescent Ring",
  133.             back="Grounded Mantle +1",})   
  134.    
  135.     sets.precast.WS['Resolution'] = {ammo="Floestone",
  136.             head=gear.ws_ValorHead, neck="Fotia Gorget", ear1="Zwazo Earring +1", ear2="Moonshade Earring",
  137.             body="Acro Surcoat", hands=gear.ws_ValorHands, ring1="Ifrit Ring +1", ring2="Ifrit Ring +1",
  138.             back="Buquwik Cape", waist="Fotia Belt", legs=gear.ws_ValorLegs, feet="Acro Leggings"}
  139.            
  140.     sets.precast.WS['Resolution'].Acc = set_combine(sets.precast.WS['Resolution'].Normal,
  141.             {ammo="Amar Cluster",
  142.             ring1="Rufescent Ring",
  143.             back="Grounded Mantle +1",})
  144.            
  145.     sets.precast.WS['Ground Strike'] = {ammo="Floestone",
  146.             head=gear.ws_ValorHead, neck="Fotia Gorget", ear1="Ishvara Earring", ear2="Moonshade Earring",
  147.             body="Acro Surcoat", hands=gear.ws_ValorHands, ring1="Ifrit Ring +1", ring2="Ifrit Ring +1",
  148.             back="Buquwik Cape", waist="Fotia Belt", legs=gear.ws_ValorLegs, feet="Acro Leggings"}
  149.            
  150.     sets.precast.WS['Ground Strike'].Acc = set_combine(sets.precast.WS['Ground Strike'].Normal,
  151.             {ammo="Amar Cluster",
  152.             ear1="Zwazo Earring +1",
  153.             ring1="Rufescent Ring",
  154.             back="Grounded Mantle +1",})           
  155.                    
  156.     sets.precast.WS['Torcleaver'] = {ammo="Floestone",
  157.             head=gear.ws_ValorHead, neck="Fotia Gorget", ear1="Ishvara Earring", ear2="Moonshade Earring",
  158.             body="Acro Surcoat", hands=gear.ws_ValorHands, ring1="Ifrit Ring +1", ring2="Ifrit Ring +1",
  159.             back="Buquwik Cape", waist="Fotia Belt", legs=gear.ws_ValorLegs, feet="Acro Leggings"}
  160.            
  161.     sets.precast.WS['Torcleaver'].Acc = set_combine(sets.precast.WS['Torcleaver'].Normal,
  162.             {ammo="Amar Cluster",
  163.             ear1="Zwazo Earring +1",
  164.             ring1="Rufescent Ring",
  165.             back="Grounded Mantle +1",})
  166.            
  167.     sets.precast.WS['Savage Blade'] = {ammo="Floestone",
  168.             head=gear.ws_ValorHead, neck="Fotia Gorget", ear1="Ishvara Earring", ear2="Moonshade Earring",
  169.             body="Acro Surcoat", hands=gear.ws_ValorHands, ring1="Ifrit Ring +1", ring2="Ifrit Ring +1",
  170.             back="Buquwik Cape", waist="Fotia Belt", legs=gear.ws_ValorLegs, feet="Acro Leggings"}
  171.            
  172.     sets.precast.WS['Savage Blade'].Acc = set_combine(sets.precast.WS['Savage Blade'].Normal,
  173.             {ammo="Amar Cluster",
  174.             ear1="Zwazo Earring +1",
  175.             ring1="Rufescent Ring",
  176.             back="Grounded Mantle +1",})
  177.  
  178.     sets.precast.WS['Chant du Cygne'] = {ammo="Jukukik Feather",
  179.             head=gear.ws_ValorHead, neck="Fotia Gorget", ear1="Brutal Earring", ear2="Moonshade Earring",
  180.             body="Acro Surcoat", hands=gear.ws_ValorHands, ring1="Ramuh Ring +1", ring2="Begrudging Ring",
  181.             back="Ground. Mantle +1", waist="Fotia Belt", legs=gear.ws_ValorLegs, feet="Acro Leggings"}
  182.            
  183.     sets.precast.WS['Chant du Cygne'].Acc = set_combine(sets.precast.WS['Chant du Cygne'].Normal,
  184.             {ear1="Zwazo Earring +1",})
  185.        
  186.     sets.precast.WS['Atonement'] = {ammo="Amar Cluster",
  187.             head="Yorium Barbuta", neck="Fotia Gorget", ear1="Ishvara Earring", ear2="Moonshade Earring",
  188.             body="Phorcys Korazin", hands=gear.ws_ValorHands, ring1="Pernicious Ring", ring2="Supershear Ring",
  189.             back="Weard Mantle", waist="Fotia Belt", legs="Acro Breeches", feet="Acro Leggings"}
  190.            
  191.     sets.precast.WS['Atonement'].Acc = set_combine(sets.precast.WS['Atonement'].Normal, {})
  192.    
  193.     sets.precast.WS['Herculean Slash'] = sets.precast.WS['Atonement']
  194.     sets.precast.WS['Herculean Slash'].Acc = sets.precast.WS['Atonement']
  195.    
  196.     sets.precast.WS['Sanguine Blade'] = set_combine(sets.precast.WS['Atonement'], {ring1="Archon Ring"})
  197.     sets.precast.WS['Sanguine Blade'].Acc = set_combine(sets.precast.WS['Sanguine Blade'].Normal, {})
  198.  
  199.  
  200.     --------------------------------------
  201.     -- Midcast sets
  202.     --------------------------------------
  203.    
  204.     sets.midcast.FastRecast = {}
  205.     sets.midcast['Enhancing Magic'] = {neck="Colossus's torque", ear1="Andoaa Earring",
  206.         back="Merciful Cape", waist="Olympus Sash", legs="Rev. Breeches +1"}
  207.        
  208.     sets.midcast['Divine Magic'] = {head="Jumalik Helm", neck="Nesanica torque", ear1="Beatific Earring",
  209.         body="Rev. Surcoat +1", hands="Eschite Gauntlets", ring1="Globidonta Ring",
  210.         back="Altruistic Cape", waist="Asklepian Belt",}   
  211.        
  212.     sets.midcast['Phalanx'] = set_combine(sets.midcast['Enhancing Magic'], {back="Weard Mantle",ring1="Pernicious ring", ring2="Supershear Ring",})
  213.     sets.midcast['Stoneskin'] = {waist="Siegel Sash"}
  214.    
  215.     sets.midcast.Cure = set_combine(sets.enmity, {neck="Colossus's Torque", ear1="Nourish. Earring",
  216.         body="Jumalik Mail", hands="Buremte Gloves", ring1="Pernicious ring", ring2="Supershear Ring",
  217.         back="Fierabras's Mantle", waist="Asklepian Belt", feet="Odyssean Greaves",})
  218.        
  219.     sets.midcast['Flash'] = {ammo="Amar Cluster",
  220.             head="Cizin Helm +1", neck="Warder's Charm +1", ear1="Trux Earring", ear2="Cryptic Earring",
  221.             body="Odyss. Chestplate", hands="Yorium Gauntlets", ring1="Pernicious ring", ring2="Supershear Ring",
  222.             back="Reiki Cloak", waist="Goading Belt", legs="Rev. Breeches +1", feet="Chev. Sabatons +1"}
  223.  
  224.     sets.midcast['Blue Magic'] = {ammo="Amar Cluster",
  225.             head="Cizin Helm +1", neck="Warder's Charm +1", ear1="Trux Earring", ear2="Cryptic Earring",
  226.             body="Odyss. Chestplate", hands="Yorium Gauntlets", ring1="Pernicious ring", ring2="Supershear Ring",
  227.             back="Reiki Cloak", waist="Goading Belt", legs="Rev. Breeches +1", feet="Chev. Sabatons +1"}
  228.            
  229.     sets.midcast['Reprisal'] = {ammo="Vanir Battery",
  230.             head="Chev. Armet +1", neck="Sanctity Necklace", ear1="Cryptic Earring", ear2="Enchntr. Earring +1",
  231.             body="Odyss. Chestplate", hands="Cab. Gauntlets +1", ring1="K'ayres Ring", ring2="Supershear Ring",
  232.             back="Reiki Cloak", waist="Asklepian Belt", legs="Eschite Cuisses", feet="Amm Greaves",}
  233.            
  234.     sets.midcast['Crusade'] = sets.midcast['Flash']
  235.  
  236.     sets.midcast['Flash'].Interupt = set_combine(sets.midcast['Flash'],
  237.             {ammo="Impatiens",
  238.             head="Eschite Helm", ear2="Knightly Earring",
  239.             hands="Eschite Gauntlets",
  240.             waist="Rumination Sash", legs="Founder's Hose", feet="Odyssean Greaves",})
  241.    
  242.     sets.midcast['Enhancing Magic'].Interupt = set_combine(sets.midcast['Enhancing Magic'],
  243.             {ammo="Impatiens",
  244.             head="Eschite Helm", ear2="Knightly Earring",
  245.             hands="Eschite Gauntlets",
  246.             waist="Rumination Sash", legs="Founder's Hose", feet="Odyssean Greaves",})
  247.  
  248.     sets.midcast['Divine Magic'].Interupt = set_combine(sets.midcast['Divine Magic'],
  249.             {ammo="Impatiens",
  250.             head="Eschite Helm", ear2="Knightly Earring",
  251.             hands="Eschite Gauntlets",
  252.             waist="Rumination Sash", legs="Founder's Hose", feet="Odyssean Greaves",})
  253.            
  254.     sets.midcast['Phalanx'].Interupt = set_combine(sets.midcast['Enhancing Magic'],
  255.             {ammo="Impatiens",
  256.             head="Eschite Helm", ear2="Knightly Earring",
  257.             hands="Eschite Gauntlets",
  258.             waist="Rumination Sash", legs="Founder's Hose", feet="Odyssean Greaves",})
  259.  
  260.     sets.midcast['Crusade'].Interupt = set_combine(sets.midcast['Crusade'],
  261.             {ammo="Impatiens",
  262.             head="Eschite Helm", ear2="Knightly Earring",
  263.             hands="Eschite Gauntlets",
  264.             waist="Rumination Sash", legs="Founder's Hose", feet="Odyssean Greaves",})         
  265.    
  266.     sets.midcast['Reprisal'].Interupt = set_combine(sets.midcast['Reprisal'],
  267.             {ammo="Impatiens",
  268.             head="Eschite Helm", ear2="Knightly Earring",
  269.             hands="Eschite Gauntlets",
  270.             waist="Rumination Sash", legs="Founder's Hose", feet="Odyssean Greaves",}) 
  271.  
  272.     sets.midcast['Blue Magic'].Interupt = set_combine(sets.midcast['Blue Magic'],
  273.             {ammo="Impatiens",
  274.             head="Eschite Helm", ear2="Knightly Earring",
  275.             hands="Eschite Gauntlets",
  276.             waist="Rumination Sash", legs="Founder's Hose", feet="Odyssean Greaves",})
  277.  
  278.     sets.midcast.Cure.Interupt = set_combine(sets.midcast.Cure,
  279.             {ammo="Impatiens",
  280.             head="Eschite Helm", ear2="Knightly Earring",
  281.             hands="Eschite Gauntlets",
  282.             waist="Rumination Sash", legs="Founder's Hose", feet="Odyssean Greaves",})         
  283.  
  284.     --------------------------------------
  285.     -- Idle/resting/defense/etc sets
  286.     --------------------------------------
  287.  
  288.     sets.idle = {ammo="Vanir Battery",
  289.             head="Baghere Salade", neck="Sanctity Necklace", ear1="Genmei earring", ear2="Etiolation earring",
  290.             body="Ares' Cuirass +1", hands="Founder's Gauntlets", ring1="Sheltered Ring", ring2="Paguroidea ring",
  291.             back="Reiki Cloak", waist="Fucho-no-Obi", legs="Blood Cuisses", feet="Amm Greaves"}
  292.            
  293.     sets.idle.Refresh = set_combine(sets.idle, {neck="Coatl Gorget +1", waist="Fucho-no-obi"})
  294.            
  295.     sets.idle.DT = {ammo="Hasty Pinion +1",
  296.         head="Loess Barbuta +1", neck="Twilight Torque", ear1="Genmei Earring", ear2="Telos Earring",
  297.         body="Rev. Surcoat +1", hands="Odyssean Gauntlets", ring1="Defending Ring", ring2={ name="Dark Ring", augments={'Enemy crit. hit rate -2','Magic dmg. taken -3%','Phys. dmg. taken -6%',}},
  298.         back="Shadow Mantle", waist="Flume Belt", legs="Rev. Breeches +1", feet="Amm Greaves"}
  299.    
  300.     sets.defense.PDT = {ammo="Hasty Pinion +1",
  301.         head="Loess Barbuta +1", neck="Twilight Torque", ear1="Genmei Earring", ear2="Telos Earring",
  302.         body="Rev. Surcoat +1", hands="Odyssean Gauntlets", ring1="Defending Ring", ring2={ name="Dark Ring", augments={'Enemy crit. hit rate -2','Magic dmg. taken -3%','Phys. dmg. taken -6%',}},
  303.         back="Shadow Mantle", waist="Flume Belt", legs="Rev. Breeches +1", feet="Amm Greaves"}
  304.  
  305.     sets.defense.MDT = {ammo="Vanir Battery",
  306.         head="Founder's Corona", neck="Warder's Charm +1", ear1="Sanare Earring", ear2="Etiolation Earring",
  307.         body="Rev. Surcoat +1", hands="Umuthi Gloves", ring1="Defending Ring", ring2="Shadow Ring",
  308.         back="Reiki Cloak", waist="Asklepian Belt", legs="Mes'yohi Slacks", feet="Odyssean Greaves",}
  309.    
  310.     sets.defense.BDT = {ammo="Vanir Battery",
  311.         head="Loess Barbuta +1", neck="Twilight Torque", ear1="Zwazo Earring +1", ear2="Cryptic Earring",
  312.         body="Rev. Surcoat +1", hands="Umuthi Gloves", ring1="Defending Ring", ring2="K'ayres Ring",
  313.         back="Mollusca Mantle", waist="Asklepian Belt", legs="Scuff. Cosciales", feet="Amm Greaves",}  
  314.  
  315.  
  316.     sets.Kiting = {feet="Blood Cuisses"}
  317.  
  318.  
  319.     --------------------------------------
  320.     -- Engaged sets
  321.     --------------------------------------
  322.  
  323.     sets.engaged = {ammo="Hasty Pinion +1",
  324.         head=gear.tp_ValorHead, neck="Agitator's Collar", ear1="Digni. Earring", ear2="Telos Earring",
  325.         body=gear.tp_ValorBody, hands="Odyssean Gauntlets", ring1="Supershear Ring", ring2="Patricius Ring",
  326.         back="Grounded Mantle +1", waist="Kentarch Belt +1", legs="Eschite Cuisses", feet=gear.tp_ValorFeet}
  327.  
  328.     sets.engaged.Acc = {ammo="Hasty Pinion +1",
  329.         head=gear.tp_ValorHead, neck="Combatant's Torque", ear1="Digni. Earring", ear2="Telos Earring",
  330.         body=gear.tp_ValorBody, hands="Odyssean Gauntlets", ring1="Ramuh Ring +1", ring2="Ramuh Ring +1",
  331.         back="Grounded Mantle +1", waist="Olseni Belt", legs="Odyssean Cuisses", feet=gear.tp_ValorFeet}       
  332.            
  333.     sets.engaged.Hybrid = {ammo="Hasty Pinion +1",
  334.         head="Ighwa Cap", neck="Agitator's Collar", ear1="Digni. Earring", ear2="Telos Earring",
  335.         body="Rev. Surcoat +1", hands="Odyssean Gauntlets", ring1="Defending Ring", ring2="Patricius Ring",
  336.         back="Weard Mantle", waist="Kentarch Belt +1", legs="Eschite Cuisses", feet="Amm Greaves"}
  337.            
  338.     sets.engaged.PDT = {ammo="Hasty Pinion +1",
  339.         head="Loess Barbuta +1", neck="Twilight Torque", ear1="Genmei Earring", ear2="Telos Earring",
  340.         body="Rev. Surcoat +1", hands="Odyssean Gauntlets", ring1="Defending Ring", ring2={ name="Dark Ring", augments={'Enemy crit. hit rate -2','Magic dmg. taken -3%','Phys. dmg. taken -6%',}},
  341.         back="Shadow Mantle", waist="Flume Belt", legs="Rev. Breeches +1", feet="Amm Greaves"}
  342.            
  343.     sets.engaged.MDT = {ammo="Vanir Battery",
  344.         head="Founder's Corona", neck="Warder's Charm +1", ear1="Sanare Earring", ear2="Etiolation Earring",
  345.         body="Rev. Surcoat +1", hands="Umuthi Gloves", ring1="Defending Ring", ring2="Shadow Ring",
  346.         back="Reiki Cloak", waist="Asklepian Belt", legs="Mes'yohi Slacks", feet="Amm Greaves",}
  347.            
  348.     sets.engaged.BDT = {ammo="Vanir Battery",
  349.         head="Loess Barbuta +1", neck="Twilight Torque", ear1="Zwazo Earring +1", ear2="Cryptic Earring",
  350.         body="Rev. Surcoat +1", hands="Leyline Gloves", ring1="Defending Ring", ring2="K'ayres Ring",
  351.         back="Mollusca Mantle", waist="Asklepian Belt", legs="Scuff. Cosciales", feet="Amm Greaves",}          
  352.            
  353.     sets.engaged.repulse = {}
  354.    
  355.     sets.engaged.Nixxer = {main="Nixxer"}  
  356.     sets.engaged.Reikiko = {main="Reikiko"}
  357.    
  358.     sets.engaged.Aegis = set_combine(meleeSet, {sub="Aegis"})
  359.     sets.engaged.Ochain = set_combine(meleeSet, {sub="Ochain"})
  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. -------------------------------------------------------------------------------------------------------------------
  407. -- Utility functions specific to this job.
  408. -------------------------------------------------------------------------------------------------------------------
  409.  
  410. -- Select default macro book on initial load or subjob change.
  411. function select_default_macro_book()
  412.     -- Default macro set/book
  413.     if player.sub_job == 'WAR' then
  414.         set_macro_page(1, 6)
  415.     elseif player.sub_job == 'NIN' then
  416.         set_macro_page(2, 6)
  417.     elseif player.sub_job == 'SAM' then
  418.         set_macro_page(3, 6)
  419.     elseif player.sub_job == 'BLU' then
  420.         set_macro_page(4, 6)       
  421.     else
  422.         set_macro_page(1, 6)
  423.     end
  424. end
  425.  
  426. function get_rune_obi_element()
  427.     weather_rune = buffactive[elements.rune_of[world.weather_element] or '']
  428.     day_rune = buffactive[elements.rune_of[world.day_element] or '']
  429.    
  430.     local found_rune_element
  431.    
  432.     if weather_rune and day_rune then
  433.         if weather_rune > day_rune then
  434.             found_rune_element = world.weather_element
  435.         else
  436.             found_rune_element = world.day_element
  437.         end
  438.     elseif weather_rune then
  439.         found_rune_element = world.weather_element
  440.     elseif day_rune then
  441.         found_rune_element = world.day_element
  442.     end
  443.    
  444.     return found_rune_element
  445. end
  446.  
  447. function get_obi(element)
  448.     if element and elements.obi_of[element] then
  449.         return (player.inventory[elements.obi_of[element]] or player.wardrobe[elements.obi_of[element]]) and elements.obi_of[element]
  450.     end
  451. end
  452.  
  453.  
  454. ------------------------------------------------------------------
  455. -- Timer manipulation
  456. ------------------------------------------------------------------
  457.  
  458. -- Add a new run to the custom timers, and update index values for existing timers.
  459. function update_timers(spell)
  460.     local expires_time = os.time() + 300
  461.     local entry_index = rune_count(spell.name) + 1
  462.  
  463.     local entry = {rune=spell.name, index=entry_index, expires=expires_time}
  464.  
  465.     rune_timers:append(entry)
  466.     local cmd_queue = create_timer(entry).. ';wait 0.05;'
  467.    
  468.     cmd_queue = cmd_queue .. trim()
  469.  
  470.     -- add_to_chat(123,'cmd_queue='..cmd_queue)
  471.  
  472.     send_command(cmd_queue)
  473. end
  474.  
  475. -- Get the command string to create a custom timer for the provided entry.
  476. function create_timer(entry)
  477.     local timer_name = '"Rune: ' .. entry.rune .. '-' .. tostring(entry.index) .. '"'
  478.     local duration = entry.expires - os.time()
  479.     return 'timers c ' .. timer_name .. ' ' .. tostring(duration) .. ' down'
  480. end
  481.  
  482. -- Get the command string to delete a custom timer for the provided entry.
  483. function delete_timer(entry)
  484.     local timer_name = '"Rune: ' .. entry.rune .. '-' .. tostring(entry.index) .. '"'
  485.     return 'timers d ' .. timer_name .. ''
  486. end
  487.  
  488. -- Reset all timers
  489. function reset_timers()
  490.     local cmd_queue = ''
  491.     for index,entry in pairs(rune_timers) do
  492.         cmd_queue = cmd_queue .. delete_timer(entry) .. ';wait 0.05;'
  493.     end
  494.     rune_timers:clear()
  495.     send_command(cmd_queue)
  496. end
  497.  
  498. -- Get a count of the number of runes of a given type
  499. function rune_count(rune)
  500.     local count = 0
  501.     local current_time = os.time()
  502.     for _,entry in pairs(rune_timers) do
  503.         if entry.rune == rune and entry.expires > current_time then
  504.             count = count + 1
  505.         end
  506.     end
  507.     return count
  508. end
  509.  
  510. -- Remove the oldest rune(s) from the table, until we're below the max_runes limit.
  511. -- If given a value n, remove n runes from the table.
  512. function trim(n)
  513.     local cmd_queue = ''
  514.  
  515.     local to_remove = n or (rune_timers:length() - max_runes)
  516.  
  517.     while to_remove > 0 and rune_timers:length() > 0 do
  518.         local oldest
  519.         for index,entry in pairs(rune_timers) do
  520.             if oldest == nil or entry.expires < rune_timers[oldest].expires then
  521.                 oldest = index
  522.             end
  523.         end
  524.        
  525.         cmd_queue = cmd_queue .. prune(rune_timers[oldest].rune)
  526.         to_remove = to_remove - 1
  527.     end
  528.    
  529.     return cmd_queue
  530. end
  531.  
  532. -- Drop the index of all runes of a given type.
  533. -- If the index drops to 0, it is removed from the table.
  534. function prune(rune)
  535.     local cmd_queue = ''
  536.    
  537.     for index,entry in pairs(rune_timers) do
  538.         if entry.rune == rune then
  539.             cmd_queue = cmd_queue .. delete_timer(entry) .. ';wait 0.05;'
  540.             entry.index = entry.index - 1
  541.         end
  542.     end
  543.  
  544.     for index,entry in pairs(rune_timers) do
  545.         if entry.rune == rune then
  546.             if entry.index == 0 then
  547.                 rune_timers[index] = nil
  548.             else
  549.                 cmd_queue = cmd_queue .. create_timer(entry) .. ';wait 0.05;'
  550.             end
  551.         end
  552.     end
  553.    
  554.     return cmd_queue
  555. end
  556.  
  557.  
  558. ------------------------------------------------------------------
  559. -- Reset events
  560. ------------------------------------------------------------------
  561.  
  562. windower.raw_register_event('zone change',reset_timers)
  563. windower.raw_register_event('logout',reset_timers)
  564. windower.raw_register_event('status change',function(new, old)
  565.     if gearswap.res.statuses[new].english == 'Dead' then
  566.         reset_timers()
  567.     end
  568. end)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement