Guest User

FFXI BST Mote Lua 04/2021

a guest
Apr 23rd, 2021
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 114.98 KB | None | 0 0
  1. ---------------------------------------
  2. -- Last Revised: February 23rd, 2021 --
  3. ---------------------------------------
  4. -- Added Gleti's Armor Set
  5. ---------------------------------------------
  6. -- Gearswap Commands Specific to this File --
  7. ---------------------------------------------
  8. -- Universal Ready Move Commands -
  9. -- //gs c Ready one
  10. -- //gs c Ready two
  11. -- //gs c Ready three
  12. -- //gs c Ready four
  13. --
  14. -- alt+F8 cycles through designated Jug Pets
  15. -- ctrl+F8 cycles backwards through designated Jug Pets
  16. -- alt+F11 toggles Monster Correlation between Neutral and Favorable
  17. -- alt+= switches between Pet-Only (Axe Swaps) and Master (no Axe Swap) modes
  18. -- ctrl+= switches between Reward Modes (Theta / Roborant)
  19. -- alt+` can swap in the usage of Chaac Belt for Treasure Hunter on common subjob abilities.
  20. -- ctrl+F11 cycles between Magical Defense Modes
  21. --
  22. -------------------------------
  23. -- General Gearswap Commands --
  24. -------------------------------
  25. -- F9 cycles Accuracy modes
  26. -- ctrl+F9 cycles Hybrid 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. -- Initialization function that defines sets and variables to be used.
  39. -------------------------------------------------------------------------------------------------------------------
  40.  
  41. -- IMPORTANT: Make sure to also get the Mote-Include.lua file (and its supplementary files) to go with this.
  42.  
  43. -- Initialization function for this job file.
  44. function get_sets()
  45.     mote_include_version = 2
  46.  
  47.     -- Load and initialize the include file.
  48.     include('Mote-Include.lua')
  49. end
  50.  
  51. function job_setup()
  52.     -- Display and Random Lockstyle Generator options
  53.     DisplayPetBuffTimers = 'false'
  54.     DisplayModeInfo = 'false'
  55.     RandomLockstyleGenerator = 'false'
  56.  
  57.     PetName = 'None';PetJob = 'None';PetInfo = 'None';ReadyMoveOne = 'None';ReadyMoveTwo = 'None';ReadyMoveThree = 'None';ReadyMoveFour = 'None'
  58.     pet_info_update()
  59.  
  60.     -- Input Pet:TP Bonus values for Skirmish Axes used during Pet Buffs
  61.     TP_Bonus_Main = 200
  62.     TP_Bonus_Sub = 200
  63.  
  64.     -- 1200 Job Point Gift Bonus (Set equal to 0 if below 1200 Job Points)
  65.     TP_Gift_Bonus = 40
  66.  
  67.     -- (Adjust Run Wild Duration based on # of Job Points)
  68.     RunWildDuration = 340;RunWildIcon = 'abilities/00121.png'
  69.     RewardRegenIcon = 'spells/00023.png'
  70.     SpurIcon = 'abilities/00037.png'
  71.     BubbleCurtainDuration = 180;BubbleCurtainIcon = 'spells/00048.png'
  72.     ScissorGuardIcon = 'spells/00043.png'
  73.     SecretionIcon = 'spells/00053.png'
  74.     RageIcon = 'abilities/00002.png'
  75.     RhinoGuardIcon = 'spells/00053.png'
  76.     ZealousSnortIcon = 'spells/00057.png'
  77.  
  78.     -- Display Mode Info as on-screen Text
  79.     TextBoxX = 1075
  80.     TextBoxY = 47
  81.     TextSize = 10
  82.  
  83.     -- List of Equipment Sets created for Random Lockstyle Generator
  84.     -- (If you want to have the same Lockstyle every time, reduce the list to a single Equipset #)
  85.     random_lockstyle_list = {1,2,3,4,5,6,7,8,9,10,11,12,13}
  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.     if DisplayModeInfo == 'true' then
  91.         DisplayTrue = 1
  92.     end
  93.  
  94.     get_combat_form()
  95.     get_melee_groups()
  96. end
  97.  
  98. function user_setup()
  99.     state.OffenseMode:options('Normal', 'MedAcc', 'HighAcc', 'MaxAcc')
  100.     state.WeaponskillMode:options('Normal', 'WSMedAcc', 'WSHighAcc')
  101.     state.HybridMode:options('Normal', 'SubtleBlow')
  102.     state.CastingMode:options('Normal')
  103.     state.IdleMode:options('Normal', 'Reraise', 'Refresh')
  104.     state.RestingMode:options('Normal')
  105.     state.PhysicalDefenseMode:options('PDT', 'PetPDT')
  106.     state.MagicalDefenseMode:options('MDT', 'PetMDT')
  107.  
  108.     -- Set up Jug Pet cycling and keybind Alt+F8/Ctrl+F8
  109.     -- INPUT PREFERRED JUG PETS HERE
  110.     state.JugMode = M{['description']='Jug Mode', 'Dire Broth', 'Tant. Broth', 'Lyrical Broth'}
  111.     send_command('bind !f8 gs c cycle JugMode')
  112.     send_command('bind ^f8 gs c cycleback JugMode')
  113.  
  114.     -- Set up Monster Correlation Modes and keybind Alt+F11
  115.     state.CorrelationMode = M{['description']='Correlation Mode', 'Neutral', 'Favorable'}
  116.     send_command('bind !f11 gs c cycle CorrelationMode')
  117.  
  118.     -- Set up Axe Swapping Modes and keybind alt+=
  119.     state.AxeMode = M{['description']='Axe Mode', 'NoSwaps', 'PetOnly'}
  120.     send_command('bind != gs c cycle AxeMode')
  121.  
  122.     -- Set up Reward Modes and keybind ctrl+=
  123.     state.RewardMode = M{['description']='Reward Mode', 'Theta', 'Roborant'}
  124.     send_command('bind ^= gs c cycle RewardMode')
  125.  
  126.     -- Keybind Ctrl+F11 to cycle Magical Defense Modes
  127.     send_command('bind ^f11 gs c cycle MagicalDefenseMode')
  128.  
  129.     -- Set up Treasure Modes and keybind Alt+`
  130.     state.TreasureMode = M{['description']='Treasure Mode', 'Tag', 'Normal'}
  131.     send_command('bind !` gs c cycle TreasureMode')
  132.  
  133.     -- 'Out of Range' distance; Melee WSs will auto-cancel
  134.     target_distance = 8
  135.  
  136. -- Categorized list of Ready moves
  137. physical_ready_moves = S{'Foot Kick','Whirl Claws','Sheep Charge','Lamb Chop','Head Butt','Wild Oats',
  138.     'Leaf Dagger','Claw Cyclone','Razor Fang','Crossthrash','Nimble Snap','Cyclotail','Rhino Attack',
  139.     'Power Attack','Mandibular Bite','Big Scissors','Grapple','Spinning Top','Double Claw','Frogkick',
  140.     'Blockhead','Brain Crush','Tail Blow','Scythe Tail','Ripper Fang','Chomp Rush','Needleshot',
  141.     'Recoil Dive','Sudden Lunge','Spiral Spin','Wing Slap','Beak Lunge','Suction','Back Heel',
  142.     'Fantod','Tortoise Stomp','Sensilla Blades','Tegmina Buffet','Pentapeck','Sweeping Gouge',
  143.     'Somersault','Tickling Tendrils','Pecking Flurry','Sickle Slash','Disembowel','Extirpating Salvo',
  144.     'Mega Scissors','Rhinowrecker','Hoof Volley','Fluid Toss','Fluid Spread'}
  145.  
  146. magic_atk_ready_moves = S{'Dust Cloud','Cursed Sphere','Venom','Toxic Spit','Bubble Shower','Drainkiss',
  147.     'Silence Gas','Dark Spore','Fireball','Plague Breath','Snow Cloud','Charged Whisker','Corrosive Ooze',
  148.     'Aqua Breath','Stink Bomb','Nectarous Deluge','Nepenthic Plunge','Pestilent Plume','Foul Waters',
  149.     'Acid Spray','Infected Leech','Gloom Spray','Venom Shower'}
  150.  
  151. magic_acc_ready_moves = S{'Sheep Song','Scream','Dream Flower','Roar','Predatory Glare','Gloeosuccus',
  152.     'Palsy Pollen','Soporific','Geist Wall','Toxic Spit','Numbing Noise','Spoil','Hi-Freq Field',
  153.     'Sandpit','Sandblast','Venom Spray','Filamented Hold','Queasyshroom','Numbshroom','Spore','Shakeshroom',
  154.     'Infrasonics','Chaotic Eye','Blaster','Purulent Ooze','Intimidate','Noisome Powder','Acid Mist',
  155.     'Choke Breath','Jettatura','Nihility Song','Molting Plumage','Swooping Frenzy','Spider Web'}
  156.  
  157. multi_hit_ready_moves = S{'Pentapeck','Tickling Tendrils','Sweeping Gouge','Chomp Rush','Wing Slap',
  158.     'Pecking Flurry'}
  159.  
  160. tp_based_ready_moves = S{'Foot Kick','Dust Cloud','Snow Cloud','Sheep Song','Sheep Charge','Lamb Chop',
  161.     'Head Butt','Scream','Dream Flower','Wild Oats','Leaf Dagger','Claw Cyclone','Razor Fang','Roar',
  162.     'Gloeosuccus','Palsy Pollen','Soporific','Cursed Sphere','Somersault','Geist Wall','Numbing Noise',
  163.     'Frogkick','Nimble Snap','Cyclotail','Spoil','Rhino Attack','Hi-Freq Field','Sandpit','Sandblast',
  164.     'Mandibular Bite','Metallic Body','Bubble Shower','Grapple','Spinning Top','Double Claw','Spore',
  165.     'Filamented Hold','Blockhead','Fireball','Tail Blow','Plague Breath','Brain Crush','Infrasonics',
  166.     'Needleshot','Chaotic Eye','Blaster','Ripper Fang','Intimidate','Recoil Dive','Water Wall',
  167.     'Sudden Lunge','Noisome Powder','Wing Slap','Beak Lunge','Suction','Drainkiss','Acid Mist',
  168.     'TP Drainkiss','Back Heel','Jettatura','Choke Breath','Fantod','Charged Whisker','Purulent Ooze',
  169.     'Corrosive Ooze','Tortoise Stomp','Aqua Breath','Sensilla Blades','Tegmina Buffet','Sweeping Gouge',
  170.     'Tickling Tendrils','Pecking Flurry','Pestilent Plume','Foul Waters','Spider Web','Gloom Spray',
  171.     'Disembowel','Extirpating Salvo','Rhinowrecker','Venom Shower','Fluid Toss','Fluid Spread','Digest'}
  172.  
  173. -- List of Pet Buffs and Ready moves exclusively modified by Pet TP Bonus gear.
  174. pet_buff_moves = S{'Wild Carrot','Bubble Curtain','Scissor Guard','Secretion','Rage','Harden Shell',
  175.     'TP Drainkiss','Fantod','Rhino Guard','Zealous Snort','Frenzied Rage','Digest'}
  176.  
  177. -- List of Jug Modes that will cancel if Call Beast is used (Bestial Loyalty-only jug pets, HQs generally).
  178. call_beast_cancel = S{'Vis. Broth','Ferm. Broth','Bubbly Broth','Windy Greens','Bug-Ridden Broth','Tant. Broth',
  179.     'Glazed Broth','Slimy Webbing','Deepwater Broth','Venomous Broth','Heavenly Broth'}
  180.  
  181. -- List of abilities to reference for applying Treasure Hunter gear.
  182. abilities_to_check = S{'Feral Howl','Quickstep','Box Step','Stutter Step','Desperate Flourish',
  183.     'Violent Flourish','Animated Flourish','Provoke','Dia','Dia II','Flash','Bio','Bio II',
  184.     'Sleep','Sleep II','Drain','Aspir','Dispel','Stun','Steal','Mug'}
  185.  
  186. enmity_plus_moves = S{'Provoke','Berserk','Warcry','Aggressor','Holy Circle','Sentinel','Last Resort',
  187.     'Souleater','Vallation','Swordplay'}
  188.  
  189. -- Random Lockstyle generator.
  190.     if RandomLockstyleGenerator == 'true' then
  191.         local randomLockstyle = random_lockstyle_list[math.random(1, #random_lockstyle_list)]
  192.         send_command('@wait 5;input /lockstyleset '.. randomLockstyle)
  193.     end
  194.  
  195.     display_mode_info()
  196. end
  197.  
  198. function file_unload()
  199.     if binds_on_unload then
  200.         binds_on_unload()
  201.     end
  202.  
  203.     -- Unbinds the Reward, Correlation, JugMode, AxeMode and Treasure hotkeys.
  204.     send_command('unbind !=')
  205.     send_command('unbind ^=')
  206.     send_command('unbind @=')
  207.     send_command('unbind !f8')
  208.     send_command('unbind ^f8')
  209.     send_command('unbind @f8')
  210.     send_command('unbind ^f11')
  211.  
  212.     -- Removes any Text Info Boxes
  213.     send_command('text JugPetText delete')
  214.     send_command('text CorrelationText delete')
  215.     send_command('text AxeModeText delete')
  216.     send_command('text AccuracyText delete')
  217. end
  218.  
  219. -- BST gearsets
  220. function init_gear_sets()
  221.     -------------------------------------------------
  222.     -- AUGMENTED GEAR AND GENERAL GEAR DEFINITIONS --
  223.     -------------------------------------------------
  224.  
  225.     Pet_Idle_AxeMain = "Pangu"
  226.     Pet_Idle_AxeSub = "Izizoeksi"
  227.     Pet_PDT_AxeMain = "Pangu"
  228.     Pet_PDT_AxeSub = {name="Kumbhakarna", augments={'Pet: DEF+20','Pet: Damage taken -4%','Pet: STR+14 Pet: DEX+14 Pet: VIT+14',}}
  229.     Pet_MDT_AxeMain = "Pangu"
  230.     Pet_MDT_AxeSub = "Izizoeksi"
  231.     Pet_TP_AxeMain = "Skullrender"
  232.     Pet_TP_AxeSub = "Skullrender"
  233.     Pet_Regen_AxeMain = "Buramgh +1"
  234.     Pet_Regen_AxeSub = {name="Kumbhakarna", augments={'Pet: Mag. Evasion+20','Pet: "Regen"+3','MND+17',}}
  235.  
  236.     Ready_Atk_Axe = "Aymur"
  237.     Ready_Atk_Axe2 = "Agwu's Axe"
  238.     Ready_Atk_TPBonus_Axe = "Aymur"
  239.     Ready_Atk_TPBonus_Axe2 = {name="Kumbhakarna", augments={'Pet: Attack+25 Pet: Rng.Atk.+25','Pet: "Dbl.Atk."+4 Pet: Crit.hit rate +4','Pet: TP Bonus+200',}}
  240.  
  241.     Ready_Acc_Axe = "Arktoi"
  242.     Ready_Acc_Axe2 = "Agwu's Axe"
  243.  
  244.     Ready_MAB_Axe = {name="Digirbalag", augments={'Pet: Mag. Acc.+21','Pet: "Mag.Atk.Bns."+30','INT+2 MND+2 CHR+2',}}
  245.     Ready_MAB_Axe2 = "Deacon Tabar"
  246.     Ready_MAB_TPBonus_Axe = {name="Kumbhakarna", augments={'Pet: "Mag.Atk.Bns."+25','Pet: Phys. dmg. taken -4%','Pet: TP Bonus+200',}}
  247.     Ready_MAB_TPBonus_Axe2 = {name="Kumbhakarna", augments={'Pet: "Mag.Atk.Bns."+22','Pet: Phys. dmg. taken -5%','Pet: TP Bonus+200',}}
  248.  
  249.     Ready_MAcc_Axe = {name="Kumbhakarna", augments={'Pet: Mag. Acc.+20','"Cure" potency +15%','Pet: TP Bonus+180',}}
  250.     Ready_MAcc_Axe2 = "Agwu's Axe"
  251.  
  252.     Reward_Axe = "Farsha"
  253.     Reward_Axe2 = {name="Kumbhakarna", augments={'Pet: Mag. Evasion+20','Pet: "Regen"+3','MND+17',}}
  254.     Reward_back = {name="Artio's Mantle", augments={'MND+20','Mag. Acc+20 /Mag. Dmg.+20','MND+10','Weapon skill damage +10%',}}
  255.  
  256.     Pet_PDT_head = "Anwig Salade"
  257.     Pet_PDT_body = "Totemic Jackcoat +3"
  258.     Pet_PDT_hands = "Gleti's Gauntlets"
  259.     Pet_PDT_legs = "Tali'ah Seraweels +2"
  260.     Pet_PDT_feet = "Ankusa Gaiters +3"
  261.     Pet_PDT_back = {name="Artio's Mantle", augments={'VIT+20','Eva.+20 /Mag. Eva.+20','Evasion+10','Pet: "Regen"+10','System: 1 ID: 1246 Val: 4',}}
  262.  
  263.     Pet_MDT_head = "Anwig Salade"
  264.     Pet_MDT_body = "Totemic Jackcoat +3"
  265.     Pet_MDT_hands = "Gleti's Gauntlets"
  266.     Pet_MDT_legs = "Tali'ah Seraweels +2"
  267.     Pet_MDT_feet = {name="Taeon Boots", augments={'Pet: Mag. Evasion+22','Pet: "Regen"+3','Pet: Damage taken -4%',}}
  268.     Pet_MDT_back = {name="Artio's Mantle", augments={'INT+20','Eva.+20 /Mag. Eva.+20','Pet: "Regen"+10','System: 1 ID: 1247 Val: 4',}}
  269.  
  270.     Pet_DT_head = "Anwig Salade"
  271.     Pet_DT_body = {name="Acro Surcoat", augments={'Pet: DEF+22','Pet: "Regen"+3','Pet: Damage taken -4%',}}
  272.     Pet_DT_hands = {name="Acro Gauntlets", augments={'Pet: DEF+22','Pet: "Regen"+3','Pet: Damage taken -4%',}}
  273.     Pet_DT_legs = {name="Acro Breeches", augments={'Pet: DEF+25','Pet: "Regen"+3','Pet: Damage taken -4%',}}
  274.     Pet_DT_feet = {name="Acro Leggings", augments={'Pet: DEF+25','Pet: "Regen"+3','Pet: Damage taken -4%',}}
  275.  
  276.     Pet_Regen_head = {name="Valorous Mask", augments={'Pet: "Regen"+5','Pet: Accuracy+13 Pet: Rng. Acc.+13',}}
  277.     Pet_Regen_body = {name="Valorous Mail", augments={'Pet: Accuracy+27 Pet: Rng. Acc.+27','Pet: "Regen"+5','Pet: Attack+4 Pet: Rng.Atk.+4',}}
  278.     Pet_Regen_hands = {name="Valorous Mitts", augments={'Pet: Accuracy+29 Pet: Rng. Acc.+29','Pet: "Regen"+5','Pet: DEX+7','Pet: Attack+15 Pet: Rng.Atk.+15',}}
  279.     Pet_Regen_legs = {name="Valorous Hose", augments={'Pet: "Regen"+5','Pet: Attack+1 Pet: Rng.Atk.+1',}}
  280.     Pet_Regen_feet = "Emicho Gambieras +1"
  281.     Pet_Regen_back = {name="Artio's Mantle", augments={'Pet: M.Acc.+20 Pet: M.Dmg.+20','Eva.+20 /Mag. Eva.+20','Pet: Mag. Acc.+10','Pet: "Regen"+10','Pet: "Regen"+5',}}
  282.  
  283.     Ready_Atk_head = "Emicho Coronet +1"
  284.     Ready_Atk_body = {name="Valorous Mail", augments={'Pet: Attack+30 Pet: Rng.Atk.+30','Pet: STR+13',}}
  285.     Ready_Atk_hands = "Emicho Gauntlets +1"
  286.     Ready_Atk_legs = "Totemic Trousers +3"
  287.     Ready_Atk_feet = "Gleti's Boots"
  288.     Ready_Atk_back = {name="Artio's Mantle", augments={'Pet: Acc.+20 Pet: R.Acc.+20 Pet: Atk.+20 Pet: R.Atk.+20','Eva.+20 /Mag. Eva.+20','Pet: Attack+10 Pet: Rng.Atk.+10','Pet: Haste+10','System: 1 ID: 1246 Val: 4',}}
  289.  
  290.     Ready_Acc_head = "Gleti's Mask"
  291.     Ready_Acc_body = "Heyoka Harness +1"
  292.     Ready_Acc_hands = "Gleti's Gauntlets"
  293.     Ready_Acc_legs = "Heyoka Subligar +1"
  294.     Ready_Acc_feet = "Gleti's Boots"
  295.     Ready_Acc_back = {name="Artio's Mantle", augments={'Pet: Acc.+20 Pet: R.Acc.+20 Pet: Atk.+20 Pet: R.Atk.+20','Eva.+20 /Mag. Eva.+20','Pet: Accuracy+10 Pet: Rng. Acc.+10','Pet: Haste+10','System: 1 ID: 1246 Val: 4',}}
  296.  
  297.     Ready_MAB_head = {name="Valorous Mask", augments={'Pet: "Mag.Atk.Bns."+30','Pet: "Store TP"+2','Pet: INT+8','Pet: Attack+6 Pet: Rng.Atk.+6',}}
  298.     Ready_MAB_body = "Udug Jacket"
  299.     Ready_MAB_hands = {name="Valorous Mitts", augments={'Pet: "Mag.Atk.Bns."+29','Pet: "Store TP"+9','Pet: INT+12','Pet: Attack+4 Pet: Rng.Atk.+4',}}
  300.     Ready_MAB_legs = {name="Valorous Hose", augments={'Pet: "Mag.Atk.Bns."+30','Pet: INT+10','Pet: Accuracy+7 Pet: Rng. Acc.+7','Pet: Attack+6 Pet: Rng.Atk.+6',}}
  301.     Ready_MAB_feet = {name="Valorous Greaves", augments={'Pet: "Mag.Atk.Bns."+30','Pet: INT+13','Pet: Accuracy+9 Pet: Rng. Acc.+9','Pet: Attack+15 Pet: Rng.Atk.+15',}}
  302.  
  303.     Ready_MAcc_head = "Gleti's Mask"
  304.     Ready_MAcc_body = "Gleti's Cuirass"
  305.     Ready_MAcc_hands = "Gleti's Gauntlets"
  306.     Ready_MAcc_legs = "Gleti's Greaves"
  307.     Ready_MAcc_feet = "Gleti's Boots"
  308.     Ready_MAcc_back = {name="Artio's Mantle", augments={'Pet: M.Acc.+20 Pet: M.Dmg.+20','Eva.+20 /Mag. Eva.+20','Pet: Mag. Acc.+10','Pet: "Regen"+10','Pet: "Regen"+5',}}
  309.  
  310.     Ready_DA_Axe = "Skullrender"
  311.     Ready_DA_Axe2 = "Skullrender"
  312.     Ready_DA_head = "Emicho Coronet +1"
  313.     Ready_DA_body = {name="Valorous Mail", augments={'Pet: Mag. Acc.+27','Pet: "Dbl. Atk."+5','Pet: Accuracy+3 Pet: Rng. Acc.+3','Pet: Attack+15 Pet: Rng.Atk.+15',}}
  314.     Ready_DA_hands = "Emicho Gauntlets +1"
  315.     Ready_DA_legs = "Emicho Hose +1"
  316.     Ready_DA_feet = {name="Valorous Greaves", augments={'Pet: Mag. Acc.+20','Pet: "Dbl. Atk."+5','Pet: STR+9','Pet: Accuracy+13 Pet: Rng. Acc.+13','Pet: Attack+14 Pet: Rng.Atk.+14',}}
  317.  
  318.     Pet_Melee_head = "Emicho Coronet +1"
  319.     Pet_Melee_body = {name="Valorous Mail", augments={'Pet: Mag. Acc.+27','Pet: "Dbl. Atk."+5','Pet: Accuracy+3 Pet: Rng. Acc.+3','Pet: Attack+15 Pet: Rng.Atk.+15',}}
  320.     Pet_Melee_hands = "Emicho Gauntlets +1"
  321.     Pet_Melee_legs = "Ankusa Trousers +3"
  322.     Pet_Melee_feet = {name="Taeon Boots", augments={'Pet: Attack+23 Pet: Rng.Atk.+23','Pet: "Dbl. Atk."+5','Pet: Damage taken -4%',}}
  323.  
  324.     Hybrid_head = {name="Valorous Mask", augments={'Pet: "Regen"+5','Pet: Accuracy+13 Pet: Rng. Acc.+13',}}
  325.     Hybrid_body = Pet_PDT_body
  326.     Hybrid_hands = Pet_PDT_hands
  327.     Hybrid_legs = {name="Taeon Tights", augments={'Accuracy+20 Attack+20','"Triple Atk."+2','Pet: Damage taken -4%',}}
  328.     Hybrid_feet = {name="Taeon Boots", augments={'Accuracy+25','"Triple Atk."+2','Pet: Damage taken -4%',}}
  329.  
  330.     DW_head = {name="Taeon Chapeau", augments={'Accuracy+19 Attack+19','"Dual Wield"+5','STR+3 VIT+3',}}
  331.     DW_body = {name="Taeon Tabard", augments={'Accuracy+20 Attack+20','"Dual Wield"+5','Crit. hit damage +2%',}}
  332.     DW_hands = "Emicho Gauntlets +1"
  333.     DW_legs = {name="Taeon Tights", augments={'Accuracy+22','"Dual Wield"+5','Crit. hit damage +2%',}}
  334.     DW_feet = {name="Taeon Boots", augments={'Accuracy+23','"Dual Wield"+5','Crit. hit damage +2%',}}
  335.     DW_back = {name="Artio's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','Accuracy+10','"Dual Wield"+10','Phys. dmg. taken-10%',}}
  336.  
  337.     MAB_head = {name="Valorous Mask", augments={'AGI+5','"Mag.Atk.Bns."+25','Haste+2','Accuracy+19 Attack+19','Mag. Acc.+19 "Mag.Atk.Bns."+19',}}
  338.     MAB_body = "Sacro Breastplate"
  339.     MAB_hands = "Leyline Gloves"
  340.     MAB_legs = {name="Valorous Hose", augments={'"Mag.Atk.Bns."+30','Accuracy+10','Crit.hit rate+2','Mag. Acc.+20 "Mag.Atk.Bns."+20',}}
  341.     MAB_feet = {name="Valorous Greaves", augments={'CHR+8','"Mag.Atk.Bns."+28','"Refresh"+2','Accuracy+2 Attack+2','Mag. Acc.+14 "Mag.Atk.Bns."+14',}}
  342.  
  343.     FC_head = {name="Valorous Mask", augments={'"Resist Silence"+2','MND+3','"Fast Cast"+7','Mag. Acc.+9 "Mag.Atk.Bns."+9',}}
  344.     FC_body = "Sacro Breastplate"
  345.     FC_hands = "Leyline Gloves"
  346.     FC_legs = {name="Valorous Hose", augments={'Crit.hit rate+2','"Dual Wield"+1','"Fast Cast"+7',}}
  347.     FC_feet = {name="Valorous Greaves", augments={'"Mag.Atk.Bns."+17','AGI+7','"Fast Cast"+7','Accuracy+14 Attack+14',}}
  348.     FC_back = {name="Artio's Mantle", augments={'INT+20','Eva.+20 /Mag. Eva.+20','Mag. Evasion+10','"Fast Cast"+10','Spell interruption rate down-10%',}}
  349.  
  350.     MAcc_head = "Malignance Chapeau"
  351.     MAcc_body = "Malignance Tabard"
  352.     MAcc_hands = "Malignance Gloves"
  353.     MAcc_legs = "Malignance Tights"
  354.     MAcc_feet = "Malignance Boots"
  355.     MAcc_back = {name="Artio's Mantle", augments={'INT+20','Mag. Acc+20 /Mag. Dmg.+20','Mag. Acc.+10','Enmity+10','Phys. dmg. taken-10%',}}
  356.  
  357.     PDT_back = {name="Artio's Mantle", augments={'VIT+20','Eva.+20 /Mag. Eva.+20','VIT+10','Enmity-10','Phys. dmg. taken-10%',}}
  358.  
  359.     MEva_head = "Malignance Chapeau"
  360.     MEva_body = "Malignance Tabard"
  361.     MEva_hands = "Malignance Gloves"
  362.     MEva_legs = "Malignance Tights"
  363.     MEva_feet = "Malignance Boots"
  364.     MEva_back = {name="Artio's Mantle", augments={'MND+20','Eva.+20 /Mag. Eva.+20','Mag. Evasion+10','Enmity-10','Occ. inc. resist. to stat. ailments+10',}}
  365.  
  366.     CB_head = {name="Acro Helm", augments={'Pet: Mag. Acc.+25','"Call Beast" ability delay -5',}}
  367.     CB_body = "Mirke Wardecors"
  368.     CB_hands = "Ankusa Gloves +3"
  369.     CB_legs = {name="Acro Breeches", augments={'Pet: Mag. Acc.+25','"Call Beast" ability delay -5',}}
  370.     CB_feet = "Armada Sollerets"
  371.  
  372.     Cure_Potency_axe = {name="Kumbhakarna", augments={'Pet: Mag. Acc.+20','"Cure" potency +15%','Pet: TP Bonus+180',}}
  373.     Cure_Potency_head = "Emicho Coronet +1"
  374.     Cure_Potency_body = "Jumalik Mail"
  375.     Cure_Potency_hands = "Buremte Gloves"
  376.     Cure_Potency_legs = "Totemic Trousers +3"
  377.     Cure_Potency_feet = {name="Taeon Boots", augments={'"Cure" potency +5%',}}
  378.     Cure_Potency_back = {name="Artio's Mantle", augments={'MND+20','Eva.+20 /Mag. Eva.+20','MND+10','"Cure" potency +10%','Spell interruption rate down-10%',}}
  379.  
  380.     Waltz_back = {name="Artio's Mantle", augments={'CHR+20','Mag. Acc+20 /Mag. Dmg.+20','CHR+10','Weapon skill damage +10%',}}
  381.     STP_back = {name="Artio's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','Accuracy+10','"Store TP"+10','Phys. dmg. taken-10%',}}
  382.     STR_DA_back = {name="Artio's Mantle", augments={'STR+20','Accuracy+20 Attack+20','STR+10','"Dbl.Atk."+10','Phys. dmg. taken-10%',}}
  383.     STR_WS_back = {name="Artio's Mantle", augments={'STR+20','Accuracy+20 Attack+20','STR+10','Weapon skill damage +10%','Phys. dmg. taken-10%',}}
  384.     Crit_back = {name="Artio's Mantle", augments={'STR+20','Accuracy+20 Attack+20','STR+10','Crit.hit rate+10','Phys. dmg. taken-10%',}}
  385.     Onslaught_back = {name="Artio's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','DEX+10','Weapon skill damage +10%','Phys. dmg. taken-10%',}}
  386.     Primal_back = {name="Artio's Mantle", augments={'CHR+20','Mag. Acc+20 /Mag. Dmg.+20','CHR+10','Weapon skill damage +10%',}}
  387.     Cloud_back = {name="Artio's Mantle", augments={'MND+20','Mag. Acc+20 /Mag. Dmg.+20','MND+10','Weapon skill damage +10%',}}
  388.  
  389.     STP_head = {name="Valorous Mask", augments={'Attack+27','"Store TP"+8','Accuracy+1',}}
  390.     STP_feet = {name="Valorous Greaves", augments={'Accuracy+23 Attack+23','"Store TP"+8','AGI+4',}}
  391.  
  392.     Regain_head = {name="Valorous Mask", augments={'"Cure" spellcasting time -7%','MND+8','Damage taken-4%','Mag. Acc.+15 "Mag.Atk.Bns."+15',}}
  393.     Regain_body = "Gleti's Cuirass"
  394.     Regain_hands = "Gleti's Gauntlets"
  395.     Regain_legs = "Gleti's Greaves"
  396.     Regain_feet = "Gleti's Boots"
  397.  
  398.     TH_legs = {name="Valorous Hose", augments={'STR+3','INT+5','"Treasure Hunter"+2','Mag. Acc.+18 "Mag.Atk.Bns."+18',}}
  399.  
  400.     Enmity_plus_feet = {name="Acro Leggings", augments={'Pet: Mag. Acc.+23','Enmity+10',}}
  401.     Enmity_plus_back = {name="Artio's Mantle", augments={'INT+20','Mag. Acc+20 /Mag. Dmg.+20','Mag. Acc.+10','Enmity+10','Phys. dmg. taken-10%',}}
  402.  
  403.     sets.Enmity = {ammo="Paeapua",
  404.         head="Halitus Helm",neck="Unmoving Collar +1",ear1="Trux Earring",ear2="Cryptic Earring",
  405.         body="Emet Harness +1",hands="Macabre Gauntlets +1",ring1="Pernicious Ring",ring2="Eihwaz Ring",
  406.         back=Enmity_plus_back,waist="Trance Belt",legs="Zoar Subligar +1",
  407.         feet=Enmity_plus_feet}
  408.     sets.EnmityNE = set_combine(sets.Enmity, {main="Freydis",sub="Evalach +1"})
  409.     sets.EnmityNEDW = set_combine(sets.Enmity, {main="Freydis",sub="Evalach +1"})
  410.  
  411.     ---------------------
  412.     -- JA PRECAST SETS --
  413.     ---------------------
  414.     -- Most gearsets are divided into 3 categories:
  415.     -- 1. Default - No Axe swaps involved.
  416.     -- 2. NE (Not engaged) - Axe/Shield swap included, for use with Pet Only mode.
  417.     -- 3. NEDW (Not engaged; Dual-wield) - Axe swaps included, for use with Pet Only mode.
  418.  
  419.     sets.precast.JA.Familiar = {legs="Ankusa Trousers +3"}
  420.     sets.precast.JA['Call Beast'] = {head=CB_head,
  421.         body=CB_body,hands=CB_hands,
  422.         legs=CB_legs,feet=CB_feet}
  423.     sets.precast.JA['Bestial Loyalty'] = sets.precast.JA['Call Beast']
  424.  
  425.     sets.precast.JA.Tame = {head="Totemic Helm +3",ear1="Tamer's Earring",legs="Stout Kecks"}
  426.  
  427.     sets.precast.JA.Spur = {back="Artio's Mantle",feet="Nukumi Ocreae +1"}
  428.     sets.precast.JA.SpurNE = set_combine(sets.precast.JA.Spur, {main="Skullrender"})
  429.     sets.precast.JA.SpurNEDW = set_combine(sets.precast.JA.Spur, {main="Skullrender",sub="Skullrender"})
  430.  
  431.     sets.precast.JA['Feral Howl'] = {ammo="Pemphredo Tathlum",
  432.         head=MAcc_head,neck="Beastmaster Collar +2",ear1="Hermetic Earring",ear2="Dignitary's Earring",
  433.         body="Ankusa Jackcoat +3",hands=MAcc_hands,ring1="Rahab Ring",ring2="Sangoma Ring",
  434.         back=MAcc_back,waist="Eschan Stone",legs=MAcc_legs,feet=MAcc_feet}
  435.     --sets.precast.JA['Feral Howl'] = set_combine(sets.Enmity, {body="Ankusa Jackcoat +3"})
  436.  
  437.     sets.precast.JA['Killer Instinct'] = set_combine(sets.Enmity, {head="Ankusa Helm +3"})
  438.  
  439.     sets.precast.JA.Reward = {
  440.         head="Stout Bonnet",neck="Aife's Medal",ear1="Lifestorm Earring",ear2="Neptune's Pearl",
  441.         body="Totemic Jackcoat +3",hands="Malignance Gloves",ring1="Leviathan Ring +1",ring2="Leviathan Ring +1",
  442.         back=Reward_back,waist="Engraved Belt",legs="Ankusa Trousers +3",feet="Ankusa Gaiters +3"}
  443.     sets.precast.JA.RewardNE = set_combine(sets.precast.JA.Reward, {main=Reward_Axe,sub="Matamata Shield +1"})
  444.     sets.precast.JA.RewardNEDW = set_combine(sets.precast.JA.RewardNE, {sub=Reward_Axe2})
  445.  
  446.     sets.precast.JA.Charm = {ammo="Voluspa Tathlum",
  447.         head="Totemic Helm +3",neck="Unmoving Collar +1",ear1="Enchanter's Earring",ear2="Enchanter Earring +1",
  448.         body="Ankusa Jackcoat +3",hands="Ankusa Gloves +3",ring1="Dawnsoul Ring",ring2="Dawnsoul Ring",
  449.         back=Primal_back,waist="Aristo Belt",legs="Ankusa Trousers +3",feet="Ankusa Gaiters +3"}
  450.     sets.precast.JA.CharmNE = set_combine(sets.precast.JA.Charm, {main="Buramgh +1",sub="Thuellaic Ecu +1"})
  451.     sets.precast.JA.CharmNEDW = set_combine(sets.precast.JA.CharmNE, {sub="Buramgh"})
  452.  
  453.     ---------------------------
  454.     -- PET SIC & READY MOVES --
  455.     ---------------------------
  456.  
  457.     sets.ReadyRecast = {legs="Gleti's Greaves"}
  458.     sets.midcast.Pet.TPBonus = {hands="Nukumi Manoplas +1"}
  459.     sets.midcast.Pet.Neutral = {head=Ready_Atk_head}
  460.     sets.midcast.Pet.Favorable = {head="Nukumi Cabasset +1"}
  461.  
  462.     sets.midcast.Pet.Normal = {ammo="Hesperiidae",
  463.         neck="Shulmanu Collar",ear1="Ruby Earring",ear2="Hija Earring",
  464.         body=Ready_Atk_body,hands=Ready_Atk_hands,ring1="Thurandaut Ring +1",ring2="Cath Palug Ring",
  465.         back=Ready_Atk_back,waist="Incarnation Sash",legs=Ready_Atk_legs,feet=Ready_Atk_feet}
  466.  
  467.     sets.midcast.Pet.MedAcc = set_combine(sets.midcast.Pet.Normal, {
  468.         ear2="Enmerkar Earring",
  469.         body=Ready_Acc_body,
  470.         back=Ready_Acc_back,waist="Incarnation Sash",legs=Ready_Acc_legs})
  471.  
  472.     sets.midcast.Pet.HighAcc = set_combine(sets.midcast.Pet.Normal, {
  473.         ear1="Ferine Earring",ear2="Enmerkar Earring",
  474.         body=Ready_Acc_body,
  475.         back=Ready_Acc_back,waist="Klouskap Sash +1",legs=Ready_Acc_legs,feet=Ready_Acc_feet})
  476.  
  477.     sets.midcast.Pet.MaxAcc = set_combine(sets.midcast.Pet.Normal, {ammo="Voluspa Tathlum",
  478.         head="Gleti's Mask",neck="Beastmaster Collar +2",ear1="Enmerkar Earring",ear2="Kyrene's Earring",
  479.         body="Heyoka Harness +1",hands="Gleti's Gauntlets",
  480.         back=Ready_Acc_back,waist="Klouskap Sash +1",legs="Heyoka Subligar +1",feet="Gleti's Boots"})
  481.  
  482.     sets.midcast.Pet.MagicAtkReady = {}
  483.  
  484.     sets.midcast.Pet.MagicAtkReady.Normal = {ammo="Voluspa Tathlum",
  485.         head=Ready_MAB_head,neck="Adad Amulet",ear1="Diamond Earring",ear2="Hija Earring",
  486.         body=Ready_MAB_body,hands=Ready_MAB_hands,ring1="Tali'ah Ring",ring2="Cath Palug Ring",
  487.         back="Argochampsa Mantle",waist="Incarnation Sash",legs=Ready_MAB_legs,feet=Ready_MAB_feet}
  488.  
  489.     sets.midcast.Pet.MagicAtkReady.MedAcc = set_combine(sets.midcast.Pet.MagicAtkReady.Normal, {
  490.         head=Ready_MAcc_head,ear2="Enmerkar Earring",
  491.         legs=Ready_MAcc_legs})
  492.  
  493.     sets.midcast.Pet.MagicAtkReady.HighAcc = set_combine(sets.midcast.Pet.MagicAtkReady.Normal, {
  494.         head=Ready_MAcc_head,ear2="Enmerkar Earring",
  495.         body=Ready_MAcc_body,hands=Ready_MAcc_hands,
  496.         back=Ready_MAcc_back,legs=Ready_MAcc_legs})
  497.  
  498.     sets.midcast.Pet.MagicAtkReady.MaxAcc = set_combine(sets.midcast.Pet.MagicAtkReady.Normal, {
  499.         head=Ready_MAcc_head,neck="Beastmaster Collar +2",ear1="Kyrene's Earring",ear2="Enmerkar Earring",
  500.         body=Ready_MAcc_body,hands=Ready_MAcc_hands,
  501.         back=Ready_MAcc_back,legs=Ready_MAcc_legs,feet=Ready_MAcc_feet})
  502.  
  503.     sets.midcast.Pet.MagicAccReady = set_combine(sets.midcast.Pet.Normal, {ammo="Voluspa Tathlum",
  504.         head=Ready_MAcc_head,neck="Beastmaster Collar +2",ear1="Kyrene's Earring",ear2="Enmerkar Earring",
  505.         body=Ready_MAcc_body,hands=Ready_MAcc_hands,ring1="Tali'ah Ring",ring2="Cath Palug Ring",
  506.         back=Ready_MAcc_back,legs=Ready_MAcc_legs,feet=Ready_MAcc_feet})
  507.  
  508.     sets.midcast.Pet.MultiStrike = set_combine(sets.midcast.Pet.Normal, {
  509.         neck="Beastmaster Collar +2",ear1="Domesticator's Earring",ear2="Kyrene's Earring",
  510.         body=Ready_DA_body,hands=Ready_DA_hands,legs=Ready_DA_legs,feet=Ready_DA_feet})
  511.  
  512.     sets.midcast.Pet.Buff = set_combine(sets.midcast.Pet.TPBonus, {
  513.         body="Emicho Haubert +1"})
  514.  
  515.     --------------------------------------
  516.     -- SINGLE WIELD PET-ONLY READY SETS --
  517.     --------------------------------------
  518.  
  519.     -- Physical Ready Attacks w/o TP Modifier for Damage (ex. Sickle Slash, Whirl Claws, Swooping Frenzy, etc.)
  520.     sets.midcast.Pet.ReadyNE = {}
  521.     sets.midcast.Pet.ReadyNE.Normal = set_combine(sets.midcast.Pet.Normal, {main=Ready_Atk_Axe})
  522.     sets.midcast.Pet.ReadyNE.MedAcc = set_combine(sets.midcast.Pet.MedAcc, {main=Ready_Atk_Axe})
  523.     sets.midcast.Pet.ReadyNE.HighAcc = set_combine(sets.midcast.Pet.HighAcc, {main=Ready_Atk_Axe})
  524.     sets.midcast.Pet.ReadyNE.MaxAcc = set_combine(sets.midcast.Pet.MaxAcc, {main=Ready_Acc_Axe})
  525.  
  526.     -- Physical TP Bonus Ready Attacks (ex. Razor Fang, Tegmina Buffet, Tail Blow, Recoil Dive, etc.)
  527.     sets.midcast.Pet.ReadyNE.TPBonus = {}
  528.     sets.midcast.Pet.ReadyNE.TPBonus.Normal = set_combine(sets.midcast.Pet.ReadyNE.Normal, {main=Ready_Atk_TPBonus_Axe})
  529.     sets.midcast.Pet.ReadyNE.TPBonus.MedAcc = set_combine(sets.midcast.Pet.ReadyNE.MedAcc, {main=Ready_Atk_TPBonus_Axe})
  530.     sets.midcast.Pet.ReadyNE.TPBonus.HighAcc = set_combine(sets.midcast.Pet.ReadyNE.HighAcc, {main=Ready_Atk_TPBonus_Axe})
  531.     sets.midcast.Pet.ReadyNE.TPBonus.MaxAcc = set_combine(sets.midcast.Pet.ReadyNE.MaxAcc, {main=Ready_Acc_Axe})
  532.  
  533.     -- Multihit Ready Attacks w/o TP Modifier for Damage (Pentapeck, Chomp Rush)
  534.     sets.midcast.Pet.MultiStrikeNE = set_combine(sets.midcast.Pet.MultiStrike, {main=Ready_Atk_Axe2})
  535.  
  536.     -- Multihit TP Bonus Ready Attacks (Sweeping Gouge, Tickling Tendrils, Pecking Flurry, Wing Slap)
  537.     sets.midcast.Pet.MultiStrikeNE.TPBonus = set_combine(sets.midcast.Pet.MultiStrike, {main=Ready_Atk_TPBonus_Axe})
  538.  
  539.     -- Magical Ready Attacks w/o TP Modifier for Damage (ex. Molting Plumage, Venom, Stink Bomb, etc.)
  540.     sets.midcast.Pet.MagicAtkReadyNE = {}
  541.     sets.midcast.Pet.MagicAtkReadyNE.Normal = set_combine(sets.midcast.Pet.MagicAtkReady.Normal, {main=Ready_MAB_Axe})
  542.     sets.midcast.Pet.MagicAtkReadyNE.MedAcc = set_combine(sets.midcast.Pet.MagicAtkReady.MedAcc, {main=Ready_MAB_Axe})
  543.     sets.midcast.Pet.MagicAtkReadyNE.HighAcc = set_combine(sets.midcast.Pet.MagicAtkReady.HighAcc, {main=Ready_MAB_Axe})
  544.     sets.midcast.Pet.MagicAtkReadyNE.MaxAcc = set_combine(sets.midcast.Pet.MagicAtkReady.MaxAcc, {main=Ready_MAcc_Axe2})
  545.  
  546.     -- Magical TP Bonus Ready Attacks (ex. Fireball, Cursed Sphere, Corrosive Ooze, etc.)
  547.     sets.midcast.Pet.MagicAtkReadyNE.TPBonus = {}
  548.     sets.midcast.Pet.MagicAtkReadyNE.TPBonus.Normal = set_combine(sets.midcast.Pet.MagicAtkReadyNE.Normal, {main=Ready_MAB_TPBonus_Axe})
  549.     sets.midcast.Pet.MagicAtkReadyNE.TPBonus.MedAcc = set_combine(sets.midcast.Pet.MagicAtkReadyNE.MedAcc, {main=Ready_MAB_TPBonus_Axe})
  550.     sets.midcast.Pet.MagicAtkReadyNE.TPBonus.HighAcc = set_combine(sets.midcast.Pet.MagicAtkReadyNE.HighAcc, {main=Ready_MAB_TPBonus_Axe})
  551.     sets.midcast.Pet.MagicAtkReadyNE.TPBonus.MaxAcc = set_combine(sets.midcast.Pet.MagicAtkReadyNE.MaxAcc, {main=Ready_MAcc_Axe2})
  552.  
  553.     -- Magical Ready Enfeebles (ex. Roar, Sheep Song, Infrasonics, etc.)
  554.     sets.midcast.Pet.MagicAccReadyNE = set_combine(sets.midcast.Pet.MagicAccReady, {main="Pangu"})
  555.  
  556.     -- Pet Buffs/Cures (Bubble Curtain, Scissor Guard, Secretion, Rage, Rhino Guard, Zealous Snort, Wild Carrot)
  557.     sets.midcast.Pet.BuffNE = set_combine(sets.midcast.Pet.Buff, {main=Ready_Atk_TPBonus_Axe})
  558.  
  559.     -- Axe Swaps for when Pet TP is above a certain value.
  560.     sets.UnleashAtkAxeShield = {}
  561.     sets.UnleashAtkAxeShield.Normal = {main=Ready_Atk_Axe}
  562.     sets.UnleashAtkAxeShield.MedAcc = {main=Ready_Atk_Axe}
  563.     sets.UnleashAtkAxeShield.HighAcc = {main=Ready_Atk_Axe}
  564.     sets.UnleashMultiStrikeAxeShield = {main=Ready_DA_Axe}
  565.  
  566.     sets.UnleashMABAxeShield = {}
  567.     sets.UnleashMABAxeShield.Normal = {main=Ready_MAB_Axe}
  568.     sets.UnleashMABAxeShield.MedAcc = {main=Ready_MAB_Axe}
  569.     sets.UnleashMABAxeShield.HighAcc = {main=Ready_MAB_Axe}
  570.  
  571.     ------------------------------------
  572.     -- DUAL WIELD PET-ONLY READY SETS --
  573.     ------------------------------------
  574.  
  575.     -- DW Axe Swaps for Physical Ready Attacks w/o TP Modifier for Damage (ex. Sickle Slash, Whirl Claws, Swooping Frenzy, etc.)
  576.     sets.midcast.Pet.ReadyDWNE = {}
  577.     sets.midcast.Pet.ReadyDWNE.Normal = set_combine(sets.midcast.Pet.ReadyNE.Normal, {main=Ready_Atk_Axe,sub=Ready_Atk_Axe2})
  578.     sets.midcast.Pet.ReadyDWNE.MedAcc = set_combine(sets.midcast.Pet.ReadyNE.MedAcc, {main=Ready_Atk_Axe,sub=Ready_Acc_Axe})
  579.     sets.midcast.Pet.ReadyDWNE.HighAcc = set_combine(sets.midcast.Pet.ReadyNE.HighAcc, {main=Ready_Atk_Axe,sub=Ready_Acc_Axe})
  580.     sets.midcast.Pet.ReadyDWNE.MaxAcc = set_combine(sets.midcast.Pet.ReadyNE.MaxAcc, {main=Ready_Acc_Axe,sub=Ready_Acc_Axe2})
  581.  
  582.     -- DW Axe Swaps for Physical TP Bonus Ready Attacks (ex. Razor Fang, Tegmina Buffet, Tail Blow, Recoil Dive, etc.)
  583.     sets.midcast.Pet.ReadyDWNE.TPBonus = {}
  584.     sets.midcast.Pet.ReadyDWNE.TPBonus.Normal = set_combine(sets.midcast.Pet.ReadyNE.Normal, {main=Ready_Atk_TPBonus_Axe,sub=Ready_Atk_Axe2})
  585.     sets.midcast.Pet.ReadyDWNE.TPBonus.MedAcc = set_combine(sets.midcast.Pet.ReadyNE.MedAcc, {main=Ready_Atk_TPBonus_Axe,sub=Ready_Acc_Axe2})
  586.     sets.midcast.Pet.ReadyDWNE.TPBonus.HighAcc = set_combine(sets.midcast.Pet.ReadyNE.HighAcc, {main=Ready_Atk_TPBonus_Axe,sub=Ready_Acc_Axe2})
  587.     sets.midcast.Pet.ReadyDWNE.TPBonus.MaxAcc = set_combine(sets.midcast.Pet.ReadyNE.MaxAcc, {main=Ready_Acc_Axe,sub=Ready_Acc_Axe2})
  588.  
  589.     -- DW Axe Swaps for Multihit Ready Attacks w/o TP Modifier for Damage (Pentapeck, Chomp Rush)
  590.     sets.midcast.Pet.MultiStrikeDWNE = set_combine(sets.midcast.Pet.MultiStrikeNE, {main=Ready_Atk_Axe,sub=Ready_Atk_Axe2})
  591.  
  592.     -- DW Axe Swaps for Multihit TP Bonus Ready Attacks (Sweeping Gouge, Tickling Tendrils, Pecking Flurry, Wing Slap)
  593.     sets.midcast.Pet.MultiStrikeDWNE.TPBonus = set_combine(sets.midcast.Pet.MultiStrikeNE, {main=Ready_Atk_TPBonus_Axe,sub=Ready_Atk_TPBonus_Axe2})
  594.  
  595.     -- DW Axe Swaps for Magical Ready Attacks w/o TP Modifier for Damage (ex. Molting Plumage, Stink Bomb, Venom, etc.)
  596.     sets.midcast.Pet.MagicAtkReadyDWNE = {}
  597.     sets.midcast.Pet.MagicAtkReadyDWNE.Normal = set_combine(sets.midcast.Pet.MagicAtkReadyNE.Normal, {main=Ready_MAB_Axe,sub=Ready_MAB_Axe2})
  598.     sets.midcast.Pet.MagicAtkReadyDWNE.MedAcc = set_combine(sets.midcast.Pet.MagicAtkReadyNE.MedAcc, {main=Ready_MAB_Axe,sub=Ready_MAB_Axe2})
  599.     sets.midcast.Pet.MagicAtkReadyDWNE.HighAcc = set_combine(sets.midcast.Pet.MagicAtkReadyNE.HighAcc, {main=Ready_MAB_Axe,sub=Ready_MAcc_Axe})
  600.     sets.midcast.Pet.MagicAtkReadyDWNE.MaxAcc = set_combine(sets.midcast.Pet.MagicAtkReadyNE.MaxAcc, {main=Ready_MAB_Axe,sub=Ready_MAcc_Axe})
  601.  
  602.     -- DW Axe Swaps for Magical TP Bonus Ready Attacks (ex. Fireball, Cursed Sphere, Corrosive Ooze, etc.)
  603.     sets.midcast.Pet.MagicAtkReadyDWNE.TPBonus = {}
  604.     sets.midcast.Pet.MagicAtkReadyDWNE.TPBonus.Normal = set_combine(sets.midcast.Pet.MagicAtkReadyNE.Normal, {main=Ready_MAB_TPBonus_Axe,sub=Ready_MAB_TPBonus_Axe2})
  605.     sets.midcast.Pet.MagicAtkReadyDWNE.TPBonus.MedAcc = set_combine(sets.midcast.Pet.MagicAtkReadyNE.MedAcc, {main=Ready_MAB_TPBonus_Axe,sub=Ready_MAB_TPBonus_Axe2})
  606.     sets.midcast.Pet.MagicAtkReadyDWNE.TPBonus.HighAcc = set_combine(sets.midcast.Pet.MagicAtkReadyNE.HighAcc, {main=Ready_MAB_TPBonus_Axe,sub=Ready_MAB_TPBonus_Axe2})
  607.     sets.midcast.Pet.MagicAtkReadyDWNE.TPBonus.MaxAcc = set_combine(sets.midcast.Pet.MagicAtkReadyNE.MaxAcc, {main=Ready_MAB_Axe,sub=Ready_MAcc_Axe})
  608.  
  609.     -- DW Axe Swaps for Magical Ready Enfeebles (ex. Roar, Sheep Song, Infrasonics, etc.)
  610.     sets.midcast.Pet.MagicAccReadyDWNE = set_combine(sets.midcast.Pet.MagicAccReadyNE, {main="Pangu",sub="Pangu"})
  611.  
  612.     -- DW Axe Swaps for Pet Buffs/Cures (Bubble Curtain, Scissor Guard, Secretion, Rage, Rhino Guard, Zealous Snort, Wild Carrot)
  613.     sets.midcast.Pet.BuffDWNE = set_combine(sets.midcast.Pet.BuffNE, {main=Ready_Atk_TPBonus_Axe,sub=Ready_MAB_TPBonus_Axe})
  614.  
  615.     -- Axe Swaps for when Pet TP is above a certain value.
  616.     sets.UnleashAtkAxes = {}
  617.     sets.UnleashAtkAxes.Normal = {main=Ready_Atk_Axe,sub=Ready_Atk_Axe2}
  618.     sets.UnleashAtkAxes.MedAcc = {main=Ready_Atk_Axe,sub=Ready_Atk_Axe2}
  619.     sets.UnleashAtkAxes.HighAcc = {main=Ready_Atk_Axe,sub=Ready_Atk_Axe2}
  620.     sets.UnleashMultiStrikeAxes = {main=Ready_DA_Axe,sub=Ready_DA_Axe2}
  621.  
  622.     sets.UnleashMABAxes = {}
  623.     sets.UnleashMABAxes.Normal = {main=Ready_MAB_Axe,sub=Ready_MAB_Axe2}
  624.     sets.UnleashMABAxes.MedAcc = {main=Ready_MAB_Axe,sub=Ready_MAB_Axe2}
  625.     sets.UnleashMABAxes.HighAcc = {main=Ready_MAB_Axe,sub=Ready_MAB_Axe2}
  626.  
  627.     ---------------
  628.     -- IDLE SETS --
  629.     ---------------
  630.  
  631.     sets.idle = {ammo="Staunch Tathlum +1",
  632.         head=Regain_head,neck="Bathy Choker +1",ear1="Tuisto Earring",ear2="Odnowa Earring +1",
  633.         body=Regain_body,hands=Regain_hands,ring1="Paguroidea Ring",ring2="Warden's Ring",
  634.         back=PDT_back,waist="Flume Belt +1",legs=Regain_legs,feet="Skadi's Jambeaux +1"}
  635.  
  636.     sets.idle.Refresh = set_combine(sets.idle, {head="Jumalik Helm",body="Jumalik Mail",ring1="Stikini Ring +1",ring2="Stikini Ring +1"})
  637.     sets.idle.Reraise = set_combine(sets.idle, {head="Twilight Helm",body="Twilight Mail"})
  638.  
  639.     sets.idle.Pet = set_combine(sets.idle, {back=Pet_Regen_back})
  640.  
  641.     --sets.idle.PetRegen = set_combine(sets.idle.Pet, {neck="Empath Necklace",feet=Pet_Regen_feet})
  642.  
  643.     sets.idle.Pet.Engaged = {ammo="Hesperiidae",
  644.         head=Pet_Melee_head,neck="Beastmaster Collar +2",ear1="Domesticator's Earring",ear2="Enmerkar Earring",
  645.         body=Pet_Melee_body,hands=Pet_Melee_hands,ring1="Varar Ring +1",ring2="Varar Ring +1",
  646.         back=Ready_Atk_back,waist="Incarnation Sash",legs=Pet_Melee_legs,feet=Pet_Melee_feet}
  647.  
  648.     sets.idle.Pet.Engaged.PetSBMNK = set_combine(sets.idle.Pet.Engaged, {
  649.         --ear1="Gelai Earring",body=Pet_SB_body,
  650.         waist="Isa Belt"})
  651.  
  652.     sets.idle.Pet.Engaged.PetSBNonMNK = set_combine(sets.idle.Pet.Engaged, {
  653.         --ear1="Gelai Earring",body=Pet_SB_body,
  654.         waist="Isa Belt"})
  655.  
  656.     sets.idle.Pet.Engaged.PetSTP = set_combine(sets.idle.Pet.Engaged, {
  657.         ring1="Varar Ring +1",ring2="Varar Ring +1"})
  658.  
  659.     sets.resting = {}
  660.  
  661.     ------------------
  662.     -- DEFENSE SETS --
  663.     ------------------
  664.  
  665.     -- Pet PDT and MDT sets:
  666.     sets.defense.PetPDT = {ammo="Hesperiidae",
  667.         head="Anwig Salade",neck="Shepherd's Chain",ear1="Handler's Earring +1",ear2="Enmerkar Earring",
  668.         body=Pet_PDT_body,hands=Pet_PDT_hands,ring1="Thurandaut Ring +1",ring2="Defending Ring",
  669.         back=Pet_PDT_back,waist="Isa Belt",legs=Pet_DT_legs,feet=Pet_DT_feet}
  670.  
  671.     sets.defense.PetMDT = {ammo="Hesperiidae",
  672.         head="Anwig Salade",neck="Shepherd's Chain",ear1="Rimeice Earring",ear2="Enmerkar Earring",
  673.         body="Totemic Jackcoat +3",hands=Pet_MDT_hands,ring1="Thurandaut Ring +1",ring2="Defending Ring",
  674.         back=Pet_MDT_back,waist="Isa Belt",legs=Pet_MDT_legs,feet=Pet_MDT_feet}
  675.  
  676.     -- Master PDT and MDT sets:
  677.     sets.defense.PDT = {ammo="Iron Gobbet",
  678.         head="Gleti's Mask",neck="Loricate Torque +1",ear1="Tuisto Earring",ear2="Odnowa Earring +1",
  679.         body="Gleti's Cuirass",hands="Gleti's Gauntlets",ring1="Fortified Ring",ring2="Warden's Ring",
  680.         back="Shadow Mantle",waist="Flume Belt +1",legs="Gleti's Greaves",feet="Gleti's Boots"}
  681.  
  682.     sets.defense.Reraise = set_combine(sets.defense.PDT, {head="Twilight Helm",body="Twilight Mail"})
  683.  
  684.     sets.defense.HybridPDT = {ammo="Staunch Tathlum +1",
  685.         head="Anwig Salade",neck="Loricate Torque +1",ear1="Handler's Earring +1",ear2="Enmerkar Earring",
  686.         body="Tartarus Platemail",hands=Pet_PDT_hands,ring1="Thurandaut Ring +1",ring2="Defending Ring",
  687.         back=Pet_PDT_back,waist="Isa Belt",legs=Pet_PDT_legs,feet=Pet_PDT_feet}
  688.  
  689.     sets.defense.MDT = {ammo="Vanir Battery",
  690.         head=MEva_head,neck="Inquisitor Bead Necklace",ear1="Sanare Earring",ear2="Etiolation Earring",
  691.         body="Tartarus Platemail",hands=MEva_hands,ring1="Shadow Ring",ring2="Purity Ring",
  692.         back="Engulfer Cape +1",waist="Asklepian Belt",legs=MEva_legs,feet=MEva_feet}
  693.  
  694.     sets.defense.MEva = {ammo="Staunch Tathlum +1",
  695.         head=MEva_head,neck="Warder's Charm +1",ear1="Hearty Earring",ear2="Eabani Earring",
  696.         body="Malignance Tabard",hands=MEva_hands,ring1="Vengeful Ring",ring2="Purity Ring",
  697.         back=MEva_back,waist="Engraved Belt",legs=MEva_legs,feet=MEva_feet}
  698.  
  699.     sets.defense.Killer = {ammo="Staunch Tathlum +1",
  700.         head="Ankusa Helm +3",neck="Loricate Torque +1",ear1="Beast Earring",ear2="Odnowa Earring +1",
  701.         body="Nukumi Gausape +1",hands="Malignance Gloves",ring1="Gelatinous Ring +1",ring2="Defending Ring",
  702.         back=PDT_back,waist="Flume Belt +1",legs="Malignance Tights",feet="Malignance Boots"}
  703.  
  704.     sets.Kiting = {feet="Skadi's Jambeaux +1"}
  705.  
  706.     -------------------------------------------------------
  707.     -- Single-wield Pet Only Mode Idle/Defense Axe Swaps --
  708.     -------------------------------------------------------
  709.  
  710.     sets.idle.NE = {main="Pangu",sub="Sacro Bulwark",ammo="Staunch Tathlum +1",
  711.         head=Regain_head,neck="Bathy Choker +1",ear1="Tuisto Earring",ear2="Odnowa Earring +1",
  712.         body=Regain_body,hands=Regain_hands,ring1="Paguroidea Ring",ring2="Warden's Ring",
  713.         back=PDT_back,waist="Flume Belt +1",legs=Regain_legs,feet="Skadi's Jambeaux +1"}
  714.  
  715.     sets.idle.NE.PetEngaged = {main=Pet_TP_AxeMain,sub="Sacro Bulwark",ammo="Hesperiidae",
  716.         head=Pet_Melee_head,neck="Beastmaster Collar +2",ear1="Domesticator's Earring",ear2="Enmerkar Earring",
  717.         body=Pet_Melee_body,hands=Pet_Melee_hands,ring1="Varar Ring +1",ring2="Varar Ring +1",
  718.         back=Ready_Atk_back,waist="Incarnation Sash",legs=Pet_Melee_legs,feet=Pet_Melee_feet}
  719.  
  720.     --sets.idle.NE.PetRegen = {main=Pet_Regen_AxeMain,sub="Sacro Bulwark",
  721.     --    neck="Empath Necklace",
  722.     --    feet=Pet_Regen_feet}
  723.  
  724.     sets.defense.NE = {}
  725.  
  726.     sets.defense.NE.PDT = {main="Pangu",sub="Sacro Bulwark",ammo="Iron Gobbet",
  727.         head="Gleti's Mask",neck="Loricate Torque +1",ear1="Tuisto Earring",ear2="Ethereal Earring",
  728.         body="Udug Jacket",hands="Gleti's Gauntlets",ring1="Fortified Ring",ring2="Warden's Ring",
  729.         back="Shadow Mantle",waist="Flume Belt +1",legs="Gleti's Greaves",feet="Gleti's Boots"}
  730.  
  731.     sets.defense.NE.MDT = {main="Pangu",sub="Sacro Bulwark",ammo="Vanir Battery",
  732.         head=MEva_head,neck="Inquisitor Bead Necklace",ear1="Sanare Earring",ear2="Etiolation Earring",
  733.         body="Tartarus Platemail",hands=MEva_hands,ring1="Shadow Ring",ring2="Purity Ring",
  734.         back="Engulfer Cape +1",waist="Asklepian Belt",legs=MEva_legs,feet=MEva_feet}
  735.  
  736.     sets.defense.NE.MEva = {main=MEva_Axe_main,sub="Sacro Bulwark",ammo="Staunch Tathlum +1",
  737.         head=MEva_head,neck="Warder's Charm +1",ear1="Hearty Earring",ear2="Eabani Earring",
  738.         body="Udug Jacket",hands=MEva_hands,ring1="Vengeful Ring",ring2="Purity Ring",
  739.         back=MEva_back,waist="Engraved Belt",legs=MEva_legs,feet=MEva_feet}
  740.  
  741.     sets.defense.NE.Killer = {main="Pangu",sub="Kaidate",ammo="Iron Gobbet",
  742.         head="Ankusa Helm +3",neck="Loricate Torque +1",ear1="Tuisto Earring",ear2="Odnowa Earring +1",
  743.         body="Nukumi Gausape +1",hands="Gleti's Gauntlets",ring1="Fortified Ring",ring2="Warden's Ring",
  744.         back="Shadow Mantle",waist="Flume Belt +1",legs="Totemic Trousers +3",feet="Malignance Boots"}
  745.  
  746.     sets.defense.NE.PetPDT = {main="Pangu",sub="Sacro Bulwark",ammo="Hesperiidae",
  747.         head="Anwig Salade",neck="Shepherd's Chain",ear1="Handler's Earring +1",ear2="Enmerkar Earring",
  748.         body=Pet_PDT_body,hands=Pet_PDT_hands,ring1="Thurandaut Ring +1",ring2="Defending Ring",
  749.         back=Pet_PDT_back,waist="Isa Belt",legs=Pet_DT_legs,feet=Pet_DT_feet}
  750.  
  751.     sets.defense.NE.PetMDT = {main="Pangu",sub="Sacro Bulwark",ammo="Hesperiidae",
  752.         head="Anwig Salade",neck="Shepherd's Chain",ear1="Rimeice Earring",ear2="Enmerkar Earring",
  753.         body="Totemic Jackcoat +3",hands=Pet_MDT_hands,ring1="Thurandaut Ring +1",ring2="Defending Ring",
  754.         back=Pet_MDT_back,waist="Isa Belt",legs=Pet_MDT_legs,feet=Pet_MDT_feet}
  755.  
  756.     -----------------------------------------------------
  757.     -- Dual-wield Pet Only Mode Idle/Defense Axe Swaps --
  758.     -----------------------------------------------------
  759.  
  760.     sets.idle.DWNE = {main="Pangu",sub="Freydis",ammo="Staunch Tathlum +1",
  761.         head=Regain_head,neck="Bathy Choker +1",ear1="Tuisto Earring",ear2="Odnowa Earring +1",
  762.         body=Regain_body,hands=Regain_hands,ring1="Paguroidea Ring",ring2="Warden's Ring",
  763.         back=PDT_back,waist="Flume Belt +1",legs=Regain_legs,feet="Skadi's Jambeaux +1"}
  764.  
  765.     sets.idle.DWNE.PetEngaged = {main=Pet_TP_AxeMain,sub=Pet_TP_AxeSub,ammo="Hesperiidae",
  766.         head=Pet_Melee_head,neck="Beastmaster Collar +2",ear1="Domesticator's Earring",ear2="Enmerkar Earring",
  767.         body=Pet_Melee_body,hands=Pet_Melee_hands,ring1="Varar Ring +1",ring2="Varar Ring +1",
  768.         back=Ready_Atk_back,waist="Incarnation Sash",legs=Pet_Melee_legs,feet=Pet_Melee_feet}
  769.  
  770.     --sets.idle.DWNE.PetRegen = {main=Pet_Regen_AxeMain,sub=Pet_Regen_AxeSub,
  771.     --    neck="Empath Necklace",
  772.     --    feet=Pet_Regen_feet}
  773.  
  774.     sets.defense.DWNE = {}
  775.  
  776.     sets.defense.DWNE.PDT = {main="Pangu",sub="Arktoi",ammo="Iron Gobbet",
  777.         head="Gleti's Mask",neck="Loricate Torque +1",ear1="Tuisto Earring",ear2="Odnowa Earring +1",
  778.         body="Udug Jacket",hands="Gleti's Gauntlets",ring1="Fortified Ring",ring2="Warden's Ring",
  779.         back="Shadow Mantle",waist="Flume Belt +1",legs="Gleti's Greaves",feet="Gleti's Boots"}
  780.  
  781.     sets.defense.DWNE.MDT = {main="Pangu",sub="Purgation",ammo="Vanir Battery",
  782.         head=MEva_head,neck="Inquisitor Bead Necklace",ear1="Sanare Earring",ear2="Etiolation Earring",
  783.         body="Tartarus Platemail",hands=MEva_hands,ring1="Shadow Ring",ring2="Purity Ring",
  784.         back="Engulfer Cape +1",waist="Asklepian Belt",legs=MEva_legs,feet=MEva_feet}
  785.  
  786.     sets.defense.DWNE.MEva = {main=MEva_Axe_main,sub=MEva_Axe_sub,ammo="Staunch Tathlum +1",
  787.         head=MEva_head,neck="Warder's Charm +1",ear1="Hearty Earring",ear2="Eabani Earring",
  788.         body="Udug Jacket",hands=MEva_hands,ring1="Vengeful Ring",ring2="Purity Ring",
  789.         back=MEva_back,waist="Engraved Belt",legs=MEva_legs,feet=MEva_feet}
  790.  
  791.     sets.defense.DWNE.Killer = {main="Pangu",sub="Arktoi",ammo="Iron Gobbet",
  792.         head="Ankusa Helm +3",neck="Loricate Torque +1",ear1="Tuisto Earring",ear2="Odnowa Earring +1",
  793.         body="Nukumi Gausape +1",hands="Gleti's Gauntlets",ring1="Fortified Ring",ring2="Warden's Ring",
  794.         back="Shadow Mantle",waist="Flume Belt +1",legs="Totemic Trousers +3",feet="Malignance Boots"}
  795.  
  796.     sets.defense.DWNE.PetPDT = {main="Pangu",sub=Pet_PDT_AxeSub,ammo="Hesperiidae",
  797.         head="Anwig Salade",neck="Shepherd's Chain",ear1="Handler's Earring +1",ear2="Enmerkar Earring",
  798.         body=Pet_PDT_body,hands=Pet_PDT_hands,ring1="Thurandaut Ring +1",ring2="Defending Ring",
  799.         back=Pet_PDT_back,waist="Isa Belt",legs=Pet_DT_legs,feet=Pet_DT_feet}
  800.  
  801.     sets.defense.DWNE.PetMDT = {main="Pangu",sub=Pet_MDT_AxeSub,ammo="Hesperiidae",
  802.         head="Anwig Salade",neck="Shepherd's Chain",ear1="Rimeice Earring",ear2="Enmerkar Earring",
  803.         body="Totemic Jackcoat +3",hands=Pet_MDT_hands,ring1="Thurandaut Ring +1",ring2="Defending Ring",
  804.         back=Pet_MDT_back,waist="Isa Belt",legs=Pet_MDT_legs,feet=Pet_MDT_feet}
  805.  
  806.     --------------------
  807.     -- FAST CAST SETS --
  808.     --------------------
  809.  
  810.     sets.precast.FC = {ammo="Sapience Orb",
  811.         head=FC_head,neck="Orunmila's Torque",ear1="Loquacious Earring",ear2="Enchanter Earring +1",
  812.         body=FC_body,hands=FC_hands,ring1="Prolix Ring",ring2="Rahab Ring",
  813.         back=FC_back,waist="Moblin Cest",legs=FC_legs,feet=FC_feet}
  814.  
  815.     sets.precast.FCNE = set_combine(sets.precast.FC, {main="Shukuyu's Scythe",sub="Vivid Strap +1"})
  816.     sets.precast.FC["Utsusemi: Ichi"] = set_combine(sets.precast.FC, {neck="Magoraga Beads"})
  817.     sets.precast.FC["Utsusemi: Ni"] = set_combine(sets.precast.FC, {ammo="Impatiens",neck="Magoraga Beads",ring1="Lebeche Ring",ring2="Veneficium Ring"})
  818.  
  819.     ------------------
  820.     -- MIDCAST SETS --
  821.     ------------------
  822.  
  823.     sets.midcast.FastRecast = {ammo="Sapience Orb",
  824.         head=FC_head,neck="Orunmila's Torque",ear1="Loquacious Earring",ear2="Enchanter Earring +1",
  825.         body=FC_body,hands=FC_hands,ring1="Prolix Ring",ring2="Rahab Ring",
  826.         back=FC_back,waist="Moblin Cest",legs=FC_legs,feet=FC_feet}
  827.  
  828.     sets.midcast.Cure = {ammo="Quartz Tathlum +1",
  829.         head=Cure_Potency_head,neck="Phalaina Locket",ear1="Beatific Earring",ear2="Mendicant's Earring",
  830.         body=Cure_Potency_body,hands=Cure_Potency_hands,ring1="Menelaus's Ring",ring2="Asklepian Ring",
  831.         back=Cure_Potency_back,waist="Gishdubar Sash",legs=Cure_Potency_legs,feet=Cure_Potency_feet}
  832.  
  833.     sets.midcast.Curaga = sets.midcast.Cure
  834.     sets.CurePetOnly = {main=Cure_Potency_axe,sub="Sacro Bulwark"}
  835.  
  836.     sets.midcast.Stoneskin = {ammo="Quartz Tathlum +1",
  837.         head="Jumalik Helm",neck="Stone Gorget",ear1="Earthcry Earring",ear2="Lifestorm Earring",
  838.         body="Totemic Jackcoat +3",hands="Stone Mufflers",ring1="Leviathan Ring +1",ring2="Leviathan Ring +1",
  839.         back=Pet_PDT_back,waist="Engraved Belt",legs="Haven Hose"}
  840.  
  841.     sets.midcast.Cursna = set_combine(sets.midcast.FastRecast, {neck="Malison Medallion",
  842.         ring1="Eshmun's Ring",ring2="Haoma's Ring",waist="Gishdubar Sash"})
  843.  
  844.     sets.midcast.Protect = {ring2="Sheltered Ring"}
  845.     sets.midcast.Protectra = sets.midcast.Protect
  846.  
  847.     sets.midcast.Shell = {ring2="Sheltered Ring"}
  848.     sets.midcast.Shellra = sets.midcast.Shell
  849.  
  850.     sets.midcast['Enfeebling Magic'] = {ammo="Pemphredo Tathlum",
  851.         head=MAcc_head,neck="Sanctity Necklace",ear1="Hermetic Earring",ear2="Dignitary's Earring",
  852.         body=MAcc_body,hands=MAcc_hands,ring1="Rahab Ring",ring2="Sangoma Ring",
  853.         back=MAcc_back,waist="Eschan Stone",legs=MAcc_legs,feet=MAcc_feet}
  854.  
  855.     sets.midcast['Elemental Magic'] = {ammo="Pemphredo Tathlum",
  856.         head=MAB_head,neck="Baetyl Pendant",ear1="Hecate's Earring",ear2="Friomisi Earring",
  857.         body=MAB_body,hands=MAB_hands,ring1="Acumen Ring",ring2="Fenrir Ring +1",
  858.         back=MAcc_back,waist="Eschan Stone",legs=MAB_legs,feet=MAB_feet}
  859.  
  860.     sets.midcast.Flash = sets.Enmity
  861.  
  862.     --------------------------------------
  863.     -- SINGLE-WIELD MASTER ENGAGED SETS --
  864.     --------------------------------------
  865.  
  866.     sets.engaged = {ammo="Coiste Bodhar",
  867.         head="Malignance Chapeau",neck="Ainia Collar",ear1="Sherida Earring",ear2="Brutal Earring",
  868.         body="Tali'ah Manteel +2",hands="Malignance Gloves",ring1="Gere Ring",ring2="Epona's Ring",
  869.         back=STP_back,waist="Windbuffet Belt +1",legs="Meghanada Chausses +2",feet=STP_feet}
  870.  
  871.     sets.engaged.Aftermath = {ammo="Aurgelmir Orb +1",
  872.         head="Malignance Chapeau",neck="Ainia Collar",ear1="Dedition Earring",ear2="Telos Earring",
  873.         body="Malignance Tabard",hands="Malignance Gloves",ring1="Chirich Ring +1",ring2="Chirich Ring +1",
  874.         back=STP_back,waist="Windbuffet Belt +1",legs="Malignance Tights",feet=STP_feet}
  875.  
  876.     sets.engaged.Hybrid = {ammo="Staunch Tathlum +1",
  877.         head="Malignance Chapeau",neck="Anu Torque",ear1="Sherida Earring",ear2="Brutal Earring",
  878.         body="Tali'ah Manteel +2",hands="Malignance Gloves",ring1="Moonlight Ring",ring2="Defending Ring",
  879.         back=STP_back,waist="Windbuffet Belt +1",legs="Malignance Tights",feet="Malignance Boots"}
  880.  
  881.     sets.engaged.SubtleBlow = {ammo="Coiste Bodhar",
  882.         head="Malignance Chapeau",neck="Agasaya's Collar",ear1="Sherida Earring",ear2="Brutal Earring",
  883.         body="Sacro Breastplate",hands="Malignance Gloves",ring1="Chirich Ring +1",ring2="Chirich Ring +1",
  884.         back=STP_back,waist="Sarissaphoroi Belt",legs="Malignance Tights",feet="Malignance Boots"}
  885.  
  886.     sets.engaged.MaxAcc = {ammo="Aurgelmir Orb +1",
  887.         head="Totemic Helm +3",neck="Beastmaster Collar +2",ear1="Zennaroi Earring",ear2="Telos Earring",
  888.         body="Totemic Jackcoat +3",hands="Totemic Gloves +3",ring1="Ilabrat Ring",ring2="Regal Ring",
  889.         back=STP_back,waist="Klouskap Sash +1",legs="Totemic Trousers +3",feet="Totemic Gaiters +3"}
  890.  
  891.     sets.engaged.Farsha = {ammo="Coiste Bodhar",
  892.         head="Nukumi Cabasset +1",neck="Beastmaster Collar +2",ear1="Sherida Earring",ear2="Moonshade Earring",
  893.         body="Nukumi Gausape +1",hands="Nukumi Manoplas +1",ring1="Gere Ring",ring2="Epona's Ring",
  894.         back=STP_back,waist="Windbuffet Belt +1",legs="Nukumi Quijotes +1",feet="Nukumi Ocreae +1"}
  895.  
  896.     ------------------------------------
  897.     -- DUAL-WIELD MASTER ENGAGED SETS --
  898.     ------------------------------------
  899.  
  900.     sets.engaged.DW = {ammo="Coiste Bodhar",
  901.         head="Malignance Chapeau",neck="Ainia Collar",ear1="Sherida Earring",ear2="Eabani Earring",
  902.         body="Tali'ah Manteel +2",hands=DW_hands,ring1="Gere Ring",ring2="Epona's Ring",
  903.         back=STP_back,waist="Reiki Yotai",legs="Meghanada Chausses +2",feet=STP_feet}
  904.  
  905.     sets.engaged.DW.Aftermath = {ammo="Aurgelmir Orb +1",
  906.         head="Malignance Chapeau",neck="Ainia Collar",ear1="Dedition Earring",ear2="Eabani Earring",
  907.         body="Malignance Tabard",hands="Malignance Gloves",ring1="Chirich Ring +1",ring2="Chirich Ring +1",
  908.         back=STP_back,waist="Reiki Yotai",legs="Malignance Tights",feet=STP_feet}
  909.  
  910.     sets.engaged.DW.MedAcc = {ammo="Coiste Bodhar",
  911.         head=DW_head,neck="Shulmanu Collar",ear1="Suppanomimi",ear2="Eabani Earring",
  912.         body=DW_body,hands=DW_hands,ring1="Gere Ring",ring2="Epona's Ring",
  913.         back=DW_back,waist="Reiki Yotai",legs=DW_legs,feet=DW_feet}
  914.  
  915.     sets.engaged.DW.HighAcc = {ammo="Coiste Bodhar",
  916.         head=DW_head,neck="Shulmanu Collar",ear1="Suppanomimi",ear2="Eabani Earring",
  917.         body=DW_body,hands=DW_hands,ring1="Gere Ring",ring2="Epona's Ring",
  918.         back=DW_back,waist="Reiki Yotai",legs=DW_legs,feet=DW_feet}
  919.  
  920.     sets.engaged.DW.MaxAcc = {ammo="Aurgelmir Orb +1",
  921.         head="Totemic Helm +3",neck="Beastmaster Collar +2",ear1="Suppanomimi",ear2="Eabani Earring",
  922.         body="Totemic Jackcoat +3",hands="Totemic Gloves +3",ring1="Ilabrat Ring",ring2="Regal Ring",
  923.         back=DW_back,waist="Reiki Yotai",legs="Totemic Trousers +3",feet=DW_feet}
  924.  
  925.     sets.engaged.DW.SubtleBlow = {ammo="Coiste Bodhar",
  926.         head="Malignance Chapeau",neck="Beastmaster Collar +2",ear1="Suppanomimi",ear2="Eabani Earring",
  927.         body="Sacro Breastplate",hands=DW_hands,ring1="Chirich Ring +1",ring2="Chirich Ring +1",
  928.         back=DW_back,waist="Reiki Yotai",legs="Malignance Tights",feet="Malignance Boots"}
  929.  
  930.     sets.ExtraSubtleBlow = {ear1="Sherida Earring"}
  931.  
  932.     sets.engaged.DW.KrakenClub = {ammo="Aurgelmir Orb +1",
  933.         head="Totemic Helm +3",neck="Beastmaster Collar +2",ear1="Suppanomimi",ear2="Eabani Earring",
  934.         body="Totemic Jackcoat +3",hands="Totemic Gloves +3",ring1="Ilabrat Ring",ring2="Regal Ring",
  935.         back=DW_back,waist="Reiki Yotai",legs="Totemic Trousers +3",feet=DW_feet}
  936.  
  937.     --------------------
  938.     -- MASTER WS SETS --
  939.     --------------------
  940.  
  941.     -- AXE WSs --
  942.     sets.precast.WS = {ammo="Aurgelmir Orb +1",
  943.         head="Gleti's Mask",neck="Beastmaster Collar +2",ear1="Moonshade Earring",ear2="Telos Earring",
  944.         body="Gleti's Cuirass",hands="Gleti's Gauntlets",ring1="Regal Ring",ring2="Epona's Ring",
  945.         back=STR_WS_back,waist="Sailfi Belt +1",legs="Gleti's Greaves",feet="Gleti's Boots"}
  946.  
  947.     sets.precast.WS['Rampage'] = {ammo="Coiste Bodhar",
  948.         head="Blistering Sallet +1",neck="Fotia Gorget",ear1="Sherida Earring",ear2="Moonshade Earring",
  949.         body="Gleti's Cuirass",hands="Gleti's Gauntlets",ring1="Gere Ring",ring2="Begrudging Ring",
  950.         back=Crit_back,waist="Fotia Belt",legs="Gleti's Greaves",feet="Gleti's Boots"}
  951.  
  952.     sets.precast.WS['Calamity'] = {ammo="Aurgelmir Orb +1",
  953.         head="Ankusa Helm +3",neck="Beastmaster Collar +2",ear1="Moonshade Earring",ear2="Thrud Earring",
  954.         body="Gleti's Cuirass",hands="Totemic Gloves +3",ring1="Regal Ring",ring2="Epaminondas's Ring",
  955.         back=STR_WS_back,waist="Sailfi Belt +1",legs="Gleti's Greaves",feet="Gleti's Boots"}
  956.  
  957.     sets.precast.WS['Mistral Axe'] = {ammo="Aurgelmir Orb +1",
  958.         head="Ankusa Helm +3",neck="Beastmaster Collar +2",ear1="Moonshade Earring",ear2="Thrud Earring",
  959.         body="Gleti's Cuirass",hands="Totemic Gloves +3",ring1="Regal Ring",ring2="Epaminondas's Ring",
  960.         back=STR_WS_back,waist="Sailfi Belt +1",legs="Gleti's Greaves",feet="Gleti's Boots"}
  961.  
  962.     sets.precast.WS['Decimation'] = {ammo="Coiste Bodhar",
  963.         head="Gleti's Mask",neck="Fotia Gorget",ear1="Sherida Earring",ear2="Brutal Earring",
  964.         body="Tali'ah Manteel +2",hands="Gleti's Gauntlets",ring1="Gere Ring",ring2="Epona's Ring",
  965.         back=STR_DA_back,waist="Fotia Belt",legs="Meghanada Chausses +2",feet="Gleti's Boots"}
  966.     sets.precast.WS['Decimation'].Gavialis = set_combine(sets.precast.WS['Ruinator'], {head="Gavialis Helm"})
  967.  
  968.     sets.precast.WS['Bora Axe'] = {ammo="Aurgelmir Orb +1",
  969.         head="Ankusa Helm +3",neck="Beastmaster Collar +2",ear1="Sherida Earring",ear2="Telos Earring",
  970.         body="Gleti's Cuirass",hands="Totemic Gloves +3",ring1="Ilabrat Ring",ring2="Epona's Ring",
  971.         back=Onslaught_back,waist="Sailfi Belt +1",legs="Gleti's Greaves",feet="Gleti's Boots"}
  972.  
  973.     sets.precast.WS['Ruinator'] = {ammo="Coiste Bodhar",
  974.         head="Gleti's Mask",neck="Fotia Gorget",ear1="Sherida Earring",ear2="Telos Earring",
  975.         body="Gleti's Cuirass",hands="Gleti's Gauntlets",ring1="Gere Ring",ring2="Epona's Ring",
  976.         back=STR_DA_back,waist="Fotia Belt",legs="Meghanada Chausses +2",feet="Gleti's Boots"}
  977.     sets.precast.WS['Ruinator'].Gavialis = set_combine(sets.precast.WS['Ruinator'], {head="Gavialis Helm"})
  978.  
  979.     sets.precast.WS['Onslaught'] = {ammo="Aurgelmir Orb +1",
  980.         head="Ankusa Helm +3",neck="Caro Necklace",ear1="Ishvara Earring",ear2="Thrud Earring",
  981.         body="Gleti's Cuirass",hands="Totemic Gloves +3",ring1="Epaminondas's Ring",ring2="Ilabrat Ring",
  982.         back=Onslaught_back,waist="Sailfi Belt +1",legs="Gleti's Greaves",feet="Gleti's Boots"}
  983.  
  984.     sets.precast.WS['Primal Rend'] = {ammo="Pemphredo Tathlum",
  985.         head=MAB_head,neck="Baetyl Pendant",ear1="Moonshade Earring",ear2="Friomisi Earring",
  986.         body=MAB_body,hands=MAB_hands,ring1="Acumen Ring",ring2="Epaminondas's Ring",
  987.         back=Primal_back,waist="Eschan Stone",legs=MAB_legs,feet=MAB_feet}
  988.  
  989.     sets.precast.WS['Primal Rend'].HighAcc = {ammo="Pemphredo Tathlum",
  990.         head=MAcc_head,neck="Sanctity Necklace",ear1="Hermetic Earring",ear2="Dignitary's Earring",
  991.         body=MAcc_body,hands=MAcc_hands,ring1="Sangoma Ring",ring2="Rufescent Ring",
  992.         back=MAcc_back,waist="Eschan Stone",legs=MAcc_legs,feet=MAcc_feet}
  993.  
  994.     sets.precast.WS['Cloudsplitter'] = set_combine(sets.precast.WS['Primal Rend'], {back=Cloud_back})
  995.  
  996.     -- DAGGER WSs --
  997.     sets.precast.WS['Evisceration'] = {ammo="Coiste Bodhar",
  998.         head="Blistering Sallet +1",neck="Fotia Gorget",ear1="Sherida Earring",ear2="Moonshade Earring",
  999.         body="Gleti's Cuirass",hands="Gleti's Gauntlets",ring1="Gere Ring",ring2="Begrudging Ring",
  1000.         back=Crit_back,waist="Fotia Belt",legs="Heyoka Subligar +1",feet="Gleti's Boots"}
  1001.  
  1002.     sets.precast.WS['Aeolian Edge'] = {ammo="Pemphredo Tathlum",
  1003.         head=MAB_head,neck="Baetyl Pendant",ear1="Moonshade Earring",ear2="Friomisi Earring",
  1004.         body=MAB_body,hands=MAB_hands,ring1="Acumen Ring",ring2="Epaminondas's Ring",
  1005.         back=Primal_back,waist="Eschan Stone",legs=MAB_legs,feet=MAB_feet}
  1006.  
  1007.     sets.precast.WS['Exenterator'] = {ammo="Coiste Bodhar",
  1008.         head="Gleti's Mask",neck="Fotia Gorget",ear1="Sherida Earring",ear2="Telos Earring",
  1009.         body="Gleti's Cuirass",hands="Gleti's Gauntlets",ring1="Gere Ring",ring2="Epona's Ring",
  1010.         back=STR_DA_back,waist="Fotia Belt",legs="Meghanada Chausses +2",feet="Gleti's Boots"}
  1011.     sets.precast.WS['Exenterator'].Gavialis = set_combine(sets.precast.WS['Exenterator'], {head="Gavialis Helm"})
  1012.  
  1013.     -- SWORD WSs --
  1014.     sets.precast.WS['Savage Blade'] = {ammo="Aurgelmir Orb +1",
  1015.         head="Ankusa Helm +3",neck="Caro Necklace",ear1="Ishvara Earring",ear2="Thrud Earring",
  1016.         body="Nzingha Cuirass",hands="Totemic Gloves +3",ring1="Epaminondas's Ring",ring2="Ilabrat Ring",
  1017.         back=STR_WS_back,waist="Sailfi Belt +1",legs="Ankusa Trousers +3",feet="Ankusa Gaiters +3"}
  1018.  
  1019.     -- SCYTHE WSs --
  1020.     sets.precast.WS['Spiral Hell'] = {ammo="Aurgelmir Orb +1",
  1021.         head="Ankusa Helm +3",neck="Caro Necklace",ear1="Moonshade Earring",ear2="Thrud Earring",
  1022.         body="Nzingha Cuirass",hands="Totemic Gloves +3",ring1="Epaminondas's Ring",ring2="Ilabrat Ring",
  1023.         back=STR_WS_back,waist="Sailfi Belt +1",legs="Ankusa Trousers +3",feet="Ankusa Gaiters +3"}
  1024.  
  1025.     sets.precast.WS['Cross Reaper'] = {ammo="Aurgelmir Orb +1",
  1026.         head="Ankusa Helm +3",neck="Caro Necklace",ear1="Moonshade Earring",ear2="Thrud Earring",
  1027.         body="Nzingha Cuirass",hands="Totemic Gloves +3",ring1="Epaminondas's Ring",ring2="Ilabrat Ring",
  1028.         back=STR_WS_back,waist="Sailfi Belt +1",legs="Ankusa Trousers +3",feet="Ankusa Gaiters +3"}
  1029.  
  1030.     sets.precast.WS['Entropy'] = {ammo="Coiste Bodhar",
  1031.         head="Gleti's Mask",neck="Fotia Gorget",ear1="Sherida Earring",ear2="Telos Earring",
  1032.         body="Gleti's Cuirass",hands="Gleti's Gauntlets",ring1="Gere Ring",ring2="Epona's Ring",
  1033.         back=STR_DA_back,waist="Fotia Belt",legs="Meghanada Chausses +2",feet="Gleti's Boots"}
  1034.     sets.precast.WS['Entropy'].Gavialis = set_combine(sets.precast.WS['Entropy'], {head="Gavialis Helm"})
  1035.  
  1036.     sets.midcast.ExtraMAB = {ear1="Hecate's Earring"}
  1037.     sets.midcast.ExtraWSDMG = {ear1="Ishvara Earring"}
  1038.  
  1039.     ----------------
  1040.     -- OTHER SETS --
  1041.     ----------------
  1042.  
  1043.     --Precast Gear Sets for DNC subjob abilities:
  1044.     sets.precast.Waltz = {ammo="Sonia's Plectrum",
  1045.         head="Totemic Helm +3",neck="Unmoving Collar +1",ear1="Handler's Earring +1",ear2="Enchanter Earring +1",
  1046.         body="Gleti's Cuirass",hands="Totemic Gloves +3",ring1="Asklepian Ring",ring2="Valseur's Ring",
  1047.         back=Waltz_back,waist="Chaac Belt",legs="Dashing Subligar",feet="Totemic Gaiters +3"}
  1048.     sets.precast.Step = {ammo="Aurgelmir Orb +1",
  1049.         head="Totemic Helm +3",neck="Beastmaster Collar +2",ear1="Zennaroi Earring",ear2="Telos Earring",
  1050.         body="Totemic Jackcoat +3",hands="Totemic Gloves +3",ring1="Ilabrat Ring",ring2="Regal Ring",
  1051.         back=DW_back,waist="Klouskap Sash +1",legs="Totemic Trousers +3",feet=DW_feet}
  1052.     sets.precast.Flourish1 = {}
  1053.     sets.precast.Flourish1['Violent Flourish'] = {ammo="Pemphredo Tathlum",
  1054.         head=MAcc_head,neck="Sanctity Necklace",ear1="Hermetic Earring",ear2="Dignitary's Earring",
  1055.         body=MAcc_body,hands=MAcc_hands,ring1="Rahab Ring",ring2="Sangoma Ring",
  1056.         back=MAcc_back,waist="Eschan Stone",legs=MAcc_legs,feet=MAcc_feet}
  1057.  
  1058.     --Precast Gear Sets for DRG subjob abilities:
  1059.     sets.precast.JA.Jump = {hands="Crusher Gauntlets",feet="Ostro Greaves"}
  1060.     sets.precast.JA['High Jump'] = sets.precast.JA.Jump
  1061.  
  1062.     --Misc Gear Sets
  1063.     sets.FrenzySallet = {head="Frenzy Sallet"}
  1064.     sets.precast.LuzafRing = {ring1="Luzaf's Ring"}
  1065.     sets.buff['Killer Instinct'] = {body="Nukumi Gausape +1"}
  1066.     sets.THGear = {ammo="Perfect Lucky Egg",legs=TH_legs,waist="Chaac Belt"}
  1067. end
  1068.  
  1069. -------------------------------------------------------------------------------------------------------------------
  1070. -- Job-specific hooks that are called to process player actions at specific points in time.
  1071. -------------------------------------------------------------------------------------------------------------------
  1072.  
  1073. function job_pretarget(spell)
  1074.     --checkblocking(spell)
  1075. end
  1076.  
  1077. function job_precast(spell, action, spellMap, eventArgs)
  1078.     if spell.type == "Monster" and not spell.interrupted then
  1079.         equip_ready_gear(spell)
  1080.         if not buffactive['Unleash'] then
  1081.             equip(sets.ReadyRecast)
  1082.         end
  1083.  
  1084.         eventArgs.handled = true
  1085.     end
  1086.  
  1087.     if spell.english == 'Reward' then
  1088.         RewardAmmo = ''
  1089.         if state.RewardMode.value == 'Theta' then
  1090.             RewardAmmo = 'Pet Food Theta'
  1091.         elseif state.RewardMode.value == 'Roborant' then
  1092.             RewardAmmo = 'Pet Roborant'
  1093.         else
  1094.             RewardAmmo = 'Pet Food Theta'
  1095.         end
  1096.  
  1097.         if state.AxeMode.value == 'PetOnly' then
  1098.             if player.sub_job == 'NIN' or player.sub_job == 'DNC' then
  1099.                 equip({ammo=RewardAmmo}, sets.precast.JA.RewardNEDW)
  1100.             else
  1101.                 equip({ammo=RewardAmmo}, sets.precast.JA.RewardNE)
  1102.             end
  1103.         else
  1104.             equip({ammo=RewardAmmo}, sets.precast.JA.Reward)
  1105.         end
  1106.     end
  1107.  
  1108.     if enmity_plus_moves:contains(spell.english) then
  1109.         if state.AxeMode.value == 'PetOnly' then
  1110.             if player.sub_job == 'NIN' or player.sub_job == 'DNC' then
  1111.                 equip(sets.EnmityNEDW)
  1112.             else
  1113.                 equip(sets.EnmityNE)
  1114.             end
  1115.         else
  1116.             equip(sets.Enmity)
  1117.         end
  1118.     end
  1119.  
  1120.     if spell.english == 'Spur' then
  1121.         if state.AxeMode.value == 'PetOnly' then
  1122.             if player.sub_job == 'NIN' or player.sub_job == 'DNC' then
  1123.                 equip(sets.precast.JA.SpurNEDW)
  1124.             else
  1125.                 equip(sets.precast.JA.SpurNE)
  1126.             end
  1127.         else
  1128.             equip(sets.precast.JA.Spur)
  1129.         end
  1130.     end
  1131.  
  1132.     if spell.english == 'Charm' then
  1133.         if state.AxeMode.value == 'PetOnly' then
  1134.             if player.sub_job == 'NIN' or player.sub_job == 'DNC' then
  1135.                 equip(sets.precast.JA.CharmNEDW)
  1136.             else
  1137.                 equip(sets.precast.JA.CharmNE)
  1138.             end
  1139.         else
  1140.             equip(sets.precast.JA.Charm)
  1141.         end
  1142.     end
  1143.  
  1144.     if spell.english == 'Bestial Loyalty' or spell.english == 'Call Beast' then
  1145.         jug_pet_info()
  1146.         if spell.english == "Call Beast" and call_beast_cancel:contains(JugInfo) then
  1147.             add_to_chat(123, spell.name..' Canceled: [HQ Jug Pet]')
  1148.             return
  1149.         end
  1150.         equip({ammo=JugInfo})
  1151.     end
  1152.  
  1153.     if player.equipment.main == 'Aymur' then
  1154.         custom_aftermath_timers_precast(spell)
  1155.     end
  1156.  
  1157.     if spell.type == "WeaponSkill" and spell.name ~= 'Mistral Axe' and spell.name ~= 'Bora Axe' and spell.target.distance > target_distance then
  1158.         cancel_spell()
  1159.         add_to_chat(123, spell.name..' Canceled: [Out of Range]')
  1160.         handle_equipping_gear(player.status)
  1161.         return
  1162.     end
  1163.  
  1164.     if spell.type == 'CorsairRoll' or spell.english == "Double-Up" then
  1165.         equip(sets.precast.LuzafRing)
  1166.     end
  1167.  
  1168.     if spell.prefix == '/magic' or spell.prefix == '/ninjutsu' or spell.prefix == '/song' then
  1169.         if state.AxeMode.value == 'PetOnly' then
  1170.             equip(sets.precast.FCNE)
  1171.         else
  1172.             equip(sets.precast.FC)
  1173.         end
  1174.     end
  1175. end
  1176.  
  1177. function job_post_precast(spell, action, spellMap, eventArgs)
  1178.     --If Killer Instinct is active during WS (except for Primal/Cloudsplitter where Sacro Body is superior), equip Nukumi Gausape +1.
  1179.     if spell.type:lower() == 'weaponskill' and buffactive['Killer Instinct'] then
  1180.         if spell.english ~= "Primal Rend" and spell.english ~= "Cloudsplitter" then
  1181.             equip(sets.buff['Killer Instinct'])
  1182.         end
  1183.     end
  1184.  
  1185.     if spell.english == "Calamity" or spell.english == "Mistral Axe" then
  1186.         if player.sub_job == 'NIN' or player.sub_job == 'DNC' then
  1187.             if player.tp > 2750 then
  1188.                 equip(sets.midcast.ExtraWSDMG)
  1189.             end
  1190.         else
  1191.             if player.tp > 2520 then
  1192.                 equip(sets.midcast.ExtraWSDMG)
  1193.             end
  1194.         end
  1195.     end
  1196.  
  1197.     if spell.english == "Primal Rend" or spell.english == "Cloudsplitter" then
  1198.         if player.sub_job == 'NIN' or player.sub_job == 'DNC' then
  1199.             if player.tp > 2750 then
  1200.                 equip(sets.midcast.ExtraMAB)
  1201.             end
  1202.         else
  1203.             if player.tp > 2520 then
  1204.                 equip(sets.midcast.ExtraMAB)
  1205.             end
  1206.         end
  1207.     end
  1208.  
  1209. -- Equip Chaac Belt for TH+1 on common Subjob Abilities or Spells.
  1210.     if abilities_to_check:contains(spell.english) and state.TreasureMode.value == 'Tag' then
  1211.         equip(sets.THGear)
  1212.     end
  1213. end
  1214.  
  1215. function job_midcast(spell, action, spellMap, eventArgs)
  1216.     if state.AxeMode.value == 'PetOnly' then
  1217.         if spell.english == "Cure" or spell.english == "Cure II" or spell.english == "Cure III" or spell.english == "Cure IV" then
  1218.             equip(sets.CurePetOnly)
  1219.         end
  1220.         if spell.english == "Curaga" or spell.english == "Curaga II" or spell.english == "Curaga III" then
  1221.             equip(sets.CurePetOnly)
  1222.         end
  1223.     end
  1224. end
  1225.  
  1226. -- Return true if we handled the aftercast work.  Otherwise it will fall back
  1227. -- to the general aftercast() code in Mote-Include.
  1228. function job_aftercast(spell, action, spellMap, eventArgs)
  1229.     if spell.type == "Monster" or spell.name == "Sic" then
  1230.         equip_ready_gear(spell)
  1231.         eventArgs.handled = true
  1232.     end
  1233.  
  1234.     if spell.english == 'Fight' or spell.english == 'Bestial Loyalty' or spell.english == 'Call Beast' then
  1235.         if not spell.interrupted then
  1236.             pet_info_update()
  1237.         end
  1238.     end
  1239.  
  1240.     if spell.english == "Leave" and not spell.interrupted then
  1241.         clear_pet_buff_timers()
  1242.         PetName = 'None';PetJob = 'None';PetInfo = 'None';ReadyMoveOne = 'None';ReadyMoveTwo = 'None';ReadyMoveThree = 'None';ReadyMoveFour = 'None'
  1243.     end
  1244.  
  1245.     if player.equipment.main == 'Aymur' then
  1246.         custom_aftermath_timers_aftercast(spell)
  1247.     end
  1248.  
  1249.     if player.status ~= 'Idle' and state.AxeMode.value == 'PetOnly' and spell.type ~= "Monster" then
  1250.         pet_only_equip_handling()
  1251.     end
  1252. end
  1253.  
  1254. function job_pet_midcast(spell, action, spellMap, eventArgs)
  1255.     if spell.type == "Monster" or spell.name == "Sic" then
  1256.         eventArgs.handled = true
  1257.     end
  1258. end
  1259.  
  1260. function job_pet_aftercast(spell, action, spellMap, eventArgs)
  1261.     pet_only_equip_handling()
  1262. end
  1263.  
  1264. -------------------------------------------------------------------------------------------------------------------
  1265. -- Customization hook for idle and melee sets.
  1266. -------------------------------------------------------------------------------------------------------------------
  1267.  
  1268. function customize_idle_set(idleSet)
  1269.     if state.AxeMode.value == 'PetOnly' then
  1270.         if player.sub_job == 'NIN' or player.sub_job == 'DNC' then
  1271.             if state.DefenseMode.value == "Physical" then
  1272.                 idleSet = set_combine(idleSet, sets.defense.DWNE[state.PhysicalDefenseMode.value])
  1273.             elseif state.DefenseMode.value == "Magical" then
  1274.                 idleSet = set_combine(idleSet, sets.defense.DWNE[state.MagicalDefenseMode.value])
  1275.             else
  1276.                 if pet.status == "Engaged" then
  1277.                     idleSet = set_combine(idleSet, sets.idle.DWNE.PetEngaged)
  1278.                 else
  1279.                     idleSet = set_combine(idleSet, sets.idle.DWNE)
  1280.                 end
  1281.             end
  1282.         else
  1283.             if state.DefenseMode.value == "Physical" then
  1284.                 idleSet = set_combine(idleSet, sets.defense.NE[state.PhysicalDefenseMode.value])
  1285.             elseif state.DefenseMode.value == "Magical" then
  1286.                 idleSet = set_combine(idleSet, sets.defense.NE[state.MagicalDefenseMode.value])
  1287.             else
  1288.                 if pet.status == "Engaged" then
  1289.                     idleSet = set_combine(idleSet, sets.idle.NE.PetEngaged)
  1290.                 else
  1291.                     idleSet = set_combine(idleSet, sets.idle.NE)
  1292.                 end
  1293.             end
  1294.         end
  1295.     end
  1296.  
  1297.     idleSet = apply_kiting(idleSet)
  1298.     return idleSet
  1299. end
  1300.  
  1301. function customize_melee_set(meleeSet)
  1302.     if state.AxeMode.value ~= 'PetOnly' and state.DefenseMode.value == "None" then
  1303.         if player.equipment.main == 'Farsha' then
  1304.             meleeSet = set_combine(meleeSet, sets.engaged.Farsha)
  1305.         elseif player.equipment.sub == 'Kraken Club' then
  1306.             meleeSet = set_combine(meleeSet, sets.engaged.DW.KrakenClub)
  1307.         elseif state.HybridMode.value == 'SubtleBlow' then
  1308.             if player.sub_job == 'NIN' then
  1309.                 meleeSet = set_combine(meleeSet, sets.engaged.DW.SubtleBlow)
  1310.             elseif player.sub_job == 'DNC' then
  1311.                 meleeSet = set_combine(meleeSet, sets.engaged.DW.SubtleBlow, sets.ExtraSubtleBlow)
  1312.             else
  1313.                 meleeSet = set_combine(meleeSet, sets.engaged.SubtleBlow)
  1314.             end
  1315.         end
  1316.     end
  1317.  
  1318.     pet_only_equip_handling()
  1319.     meleeSet = apply_kiting(meleeSet)
  1320.     return meleeSet
  1321. end
  1322.  
  1323. -------------------------------------------------------------------------------------------------------------------
  1324. -- Hooks for Reward, Correlation, Treasure Hunter, and Pet Mode handling.
  1325. -------------------------------------------------------------------------------------------------------------------
  1326.  
  1327. function job_state_change(stateField, newValue, oldValue)
  1328.     if stateField == 'Correlation Mode' then
  1329.         state.CorrelationMode:set(newValue)
  1330.     elseif stateField == 'Treasure Mode' then
  1331.         state.TreasureMode:set(newValue)
  1332.     elseif stateField == 'Reward Mode' then
  1333.         state.RewardMode:set(newValue)
  1334.     elseif stateField == 'Pet Mode' then
  1335.         state.CombatWeapon:set(newValue)
  1336.     end
  1337. end
  1338.  
  1339. function get_custom_wsmode(spell, spellMap, default_wsmode)
  1340.     if default_wsmode == 'Normal' then
  1341.         if spell.english == "Ruinator" and (world.day_element == 'Water' or world.day_element == 'Wind' or world.day_element == 'Ice') then
  1342.             return 'Gavialis'
  1343.         end
  1344.         if spell.english == "Rampage" and world.day_element == 'Earth' then
  1345.             return 'Gavialis'
  1346.         end
  1347.     end
  1348. end
  1349.  
  1350. -------------------------------------------------------------------------------------------------------------------
  1351. -- User code that supplements self-commands.
  1352. -------------------------------------------------------------------------------------------------------------------
  1353.  
  1354. -- Called any time we attempt to handle automatic gear equips (ie: engaged or idle gear).
  1355. function job_handle_equipping_gear(playerStatus, eventArgs)
  1356.  
  1357. end
  1358.  
  1359. -- Called by the 'update' self-command, for common needs.
  1360. -- Set eventArgs.handled to true if we don't want automatic equipping of gear.
  1361. function job_update(cmdParams, eventArgs)
  1362.     get_combat_form()
  1363.     get_melee_groups()
  1364.     pet_info_update()
  1365.     update_display_mode_info()
  1366.     pet_only_equip_handling()
  1367. end
  1368.  
  1369. -- Updates gear based on pet status changes.
  1370. function job_pet_status_change(newStatus, oldStatus, eventArgs)
  1371.     if newStatus == 'Idle' or newStatus == 'Engaged' then
  1372.         if state.DefenseMode.value ~= "Physical" and state.DefenseMode.value ~= "Magical" then
  1373.             handle_equipping_gear(player.status)
  1374.         end
  1375.     end
  1376.  
  1377.     if pet.hpp == 0 then
  1378.         clear_pet_buff_timers()
  1379.         PetName = 'None';PetJob = 'None';PetInfo = 'None';ReadyMoveOne = 'None';ReadyMoveTwo = 'None';ReadyMoveThree = 'None';ReadyMoveFour = 'None'
  1380.     end
  1381.  
  1382.     customize_melee_set(meleeSet)
  1383.     pet_info_update()
  1384. end
  1385.  
  1386. function job_buff_change(status, gain, gain_or_loss)
  1387.     --Equip Frenzy Sallet if we're asleep and engaged.
  1388.     if (status == "sleep" and gain_or_loss) and player.status == 'Engaged' then
  1389.         if gain then
  1390.             equip(sets.FrenzySallet)
  1391.         else
  1392.             handle_equipping_gear(player.status)
  1393.         end
  1394.     end
  1395.  
  1396.    if (status == "Aftermath: Lv.3" and gain_or_loss) and player.status == 'Engaged' then
  1397.         if player.equipment.main == 'Aymur' and gain then
  1398.             job_update(cmdParams, eventArgs)
  1399.             handle_equipping_gear(player.status)
  1400.         else
  1401.             job_update(cmdParams, eventArgs)
  1402.             handle_equipping_gear(player.status)
  1403.         end
  1404.     end
  1405. end
  1406.  
  1407. -------------------------------------------------------------------------------------------------------------------
  1408. -- Ready Move Presets and Pet TP Evaluation Functions - Credit to Bomberto and Verda
  1409. -------------------------------------------------------------------------------------------------------------------
  1410.  
  1411. pet_tp=0
  1412. function job_self_command(cmdParams, eventArgs)
  1413.     if cmdParams[1]:lower() == 'ready' then
  1414.         if pet.status == "Engaged" then
  1415.             ready_move(cmdParams)
  1416.         else
  1417.             send_command('input /pet "Fight" <t>')
  1418.         end
  1419.         eventArgs.handled = true
  1420.     end
  1421.     if cmdParams[1]:lower() == 'gearhandle' then
  1422.         pet_only_equip_handling()
  1423.     end
  1424.     if cmdParams[1] == 'pet_tp' then
  1425.         pet_tp = tonumber(cmdParams[2])
  1426.     end
  1427.     if cmdParams[1]:lower() == 'charges' then
  1428.         charges = 3
  1429.         ready = windower.ffxi.get_ability_recasts()[102]
  1430.         if ready ~= 0 then
  1431.             charges = math.floor(((30 - ready) / 10))
  1432.         end
  1433.         add_to_chat(28,'Ready Recast:'..ready..'   Charges Remaining:'..charges..'')
  1434.     end
  1435. end
  1436.  
  1437. function ready_move(cmdParams)
  1438.     local move = cmdParams[2]:lower()
  1439.     local ReadyMove = ''
  1440.     if move == 'one' then
  1441.         ReadyMove = ReadyMoveOne
  1442.     elseif move == 'two' then
  1443.         ReadyMove = ReadyMoveTwo
  1444.     elseif move == 'three' then
  1445.         ReadyMove = ReadyMoveThree
  1446.     else
  1447.         ReadyMove = ReadyMoveFour
  1448.     end
  1449.     send_command('input /pet "'.. ReadyMove ..'" <me>')
  1450. end
  1451.  
  1452. pet_tp = 0
  1453. --Fix missing Pet.TP field by getting the packets from the fields lib
  1454. packets = require('packets')
  1455. function update_pet_tp(id,data)
  1456.     if id == 0x068 then
  1457.         pet_tp = 0
  1458.         local update = packets.parse('incoming', data)
  1459.         pet_tp = update["Pet TP"]
  1460.         windower.send_command('lua c gearswap c pet_tp '..pet_tp)
  1461.     end
  1462. end
  1463. id = windower.raw_register_event('incoming chunk', update_pet_tp)
  1464.  
  1465. -------------------------------------------------------------------------------------------------------------------
  1466. -- Current Job State Display
  1467. -------------------------------------------------------------------------------------------------------------------
  1468.  
  1469. -- Set eventArgs.handled to true if we don't want the automatic display to be run.
  1470. function display_current_job_state(eventArgs)
  1471.     local msg = 'Melee'
  1472.    
  1473.     if state.CombatForm.has_value then
  1474.         msg = msg .. ' (' .. state.CombatForm.value .. ')'
  1475.     end
  1476.    
  1477.     msg = msg .. ': '
  1478.    
  1479.     msg = msg .. state.OffenseMode.value
  1480.     if state.HybridMode.value ~= 'Normal' then
  1481.         msg = msg .. '/' .. state.HybridMode.value
  1482.     end
  1483.     msg = msg .. ', WS: ' .. state.WeaponskillMode.value
  1484.    
  1485.     if state.DefenseMode.value ~= 'None' then
  1486.         msg = msg .. ', ' .. 'Defense: ' .. state.DefenseMode.value .. ' (' .. state[state.DefenseMode.value .. 'DefenseMode'].value .. ')'
  1487.     end
  1488.    
  1489.     if state.Kiting.value then
  1490.         msg = msg .. ', Kiting'
  1491.     end
  1492.  
  1493.     msg = msg .. ', Corr.: '..state.CorrelationMode.value
  1494.  
  1495.     if state.JugMode.value ~= 'None' then
  1496.         add_to_chat(8,'-- Jug Pet: '.. PetName ..' -- (Pet Info: '.. PetInfo ..', '.. PetJob ..')')
  1497.     end
  1498.  
  1499.     add_to_chat(28,'Ready Moves: 1.'.. ReadyMoveOne ..'  2.'.. ReadyMoveTwo ..'  3.'.. ReadyMoveThree ..'  4.'.. ReadyMoveFour ..'')
  1500.     add_to_chat(122, msg)
  1501.  
  1502.     eventArgs.handled = true
  1503. end
  1504.  
  1505. -------------------------------------------------------------------------------------------------------------------
  1506. -- Utility functions specific to this job.
  1507. -------------------------------------------------------------------------------------------------------------------
  1508.  
  1509. function equip_ready_gear(spell)
  1510.     if physical_ready_moves:contains(spell.name) then
  1511.         if state.AxeMode.value == 'PetOnly' then
  1512.             if multi_hit_ready_moves:contains(spell.name) then
  1513.                 if player.sub_job == 'NIN' or player.sub_job == 'DNC' then
  1514.                     if tp_based_ready_moves:contains(spell.name) then
  1515.                         equip(sets.midcast.Pet.MultiStrikeDWNE.TPBonus)
  1516.                     else
  1517.                         equip(sets.midcast.Pet.MultiStrikeDWNE)
  1518.                     end
  1519.                 else
  1520.                     if tp_based_ready_moves:contains(spell.name) then
  1521.                         equip(sets.midcast.Pet.MultiStrikeNE.TPBonus)
  1522.                     else
  1523.                         equip(sets.midcast.Pet.MultiStrikeNE)
  1524.                     end
  1525.                 end
  1526.             else
  1527.                 if player.sub_job == 'NIN' or player.sub_job == 'DNC' then
  1528.                     if tp_based_ready_moves:contains(spell.name) then
  1529.                         equip(sets.midcast.Pet.ReadyDWNE.TPBonus[state.OffenseMode.value])
  1530.                     else
  1531.                         equip(sets.midcast.Pet.ReadyDWNE[state.OffenseMode.value])
  1532.                     end
  1533.                 else
  1534.                     if tp_based_ready_moves:contains(spell.name) then
  1535.                         equip(sets.midcast.Pet.ReadyNE.TPBonus[state.OffenseMode.value])
  1536.                     else
  1537.                         equip(sets.midcast.Pet.ReadyNE[state.OffenseMode.value])
  1538.                     end
  1539.                 end
  1540.             end
  1541.         else
  1542.             if multi_hit_ready_moves:contains(spell.name) then
  1543.                 equip(sets.midcast.Pet.MultiStrike)
  1544.             else
  1545.                 equip(sets.midcast.Pet[state.OffenseMode.value])
  1546.             end
  1547.         end
  1548.  
  1549.         -- Equip Headgear based on Neutral or Favorable Correlation Modes:
  1550.         if state.OffenseMode.value ~= 'MaxAcc' then
  1551.             equip(sets.midcast.Pet[state.CorrelationMode.value])
  1552.         end
  1553.     end
  1554.  
  1555.     if magic_atk_ready_moves:contains(spell.name) then
  1556.         if state.AxeMode.value == 'PetOnly' then
  1557.             if player.sub_job == 'NIN' or player.sub_job == 'DNC' then
  1558.                 if tp_based_ready_moves:contains(spell.name) then
  1559.                     equip(sets.midcast.Pet.MagicAtkReadyDWNE.TPBonus[state.OffenseMode.value])
  1560.                 else
  1561.                     equip(sets.midcast.Pet.MagicAtkReadyDWNE[state.OffenseMode.value])
  1562.                 end
  1563.             else
  1564.                 if tp_based_ready_moves:contains(spell.name) then
  1565.                     equip(sets.midcast.Pet.MagicAtkReadyNE.TPBonus[state.OffenseMode.value])
  1566.                 else
  1567.                     equip(sets.midcast.Pet.MagicAtkReadyNE[state.OffenseMode.value])
  1568.                 end
  1569.             end
  1570.         else
  1571.             equip(sets.midcast.Pet.MagicAtkReady[state.OffenseMode.value])
  1572.         end
  1573.     end
  1574.  
  1575.     if magic_acc_ready_moves:contains(spell.name) then
  1576.         if state.AxeMode.value == 'PetOnly' then
  1577.             if player.sub_job == 'NIN' or player.sub_job == 'DNC' then
  1578.                 equip(sets.midcast.Pet.MagicAccReadyDWNE)
  1579.             else
  1580.                 equip(sets.midcast.Pet.MagicAccReadyNE)
  1581.             end
  1582.         else
  1583.             equip(sets.midcast.Pet.MagicAccReady)
  1584.         end
  1585.     end
  1586.  
  1587.     if pet_buff_moves:contains(spell.name) then
  1588.         if state.AxeMode.value == 'PetOnly' then
  1589.             if player.sub_job == 'NIN' or player.sub_job == 'DNC' then
  1590.                 equip(sets.midcast.Pet.BuffDWNE)
  1591.             else
  1592.                 equip(sets.midcast.Pet.BuffNE)
  1593.             end
  1594.         else
  1595.             equip(sets.midcast.Pet.Buff)
  1596.         end
  1597.     end
  1598.  
  1599.     --If Pet TP, before bonuses, is less than a certain value then equip Nukumi Manoplas +1.
  1600.     --Or if Pet TP, before bonuses, is more than a certain value then equip Unleash-specific Axes.
  1601.     if (physical_ready_moves:contains(spell.name) or magic_atk_ready_moves:contains(spell.name)) and state.OffenseMode.value ~= 'MaxAcc' then
  1602.         if tp_based_ready_moves:contains(spell.name) and PetJob == 'Warrior' then
  1603.             if pet_tp < 1300 then
  1604.                 equip(sets.midcast.Pet.TPBonus)
  1605.             elseif pet_tp > 2000 and state.AxeMode.value == 'PetOnly' then
  1606.                 if multi_hit_ready_moves:contains(spell.name) then
  1607.                     if player.sub_job == 'NIN' or player.sub_job == 'DNC' then
  1608.                         equip(sets.UnleashMultiStrikeAxes)
  1609.                     else
  1610.                         equip(sets.UnleashMultiStrikeAxeShield)
  1611.                     end
  1612.                 elseif physical_ready_moves:contains(spell.name) then
  1613.                     if player.sub_job == 'NIN' or player.sub_job == 'DNC' then
  1614.                         equip(sets.UnleashAtkAxes[state.OffenseMode.value])
  1615.                     else
  1616.                         equip(sets.UnleashAtkAxeShield[state.OffenseMode.value])
  1617.                     end
  1618.                 else
  1619.                     if player.sub_job == 'NIN' or player.sub_job == 'DNC' then
  1620.                         equip(sets.UnleashMABAxes[state.OffenseMode.value])
  1621.                     else
  1622.                         equip(sets.UnleashMABAxeShield[state.OffenseMode.value])
  1623.                     end
  1624.                 end
  1625.             end
  1626.         elseif tp_based_ready_moves:contains(spell.name) and PetJob ~= 'Warrior' then
  1627.             if pet_tp < 1800 then
  1628.                 equip(sets.midcast.Pet.TPBonus)
  1629.             elseif pet_tp > 2500 and state.AxeMode.value == 'PetOnly' then
  1630.                 if multi_hit_ready_moves:contains(spell.name) then
  1631.                     if player.sub_job == 'NIN' or player.sub_job == 'DNC' then
  1632.                         equip(sets.UnleashMultiStrikeAxes)
  1633.                     else
  1634.                         equip(sets.UnleashMultiStrikeAxeShield)
  1635.                     end
  1636.                 elseif physical_ready_moves:contains(spell.name) then
  1637.                     if player.sub_job == 'NIN' or player.sub_job == 'DNC' then
  1638.                         equip(sets.UnleashAtkAxes[state.OffenseMode.value])
  1639.                     else
  1640.                         equip(sets.UnleashAtkAxeShield[state.OffenseMode.value])
  1641.                     end
  1642.                 else
  1643.                     if player.sub_job == 'NIN' or player.sub_job == 'DNC' then
  1644.                         equip(sets.UnleashMABAxes[state.OffenseMode.value])
  1645.                     else
  1646.                         equip(sets.UnleashMABAxeShield[state.OffenseMode.value])
  1647.                     end
  1648.                 end
  1649.             end
  1650.         end
  1651.     end
  1652. end
  1653.  
  1654. function jug_pet_info()
  1655.     JugInfo = ''
  1656.     if state.JugMode.value == 'FunguarFamiliar' or state.JugMode.value == 'Seedbed Soil' then
  1657.         JugInfo = 'Seedbed Soil'
  1658.     elseif state.JugMode.value == 'CourierCarrie' or state.JugMode.value == 'Fish Oil Broth' then
  1659.         JugInfo = 'Fish Oil Broth'
  1660.     elseif state.JugMode.value == 'AmigoSabotender' or state.JugMode.value == 'Sun Water' then
  1661.         JugInfo = 'Sun Water'
  1662.     elseif state.JugMode.value == 'NurseryNazuna' or state.JugMode.value == 'Dancing Herbal Broth' or state.JugMode.value == 'D. Herbal Broth' then
  1663.         JugInfo = 'D. Herbal Broth'
  1664.     elseif state.JugMode.value == 'CraftyClyvonne' or state.JugMode.value == 'Cunning Brain Broth' or state.JugMode.value == 'Cng. Brain Broth' then
  1665.         JugInfo = 'Cng. Brain Broth'
  1666.     elseif state.JugMode.value == 'PrestoJulio' or state.JugMode.value == 'Chirping Grasshopper Broth' or state.JugMode.value == 'C. Grass Broth' then
  1667.         JugInfo = 'C. Grass Broth'
  1668.     elseif state.JugMode.value == 'SwiftSieghard' or state.JugMode.value == 'Mellow Bird Broth' or state.JugMode.value == 'Mlw. Bird Broth' then
  1669.         JugInfo = 'Mlw. Bird Broth'
  1670.     elseif state.JugMode.value == 'MailbusterCetas' or state.JugMode.value == 'Goblin Bug Broth' or state.JugMode.value == 'Gob. Bug Broth' then
  1671.         JugInfo = 'Gob. Bug Broth'
  1672.     elseif state.JugMode.value == 'AudaciousAnna' or state.JugMode.value == 'Bubbling Carrion Broth' then
  1673.         JugInfo = 'B. Carrion Broth'
  1674.     elseif state.JugMode.value == 'TurbidToloi' or state.JugMode.value == 'Auroral Broth' then
  1675.         JugInfo = 'Auroral Broth'
  1676.     elseif state.JugMode.value == 'SlipperySilas' or state.JugMode.value == 'Wormy Broth' then
  1677.         JugInfo = 'Wormy Broth'
  1678.     elseif state.JugMode.value == 'LuckyLulush' or state.JugMode.value == 'Lucky Carrot Broth' or state.JugMode.value == 'L. Carrot Broth' then
  1679.         JugInfo = 'L. Carrot Broth'
  1680.     elseif state.JugMode.value == 'DipperYuly' or state.JugMode.value == 'Wool Grease' then
  1681.         JugInfo = 'Wool Grease'
  1682.     elseif state.JugMode.value == 'FlowerpotMerle' or state.JugMode.value == 'Vermihumus' then
  1683.         JugInfo = 'Vermihumus'
  1684.     elseif state.JugMode.value == 'DapperMac' or state.JugMode.value == 'Briny Broth' then
  1685.         JugInfo = 'Briny Broth'
  1686.     elseif state.JugMode.value == 'DiscreetLouise' or state.JugMode.value == 'Deepbed Soil' then
  1687.         JugInfo = 'Deepbed Soil'
  1688.     elseif state.JugMode.value == 'FatsoFargann' or state.JugMode.value == 'Curdled Plasma Broth' or state.JugMode.value == 'C. Plasma Broth' then
  1689.         JugInfo = 'C. Plasma Broth'
  1690.     elseif state.JugMode.value == 'FaithfulFalcorr' or state.JugMode.value == 'Lucky Broth' then
  1691.         JugInfo = 'Lucky Broth'
  1692.     elseif state.JugMode.value == 'BugeyedBroncha' or state.JugMode.value == 'Savage Mole Broth' or state.JugMode.value == 'Svg. Mole Broth' then
  1693.         JugInfo = 'Svg. Mole Broth'
  1694.     elseif state.JugMode.value == 'BloodclawShasra' or state.JugMode.value == 'Razor Brain Broth' or state.JugMode.value == 'Rzr. Brain Broth' then
  1695.         JugInfo = 'Rzr. Brain Broth'
  1696.     elseif state.JugMode.value == 'GorefangHobs' or state.JugMode.value == 'Burning Carrion Broth' then
  1697.         JugInfo = 'B. Carrion Broth'
  1698.     elseif state.JugMode.value == 'GooeyGerard' or state.JugMode.value == 'Cloudy Wheat Broth' or state.JugMode.value == 'Cl. Wheat Broth' then
  1699.         JugInfo = 'Cl. Wheat Broth'
  1700.     elseif state.JugMode.value == 'CrudeRaphie' or state.JugMode.value == 'Shadowy Broth' then
  1701.         JugInfo = 'Shadowy Broth'
  1702.     elseif state.JugMode.value == 'DroopyDortwin' or state.JugMode.value == 'Swirling Broth' then
  1703.         JugInfo = 'Swirling Broth'
  1704.     elseif state.JugMode.value == 'PonderingPeter' or state.JugMode.value == 'Viscous Broth' or state.JugMode.value == 'Vis. Broth' then
  1705.         JugInfo = 'Vis. Broth'
  1706.     elseif state.JugMode.value == 'SunburstMalfik' or state.JugMode.value == 'Shimmering Broth' then
  1707.         JugInfo = 'Shimmering Broth'
  1708.     elseif state.JugMode.value == 'AgedAngus' or state.JugMode.value == 'Fermented Broth' or state.JugMode.value == 'Ferm. Broth' then
  1709.         JugInfo = 'Ferm. Broth'
  1710.     elseif state.JugMode.value == 'WarlikePatrick' or state.JugMode.value == 'Livid Broth' then
  1711.         JugInfo = 'Livid Broth'
  1712.     elseif state.JugMode.value == 'ScissorlegXerin' or state.JugMode.value == 'Spicy Broth' then
  1713.         JugInfo = 'Spicy Broth'
  1714.     elseif state.JugMode.value == 'BouncingBertha' or state.JugMode.value == 'Bubbly Broth' then
  1715.         JugInfo = 'Bubbly Broth'
  1716.     elseif state.JugMode.value == 'RhymingShizuna' or state.JugMode.value == 'Lyrical Broth' then
  1717.         JugInfo = 'Lyrical Broth'
  1718.     elseif state.JugMode.value == 'AttentiveIbuki' or state.JugMode.value == 'Salubrious Broth' then
  1719.         JugInfo = 'Salubrious Broth'
  1720.     elseif state.JugMode.value == 'SwoopingZhivago' or state.JugMode.value == 'Windy Greens' then
  1721.         JugInfo = 'Windy Greens'
  1722.     elseif state.JugMode.value == 'AmiableRoche' or state.JugMode.value == 'Airy Broth' then
  1723.         JugInfo = 'Airy Broth'
  1724.     elseif state.JugMode.value == 'HeraldHenry' or state.JugMode.value == 'Translucent Broth' or state.JugMode.value == 'Trans. Broth' then
  1725.         JugInfo = 'Trans. Broth'
  1726.     elseif state.JugMode.value == 'BrainyWaluis' or state.JugMode.value == 'Crumbly Soil' then
  1727.         JugInfo = 'Crumbly Soil'
  1728.     elseif state.JugMode.value == 'HeadbreakerKen' or state.JugMode.value == 'Blackwater Broth' then
  1729.         JugInfo = 'Blackwater Broth'
  1730.     elseif state.JugMode.value == 'RedolentCandi' or state.JugMode.value == 'Electrified Broth' then
  1731.         JugInfo = 'Electrified Broth'
  1732.     elseif state.JugMode.value == 'AlluringHoney' or state.JugMode.value == 'Bug-Ridden Broth' then
  1733.         JugInfo = 'Bug-Ridden Broth'
  1734.     elseif state.JugMode.value == 'CaringKiyomaro' or state.JugMode.value == 'Fizzy Broth' then
  1735.         JugInfo = 'Fizzy Broth'
  1736.     elseif state.JugMode.value == 'VivaciousVickie' or state.JugMode.value == 'Tantalizing Broth' or state.JugMode.value == 'Tant. Broth' then
  1737.         JugInfo = 'Tant. Broth'
  1738.     elseif state.JugMode.value == 'HurlerPercival' or state.JugMode.value == 'Pale Sap' then
  1739.         JugInfo = 'Pale Sap'
  1740.     elseif state.JugMode.value == 'BlackbeardRandy' or state.JugMode.value == 'Meaty Broth' then
  1741.         JugInfo = 'Meaty Broth'
  1742.     elseif state.JugMode.value == 'GenerousArthur' or state.JugMode.value == 'Dire Broth' then
  1743.         JugInfo = 'Dire Broth'
  1744.     elseif state.JugMode.value == 'ThreestarLynn' or state.JugMode.value == 'Muddy Broth' then
  1745.         JugInfo = 'Muddy Broth'
  1746.     elseif state.JugMode.value == 'BraveHeroGlenn' or state.JugMode.value == 'Wispy Broth' then
  1747.         JugInfo = 'Wispy Broth'
  1748.     elseif state.JugMode.value == 'SharpwitHermes' or state.JugMode.value == 'Saline Broth' then
  1749.         JugInfo = 'Saline Broth'
  1750.     elseif state.JugMode.value == 'ColibriFamiliar' or state.JugMode.value == 'Sugary Broth' then
  1751.         JugInfo = 'Sugary Broth'
  1752.     elseif state.JugMode.value == 'ChoralLeera' or state.JugMode.value == 'Glazed Broth' then
  1753.         JugInfo = 'Glazed Broth'
  1754.     elseif state.JugMode.value == 'SpiderFamiliar' or state.JugMode.value == 'Sticky Webbing' then
  1755.         JugInfo = 'Sticky Webbing'
  1756.     elseif state.JugMode.value == 'GussyHachirobe' or state.JugMode.value == 'Slimy Webbing' then
  1757.         JugInfo = 'Slimy Webbing'
  1758.     elseif state.JugMode.value == 'AcuexFamiliar' or state.JugMode.value == 'Poisonous Broth' then
  1759.         JugInfo = 'Poisonous Broth'
  1760.     elseif state.JugMode.value == 'FluffyBredo' or state.JugMode.value == 'Venomous Broth' then
  1761.         JugInfo = 'Venomous Broth'
  1762.     elseif state.JugMode.value == 'SuspiciousAlice' or state.JugMode.value == 'Furious Broth' then
  1763.         JugInfo = 'Furious Broth'
  1764.     elseif state.JugMode.value == 'AnklebiterJedd' or state.JugMode.value == 'Crackling Broth' then
  1765.         JugInfo = 'Crackling Broth'
  1766.     elseif state.JugMode.value == 'FleetReinhard' or state.JugMode.value == 'Rapid Broth' then
  1767.         JugInfo = 'Rapid Broth'
  1768.     elseif state.JugMode.value == 'CursedAnnabelle' or state.JugMode.value == 'Creepy Broth' then
  1769.         JugInfo = 'Creepy Broth'
  1770.     elseif state.JugMode.value == 'SurgingStorm' or state.JugMode.value == 'Insipid Broth' then
  1771.         JugInfo = 'Insipid Broth'
  1772.     elseif state.JugMode.value == 'SubmergedIyo' or state.JugMode.value == 'Deepwater Broth' then
  1773.         JugInfo = 'Deepwater Broth'
  1774.     elseif state.JugMode.value == 'MosquitoFamiliar' or state.JugMode.value == 'Wetlands Broth' then
  1775.         JugInfo = 'Wetlands Broth'
  1776.     elseif state.JugMode.value == 'Left-HandedYoko' or state.JugMode.value == 'Heavenly Broth' then
  1777.         JugInfo = 'Heavenly Broth'
  1778.     elseif state.JugMode.value == 'SweetCaroline' or state.JugMode.value == 'Aged Humus' then
  1779.         JugInfo = 'Aged Humus'
  1780.     elseif state.JugMode.value == 'WeevilFamiliar' or state.JugMode.value == 'Pristine Sap' then
  1781.         JugInfo = 'Pristine Sap'
  1782.     elseif state.JugMode.value == 'StalwartAngelin' or state.JugMode.value == 'Truly Pristine Sap' or state.JugMode.value == 'T. Pristine Sap' then
  1783.         JugInfo = 'Truly Pristine Sap'
  1784.     elseif state.JugMode.value == 'P.CrabFamiliar' or state.JugMode.value == 'Rancid Broth' then
  1785.         JugInfo = 'Rancid Broth'
  1786.     elseif state.JugMode.value == 'JovialEdwin' or state.JugMode.value == 'Pungent Broth' then
  1787.         JugInfo = 'Pungent Broth'
  1788.     elseif state.JugMode.value == 'Y.BeetleFamiliar' or state.JugMode.value == 'Zestful Sap' then
  1789.         JugInfo = 'Zestful Sap'
  1790.     elseif state.JugMode.value == 'EnergeticSefina' or state.JugMode.value == 'Gassy Sap' then
  1791.         JugInfo = 'Gassy Sap'
  1792.     elseif state.JugMode.value == 'LynxFamiliar' or state.JugMode.value == 'Frizzante Broth' then
  1793.         JugInfo = 'Frizzante Broth'
  1794.     elseif state.JugMode.value == 'VivaciousGaston' or state.JugMode.value == 'Spumante Broth' then
  1795.         JugInfo = 'Spumante Broth'
  1796.     elseif state.JugMode.value == 'Hip.Familiar' or state.JugMode.value == 'Turpid Broth' then
  1797.         JugInfo = 'Turpid Broth'
  1798.     elseif state.JugMode.value == 'DaringRoland' or state.JugMode.value == 'Feculent Broth' then
  1799.         JugInfo = 'Feculent Broth'
  1800.     elseif state.JugMode.value == 'SlimeFamiliar' or state.JugMode.value == 'Decaying Broth' then
  1801.         JugInfo = 'Decaying Broth'
  1802.     elseif state.JugMode.value == 'SultryPatrice' or state.JugMode.value == 'Putrescent Broth' then
  1803.         JugInfo = 'Putrescent Broth'
  1804.     end
  1805. end
  1806.  
  1807. function pet_info_update()
  1808.     if pet.isvalid then
  1809.         PetName = pet.name
  1810.  
  1811.         if pet.name == 'DroopyDortwin' or pet.name == 'PonderingPeter' or pet.name == 'HareFamiliar' or pet.name == 'KeenearedSteffi' then
  1812.             PetInfo = "Rabbit, Beast";PetJob = 'Warrior';ReadyMoveOne = 'Foot Kick';ReadyMoveTwo = 'Whirl Claws';ReadyMoveThree = 'Wild Carrot';ReadyMoveFour = 'Dust Cloud'
  1813.         elseif pet.name == 'LuckyLulush' then
  1814.             PetInfo = "Rabbit, Beast";PetJob = 'Warrior';ReadyMoveOne = 'Foot Kick';ReadyMoveTwo = 'Whirl Claws';ReadyMoveThree = 'Wild Carrot';ReadyMoveFour = 'Snow Cloud'
  1815.         elseif pet.name == 'SunburstMalfik' or pet.name == 'AgedAngus' or pet.name == 'HeraldHenry' or pet.name == 'CrabFamiliar' or pet.name == 'CourierCarrie' then
  1816.             PetInfo = "Crab, Aquan";PetJob = 'Paladin';ReadyMoveOne = 'Big Scissors';ReadyMoveTwo = 'Scissor Guard';ReadyMoveThree = 'Bubble Curtain';ReadyMoveFour = 'Metallic Body'
  1817.         elseif pet.name == 'P.CrabFamiliar' or pet.name == 'JovialEdwin' then
  1818.             PetInfo = "Barnacle Crab, Aquan";PetJob = 'Paladin';ReadyMoveOne = 'Mega Scissors';ReadyMoveTwo = 'Venom Shower';ReadyMoveThree = 'Bubble Curtain';ReadyMoveFour = 'Metallic Body'
  1819.         elseif pet.name == 'WarlikePatrick' or pet.name == 'LizardFamiliar' or pet.name == 'ColdbloodComo' or pet.name == 'AudaciousAnna' then
  1820.             PetInfo = "Lizard, Lizard";PetJob = 'Warrior';ReadyMoveOne = 'Tail Blow';ReadyMoveTwo = 'Fireball';ReadyMoveThree = 'Brain Crush';ReadyMoveFour = 'Blockhead'
  1821.         elseif pet.name == 'ScissorlegXerin' or pet.name == 'BouncingBertha' then
  1822.             PetInfo = "Chapuli, Vermin";PetJob = 'Warrior';ReadyMoveOne = 'Sensilla Blades';ReadyMoveTwo = 'Tegmina Buffet';ReadyMoveThree = 'Tegmina Buffet';ReadyMoveFour = 'Tegmina Buffet'
  1823.         elseif pet.name == 'RhymingShizuna' or pet.name == 'SheepFamiliar' or pet.name == 'LullabyMelodia' or pet.name == 'NurseryNazuna' then
  1824.             PetInfo = "Sheep, Beast";PetJob = 'Warrior';ReadyMoveOne = 'Sheep Charge';ReadyMoveTwo = 'Rage';ReadyMoveThree = 'Sheep Song';ReadyMoveFour = 'Lamb Chop'
  1825.         elseif pet.name == 'AttentiveIbuki' or pet.name == 'SwoopingZhivago' then
  1826.             PetInfo = "Tulfaire, Bird";PetJob = 'Warrior';ReadyMoveOne = 'Swooping Frenzy';ReadyMoveTwo = 'Pentapeck';ReadyMoveThree = 'Molting Plumage';ReadyMoveFour = 'Molting Plumage'
  1827.         elseif pet.name == 'AmiableRoche' or pet.name == 'TurbidToloi' then
  1828.             PetInfo = "Pugil, Aquan";PetJob = 'Warrior';ReadyMoveOne = 'Recoil Dive';ReadyMoveTwo = 'Water Wall';ReadyMoveThree = 'Intimidate';ReadyMoveFour = 'Intimidate'
  1829.         elseif pet.name == 'BrainyWaluis' or pet.name == 'FunguarFamiliar' or pet.name == 'DiscreetLouise' then
  1830.             PetInfo = "Funguar, Plantoid";PetJob = 'Warrior';ReadyMoveOne = 'Frogkick';ReadyMoveTwo = 'Spore';ReadyMoveThree = 'Silence Gas';ReadyMoveFour = 'Dark Spore'
  1831.         elseif pet.name == 'HeadbreakerKen' or pet.name == 'MayflyFamiliar' or pet.name == 'ShellbusterOrob' or pet.name == 'MailbusterCetas' then
  1832.             PetInfo = "Fly, Vermin";PetJob = 'Warrior';ReadyMoveOne = 'Somersault';ReadyMoveTwo = 'Cursed Sphere';ReadyMoveThree = 'Venom';ReadyMoveFour = 'Venom'
  1833.         elseif pet.name == 'RedolentCandi' or pet.name == 'AlluringHoney' then
  1834.             PetInfo = "Snapweed, Plantoid";PetJob = 'Warrior';ReadyMoveOne = 'Tickling Tendrils';ReadyMoveTwo = 'Stink Bomb';ReadyMoveThree = 'Nectarous Deluge';ReadyMoveFour = 'Nepenthic Plunge'
  1835.         elseif pet.name == 'CaringKiyomaro' or pet.name == 'VivaciousVickie' then
  1836.             PetInfo = "Raaz, Beast";PetJob = 'Monk';ReadyMoveOne = 'Sweeping Gouge';ReadyMoveTwo = 'Zealous Snort';ReadyMoveThree = 'Zealous Snort';ReadyMoveFour = 'Zealous Snort'
  1837.         elseif pet.name == 'HurlerPercival' or pet.name == 'BeetleFamiliar' or pet.name == 'PanzerGalahad' then
  1838.             PetInfo = "Beetle, Vermin";PetJob = 'Paladin';ReadyMoveOne = 'Power Attack';ReadyMoveTwo = 'Rhino Attack';ReadyMoveThree = 'Hi-Freq Field';ReadyMoveFour = 'Rhino Guard'
  1839.         elseif pet.name == 'Y.BeetleFamilia' or pet.name == 'EnergizedSefina' then
  1840.             PetInfo = "Beetle (Horn), Vermin";PetJob = 'Paladin';ReadyMoveOne = 'Rhinowrecker';ReadyMoveTwo = 'Hi-Freq Field';ReadyMoveThree = 'Rhino Attack';ReadyMoveFour = 'Rhino Guard'
  1841.         elseif pet.name == 'BlackbeardRandy' or pet.name == 'TigerFamiliar' or pet.name == 'SaberSiravarde' or pet.name == 'GorefangHobs' then
  1842.             PetInfo = "Tiger, Beast";PetJob = 'Warrior';ReadyMoveOne = 'Razor Fang';ReadyMoveTwo = 'Crossthrash';ReadyMoveThree = 'Roar';ReadyMoveFour = 'Predatory Glare'
  1843.         elseif pet.name == 'ColibriFamiliar' or pet.name == 'ChoralLeera' then
  1844.             PetInfo = "Colibri, Bird";PetJob = 'Red Mage';ReadyMoveOne = 'Pecking Flurry';ReadyMoveTwo = 'Pecking Flurry';ReadyMoveThree = 'Pecking Flurry';ReadyMoveFour = 'Pecking Flurry'
  1845.         elseif pet.name == 'SpiderFamiliar' or pet.name == 'GussyHachirobe' then
  1846.             PetInfo = "Spider, Vermin";PetJob = 'Warrior';ReadyMoveOne = 'Sickle Slash';ReadyMoveTwo = 'Acid Spray';ReadyMoveThree = 'Spider Web';ReadyMoveFour = 'Spider Web'
  1847.         elseif pet.name == 'GenerousArthur' or pet.name == 'GooeyGerard' then
  1848.             PetInfo = "Slug, Amorph";PetJob = 'Warrior';ReadyMoveOne = 'Purulent Ooze';ReadyMoveTwo = 'Corrosive Ooze';ReadyMoveThree = 'Corrosive Ooze';ReadyMoveFour = 'Corrosive Ooze'
  1849.         elseif pet.name == 'ThreestarLynn' or pet.name == 'DipperYuly' then
  1850.             PetInfo = "Ladybug, Vermin";PetJob = 'Thief';ReadyMoveOne = 'Spiral Spin';ReadyMoveTwo = 'Sudden Lunge';ReadyMoveThree = 'Noisome Powder';ReadyMoveFour = 'Noisome Powder'
  1851.         elseif pet.name == 'SharpwitHermes' or pet.name == 'SweetCaroline' or pet.name == 'FlowerpotBill' or pet.name == 'FlowerpotBen' or pet.name == 'Homunculus' or pet.name == 'FlowerpotMerle' then
  1852.             PetInfo = "Mandragora, Plantoid";PetJob = 'Monk';ReadyMoveOne = 'Head Butt';ReadyMoveTwo = 'Leaf Dagger';ReadyMoveThree = 'Wild Oats';ReadyMoveFour = 'Scream'
  1853.         elseif pet.name == 'AcuexFamiliar' or pet.name == 'FluffyBredo' then
  1854.             PetInfo = "Acuex, Amorph";PetJob = 'Black Mage';ReadyMoveOne = 'Foul Waters';ReadyMoveTwo = 'Pestilent Plume';ReadyMoveThree = 'Pestilent Plume';ReadyMoveFour = 'Pestilent Plume'
  1855.         elseif pet.name == 'FlytrapFamiliar' or pet.name == 'VoraciousAudrey' or pet.name == 'PrestoJulio' then
  1856.             PetInfo = "Flytrap, Plantoid";PetJob = 'Warrior';ReadyMoveOne = 'Soporific';ReadyMoveTwo = 'Palsy Pollen';ReadyMoveThree = 'Gloeosuccus';ReadyMoveFour = 'Gloeosuccus'
  1857.         elseif pet.name == 'EftFamiliar' or pet.name == 'AmbusherAllie' or pet.name == 'BugeyedBroncha' or pet.name == 'SuspiciousAlice' then
  1858.             PetInfo = "Eft, Lizard";PetJob = 'Warrior';ReadyMoveOne = 'Nimble Snap';ReadyMoveTwo = 'Cyclotail';ReadyMoveThree = 'Geist Wall';ReadyMoveFour = 'Numbing Noise'
  1859.         elseif pet.name == 'AntlionFamiliar' or pet.name == 'ChopsueyChucky' or pet.name == 'CursedAnnabelle' then
  1860.             PetInfo = "Antlion, Vermin";PetJob = 'Warrior';ReadyMoveOne = 'Mandibular Bite';ReadyMoveTwo = 'Venom Spray';ReadyMoveThree = 'Sandblast';ReadyMoveFour = 'Sandpit'
  1861.         elseif pet.name == 'MiteFamiliar' or pet.name == 'LifedrinkerLars' or pet.name == 'AnklebiterJedd' then
  1862.             PetInfo = "Diremite, Vermin";PetJob = 'Dark Knight';ReadyMoveOne = 'Double Claw';ReadyMoveTwo = 'Spinning Top';ReadyMoveThree = 'Filamented Hold';ReadyMoveFour = 'Grapple'
  1863.         elseif pet.name == 'AmigoSabotender' then
  1864.             PetInfo = "Cactuar, Plantoid";PetJob = 'Warrior';ReadyMoveOne = 'Needle Shot';ReadyMoveTwo = '??? Needles';ReadyMoveThree = '??? Needles';ReadyMoveFour = '??? Needles'
  1865.         elseif pet.name == 'CraftyClyvonne' then
  1866.             PetInfo = "Coeurl, Beast";PetJob = 'Warrior';ReadyMoveOne = 'Blaster';ReadyMoveTwo = 'Chaotic Eye';ReadyMoveThree = 'Chaotic Eye';ReadyMoveFour = 'Chaotic Eye'
  1867.         elseif pet.name == 'BloodclawShasra' then
  1868.             PetInfo = "Lynx, Beast";PetJob = 'Warrior';ReadyMoveOne = 'Blaster';ReadyMoveTwo = 'Charged Whisker';ReadyMoveThree = 'Chaotic Eye';ReadyMoveFour = 'Chaotic Eye'
  1869.         elseif pet.name == 'LynxFamiliar' or pet.name == 'VivaciousGaston' then
  1870.             PetInfo = "Collared Lynx, Beast";PetJob = 'Warrior';ReadyMoveOne = 'Frenzied Rage';ReadyMoveTwo = 'Charged Whisker';ReadyMoveThree = 'Chaotic Eye';ReadyMoveFour = 'Blaster'
  1871.         elseif pet.name == 'SwiftSieghard' or pet.name == 'FleetReinhard' then
  1872.             PetInfo = "Raptor, Lizard";PetJob = 'Warrior';ReadyMoveOne = 'Scythe Tail';ReadyMoveTwo = 'Ripper Fang';ReadyMoveThree = 'Chomp Rush';ReadyMoveFour = 'Chomp Rush'
  1873.         elseif pet.name == 'DapperMac' or pet.name == 'SurgingStorm' or pet.name == 'SubmergedIyo' then
  1874.             PetInfo = "Apkallu, Bird";PetJob = 'Monk';ReadyMoveOne = 'Beak Lunge';ReadyMoveTwo = 'Wing Slap';ReadyMoveThree = 'Wing Slap';ReadyMoveFour = 'Wing Slap'
  1875.         elseif pet.name == 'FatsoFargann' then
  1876.             PetInfo = "Leech, Amorph";PetJob = 'Warrior';ReadyMoveOne = 'Suction';ReadyMoveTwo = 'TP Drainkiss';ReadyMoveThree = 'Drainkiss';ReadyMoveFour = 'Acid Mist'
  1877.         elseif pet.name == 'Hip.Familiar' or pet.name == 'DaringRoland' or pet.name == 'FaithfulFalcorr' then
  1878.             PetInfo = "Hippogryph, Bird";PetJob = 'Thief';ReadyMoveOne = 'Hoof Volley';ReadyMoveTwo = 'Fantod';ReadyMoveThree = 'Nihility Song';ReadyMoveFour = 'Back Heel'
  1879.         elseif pet.name == 'CrudeRaphie' then
  1880.             PetInfo = "Adamantoise, Lizard";PetJob = 'Paladin';ReadyMoveOne = 'Tortoise Stomp';ReadyMoveTwo = 'Harden Shell';ReadyMoveThree = 'Aqua Breath';ReadyMoveFour = 'Aqua Breath'
  1881.         elseif pet.name == 'MosquitoFamilia' or pet.name == 'Left-HandedYoko' then
  1882.             PetInfo = "Mosquito, Vermin";PetJob = 'Dark Knight';ReadyMoveOne = 'Infected Leech';ReadyMoveTwo = 'Gloom Spray';ReadyMoveThree = 'Gloom Spray';ReadyMoveFour = 'Gloom Spray'
  1883.         elseif pet.name == 'WeevilFamiliar' or pet.name == 'StalwartAngelin' then
  1884.             PetInfo = "Weevil, Vermin";PetJob = 'Thief';ReadyMoveOne = 'Disembowel';ReadyMoveTwo = 'Extirpating Salvo';ReadyMoveThree = 'Extirpating Salvo';ReadyMoveFour = 'Extirpating Salvo'
  1885.         elseif pet.name == 'SlimeFamiliar' or pet.name == 'SultryPatrice' then
  1886.             PetInfo = "Slime, Amorph";PetJob = 'Warrior';ReadyMoveOne = 'Fluid Toss';ReadyMoveTwo = 'Fluid Spread';ReadyMoveThree = 'Digest';ReadyMoveFour = 'Digest'
  1887.         end
  1888.     else
  1889.         PetName = 'None';PetJob = 'None';PetInfo = 'None';ReadyMoveOne = 'None';ReadyMoveTwo = 'None';ReadyMoveThree = 'None';ReadyMoveFour = 'None'
  1890.     end
  1891. end
  1892.  
  1893. function pet_only_equip_handling()
  1894.     if player.status == 'Engaged' and state.AxeMode.value == 'PetOnly' then
  1895.         if player.sub_job == 'NIN' or player.sub_job == 'DNC' then
  1896.             if state.DefenseMode.value == "Physical" then
  1897.                 equip(sets.defense.DWNE[state.PhysicalDefenseMode.value])
  1898.             elseif state.DefenseMode.value == "Magical" then
  1899.                 equip(sets.defense.DWNE[state.MagicalDefenseMode.value])
  1900.             else
  1901.                 if pet.status == "Engaged" then
  1902.                     equip(sets.idle.DWNE.PetEngaged)
  1903.                 else
  1904.                     equip(sets.idle.DWNE)
  1905.                 end
  1906.             end
  1907.         else
  1908.             if state.DefenseMode.value == "Physical" then
  1909.                 equip(sets.defense.NE[state.PhysicalDefenseMode.value])
  1910.             elseif state.DefenseMode.value == "Magical" then
  1911.                 equip(sets.defense.NE[state.MagicalDefenseMode.value])
  1912.             else
  1913.                 if pet.status == "Engaged" then
  1914.                     equip(sets.idle.NE.PetEngaged)
  1915.                 else
  1916.                     equip(sets.idle.NE)
  1917.                 end
  1918.             end
  1919.         end
  1920.     end
  1921. end
  1922.  
  1923. function pet_buff_timer(spell)
  1924.     if spell.english == 'Reward' then
  1925.         send_command('timers c "Pet: Regen" 180 down '..RewardRegenIcon..'')
  1926.     elseif spell.english == 'Spur' then
  1927.         send_command('timers c "Pet: Spur" 90 down '..SpurIcon..'')
  1928.     elseif spell.english == 'Run Wild' then
  1929.         send_command('timers c "'..spell.english..'" '..RunWildDuration..' down '..RunWildIcon..'')
  1930.     end
  1931. end
  1932.  
  1933. function clear_pet_buff_timers()
  1934.     send_command('timers c "Pet: Regen" 0 down '..RewardRegenIcon..'')
  1935.     send_command('timers c "Pet: Spur" 0 down '..SpurIcon..'')
  1936.     send_command('timers c "Run Wild" 0 down '..RunWildIcon..'')
  1937. end
  1938.  
  1939. function display_mode_info()
  1940.     if DisplayModeInfo == 'true' and DisplayTrue == 1 then
  1941.         local x = TextBoxX
  1942.         local y = TextBoxY
  1943.         send_command('text AccuracyText create Acc. Mode: '..state.OffenseMode.value..'')
  1944.         send_command('text AccuracyText pos '..x..' '..y..'')
  1945.         send_command('text AccuracyText size '..TextSize..'')
  1946.         y = y + (TextSize + 6)
  1947.         send_command('text CorrelationText create Corr. Mode: '..state.CorrelationMode.value..'')
  1948.         send_command('text CorrelationText pos '..x..' '..y..'')
  1949.         send_command('text CorrelationText size '..TextSize..'')
  1950.         y = y + (TextSize + 6)
  1951.         send_command('text AxeModeText create Axe Mode: '..state.AxeMode.value..'')
  1952.         send_command('text AxeModeText pos '..x..' '..y..'')
  1953.         send_command('text AxeModeText size '..TextSize..'')
  1954.         y = y + (TextSize + 6)
  1955.         send_command('text JugPetText create Jug Mode: '..state.JugMode.value..'')
  1956.         send_command('text JugPetText pos '..x..' '..y..'')
  1957.         send_command('text JugPetText size '..TextSize..'')
  1958.         DisplayTrue = DisplayTrue - 1
  1959.     end
  1960. end
  1961.  
  1962. function update_display_mode_info()
  1963.     if DisplayModeInfo == 'true' then
  1964.         send_command('text AccuracyText text Acc. Mode: '..state.OffenseMode.value..'')
  1965.         send_command('text CorrelationText text Corr. Mode: '..state.CorrelationMode.value..'')
  1966.         send_command('text AxeModeText text Axe Mode: '..state.AxeMode.value..'')
  1967.         send_command('text JugPetText text Jug Mode: '..state.JugMode.value..'')
  1968.     end
  1969. end
  1970.  
  1971. function checkblocking(spell)
  1972.     if buffactive.sleep or buffactive.petrification or buffactive.terror then
  1973.         --add_to_chat(3,'Canceling Action - Asleep/Petrified/Terror!')
  1974.         cancel_spell()
  1975.         return
  1976.     end
  1977.     if spell.english == "Double-Up" then
  1978.         if not buffactive["Double-Up Chance"] then
  1979.             add_to_chat(3,'Canceling Action - No ability to Double Up')
  1980.             cancel_spell()
  1981.             return
  1982.         end
  1983.     end
  1984.     if spell.name ~= 'Ranged' and spell.type ~= 'WeaponSkill' and spell.type ~= 'Scholar' and spell.type ~= 'Monster' then
  1985.         if spell.action_type == 'Ability' then
  1986.             if buffactive.Amnesia then
  1987.                 cancel_spell()
  1988.                 add_to_chat(3,'Canceling Ability - Currently have Amnesia')
  1989.                 return
  1990.             else
  1991.                 recasttime = windower.ffxi.get_ability_recasts()[spell.recast_id]
  1992.                 if spell and (recasttime >= 1) then
  1993.                     --add_to_chat(3,'Ability Canceled:'..spell.name..' - Waiting on Recast:(seconds) '..recasttime..'')
  1994.                     cancel_spell()
  1995.                     return
  1996.                 end
  1997.             end
  1998.         end
  1999.     end
  2000.     --if spell.type == 'WeaponSkill' and player.tp < 1000 then
  2001.     --    cancel_spell()
  2002.     --    add_to_chat(3,'Canceled WS:'..spell.name..' - Current TP is less than 1000.')
  2003.     --    return
  2004.     --end
  2005.     --if spell.type == 'WeaponSkill' and buffactive.Amnesia then
  2006.     --    cancel_spell()
  2007.     --    add_to_chat(3,'Canceling Ability - Currently have Amnesia.')
  2008.     --    return     
  2009.     --end
  2010.     --if spell.name == 'Utsusemi: Ichi' and (buffactive['Copy Image (3)'] or buffactive ['Copy Image (4+)']) then
  2011.     --    cancel_spell()
  2012.     --    add_to_chat(3,'Canceling Utsusemi - Already have maximum shadows (3).')
  2013.     --    return
  2014.     --end
  2015.     if spell.type == 'Monster' or spell.name == 'Reward' then
  2016.         if pet.isvalid then
  2017.             if spell.name == 'Fireball' and pet.status ~= "Engaged" then
  2018.                 cancel_spell()
  2019.                 send_command('input /pet Fight <t>')
  2020.                 return
  2021.             end
  2022.             local s = windower.ffxi.get_mob_by_target('me')
  2023.             local pet = windower.ffxi.get_mob_by_target('pet')
  2024.             local PetMaxDistance = 4
  2025.             local pettargetdistance = PetMaxDistance + pet.model_size + s.model_size
  2026.             if pet.model_size > 1.6 then
  2027.                 pettargetdistance = PetMaxDistance + pet.model_size + s.model_size + 0.1
  2028.             end
  2029.             if pet.distance:sqrt() >= pettargetdistance then
  2030.                 --add_to_chat(3,'Canceling: '..spell.name..' - Outside valid JA Distance.')
  2031.                 cancel_spell()
  2032.                 return
  2033.             end
  2034.         else
  2035.             add_to_chat(3,'Canceling: '..spell.name..' - That action requires a pet.')
  2036.             cancel_spell()
  2037.             return
  2038.         end
  2039.     end
  2040.     if spell.name == 'Fight' then
  2041.         if pet.isvalid then
  2042.             local t = windower.ffxi.get_mob_by_target('t') or windower.ffxi.get_mob_by_target('st')
  2043.             local pet = windower.ffxi.get_mob_by_target('pet')
  2044.             local PetMaxDistance = 32
  2045.             local DistanceBetween = ((t.x - pet.x)*(t.x-pet.x) + (t.y-pet.y)*(t.y-pet.y)):sqrt()
  2046.             if DistanceBetween > PetMaxDistance then
  2047.                 --add_to_chat(3,'Canceling: Fight - Replacing with Heel since target is 30 yalms away from pet.')
  2048.                 cancel_spell()
  2049.                 send_command('@wait .5; input /pet Heel <me>')
  2050.                 return
  2051.             end
  2052.         end
  2053.     end
  2054. end
  2055.  
  2056. function get_melee_groups()
  2057.     classes.CustomMeleeGroups:clear()
  2058.  
  2059.     if buffactive['Aftermath: Lv.3'] then
  2060.         classes.CustomMeleeGroups:append('Aftermath')
  2061.     end
  2062. end
  2063.  
  2064. function get_combat_form()
  2065.     if player.sub_job == 'NIN' or player.sub_job == 'DNC' then
  2066.         state.CombatForm:set('DW')
  2067.     else
  2068.         state.CombatForm:reset()
  2069.     end
  2070. end
Add Comment
Please, Sign In to add comment