Guest User

Linxe_BST.Lua

a guest
May 4th, 2016
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 80.02 KB | None | 0 0
  1. -------------------------------------------------------------------------------------------------------------------
  2. -- Last Revised: April 30th, 2016
  3. -- Uses Verda's pet_tp addon. http://www.ffxiah.com/forum/topic/47688/summoner-gearswap-yep-another-one-p/
  4. -- Acid Spray was missing from the magic_atk_ready list.
  5. -- Added a call_beast_cancel list to prevent usage of HQ jug pets with Call Beast.
  6. -- Moved pet_midcast rules to job_aftercast.
  7. -- Added Random Lockstyle Generator - set RandomLockstyleGenerator to 'false' to disable.
  8. -- Added on-screen indicators for Modes [requires the Text add-on] - set DisplayModeInfo to 'false' to disable
  9. -- Added Buff Timers for Reward, Spur, Run Wild - set DisplayPetBuffTimers to 'false' to disable
  10. --
  11. -- Gearswap Commands Specific to this File:
  12. -- Universal Ready Move Commands -
  13. -- //gs c Ready one
  14. -- //gs c Ready two
  15. -- //gs c Ready three
  16. --
  17. -- alt+F8 cycles through designated Jug Pets
  18. -- ctrl+F8 toggles Monster Correlation between Neutral and Favorable
  19. -- 'Windows Key'+F8 switches between Pet stances for Master/Pet hybrid gearsets
  20. -- ctrl+= can swap in the usage of Chaac Belt for Treasure Hunter on common subjob abilities.
  21. -- ctrl+F11 cycles between Magical Defense Modes
  22. --
  23. -- General Gearswap Commands:
  24. -- F9 cycles Accuracy modes
  25. -- ctrl+F9 cycles Hybrid modes
  26. -- 'Windows Key'+F9 cycles Weapon Skill modes
  27. -- F10 equips Physical Defense
  28. -- alt+F10 toggles Kiting on or off
  29. -- ctrl+F10 cycles Physical Defense modes
  30. -- F11 equips Magical Defense
  31. -- alt+F12 turns off Defense modes
  32. -- ctrl+F12 cycles Idle modes
  33. --
  34. -- Keep in mind that any time you Change Jobs/Subjobs, your Pet/Correlation/etc reset to default options.
  35. -- F12 will list your current options.
  36. -------------------------------------------------------------------------------------------------------------------
  37.  
  38. -------------------------------------------------------------------------------------------------------------------
  39. -- Initialization function that defines sets and variables to be used.
  40. -------------------------------------------------------------------------------------------------------------------
  41.  
  42. -- IMPORTANT: Make sure to also get the Mote-Include.lua file (and its supplementary files) to go with this.
  43.  
  44. -- Initialization function for this job file.
  45. function get_sets()
  46.     mote_include_version = 2
  47.  
  48.     -- Load and initialize the include file.
  49.     include('Mote-Include.lua')
  50.     include('organizer-lib')
  51. end
  52.  
  53. function job_setup()
  54.     -- Display and Random Lockstyle Generator options
  55.     DisplayPetBuffTimers = 'true'
  56.     DisplayModeInfo = 'true'
  57.     RandomLockstyleGenerator = 'false'
  58. include('Mote-TreasureHunter')
  59. state.HasteMode = M{['description']='Haste Mode', 'Normal', 'Hi' }
  60.     PetName = 'None';PetJob = 'None';PetInfo = 'None';ReadyMoveOne = 'None';ReadyMoveTwo = 'None';ReadyMoveThree = 'None'
  61.     pet_info_update()
  62.  
  63.     -- Input Pet:TP Bonus values for Skirmish Axes used during Pet Buffs
  64.     TP_Bonus_Main = 0  
  65.     TP_Bonus_Sub = 0
  66.  
  67.     -- 1200 Job Point Gift Bonus (Set equal to 0 if below 1200 Job Points)
  68.     TP_Gift_Bonus = 0
  69.  
  70.     -- (Adjust Run Wild Duration based on # of Job Points)
  71.     RunWildDuration = 300;RunWildIcon = 'abilities/00121.png'
  72.     RewardRegenIcon = 'spells/00023.png'
  73.     SpurIcon = 'abilities/00037.png'
  74.     BubbleCurtainDuration = 180;BubbleCurtainIcon = 'spells/00048.png'
  75.     ScissorGuardIcon = 'spells/00043.png'
  76.     SecretionIcon = 'spells/00053.png'
  77.     RageIcon = 'abilities/00002.png'
  78.     RhinoGuardIcon = 'spells/00053.png'
  79.     ZealousSnortIcon = 'spells/00057.png'
  80.  
  81.     -- Display Mode Info as on-screen Text
  82.     TextBoxX = 1075
  83.     TextBoxY = 47
  84.     TextSize = 10
  85.     display_mode_info()
  86.  
  87.     state.Buff['Aftermath: Lv.3'] = buffactive['Aftermath: Lv.3'] or false
  88.     state.Buff['Killer Instinct'] = buffactive['Killer Instinct'] or false
  89.  
  90.     get_combat_form()
  91.     get_melee_groups()
  92. end
  93.  
  94. function user_setup()
  95.     state.OffenseMode:options('Normal','MaxAcc')
  96.     state.HybridMode:options('Normal', 'Hybrid')
  97.     state.WeaponskillMode:options('Normal', 'WSMedAcc', 'WSHighAcc')
  98.     state.CastingMode:options('Normal')
  99.     state.IdleMode:options('Normal', 'Reraise', 'Regen', 'PetRegen')
  100.     state.RestingMode:options('Normal')
  101.     state.PhysicalDefenseMode:options('PetPDT', 'PDT')
  102.    
  103.     state.MagicalDefenseMode:options('MDTShell', 'PetMDT')
  104. select_default_macro_book()
  105.     -- 'Out of Range' distance; WS will auto-cancel
  106.     target_distance = 7
  107.  
  108.     -- Set up Jug Pet cycling and keybind Alt+F8
  109.     -- INPUT PREFERRED JUG PETS HERE
  110.     state.JugMode = M{['description']='Jug Mode', 'Meaty Broth', 'Bubbly Broth', 'Livid Broth',
  111.         'Tant. Broth'}
  112.     send_command('bind !f8 gs c cycle JugMode')
  113.  
  114.     -- Set up Monster Correlation Modes and keybind Ctrl+F8
  115.     state.CorrelationMode = M{['description']='Correlation Mode', 'Neutral', 'Favorable'}
  116.     send_command('bind ^f8 gs c cycle CorrelationMode')
  117.  
  118.     -- Set up Pet Modes for Hybrid sets and keybind 'Windows Key'+F8
  119.     state.PetMode = M{['description']='Pet Mode', 'Normal','PetOnly'}
  120.     send_command('bind @f8 gs c cycle PetMode')
  121.  
  122.     -- Keybind Ctrl+F11 to cycle Magical Defense Modes
  123.     send_command('bind ^f11 gs c cycle MagicalDefenseMode')
  124.  
  125.     -- Set up Treasure Modes and keybind Ctrl+=
  126.     state.TreasureMode = M{['description']='Treasure Mode', 'Tag', 'Normal'}
  127.     send_command('bind ^= gs c cycle TreasureMode')
  128.  
  129.     send_command('bind ^J input /ja "Spectral Jig" <me>')
  130.     send_command('bind @f9 gs c cycle HasteMode')
  131.    
  132. -- Complete list of Ready moves
  133. physical_ready_moves = S{'Foot Kick','Whirl Claws','Wild Carrot','Sheep Charge','Lamb Chop','Rage','Head Butt',
  134.     'Wild Oats','Leaf Dagger','Claw Cyclone','Razor Fang','Nimble Snap','Cyclotail','Rhino Guard','Rhino Attack',
  135.     'Power Attack','Mandibular Bite','Big Scissors','Bubble Curtain','Scissor Guard','Grapple','Spinning Top',
  136.     'Double Claw','Frogkick','Blockhead','Secretion','Brain Crush','Tail Blow','??? Needles','Needleshot',
  137.     'Scythe Tail','Ripper Fang','Chomp Rush','Recoil Dive','Sudden Lunge','Spiral Spin','Wing Slap','Beak Lunge',
  138.     'Suction','Back Heel','Choke Breath','Fantod','Tortoise Stomp','Harden Shell','Sensilla Blades','Tegmina Buffet',
  139.     'Swooping Frenzy','Pentapeck','Sweeping Gouge','Zealous Snort','Somersault','Tickling Tendrils','Pecking Flurry',
  140.     'Sickle Slash'}
  141.  
  142. magic_atk_ready_moves = S{'Dust Cloud','Cursed Sphere','Venom','Toxic Spit','Bubble Shower','Drainkiss',
  143.     'Silence Gas','Dark Spore','Fireball','Plague Breath','Snow Cloud','Charged Whisker','Purulent Ooze',
  144.     'Corrosive Ooze','Aqua Breath','Stink Bomb','Nectarous Deluge','Nepenthic Plunge','Pestilent Plume',
  145.     'Foul Waters','Acid Spray','Infected Leech','Gloom Spray'}
  146.  
  147. magic_acc_ready_moves = S{'Sheep Song','Scream','Dream Flower','Roar','Gloeosuccus','Palsy Pollen',
  148.     'Soporific','Geist Wall','Toxic Spit','Numbing Noise','Spoil','Hi-Freq Field','Sandpit','Sandblast',
  149.     'Venom Spray','Filamented Hold','Queasyshroom','Numbshroom','Spore','Shakeshroom','Infrasonics',
  150.     'Chaotic Eye','Blaster','Intimidate','Noisome Powder','Acid Mist','TP Drainkiss','Jettatura',
  151.     'Molting Plumage','Spider Web'}
  152.  
  153. tp_based_ready_moves = S{'Foot Kick','Dust Cloud','Snow Cloud','Wild Carrot','Sheep Song','Sheep Charge',
  154.     'Lamb Chop','Rage','Head Butt','Scream','Dream Flower','Wild Oats','Leaf Dagger','Claw Cyclone','Razor Fang',
  155.     'Roar','Gloeosuccus','Palsy Pollen','Soporific','Cursed Sphere','Somersault','Geist Wall','Numbing Noise',
  156.     'Frogkick','Nimble Snap','Cyclotail','Spoil','Rhino Guard','Rhino Attack','Hi-Freq Field','Sandpit','Sandblast',
  157.     'Mandibular Bite','Metallic Body','Bubble Shower','Bubble Curtain','Scissor Guard','Grapple','Spinning Top',
  158.     'Double Claw','Filamented Hold','Spore','Blockhead','Secretion','Fireball','Tail Blow','Plague Breath',
  159.     'Brain Crush','Infrasonics','Needleshot','Chaotic Eye','Blaster','Ripper Fang','Intimidate','Recoil Dive',
  160.     'Water Wall','Sudden Lunge','Noisome Powder','Wing Slap','Beak Lunge','Suction','Drainkiss','Acid Mist',
  161.     'TP Drainkiss','Back Heel','Jettatura','Choke Breath','Fantod','Charged Whisker','Purulent Ooze',
  162.     'Corrosive Ooze','Tortoise Stomp','Harden Shell','Aqua Breath','Sensilla Blades','Tegmina Buffet',
  163.     'Sweeping Gouge','Zealous Snort','Tickling Tendrils','Pecking Flurry','Pestilent Plume','Foul Waters',
  164.     'Spider Web','Gloom Spray'}
  165.  
  166. multi_hit_ready_moves = S{'Pentapeck','Tickling Tendrils','Sweeping Gouge','Chomp Rush','Pecking Flurry'}
  167.  
  168. pet_buff_moves = S{'Reward','Spur','Run Wild','Bubble Curtain','Scissor Guard','Secretion','Rage',
  169.     'Rhino Guard','Zealous Snort'}
  170.  
  171. -- List of Jug Modes that will cancel if Call Beast is used (Bestial Loyalty-only jug pets, HQs generally).
  172. call_beast_cancel = S{'Vis. Broth','Ferm. Broth','Bubbly Broth','Windy Greens','Bug-Ridden Broth','Tant. Broth',
  173.     'Glazed Broth','Slimy Webbing','Deepwater Broth','Venomous Broth','Heavenly Broth'}
  174.  
  175. -- List of abilities to reference for applying Treasure Hunter +1 via Chaac Belt.
  176. abilities_to_check = S{'Feral Howl','Quickstep','Box Step','Stutter Step','Desperate Flourish',
  177.     'Violent Flourish','Animated Flourish','Provoke','Dia','Dia II','Flash','Bio','Bio II',
  178.     'Sleep','Sleep II','Drain','Aspir','Dispel','Stun','Steal','Mug'}
  179.  
  180. -- Random Lockstyle generator.
  181.     if RandomLockstyleGenerator == 'true' then
  182.         local random_lockstyle_list = {1,2,3,4,7,8,10,12}
  183.         local randomLockstyle = random_lockstyle_list[math.random(1, #random_lockstyle_list)]
  184.         send_command('@wait 5;input /lockstyleset '.. randomLockstyle)
  185.     end
  186. end
  187.  
  188. function file_unload()
  189.     if binds_on_unload then
  190.         binds_on_unload()
  191.     end
  192.  
  193.     -- Unbinds the Reward, Correlation, PetMode and Treasure hotkeys.
  194.     send_command('unbind ^=')
  195.     send_command('unbind !f8')
  196.     send_command('unbind ^f8')
  197.     send_command('unbind ^f11')
  198.     send_command('unbind ^J')
  199.     send_command ('unbind @f9')
  200.  
  201.     -- Removes any Text Info Boxes
  202.     send_command('text JugPetText delete')
  203.     send_command('text CorrelationText delete')
  204.     send_command('text PetModeText delete')
  205.     send_command('text AccuracyText delete')
  206. end
  207.  
  208. -- BST gearsets
  209. function init_gear_sets()
  210.     -- AUGMENTED GEAR
  211.     Pet_PDT_AxeMain = "Izizoeksi"
  212.     Pet_PDT_AxeSub = { name="Kumbhakarna", augments={'Pet: "Mag.Atk.Bns."+19','Pet: Phys. dmg. taken -4%','STR+13 CHR+13',}} -- Astolfo
  213.     Pet_MDT_AxeMain = "Izizoeksi"
  214.     Pet_MDT_AxeSub = "Purgation" -- dont currently have one
  215.  
  216.     Ready_Atk_Axe  = { name="Skullrender", augments={'DMG:+15','Pet: Accuracy+20','Pet: Attack+20',}}
  217.     Ready_Acc_Axe = Ready_Atk_Axe
  218.     Ready_Acc_Axe2 = Ready_Atk_Axe
  219.     Ready_Acc_Axe3 = Ready_Atk_Axe -- need to look at these sets further down
  220.     Ready_MAB_Axe = { name="Kumbhakarna", augments={'Pet: "Mag.Atk.Bns."+19','Pet: Phys. dmg. taken -4%','STR+13 CHR+13',}}
  221.     Ready_MAB_Axe2 = Ready_MAB_Axe2
  222.     Ready_MAcc_Axe = Ready_MAB_Axe2
  223.     Ready_MAcc_Axe2 = Ready_MAB_Axe2 -- need to look at these sets further down
  224.  
  225.     Ready_Unleash_MAB_Axe = { name="Kumbhakarna", augments={'Pet: "Mag.Atk.Bns."+19','Pet: Phys. dmg. taken -4%','STR+13 CHR+13',}} -- Deacon Tabar
  226.     Ready_Unleash_MAB_Axe2 = Ready_Unleash_MAB_Axe
  227.  
  228.     Reward_Axe = "Mdomo Axe"
  229.     Reward_Axe2 = "Zoraal Ja's Axe"
  230.     Reward_hands = "Ankusa Gloves +1"
  231.  
  232.     Pet_PDT_head = "Anwig Salade" --DT 10
  233.     Pet_PDT_body = "Acro Surcoat" --DT -3
  234.     Pet_PDT_hands = "Ankusa Gloves +1" --PDT -4
  235.     Pet_PDT_legs = "Despair Cuisses" --DT -3
  236.     Pet_PDT_feet = { name="Acro Leggings", augments={'Pet: "Mag.Atk.Bns."+24','Pet: "Dbl. Atk."+4','Pet: Damage taken -4%',}} --DT -4
  237.     Pet_PDT_back = { name="Pastoralist's Mantle", augments={'STR+2 DEX+2','Accuracy+2','Pet: Accuracy+14 Pet: Rng. Acc.+14','Pet: Damage taken -4%',}} --DT -4
  238.  
  239.     Pet_MDT_head = "Anwig Salade"
  240.     Pet_MDT_body = Pet_PDT_body
  241.     Pet_MDT_hands = "Acro Gauntlets"
  242.     Pet_MDT_legs = Pet_PDT_legs
  243.     Pet_MDT_feet = Pet_PDT_feet
  244.  
  245.     Pet_DT_head = "Anwig Salade" --DT 10
  246.     Pet_DT_body = "Acro Surcoat" --DT -3
  247.     Pet_DT_hands = "Ankusa Gloves +1" --PDT -4
  248.     Pet_DT_legs = "Despair Cuisses" --DT -3
  249.     Pet_DT_feet = { name="Acro Leggings", augments={'Pet: "Mag.Atk.Bns."+24','Pet: "Dbl. Atk."+4','Pet: Damage taken -4%',}} --DT -4
  250.     Pet_DT_back = { name="Pastoralist's Mantle", augments={'STR+2 DEX+2','Accuracy+2','Pet: Accuracy+14 Pet: Rng. Acc.+14','Pet: Damage taken -4%',}} --DT -4
  251.  
  252.     Pet_Regen_head = "Anwig Salade"
  253.     Pet_Regen_body = "Taeon Tabard"
  254.     Pet_Regen_hands = {}
  255.     Pet_Regen_legs = "Acro Breeches"
  256.     Pet_Regen_feet = {}
  257.     Pet_Regen_back = {}
  258.  
  259.     Ready_Atk_head = "Despair Helm"
  260.     Ready_Atk_body = "Taeon Tabard"
  261.     Ready_Atk_hands = "Emicho Gauntlets"
  262.     Ready_Atk_legs = { name="Valor. Hose", augments={'Pet: Attack+21 Pet: Rng.Atk.+21','Pet: "Dbl.Atk."+3 Pet: Crit.hit rate +3','Pet: INT+1','Pet: Accuracy+5 Pet: Rng. Acc.+5',}}
  263.     Ready_Atk_feet = { name="Acro Leggings", augments={'Pet: Attack+22 Pet: Rng.Atk.+22','Pet: Crit.hit rate +1','Pet: Haste+4',}}
  264.     Ready_Atk_back = { name="Pastoralist's Mantle", augments={'STR+2 DEX+2','Accuracy+3','Pet: Accuracy+20 Pet: Rng. Acc.+20',}}
  265.  
  266.     Ready_Acc_head = { name="Valorous Mask", augments={'Pet: Accuracy+23 Pet: Rng. Acc.+23','Pet: "Dbl. Atk."+2','Pet: CHR+5','Pet: Attack+14 Pet: Rng.Atk.+14',}}
  267.     Ready_Acc_body = "Mirke Wardecors" -- Need to upgrade
  268.     Ready_Acc_hands = Ready_Atk_hands
  269.     Ready_Acc_legs = {name="Valor. Hose", augments={'Pet: Accuracy+29 Pet: Rng. Acc.+29','Pet: Haste+2','Pet: VIT+1','Pet: Attack+13 Pet: Rng.Atk.+13',}}
  270.     Ready_Acc_feet = "Despair Greaves"
  271.     Ready_Acc_back = {name="Pastoralist's Mantle", augments={'STR+2 DEX+2','Accuracy+3','Pet: Accuracy+20 Pet: Rng. Acc.+20',}}
  272.  
  273.     Ready_MAB_head = "Acro Helm"
  274.     Ready_MAB_body = "Acro Surcoat"
  275.     Ready_MAB_hands = "Acro Gauntlets"
  276.     Ready_MAB_legs = "Acro Breeches"
  277.     Ready_MAB_feet ={ name="Acro Leggings", augments={'Pet: "Mag.Atk.Bns."+24','Pet: "Dbl. Atk."+4','Pet: Damage taken -4%',}}
  278.  
  279.     Ready_MAcc_head = "Acro Helm"
  280.     Ready_MAcc_body = "Acro Surcoat"   
  281.     Ready_MAcc_hands = "Regimen Mittens"
  282.     Ready_MAcc_legs = "Acro Breeches"
  283.     Ready_MAcc_feet = { name="Acro Leggings", augments={'Pet: "Mag.Atk.Bns."+24','Pet: "Dbl. Atk."+4','Pet: Damage taken -4%',}}
  284.     Ready_MAcc_back = {name="Pastoralist's Mantle", augments={'STR+2 DEX+2','Accuracy+3','Pet: Accuracy+20 Pet: Rng. Acc.+20',}}
  285.  
  286.     Ready_DA_axe = {}
  287.     Ready_DA_head = {}
  288.     Ready_DA_body = {}
  289.     Ready_DA_hands = {}
  290.     Ready_DA_legs = {}
  291.     Ready_DA_feet = {}
  292.  
  293.     Pet_Melee_head = Ready_Acc_head
  294.     Pet_Melee_body = Ready_Acc_body
  295.     Pet_Melee_hands = Ready_Acc_hands
  296.     Pet_Melee_legs = Ready_Acc_legs
  297.     Pet_Melee_feet = Ready_Acc_feet
  298.  
  299.     Hybrid_head = Ready_Atk_head
  300.     Hybrid_body = "Despair Mail"
  301.     Hybrid_hands = Ready_Atk_hands
  302.     Hybrid_legs = "Despair Cuisses"
  303.     Hybrid_feet = "Despair Greaves"
  304.  
  305.     DW_head = { name="Taeon Chapeau", augments={'Accuracy+20','"Dual Wield"+4','STR+5 AGI+5',}}
  306.     DW_body = "Skadi's Cuirie"
  307.     DW_hands =  Ready_Atk_hands
  308.     DW_legs = { name="Taeon Tights", augments={'Accuracy+23','"Dual Wield"+4','DEX+8',}}
  309.     DW_feet = { name="Taeon Boots", augments={'Accuracy+20','"Dual Wield"+4','STR+4 DEX+4',}}
  310.  
  311.     MAB_head = "Jumalik Helm"
  312.     MAB_body = "Jumalik Mail"
  313.     MAB_hands = "Leyline Gloves"
  314.     MAB_legs = "Limbo Trousers"
  315.     MAB_feet = DW_feet
  316.     MAB_back = "Toro Cape"
  317.  
  318.     FC_head = {}
  319.     FC_body = "Taeon Tabard"
  320.     FC_hands = "Leyline Gloves"
  321.     FC_legs = MAB_legs
  322.     FC_feet = {}
  323.  
  324.     MAcc_head = "Jumalik Helm"
  325.     MAcc_body = "Ankusa Jackcoat +1"
  326.     MAcc_hands = MAB_hands
  327.     MAcc_legs = MAB_legs
  328.     MAcc_feet = MAB_feet
  329.     MAcc_back = MAB_back
  330.  
  331.     CB_head = Ready_MAcc_head
  332.     CB_body = "Acro Surcoat"
  333.     CB_hands = "Ankusa Gloves +1"
  334.     CB_legs = "Limbo Trousers"
  335.     CB_feet = {}
  336.  
  337.     Cure_Potency_axe = {}
  338.     Cure_Potency_head = "Totemic Helm +1"
  339.     Cure_Potency_body = "Jumalik Mail"
  340.     Cure_Potency_hands = "Leyline Gloves"
  341.     Cure_Potency_legs = "Limbo Trousers"
  342.     Cure_Potency_feet = "Tot. Gaiters +1"
  343.  
  344.     TH_hands = {}
  345.  
  346.     -- PRECAST SETS
  347.      sets.BrutalLugra    = {left_ear="Brutal Earring", right_ear="Lugra Earring +1"}
  348.      sets.BrutalMoon    ={left_ear="Brutal Earring", right_ear="Moonshade Earring"}
  349.      sets.Organizer = {
  350.         sub="Warp Ring",main="Reraise Earring",legs="Skeggiold",
  351.         neck="Thorfinn Shield +1",back="Mecisto. Mantle",head="Gavialis Helm",
  352.         right_ring="Capacity Ring",left_ring="Trizek Ring"}
  353.        
  354.     sets.precast.JA.Familiar = {legs="Ankusa Trousers"}
  355.     sets.precast.JA['Bestial Loyalty'] = {head=CB_head,
  356.         body=CB_body,
  357.         hands=CB_hands,
  358.         legs=CB_legs,
  359.         feet=CB_feet}
  360.     sets.precast.JA['Call Beast'] = sets.precast.JA['Bestial Loyalty']
  361.     --sets.precast.JA.Tame = {head="Totemic Helm +1",ear1="Tamer's Earring",legs="Stout Kecks"}
  362.     sets.precast.JA['Killer Instinct'] = {}
  363. sets.precast.Waltz =
  364.     {ammo="Imperial Egg",
  365.     head="Jumalik Helm",
  366.     body="Jumalik Mail",
  367.     hands="Macabre Gaunt.",
  368.     legs={ name="Valor. Hose", augments={'Pet: Attack+21 Pet: Rng.Atk.+21','Pet: "Dbl.Atk."+3 Pet: Crit.hit rate +3','Pet: INT+1','Pet: Accuracy+5 Pet: Rng. Acc.+5',}},
  369.     feet="Tot. Gaiters +1",
  370.     neck="Twilight Torque",
  371.     waist="Caudata Belt",
  372.     left_ear="Infused Earring",
  373.     right_ear="Odnowa Earring +1",
  374.     left_ring="Airy Ring",
  375.     right_ring={ name="Dark Ring", augments={'Phys. dmg. taken -6%','Magic dmg. taken -5%',}},
  376.     back="Earthcry Mantle",
  377. }
  378.    
  379.     sets.precast.JA.Spur = {back="Artio's Mantle"}
  380.     sets.precast.SpurPetOnly = set_combine(sets.precast.JA.Spur,  {main={ name="Skullrender", augments={'DMG:+15','STR+15','Accuracy+15',}},})
  381.     sets.precast.SpurPetOnlyDW = set_combine(sets.precast.JA.Spur, {main={ name="Skullrender", augments={'DMG:+15','STR+15','Accuracy+15',}},
  382.     sub={ name="Skullrender", augments={'DMG:+15','Pet: Accuracy+20','Pet: Attack+20',}},})
  383.  
  384.     sets.enmity = {}
  385.  
  386.     sets.precast.JA['Feral Howl'] = sets.enmity
  387.  
  388.     sets.precast.JA.Reward = {ammo="Pet Food Theta",
  389.         head="Bison Warbonnet",neck="Aife's Medal",ear1="Lifestorm Earring",ear2="Ferine Earring",
  390.         body="An. Jackcoat +1",hands=Reward_hands,ring1="Rufescent Ring",ring2="Neptune's Ring",
  391.         back="Artio's Mantle",waist="Salire Belt",legs="Tot. Trousers +1",feet="Tot. Gaiters +1"}
  392.     sets.precast.JA.RewardPetOnly = set_combine(sets.precast.JA.Reward, {main=Reward_Axe,sub="Pallas's Shield"})
  393.     sets.precast.JA.RewardPetOnlyDW = set_combine(sets.precast.JA.RewardPetOnly, {sub=Reward_Axe2})
  394.  
  395.     --sets.precast.JA.Charm = {ammo="Tsar's Egg",
  396.     --    head="Jumalik Helm",neck="Dualism Collar +1",ear1="Enchanter's Earring",ear2="Enchanter Earring +1",
  397.     --    body="Totemic Jackcoat +1",hands="Ankusa Gloves +1",ring1="Dawnsoul Ring",ring2="Dawnsoul Ring",
  398.     --    back="Aisance Mantle +1",waist="Aristo Belt",legs="Ankusa Trousers +1",feet="Ankusa Gaiters +1"}
  399.  
  400.     -- PET SIC & READY MOVES
  401.     sets.midcast.Pet.TPBonus = {hands="Nukumi Manoplas +1"}
  402.     sets.midcast.Pet.ReadyRecast = {legs="Desultor Tassets"}
  403.     sets.midcast.Pet.Neutral = {head=Ready_Atk_head}
  404.     sets.midcast.Pet.Favorable = {}
  405.  
  406.     sets.midcast.Pet.WS = {ammo="Demonry Core",head=Ready_Atk_head,
  407.         neck="Ferine Necklace",ear1="Hija Earring",ear2="Ferine Earring",
  408.         body=Ready_Atk_body,
  409.         hands=Ready_Atk_hands,
  410.         waist="Hurch'lan Sash",
  411.         legs=Ready_Atk_legs,
  412.         feet=Ready_Atk_feet,
  413.         back=Ready_Atk_back}
  414.  
  415.     sets.midcast.Pet.MagicAtkReady = set_combine(sets.midcast.Pet.WS, {
  416.         head=Ready_MAB_head,
  417.         neck="Deino Collar",
  418.         body=Ready_MAB_body,
  419.         hands=Ready_MAB_hands,
  420.         legs=Ready_MAB_legs,
  421.         feet=Ready_MAB_feet})
  422.  
  423.     sets.midcast.Pet.MagicAccReady = set_combine(sets.midcast.Pet.WS, {
  424.         head=Ready_MAcc_head,
  425.          neck="Deino Collar",
  426.         body=Ready_MAcc_body,
  427.         hands=Ready_MAcc_hands,
  428.         back=Ready_MAcc_back,
  429.         legs=Ready_MAcc_legs,
  430.         feet=Ready_MAcc_feet})
  431.  
  432.     sets.midcast.Pet.MultiStrike = set_combine(sets.midcast.Pet.WS, {
  433.         body=Ready_DA_body,
  434.         hands=Ready_DA_hands,
  435.         legs=Ready_DA_legs,
  436.         feet=Ready_DA_feet})
  437.  
  438.     sets.midcast.Pet.MedAcc = set_combine(sets.midcast.Pet.WS, {
  439.         body=Ready_Acc_body,
  440.         back=Ready_Acc_back,
  441.         legs=Ready_Acc_legs})
  442.     sets.midcast.Pet.HighAcc = set_combine(sets.midcast.Pet.WS, {
  443.         body=Ready_Acc_body,
  444.         back=Ready_Acc_back,
  445.         legs=Ready_Acc_legs,
  446.         feet=Ready_Acc_feet})
  447.     sets.midcast.Pet.MaxAcc = set_combine(sets.midcast.Pet.WS, {
  448.         head=Ready_Acc_head,
  449.         body=Ready_Acc_body,
  450.         hands=Ready_Acc_hands,
  451.         back=Ready_Acc_back,
  452.         legs=Ready_Acc_legs,
  453.         feet=Ready_Acc_feet})
  454.  
  455.     -- PET-ONLY READY GEARSETS
  456.     -- Single-wield PetOnly Sets
  457.     sets.midcast.Pet.ReadyRecastNE = {main="Charmer's Merlin",legs="Desultor Tassets"}
  458.  
  459.     sets.midcast.Pet.ReadyNE = set_combine(sets.midcast.Pet.WS, {main="Arktoi"})
  460.     sets.midcast.Pet.ReadyNE.MedAcc = set_combine(sets.midcast.Pet.WS, {main="Arktoi",
  461.         body=Ready_Acc_body,
  462.         back=Ready_Acc_back,
  463.         legs=Ready_Acc_legs})
  464.     sets.midcast.Pet.ReadyNE.HighAcc = set_combine(sets.midcast.Pet.WS, {main="Arktoi",
  465.         body=Ready_Acc_body,
  466.         back=Ready_Acc_back,
  467.         legs=Ready_Acc_legs,
  468.         feet=Ready_Acc_feet})
  469.     sets.midcast.Pet.ReadyNE.MaxAcc = set_combine(sets.midcast.Pet.WS, {main="Arktoi",
  470.         head=Ready_Acc_head,
  471.         body=Ready_Acc_body,
  472.         hands=Ready_Acc_hands,
  473.         back=Ready_Acc_back,
  474.         legs=Ready_Acc_legs,
  475.         feet=Ready_Acc_feet})
  476.  
  477.     sets.midcast.Pet.MultiStrikeNE = set_combine(sets.midcast.Pet.MultiStrike, {main="Arktoi"})
  478.  
  479.     sets.midcast.Pet.MagicAtkReadyNE = set_combine(sets.midcast.Pet.MagicAtkReady, {main=Ready_MAB_Axe})
  480.     sets.midcast.Pet.MagicAtkReadyNE.MedAcc = set_combine(sets.midcast.Pet.MagicAtkReady, {main=Ready_MAB_Axe,
  481.         head=Ready_MAcc_head,
  482.         legs=Ready_MAcc_legs})
  483.     sets.midcast.Pet.MagicAtkReadyNE.HighAcc = set_combine(sets.midcast.Pet.MagicAtkReady, {main=Ready_MAB_Axe,
  484.         head=Ready_MAcc_head,
  485.         body=Ready_MAcc_body,
  486.         hands=Ready_MAcc_hands,
  487.         back=Ready_MAcc_back,
  488.         legs=Ready_MAcc_legs})
  489.     sets.midcast.Pet.MagicAtkReadyNE.MaxAcc = set_combine(sets.midcast.Pet.MagicAtkReady, {main=Ready_MAB_Axe,
  490.         head=Ready_MAcc_head,
  491.         body=Ready_MAcc_body,
  492.         hands=Ready_MAcc_hands,
  493.         back=Ready_MAcc_back,
  494.         legs=Ready_MAcc_legs,
  495.         feet=Ready_MAcc_feet})
  496.  
  497.     sets.midcast.Pet.MagicAccReadyNE = set_combine(sets.midcast.Pet.MagicAccReady, {main=Ready_Unleash_MAB_Axe})
  498.  
  499.     sets.DTAxeShield = {main=Pet_PDT_AxeMain,
  500.         sub="Pallas's Shield"}
  501.  
  502.     -- Dual-wield PetOnly Sets
  503.     sets.midcast.Pet.ReadyRecastDWNE = {main="Arktoi",sub="Charmer's Merlin",legs="Desultor Tassets"}
  504.  
  505.     sets.midcast.Pet.ReadyDWNE = set_combine(sets.midcast.Pet.ReadyNE, {sub=Ready_Atk_Axe})
  506.     sets.midcast.Pet.ReadyDWNE.MedAcc = set_combine(sets.midcast.Pet.ReadyNE.MedAcc, {sub=Ready_Acc_Axe})
  507.     sets.midcast.Pet.ReadyDWNE.HighAcc = set_combine(sets.midcast.Pet.ReadyNE.HighAcc, {sub=Ready_Acc_Axe3})
  508.     sets.midcast.Pet.ReadyDWNE.MaxAcc = set_combine(sets.midcast.Pet.ReadyNE.MaxAcc, {sub=Ready_Acc_Axe3})
  509.     sets.midcast.Pet.MultiStrikeDWNE = set_combine(sets.midcast.Pet.MultiStrikeNE, {sub=Ready_Atk_Axe})
  510.  
  511.     sets.midcast.Pet.MagicAtkReadyDWNE = set_combine(sets.midcast.Pet.MagicAtkReadyNE, {main=Ready_MAB_Axe,sub=Ready_MAB_Axe2})
  512.     sets.midcast.Pet.MagicAtkReadyDWNE.MedAcc = set_combine(sets.midcast.Pet.MagicAtkReadyNE.MedAcc, {main=Ready_MAB_Axe2,sub=Ready_MAcc_Axe})
  513.     sets.midcast.Pet.MagicAtkReadyDWNE.HighAcc = set_combine(sets.midcast.Pet.MagicAtkReadyNE.HighAcc, {main=Ready_MAB_Axe2,sub=Ready_MAcc_Axe})
  514.     sets.midcast.Pet.MagicAtkReadyDWNE.MaxAcc = set_combine(sets.midcast.Pet.MagicAtkReadyNE.MaxAcc, {main=Ready_MAB_Axe2,sub=Ready_MAcc_Axe})
  515.  
  516.     sets.midcast.Pet.MagicAccReadyDWNE = set_combine(sets.midcast.Pet.MagicAccReadyNE, {sub=Ready_MAcc_Axe})
  517.  
  518.     sets.UnleashMABAxes = {main=Ready_Unleash_MAB_Axe,sub=Ready_Unleash_MAB_Axe2}
  519.  
  520.     sets.DTAxes = {main=Pet_PDT_AxeMain,
  521.         sub=Pet_PDT_AxeSub}
  522.  
  523.         sets.midcast["Apururu (UC)"] = {body="Apururu Unity shirt"}
  524.     -- RESTING
  525.     sets.resting = {}
  526.  
  527.     -- IDLE SETS
  528.    
  529.     sets.idle = {
  530.     ammo="Ginsen",
  531.     head={ name="Jumalik Helm", augments={'MND+10','"Mag.Atk.Bns."+15','Magic burst mdg.+10%','"Refresh"+1',}},
  532.     body={ name="Jumalik Mail", augments={'HP+10','Attack+1',}},
  533.     hands="Macabre Gaunt.",
  534.     legs={ name="Valor. Hose", augments={'Pet: Attack+21 Pet: Rng.Atk.+21','Pet: "Dbl.Atk."+3 Pet: Crit.hit rate +3','Pet: INT+1','Pet: Accuracy+5 Pet: Rng. Acc.+5',}},
  535.     feet={ name="Loyalist Sabatons", augments={'STR+10','Attack+15','Phys. dmg. taken -3%','Haste+3',}},
  536.     neck="Twilight Torque",
  537.     waist="Flume Belt",
  538.     left_ear="Odnowa Earring +1",
  539.     right_ear="Infused Earring",
  540.     left_ring="Karieyh Ring",
  541.     right_ring={ name="Dark Ring", augments={'Phys. dmg. taken -6%','Magic dmg. taken -5%',}},
  542.     back="Xucau Mantle",
  543. }
  544.  
  545.         sets.idle.Town = {
  546.     main={ name="Arktoi", augments={'Accuracy+50','Pet: Accuracy+50','Pet: Attack+30',}},
  547.     sub="Charmer's Merlin",
  548.     ammo="Demonry Core",
  549.     head={ name="Valorous Mask", augments={'Pet: Accuracy+23 Pet: Rng. Acc.+23','Pet: "Dbl. Atk."+2','Pet: CHR+5','Pet: Attack+14 Pet: Rng.Atk.+14',}},
  550.     body={ name="Despair Mail", augments={'Attack+25','Mag. Evasion+20','"Dbl.Atk."+3',}},
  551.     hands="Nukumi Manoplas +1",
  552.     legs={ name="Valor. Hose", augments={'Pet: Attack+21 Pet: Rng.Atk.+21','Pet: "Dbl.Atk."+3 Pet: Crit.hit rate +3','Pet: INT+1','Pet: Accuracy+5 Pet: Rng. Acc.+5',}},
  553.     feet={ name="Acro Leggings", augments={'Pet: "Mag.Atk.Bns."+24','Pet: "Dbl. Atk."+4','Pet: Damage taken -4%',}},
  554.     neck="Deino Collar",
  555.     waist="Hurch'lan Sash",
  556.     left_ear="Hija Earring",
  557.     right_ear="Handler's Earring",
  558.     left_ring="Karieyh Ring",
  559.     right_ring="Rufescent Ring",
  560.     back={ name="Pastoralist's Mantle", augments={'STR+2 DEX+2','Accuracy+3','Pet: Accuracy+20 Pet: Rng. Acc.+20',}},
  561. }
  562.        
  563.     sets.idle.Regen = sets.idle
  564.  
  565.     sets.idle.Refresh = sets.idle
  566.     sets.idle.Reraise = sets.idle
  567.  
  568.     sets.idle.Pet = sets.idle
  569.     sets.idle.PetRegen = set_combine (sets.idle,{
  570.     head=Pet_Regen_head,
  571.     body=Pet_Regen_body,
  572.     hands=Pet_Regen_hands,
  573.     legs=Pet_Regen_legs})
  574.  
  575.     sets.engaged = {ammo="Ginsen",
  576.     head={ name="Taeon Chapeau", augments={'Accuracy+20','"Dual Wield"+4','STR+5 AGI+5',}},
  577.     body="Skadi's Cuirie +1",
  578.     hands={ name="Emicho Gauntlets", augments={'Accuracy+20','"Dual Wield"+5','Pet: Accuracy+20',}},
  579.     legs={ name="Taeon Tights", augments={'Accuracy+23','"Dual Wield"+4','DEX+8',}},
  580.     feet={ name="Taeon Boots", augments={'Accuracy+20','"Dual Wield"+4','STR+4 DEX+4',}},
  581.     neck="Lissome Necklace",
  582.     waist="Kentarch Belt +1",
  583.     left_ear="Suppanomimi",
  584.     right_ear="Brutal Earring",
  585.     left_ring="Epona's Ring",
  586.     right_ring="Rajas Ring",
  587.     back="Letalis Mantle",
  588. }
  589.  
  590.  sets.engaged.Haste_5 = set_combine(sets.engaged, {})
  591.    
  592.     sets.engaged.Haste_10 = set_combine(sets.engaged.Haste_5, {})
  593.    
  594.     sets.engaged.Haste_15 = set_combine(sets.engaged.Haste_10, {})
  595.    
  596.     sets.engaged.Haste_20 = set_combine(sets.engaged.Haste_15, {})
  597.    
  598.     sets.engaged.Haste_25 = set_combine(sets.engaged.Haste_20, {})
  599.    
  600.     sets.engaged.Haste_30 = set_combine(sets.engaged.Haste_25,  {body="Despair Mail"})
  601.    
  602.       sets.engaged.Haste_35 = set_combine(sets.engaged.Haste_30, {left_ear="Cessance Earring"})
  603.    
  604.           sets.engaged.Haste_40 = set_combine(sets.engaged.Haste_35, {})
  605.    
  606.     sets.engaged.MaxHaste = set_combine(sets.engaged.Haste_40, {})
  607.  
  608.     sets.engaged.MaxAcc = { ammo="Ginsen",
  609.     head="Alhazen Hat",
  610.     body={ name="Despair Mail", augments={'Attack+25','Mag. Evasion+20','"Dbl.Atk."+3',}},
  611.     hands={ name="Emicho Gauntlets", augments={'Accuracy+20','"Dual Wield"+5','Pet: Accuracy+20',}},
  612.     legs={ name="Taeon Tights", augments={'Accuracy+23','"Dual Wield"+4','DEX+8',}},
  613.     feet={ name="Taeon Boots", augments={'Accuracy+20','"Dual Wield"+4','STR+4 DEX+4',}},
  614.     neck="Carnal Torque",
  615.     waist="Olseni Belt",
  616.     left_ear="Cessance Earring",
  617.     right_ear="Brutal Earring",
  618.     left_ring="Cacoethic Ring",
  619.     right_ring="Mars's Ring",
  620.     back="Ground. Mantle +1",
  621. }
  622.     sets.idle.Pet.Engaged = {main="Arktoi", sub={ name="Skullrender", augments={'DMG:+15','Pet: Accuracy+20','Pet: Attack+20',}},
  623.     ammo="Demonry Core",
  624.         head=Pet_Melee_head,
  625.         neck="Ferine Necklace",ear1="Hija Earring",ear2="Ferine Earring",
  626.         body=Pet_Melee_body,
  627.         hands=Pet_Melee_hands,
  628.         ring1="Karieyh Ring",ring2="Dark Ring",
  629.         back=Ready_Atk_back,
  630.         waist="Hurch'lan Sash",
  631.         legs=Pet_Melee_legs,
  632.         feet=Pet_Melee_feet}
  633.  
  634.     -- DEFENSE SETS
  635.     sets.defense.PDT =  {ammo="Imperial Egg",
  636.     head={ name="Jumalik Helm", augments={'MND+10','"Mag.Atk.Bns."+15','Magic burst mdg.+10%','"Refresh"+1',}},
  637.     body={ name="Jumalik Mail", augments={'HP+10','Attack+1',}},
  638.     hands="Macabre Gaunt.",
  639.     legs={ name="Valor. Hose", augments={'Pet: Attack+21 Pet: Rng.Atk.+21','Pet: "Dbl.Atk."+3 Pet: Crit.hit rate +3','Pet: INT+1','Pet: Accuracy+5 Pet: Rng. Acc.+5',}},
  640.     feet={ name="Loyalist Sabatons", augments={'STR+10','Attack+15','Phys. dmg. taken -3%','Haste+3',}},
  641.     neck="Twilight Torque",
  642.     waist="Flume Belt",
  643.     left_ear="Odnowa Earring +1",
  644.     right_ear="Infused Earring",
  645.     left_ring={ name="Dark Ring", augments={'Phys. dmg. taken -6%','Magic dmg. taken -5%',}},
  646.     right_ring="Patricius Ring",
  647.     back="Xucau Mantle",
  648. }
  649.  
  650.     sets.defense.Reraise = set_combine(sets.defense.PDT, {})
  651.  
  652.     sets.defense.HybridPDT = sets.defense.PDT
  653.  
  654.     sets.defense.MDT = {
  655.     ammo="Hydrocera",
  656.     head={ name="Jumalik Helm", augments={'MND+10','"Mag.Atk.Bns."+15','Magic burst mdg.+10%','"Refresh"+1',}},
  657.     body={ name="Jumalik Mail", augments={'HP+10','Attack+1',}},
  658.     hands={ name="Leyline Gloves", augments={'Accuracy+15','Mag. Acc.+15','"Mag.Atk.Bns."+15','"Fast Cast"+3',}},
  659.     legs={ name="Valor. Hose", augments={'Pet: Attack+21 Pet: Rng.Atk.+21','Pet: "Dbl.Atk."+3 Pet: Crit.hit rate +3','Pet: INT+1','Pet: Accuracy+5 Pet: Rng. Acc.+5',}},
  660.     feet={ name="Loyalist Sabatons", augments={'STR+10','Attack+15','Phys. dmg. taken -3%','Haste+3',}},
  661.     neck="Twilight Torque",
  662.     waist="Nierenschutz",
  663.     left_ear="Odnowa Earring +1",
  664.     right_ear="Mujin Stud",
  665.     left_ring={ name="Dark Ring", augments={'Phys. dmg. taken -6%','Magic dmg. taken -5%',}},
  666.     right_ring="Patricius Ring",
  667.     back="Mubvum. Mantle",
  668. }
  669.  
  670.     sets.defense.MDTShell = set_combine(sets.defense.MDT, {})
  671.  
  672.     sets.defense.PetPDT = {
  673.         main=Pet_PDT_AxeMain,
  674.         sub=Pet_PDT_AxeSub,
  675.         ammo="Demonry Core",
  676.         head="Anwig Salade",
  677.         ear1="Handler's Earring",ear2="Rimeice Earring",
  678.         body=Pet_PDT_body,
  679.         hands=Pet_PDT_hands,
  680.         back=Pet_PDT_back,
  681.         legs=Pet_PDT_legs,
  682.         feet=Pet_PDT_feet}
  683.  
  684.     sets.defense.PetMDT = set_combine(sets.defense.PetPDT, {
  685.         main=Pet_MDT_AxeMain,
  686.         sub=Pet_MDT_AxeSub,
  687.         body=Pet_MDT_body,
  688.         hands=Pet_MDT_hands,
  689.         legs=Pet_MDT_legs,
  690.         feet=Pet_MDT_feet})
  691.  
  692.     sets.Kiting = {}
  693.  
  694.     sets.precast.FC = {
  695.         ammo="Sapience Orb",
  696.         head=FC_head,
  697.         ear1="Loquacious Earring",
  698.         body=FC_body,
  699.         hands=FC_hands,
  700.         ring1="Prolix Ring",ring2="Lebeche Ring",
  701.         legs=FC_legs,
  702.         feet=FC_feet}
  703. sets.precast.FC.Cure = set_combine(sets.precast.FC,{waist="Acerbic Sash +1"})
  704.     sets.precast.FCNE = set_combine(sets.precast.FC, {})
  705.     sets.precast.FC.Utsusemi = set_combine(sets.precast.FC, {neck="Magoraga Beads"})
  706.  
  707.     sets.NightWS = {ammo="Hasty Pinion +1"}
  708.     sets.DayWS = {ammo="Tengu-no-Hane"}
  709.    
  710.     sets.precast.WS = {
  711.     head={ name="Lilitu Headpiece", augments={'STR+9','DEX+6','Attack+13',}},
  712.     body={ name="Despair Mail", augments={'Attack+25','Mag. Evasion+20','"Dbl.Atk."+3',}},
  713.     hands="Nukumi Manoplas +1",
  714.     legs={ name="Lustratio Subligar", augments={'Attack+15','STR+5','"Dbl.Atk."+2',}},
  715.     feet={ name="Loyalist Sabatons", augments={'STR+10','Attack+15','Phys. dmg. taken -3%','Haste+3',}},
  716.     neck="Caro Necklace",
  717.     waist="Windbuffet Belt +1",
  718.     left_ear="Brutal Earring",
  719.     right_ear={ name="Moonshade Earring", augments={'Attack+4','TP Bonus +25',}},
  720.     left_ring="Rufescent Ring",
  721.     right_ring="Karieyh Ring",
  722.     back="Letalis Mantle",
  723. }
  724. sets.precast.WS['Bora Axe'] = set_combine(sets.precast.WS,{waist="Chiner's Belt +1",back="Ground. Mantle +1",feet={ name="Taeon Boots", augments={'Accuracy+20','"Dual Wield"+4','STR+4 DEX+4',}},})
  725.     sets.precast.WS['Primal Rend'] = {
  726.     ammo="Hydrocera",
  727.     head={ name="Jumalik Helm", augments={'MND+10','"Mag.Atk.Bns."+15','Magic burst mdg.+10%','"Refresh"+1',}},
  728.     body={ name="Jumalik Mail", augments={'HP+10','Attack+1',}},
  729.     hands={ name="Leyline Gloves", augments={'Accuracy+15','Mag. Acc.+15','"Mag.Atk.Bns."+15','"Fast Cast"+3',}},
  730.     legs="Limbo Trousers",
  731.     feet={ name="Taeon Boots", augments={'Accuracy+20','"Dual Wield"+4','STR+4 DEX+4',}},
  732.     neck="Stoicheion Medal",
  733.     waist="Fotia Belt",
  734.     left_ear="Hecate's Earring",
  735.     right_ear="Friomisi Earring",
  736.     left_ring="Acumen Ring",
  737.     right_ring="Karieyh Ring",
  738.     back="Toro Cape",
  739. }
  740.     sets.precast.WS['Primal Rend'].WSMedAcc = set_combine(sets.precast.WS['Primal Rend'], {neck="Fotia Gorget",waist="Fotia Belt"})
  741.     sets.precast.WS['Primal Rend'].WShighAcc = sets.precast.WS['Primal Rend'].WSMedAcc
  742.     sets.precast.WS['Cloudsplitter'] = set_combine(sets.precast.WS['Primal Rend'], {neck="Fotia Gorget",waist="Fotia Belt"})
  743.  
  744.     sets.midcast.ExtraMAB = {}
  745.  
  746.     -- MIDCAST SETS
  747.     sets.midcast.FastRecast = {
  748.         ammo="Sapience Orb",
  749.         head=FC_head,
  750.        ear1="Loquacious Earring",
  751.         body=FC_body,
  752.         hands=FC_hands,
  753.         ring1="Prolix Ring",
  754.         legs=FC_legs,
  755.         feet=FC_feet}
  756.  
  757.     sets.midcast.Utsusemi = sets.midcast.FastRecast
  758.  
  759.     sets.midcast.Cure = {
  760.     ammo="Hydrocera",
  761.     head="Totemic Helm +1",
  762.     body={ name="Jumalik Mail", augments={'HP+10','Attack+1',}},
  763.     hands={ name="Leyline Gloves", augments={'Accuracy+15','Mag. Acc.+15','"Mag.Atk.Bns."+15','"Fast Cast"+3',}},
  764.     legs="Limbo Trousers",
  765.     feet="Tot. Gaiters +1",
  766.     neck="Henic Torque",
  767.     waist="Salire Belt",
  768.     left_ear="Lifestorm Earring",
  769.     right_ear="Mendi. Earring",
  770.     left_ring="Lebeche Ring",
  771.     right_ring="Ephedra Ring",
  772.     back={ name="Pastoralist's Mantle", augments={'STR+2 DEX+2','Accuracy+2','Pet: Accuracy+14 Pet: Rng. Acc.+14','Pet: Damage taken -4%',}},
  773. }
  774.  
  775.     sets.midcast.Curaga = sets.midcast.Cure
  776.     sets.CurePetOnly = {}
  777.  
  778.     sets.midcast.Stoneskin = {ammo="Hydrocera",
  779.     head="Totemic Helm +1",
  780.     body={ name="An. Jackcoat +1", augments={'Enhances "Feral Howl" effect',}},
  781.     hands={ name="Leyline Gloves", augments={'Accuracy+15','Mag. Acc.+15','"Mag.Atk.Bns."+15','"Fast Cast"+3',}},
  782.     legs="Limbo Trousers",
  783.     feet="Tot. Gaiters +1",
  784.     neck="Aife's Medal",
  785.     waist="Salire Belt",
  786.     left_ear="Lifestorm Earring",
  787.     right_ear="Mendi. Earring",
  788.     left_ring="Rufescent Ring",
  789.     right_ring="Neptune's Ring",
  790.     back={ name="Pastoralist's Mantle", augments={'STR+2 DEX+2','Accuracy+2','Pet: Accuracy+14 Pet: Rng. Acc.+14','Pet: Damage taken -4%',}},
  791. }
  792.  
  793.     sets.midcast.Cursna = set_combine(sets.midcast.Cure, {})
  794.  
  795.     sets.midcast.Protect = {}
  796.     sets.midcast.Protectra = sets.midcast.Protect
  797.  
  798.     sets.midcast.Shell = {}
  799.     sets.midcast.Shellra = sets.midcast.Shell
  800.  
  801.     sets.midcast['Enfeebling Magic'] = {}
  802.  
  803.     sets.midcast['Elemental Magic'] = sets.midcast['Enfeebling Magic']
  804.  
  805.     sets.precast.JA.Provoke = sets.enmity
  806.     sets.precast.LuzafRing = {}
  807.     sets.buff['Killer Instinct'] = {}
  808.     sets.TreasureHunter = {waist="Chaac Belt"}
  809. end
  810.  
  811. -------------------------------------------------------------------------------------------------------------------
  812. -- Job-specific hooks that are called to process player actions at specific points in time.
  813. -------------------------------------------------------------------------------------------------------------------
  814.  
  815. function job_precast(spell, action, spellMap, eventArgs)
  816. -- Define class for Sic and Ready moves.
  817.     if spell.type == "Monster" then
  818.             classes.CustomClass = "WS"
  819.         if state.PetMode.Value == 'PetOnly' and not buffactive['Unleash']then
  820.             if player.sub_job == 'NIN' or player.sub_job == 'DNC' then
  821.                 equip(sets.midcast.Pet.ReadyRecastDWNE)
  822.             else
  823.                 equip(sets.midcast.Pet.ReadyRecastNE)
  824.             end
  825.         else
  826.             equip(sets.midcast.Pet.ReadyRecast)
  827.         end
  828.     end
  829.  
  830.     if spell.english == 'Reward' then
  831.         if state.PetMode.value == 'PetOnly' then
  832.             if player.sub_job == 'NIN' or player.sub_job == 'DNC' then
  833.                 equip(sets.precast.JA.RewardPetOnlyDW)
  834.             else
  835.                 equip(sets.precast.JA.RewardPetOnly)
  836.             end
  837.         else
  838.             equip(sets.precast.JA.Reward)
  839.         end
  840.     end
  841.  
  842.     if spell.english == 'Spur' then
  843.         if state.PetMode.value == 'PetOnly' then
  844.             if player.sub_job == 'NIN' or player.sub_job == 'DNC' then
  845.                 equip(sets.precast.SpurPetOnlyDW)
  846.             else
  847.                 equip(sets.precast.SpurPetOnly)
  848.             end
  849.         end
  850.     end
  851.  
  852.     if spell.english == 'Bestial Loyalty' or spell.english == 'Call Beast' then
  853.         JugInfo = ''
  854.         if state.JugMode.value == 'FunguarFamiliar' or state.JugMode.value == 'Seedbed Soil' then
  855.             JugInfo = 'Seedbed Soil'
  856.         elseif state.JugMode.value == 'CourierCarrie' or state.JugMode.value == 'Fish Oil Broth' then
  857.             JugInfo = 'Fish Oil Broth'
  858.         elseif state.JugMode.value == 'AmigoSabotender' or state.JugMode.value == 'Sun Water' then
  859.             JugInfo = 'Sun Water'
  860.         elseif state.JugMode.value == 'NurseryNazuna' or state.JugMode.value == 'Dancing Herbal Broth' or state.JugMode.value == 'D. Herbal Broth' then
  861.             JugInfo = 'D. Herbal Broth'
  862.         elseif state.JugMode.value == 'CraftyClyvonne' or state.JugMode.value == 'Cunning Brain Broth' or state.JugMode.value == 'Cng. Brain Broth' then
  863.             JugInfo = 'Cng. Brain Broth'
  864.         elseif state.JugMode.value == 'PrestoJulio' or state.JugMode.value == 'Chirping Grasshopper Broth' or state.JugMode.value == 'C. Grass Broth' then
  865.             JugInfo = 'C. Grass Broth'
  866.         elseif state.JugMode.value == 'SwiftSieghard' or state.JugMode.value == 'Mellow Bird Broth' or state.JugMode.value == 'Mlw. Bird Broth' then
  867.             JugInfo = 'Mlw. Bird Broth'
  868.         elseif state.JugMode.value == 'MailbusterCetas' or state.JugMode.value == 'Goblin Bug Broth' or state.JugMode.value == 'Gob. Bug Broth' then
  869.             JugInfo = 'Gob. Bug Broth'
  870.         elseif state.JugMode.value == 'AudaciousAnna' or state.JugMode.value == 'Bubbling Carrion Broth' then
  871.             JugInfo = 'B. Carrion Broth'
  872.         elseif state.JugMode.value == 'TurbidToloi' or state.JugMode.value == 'Auroral Broth' then
  873.             JugInfo = 'Auroral Broth'
  874.         elseif state.JugMode.value == 'SlipperySilas' or state.JugMode.value == 'Wormy Broth' then
  875.             JugInfo = 'Wormy Broth'
  876.         elseif state.JugMode.value == 'LuckyLulush' or state.JugMode.value == 'Lucky Carrot Broth' or state.JugMode.value == 'L. Carrot Broth' then
  877.             JugInfo = 'L. Carrot Broth'
  878.         elseif state.JugMode.value == 'DipperYuly' or state.JugMode.value == 'Wool Grease' then
  879.             JugInfo = 'Wool Grease'
  880.         elseif state.JugMode.value == 'FlowerpotMerle' or state.JugMode.value == 'Vermihumus' then
  881.             JugInfo = 'Vermihumus'
  882.         elseif state.JugMode.value == 'DapperMac' or state.JugMode.value == 'Briny Broth' then
  883.             JugInfo = 'Briny Broth'
  884.         elseif state.JugMode.value == 'DiscreetLouise' or state.JugMode.value == 'Deepbed Soil' then
  885.             JugInfo = 'Deepbed Soil'
  886.         elseif state.JugMode.value == 'FatsoFargann' or state.JugMode.value == 'Curdled Plasma Broth' or state.JugMode.value == 'C. Plasma Broth' then
  887.             JugInfo = 'C. Plasma Broth'
  888.         elseif state.JugMode.value == 'FaithfulFalcorr' or state.JugMode.value == 'Lucky Broth' then
  889.             JugInfo = 'Lucky Broth'
  890.         elseif state.JugMode.value == 'BugeyedBroncha' or state.JugMode.value == 'Savage Mole Broth' or state.JugMode.value == 'Svg. Mole Broth' then
  891.             JugInfo = 'Svg. Mole Broth'
  892.         elseif state.JugMode.value == 'BloodclawShasra' or state.JugMode.value == 'Razor Brain Broth' or state.JugMode.value == 'Rzr. Brain Broth' then
  893.             JugInfo = 'Rzr. Brain Broth'
  894.         elseif state.JugMode.value == 'GorefangHobs' or state.JugMode.value == 'Burning Carrion Broth' then
  895.             JugInfo = 'B. Carrion Broth'
  896.         elseif state.JugMode.value == 'GooeyGerard' or state.JugMode.value == 'Cloudy Wheat Broth' or state.JugMode.value == 'Cl. Wheat Broth' then
  897.             JugInfo = 'Cl. Wheat Broth'
  898.         elseif state.JugMode.value == 'CrudeRaphie' or state.JugMode.value == 'Shadowy Broth' then
  899.             JugInfo = 'Shadowy Broth'
  900.         elseif state.JugMode.value == 'DroopyDortwin' or state.JugMode.value == 'Swirling Broth' then
  901.             JugInfo = 'Swirling Broth'
  902.         elseif state.JugMode.value == 'PonderingPeter' or state.JugMode.value == 'Viscous Broth' or state.JugMode.value == 'Vis. Broth' then
  903.             JugInfo = 'Vis. Broth'
  904.         elseif state.JugMode.value == 'SunburstMalfik' or state.JugMode.value == 'Shimmering Broth' then
  905.             JugInfo = 'Shimmering Broth'
  906.         elseif state.JugMode.value == 'AgedAngus' or state.JugMode.value == 'Fermented Broth' or state.JugMode.value == 'Ferm. Broth' then
  907.             JugInfo = 'Ferm. Broth'
  908.         elseif state.JugMode.value == 'WarlikePatrick' or state.JugMode.value == 'Livid Broth' then
  909.             JugInfo = 'Livid Broth'
  910.         elseif state.JugMode.value == 'ScissorlegXerin' or state.JugMode.value == 'Spicy Broth' then
  911.             JugInfo = 'Spicy Broth'
  912.         elseif state.JugMode.value == 'BouncingBertha' or state.JugMode.value == 'Bubbly Broth' then
  913.             JugInfo = 'Bubbly Broth'
  914.         elseif state.JugMode.value == 'RhymingShizuna' or state.JugMode.value == 'Lyrical Broth' then
  915.             JugInfo = 'Lyrical Broth'
  916.         elseif state.JugMode.value == 'AttentiveIbuki' or state.JugMode.value == 'Salubrious Broth' then
  917.             JugInfo = 'Salubrious Broth'
  918.         elseif state.JugMode.value == 'SwoopingZhivago' or state.JugMode.value == 'Windy Greens' then
  919.             JugInfo = 'Windy Greens'
  920.         elseif state.JugMode.value == 'AmiableRoche' or state.JugMode.value == 'Airy Broth' then
  921.             JugInfo = 'Airy Broth'
  922.         elseif state.JugMode.value == 'HeraldHenry' or state.JugMode.value == 'Translucent Broth' or state.JugMode.value == 'Trans. Broth' then
  923.             JugInfo = 'Trans. Broth'
  924.         elseif state.JugMode.value == 'BrainyWaluis' or state.JugMode.value == 'Crumbly Soil' then
  925.             JugInfo = 'Crumbly Soil'
  926.         elseif state.JugMode.value == 'HeadbreakerKen' or state.JugMode.value == 'Blackwater Broth' then
  927.             JugInfo = 'Blackwater Broth'
  928.         elseif state.JugMode.value == 'RedolentCandi' or state.JugMode.value == 'Electrified Broth' then
  929.             JugInfo = 'Electrified Broth'
  930.         elseif state.JugMode.value == 'AlluringHoney' or state.JugMode.value == 'Bug-Ridden Broth' then
  931.             JugInfo = 'Bug-Ridden Broth'
  932.         elseif state.JugMode.value == 'CaringKiyomaro' or state.JugMode.value == 'Fizzy Broth' then
  933.             JugInfo = 'Fizzy Broth'
  934.         elseif state.JugMode.value == 'VivaciousVickie' or state.JugMode.value == 'Tantalizing Broth' or state.JugMode.value == 'Tant. Broth' then
  935.             JugInfo = 'Tant. Broth'
  936.         elseif state.JugMode.value == 'HurlerPercival' or state.JugMode.value == 'Pale Sap' then
  937.             JugInfo = 'Pale Sap'
  938.         elseif state.JugMode.value == 'BlackbeardRandy' or state.JugMode.value == 'Meaty Broth' then
  939.             JugInfo = 'Meaty Broth'
  940.         elseif state.JugMode.value == 'GenerousArthur' or state.JugMode.value == 'Dire Broth' then
  941.             JugInfo = 'Dire Broth'
  942.         elseif state.JugMode.value == 'ThreestarLynn' or state.JugMode.value == 'Muddy Broth' then
  943.             JugInfo = 'Muddy Broth'
  944.         elseif state.JugMode.value == 'BraveHeroGlenn' or state.JugMode.value == 'Wispy Broth' then
  945.             JugInfo = 'Wispy Broth'
  946.         elseif state.JugMode.value == 'SharpwitHermes' or state.JugMode.value == 'Saline Broth' then
  947.             JugInfo = 'Saline Broth'
  948.         elseif state.JugMode.value == 'ColibriFamiliar' or state.JugMode.value == 'Sugary Broth' then
  949.             JugInfo = 'Sugary Broth'
  950.         elseif state.JugMode.value == 'ChoralLeera' or state.JugMode.value == 'Glazed Broth' then
  951.             JugInfo = 'Glazed Broth'
  952.         elseif state.JugMode.value == 'SpiderFamiliar' or state.JugMode.value == 'Sticky Webbing' then
  953.             JugInfo = 'Sticky Webbing'
  954.         elseif state.JugMode.value == 'GussyHachirobe' or state.JugMode.value == 'Slimy Webbing' then
  955.             JugInfo = 'Slimy Webbing'
  956.         elseif state.JugMode.value == 'AcuexFamiliar' or state.JugMode.value == 'Poisonous Broth' then
  957.             JugInfo = 'Poisonous Broth'
  958.         elseif state.JugMode.value == 'FluffyBredo' or state.JugMode.value == 'Venomous Broth' then
  959.             JugInfo = 'Venomous Broth'
  960.         elseif state.JugMode.value == 'SuspiciousAlice' or state.JugMode.value == 'Furious Broth' then
  961.             JugInfo = 'Furious Broth'
  962.         elseif state.JugMode.value == 'AnklebiterJedd' or state.JugMode.value == 'Crackling Broth' then
  963.             JugInfo = 'Crackling Broth'
  964.         elseif state.JugMode.value == 'FleetReinhard' or state.JugMode.value == 'Rapid Broth' then
  965.             JugInfo = 'Rapid Broth'
  966.         elseif state.JugMode.value == 'CursedAnnabelle' or state.JugMode.value == 'Creepy Broth' then
  967.             JugInfo = 'Creepy Broth'
  968.         elseif state.JugMode.value == 'SurgingStorm' or state.JugMode.value == 'Insipid Broth' then
  969.             JugInfo = 'Insipid Broth'
  970.         elseif state.JugMode.value == 'SubmergedIyo' or state.JugMode.value == 'Deepwater Broth' then
  971.             JugInfo = 'Deepwater Broth'
  972.         elseif state.JugMode.value == 'MosquitoFamiliar' or state.JugMode.value == 'Wetlands Broth' then
  973.             JugInfo = 'Wetlands Broth'
  974.         elseif state.JugMode.value == 'Left-HandedYoko' or state.JugMode.value == 'Heavenly Broth' then
  975.             JugInfo = 'Heavenly Broth'
  976.         end
  977.         if spell.english == "Call Beast" and call_beast_cancel:contains(JugInfo) then
  978.             add_to_chat(123, spell.name..' Canceled: [HQ Jug Pet]')
  979.             return
  980.         end
  981.         equip({ammo=JugInfo})
  982.     end
  983.  
  984.     if player.equipment.main == 'Aymur' then
  985.         custom_aftermath_timers_precast(spell)
  986.     end
  987.  
  988.     if spell.type == "WeaponSkill" and spell.name ~= 'Mistral Axe' and spell.name ~= 'Bora Axe' and spell.target.distance > target_distance then
  989.         cancel_spell()
  990.         add_to_chat(123, spell.name..' Canceled: [Out of Range]')
  991.         handle_equipping_gear(player.status)
  992.         return
  993.     end
  994.  
  995.     if spell.type == 'CorsairRoll' or spell.english == "Double-Up" then
  996.         equip(sets.precast.LuzafRing)
  997.     end
  998.  
  999.     if spell.prefix == '/magic' or spell.prefix == '/ninjutsu' or spell.prefix == '/song' then
  1000.         if state.PetMode.value == 'PetOnly' then
  1001.             equip(sets.precast.FCNE)
  1002.         else
  1003.             equip(sets.precast.FC)
  1004.         end
  1005.     end
  1006. end
  1007.  
  1008. function job_post_precast(spell, action, spellMap, eventArgs)
  1009. -- If Killer Instinct is active during WS, equip Nukumi Gausape +1.
  1010.     if spell.type:lower() == 'weaponskill' and buffactive['Killer Instinct'] then
  1011.         equip(sets.buff['Killer Instinct'])
  1012.     end
  1013.  
  1014.     if spell.english == "Primal Rend" and player.tp > 2750 then
  1015.         equip(sets.midcast.ExtraMAB)
  1016.     end
  1017.  
  1018. -- Equip Chaac Belt for TH+1 on common Subjob Abilities or Spells.
  1019.     if abilities_to_check:contains(spell.english) and state.TreasureMode.value == 'Tag' then
  1020.         equip(sets.TreasureHunter)
  1021.         end
  1022.    if spell.english == "Ruinator" or spell.english == "Bora Axe" or spell.english == "Decimation" or spell.english =="Rampage"  then
  1023.         if world.time >= (17*60) or world.time <= (5*60) then
  1024.             equip(sets.NightWS,sets.BrutalLugra)
  1025.         else
  1026.             equip(sets.DayWS,sets.BrutalMoon)
  1027.             end
  1028.             end
  1029.            
  1030. end
  1031.  
  1032. function job_midcast(spell, action, spellMap, eventArgs)
  1033.     if state.PetMode.value == 'PetOnly' then
  1034.         if spell.english == "Cure" or spell.english == "Cure II" or spell.english == "Cure III" or spell.english == "Cure IV" then
  1035.             equip(sets.CurePetOnly)
  1036.         end
  1037.         if spell.english == "Curaga" or spell.english == "Curaga II" or spell.english == "Curaga III" then
  1038.             equip(sets.CurePetOnly)
  1039.         end
  1040.     end
  1041. end
  1042.  
  1043. -- Return true if we handled the aftercast work.  Otherwise it will fall back
  1044. -- to the general aftercast() code in Mote-Include.
  1045. function job_aftercast(spell, action, spellMap, eventArgs)
  1046.     if spell.type == "Monster" and not spell.interrupted then
  1047.         if physical_ready_moves:contains(spell.name) then
  1048.             if state.PetMode.value == 'PetOnly' then
  1049.                 if state.OffenseMode.value == 'MaxAcc' then
  1050.                     if player.sub_job == 'NIN' or player.sub_job == 'DNC' then
  1051.                         equip(sets.midcast.Pet.ReadyDWNE.MaxAcc)
  1052.                     else
  1053.                         equip(sets.midcast.Pet.ReadyNE.MaxAcc)
  1054.                     end
  1055.                 elseif state.OffenseMode.value == 'HighAcc' then
  1056.                     if player.sub_job == 'NIN' or player.sub_job == 'DNC' then
  1057.                         equip(sets.midcast.Pet.ReadyDWNE.HighAcc, sets.midcast.Pet[state.CorrelationMode.value])
  1058.                     else
  1059.                         equip(sets.midcast.Pet.ReadyNE.HighAcc, sets.midcast.Pet[state.CorrelationMode.value])
  1060.                     end
  1061.                 elseif state.OffenseMode.value == 'MedAcc' then
  1062.                     if player.sub_job == 'NIN' or player.sub_job == 'DNC' then
  1063.                         equip(sets.midcast.Pet.ReadyDWNE.MedAcc, sets.midcast.Pet[state.CorrelationMode.value])
  1064.                     else
  1065.                         equip(sets.midcast.Pet.ReadyNE.MedAcc, sets.midcast.Pet[state.CorrelationMode.value])
  1066.                     end
  1067.                 else
  1068.                     if player.sub_job == 'NIN' or player.sub_job == 'DNC' then
  1069.                         if multi_hit_ready_moves:contains(spell.name) then
  1070.                             equip(set_combine(sets.midcast.Pet.MultiStrikeDWNE, sets.midcast.Pet[state.CorrelationMode.value]))
  1071.                         else
  1072.                             equip(set_combine(sets.midcast.Pet.ReadyDWNE, sets.midcast.Pet[state.CorrelationMode.value]))
  1073.                         end
  1074.                     else
  1075.                         if multi_hit_ready_moves:contains(spell.name) then
  1076.                             equip(set_combine(sets.midcast.Pet.MultiStrikeNE, sets.midcast.Pet[state.CorrelationMode.value]))
  1077.                         else
  1078.                             equip(set_combine(sets.midcast.Pet.ReadyNE, sets.midcast.Pet[state.CorrelationMode.value]))
  1079.                         end
  1080.                     end
  1081.                 end
  1082.             else
  1083.                 if state.OffenseMode.value == 'MaxAcc' then
  1084.                     equip(sets.midcast.Pet.MaxAcc)
  1085.                 elseif state.OffenseMode.value == 'HighAcc' then
  1086.                     equip(sets.midcast.Pet.HighAcc, sets.midcast.Pet[state.CorrelationMode.value])
  1087.                 elseif state.OffenseMode.value == 'MedAcc' then
  1088.                     equip(sets.midcast.Pet.MedAcc, sets.midcast.Pet[state.CorrelationMode.value])
  1089.                 else
  1090.                     if multi_hit_ready_moves:contains(spell.name) then
  1091.                         equip(set_combine(sets.midcast.Pet.MultiStrike, sets.midcast.Pet[state.CorrelationMode.value]))
  1092.                     else
  1093.                         equip(set_combine(sets.midcast.Pet.WS, sets.midcast.Pet[state.CorrelationMode.value]))
  1094.                     end
  1095.                 end
  1096.             end
  1097.         end
  1098.  
  1099.         if magic_atk_ready_moves:contains(spell.name) then
  1100.             if state.PetMode.value == 'PetOnly' then
  1101.                 if state.OffenseMode.value == 'MaxAcc' then
  1102.                     if player.sub_job == 'NIN' or player.sub_job == 'DNC' then
  1103.                         equip(sets.midcast.Pet.MagicAtkReadyDWNE.MaxAcc)
  1104.                     else
  1105.                         equip(sets.midcast.Pet.MagicAtkReadyNE.MaxAcc)
  1106.                     end
  1107.                 elseif state.OffenseMode.value == 'HighAcc' then
  1108.                     if player.sub_job == 'NIN' or player.sub_job == 'DNC' then
  1109.                         equip(sets.midcast.Pet.MagicAtkReadyDWNE.HighAcc)
  1110.                     else
  1111.                         equip(sets.midcast.Pet.MagicAtkReadyNE.HighAcc)
  1112.                     end
  1113.                 elseif state.OffenseMode.value == 'MedAcc' then
  1114.                     if player.sub_job == 'NIN' or player.sub_job == 'DNC' then
  1115.                         equip(sets.midcast.Pet.MagicAtkReadyDWNE.MedAcc)
  1116.                     else
  1117.                         equip(sets.midcast.Pet.MagicAtkReadyNE.MedAcc)
  1118.                     end
  1119.                 else
  1120.                     if player.sub_job == 'NIN' or player.sub_job == 'DNC' then
  1121.                         equip(sets.midcast.Pet.MagicAtkReadyDWNE)
  1122.                     else
  1123.                         equip(sets.midcast.Pet.MagicAtkReadyNE)
  1124.                     end
  1125.                 end
  1126.             else
  1127.                 equip(sets.midcast.Pet.MagicAtkReady)
  1128.             end
  1129.         end
  1130.  
  1131.         if magic_acc_ready_moves:contains(spell.name) then
  1132.             if state.PetMode.value == 'PetOnly' then
  1133.                 if player.sub_job == 'NIN' or player.sub_job == 'DNC' then
  1134.                     equip(sets.midcast.Pet.MagicAccReadyDWNE)
  1135.                 else
  1136.                     equip(sets.midcast.Pet.MagicAccReadyNE)
  1137.                 end
  1138.             else
  1139.                 equip(sets.midcast.Pet.MagicAccReady)
  1140.             end
  1141.         end
  1142.  
  1143.         -- If Pet TP, before bonuses, is less than a certain value then equip Nukumi Manoplas +1
  1144.         if physical_ready_moves:contains(spell.name) and state.OffenseMode.value ~= 'MaxAcc' then
  1145.             if tp_based_ready_moves:contains(spell.name) and PetJob == 'Warrior' and pet_tp < 1900 then
  1146.                 equip(sets.midcast.Pet.TPBonus)
  1147.             elseif tp_based_ready_moves:contains(spell.name) and PetJob ~= 'Warrior' and pet_tp < 2400 then
  1148.                 equip(sets.midcast.Pet.TPBonus)
  1149.             end
  1150.         end
  1151.  
  1152.         if magic_atk_ready_moves:contains(spell.name) then
  1153.             if tp_based_ready_moves:contains(spell.name) and PetJob == 'Warrior' and pet_tp > 2000 then
  1154.                 equip(sets.UnleashMABAxes)
  1155.             elseif tp_based_ready_moves:contains(spell.name) and PetJob ~= 'Warrior' and pet_tp > 2500 then
  1156.                 equip(sets.UnleashMABAxes)
  1157.             end
  1158.         end
  1159.     eventArgs.handled = true
  1160.     end
  1161.  
  1162.     -- Create custom timers for Pet Buffs.
  1163.     if pet_buff_moves:contains(spell.name) and DisplayPetBuffTimers == 'true' then
  1164.         if not spell.interrupted then
  1165.             pet_buff_timer(spell)
  1166.         end
  1167.     end
  1168.  
  1169.     if spell.english == 'Fight' or spell.english == 'Bestial Loyalty' or spell.english == 'Call Beast' then
  1170.         if not spell.interrupted then
  1171.             pet_info_update()
  1172.         end
  1173.     end
  1174.  
  1175.     if spell.english == "Leave" and not spell.interrupted then
  1176.         clear_pet_buff_timers()
  1177.         PetName = 'None';PetJob = 'None';PetInfo = 'None';ReadyMoveOne = 'None';ReadyMoveTwo = 'None';ReadyMoveThree = 'None'
  1178.     end
  1179.  
  1180.     if player.equipment.main == 'Aymur' then
  1181.         custom_aftermath_timers_aftercast(spell)
  1182.     end
  1183.  
  1184.     if state.PetMode.value == 'PetOnly' and not spell.type == "Monster" then
  1185.         if player.sub_job == 'NIN' or player.sub_job == 'DNC' then
  1186.             equip(sets.DTAxes)
  1187.         else
  1188.             equip(sets.DTAxeShield)
  1189.         end
  1190.     end
  1191. end
  1192.  
  1193. function job_pet_midcast(spell, action, spellMap, eventArgs)
  1194.  
  1195. end
  1196.  
  1197. function job_pet_aftercast(spell, action, spellMap, eventArgs)
  1198.     if pet_buff_moves:contains(spell.name) and DisplayPetBuffTimers == 'true' then
  1199.         -- Pet TP calculations for Ready Buff Durations
  1200.         local TP_Amount = 1000
  1201.         if pet_tp * 10 < 1000 then TP_Amount = TP_Amount + TP_Gift_Bonus;end
  1202.         if pet_tp * 10 > 1000 then TP_Amount = (pet_tp * 10) + TP_Gift_Bonus;end
  1203.         if player.equipment.hands == "Ferine Manoplas +1" then TP_Amount = TP_Amount + 250;end
  1204.         if player.equipment.hands == "Ferine Manoplas +2" then TP_Amount = TP_Amount + 500;end
  1205.         if player.equipment.hands == "Nukumi Manoplas" then TP_Amount = TP_Amount + 550;end
  1206.         if player.equipment.hands == "Nukumi Manoplas +1" then TP_Amount = TP_Amount + 600;end
  1207.         if player.equipment.main == "Aymur" or player.equipment.sub == "Aymur" then TP_Amount = TP_Amount + 500;end
  1208.         if player.equipment.main == "Kumbhakarna" then TP_Amount = TP_Amount + TP_Bonus_Main;end
  1209.         if player.equipment.sub == "Kumbhakarna" then TP_Amount = TP_Amount + TP_Bonus_Sub;end
  1210.         if TP_Amount > 3000 then TP_Amount = 3000;end
  1211.  
  1212.         -- add_to_chat(28, pet.name..' Ready Midcast TP: '..TP_Amount..'')
  1213.  
  1214.         if spell.english == 'Bubble Curtain' then
  1215.             local TP_Buff_Duration = math.floor((TP_Amount - 1000)* 0.09) + BubbleCurtainDuration
  1216.             send_command('timers c "'..spell.english..'" '..TP_Buff_Duration..' down '..BubbleCurtainIcon..'')
  1217.         elseif spell.english == 'Scissor Guard' then
  1218.             local TP_Buff_Duration = math.floor(TP_Amount * 0.06)
  1219.             send_command('timers c "'..spell.english..'" '..TP_Buff_Duration..' down '..ScissorGuardIcon..'')
  1220.         elseif spell.english == 'Secretion' then
  1221.             TP_Amount = TP_Amount + 500
  1222.             if TP_Amount > 3000 then TP_Amount = 3000;end
  1223.             local TP_Buff_Duration = math.floor(TP_Amount * 0.18)
  1224.             send_command('timers c "Secretion" '..TP_Buff_Duration..' down '..SecretionIcon..'')
  1225.         elseif spell.english == 'Rage' then
  1226.             TP_Amount = TP_Amount + 500
  1227.             if TP_Amount > 3000 then TP_Amount = 3000;end
  1228.             local TP_Buff_Duration = math.floor(TP_Amount * 0.18)
  1229.             send_command('timers c "'..spell.english..'" '..TP_Buff_Duration..' down '..RageIcon..'')
  1230.         elseif spell.english == 'Rhino Guard' then
  1231.             local TP_Buff_Duration = math.floor(TP_Amount * 0.18)
  1232.             send_command('timers c "Rhino Guard" '..TP_Buff_Duration..' down '..RhinoGuardIcon..'')
  1233.         elseif spell.english == 'Zealous Snort' then
  1234.             local TP_Buff_Duration = math.floor(TP_Amount * 0.06)
  1235.             send_command('timers c "'..spell.english..'" '..TP_Buff_Duration..' down '..ZealousSnortIcon..'')
  1236.         end
  1237.     end
  1238.  
  1239.     if state.PetMode.value == 'PetOnly' then
  1240.         if player.sub_job == 'NIN' or player.sub_job == 'DNC' then
  1241.             equip(sets.DTAxes)
  1242.         else
  1243.             equip(sets.DTAxeShield)
  1244.         end
  1245.     end
  1246. end
  1247. function determine_haste_group()
  1248.    
  1249.     classes.CustomMeleeGroups:clear()
  1250.     -- assuming +4 for marches (ghorn has +5)
  1251.     -- Haste (white magic) 15%
  1252.     -- Haste Samba (Sub) 5%
  1253.     -- Haste (Merited DNC) 10% (never account for this)
  1254.     -- Victory March +0/+3/+4/+5    9.4/14%/15.6%/17.1% +0
  1255.     -- Advancing March +0/+3/+4/+5  6.3/10.9%/12.5%/14%  +0
  1256.     -- Embrava 25%
  1257.     -- buffactive[580] = geo haste
  1258.     -- buffactive[33] = regular haste
  1259.     -- state.HasteMode = toggle for when you know Haste II is being cast on you
  1260.     -- Hi = Haste II is being cast. This is clunky to use when both haste II and haste I are being cast
  1261.     -- but wtf can  you do..   I macro it, and use it often.
  1262.    if state.HasteMode.value == 'Hi' then
  1263.         if  (((buffactive[580] or buffactive[33]) and buffactive.march == 2 or buffactive[224]) or (buffactive[33] and buffactive[224]) or (buffactive[224] and buffactive[370] and buffactive.march == 2)) then
  1264.             add_to_chat(8, '-------------MaxHaste%-------------')
  1265.             classes.CustomMeleeGroups:append('MaxHaste')
  1266.         elseif (((buffactive[580] or buffactive[33]) and buffactive.march == 1) or
  1267.             (buffactive.march == 2 and buffactive[228]) or
  1268.             (buffactive[228] and buffactive.march == 1 and buffactive[370])or
  1269.             (buffactive[33] and buffactive.march == 1)) then
  1270.             add_to_chat(8, '-------------Haste 40%-------------')
  1271.             classes.CustomMeleeGroups:append('Haste_40')
  1272.         elseif (((buffactive[33] or buffactive[580]) and buffactive[370]) or
  1273.             (buffactive[228] and buffactive.march == 1)) then
  1274.             add_to_chat(8, '-------------Haste 35%-------------')
  1275.             classes.CustomMeleeGroups:append('Haste_35')
  1276.         elseif buffactive[33] or buffactive[580] or
  1277.             (buffactive[228] and buffactive[370]) then
  1278.             add_to_chat(8, '-------------Haste 30%-------------')
  1279.             classes.CustomMeleeGroups:append('Haste_30')
  1280.         elseif buffactive[228] then
  1281.             add_to_chat(8, '-------------Haste 25%-------------')
  1282.             classes.CustomMeleeGroups:append('Haste_25')
  1283.         elseif (buffactive[370] and buffactive.march == 2) then
  1284.             add_to_chat(8, '-------------Haste 20%-------------')
  1285.             classes.CustomMeleeGroups:append('Haste_20')
  1286.         elseif (buffactive.march == 1 and buffactive[370])
  1287.             or buffactive.march == 2 then
  1288.             add_to_chat(8, '-------------Haste 15%-------------')
  1289.             classes.CustomMeleeGroups:append('Haste_15')
  1290.         elseif buffactive.march == 1 then
  1291.             add_to_chat(8, '-------------Haste 10%-------------')
  1292.             classes.CustomMeleeGroups:append('Haste_10')
  1293.         elseif buffactive[370] then
  1294.             add_to_chat(8, '-------------Haste 5%-------------')
  1295.             classes.CustomMeleeGroups:append('Haste_5')
  1296.         end
  1297.     else
  1298.         if  ((buffactive[580] and (buffactive.march == 2 or buffactive[224] or buffactive[33]))
  1299.             or (buffactive[224] and buffactive[370] and buffactive.march == 2)) then
  1300.             add_to_chat(8, '-------------MaxHaste%-------------')
  1301.             classes.CustomMeleeGroups:append('MaxHaste')
  1302.         elseif (buffactive[580] and buffactive.march == 1) or
  1303.             (buffactive[228] and (buffactive[33] or buffactive.march == 2)) or
  1304.             (buffactive[228] and (buffactive.march == 1 and buffactive[370])) then
  1305.             add_to_chat(8, '-------------Haste 40%-------------')
  1306.             classes.CustomMeleeGroups:append('Haste_40')
  1307.         elseif (buffactive[580] and buffactive[370]) or
  1308.             (buffactive[228] and buffactive.march == 1) or (buffactive[370] and buffactive[33] and buffactive.march == 2) then
  1309.             add_to_chat(8, '-------------Haste 35%-------------')
  1310.             classes.CustomMeleeGroups:append('Haste_35')
  1311.         elseif buffactive[580] or
  1312.             (buffactive[228] and buffactive[370]) or (buffactive[33] and buffactive.march == 2) then
  1313.             add_to_chat(8, '-------------Haste 30%-------------')
  1314.             classes.CustomMeleeGroups:append('Haste_30')
  1315.         elseif buffactive[228] then
  1316.             add_to_chat(8, '-------------Haste 25%-------------')
  1317.             classes.CustomMeleeGroups:append('Haste_25')
  1318.         elseif ((buffactive[33] or buffactive.march == 2) and buffactive[370]) or (buffactive [33] and buffactive.march == 1 or buffactive[370]) then
  1319.             add_to_chat(8, '-------------Haste 20%-------------')
  1320.             classes.CustomMeleeGroups:append('Haste_20')
  1321.         elseif  (buffactive[33] or buffactive.march == 2) or(buffactive.march == 1 and buffactive[370]) then
  1322.             add_to_chat(8, '-------------Haste 15%-------------')
  1323.             classes.CustomMeleeGroups:append('Haste_15')
  1324.         elseif buffactive.march == 1 then
  1325.             add_to_chat(8, '-------------Haste 10%-------------')
  1326.             classes.CustomMeleeGroups:append('Haste_10')
  1327.         elseif buffactive[370] then
  1328.             add_to_chat(8, '-------------Haste 5%-------------')
  1329.             classes.CustomMeleeGroups:append('Haste_5')
  1330.         end
  1331.     end
  1332. end
  1333. -------------------------------------------------------------------------------------------------------------------
  1334. -- Customization hook for idle sets.
  1335. -------------------------------------------------------------------------------------------------------------------
  1336.  
  1337. function customize_idle_set(idleSet)
  1338.     if state.PetMode.value == 'PetOnly' then
  1339.         if player.sub_job == 'NIN' or player.sub_job == 'DNC' then
  1340.             idleSet = set_combine(idleSet, sets.DTAxes)
  1341.         else
  1342.             idleSet = set_combine(idleSet, sets.DTAxeShield)
  1343.         end
  1344.     end
  1345.     return idleSet
  1346. end
  1347.  
  1348. -------------------------------------------------------------------------------------------------------------------
  1349. -- Hooks for Reward, Correlation, Treasure Hunter, and Pet Mode handling.
  1350. -------------------------------------------------------------------------------------------------------------------
  1351.  
  1352. function job_state_change(stateField, newValue, oldValue)
  1353.     if stateField == 'Correlation Mode' then
  1354.         state.CorrelationMode:set(newValue)
  1355.     elseif stateField == 'Treasure Mode' then
  1356.         state.TreasureMode:set(newValue)
  1357.     elseif stateField == 'Pet Mode' then
  1358.         state.CombatWeapon:set(newValue)
  1359.     end
  1360. end
  1361.  
  1362. function get_custom_wsmode(spell, spellMap, default_wsmode)
  1363.     if default_wsmode == 'Normal' then
  1364.         if spell.english == "Ruinator" and (world.day_element == 'Water' or world.day_element == 'Wind' or world.day_element == 'Ice') then
  1365.             return 'Gavialis'
  1366.         end
  1367.     end
  1368. end
  1369. function job_buff_change(buff, gain)
  1370.    if S{'haste', 'march', 'embrava', 'haste samba', 'geo-haste', 'indi-haste'}:contains(buff:lower()) then
  1371.         determine_haste_group()
  1372.         handle_equipping_gear(player.status)
  1373.     end
  1374.     if state.Buff[buff] ~= nil then
  1375.         state.Buff[buff] = gain
  1376.         if not midaction() then
  1377.             handle_equipping_gear(player.status)
  1378.         end
  1379.     end
  1380.     end
  1381. -------------------------------------------------------------------------------------------------------------------
  1382. -- User code that supplements self-commands.
  1383. -------------------------------------------------------------------------------------------------------------------
  1384.  
  1385. -- Called any time we attempt to handle automatic gear equips (ie: engaged or idle gear).
  1386. function job_handle_equipping_gear(playerStatus, eventArgs)
  1387.     -- Equipping a Capacity Points Mantle locks it until it is manually unequipped.
  1388.     if player.equipment.back == 'Mecisto. Mantle' or player.equipment.back == 'Aptitude Mantle' or player.equipment.back == 'Aptitude Mantle +1' then
  1389.         disable('back')
  1390.     else
  1391.         enable('back')
  1392.     end
  1393. end
  1394.  
  1395. -- Called by the 'update' self-command, for common needs.
  1396. -- Set eventArgs.handled to true if we don't want automatic equipping of gear.
  1397. function job_update(cmdParams, eventArgs)
  1398.     get_combat_form()
  1399.     get_melee_groups()
  1400.     pet_info_update()
  1401.      determine_haste_group()
  1402.     update_display_mode_info()
  1403. end
  1404.  
  1405. -- Updates gear based on pet status changes.
  1406. function job_pet_status_change(newStatus, oldStatus, eventArgs)
  1407.     if newStatus == 'Idle' or newStatus == 'Engaged' then
  1408.         handle_equipping_gear(player.status)
  1409.     end
  1410.  
  1411.     if pet.hpp == 0 then
  1412.         clear_pet_buff_timers()
  1413.         PetName = 'None';PetJob = 'None';PetInfo = 'None';ReadyMoveOne = 'None';ReadyMoveTwo = 'None';ReadyMoveThree = 'None'
  1414.     end
  1415.  
  1416.     pet_info_update()
  1417. end
  1418.  
  1419. -------------------------------------------------------------------------------------------------------------------
  1420. -- Ready Move Presets - Credit to Bomberto
  1421. -------------------------------------------------------------------------------------------------------------------
  1422.  
  1423. pet_tp=0
  1424. function job_self_command(cmdParams, eventArgs)
  1425.     if cmdParams[1]:lower() == 'ready' then
  1426.         ready_move(cmdParams)
  1427.         eventArgs.handled = true
  1428.     end
  1429.     if cmdParams[1] == 'pet_tp' then
  1430.         pet_tp = tonumber(cmdParams[2])
  1431.     end
  1432. end
  1433.  
  1434. function ready_move(cmdParams)
  1435.      local move = cmdParams[2]:lower()
  1436.  
  1437.      local ReadyMove = ''
  1438.      if move == 'one' then
  1439.        ReadyMove = ReadyMoveOne
  1440.      elseif move == 'two' then
  1441.        ReadyMove = ReadyMoveTwo
  1442.      else
  1443.        ReadyMove = ReadyMoveThree
  1444.      end
  1445.  
  1446.      send_command('input /pet "'.. ReadyMove ..'" <me>')
  1447. end
  1448.  
  1449. -- Set eventArgs.handled to true if we don't want the automatic display to be run.
  1450. function display_current_job_state(eventArgs)
  1451.     local msg = 'Melee'
  1452.    
  1453.     if state.CombatForm.has_value then
  1454.         msg = msg .. ' (' .. state.CombatForm.value .. ')'
  1455.     end
  1456.    
  1457.     msg = msg .. ': '
  1458.    
  1459.     msg = msg .. state.OffenseMode.value
  1460.     if state.HybridMode.value ~= 'Normal' then
  1461.         msg = msg .. '/' .. state.HybridMode.value
  1462.     end
  1463.     msg = msg .. ', WS: ' .. state.WeaponskillMode.value
  1464.    
  1465.     if state.DefenseMode.value ~= 'None' then
  1466.         msg = msg .. ', ' .. 'Defense: ' .. state.DefenseMode.value .. ' (' .. state[state.DefenseMode.value .. 'DefenseMode'].value .. ')'
  1467.     end
  1468.    
  1469.     if state.Kiting.value then
  1470.         msg = msg .. ', Kiting'
  1471.     end
  1472.  
  1473.     msg = msg .. ', Corr.: '..state.CorrelationMode.value
  1474.  
  1475.     if state.JugMode.value ~= 'None' then
  1476.         add_to_chat(8,'-- Jug Pet: '.. PetName ..' -- (Pet Info: '.. PetInfo ..', '.. PetJob ..')')
  1477.     end
  1478.  
  1479.     add_to_chat(28,'Ready Moves: 1.'.. ReadyMoveOne ..'  2.'.. ReadyMoveTwo ..'  3.'.. ReadyMoveThree ..'')
  1480.     add_to_chat(122, msg)
  1481.  
  1482.     eventArgs.handled = true
  1483. end
  1484.  
  1485. -------------------------------------------------------------------------------------------------------------------
  1486. -- Utility functions specific to this job.
  1487. -------------------------------------------------------------------------------------------------------------------
  1488.  
  1489. function pet_info_update()
  1490.     if pet.isvalid then
  1491.         PetName = pet.name
  1492.  
  1493.         if pet.name == 'DroopyDortwin' or pet.name == 'PonderingPeter' or pet.name == 'HareFamiliar' or pet.name == 'KeenearedSteffi' or pet.name == 'LuckyLulush' then
  1494.             PetInfo = "Rabbit, Beast";PetJob = 'Warrior';ReadyMoveOne = 'Foot Kick';ReadyMoveTwo = 'Whirl Claws';ReadyMoveThree = 'Wild Carrot'
  1495.         elseif pet.name == 'SunburstMalfik' or pet.name == 'AgedAngus' or pet.name == 'HeraldHenry' or pet.name == 'CrabFamiliar' or pet.name == 'CourierCarrie' then
  1496.             PetInfo = "Crab, Aquan";PetJob = 'Paladin';ReadyMoveOne = 'Big Scissors';ReadyMoveTwo = 'Scissor Guard';ReadyMoveThree = 'Bubble Curtain'
  1497.         elseif pet.name == 'WarlikePatrick' or pet.name == 'LizardFamiliar' or pet.name == 'ColdbloodedComo' or pet.name == 'AudaciousAnna' then
  1498.             PetInfo = "Lizard, Lizard";PetJob = 'Warrior';ReadyMoveOne = 'Tail Blow';ReadyMoveTwo = 'Brain Crush';ReadyMoveThree = 'Fireball'
  1499.         elseif pet.name == 'ScissorlegXerin' or pet.name == 'BouncingBertha' then
  1500.             PetInfo = "Chapuli, Vermin";PetJob = 'Warrior';ReadyMoveOne = 'Sensilla Blades';ReadyMoveTwo = 'Tegmina Buffet';ReadyMoveThree = 'Tegmina Buffet'
  1501.         elseif pet.name == 'RhymingShizuna' or pet.name == 'SheepFamiliar' or pet.name == 'LullabyMelodia' or pet.name == 'NurseryNazuna' then
  1502.             PetInfo = "Sheep, Beast";PetJob = 'Warrior';ReadyMoveOne = 'Lamb Chop';ReadyMoveTwo = 'Rage';ReadyMoveThree = 'Sheep Song'
  1503.         elseif pet.name == 'AttentiveIbuki' or pet.name == 'SwoopingZhivago' then
  1504.             PetInfo = "Tulfaire, Bird";PetJob = 'Warrior';ReadyMoveOne = 'Swooping Frenzy';ReadyMoveTwo = 'Pentapeck';ReadyMoveThree = 'Molting Plumage'
  1505.         elseif pet.name == 'AmiableRoche' or pet.name == 'TurbidToloi' then
  1506.             PetInfo = "Pugil, Aquan";PetJob = 'Warrior';ReadyMoveOne = 'Recoil Dive';ReadyMoveTwo = 'Water Wall';ReadyMoveThree = 'Intimidate'
  1507.         elseif pet.name == 'BrainyWaluis' or pet.name == 'FunguarFamiliar' or pet.name == 'DiscreetLouise' then
  1508.             PetInfo = "Funguar, Plantoid";PetJob = 'Warrior';ReadyMoveOne = 'Frogkick';ReadyMoveTwo = 'Spore';ReadyMoveThree = 'Silence Gas'              
  1509.         elseif pet.name == 'HeadbreakerKen' or pet.name == 'MayflyFamiliar' or pet.name == 'ShellbusterOrob' or pet.name == 'MailbusterCetas' then
  1510.             PetInfo = "Fly, Vermin";PetJob = 'Warrior';ReadyMoveOne = 'Somersault';ReadyMoveTwo = 'Cursed Sphere';ReadyMoveThree = 'Venom'              
  1511.         elseif pet.name == 'RedolentCandi' or pet.name == 'AlluringHoney' then
  1512.             PetInfo = "Snapweed, Plantoid";PetJob = 'Warrior';ReadyMoveOne = 'Tickling Tendrils';ReadyMoveTwo = 'Stink Bomb';ReadyMoveThree = 'Nectarous Deluge'
  1513.         elseif pet.name == 'CaringKiyomaro' or pet.name == 'VivaciousVickie' then
  1514.             PetInfo = "Raaz, Beast";PetJob = 'Monk';ReadyMoveOne = 'Sweeping Gouge';ReadyMoveTwo = 'Zealous Snort';ReadyMoveThree = 'Zealous Snort'
  1515.         elseif pet.name == 'HurlerPercival' or pet.name == 'BeetleFamiliar' or pet.name == 'PanzerGalahad' then
  1516.             PetInfo = "Beetle, Vermin";PetJob = 'Paladin';ReadyMoveOne = 'Power Attack';ReadyMoveTwo = 'Rhino Attack';ReadyMoveThree = 'Hi-Freq Field'
  1517.         elseif pet.name == 'BlackbeardRandy' or pet.name == 'TigerFamiliar' or pet.name == 'SaberSiravarde' or pet.name == 'GorefangHobs' then
  1518.             PetInfo = "Tiger, Beast";PetJob = 'Warrior';ReadyMoveOne = 'Razor Fang';ReadyMoveTwo = 'Claw Cyclone';ReadyMoveThree = 'Roar'
  1519.         elseif pet.name == 'ColibriFamiliar' or pet.name == 'ChoralLeera' then
  1520.             PetInfo = "Colibri, Bird";PetJob = 'Red Mage';ReadyMoveOne = 'Pecking Flurry';ReadyMoveTwo = 'Pecking Flurry';ReadyMoveThree = 'Pecking Flurry'
  1521.         elseif pet.name == 'SpiderFamiliar' or pet.name == 'GussyHachirobe' then
  1522.             PetInfo = "Spider, Vermin";PetJob = 'Warrior';ReadyMoveOne = 'Sickle Slash';ReadyMoveTwo = 'Acid Spray';ReadyMoveThree = 'Spider Web'
  1523.         elseif pet.name == 'GenerousArthur' or pet.name == 'GooeyGerard' then
  1524.             PetInfo = "Slug, Amorph";PetJob = 'Warrior';ReadyMoveOne = 'Purulent Ooze';ReadyMoveTwo = 'Corrosive Ooze';ReadyMoveThree = 'Corrosive Ooze'
  1525.         elseif pet.name == 'ThreestarLynn' or pet.name == 'DipperYuly' then
  1526.             PetInfo = "Ladybug, Vermin";PetJob = 'Thief';ReadyMoveOne = 'Spiral Spin';ReadyMoveTwo = 'Sudden Lunge';ReadyMoveThree = 'Noisome Powder'
  1527.         elseif pet.name == 'SharpwitHermes' or pet.name == 'FlowerpotBill' or pet.name == 'FlowerpotBen' or pet.name == 'Homunculus' or pet.name == 'FlowerpotMerle' then
  1528.             PetInfo = "Mandragora, Plantoid";PetJob = 'Monk';ReadyMoveOne = 'Head Butt';ReadyMoveTwo = 'Leaf Dagger';ReadyMoveThree = 'Wild Oats'
  1529.         elseif pet.name == 'AcuexFamiliar' or pet.name == 'FluffyBredo' then
  1530.             PetInfo = "Acuex, Amorph";PetJob = 'Black Mage';ReadyMoveOne = 'Foul Waters';ReadyMoveTwo = 'Pestilent Plume';ReadyMoveThree = 'Pestilent Plume'
  1531.         elseif pet.name == 'FlytrapFamiliar' or pet.name == 'VoraciousAudrey' or pet.name == 'PrestoJulio' then
  1532.             PetInfo = "Flytrap, Plantoid";PetJob = 'Warrior';ReadyMoveOne = 'Soporific';ReadyMoveTwo = 'Palsy Pollen';ReadyMoveThree = 'Gloeosuccus'
  1533.         elseif pet.name == 'EftFamiliar' or pet.name == 'AmbusherAllie' or pet.name == 'BugeyedBroncha' or pet.name == 'SuspiciousAlice' then
  1534.             PetInfo = "Eft, Lizard";PetJob = 'Warrior';ReadyMoveOne = 'Nimble Snap';ReadyMoveTwo = 'Cyclotail';ReadyMoveThree = 'Geist Wall'
  1535.         elseif pet.name == 'AntlionFamiliar' or pet.name == 'ChopsueyChucky' or pet.name == 'CursedAnnabelle' then
  1536.             PetInfo = "Antlion, Vermin";PetJob = 'Warrior';ReadyMoveOne = 'Mandibular Bite';ReadyMoveTwo = 'Venom Spray';ReadyMoveThree = 'Sandblast'
  1537.         elseif pet.name == 'MiteFamiliar' or pet.name == 'LifedrinkerLars' or pet.name == 'AnklebiterJedd' then
  1538.             PetInfo = "Diremite, Vermin";PetJob = 'Dark Knight';ReadyMoveOne = 'Double Claw';ReadyMoveTwo = 'Spinning Top';ReadyMoveThree = 'Filamented Hold'
  1539.         elseif pet.name == 'AmigoSabotender' then
  1540.             PetInfo = "Cactuar, Plantoid";PetJob = 'Warrior';ReadyMoveOne = 'Needle Shot';ReadyMoveTwo = '??? Needles';ReadyMoveThree = '??? Needles'
  1541.         elseif pet.name == 'CraftyClyvonne' or pet.name == 'BloodclawShashra' then
  1542.             PetInfo = "Lynx, Beast";PetJob = 'Warrior';ReadyMoveOne = 'Blaster';ReadyMoveTwo = 'Chaotic Eye';ReadyMoveThree = 'Charged Whisker'
  1543.         elseif pet.name == 'SwiftSieghard' or pet.name == 'FleetReinhard' then
  1544.             PetInfo = "Raptor, Lizard";PetJob = 'Warrior';ReadyMoveOne = 'Scythe Tail';ReadyMoveTwo = 'Ripper Fang';ReadyMoveThree = 'Chomp Rush'
  1545.         elseif pet.name == 'DapperMac' or pet.name == 'SurgingStorm' or pet.name == 'SubmergedIyo' then
  1546.             PetInfo = "Apkallu, Bird";PetJob = 'Monk';ReadyMoveOne = 'Beak Lunge';ReadyMoveTwo = 'Wing Slap';ReadyMoveThree = 'Wing Slap'
  1547.         elseif pet.name == 'FatsoFargann' then
  1548.             PetInfo = "Leech, Amorph";PetJob = 'Warrior';ReadyMoveOne = 'Suction';ReadyMoveTwo = 'Acid Mist';ReadyMoveThree = 'Drain Kiss'
  1549.         elseif pet.name == 'FaithfulFalcorr' then
  1550.             PetInfo = "Hippogryph, Bird";PetJob = 'Thief';ReadyMoveOne = 'Back Heel';ReadyMoveTwo = 'Choke Breath';ReadyMoveThree = 'Fantod'
  1551.         elseif pet.name == 'CrudeRaphie' then
  1552.             PetInfo = "Adamantoise, Lizard";PetJob = 'Paladin';ReadyMoveOne = 'Tortoise Stomp';ReadyMoveTwo = 'Harden Shell';ReadyMoveThree = 'Aqua Breath'
  1553.         elseif pet.name == 'MosquitoFamilia' or pet.name == 'Left-HandedYoko' then
  1554.             PetInfo = "Mosquito, Vermin";PetJob = 'Dark Knight';ReadyMoveOne = 'Infected Leech';ReadyMoveTwo = 'Gloom Spray';ReadyMoveThree = 'Gloom Spray'
  1555.         end
  1556.     else
  1557.         PetName = 'None';PetJob = 'None';PetInfo = 'None';ReadyMoveOne = 'None';ReadyMoveTwo = 'None';ReadyMoveThree = 'None'
  1558.     end
  1559. end
  1560.  
  1561. function pet_buff_timer(spell)
  1562.     if spell.english == 'Reward' then
  1563.         send_command('timers c "Pet: Regen" 180 down '..RewardRegenIcon..'')
  1564.     elseif spell.english == 'Spur' then
  1565.         send_command('timers c "Pet: Spur" 90 down '..SpurIcon..'')
  1566.     elseif spell.english == 'Run Wild' then
  1567.         send_command('timers c "'..spell.english..'" '..RunWildDuration..' down '..RunWildIcon..'')
  1568.     end
  1569. end
  1570.  
  1571. function clear_pet_buff_timers()
  1572.     send_command('timers c "Pet: Regen" 0 down '..RewardRegenIcon..'')
  1573.     send_command('timers c "Pet: Spur" 0 down '..SpurIcon..'')
  1574.     send_command('timers c "Run Wild" 0 down '..RunWildIcon..'')
  1575. end
  1576.  
  1577. function display_mode_info()
  1578.     if DisplayModeInfo == 'true' then
  1579.         send_command('text AccuracyText create Acc. Mode: Normal')
  1580.         send_command('text AccuracyText pos '..TextBoxX..' '..TextBoxY..'')
  1581.         send_command('text AccuracyText size '..TextSize..'')
  1582.         TextBoxY = TextBoxY + (TextSize + 6)
  1583.         send_command('text CorrelationText create Corr. Mode: Neutral')
  1584.         send_command('text CorrelationText pos '..TextBoxX..' '..TextBoxY..'')
  1585.         send_command('text CorrelationText size '..TextSize..'')
  1586.         TextBoxY = TextBoxY + (TextSize + 6)
  1587.         send_command('text PetModeText create Pet Mode: PetOnly')
  1588.         send_command('text PetModeText pos '..TextBoxX..' '..TextBoxY..'')
  1589.         send_command('text PetModeText size '..TextSize..'')
  1590.         TextBoxY = TextBoxY + (TextSize + 6)
  1591.         send_command('text JugPetText create Jug Mode: Meaty Broth')
  1592.         send_command('text JugPetText pos '..TextBoxX..' '..TextBoxY..'')
  1593.         send_command('text JugPetText size '..TextSize..'')
  1594.     end
  1595. end
  1596.  
  1597. function update_display_mode_info()
  1598.     if DisplayModeInfo == 'true' then
  1599.         send_command('text AccuracyText text Acc. Mode: '..state.OffenseMode.value..'')
  1600.         send_command('text CorrelationText text Corr. Mode: '..state.CorrelationMode.value..'')
  1601.         send_command('text PetModeText text Pet Mode: '..state.PetMode.value..'')
  1602.         send_command('text JugPetText text Jug Mode: '..state.JugMode.value..'')
  1603.     end
  1604. end
  1605.  
  1606. function get_melee_groups()
  1607.     classes.CustomMeleeGroups:clear()
  1608.  
  1609.     if buffactive['Aftermath: Lv.3'] then
  1610.         classes.CustomMeleeGroups:append('Aftermath')
  1611.     end
  1612. end
  1613.  
  1614. function get_combat_form()
  1615.     if player.sub_job == 'NIN' or player.sub_job == 'DNC' then
  1616.         state.CombatForm:set('DW')
  1617.     else
  1618.         state.CombatForm:reset()
  1619.     end
  1620. end
  1621. function select_default_macro_book()
  1622. -- Default macro set/book
  1623.     if player.sub_job == 'DNC' then
  1624.         set_macro_page(1, 6)
  1625.     elseif player.sub_job == 'NIN' then
  1626.         set_macro_page(2, 6)
  1627.     else
  1628.     set_macro_page(3, 6)
  1629.     end
  1630. end
Add Comment
Please, Sign In to add comment