Advertisement
vm0d

vmod_WHM

Jun 16th, 2018
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 28.39 KB | None | 0 0
  1. -------------------------------------------------------------------------------------------------------------------
  2. -- Setup functions for this job.  Generally should not be modified.
  3. -- Modified JUL 01 2018
  4. -------------------------------------------------------------------------------------------------------------------
  5.  
  6. -- Initialization function for this job file.
  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. -- Setup vars that are user-independent.  state.Buff vars initialized here will automatically be tracked.
  15. function job_setup()
  16.     state.Buff['Sleep'] = buffactive['Sleep'] or false
  17.     state.Buff['Aurorastorm'] = buffactive['Aurorastorm'] or false
  18.     state.Buff['Afflatus Solace'] = buffactive['Afflatus Solace'] or false
  19.     state.Buff['Afflatus Misery'] = buffactive['Afflatus Misery'] or false
  20.     state.Buff['Divine Caress'] = buffactive['Divine Caress'] or false
  21.     state.Buff['Reive Mark'] = buffactive['Reive Mark'] or false
  22. end
  23.  
  24. -------------------------------------------------------------------------------------------------------------------
  25. -- User setup functions for this job.  Recommend that these be overridden in a sidecar file.
  26. -------------------------------------------------------------------------------------------------------------------
  27.  
  28. -- Setup vars that are user-dependent.  Can override this function in a sidecar file.
  29. function user_setup()
  30.     state.CastingMode:options('Normal', 'Resistant')
  31.     state.OffenseMode:options('None', 'Normal')
  32.  
  33.     select_default_macro_book()
  34.  
  35.     -- Gear Definitions
  36.     gear.DarkRing = {name="Dark Ring"}
  37.     gear.Reive = {name="Ygnas's Resolve +1"}
  38.     gear.JPcape = {name="Mecistopins Mantle"}
  39.     gear.HasteBelt = {name="Witful Belt"}
  40.     gear.default.cure_waist = {name="Witful Belt"}
  41.     gear.default.obi_waist = {name="Eschan Stone"}
  42.     gear.default.obi_back = {name="Alaunus's Cape"}
  43.     gear.default.cure_back = {name="Alaunus's Cape"}
  44.  
  45.     -- Melee Set, for the melee whm
  46.     gear.MeleeHead = {name="Telchine Cap"}
  47.     gear.MeleeBody = {name="Telchine Chasuble"}
  48.     gear.MeleeHands = {name="Telchine Gloves"}
  49.     gear.MeleeLegs = {name="Telchine Braconi"}
  50.     gear.MeleeFeet = {name="Telchine Pigaches"}
  51.  
  52.     -- Artifact set
  53.     -- For most whm, this set is unneccessary
  54.     -- Artifact Head has cure potency, cure cast
  55.     gear.AFHead = {name="Theophany Cap +2"}
  56.     -- Artifact Body has enfeebling skill, cure potency
  57.     gear.AFBody = {name="Theophany Briault +2"}
  58.     -- Artifact Hands have healing skill
  59.     gear.AFHands = {name="Theophany Mitts +2"}
  60.     -- Artifact Legs have divine skill, regen duration, cursna
  61.     gear.AFLegs = {name="Theophany Pantaloons +2"}
  62.     -- Artifact Feet have enhancing skill, enfeebling skill, spell interruption -25%
  63.     gear.AFFeet = {name="Theophany Duckbills +2"}
  64.  
  65.     -- Relic set
  66.     -- Hands are unneccessary
  67.     -- Relic Head has cure cast, aug: Devotion
  68.     gear.RHead = {name="Piety Cap +3"}
  69.     -- Relic Body has regen potency, aug: Benediction
  70.     gear.RBody = {name="Piety Briault +3"}
  71.     -- Relic Hands have banish potency, divine skill, enfeebling skill, aug: Martyr
  72.     gear.RHands = {name="Piety Mitts +3"}
  73.     -- Relic Legs have healing skill, enhancing skill, barspell +30, aug: Shellra
  74.     gear.RLegs = {name="Piety Pantaloons +2"}
  75.     -- Relic Feet have enhancing skill, enfeebling skill, cure potency, aug: Protectra
  76.     gear.RFeet = {name="Piety Duckbills +3"}
  77.  
  78.     -- Empyrean set
  79.     -- Empyrean set has a unique set bonus which applies with as little as 2 pieces.
  80.     -- This entire set should be acquired and +2.
  81.     -- Empyrean Head is for aug: Divine Veil
  82.     gear.EmpHead = {name="Ebers Cap +1"}
  83.     -- Empyrean Body is for aug: Afflatus Solace
  84.     gear.EmpBody = {name="Ebers Bliaud +1"}
  85.     -- Empyrean Hands are for regen duration, aug: divine caress
  86.     gear.EmpHands = {name="Ebers Mitts +1"}
  87.     -- Empyrean Legs are for mp return from cure
  88.     gear.EmpLegs = {name="Ebers Pantaloons +1"}
  89.     -- Empyrean Feet are for aug: Auspice
  90.     gear.EmpFeet = {name="Ebers Duckbills +1"}
  91.  
  92.     -- Gendewitha Set
  93.     -- This entire set should be acquired and aug for DT, either NQ or +1
  94.     -- Gendewitha head is for DT, Cure potency
  95.     -- Best aug is cure potency
  96.     gear.GHead = {name="Gendewitha Caubeen +1"}
  97.     -- Gendewitha body is for DT
  98.     gear.GBody = {name="Gendewitha Bliaut +1"}
  99.     -- Gendewitha hands is for DT, Precast fast cast, Midcast recast
  100.     gear.GHands = {name="Gendewitha Gages +1"}
  101.     -- Gendewitha legs is for DT, Precast song cast
  102.     gear.GLegs = {name="Gendewitha Spats +1"}
  103.     -- Gendewitha feet is for DT, cursna
  104.     gear.GFeet = {name="Gendewitha Galoshes +1"}
  105.  
  106.     -- Telchine set
  107.     -- Many augs are available for this set, multiple sets are an option
  108.     -- This set assumes max Fast Cast and Enhancing duration augs on all pieces
  109.     -- Telchine head is for M.Acc
  110.     gear.THeadEnh = {name="Telchine Cap", augments={'Enh. Mag. eff. dur. +10'}}
  111.     -- Telchine body is for Enhancing skill+12, Regen duration +12
  112.     gear.TBodyEnh = {name="Telchine Chasuble", augments={'Enh. Mag. eff. dur. +10'}}
  113.     -- Telchine hands is for cure potency
  114.     gear.THandsEnh = {name="Telchine Gloves", augments={'Enh. Mag. eff. dur. +10'}}
  115.     -- Telchine legs is for MAB+15, DA+3
  116.     gear.TLegsEnh = {name="Telchine Braconi", augments={'Enh. Mag. eff. dur. +10'}}
  117.     -- Telchine feet is for precast song cast
  118.     gear.TFeetEnh = {name="Telchine Pigaches", augments={'Enh. Mag. eff. dur. +10'}}
  119.  
  120.     -- Vanya set
  121.     -- Vanya head is for conserve mp, cure pot, mdt-
  122.     -- Path D aug for precast fc and haste
  123.     gear.VHead = {name="Vanya Hood"}
  124.     -- Vanya body is for m.acc, divine skill, enfeebling skill, dt-
  125.     gear.VBody = {name="Vanya Robe"}
  126.     -- Vanya hands is for singing skill
  127.     gear.VHands = {name="Vanya Cuffs"}
  128.     -- Vanya legs is for m.acc, conserve mp
  129.     gear.VLegs = {name="Vanya Slops"}
  130.     -- Vanya feet is for healing skill, cure pot, cursna
  131.     gear.VFeet = {name="Vanya Clogs"}
  132.  
  133.     -- Chironic set
  134.     -- Chironic head is for acc, mdt, aquaveil
  135.     gear.CHead = {name="Chironic Hat"}
  136.     -- Chironic body is for
  137.     --gear.CBody = {name="Chironic"}
  138.     -- Chironic hands is for acc, mab, enhancing skill, enm-, spell interruption-
  139.     gear.CHands = {name="Chironic Gloves"}
  140.     -- Chironic legs is for enfeebling skill, cure pot, immunobreak
  141.     gear.CLegs = {name="Chironic Hose"}
  142.     -- Chironic feet is for atk, mab, divine skill, enm-, pdt
  143.     gear.CFeet = {name="Chironic Slippers"}
  144.  
  145.     -- Kaykaus set
  146.     -- Kaykaus head is for m.acc, healing skill, cure pot, mdt
  147.     gear.KHead = {name="Kaykaus Mitra"}
  148.     -- Kaykaus body is for acc, m.acc, refresh, cure potII
  149.     gear.KBody = {name="Kaykaus Bliaut"}
  150.     -- Kaykaus hands is for m.acc, enfeebling skill, enm-, cure pot
  151.     gear.KHands = {name="Kaykaus Cuffs"}
  152.     -- Kaykaus legs is for m.atk, divine skill, fc, cure pot
  153.     gear.KLegs = {name="Kaykaus Tights"}
  154.     -- Kaykaus feet is for enhancing skill, enm-, conserve mp, cure pot
  155.     gear.KFeet = {name="Kaykaus Boots"}
  156.  
  157.     -- Ayanmo set
  158.     -- Ayanmo head is for
  159.     gear.AyaHead = {name="Ayanmo Zuccheto +1"}
  160.     -- Ayanmo body is for
  161.     gear.AyaBody = {name="Ayanmo Corazza +1"}
  162.     -- Ayanmo hands is for
  163.     gear.AyaHands = {name="Ayanmo Manopolas +1"}
  164.     -- Ayanmo legs is for precast fc and haste
  165.     gear.AyaLegs = {name="Ayanmo Cosciales +2"}
  166.     -- Ayanmo feet is for
  167.     gear.AyaFeet = {name="Ayanmo Gambieras +1"}
  168.  
  169.     -- Inyanga set
  170.     -- Inyanga head is for
  171.     gear.IHead = {name="Inyanga +2"}
  172.     -- Inyanga body is for precast precast fc and haste
  173.     gear.IBody = {name="Inyanga Jubbah +2"}
  174.     -- Inyanga hands is for
  175.     gear.IHands = {name="Inyanga +2"}
  176.     -- Inyanga legs is for precast haste and fc
  177.     gear.ILegs = {name="Inyanga Shalwar +2"}
  178.     -- Inyanga feet is for
  179.     gear.IFeet = {name="Inyanga +2"}
  180.  
  181.     -- Additional local binds
  182.     -- F10, F11, F12 are occupied by default as follows:
  183.     -- f10 reset DefenseMode
  184.     -- ^f10 DefenseMode Physical
  185.     -- !f10 DefenseMode Magical
  186.     -- f11 toggle CP
  187.     -- ^f11 toggle Kiting
  188.     -- !f11 EquipStop
  189.     -- f12 update user
  190.     -- ^f12 IdleMode
  191.     send_command('bind f9 gs c cycle CastingMode')
  192.     send_command('bind !f9 gs c cycle OffenseMode')
  193.    
  194.     send_command('bind ^` input /ma "Reraise IV" <me>')
  195. end
  196.  
  197.  
  198. -- Called when this job file is unloaded (eg: job change)
  199. function user_unload()
  200.     send_command('unbind ^`')
  201. end
  202.  
  203.  
  204. -- Define sets and vars used by this job file.
  205. function init_gear_sets()
  206.     --------------------------------------
  207.     -- Special sets (required by rules)
  208.     --------------------------------------
  209.  
  210.     -- Globally defined sets
  211.     sets.Kiting = {feet="Herald's Gaiters"}
  212.     sets.CP = {back=gear.JPcape}
  213.  
  214.     -- vm0d's Custom Sets
  215.     -- Sets to augment the Idle set
  216.     sets.latent_refresh = {waist="Fucho-no-obi"}
  217.     sets.DayRefresh = {head="Befouled Crown",legs="Assiduity Pants +1",feet="Serpentes Sabots"}
  218.     sets.NightRefresh = {head="Befouled Crown",legs="Assiduity Pants +1",hands="Serpentes Cuffs"}
  219.     sets.ExtraRegen = {neck="Sanctity Necklace",ring1="Sheltered Ring",ring2="Paguroidea Ring"}
  220.     sets.ExtraRefresh = {head="Befouled Crown",legs="Assiduity Pants +1"}
  221.     sets.SelfRefresh = {back="Grapevine Cape",waist="Gishdubar Sash"}
  222.     sets.Sanction = {ring1="Balrahn's Ring"}
  223.     sets.Roll = {ring1="Roller's Ring"}
  224.     sets.poison = {back="Taster's Cape"}
  225.     sets.Aries = {back="Aries Mantle"}
  226.     sets.ProSh = {ring1="Sheltered Ring"}
  227.     sets.ObiCure = {back="Twilight Cape",waist="Hachirin-no-Obi"}
  228.     -- Sets that augment various sets
  229.     sets.Moonshade = {ear2="Moonshade Earring"}
  230.     -- Normal Offense mode locked weapon set
  231.     sets.Offense = {main="Yagrush",sub="Culminus"}
  232.  
  233.     -- Buff sets: Gear that needs to be worn to actively enhance a current player buff.
  234.     sets.buff['Afflatus Solace'] = {body=gear.EmpBody}
  235.     sets.buff['Divine Caress'] = {hands=gear.EmpHands,back="Mending Cape"}
  236.     sets.buff['Reive Mark'] = {neck=gear.Reive}
  237.  
  238.  
  239.     --------------------------------------
  240.     -- Precast sets
  241.     --------------------------------------
  242.  
  243.     -- Fast cast sets for spells
  244.     sets.precast.FC = {main="Nibiru Cudgel",sub="Chanter's Shield",ammo="Impatiens",
  245.         head=gear.VHead,neck="Orunmila's Torque",ear1="Enchanter Earring +1",ear2="Loquacious Earring",
  246.         body=gear.IBody,hands=gear.GHands,ring1="Kishar Ring",ring2="Veneficium Ring",
  247.         back="Perimede Cape",waist="Witful Belt",legs=gear.AyaLegs,feet="Regal Pumps +1"}
  248.  
  249.     sets.precast['Enhancing Magic'] = set_combine(sets.precast.FC, {})
  250.  
  251.     sets.precast.Stoneskin = set_combine(sets.precast.FC, {head="Umuthi Hat"})
  252.  
  253.     sets.precast['Healing Magic'] = set_combine(sets.precast.FC, {legs=gear.EmpLegs})
  254.  
  255.     sets.precast.Cure = set_combine(sets.precast['Healing Magic'], {main="Vadose Rod",sub="Genbu's Shield",ear2="Mendicant's Earring"})
  256.  
  257.     sets.precast.StatusRemoval = set_combine(sets.precast.FC['Healing Magic'], {})
  258.  
  259.     -- Precast sets to enhance JAs
  260.     sets.precast.JA.Benediction = {body=gear.RBody}
  261.     sets.precast.JA.Devotion = {body=gear.RHead}
  262.     --sets.precast.JA.Martyr = {body=gear.RHands}
  263.  
  264.     -- Waltz set (chr and vit)
  265.     sets.precast.Waltz = {
  266.         head=gear.GHead,
  267.         body=gear.GBody,hands=gear.GHands,
  268.         legs=gear.GLegs,feet=gear.GFeet}
  269.  
  270.  
  271.     -- Weaponskill sets
  272.  
  273.     -- Default set for any weaponskill that isn't any more specifically defined
  274.     sets.precast.WS = {
  275.         head=gear.MeleeHead,neck="Fotia Gorget",ear1="Steelflash Earring",ear2="Bladeborn Earring",
  276.         body=gear.MeleeBody,hands=gear.MeleeHands,ring1="Petrov Ring",ring2="Rajas Ring",
  277.         back="Kayapa Cape",waist="Fotia Belt",legs=gear.MeleeLegs,feet=gear.MeleeFeet}
  278.  
  279.     -- Hexa Strike
  280.     -- Delivers a sixfold attack. Critical hit chance varies with TP.
  281.     -- 30% STR / 30% MND
  282.     -- This weaponskill has its fTP transferred across all hits, making Elemental Gorgets and Elemental Belts excellent neck and waist gear options.
  283.     sets.precast.WS['Hexa Strike'] = set_combine(sets.precast.WS, {})
  284.  
  285.     -- Realmrazer
  286.     -- Delivers a sevenfold attack. Accuracy varies with TP.
  287.     -- 73% MND mod on 1st merit, +3% for 2nd-5th merits. 85% MND mod at 5/5.
  288.     -- This weaponskill has its fTP transferred across all hits, making Elemental Gorgets and Elemental Belts excellent neck and waist gear options.
  289.     sets.precast.WS['Realmrazer'] = set_combine(sets.precast.WS, {})
  290.  
  291.     -- Flash Nova
  292.     -- Delivers light elemental damage. Additional effect: Flash. Chance of effect varies with TP.
  293.     -- 50% STR / 50% MND, (pINT-mINT)/2 + 8
  294.     sets.precast.WS['Flash Nova'] = {ammo="Hydrocera",
  295.         head=gear.THeadEnh,neck="Fotia Gorget",ear1="Friomisi Earring",ear2="Novio Earring",
  296.         body=gear.TBodyEnh,hands=gear.THandsEnh,ring1="Shiva Ring +1",ring2="Arvina Ringlet +1",
  297.         back="Toro Cape",waist="Fotia Belt",legs=gear.TLegsEnh,feet=gear.TFeetEnh}
  298.  
  299.     -- Dagan
  300.     -- 15% MP & 22% HP recovered @ 1000TP, 22% MP & 33% HP @ 2000TP, 35% MP & 52% HP @ 3000TP
  301.     sets.precast.WS['Dagan'] = {ammo="Hydrocera",
  302.         head=gear.EmpHead,neck="Fotia Gorget",ear1="Andoaa Earring",ear2="Loquacious Earring",
  303.         body=gear.EmpBody,hands=gear.EmpHands,ring1="Metamorph Ring +1",ring2="Zodiac Ring",
  304.         back="Twilight Cape",waist="Fotia Belt",legs=gear.RLegs,feet=gear.EmpFeet}
  305.  
  306.     -- Moonlight restores floor(Club Skill × 0.11) × Multiplier (2.25 @ 1000TP/3.5 @ 2000TP/4.75 @ 3000TP)
  307.     -- WHM99 capped club skill base 404, merits 16, skill 242 weapon: total 662. base multiplier = 72.82mp
  308.     sets.precast.WS['Moonlight'] = {neck="Fotia Gorget",ear1="Sanare Earring",waist="Fotia Belt"}
  309.  
  310.     --------------------------------------
  311.     -- Midcast Sets
  312.     --------------------------------------
  313.  
  314.     -- Base fast recast for spells
  315.     sets.midcast.FastRecast = {main="Luckitoo",sub="Chanter's Shield",ammo="Incantor Stone",
  316.         head=gear.VHead,neck="Orunmila's Torque",ear1="Enchanter Earring +1",ear2="Loquacious Earring",
  317.         body=gear.IBody,hands="Fanatic Gloves",ring1="Kishar Ring",ring2="Prolix Ring",
  318.         back="Alaunus's Cape",waist="Witful Belt",legs=gear.AyaLegs,feet=gear.TFeetEnh}
  319.  
  320.     -- Cure Sets
  321.  
  322.     sets.midcast.Cure = {main="Raetic Rod",sub="Sors Shield",ammo="Hydrocera",
  323.         head=gear.GHead,neck="Incanter's Torque",ear1="Novia Earring",ear2="Glorious Earring",
  324.         body=gear.EmpBody,hands=gear.AFHands,ring1="Kuchekula Ring",ring2="Sirona's Ring",
  325.         back="Alaunus's Cape",waist=gear.HasteBelt,legs=gear.EmpLegs,feet=gear.RFeet}
  326.  
  327.     sets.midcast.CureSolace = set_combine(sets.midcast.Cure, {})
  328.  
  329.     sets.midcast.CureMelee = set_combine(sets.midcast.Cure, {})
  330.  
  331.     sets.midcast.Cursna = set_combine(sets.midcast.FastRecast, {main="Yagrush",
  332.         hands="Fanatic Gloves",ring2="Haoma's Ring",
  333.         back="Alaunus's Cape",legs=gear.AFLegs,feet=gear.GFeet})
  334.  
  335.     sets.midcast.StatusRemoval = set_combine(sets.midcast.FastRecast, {main="Yagrush"})
  336.  
  337.     -- Buff Sets
  338.     -- White Mage has C+ rating in enhancing magic, at 99 cap skill is 378
  339.     -- 16 skill in merits raises the total to 394
  340.     -- Optionally, Light arts adds 26 skill to raise the total to 420
  341.     sets.midcast['Enhancing Magic'] = set_combine(sets.midcast.FastRecast, {main="Gada",
  342.         head=gear.THeadEnh,body=gear.TBodyEnh,hands=gear.THandsEnh,legs=gear.TLegsEnh,feet=gear.TFeetEnh})
  343.  
  344.     sets.midcast['Aquaveil'] = set_combine(sets.midcast['Enhancing Magic'], {main="Vadose Rod",head=gear.ChiHead,waist="Emphatikos Rope"})
  345.  
  346.     -- WHM base MND ~90.
  347.     -- If ((Enhancing Magic Skill ÷ 3) + MND) ≥ 130 [base whm stats: 394/3 + 90 = 221 and 221 > 130],
  348.     -- then (Enhancing Magic Skill + 3×MND - 190) = Stoneskin strength [base whm stats: (380 + 3x90 - 190) = 385 Stoneskin strength]
  349.     -- Stoneskin caps at 350 HP absorbed, therefore WHM need only use Stoneskin enhancing gear.
  350.     sets.midcast.Stoneskin = set_combine(sets.midcast['Enhancing Magic'], {neck="Stone Gorget",ear1="Earthcry Earring",waist="Siegel Sash",legs="Haven Hose"})
  351.  
  352.     -- Phalanx reaches potency cap at 500 Enhancing Magic Skill
  353.     -- 106 or 80 (SJ SCH+Light Art) skill needed to reach cap
  354.     sets.midcast.Phalanx = set_combine(sets.midcast['Enhancing Magic'], {
  355.         neck="Incanter's Torque",ear1="Augmenting Earring",ear2="Andoaa Earring",ring2="Stikini Ring",back="Mending Cape",waist="Olympus Sash"})
  356.  
  357.     -- Elemental Barspell reaches potency cap at 500 Enhancing Magic Skill
  358.     -- 106 or 80 (SJ SCH+Light Art) skill needed to reach cap
  359.     -- Relic legs add resistance beyond the cap
  360.     -- Beneficus adds Magic Defense Bonus +5
  361.     -- Empyrean body has Afflatus Solace: Magic Defense Bonus +
  362.     -- Empyrean set will occasionally annul dmg (+2~10%)
  363.     sets.midcast.BarElement = set_combine(sets.midcast['Enhancing Magic'], {main="Beneficus",
  364.         head=gear.EmpHead,neck="Incanter's Torque",ear1="Augmenting Earring",ear2="Andoaa Earring",
  365.         body=gear.EmpBody,hands=gear.EmpHands,ring2="Stikini Ring",
  366.         back="Alaunus's Cape",legs=gear.RLegs,feet=gear.EmpFeet})
  367.  
  368.     -- Status Barspell (likely) reaches potency cap at 500 Enhancing Magic Skill
  369.     -- 106 or 80 (SJ SCH+Light Arts) skill needed to reach cap
  370.     sets.midcast.BarStatus = set_combine(sets.midcast['Enhancing Magic'], {
  371.         neck="Incanter's Torque",ear1="Augmenting Earring",ear2="Andoaa Earring",ring2="Stikini Ring",back="Mending Cape",waist="Olympus Sash"})
  372.  
  373.     sets.midcast.Regen = set_combine(sets.midcast['Enhancing Magic'], {main="Bolelabunga",sub="Thuellaic Ecu +1",hands=gear.EmpHands,legs=gear.AFLegs})
  374.  
  375.     sets.midcast.Auspice = set_combine(sets.midcast['Enhancing Magic'], {feet=gear.EmpFeet})
  376.  
  377.     -- Boost spells reach potency cap at 500 Enhancing Magic Skill
  378.     -- 106 or 80 (SJ SCH+Light Art) skill needed to reach cap
  379.     sets.midcast.Boost = set_combine(sets.midcast['Enhancing Magic'], {
  380.         neck="Incanter's Torque",ear1="Augmenting Earring",ear2="Andoaa Earring",ring2="Stikini Ring",back="Mending Cape",waist="Olympus Sash"})
  381.  
  382.     sets.midcast.Protectra = set_combine(sets.midcast['Enhancing Magic'], {ring1="Sheltered Ring",feet=gear.RFeet})
  383.  
  384.     sets.midcast.Shellra = set_combine(sets.midcast['Enhancing Magic'], {ring1="Sheltered Ring",legs=gear.RLegs})
  385.  
  386.     -- Currently, these spells have no augmenting gear, therefore need not be defined individually
  387.     --sets.midcast.Refresh = set_combine(sets.midcast['Enhancing Magic'], {})
  388.     --sets.midcast.Haste = set_combine(sets.midcast['Enhancing Magic'], {})
  389.     --sets.midcast.Flurry = set_combine(sets.midcast['Enhancing Magic'], {})
  390.     --sets.midcast.Storm = set_combine(sets.midcast['Enhancing Magic'], {})
  391.  
  392.     -- Offensive Magic Sets
  393.     sets.midcast.Dia = set_combine(sets.midcast.FastRecast, {main="Dia Wand"})
  394.  
  395.     sets.midcast['Divine Magic'] = {main="Gada",sub="Thuellaic Ecu +1",ammo="Hydrocera",
  396.         head=gear.CHead,neck="Incanter's Torque",ear1="Psystorm Earring",ear2="Lifestorm Earring",
  397.         body=gear.AFBody,hands=gear.RHands,ring1="Globidonta Ring",ring2="Metamorph Ring +1",
  398.         back="Alaunus's Cape",waist="Ovate Rope",legs=gear.AFLegs,feet=gear.CFeet}
  399.  
  400.     sets.midcast.Repose = {main="Gada",sub="Thuellaic Ecu +1",ammo="Hydrocera",
  401.         head=gear.CHead,neck="Incanter's Torque",ear1="Psystorm Earring",ear2="Lifestorm Earring",
  402.         body=gear.AFBody,hands=gear.RHands,ring1="Globidonta Ring",ring2="Metamorph Ring +1",
  403.         back="Alaunus's Cape",waist="Ovate Rope",legs=gear.AFLegs,feet=gear.CFeet}
  404.  
  405.     sets.midcast['Dark Magic'] = {main="Gada",sub="Thuellaic Ecu +1",ammo="Hydrocera",
  406.         head=gear.CHead,neck="Incanter's Torque",ear1="Psystorm Earring",ear2="Lifestorm Earring",
  407.         body=gear.AFBody,hands=gear.CHands,ring1="Sangoma Ring",ring2="Metamorph Ring +1",
  408.         back="Alaunus's Cape",waist="Ovate Rope",legs=gear.CLegs,feet=gear.AFFeet}
  409.  
  410.     sets.midcast['Enfeebling Magic'] = {main="Gada",sub="Thuellaic Ecu +1",ammo="Hydrocera",
  411.         head=gear.CHead,neck="Incanter's Torque",ear1="Psystorm Earring",ear2="Lifestorm Earring",
  412.         body=gear.AFBody,hands=gear.RHands,ring1="Kishar Ring",ring2="Metamorph Ring +1",
  413.         back="Alaunus's Cape",waist="Ovate Rope",legs=gear.CLegs,feet=gear.AFFeet}
  414.  
  415.     --proper banish set
  416.     --sets.midcast.Banish = set_combine(sets.midcast['Divine Magic'], {main="Mes'yohi Rod",
  417.     --head="Ipoca Beret", neck="Jokushu Chain", hands=gear.RHands, cape="Disperser's Cape"})
  418.  
  419.     sets.midcast.Banish = set_combine(sets.midcast['Divine Magic'], {main="Mes'yohi Rod",hands=gear.RHands})
  420.  
  421.     --------------------------------------
  422.     -- Idle sets
  423.     --------------------------------------
  424.  
  425.     -- Sets to return to when not performing an action.
  426.  
  427.     -- if you won't be in danger of taking dmg and you are in a caster party {body="Anhur Robe"}
  428.     -- normal circumstances {body=gear.GBody}
  429.     sets.idle = {main="Bolelabunga",sub="Genbu's Shield",ammo="Homiliary",
  430.         head=gear.GHead,neck="Loricate Torque +1",ear1="Ethereal Earring",ear2="Sanare Earring",
  431.         body=gear.GBody,hands=gear.GHands,ring1=gear.DarkRing,ring2="Defending Ring",
  432.         back="Solemnity Cape",waist="Slipor Sash",legs=gear.GLegs,feet=gear.GFeet}
  433.  
  434.     sets.idle.PDT = set_combine(sets.idle, {})
  435.  
  436.     sets.idle.MDT = set_combine(sets.idle, {})
  437.  
  438.     sets.idle.Town = set_combine(sets.idle, {main="Yagrush",sub="Genbu's Shield",feet="Herald's Gaiters"})
  439.  
  440.     sets.idle.Weak = set_combine(sets.idle, {})
  441.  
  442.     -- Resting sets
  443.     sets.resting = set_combine(sets.idle, sets.ExtraRefresh)
  444.  
  445.     -- Engaged sets
  446.  
  447.     -- Variations for TP weapon and (optional) offense/defense modes.  Code will fall back on previous
  448.     -- sets if more refined versions aren't defined.
  449.     -- If you create a set with both offense and defense modes, the offense mode should be first.
  450.     -- EG: sets.engaged.Dagger.Accuracy.Evasion
  451.  
  452.     -- Basic set, Main and sub are defined earlier and locked if Offense mode is normal
  453.     sets.engaged = set_combine(sets.Offense, {ammo="Hasty Pinion +1",
  454.         head=gear.MeleeHead,neck="Lissome Necklace",ear1="Steelflash Earring",ear2="Bladeborn Earring",
  455.         body=gear.MeleeBody,hands=gear.MeleeHands,ring1="Petrov Ring",ring2="Rajas Ring",
  456.         back="Kayapa Cape",waist=gear.HasteBelt,legs=gear.MeleeLegs,feet=gear.MeleeFeet})
  457. end
  458.  
  459. -------------------------------------------------------------------------------------------------------------------
  460. -- Job-specific hooks for standard casting events.
  461. -------------------------------------------------------------------------------------------------------------------
  462.  
  463. -- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
  464. -- Set eventArgs.useMidcastGear to true if we want midcast gear equipped on precast.
  465. function job_precast(spell, action, spellMap, eventArgs)
  466.     if spell.english == "Paralyna" and buffactive.Paralyzed then
  467.         -- no gear swaps if we're paralyzed, to avoid blinking while trying to remove it.
  468.         eventArgs.handled = true
  469.     end
  470. end
  471.  
  472. function job_post_precast(spell, action, spellMap, eventArgs)
  473.     if spell.type:lower() == 'weaponskill' then
  474.         if (player.tp > 1749 and player.tp < 2000) or (player.tp > 2749 and player.tp < 3000) then
  475.             equip(sets.Moonshade)
  476.         end
  477.     end
  478. end
  479.  
  480. function job_post_midcast(spell, action, spellMap, eventArgs)
  481.     if spell.action_type == 'Magic' then
  482.         -- Apply Divine Caress boosting items as highest priority over other gear, if applicable.
  483.         if spellMap == 'StatusRemoval' and buffactive['Divine Caress'] then
  484.             equip(sets.buff['Divine Caress'])
  485.         end
  486.         if spellMap == 'Cure' and (buffactive['Aurorastorm'] or world.weather_element == 'Light' or world.day_element == 'Light') then
  487.             equip(sets.ObiCure)
  488.         end
  489.         if spellMap == 'Refresh' and spell.target.type == 'SELF' then
  490.             equip(sets.SelfRefresh)
  491.         end
  492.     end
  493. end
  494.  
  495. -------------------------------------------------------------------------------------------------------------------
  496. -- Job-specific hooks for non-casting events.
  497. -------------------------------------------------------------------------------------------------------------------
  498.  
  499. -- Called when a player gains or loses a buff.
  500. -- buff == buff gained or lost
  501. -- gain == true if the buff was gained, false if it was lost.
  502. function job_buff_change(buff, gain)
  503.     -- Check if we're in a Reive
  504.     if buff == "Reive Mark" then
  505.         if player.inventory[sets.buff['Reive Mark']] or player.wardrobe[sets.buff['Reive Mark']] or player.wardrobe2[sets.buff['Reive Mark']] or player.wardrobe3[sets.buff['Reive Mark']] or player.wardrobe4[sets.buff['Reive Mark']] then
  506.             if gain then
  507.                 equip(sets.buff['Reive Mark'])
  508.                 disable('neck')
  509.             elseif not gain then
  510.                 enable('neck')
  511.                 status_change(player.status)
  512.             end
  513.         end
  514.     end
  515. end
  516.  
  517. -- Handle notifications of general user state change.
  518. function job_state_change(stateField, newValue, oldValue)
  519.     -- Lock gear that affects TP
  520.     if stateField == 'Offense Mode' then
  521.         if newValue == 'Normal' then
  522.             equip(sets.Offense)
  523.             disable('main','sub','range')
  524.         else
  525.             enable('main','sub','range')
  526.         end
  527.     end
  528.     -- Equip capacity point gear
  529.     if stateField == 'CP' then
  530.         if newValue ~= false then
  531.             equip(sets.CP)
  532.             disable('back','ring1')
  533.         else
  534.             enable('back','ring1')
  535.         end
  536.     end
  537. end
  538.  
  539. -------------------------------------------------------------------------------------------------------------------
  540. -- User code that supplements standard library decisions.
  541. -------------------------------------------------------------------------------------------------------------------
  542.  
  543. -- Custom spell mapping.
  544. function job_get_spell_map(spell, default_spell_map)
  545.     if spell.action_type == 'Magic' then
  546.         if spellMap == 'Cure' and player.status == 'Engaged' then
  547.             return "CureMelee"
  548.         elseif spellMap == 'Cure' and state.Buff['Afflatus Solace'] then
  549.             return "CureSolace"
  550.         end
  551.     end
  552. end
  553.  
  554. -- Called any time we attempt to handle automatic gear equips (ie: engaged or idle gear).
  555. function job_handle_equipping_gear(playerStatus, eventArgs)
  556. end
  557.  
  558. function customize_idle_set(idleSet)
  559.     if player.hpp < 80 and state.DefenseMode.value == 'None' then
  560.         idleSet = set_combine(idleSet, sets.ExtraRegen)
  561.     end
  562.  
  563.     if player.mpp < 86 and state.DefenseMode.value == 'None' then
  564.         if world.time >= (18*60) or world.time <= (6*60) then
  565.             idleSet = set_combine(idleSet, sets.NightRefresh)
  566.         else
  567.             idleSet = set_combine(idleSet, sets.DayRefresh)
  568.         end
  569.     end
  570.  
  571.     if areas.TOAU:contains(world.area) then
  572.         idleSet = set_combine(idleSet, sets.Sanction)
  573.     end
  574.  
  575.     if buffactive['Poison'] and state.DefenseMode.value == 'None' then
  576.         idleSet = set_combine(idleSet, sets.poison)
  577.     end
  578.  
  579.     if player.mpp < 51 and state.DefenseMode.value == 'None' then
  580.         idleSet = set_combine(idleSet, sets.latent_refresh)
  581.     end
  582.  
  583.     if buffactive["Dancer's Roll"] or buffactive["Evoker's Roll"] or buffactive["Corsair's Roll"] or buffactive["Bolter's Roll"] then
  584.         idleSet = set_combine(idleSet, sets.Roll)
  585.     end
  586.  
  587.     if buffactive["Fighter's Roll"] or buffactive["Rogue's Roll"] or buffactive["Hunter's Roll"] or buffactive["Chaos Roll"] then
  588.         idleSet = set_combine(idleSet, sets.Roll)
  589.     end
  590.  
  591.     if buffactive["Wizard's Roll"] or buffactive["Warlock's Roll"] or buffactive["Caster's Roll"] or buffactive["Courser's Roll"] then
  592.         idleSet = set_combine(idleSet, sets.Roll)
  593.     end
  594.  
  595.     if buffactive["Samurai Roll"] or buffactive["Blitzer's Roll"] or buffactive["Tactician's Roll"] or buffactive["Miser's Roll"] then
  596.         idleSet = set_combine(idleSet, sets.Roll)
  597.     end
  598.  
  599.     if buffactive['Sleep'] then
  600.         idleSet = set_combine(idleSet, sets.Aries)
  601.     end
  602.  
  603.     if not buffactive['Protect'] or not buffactive['Shell'] then
  604.         idleSet = set_combine(idleSet, sets.ProSh)
  605.     end
  606.  
  607.     return idleSet
  608. end
  609.  
  610. -- Called by the 'update' self-command.
  611. function job_update(cmdParams, eventArgs)
  612.     if cmdParams[1] == 'user' and not areas.Cities:contains(world.area) then
  613.         local needsArts =
  614.             player.sub_job:lower() == 'sch' and
  615.             not buffactive['Light Arts'] and
  616.             not buffactive['Addendum: White'] and
  617.             not buffactive['Dark Arts'] and
  618.             not buffactive['Addendum: Black']
  619.            
  620.         if not buffactive['Afflatus Solace'] and not buffactive['Afflatus Misery'] then
  621.             if needsArts then
  622.                 send_command('@input /ja "Afflatus Solace" <me>;wait 1.2;input /ja "Light Arts" <me>')
  623.             else
  624.                 send_command('@input /ja "Afflatus Solace" <me>')
  625.             end
  626.         end
  627.     end
  628. end
  629.  
  630.  
  631. -- Function to display the current relevant user state when doing an update.
  632. function display_current_job_state(eventArgs)
  633.     local msg = 'White Mage'
  634.  
  635.     if state.CombatForm.has_value then
  636.         msg = msg .. ' (' .. state.CombatForm.value .. ')'
  637.     end
  638.  
  639.     msg = msg .. ', Magic: ' .. state.CastingMode.value
  640.  
  641.     msg = msg .. ', Offense: ' .. state.OffenseMode.value
  642.  
  643.     if state.DefenseMode.value ~= 'None' then
  644.         msg = msg .. ', ' .. 'Defense: ' .. state.DefenseMode.value .. ' (' .. state[state.DefenseMode.value .. 'DefenseMode'].value .. ')'
  645.     end
  646.  
  647.     if state.Kiting.value == true then
  648.         msg = msg .. ', Kiting ON'
  649.     end
  650.  
  651.     if state.CP.value == true then
  652.         msg = msg .. ', CP ON'
  653.     end
  654.  
  655.     add_to_chat(122, msg)
  656.  
  657.     eventArgs.handled = true
  658. end
  659.  
  660. -------------------------------------------------------------------------------------------------------------------
  661. -- Utility functions specific to this job.
  662. -------------------------------------------------------------------------------------------------------------------
  663.  
  664. -- Select default macro book on initial load or subjob change.
  665. function select_default_macro_book()
  666.     -- Default macro set/book
  667.     set_macro_page(1, 3)
  668. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement