Guest User

Untitled

a guest
Jun 30th, 2026
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 63.34 KB | None | 0 0
  1. -------------------------------------------------------------------------------------------------------------------
  2. -------------------------------------------------------------------------------------------------------------------
  3. -- Initialization function that defines sets and variables to be used.
  4. -------------------------------------------------------------------------------------------------------------------
  5.  
  6. -- IMPORTANT: Make sure to also get the Mote-Include.lua file (and it's supplementary files) to go with this.
  7.  
  8. -- Also, you'll need the Shortcuts addon to handle the auto-targetting of the custom pact commands.
  9.  
  10. --[[
  11. Custom commands:
  12.  
  13. gs c petweather
  14. Automatically casts the storm appropriate for the current avatar, if possible.
  15.  
  16. gs c siphon
  17. Automatically run the process to: dismiss the current avatar; cast appropriate
  18. weather; summon the appropriate spirit; Elemental Siphon; release the spirit;d
  19. and re-summon the avatar.
  20.  
  21. Will not cast weather you do not have access to.
  22. Will not re-summon the avatar if one was not out in the first place.
  23. Will not release the spirit if it was out before the command was issued.
  24.  
  25. gs c pact [PactType]
  26. Attempts to use the indicated pact type for the current avatar.
  27. PactType can be one of:
  28. cure
  29. curaga
  30. buffOffense
  31. buffDefense
  32. buffSpecial
  33. debuff1
  34. debuff2
  35. sleep
  36. nuke2
  37. nuke4
  38. bp70
  39. bp75 (merits and lvl 75-80 pacts)
  40. astralflow
  41.  
  42. --]]
  43.  
  44.  
  45. -- Initialization function for this job file.
  46. function get_sets()
  47. -- Load and initialize the include file.
  48. include('Mote-Include.lua')
  49. include('organizer-lib')
  50. end
  51.  
  52. organizer_items = {
  53. }
  54.  
  55. -- Setup vars that are user-independent.
  56. function job_setup()
  57. state.Buff["Avatar's Favor"] = buffactive["Avatar's Favor"] or false
  58.  
  59. debuffs = S{"Dia","Dia II","Bio","Bio II","Distract", "Frazzle", "Dispel", "Silence", "Slow", "Paralyze", "Sleep", "Sleep II", "Gravity", "Diaga", "Poison II", "Poison", "Blind", "Bind"}
  60. debuffs_acc = S{"Sleep", "Sleep II", "Bind", "Dispel", "Silence", "Gravity"}
  61. spirits = S{"LightSpirit", "DarkSpirit", "FireSpirit", "EarthSpirit", "WaterSpirit", "AirSpirit", "IceSpirit", "ThunderSpirit"}
  62. avatars = S{"Carbuncle", "Fenrir", "Diabolos", "Ifrit", "Titan", "Leviathan", "Garuda", "Shiva", "Ramuh", "Odin", "Alexander", "Cait Sith"}
  63. meritPacts = S{'Meteor Strike','Heavenly Strike','Wind Blade','Geocrush','Grand Fall','Thunderstorm'}
  64.  
  65. magicalRagePacts = S{
  66. 'Inferno','Earthen Fury','Tidal Wave','Aerial Blast','Diamond Dust','Judgment Bolt','Searing Light','Howling Moon','Ruinous Omen',
  67. 'Fire II','Stone II','Water II','Aero II','Blizzard II','Thunder II',
  68. 'Fire IV','Stone IV','Water IV','Aero IV','Blizzard IV','Thunder IV',
  69. 'Thunderspark','Burning Strike','Meteorite','Nether Blast','Flaming Crush',
  70. 'Meteor Strike','Heavenly Strike','Wind Blade','Geocrush','Grand Fall','Thunderstorm',
  71. 'Holy Mist','Lunar Bay','Night Terror','Level ? Holy','Conflag Strike','Impact','Tornado II'}
  72. astralRagePacts = S{
  73. 'Inferno','Earthen Fury','Tidal Wave','Aerial Blast','Diamond Dust','Judgment Bolt','Searing Light','Howling Moon','Ruinous Omen'}
  74.  
  75. pacts = {}
  76. pacts.cure = {['Carbuncle']='Healing Ruby'}
  77. pacts.curaga = {['Carbuncle']='Healing Ruby II', ['Garuda']='Whispering Wind', ['Leviathan']='Spring Water'}
  78. pacts.buffoffense = {['Carbuncle']='Glittering Ruby', ['Ifrit']='Crimson Howl', ['Garuda']='Hastega', ['Ramuh']='Rolling Thunder',
  79. ['Fenrir']='Ecliptic Growl'}
  80. pacts.buffdefense = {['Carbuncle']='Shining Ruby', ['Shiva']='Frost Armor', ['Garuda']='Aerial Armor', ['Titan']='Earthen Ward',
  81. ['Ramuh']='Lightning Armor', ['Fenrir']='Ecliptic Howl', ['Diabolos']='Noctoshield', ['Cait Sith']='Reraise II'}
  82. pacts.buffspecial = {['Ifrit']='Inferno Howl', ['Garuda']='Fleet Wind', ['Titan']='Earthen Armor', ['Diabolos']='Dream Shroud',
  83. ['Carbuncle']='Soothing Ruby', ['Fenrir']='Heavenward Howl', ['Cait Sith']='Raise II'}
  84. pacts.debuff1 = {['Shiva']='Diamond Storm', ['Ramuh']='Shock Squall', ['Leviathan']='Tidal Roar', ['Fenrir']='Lunar Cry',
  85. ['Diabolos']='Pavor Nocturnus', ['Cait Sith']='Eerie Eye'}
  86. pacts.debuff2 = {['Shiva']='Sleepga', ['Leviathan']='Slowga', ['Fenrir']='Lunar Roar', ['Diabolos']='Somnolence'}
  87. pacts.sleep = {['Shiva']='Sleepga', ['Diabolos']='Nightmare', ['Cait Sith']='Mewing Lullaby'}
  88. pacts.nuke2 = {['Ifrit']='Fire II', ['Shiva']='Blizzard II', ['Garuda']='Aero II', ['Titan']='Stone II',
  89. ['Ramuh']='Thunder II', ['Leviathan']='Water II'}
  90. pacts.nuke4 = {['Ifrit']='Fire IV', ['Shiva']='Blizzard IV', ['Garuda']='Aero IV', ['Titan']='Stone IV',
  91. ['Ramuh']='Thunder IV', ['Leviathan']='Water IV'}
  92. pacts.bp70 = {['Ifrit']='Flaming Crush', ['Shiva']='Rush', ['Garuda']='Predator Claws', ['Titan']='Mountain Buster',
  93. ['Ramuh']='Volt Strike', ['Leviathan']='Spinning Dive', ['Carbuncle']='Meteorite', ['Fenrir']='Eclipse Bite',
  94. ['Diabolos']='Blindside',['Cait Sith']='Regal Gash',['Siren']='Hysteric Assault'}
  95. pacts.bp75 = {['Ifrit']='Meteor Strike', ['Shiva']='Heavenly Strike', ['Garuda']='Wind Blade', ['Titan']='Geocrush',
  96. ['Ramuh']='Thunderstorm', ['Leviathan']='Grand Fall', ['Carbuncle']='Holy Mist', ['Fenrir']='Impact',
  97. ['Diabolos']='Night Terror', ['Cait Sith']='Level ? Holy',['Siren']='Tornado II'}
  98. pacts.astralflow = {['Ifrit']='Inferno', ['Shiva']='Diamond Dust', ['Garuda']='Aerial Blast', ['Titan']='Earthen Fury',
  99. ['Ramuh']='Judgment Bolt', ['Leviathan']='Tidal Wave', ['Carbuncle']='Searing Light', ['Fenrir']='Howling Moon',
  100. ['Diabolos']='Ruinous Omen', ['Cait Sith']="Altana's Favor"}
  101.  
  102. -- Wards table for creating custom timers
  103. wards = {}
  104. -- Base duration for ward pacts.
  105. wards.durations = {
  106. ['Crimson Howl'] = 60, ['Earthen Armor'] = 60, ['Inferno Howl'] = 60, ['Heavenward Howl'] = 60,
  107. ['Rolling Thunder'] = 120, ['Fleet Wind'] = 120,
  108. ['Shining Ruby'] = 180, ['Frost Armor'] = 180, ['Lightning Armor'] = 180, ['Ecliptic Growl'] = 180,
  109. ['Glittering Ruby'] = 180, ['Hastega'] = 180, ['Noctoshield'] = 180, ['Ecliptic Howl'] = 180,
  110. ['Dream Shroud'] = 180, ['Hastega II'] = 180, ['Crystal Blessing'] = 180, ['Soothing Current'] = 180
  111. }
  112. -- Icons to use when creating the custom timer.
  113. wards.icons = {
  114. ['Earthen Armor'] = 'spells/00299.png', -- 00299 for Titan
  115. ['Shining Ruby'] = 'spells/00043.png', -- 00043 for Protect
  116. ['Dream Shroud'] = 'spells/00304.png', -- 00304 for Diabolos
  117. ['Noctoshield'] = 'spells/00106.png', -- 00106 for Phalanx
  118. ['Crimson Howl'] = 'spells/00298.png', -- 00298 for Ifrit
  119. ['Inferno Howl'] = 'spells/00298.png', -- 00298 for Ifrit
  120. ['Soothing Current'] = 'spells/00169.png', -- 00169 for Water Icon
  121. ['Crystal Blessing'] = 'spells/00269.png', -- 00169 for Water Icon
  122. ['Hastega'] = 'spells/00358.png', -- 00358 for Hastega
  123. ['Hastega II'] = 'spells/00358.png', -- 00358 for Hastega
  124. ['Rolling Thunder'] = 'spells/00104.png', -- 00358 for Enthunder
  125. ['Frost Armor'] = 'spells/00250.png', -- 00250 for Ice Spikes
  126. ['Lightning Armor'] = 'spells/00251.png', -- 00251 for Shock Spikes
  127. ['Reraise II'] = 'spells/00135.png', -- 00135 for Reraise
  128. ['Fleet Wind'] = 'abilities/00074.png', --
  129. }
  130. -- Flags for code to get around the issue of slow skill updates.
  131. wards.flag = false
  132. wards.spell = ''
  133.  
  134. end
  135.  
  136.  
  137. -- Setup vars that are user-dependent. Can override this function in a sidecar file.
  138. function user_setup()
  139. -- Options: Override default values
  140. options.OffenseModes = {'Normal', 'Acc'}
  141. options.DefenseModes = {'Normal', 'Pet DT'}
  142. options.WeaponskillModes = {'Normal', 'Overdrive'}
  143. options.CastingModes = {'Normal', 'Resistant'}
  144. options.IdleModes = {'Normal','PDT','Kite'}
  145. options.RestingModes = {'Normal'}
  146. options.PhysicalDefenseModes = {}
  147. options.MagicalDefenseModes = {}
  148.  
  149. state.Defense.PhysicalMode = 'PDT'
  150.  
  151. select_default_macro_book()
  152.  
  153. lock_weapon = 0;
  154.  
  155. send_command('bind f10 gs c weapon_lock_toggle')
  156. send_command('bind f11 gs c fix_gear')
  157.  
  158.  
  159. windower.raw_register_event('zone change', adoulin_body)
  160.  
  161.  
  162. end
  163.  
  164.  
  165. -- Define sets and vars used by this job file.
  166. function init_gear_sets()
  167.  
  168. sets.style = {body="Shomonjijoe +1",head="Carbie Cap"}
  169.  
  170. Lehbrailg_MACC = {name="Lehbrailg +2", augments={'DMG:+14','INT+6','Mag. Acc.+22'}}
  171. Lehbrailg_FC = {name="Lehbrailg +2", augments={'DMG:+9','MND+5','"Fast Cast"+2'}}
  172.  
  173. Grioavolr_TH = {name="Grioavolr", augments={'"Cure" spellcasting time -3%','AGI+1','"Treasure Hunter"+2','Magic Damage +1',}}
  174. Grioavolr_PMATK = {name="Grioavolr", augments={'Blood Pact Dmg.+8','Pet: VIT+9','Pet: Mag. Acc.+18','Pet: "Mag.Atk.Bns."+27',}}
  175. Griovolr_Nuke = {name="Grioavolr", augments={'Rng.Atk.+14','"Mag.Atk.Bns."+30','Accuracy+8','Magic Damage +5',}}
  176.  
  177. Espiritus_MATK = {name="Espiritus", augments={'Enmity-6','Pet: "Mag.Atk.Bns."+30','Pet: Damage taken -4%',}}
  178. Espiritus_MACC = {name="Espiritus", augments={'Summoning magic skill +15','Pet: Mag. Acc.+30','Pet: Damage taken -4%',}}
  179.  
  180. TelchineHat_Siphon = {name="Telchine Cap", augments={'"Elemental Siphon"+35','Pet: Damage taken -4%'}}
  181. TelchineHat_Enhance = {name="Telchine Cap", augments={'Enh. Mag. eff. dur. +10',}}
  182. TelchineHat_Regen = {name="Telchine Cap", augments={'"Regen" potency+3',}}
  183.  
  184. TelchineBody_Siphon = {name="Telchine Chas.", augments={'Pet: Accuracy+15 Pet: Rng. Acc.+15','"Elemental Siphon"+35','Pet: Damage taken -3%'}}
  185. TelchineBody_Regen = {name="Telchine Chas.", augments={'"Regen" potency+3',}}
  186. TelchineBody_Enhance = {name="Telchine Chas.", augments={'Enh. Mag. eff. dur. +9',}}
  187.  
  188. TelchineGloves_Siphon = {name="Telchine Gloves", augments={'Pet: Accuracy+16 Pet: Rng. Acc.+16','"Elemental Siphon"+30','Pet: Damage taken -3%'}}
  189. TelchineGloves_Enhance = {name="Telchine Gloves", augments={'Enh. Mag. eff. dur. +8',}}
  190. TelchineGloves_Regen = {name="Telchine Gloves", augments={'"Regen" potency+3',}}
  191.  
  192. TelchineLegs_Siphon = {name="Telchine Braconi", augments={'Pet: Attack+17 Pet: Rng.Atk.+17','"Elemental Siphon"+35','Pet: Damage taken -4%'}}
  193. TelchineLegs_Enhance = {name="Telchine Braconi", augments={'Enh. Mag. eff. dur. +8',}}
  194. TelchineLegs_Regen = {name="Telchine Braconi", augments={'"Regen" potency+3',}}
  195.  
  196. TelchineBoots_PDT = {name="Telchine Pigaches", augments={'Pet: Attack+14 Pet: Rng.Atk.+14','Pet: "Regen"+3','Pet: Damage taken -4%'}}
  197. TelchineBoots_Enhance = {name="Telchine Pigaches", augments={'Enh. Mag. eff. dur. +9',}}
  198. TelchineBoots_Regen = {name="Telchine Pigaches", augments={'"Regen" potency+3',}}
  199.  
  200.  
  201. Campestres_EVA = {name="Campestres's Cape", 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','Pet: Damage taken -5%'}}
  202. Campestres_PMACC = {name="Campestres's Cape", augments={'Pet: M.Acc.+20 Pet: M.Dmg.+20','Pet: Mag. Acc.+10','Pet: "Regen"+10','Pet: Damage taken -5%',}}
  203. Campestres_FC = {name="Campestres's Cape", augments={'Mag. Acc+20 /Mag. Dmg.+20','"Fast Cast"+10',}}
  204.  
  205. HeliosHat_PMATK = {name="Helios Band", augments={'Pet: "Mag.Atk.Bns."+27','Pet: Crit.hit rate +4','Blood Pact Dmg.+7'}}
  206. HeliosBody_PMATK = {name="Helios Jacket", augments={'Pet: "Mag.Atk.Bns."+28','Pet: Crit.hit rate +4','Blood Pact Dmg.+6'}}
  207. HeliosGloves_PMATK = {name="Helios Gloves", augments={'Pet: "Mag.Atk.Bns."+29','Pet: Crit.hit rate +4','Blood Pact Dmg.+7'}}
  208. HeliosPants_PMATK = {name="Helios Spats", augments={'Pet: "Mag.Atk.Bns."+29','Pet: Crit.hit rate +4','Blood Pact Dmg.+7'}}
  209. HeliosBoots_PMATK = {name="Helios Boots", augments={'Pet: "Mag.Atk.Bns."+26','Pet: Crit.hit rate +4','Blood Pact Dmg.+7'}}
  210.  
  211. HeliosHat_PMACC = {name="Helios Band", augments={'Pet: Mag. Acc.+28','"Blood Boon"+7'}}
  212. HeliosBody_PMACC = {name="Helios Jacket", augments={'Pet: Mag. Acc.+27','"Blood Boon"+6','Summoning magic skill +4'}}
  213. HeliosHands_PMACC = {name="Helios Gloves", augments={'Pet: Mag. Acc.+29','"Blood Boon"+7'}}
  214. HeliosPants_PMACC = {name="Helios Spats", augments={'Pet: Mag. Acc.+30','Blood Pact Dmg.+2'}}
  215. HeliosBoots_PMACC = {name="Helios Boots", augments={'Pet: Mag. Acc.+27','"Blood Boon"+7','Summoning magic skill +4'}}
  216.  
  217. HeliosHat_PATK = {name="Helios Band", augments={'Pet: Attack+30 Pet: Rng.Atk.+30','Pet: "Dbl. Atk."+8','Blood Pact Dmg.+7',}}
  218. HeliosPants_PMelee = {name="Helios Spats", augments={'Pet: Attack+25 Pet: Rng.Atk.+25','Pet: "Dbl. Atk."+7','Blood Pact Dmg.+4'}}
  219. HeliosBoots_PMelee = {name="Helios Boots", augments={'Pet: Attack+30 Pet: Rng.Atk.+30','Pet: "Dbl. Atk."+8','Blood Pact Dmg.+7',}}
  220.  
  221.  
  222. leftDarkRing = {name="Dark Ring",augments={"Phys. dmg. taken -5%","Magic dmg. taken -3%"}}
  223. rightDarkRing = {name="Dark Ring",augments={"Magic dmg. taken -4%","Breath dmg. taken -5%","Phys. dmg. taken -5%"}}
  224. HagondesBoots_MACC = {name="Hagondes Sabots",augments={"Mag. Acc.+21","Phys. dmg. taken -4%"}}
  225. HagondesBoots_MATK = {name="Hagondes Sabots",augments={"Mag.Atk.Bns.+16","Phys. dmg. taken -2%"}}
  226. HagondesBoots_PMACC = {name="Hagondes Sabots",augments={"Phys. dmg. taken -3%","Pet: Mag. Acc.+20"}}
  227. HagondesBoots_PMATK = {name="Hagondes Sabots",augments={"Phys. dmg. taken -3%","Pet:Mag.Atk.Bns+20"}}
  228. --HagondesGloves_MACC = {name="Hagondes Cuffs",augments={"Mag. Acc.+26","Phys. dmg. taken -4%"}}
  229. HagondesGloves_MATK = {name="Hagondes Cuffs",augments={"Mag.Atk.Bns.+29","Phys. dmg. taken -4%"}}
  230. HagondesGloves_PMATK = {name="Hagondes Cuffs",augments={"Phys. dmg. taken -1%","Pet: Mag.Atk.Bns.+9"}}
  231. HagondesGloves_PMACC = {name="Hagondes Cuffs",augments={"Phys. dmg. taken -3%","Pet: Mag. Acc.+20"}}
  232. HagondesHat_PMACC = {name="Hagondes Hat",augments={"Phys. dmg. taken -4%","Pet: Mag. Acc.+22"}}
  233. HagondesHat_MACC = {name="Hagondes Hat",augments={"Mag. Acc.+24","Phys. dmg. taken -3%"}}
  234. HagondesHat_MATK = {name="Hagondes Hat",augments={"Mag.Atk.Bns.+29","Phys. dmg. taken -3%"}}
  235. HagondesHat_PATK = {name="Hagondes Hat",augments={'Phys. dmg. taken -3%','Pet: Attack+23 Pet: Rng.Atk.+23'}}
  236. HagondesHat_PACC = {name="Hagondes Hat",augments={'Phys. dmg. taken -3%','Pet: Accuracy+23 Pet: Rng.Acc.+23'}}
  237. HagondesHat_PMATK = {name="Hagondes Hat",augments={"Phys. dmg. taken -4%","Pet: Mag.Atk.Bns.+20"}}
  238. HagondesGloves_FC = {name="Hagondes Cuffs",augments={"Fast Cast+4","Phys. dmg. taken -3%"}}
  239. HagondesPants_PATK = {name="Hagondes Pants",augments={'Phys. dmg. taken -3%','Pet: Attack+25 Pet: Rng.Atk.+25'}}
  240. HagondesGloves_Perp = {name="Hagondes Cuffs", augments={'Phys. dmg. taken -3%','"Avatar perpetuation cost" -5'}}
  241.  
  242. MerlinicHead_FC = {name="Merlinic Hood", augments={'"Fast Cast"+6','CHR+2',}}
  243. MerlinicHead_Refresh = {name="Merlinic Hood", augments={'"Waltz" potency +3%','Pet: DEX+9','"Refresh"+1','Accuracy+12 Attack+12',}}
  244. MerlinicHead_MATK = {name="Merlinic Hood", augments={'Mag. Acc.+23 "Mag.Atk.Bns."+23','INT+5','Mag. Acc.+14','"Mag.Atk.Bns."+14',}}
  245.  
  246. MerlinicGloves_Refresh = {name="Merlinic Dastanas", augments={'"Waltz" potency +8%','CHR+5','"Refresh"+1','Accuracy+5 Attack+5',}}
  247. MerlinicGloves_TH = {name="Merlinic Dastanas", augments={'Pet: Accuracy+6 Pet: Rng. Acc.+6','Crit.hit rate+2','"Treasure Hunter"+1',}}
  248. MerlinicGloves_BPDmg = {name="Merlinic Dastanas", augments={'Pet: "Mag.Atk.Bns."+17','Blood Pact Dmg.+10','Pet: Mag. Acc.+8',}}
  249. MerlinicGloves_Drain = {name="Merlinic Dastanas", augments={'STR+6','"Drain" and "Aspir" potency +10','Mag. Acc.+8 "Mag.Atk.Bns."+8',}}
  250. MerlinicGloves_PATK = {name="Merlinic Dastanas", augments={'Pet: Attack+28 Pet: Rng.Atk.+28','Blood Pact Dmg.+9','Pet: DEX+4','Pet: Mag. Acc.+15',}}
  251.  
  252. MerlinicLegs_Phalanx = {name="Merlinic Shalwar", augments={'Rng.Atk.+28','Pet: "Store TP"+3','Phalanx +5','Mag. Acc.+16 "Mag.Atk.Bns."+16',}}
  253. MerlinicLegs_Burst = {name="Merlinic Shalwar", augments={'Mag. Acc.+23 "Mag.Atk.Bns."+23','Magic burst dmg.+10%','MND+3','"Mag.Atk.Bns."+5',}}
  254.  
  255. MerlinicBoots_Refresh = {name="Merlinic Crackows", augments={'Pet: DEX+5','Magic dmg. taken -1%','"Refresh"+2',}}
  256. MerlinicBoots_FC = {name="Merlinic Crackows", augments={'Mag. Acc.+29','"Fast Cast"+6','MND+2','"Mag.Atk.Bns."+11',}}
  257. MerlinicBoots_MATK = {name="Merlinic Crackows", augments={'Mag. Acc.+15 "Mag.Atk.Bns."+15','"Occult Acumen"+3','INT+1','Mag. Acc.+15','"Mag.Atk.Bns."+11',}}
  258.  
  259. ApogeeBoots_PMATK = {name="Apogee Pumps +1", augments={'MP+80','Pet: "Mag.Atk.Bns."+35','Blood Pact Dmg.+8',}}
  260. ApogeeBoots_PATK = {name="Apogee Pumps +1", augments={'MP+80','Pet: Attack+35','Blood Pact Dmg.+8',}}
  261.  
  262. Keraunos_MATK = {name="Keraunos",augments={'Pet: "Mag.Atk.Bns."+18','"Conserve MP"+6'}}
  263. Keraunos_MACC = {name="Keraunos", augments={'Pet: Mag. Acc.+17','"Fast Cast"+3'}}
  264. Keraunos_FC = {name="Keraunos", augments={'"Fast Cast"+4'}}
  265. Keraunos_Siphon = {name="Keraunos", augments={'"Elemental Siphon"+25','MP+22'}}
  266. --gear.ElementalRing = "Angha Ring"
  267.  
  268. ConveyanceCape_Skill = {name="Conveyance Cape", augments={'Summoning magic skill +5','Pet: Enmity+10','Blood Pact Dmg.+1'}}
  269. ConveyanceCape_Delay = {name="Conveyance Cape", augments={'Summoning magic skill +2','Pet: Enmity+6','Blood Pact Dmg.+2','Blood Pact ab. del. II -3'}}
  270. ConveyanceCape_BPDMG = {name="Conveyance Cape", augments={'Summoning magic skill +3','Pet: Enmity+15','Blood Pact Dmg.+5'}}
  271.  
  272. sets.nirvanalock = {main="Nirvana",sub="Elan Strap +1"}
  273.  
  274. sets.dontputmeaway = {neck="Stoicheion Medal",feet="Herald's Gaiters",legs="Enticer's Pants"}
  275.  
  276. --------------------------------------
  277. -- Precast Sets
  278. --------------------------------------
  279.  
  280. -- Precast sets to enhance JAs
  281. sets.precast.JA['Astral Flow'] = {head="Glyphic Horn +1"}
  282.  
  283. -- todo, chatoyant script weather day thing
  284. sets.precast.JA['Elemental Siphon'] = {ammo="Esper Stone +1",head=TelchineHat_Siphon,main=Keraunos_Siphon,neck="Hoxne Torque",body=TelchineBody_Siphon,
  285. legs=TelchineLegs_Siphon,feet="Beckoner's Pigaches +1",sub="Vox Grip",hands="Lamassu Mitts +1",back=ConveyanceCape_Skill,
  286. ring1="Evoker's Ring",ring2="Globidonta Ring",ear1="Andoaa Earring",ear2="Lodurr Earring",waist="Lucidity Sash"}
  287.  
  288. sets.precast.JA['Mana Cede'] = {hands="Caller's Bracers +2"}
  289.  
  290. -- Pact delay reduction gear
  291.  
  292.  
  293.  
  294. -- Fast cast sets for spells
  295.  
  296. sets.precast.FC = {main="Pandit's Staff",sub="Clerisy Strap",head=MerlinicHead_FC,body="Inyanga Jubbah +2",
  297. hands=HagondesGloves_FC,legs="Psycloth Lappas",feet=MerlinicBoots_FC,back="Perimede Cape",waist="Witful Belt",
  298. ring1="Lebeche Ring",ring2="Veneficium Ring",neck="Voltsurge Torque",ear1="Malignance Earring",ear2="Loquac. Earring"}
  299.  
  300. sets.precast.FC['Elemental Magic'] = set_combine(sets.precast.FC,{})
  301. sets.precast.FC['Healing Magic'] = set_combine(sets.precast.FC,{main="Vadose Rod",sub="Genbu's Shield"})
  302.  
  303. sets.precast.FC.Cure = set_combine(sets.precast.FC,{main="Vadose Rod",sub={ name="Genbu's Shield", augments={'"Cure" potency +2%','"Cure" spellcasting time -7%'} },legs="Nabu's Shalwar"})
  304. sets.precast.FC.Stoneskin = set_combine(sets.precast.FC,{head="Umuthi Hat",hands="Carapacho Cuffs",waist="Siegel Sash"})
  305.  
  306. sets.precast.FC['Enhancing Magic'] = set_combine(sets.precast.FC,{waist="Siegel Sash"})
  307.  
  308. sets.precast.FC['Summoning Magic'] = set_combine(sets.precast.FC,{hands="Carbuncle's Cuffs"})
  309.  
  310.  
  311. -- Weaponskill sets
  312. -- Default set for any weaponskill that isn't any more specifically defined
  313. sets.precast.WS = {}
  314.  
  315. -- Specific weaponskill sets. Uses the base set if an appropriate WSMod version isn't found.
  316. sets.precast.WS['Myrkr'] = {}
  317.  
  318.  
  319.  
  320. --------------------------------------
  321. -- Midcast sets
  322. --------------------------------------
  323.  
  324. sets.midcast["Apururu (UC)"] = {body="Apururu Unity shirt"}
  325.  
  326.  
  327. sets.midcast.FastRecast = {ammo="Impatiens",head="Nahtirah Hat",body="Inyanga Jubbah +2",
  328. hands="Regimen Mittens",legs=MerlinicLegs_Burst,feet="WN Clomps +1",back=Campestres_FC,waist="Klouskap Sash",
  329. ring2="Prolix Ring",neck="Voltsurge Torque",ear1="Loquac. Earring",ear2="Gifted Earring"}
  330.  
  331. -- 59% cure potencySp
  332. sets.midcast.Cure = {main="Pandit's Staff",sub="Achaq Grip",back="Solemnity Cape",body="Inyanga Jubbah +2",
  333. hands="Inyan. Dastanas +2",ring1="Stikini Ring +1",ring2="Stikini Ring +1",
  334. legs="Vanya Slops",head="Vanya Hood",feet="Vanya Clogs",
  335. neck="Hoxne Torque",ear1="Novia Earring",ear2="Domes. Earring",waist="Channeler's Stone"}
  336.  
  337. sets.midcast.Curaga = sets.midcast.Cure
  338. sets.midcast.CureSelf = set_combine(sets.midcast.Cure,{waist="Gishdubar Sash",neck="Phalaina Locket",ring1="Kunaji Ring",ring2="Asklepian Ring"})
  339.  
  340. -- boon
  341. sets.boon = {head=HeliosHat_PMACC,body=HeliosBody_PMACC,hands=HeliosHands_PMACC,neck="Consummation Torque",
  342. legs="Beckoner's Spats +1",feet=HeliosBoots_PMACC,waist="Lucidty Sash",ear2="Gifted Earring"}
  343.  
  344. sets.midcast['Enhancing Magic'] = {main="Gada",sub="Culminus",body=TelchineBody_Enhance,waist="Embla Sash",ear2="Domes. Earring",
  345. head=TelchineHat_Enhance,hands=TelchineGloves_Enhance,legs=TelchineLegs_Enhance,feet=TelchineBoots_Enhance}
  346.  
  347. sets.midcast.Haste = sets.midcast['Enhancing Magic']
  348.  
  349. sets.midcast.Stoneskin = set_combine(sets.midcast['Enhancing Magic'],{head="Nahtirah Hat",body="Inyanga Jubbah +2",legs="Shedir Seraweels",neck="Nodens Gorget",
  350. waist="Siegel Sash",ear1="Earthcry Earring",ring1="Stikini Ring +1",ring2="Stikini Ring +1"})
  351.  
  352. sets.midcast.Blink = set_combine(sets.midcast['Enhancing Magic'],{head="Nahtirah Hat"})
  353. sets.midcast.Refresh = set_combine(sets.midcast['Enhancing Magic'],{head="Amalric Coif +1",waist="Gishdubar Sash",back="Grapevine Cape",feet="Inspirited Boots"})
  354.  
  355. sets.midcast.Protect = set_combine(sets.midcast['Enhancing Magic'],{ring2="Sheltered Ring"})
  356. sets.midcast.Shell = set_combine(sets.midcast['Enhancing Magic'],{ring2="Sheltered Ring"})
  357.  
  358. sets.midcast.Phalanx = set_combine(sets.midcast['Enhancing Magic'],{main="Gada",sub="Genmei Shield",legs=MerlinicLegs_Phalanx,body="Anhur Robe",
  359. hands="Inyanga Dastanas +2",neck="Hoxne Torque",head="Umuthi Hat",ear1="Andoaa Earring",ring1="Stikini Ring +1",ring2="Stikini Ring +1",
  360. back="Perimede Cape",feet="Regal Pumps +1"})
  361.  
  362. sets.midcast.Aquaveil = set_combine(sets.midcast['Phalanx'],{main="Vadose Rod",sub="Genmei Shield",head="Amalric Coif +1",waist="Emphatikos Rope",legs="Shedir Seraweels"})
  363.  
  364. sets.midcast.Regen = set_combine(sets.midcast['Enhancing Magic'],{main="Bolelabunga",sub="Genmei Shield",head=TelchineHat_Regen,
  365. body=TelchineBody_Regen,hands=TelchineGloves_Regen,legs=TelchineLegs_Regen,feet=TelchineBoots_Regen})
  366.  
  367. sets.midcast.Sneak = set_combine(sets.midcast['Enhancing Magic'],{back="Skulker's Cape"})
  368. sets.midcast.Invisible = sets.midcast.Sneak
  369.  
  370. --sets.conserve = {ear2="Gifted Earring",feet="Umbani Boots"}
  371.  
  372. sets.midcast.debuff = {main="Maxentius",head="Beckoner's Horn +2",body="Vanya Robe",ammo="Hydrocera",
  373. ear1="Malignance Earring",ear2="Gwati Earring",back="Null Shawl",legs=MerlinicLegs_Burst,
  374. waist="Ovate Rope",neck="Hoxne Torque",ring1="Stikini Ring +1",
  375. ring2="Stikini Ring +1",sub="Culminus",hands="Inyanga Dastanas +2",feet="WN Clomps +1"}
  376.  
  377. sets.precast.WS['Garland of Bliss'] = {main="Nirvana",sub="Khonsu",body="Merlinic Jubbah",ammo="Hydrocera",
  378. head=MerlinicHead_MATK,ear1="Malignance Earring",ear2="Gwati Earring",back="Ogapepo Cape",
  379. waist="Refoccilation Stone",neck="Eddy Necklace",legs=MerlinicLegs_Burst,ring1="Stikini Ring +1",ring2="Stikini Ring +1",
  380. hands="Inyanga Dastanas +2",sub="Khonsu",feet="Tali'ah Crackows +2"}
  381.  
  382. sets.midcast.debuff.Resistant = {}
  383. --sets.midcast.debuff.Evasion = {
  384.  
  385. sets.midcast.debuff.int = {head="Amalric Coif +1"}
  386. sets.midcast.debuff.mnd = {main="Daybreak",sub="Culminus"}
  387.  
  388. sets.midcast.Dia = {main=Grioavolr_TH,waist="Chaac Belt",head="White Rarab Cap +1"}
  389. sets.midcast['Dia II'] = sets.midcast.Dia
  390. sets.midcast.Diaga = sets.midcast.Dia
  391. sets.midcast.Stonega = sets.midcast.Dia
  392. sets.midcast.Bio = sets.midcast.Dia
  393. sets.midcast['Bio II'] = sets.midcast.Dia
  394.  
  395. sets.midcast['Elemental Magic'] = {main="Maxentius",body="Merlinic Jubbah",ammo="Hydrocera",
  396. head=MerlinicHead_MATK,ear1="Malignance Earring",ear2="Friomisi Earring",back=gear.ElementalCape,
  397. waist="Refoccilation Stone",neck="Hoxne Torque",legs=MerlinicLegs_Burst,ring1="Stikini Ring +1",ring2=gear.ElementalRing,
  398. hands="WN Mittens +1",sub="Culminus",feet="WN Clomps +1"}
  399.  
  400. sets.midcast['Elemental Magic'].Resistant = {main="Maxentius",body="Merlinic Jubbah",ammo="Hydrocera",
  401. head=MerlinicHead_MATK,ear1="Malignance Earring",ear2="Gwati Earring",back="Toro Cape",
  402. waist="Refoccilation Stone",neck="Hoxne Torque",legs=MerlinicLegs_Burst,ring1="Stikini Ring +1",ring2="Stikini Ring +1",
  403. hands="Inyanga Dastanas +2",sub="Culminus",feet="Tali'ah Crackows +2"}
  404.  
  405.  
  406. --sets.midcast['Aero II'] = set_combine(sets.midcast['Elemental Magic'],{main="Marin Staff",sub="Khonsu"})
  407. --sets.midcast['Aero II'].Resistant = set_combine(sets.midcast['Elemental Magic'].Resistant,{})
  408. sets.midcast['Water II'] = set_combine(sets.midcast['Elemental Magic'],{})
  409. sets.midcast['Water II'].Resistant = set_combine(sets.midcast['Elemental Magic'].Resistant,{})
  410. sets.midcast['Stone II'] = set_combine(sets.midcast['Elemental Magic'],{})
  411. sets.midcast['Stone II'].Resistant = set_combine(sets.midcast['Elemental Magic'].Resistant,{})
  412.  
  413. sets.midcast['Summoning Magic'] = {ammo="Sancus Sachet +1",body="Baayami Robe"}
  414.  
  415. sets.midcast['Atomos'] = set_combine(sets.midcast.FastRecast,{ammo="Sancus Sachet +1"})
  416.  
  417. sets.precast.FC['Impact'] = set_combine(sets.precast.FC,{head=empty,body="Twilight Cloak"})
  418. sets.midcast['Impact'] = set_combine(sets.midcast.debuff,{head=empty,body="Twilight Cloak"})
  419.  
  420. sets.precast.FC['Dispelga'] = set_combine(sets.precast.FC,{main="Daybreak",sub="Culminus"})
  421. sets.midcast['Dispelga'] = set_combine(sets.midcast.debuff,{main="Daybreak",sub="Culminus"})
  422.  
  423. --sets.midcast['Fire Spirit'] = set_combine(sets.precast.JA['Elemental Siphon'],{ammo="Sancus Sachet +1"})
  424. --sets.midcast.IceSpirit = set_combine(sets.precast.JA['Elemental Siphon'],{ammo="Sancus Sachet +1"})
  425. --sets.midcast.AirSpirit = set_combine(sets.precast.JA['Elemental Siphon'],{ammo="Sancus Sachet +1"})
  426. --sets.midcast.EarthSpirit = set_combine(sets.precast.JA['Elemental Siphon'],{ammo="Sancus Sachet +1"})
  427. --sets.midcast.ThunderSpirit = set_combine(sets.precast.JA['Elemental Siphon'],{ammo="Sancus Sachet +1"})
  428. --sets.midcast.WaterSpirit = set_combine(sets.precast.JA['Elemental Siphon'],{ammo="Sancus Sachet +1"})
  429. --sets.midcast['Light Spirit'] = set_combine(sets.precast.JA['Elemental Siphon'],{ammo="Sancus Sachet +1"})
  430. --sets.midcast.DarkSpirit = set_combine(sets.precast.JA['Elemental Siphon'],{ammo="Sancus Sachet +1"})
  431.  
  432. sets.Seraphicaller = {ammo="Sancus Sachet +1"}
  433.  
  434.  
  435.  
  436.  
  437. -- Avatar pact sets. All pacts are Ability type.
  438.  
  439. sets.midcast.Pet.BloodPactWard = {main=Espiritus_MACC,body="Baayami Robe",back=ConveyanceCape_Skill,
  440. legs="Baayami Slops",head="Baayami Hat",feet="Baayami Sabots +1",
  441. sub="Vox Grip",ring1="Evoker's Ring",ring2="Stikini Ring +1",hands="Baayami Cuffs",
  442. waist="Lucidity Sash",ear1="Andoaa Earring",ear2="Lodurr Earring",neck="Hoxne Torque"}
  443.  
  444. sets.precast.BloodPactWard = set_combine(sets.midcast.Pet.BloodPactWard, {main=Espiritus_MACC,back=ConveyanceCape_Delay,
  445. head="Beckoner's Horn +2",hands="Baayami Cuffs",legs="Baayami Slops",body="Baayami Robe",
  446. feet="Glyphic Pigaches +1",ammo="Sancus Sachet +1",ear1="Evans Earring"})
  447.  
  448. sets.precast.BloodPactRage = sets.precast.BloodPactWard
  449.  
  450.  
  451. sets.midcast.Pet.DebuffBloodPactWard = set_combine(sets.midcast.Pet.BloodPactWard, {body="Convoker's Doublet +4",head="Heckoner's Horn +2",back=Campestres_PMACC,
  452. feet="Tali'ah Crackows +2",legs=HeliosPants_PMACC,hands="Tali'ah Gages +2",neck="Smn. Collar +2",waist="Incarnation Sash",main="Nirvana",ring1="Stikini Ring +1",
  453. ear1="Lugalbanda Earring",ear2="Beck. Earring"})
  454.  
  455. --old debuff - 5/21/26
  456. --{ammo="Sancus Sachet +1",main=Espiritus_MACC,neck="Incanter's Torque",back=ConveyanceCape_Skill,body="Baayami Robe",
  457. -- legs=HeliosPants_PMACC,feet=HeliosBoots_PMACC,head=HeliosHat_PMACC,
  458. --sub="Vox Grip",ring1="Evoker's Ring",ring2="Globidonta Ring",hands=HeliosHands_PMACC,waist="Lucidity Sash",
  459. --ear1="Andoaa Earring",ear2="Lodurr Earring"}
  460.  
  461. sets.midcast.Pet.DebuffBloodPactWard.Acc = sets.midcast.Pet.DebuffBloodPactWard
  462.  
  463. sets.midcast.Pet.BloodPactSleep = sets.midcast.Pet.DebuffBloodPactWard
  464.  
  465. --old sleep, dindon't know why I made a different one - 5/21/26
  466. --{ammo="Sancus Sachet +1",main=Espiritus_MACC,neck="Incanter's Torque",back=ConveyanceCape_Skill,body="Baayami Robe",
  467. -- legs=HeliosPants_PMACC,feet=HeliosBoots_PMACC,head=HeliosHat_PMACC,
  468. -- sub="Vox Grip",ring1="Evoker's Ring",ring2="Globidonta Ring",hands=HeliosHands_PMACC,waist="Lucidity Sash",
  469. -- ear1="Andoaa Earring",ear2="Lodurr Earring"}
  470.  
  471. sets.midcast.Pet.PhysicalBloodPactRage = {ammo="Sancus Sachet +1",main="Nirvana",legs="Apogee Slacks +1",body="Con. Doublet +4",neck="Smn. Collar +2",
  472. waist="Incarnation Sash",head=HeliosHat_PATK,ring1="Varar Ring +1",ring2="C. Palug Ring",sub="Elan Strap +1",hands=MerlinicGloves_PATK,back=Campestres_EVA,
  473. feet=HeliosBoots_PMelee,ear2="Sroda Earring",ear1="Lugalbanda Earring"}
  474.  
  475. --glyphic doublet +3 if accuracy is fine and AM3 isn't up...
  476. sets.midcast.Pet.PhysicalBloodPactRage.Acc = set_combine(sets.midcast.Pet.PhysicalBloodPactRage,{body="Glyphic Doublet +3"})
  477.  
  478.  
  479. sets.midcast.Pet.MagicalBloodPactRage = {ammo="Sancus Sachet +1",main=Grioavolr_PMATK,feet=ApogeeBoots_PMATK,back=Campestres_PMACC,
  480. body="Apogee Dalmatica +1",neck="Smn. Collar +2",head="Apogee Crown +1",ring1="Varar Ring +1",
  481. ring2="Varar Ring +1",sub="Elan Strap +1",hands=MerlinicGloves_BPDmg,waist="Incarnation Sash",ear1="Lugalbanda Earring",ear2="Beck. Earring"}
  482.  
  483. sets.midcast.Pet.MagicalBloodPactRage.Acc = set_combine(sets.midcast.Pet.MagicalBloodPactRage,{})
  484.  
  485. sets.midcast.Pet.FlamingCrush = {ammo="Sancus Sachet +1",main="Nirvana",back=Campestres_PMACC,body="Apogee Dalmatica +1",
  486. neck="Smn. Collar +2",legs="Apogee Slacks +1",head="Apogee Crown +1",ring1="Varar Ring +1",
  487. ring2="Varar Ring +1",sub="Elan Strap +1",hands=MerlinicGloves_BPDmg,waist="Incarnation Sash",feet=ApogeeBoots_PMATK,ear2="Beck. Earring",ear1="Lugalbanda Earring"}
  488.  
  489.  
  490.  
  491. sets.midcast.Pet.FlamingCrush.Acc = set_combine(sets.midcast.Pet.FlamingCrush,{})
  492. sets.midcast.Pet.Impact = sets.midcast.Pet.DebuffBloodPactWard
  493.  
  494.  
  495. sets.midcast.Pet['Crag Throw'] = sets.midcast.Pet.DebuffBloodPactWard
  496. sets.midcast.Pet['Moonlit Charge'] = sets.midcast.Pet.DebuffBloodPactWard
  497. sets.midcast.Pet['Crescent Fang'] = sets.midcast.Pet.DebuffBloodPactWard
  498. sets.midcast.Pet['Crag Throw'] = sets.midcast.Pet.DebuffBloodPactWard
  499. sets.midcast.Pet['Tail Whip'] = sets.midcast.Pet.DebuffBloodPactWard
  500.  
  501.  
  502.  
  503. sets.midcast.Pet['Earthen Ward'] = set_combine(sets.midcast.Pet.BloodPactWard,set_combine(sets.boon,{legs="Shedir Seraweels"}))
  504. sets.midcast.Pet['Aerial Armor'] = set_combine(sets.midcast.Pet.BloodPactWard,sets.boon)
  505. sets.midcast.Pet['Reraise II'] = set_combine(sets.midcast.Pet.BloodPactWard,sets.boon)
  506. sets.midcast.Pet['Raise II'] = set_combine(sets.midcast.Pet.BloodPactWard,sets.boon)
  507.  
  508. --hurting myself with apogee to heal more makes no sense
  509. --sets.midcast.Pet['Whispering Wind'] = set_combine(sets.midcast.Pet.BloodPactWard,{main="Nirvana",head="Apogee Crown +1",body="Apo. Dalmatica +1",feet="Apogee Pumps +1",
  510. --legs="Apogee Slacks +1",ear2="Beckoner's Earring",back=Campestres_EVA})
  511.  
  512. sets.midcast.Pet['Whispering Wind'] = set_combine(sets.midcast.Pet.BloodPactWard,{main="Nirvana",ear2="Beckoner's Earring",back=Campestres_EVA})
  513.  
  514. sets.midcast.Pet['Healing Ruby'] = sets.midcast.Pet['Whispering Wind']
  515. sets.midcast.Pet['Healing Ruby II'] = sets.midcast.Pet['Whispering Wind']
  516. sets.midcast.Pet['Spring Waterw'] = sets.midcast.Pet['Whispering Wind']
  517.  
  518. -- Spirits cast magic spells, which can be identified in standard ways.
  519.  
  520. sets.midcast.Pet.WhiteMagic = set_combine(sets.precast.JA['Elemental Siphon'],{ring2="Sheltered Ring",legs="Summoner's Spats"})
  521.  
  522. sets.midcast.Pet['Elemental Magic'] = set_combine(sets.midcast.Pet.MagicalBloodPactRage, {legs="Summoner's Spats"})
  523. sets.midcast.Pet['Enfeebling Magic'] = sets.midcast.Pet.BloodPactSleep
  524.  
  525. --sets.midcast.Pet['Elemental Magic'].Resistant = {}
  526.  
  527.  
  528. --------------------------------------
  529. -- Idle/resting/defense/etc sets
  530. --------------------------------------
  531.  
  532. -- Resting sets
  533. sets.resting = {main="Chatoyant Staff",neck="Eidolon Pendant +1"}
  534.  
  535. -- Idle sets
  536. sets.idle = {main="Pandit's Staff",sub="Oneiros Grip",ammo="Sancus Sachet +1",
  537. head="Beckoner's Horn +2",neck="Loricate Torque +1",
  538. body="Apogee Dalmatica +1",hands="Asteria Mitts +1",ring1="Stikini Ring +1",ring2="Stikini Ring +1",
  539. waist="Slipor Sash",legs="Assiduity Pants +1",feet="Baayami Sabots +1",back="Null Shawl",ear1="Moonshade Earring",
  540. ear2="Beck. Earring"}
  541.  
  542. sets.idle.PDT = set_combine(sets.idle,{head="Con. Horn +1",neck="Loricate Torque +1",main="Malignance Pole",ammo="Sihirik",
  543. sub="Khonsu",body="WN Kaftan +1",hands="WN Mittens +1",legs="WN Braccae +1",feet="WN Clomps +1",ring1="Murky Ring",ring2="C. Palug Ring"})
  544.  
  545. sets.idle.Kite = set_combine(sets.idle,{feet="Herald's Gaiters"})
  546.  
  547. -- Latent Idle Set --
  548. sets.latent_refresh = {waist="Fucho-no-obi"}
  549.  
  550. sets.Councilor = {main="Nirvana",sub="Vox Grip",body="Councilor's Garb"}
  551.  
  552. -- perp costs:
  553. -- spirits: 7
  554. -- carby: 11 (5 with mitts)
  555. -- fenrir: 13
  556. -- others: 15
  557. -- avatar's favor: -4/tick
  558.  
  559. -- Max useful -perp gear is 1 less than the perp cost (can't be reduced below 1)
  560. -- Aim for -14 perp, and refresh in other slots.
  561.  
  562. sets.idle.Avatar = {main="Nirvana",sub="Oneiros Grip",ammo="Sancus Sachet +1",
  563. head="Beckoner's Horn +2",neck="Caller's Pendant",
  564. body="Apogee Dalmatica +1",hands="Asteria Mitts +1",ring1="Stikini Ring +1",ring2="Stikini Ring +1",
  565. waist="Lucidity Sash",legs="Assiduity Pants +1",feet="Baayami Sabots +1",back="Null Shawl",ear1="Evans Earring",
  566. ear2="Beck. Earring"}
  567.  
  568. -- sets.serpentesjuggle_night = {hands="Serpentes Cuffs",feet="Convoker's Pigaches +1"}
  569. -- sets.serpentesjuggle_day = {hands=HagondesGloves_Perp,feet="Serpentes Sabots"}
  570.  
  571.  
  572. sets.idle.PDT.Avatar = set_combine(sets.idle.Avatar,{head="Beckoner's Horn +2",neck="Loricate Torque +1",ammo="Sancus Sachet +1",
  573. sub="Khonsu",body="WN Kaftan +1",hands="WN Mittens +1",legs="WN Braccae +1",feet="WN Clomps +1",back="Null Shawl",ring1="Murky Ring",ring2=rightDarkRing})
  574.  
  575. sets.idle.Kite.Avatar = sets.idle.Avatar
  576.  
  577. sets.idle.Spirit = set_combine(sets.midcast.Pet.BloodPactWard,{main="Nirvana",ammo="Sancus Sachet +1",legs="Summoner's Spats",waist="Lucidity Sash"})
  578. sets.idle.PDT.Spirit = sets.idle.PDT.Avatar
  579.  
  580. sets.idle.Town = set_combine(sets.idle,{main="Nirvana",sub="Oneiros Grip",feet="Herald's Gaiters"})
  581. sets.idle.PDT.Town = sets.idle.PDT
  582.  
  583. --sets.idle.Avatar.Favor = sets.idle.Avatar.Favor = set_combine(sets.midcast.Pet.BloodPactWard,{head="Beckoner's Horn"})
  584. sets.idle.Avatar.Favor = {head="Beckoner's Horn"}
  585. --sets.idle.Avatar.Favor.Melee = sets.idle.Avatar.Favor
  586. sets.idle.Avatar.Melee = {ammo="Sancus Sachet +1",hands="Regimen Mittens",back="Argochampsa Mantle",waist="Moepapa Stone",
  587. ear1="Rimeice Earring",ring2="Thurandaut Ring"}
  588. sets.idle.Avatar.Melee.Acc = sets.idle.Avatar.Melee
  589. sets.idle.Avatar.Melee.Overdrive = {head="Selenian Cap",ear2="Domesticator's Earring",legs=HeliosPants_PMelee,feet=HeliosBoots_PMelee,ring1="Evoker's Ring",body="Hagondes Coat"}
  590. sets.idle.Avatar.Melee.PDT = {head="Selenian Cap",body=TelchineBody_Siphon,hands=HagondesGloves_Perp,legs=TelchineLegs_Siphon,feet=TelchineBoots_PDT,
  591. waist="Isa Belt",ear1="Handler's Earring +1",ear2="Handler's Earring",ring1="Evoker's Ring",ring2="Thurandaut Ring",back=Campestres_PMACC}
  592.  
  593.  
  594.  
  595. --sets.idle.PDT.Avatar.Melee = set_combine(sets.idle.Avatar.Melee,{head="Beckoner's Horn +2",ring1=leftDarkRing,ring2=rightDarkRing,neck="Smn. Collar +2",back="Umbra Cape",legs=HagondesPants_PATK})
  596.  
  597. --to be done
  598. --sets.AvatarPDT = {waist="Isa Belt"}
  599.  
  600. sets.perp = {}
  601. -- Caller's Bracer's halve the perp cost after other costs are accounted for.
  602. -- Using -10 (Gridavor, ring, Conv.feet), standard avatars would then cost 5, halved to 2.
  603. -- We can then use Hagondes Coat and end up with the same net MP cost, but significantly better defense.
  604. -- Weather is the same, but we can also use the latent on the pendant to negate the last point lost.
  605. --sets.perp.Day = {hands="Caller's Bracers +2"}
  606. --sets.perp.Weather = {neck="Caller's Pendant",hands="Caller's Bracers +2"}
  607. -- Carby: Mitts+Conv.feet = 1/tick perp. Everything else should be +refresh
  608. --sets.perp.Carbuncle = {hands="Carbuncle Mitts"}
  609. -- Diabolos's Rope doesn't gain us anything at this time
  610. --sets.perp.Diabolos = {waist="Diabolos's Rope"}
  611. sets.perp.Alexander = sets.midcast.Pet.BloodPactWard
  612. sets.perp.Atomos = sets.midcast.Pet.BloodPactSleep
  613. sets.perp.Odin = sets.midcast.Pet.MagicalBloodPactRage.Acc
  614. sets.midcast.Pet.PerfectDefense = sets.midcast.Pet.BloodPactWard
  615. --sets.perp.Spirit = set_combine(sets.midcast.Pet.BloodPactWard,{legs="Summoner's Spats"})
  616.  
  617. -- Defense sets
  618. sets.defense.PDT = {}
  619.  
  620. sets.defense.MDT = {}
  621.  
  622. sets.Kiting = {}
  623.  
  624. --------------------------------------
  625. -- Engaged sets
  626. --------------------------------------
  627.  
  628. -- Normal melee group
  629. sets.engaged = set_combine(sets.idle, {back="Null Shawl"})
  630. end
  631.  
  632. -------------------------------------------------------------------------------------------------------------------
  633. -- Job-specific hooks that are called to process player actions at specific points in time.
  634. -------------------------------------------------------------------------------------------------------------------
  635.  
  636. -- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
  637. -- Set eventArgs.useMidcastGear to true if we want midcast gear equipped on precast.
  638. function job_precast(spell, action, spellMap, eventArgs)
  639. --if (spell.type == 'BloodPactRage' or spell.type == 'BloodPactWard') and buffactive['Astral Conduit'] or buffactive['Apogee'] then
  640. -- eventArgs.handled = true
  641. --end
  642. if state.Buff[spell.english] ~= nil then
  643. state.Buff[spell.english] = true
  644. end
  645. if spell.name == 'Sneak' and buffactive.Sneak and spell.target.type == 'SELF' then
  646. windower.ffxi.cancel_buff(71)
  647. cast_delay(0.3)
  648. elseif spell.name == 'Stoneskin' and buffactive.Stoneskin and spell.target.type == 'SELF' then
  649. windower.ffxi.cancel_buff(37)
  650. cast_delay(0.3)
  651. end
  652.  
  653. if (not pet.isvalid) and (spell.action_type == 'Magic') then
  654. equip({ammo="Impatiens"})
  655. end
  656.  
  657.  
  658. if spell.english == "Impact" and spell.action_type == "Ability" then
  659. equip(sets.precast.BloodPactWard)
  660. eventArgs.handled = true
  661. end
  662. end
  663.  
  664. function job_midcast(spell, action, spellMap, eventArgs)
  665. if (not string.find(spell.type,'BloodPact') and pet.isvalid) then
  666. equip(get_idle_set(petStatus))
  667. end
  668. --if (not pet.isvalid) and (spell.action_type == 'Magic') then
  669. --equip(sets.conserve)
  670. --end
  671.  
  672.  
  673.  
  674. if spell.skill=="ElementalMagic" and state.CastingMode == options.CastingModes[2] then
  675. equip(sets.midcast['Elemental Magic'].Resistant)
  676. end
  677. if debuffs:contains(spell.english) then
  678. equip(sets.midcast.debuff)
  679. if debuffs_acc:contains(spell.english) or state.CastingMode == options.CastingModes[2] then
  680. equip(sets.midcast.debuff.Resistant)
  681. end
  682. if (spell.type=='BlackMagic' and not (spell.english == 'Distract' or spell.english=='Frazzle')) then
  683. equip(sets.midcast.debuff.int)
  684. elseif (spell.type=='WhiteMagic' and not (spell.english == 'Dia' or spell.english=='Dia II')
  685. or spell.english == 'Distract' or spell.english=='Frazzle') then
  686. equip(sets.midcast.debuff.mnd)
  687. end
  688. elseif (spell.english=='Mana Cede') then
  689. equip(sets.precast.JA['Mana Cede'])
  690. elseif (spell.english=='Elemental Siphon') then
  691. equip(sets.precast.JA['Elemental Siphon'])
  692. --elseif spell.action_type == 'Magic' then
  693. --equip(get_idle_set())
  694. elseif (spell.english=='Astral Flow') then
  695. equip(sets.precast.JA['Astral Flow'])
  696. elseif spell.type=='BlackMagic' then
  697. if (spell.element == world.day_element) then
  698. --sets.midcast['Elemental Magic'] = set_combine(sets.midcast['Elemental Magic'], sets.day)
  699. gear.ElementalRing.name = "Zodiac Ring"
  700. gear.ElementalCape.name = "Twilight Cape"
  701. else
  702. gear.ElementalRing.name = "Stikini Ring +1"
  703. gear.ElementalCape.name = "Toro Cape"
  704. end
  705. elseif spell.english:wcmatch("Bar*") then
  706. equip(sets.midcast.Phalanx)
  707. end
  708.  
  709. if spell.english == "Impact" and spell.action_type == "Ability" then
  710. equip(sets.precast.BloodPactWard)
  711. eventArgs.handled = true
  712. end
  713.  
  714. end
  715.  
  716. function job_post_midcast(spell, action, spellMap, eventArgs)
  717. if spellMap == 'Cure' then
  718. if spell.target.type == 'SELF' then
  719. equip(sets.midcast.CureSelf)
  720. end
  721. end
  722. end
  723.  
  724.  
  725.  
  726.  
  727.  
  728. -- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
  729. function job_aftercast(spell, action, spellMap, eventArgs)
  730. --sets.midcast['Elemental Magic'] = sets.nuke
  731. --gear.debuffBoots = "Uk'uxkaj Boots"
  732. sets.engaged = get_idle_set(pet.status)
  733. if state.Buff[spell.english] ~= nil then
  734. state.Buff[spell.english] = not spell.interrupted or buffactive[spell.english]
  735. end
  736. if spell.type == 'SummonerPact' then
  737. send_command("gs equip sets.Seraphicaller; gs disable ammo; wait 2; gs enable ammo")
  738. end
  739. end
  740.  
  741. function job_pet_midcast(spell, action, spellMap, eventArgs)
  742. --if pet.status == 'Idle' and spell.type == 'BloodPactWard' and spellMap ~= 'DebuffBloodPactWard' then
  743. -- equip({ammo="Esper Stone +1"})
  744. -- end
  745. if (magicalRagePacts:contains(spell.english)) then
  746. if ((spell.english == "Meteor Strike" and pet.tp <= 105) or (spell.english ~= "Meteor Strike" and pet.tp<=265 and pet.name ~= "Carbuncle" and pet.name~="Diabolos" and not astralRagePacts:contains(spell.english))) then
  747. equip({legs="Enticer's Pants"}) -- fix for no astral flow pacts
  748. else
  749. equip({legs=HeliosPants_PMATK})
  750. end
  751. end
  752. --not working, needs more debug
  753. if (spell.english == "Predator Claws" or spell.english == "Volt Strike" or spell.english == "Hysteric Assault") then
  754. if buffactive['Aftermath: Lv.3'] then
  755. equip({ring2="Varar Ring +1"})
  756. end
  757. end
  758. end
  759.  
  760.  
  761. -- Runs when pet completes an action.
  762. function job_pet_aftercast(spell, action, spellMap, eventArgs)
  763. if not spell.interrupted and spell.type == 'BloodPactWard' and spellMap ~= 'DebuffBloodPactWard' then
  764. wards.flag = true
  765. wards.spell = spell.english
  766. send_command('wait 4; gs c reset_ward_flag')
  767. end
  768. if (spell.english=="Ecliptic Howl") then
  769. if (world.moon_pct>89) then
  770. add_to_chat(104,"[Ecliptic Howl] Accuracy 25 - Evasion 1")
  771. elseif (world.moon_pct>74) then
  772. add_to_chat(104,"[Ecliptic Howl] Accuracy 21 - Evasion 5")
  773. elseif (world.moon_pct>59) then
  774. add_to_chat(104,"[Ecliptic Howl] Accuracy 17 - Evasion 9")
  775. elseif (world.moon_pct>39) then
  776. add_to_chat(104,"[Ecliptic Howl] Accuracy 13 - Evasion 13")
  777. elseif (world.moon_pct>24) then
  778. add_to_chat(104,"[Ecliptic Howl] Accuracy 9 - Evasion 17")
  779. elseif (world.moon_pct>9) then
  780. add_to_chat(104,"[Ecliptic Howl] Accuracy 5 - Evasion 21")
  781. else
  782. add_to_chat(104,"[Ecliptic Howl] Accuracy 1 - Evasion 25")
  783. end
  784. end
  785. if (spell.english=="Ecliptic Growl") then
  786. if (world.moon_pct>89) then
  787. add_to_chat(104,"[Ecliptic Growl] STR/DEX/VIT 7 - INT/MND/CHR/AGI 1")
  788. elseif (world.moon_pct>74) then
  789. add_to_chat(104,"[Ecliptic Growl] STR/DEX/VIT 6 - INT/MND/CHR/AGI 2")
  790. elseif (world.moon_pct>59) then
  791. add_to_chat(104,"[Ecliptic Growl] STR/DEX/VIT 5 - INT/MND/CHR/AGI 3")
  792. elseif (world.moon_pct>39) then
  793. add_to_chat(104,"[Ecliptic Growl] STR/DEX/VIT 4 - INT/MND/CHR/AGI 4")
  794. elseif (world.moon_pct>24) then
  795. add_to_chat(104,"[Ecliptic Growl] STR/DEX/VIT 3 - INT/MND/CHR/AGI 5")
  796. elseif (world.moon_pct>9) then
  797. add_to_chat(104,"[Ecliptic Growl] STR/DEX/VIT 2 - INT/MND/CHR/AGI 6")
  798. else
  799. add_to_chat(104,"[Ecliptic Growl] STR/DEX/VIT 1 - INT/MND/CHR/AGI 7")
  800. end
  801. end
  802. if (spell.english=="Lunar Cry") then
  803. if (world.moon_pct>89) then
  804. add_to_chat(104,"[Lunar Cry] Enemy Acc Down 31 - Enemy Eva Down 1")
  805. elseif (world.moon_pct>74) then
  806. add_to_chat(104,"[Lunar Cry] Enemy Acc Down 26 - Enemy Eva Down 6")
  807. elseif (world.moon_pct>59) then
  808. add_to_chat(104,"[Lunar Cry] Enemy Acc Down 21 - Enemy Eva Down 11")
  809. elseif (world.moon_pct>39) then
  810. add_to_chat(104,"[Lunar Cry] Enemy Acc Down 16 - Enemy Eva Down 16")
  811. elseif (world.moon_pct>24) then
  812. add_to_chat(104,"[Lunar Cry] Enemy Acc Down 11 - Enemy Eva Down 21")
  813. elseif (world.moon_pct>9) then
  814. add_to_chat(104,"[Lunar Cry] Enemy Acc Down 6 - Enemy Eva Down 26")
  815. else
  816. add_to_chat(104,"[Lunar Cry] Enemy Acc Down 1 - Enemy Eva Down 31")
  817. end
  818. end
  819. if (spell.english=="Dream Shroud") then
  820. if (world.time >= 0 and world.time < 1*60) then
  821. add_to_chat(104,"[Dream Shroud] MAB 13 - MDB 1")
  822. elseif (world.time >= 1*60 and world.time < 2*60) or (world.time >= 23*60 and world.time <= 23*60+59) then
  823. add_to_chat(104,"[Dream Shroud] MAB 12 - MDB 2")
  824. elseif (world.time >= 2*60 and world.time < 3*60) or (world.time >= 22*60 and world.time < 23*60) then
  825. add_to_chat(104,"[Dream Shroud] MAB 11 - MDB 3")
  826. elseif (world.time >= 3*60 and world.time < 4*60) or (world.time >= 21*60 and world.time < 22*60) then
  827. add_to_chat(104,"[Dream Shroud] MAB 10 - MDB 4")
  828. elseif (world.time >= 4*60 and world.time < 5*60) or (world.time >= 20*60 and world.time < 21*60) then
  829. add_to_chat(104,"[Dream Shroud] MAB 9 - MDB 5")
  830. elseif (world.time >= 5*60 and world.time < 6*60) or (world.time >= 19*60 and world.time < 20*60) then
  831. add_to_chat(104,"[Dream Shroud] MAB 8 - MDB 6")
  832. elseif (world.time >= 6*60 and world.time < 7*60) or (world.time >= 18*60 and world.time < 19*60) then
  833. add_to_chat(104,"[Dream Shroud] MAB 7 - MDB 7")
  834. elseif (world.time >= 7*60 and world.time < 8*60) or (world.time >= 17*60 and world.time < 18*60) then
  835. add_to_chat(104,"[Dream Shroud] MAB 6 - MDB 8")
  836. elseif (world.time >= 8*60 and world.time < 9*60) or (world.time >= 16*60 and world.time < 17*60) then
  837. add_to_chat(104,"[Dream Shroud] MAB 5 - MDB 9")
  838. elseif (world.time >= 9*60 and world.time < 10*60) or (world.time >= 15*60 and world.time < 16*60) then
  839. add_to_chat(104,"[Dream Shroud] MAB 4 - MDB 10")
  840. elseif (world.time >= 10*60 and world.time < 11*60) or (world.time >= 14*60 and world.time < 15*60) then
  841. add_to_chat(104,"[Dream Shroud] MAB 3 - MDB 11")
  842. elseif (world.time >= 11*60 and world.time < 12*60) or (world.time >= 13*60 and world.time < 14*60) then
  843. add_to_chat(104,"[Dream Shroud] MAB 2 - MDB 12")
  844. else
  845. add_to_chat(104,"[Dream Shroud] MAB 1 - MDB 13")
  846. end
  847. end
  848. end
  849.  
  850.  
  851. -------------------------------------------------------------------------------------------------------------------
  852. -- Customization hooks for idle and melee sets, after they've been automatically constructed.
  853. -------------------------------------------------------------------------------------------------------------------
  854.  
  855. -- Modify the default idle set after it was constructed.
  856. function customize_idle_set(idleSet)
  857. if pet.isvalid then
  858. if pet.element == world.day_element then
  859. idleSet = set_combine(idleSet, sets.perp.Day)
  860. end
  861. if pet.element == world.weather_element then
  862. idleSet = set_combine(idleSet, sets.perp.Weather)
  863. end
  864. if sets.perp[pet.name] then
  865. idleSet = set_combine(idleSet, sets.perp[pet.name])
  866. end
  867. if sets.perp[pet.name] then
  868. idleSet = set_combine(idleSet, sets.perp[pet.name])
  869. end
  870. if spirits:contains(pet.name) then
  871. idleSet = set_combine(idleSet, sets.idle.Spirit)
  872. end
  873. local perp_staff = elements.perpetuance_staff_of[pet.element]
  874. if perp_staff and (player.inventory[perp_staff] or player.wardrobe[perp_staff]) then
  875. idleSet = set_combine(idleSet, {main=perp_staff,sub="Achaq Grip"})
  876. end
  877. --if state.Buff["Avatar's Favor"] and avatars:contains(pet.name) then
  878. --idleSet = set_combine(idleSet, sets.idle.Avatar.Favor)
  879. --end
  880.  
  881. -- if (world.time >= 17*60 or world.time < 7*60) and pet.status == 'Idle' and pet.name ~= 'Atomos' and pet.name ~= 'Odin' and pet.name ~= 'Alexander'
  882. --and state.IdleMode ~= options.IdleModes[3] then
  883. -- idleSet = set_combine(idleSet, sets.serpentesjuggle_night)
  884. --elseif pet.status == 'Idle' and pet.name ~= 'Atomos' and pet.name ~= 'Odin' and pet.name ~= 'Alexander' and state.IdleMode ~= options.IdleModes[3] then
  885. -- idleSet = set_combine(idleSet, sets.serpentesjuggle_day)
  886. if pet.status == 'Idle' and pet.name ~= 'Atomos' and pet.name ~= 'Odin' and pet.name ~= 'Alexander' and state.IdleMode == options.IdleModes[3] then
  887. idleSet = set_combine(idleSet, {feet="Herald's Gaiters"})
  888. end
  889.  
  890. if state.DefenseMode == options.DefenseModes[2] then
  891. idleSet = set_combine(idleSet, sets.idle.Avatar.Melee.PDT)
  892. end
  893. if pet.status == 'Engaged' and not spirits:contains(pet.name) then
  894. --idleSet = set_combine(idleSet, sets.idle.Avatar.Melee)
  895. if state.WeaponskillMode == options.WeaponskillModes[2] then
  896. idleSet = set_combine(idleSet, sets.idle.Avatar.Melee.Overdrive)
  897. end
  898. if state.DefenseMode == options.DefenseModes[2] then
  899. idleSet = set_combine(idleSet, sets.idle.Avatar.Melee.PDT)
  900. end
  901. if state.OffenseMode == options.OffenseModes[2] and state.WeaponskillMode == options.WeaponskillModes[2] then
  902. idleSet = set_combine(idleSet, sets.idle.Avatar.Melee.Acc)
  903. end
  904. end
  905. end
  906.  
  907.  
  908. if player.mpp < 51 then
  909. if(state.WeaponskillMode == options.WeaponskillModes[1] or (state.WeaponskillMode == options.WeaponskillModes[2] and pet.status == 'Idle')) then
  910. idleSet = set_combine(idleSet, sets.latent_refresh)
  911. end
  912. end
  913.  
  914. if (world.zone_id==256 or world.zone_id==257) then
  915. idleSet = set_combine (idleSet, sets.Councilor)
  916. end
  917.  
  918. sets.engaged = idleSet
  919.  
  920. return idleSet
  921. end
  922.  
  923.  
  924. -------------------------------------------------------------------------------------------------------------------
  925. -- General hooks for other events.
  926. -------------------------------------------------------------------------------------------------------------------
  927.  
  928. -- Called when a player gains or loses a buff.
  929. -- buff == buff gained or lost
  930. -- gain == true if the buff was gained, false if it was lost.
  931. function job_buff_change(buff, gain)
  932. if state.Buff[buff] ~= nil then
  933. state.Buff[buff] = gain
  934. handle_equipping_gear(player.status)
  935. elseif storms:contains(buff) then
  936. handle_equipping_gear(player.status)
  937. end
  938. end
  939.  
  940.  
  941. -- Called when the player's pet's status changes.
  942. -- This is also called after pet_change after a pet is released. Check for pet validity.
  943. function job_pet_status_change(newStatus, oldStatus, eventArgs)
  944. if pet.isvalid and not midaction() and not pet_midaction() and (newStatus == 'Engaged' or oldStatus == 'Engaged') then
  945. handle_equipping_gear(player.status, newStatus)
  946. end
  947. end
  948.  
  949.  
  950. -- Called when a player gains or loses a pet.
  951. -- pet == pet structure
  952. -- gain == true if the pet was gained, false if it was lost.
  953. function job_pet_change(petparam, gain)
  954. classes.CustomIdleGroups:clear()
  955. if gain then
  956. --if avatars:contains(pet.name) then
  957. classes.CustomIdleGroups:append('Avatar')
  958. --elseif spirits:contains(pet.name) then
  959. -- classes.CustomIdleGroups:append('Spirit')
  960. --end
  961. end
  962. end
  963.  
  964.  
  965. -------------------------------------------------------------------------------------------------------------------
  966. -- User code that supplements self-commands.
  967. -------------------------------------------------------------------------------------------------------------------
  968.  
  969. -- Called for custom player commands.
  970. function job_self_command(cmdParams, eventArgs)
  971. if cmdParams[1]:lower() == 'petweather' then
  972. handle_petweather()
  973. eventArgs.handled = true
  974. elseif cmdParams[1]:lower() == 'siphon' then
  975. handle_siphoning()
  976. eventArgs.handled = true
  977. elseif cmdParams[1]:lower() == 'pact' then
  978. handle_pacts(cmdParams)
  979. eventArgs.handled = true
  980. elseif cmdParams[1] == 'reset_ward_flag' then
  981. wards.flag = false
  982. wards.spell = ''
  983. eventArgs.handled = true
  984. elseif cmdParams[1] == 'weapon_lock_toggle' then
  985. weapon_lock_toggle()
  986. eventArgs.handled = true
  987. elseif cmdParams[1] == 'fix_gear' then
  988. fix_gear()
  989. eventArgs.handled = true
  990. end
  991. end
  992.  
  993. -- Called by the 'update' self-command, for common needs.
  994. -- Set eventArgs.handled to true if we don't want automatic equipping of gear.
  995. function job_update(cmdParams, eventArgs)
  996. classes.CustomIdleGroups:clear()
  997. if pet.isvalid then
  998. if avatars:contains(pet.name) then
  999. classes.CustomIdleGroups:append('Avatar')
  1000. elseif spirits:contains(pet.name) then
  1001. classes.CustomIdleGroups:append('Spirit')
  1002. end
  1003. end
  1004. end
  1005.  
  1006. -- Set eventArgs.handled to true if we don't want the automatic display to be run.
  1007. function display_current_job_state(eventArgs)
  1008.  
  1009. end
  1010.  
  1011. -------------------------------------------------------------------------------------------------------------------
  1012. -- Utility functions specific to this job.
  1013. -------------------------------------------------------------------------------------------------------------------
  1014.  
  1015. -- Custom spell mapping.
  1016. function job_get_spell_map(spell)
  1017. if spell.english == 'Perfect Defense' then
  1018. return 'PerfectDefense'
  1019. elseif spell.type == 'BloodPactRage' then
  1020. if spell.english == 'Flaming Crush' then
  1021. return 'FlamingCrush'
  1022. elseif magicalRagePacts:contains(spell.english) then
  1023. return 'MagicalBloodPactRage'
  1024. else
  1025. return 'PhysicalBloodPactRage'
  1026. end
  1027. elseif spell.type == 'BloodPactWard' and spell.target.type == 'MONSTER' then
  1028. if spell.english == "Sleepga" or spell.english == "Mewing Lullaby" then
  1029. return 'BloodPactSleep'
  1030. -- elseif spell.english == "Earthen Ward" then
  1031. --return 'EarthenWard'
  1032. --elseif spell.english == 'Aerial Armor' or spell.english == 'Reraise II' or spell.english == 'Raise' then
  1033. -- return 'AerialArmor'
  1034. else
  1035. return 'DebuffBloodPactWard'
  1036. end
  1037. end
  1038. end
  1039.  
  1040.  
  1041. -- Cast the appropriate storm for the currently summoned avatar, if possible.
  1042. function handle_petweather()
  1043. if player.sub_job ~= 'SCH' then
  1044. add_to_chat(122, "You can not cast storm spells")
  1045. return
  1046. end
  1047.  
  1048. if not pet.isvalid then
  1049. add_to_chat(122, "You do not have an active avatar.")
  1050. return
  1051. end
  1052.  
  1053. local element = pet.element
  1054. if element == 'Thunder' then
  1055. element = 'Lightning'
  1056. end
  1057.  
  1058. if S{'Light','Dark','Lightning'}:contains(element) then
  1059. add_to_chat(122, 'You do not have access to '..elements.storm_of[element]..'.')
  1060. return
  1061. end
  1062.  
  1063. local storm = elements.storm_of[element]
  1064.  
  1065. if storm then
  1066. send_command('@input /ma "'..elements.storm_of[element]..'" <me>')
  1067. else
  1068. add_to_chat(123, 'Error: Unknown element ('..tostring(element)..')')
  1069. end
  1070. end
  1071.  
  1072.  
  1073. -- Custom uber-handling of Elemental Siphon
  1074. function handle_siphoning()
  1075. if areas.Cities:contains(world.area) then
  1076. add_to_chat(122, 'Cannot use Elemental Siphon in a city area.')
  1077. return
  1078. end
  1079.  
  1080. local siphonElement
  1081. local stormElementToUse
  1082. local releasedAvatar
  1083. local dontRelease
  1084.  
  1085. -- If we already have a spirit out, just use that.
  1086. if pet.isvalid and spirits:contains(pet.name) then
  1087. siphonElement = pet.element
  1088. dontRelease = true
  1089. -- If current weather doesn't match the spirit, but the spirit matches the day, try to cast the storm.
  1090. if player.sub_job == 'SCH' and pet.element == world.day_element and pet.element ~= world.weather_element then
  1091. if not S{'Light','Dark','Lightning'}:contains(pet.element) then
  1092. stormElementToUse = pet.element
  1093. end
  1094. end
  1095. -- If we're subbing /sch, there are some conditions where we want to make sure specific weather is up.
  1096. -- If current (single) weather is opposed by the current day, we want to change the weather to match
  1097. -- the current day, if possible.
  1098. elseif player.sub_job == 'SCH' and world.weather_element ~= 'None' then
  1099. -- We can override single-intensity weather; leave double weather alone, since even if
  1100. -- it's partially countered by the day, it's not worth changing.
  1101. if get_weather_intensity() == 1 then
  1102. -- If current weather is weak to the current day, it cancels the benefits for
  1103. -- siphon. Change it to the day's weather if possible (+0 to +20%), or any non-weak
  1104. -- weather if not.
  1105. -- If the current weather matches the current avatar's element (being used to reduce
  1106. -- perpetuation), don't change it; just accept the penalty on Siphon.
  1107. if world.weather_element == elements.weak_to[world.day_element] and
  1108. (not pet.isvalid or world.weather_element ~= pet.element) then
  1109. -- We can't cast lightning/dark/light weather, so use a neutral element
  1110. if S{'Light','Dark','Lightning'}:contains(world.day_element) then
  1111. stormElementToUse = 'Wind'
  1112. else
  1113. stormElementToUse = world.day_element
  1114. end
  1115. end
  1116. end
  1117. end
  1118.  
  1119. -- If we decided to use a storm, set that as the spirit element to cast.
  1120. if stormElementToUse then
  1121. siphonElement = stormElementToUse
  1122. elseif world.weather_element ~= 'None' and (get_weather_intensity() == 2 or world.weather_element ~= elements.weak_to[world.day_element]) then
  1123. siphonElement = world.weather_element
  1124. else
  1125. siphonElement = world.day_element
  1126. end
  1127.  
  1128. local command = ''
  1129. local releaseWait = 0
  1130.  
  1131. if pet.isvalid and avatars:contains(pet.name) then
  1132. command = command..'input /pet "Release" <me>;wait 1.1;'
  1133. releasedAvatar = pet.name
  1134. releaseWait = 10
  1135. end
  1136.  
  1137. if stormElementToUse then
  1138. command = command..'input /ma "'..elements.storm_of[stormElementToUse]..'" <me>;wait 4;'
  1139. releaseWait = releaseWait - 4
  1140. end
  1141.  
  1142. if not (pet.isvalid and spirits:contains(pet.name)) then
  1143. command = command..'input /ma "'..elements.spirit_of[siphonElement]..'" <me>;wait 4;'
  1144. releaseWait = releaseWait - 4
  1145. end
  1146.  
  1147. command = command..'input /ja "Elemental Siphon" <me>;'
  1148. releaseWait = releaseWait - 1
  1149. releaseWait = releaseWait + 0.1
  1150.  
  1151. if not dontRelease then
  1152. if releaseWait > 0 then
  1153. command = command..'wait '..tostring(releaseWait)..';'
  1154. else
  1155. command = command..'wait 1.1;'
  1156. end
  1157.  
  1158. command = command..'input /pet "Release" <me>;'
  1159. end
  1160.  
  1161. if releasedAvatar then
  1162. command = command..'wait 1.1;input /ma "'..releasedAvatar..'" <me>'
  1163. end
  1164.  
  1165. send_command(command)
  1166. end
  1167.  
  1168.  
  1169. -- Handles executing blood pacts in a generic, avatar-agnostic way.
  1170. -- cmdParams is the split of the self-command.
  1171. -- gs c [pact] [pacttype]
  1172. function handle_pacts(cmdParams)
  1173. if areas.Cities:contains(world.area) then
  1174. add_to_chat(122, 'You cannot use pacts in town.')
  1175. return
  1176. end
  1177.  
  1178. if not pet.isvalid then
  1179. add_to_chat(122,'No avatar currently available. Returning to default macro set.')
  1180. select_default_macro_book('reset')
  1181. return
  1182. end
  1183.  
  1184. if spirits:contains(pet.name) then
  1185. add_to_chat(122,'Cannot use pacts with spirits.')
  1186. return
  1187. end
  1188.  
  1189. if not cmdParams[2] then
  1190. add_to_chat(123,'No pact type given.')
  1191. return
  1192. end
  1193.  
  1194. local pact = cmdParams[2]:lower()
  1195.  
  1196. if not pacts[pact] then
  1197. add_to_chat(123,'Unknown pact type: '..tostring(pact))
  1198. return
  1199. end
  1200.  
  1201. if pacts[pact][pet.name] then
  1202. if pact == 'astralflow' and not buffactive['astral flow'] then
  1203. add_to_chat(122,'Cannot use Astral Flow pacts at this time.')
  1204. return
  1205. end
  1206.  
  1207. -- Leave out target; let Shortcuts auto-determine it.
  1208. send_command('@input /pet "'..pacts[pact][pet.name]..'"')
  1209. else
  1210. add_to_chat(122,pet.name..' does not have a pact of type ['..pact..'].')
  1211. end
  1212. end
  1213.  
  1214.  
  1215. -- Handles executing blood pacts in a generic, avatar-agnostic way.
  1216. -- cmdParams is the split of the self-command.
  1217. -- gs c [pact] [pacttype]
  1218. function handle_pacts(cmdParams)
  1219. if areas.Cities:contains(world.area) then
  1220. add_to_chat(122, 'You cannot use pacts in town.')
  1221. return
  1222. end
  1223.  
  1224. if not pet.isvalid then
  1225. add_to_chat(122,'No avatar currently available. Returning to macro set 1.')
  1226. set_macro_page(1)
  1227. return
  1228. end
  1229.  
  1230. if spirits:contains(pet.name) then
  1231. add_to_chat(122,'Cannot use pacts with spirits.')
  1232. return
  1233. end
  1234.  
  1235. if not cmdParams[2] then
  1236. add_to_chat(123,'No pact type given.')
  1237. return
  1238. end
  1239.  
  1240. local pact = cmdParams[2]:lower()
  1241.  
  1242. if not pacts[pact] then
  1243. add_to_chat(123,'Unknown pact type: '..tostring(pact))
  1244. return
  1245. end
  1246.  
  1247. if pacts[pact][pet.name] then
  1248. if pact == 'astralflow' and not buffactive['astral flow'] then
  1249. add_to_chat(122,'Cannot use Astral Flow pacts without 2hr active.')
  1250. return
  1251. end
  1252.  
  1253. -- Leave out target; let Shortcuts auto-determine it.
  1254. send_command('@input /pet "'..pacts[pact][pet.name]..'"')
  1255. else
  1256. add_to_chat(122,pet.name..' does not have a pact of type ['..pact..'].')
  1257. end
  1258. end
  1259.  
  1260.  
  1261. -- Event handler for updates to player skill, since we can't rely on skill being
  1262. -- correct at pet_aftercast for the creation of custom timers.
  1263. windower.raw_register_event('incoming chunk',
  1264. function (id)
  1265. if id == 0x62 then
  1266. if wards.flag then
  1267. create_pact_timer(wards.spell)
  1268. wards.flag = false
  1269. wards.spell = ''
  1270. end
  1271. end
  1272. end)
  1273.  
  1274. -- Function to create custom timers using the Timers addon. Calculates ward duration
  1275. -- based on player skill and base pact duration (defined in job_setup).
  1276. function create_pact_timer(spell_name)
  1277. -- Create custom timers for ward pacts.
  1278. if wards.durations[spell_name] then
  1279. local ward_duration = wards.durations[spell_name]
  1280. if ward_duration < 181 then
  1281. local skill = player.skills.summoning_magic
  1282. if skill > 300 then
  1283. skill = skill - 300
  1284. --if skill > 200 then skill = 200 end
  1285. ward_duration = ward_duration + skill
  1286. if buffactive['Astral Conduit'] then
  1287. ward_duration = ward_duration + ward_duration * 0.2
  1288. end
  1289. end
  1290. end
  1291.  
  1292. local timer_cmd = 'timers c "'..spell_name..'" '..tostring(ward_duration)..' down'
  1293.  
  1294. if wards.icons[spell_name] then
  1295. timer_cmd = timer_cmd..' '..wards.icons[spell_name]
  1296. end
  1297.  
  1298. send_command(timer_cmd)
  1299. end
  1300. end
  1301.  
  1302.  
  1303. -- Select default macro book on initial load or subjob change.
  1304. function select_default_macro_book()
  1305. -- Default macro set/book
  1306. set_macro_page(1, 1)
  1307. send_command('console_displayactivity 0')
  1308. send_command('blinkmenot all all on')
  1309. end
  1310.  
  1311. function adoulin_body(new_zone_id, old_zone_id)
  1312. if ((new_zone_id==256 or new_zone_id==257)) then
  1313. equip(customize_idle_set(sets.idle.Town))
  1314. send_command("wait 2; gs equip sets.Councilor")
  1315. elseif (old_zone_id==256 or old_zone_id==257) then
  1316. send_command("wait 2; gs equip sets.idle")
  1317. end
  1318. end
  1319.  
  1320. function weapon_lock_toggle()
  1321. if lock_weapon == 0 then
  1322. send_command("gs disable main")
  1323. send_command("gs disable sub")
  1324. equip(sets.nirvanalock)
  1325. lock_weapon = 1
  1326. add_to_chat(4,"Weapon lock enabled.")
  1327. else
  1328. send_command("gs enable main")
  1329. send_command("gs enable sub")
  1330. -- if (pet.isvalid) then
  1331. --equip(customize_idle_set(sets.idle.Avatar))
  1332. --else
  1333. -- equip(customize_idle_set(sets.idle))
  1334. --end
  1335. lock_weapon = 0
  1336. add_to_chat(4,"Weapon lock disabled.")
  1337. end
  1338. end
  1339.  
  1340. function fix_gear()
  1341. if (pet.isvalid) then
  1342. equip(customize_idle_set(sets.idle.Avatar))
  1343. elseif areas.Cities:contains(world.zone) then
  1344. equip(customize_idle_set(sets.idle.Town))
  1345. else
  1346. equip(customize_idle_set(sets.idle))
  1347. end
  1348. add_to_chat(4,"Fixing gear.")
  1349. end
Add Comment
Please, Sign In to add comment