Advertisement
Guest User

RUN

a guest
May 1st, 2016
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 23.66 KB | None | 0 0
  1. -- NOTE: I do not play run, so this will not be maintained for 'active' use.
  2. -- It is added to the repository to allow people to have a baseline to build from,
  3. -- and make sure it is up-to-date with the library API.
  4.  
  5.  
  6. -------------------------------------------------------------------------------------------------------------------
  7. -- Setup functions for this job. Generally should not be modified.
  8. -------------------------------------------------------------------------------------------------------------------
  9.  
  10. -- Initialization function for this job file.
  11. function get_sets()
  12. mote_include_version = 2
  13.  
  14. -- Load and initialize the include file.
  15. include('Mote-Include.lua')
  16. include('organizer-lib')
  17. end
  18.  
  19. include('organizer-lib')
  20.  
  21. -- Setup vars that are user-independent.
  22. function job_setup()
  23. -- Table of entries
  24. rune_timers = T{}
  25. -- entry = rune, index, expires
  26.  
  27. if player.main_job_level >= 65 then
  28. max_runes = 3
  29. elseif player.main_job_level >= 35 then
  30. max_runes = 2
  31. elseif player.main_job_level >= 5 then
  32. max_runes = 1
  33. else
  34. max_runes = 0
  35. end
  36. end
  37.  
  38. -------------------------------------------------------------------------------------------------------------------
  39. -- User setup functions for this job. Recommend that these be overridden in a sidecar file.
  40. -------------------------------------------------------------------------------------------------------------------
  41.  
  42. function user_setup()
  43. state.OffenseMode:options('Normal','Tank','DDDW', 'DD', 'Acc', 'PDT', 'MDT', 'BDT')
  44. state.WeaponskillMode:options('Normal', 'Acc')
  45. state.PhysicalDefenseMode:options('PDT')
  46. state.IdleMode:options('Regen', 'Refresh')
  47.  
  48. select_default_macro_book()
  49.  
  50.  
  51.  
  52. info.RuneEnchantment = S{"Tellus", "Unda", "Flabra", "Ignis", "Gelus", "Sulpor", "Lux", "Tenebrae"}
  53.  
  54. end
  55.  
  56.  
  57. function init_gear_sets()
  58. sets.organizer = {
  59. item="Echo Drop",
  60. item="Remedy",
  61. item="Sublime Sushi",
  62. item="Alber Strap",}
  63.  
  64. sets.enmity = {ammo="Iron Gobbet",
  65. head="Halitus Helm", neck="Unmoving Collar +1", ear1="Trux Earring", ear2="Cryptic Earring",
  66. body="Emet Harness +1", hands="Kurys Gloves", ring1="Provocare ring", ring2="Petrov Ring",
  67. back="Evasionist's Cape", waist="Goading Belt", legs="Eri. Leg Guards +1", feet="Erilaz Greaves +1"}
  68.  
  69.  
  70. --------------------------------------
  71. -- Precast sets
  72. --------------------------------------
  73.  
  74. -- Precast sets to enhance JAs
  75. sets.precast.JA['Vallation'] =set_combine(sets.enmity, {body="Runeist coat +1", legs="Futhark trousers +1"})
  76. sets.precast.JA['Valiance'] = sets.precast.JA['Vallation']
  77. sets.precast.JA['Pflug'] = set_combine(sets.enmity, {feet="Runeist bottes +1"})
  78. sets.precast.JA['Battuta'] = set_combine(sets.enmity, {head="Futhark Bandeau"})
  79. sets.precast.JA['Liement'] = set_combine(sets.enmity, {body="Futhark Coat +1"})
  80. sets.precast.JA['Lunge'] = {ammo="Ghastly Tathlum +1",
  81. head="Highwing Helm", neck="Eddy Necklace", ear1="Crematio Earring", ear2="Friomisi Earring",
  82. body="Samnuha Coat", hands="Leyline Gloves", ring1="Fenrir Ring +1", ring2="Shiva Ring +1",
  83. back="Toro Cape", waist="Eschan Stone", legs="Shned. Tights +1", feet="Manabyss Pigaches"}
  84.  
  85. sets.precast.JA['Swipe'] = sets.precast.JA['Lunge']
  86. sets.precast.JA['Gambit'] = set_combine(sets.enmity, {hands="Runeist Mitons +1"})
  87. sets.precast.JA['Rayke'] = set_combine(sets.enmity, {feet="Futhark Boots +1"})
  88. sets.precast.JA['Elemental Sforzo'] = set_combine(sets.enmity, {body="Futhark Coat +1"})
  89. sets.precast.JA['Swordplay'] = set_combine(sets.enmity, {hands="Futhark Mitons"})
  90. sets.precast.JA['Embolden'] = set_combine(sets.enmity, {back="Evasionist's Cape"})
  91. sets.precast.JA['Vivacious Pulse'] = set_combine(sets.enmity, {head="Erilaz Galea +1", legs="Rune. Trousers +1"})
  92. sets.precast.JA['One For All'] = set_combine(sets.enmity, {})
  93. sets.precast.JA['Provoke'] = sets.enmity
  94. sets.precast.JA['Sekkanoki'] = sets.enmity
  95. sets.precast.JA['Meditate'] = sets.enmity
  96. sets.precast.JA['Warding Circle'] = sets.enmity
  97. sets.precast.JA['Seigan'] = sets.enmity
  98. sets.precast.JA['Third Eye'] = sets.enmity
  99. sets.precast.JA['Hasso'] = sets.enmity
  100.  
  101. -- Fast cast sets for spells
  102. sets.precast.FC = {ammo="Sapience Orb",
  103. head="Carmine Mask", neck="Orunmila's Torque",
  104. ear1="Loquacious Earring", ear2="Etiolation Earring",
  105. body={ name="Taeon Tabard", augments={'"Fast Cast"+5',}},
  106. hands="Leyline Gloves",
  107. ring1="Weather. Ring", ring2="Prolix Ring",
  108. legs="Rawhide Trousers", feet="Carmine Greaves"}
  109.  
  110. sets.precast.FC['Enhancing Magic'] = set_combine(sets.precast.FC, {waist="Siegel Sash", legs="Futhark Trousers +1"})
  111. sets.precast.FC['Utsusemi: Ichi'] = set_combine(sets.precast.FC, {neck='Magoraga beads'})
  112. sets.precast.FC['Utsusemi: Ni'] = set_combine(sets.precast.FC['Utsusemi: Ichi'], {})
  113.  
  114.  
  115. -- Weaponskill sets
  116. sets.precast.WS = {ammo="Ginsen",
  117. head={ name="Herculean Helm", augments={'Weapon skill damage +4%',}},
  118. neck="Fotia Gorget", ear1="Brutal Earring", ear2="Moonshade Earring",
  119. body={ name="Herculean Vest", augments={'Accuracy+20 Attack+20','"Triple Atk."+3','AGI+8','Accuracy+14','Attack+11',}},
  120. hands={ name="Herculean Gloves", augments={'Accuracy+30','Phys. dmg. taken -3%','AGI+1','Attack+3',}},
  121. ring1="Ifrit Ring", ring2="Ifrit Ring",
  122. back="Buquwik Cape", waist="Fotia Belt",
  123. legs="Taeon Tights",
  124. feet={ name="Herculean Boots", augments={'Accuracy+25 Attack+25','"Store TP"+2','DEX+10','Accuracy+14','Attack+10',}},}
  125.  
  126. sets.precast.WS['Resolution'] = {ammo="Ginsen",
  127. head={ name="Herculean Helm", augments={'Weapon skill damage +4%',}}, neck="Fotia Gorget", ear1="Flame Pearl", ear2="Moonshade Earring",
  128. body="Rawhide Vest", hands="Erilaz Gauntlets +1", ring1="Ifrit Ring", ring2="Ifrit Ring",
  129. back="Buquwik Cape", waist="Fotia Belt", legs="Taeon Tights", feet={ name="Herculean Boots", augments={'Accuracy+25 Attack+25','"Store TP"+2','DEX+10','Accuracy+14','Attack+10',}},}
  130.  
  131. sets.precast.WS['Resolution'].Acc = set_combine(sets.precast.WS['Resolution'].Normal,
  132. {ammo="Amar Cluster",
  133. ear1="Cessance Earring",
  134. body={ name="Herculean Vest", augments={'Accuracy+20 Attack+20','"Triple Atk."+3','AGI+8','Accuracy+14','Attack+11',}}, ring1="Rufescent Ring",
  135. back="Grounded Mantle +1", feet={ name="Herculean Boots", augments={'Accuracy+25 Attack+25','"Store TP"+2','DEX+10','Accuracy+14','Attack+10',}},})
  136.  
  137. sets.precast.WS['Ground Strike'] = {ammo="Ginsen",
  138. head={ name="Herculean Helm", augments={'Weapon skill damage +4%',}}, neck="Fotia Gorget", ear1="Ishvara Earring", ear2="Moonshade Earring",
  139. body={ name="Herculean Vest", augments={'Accuracy+20 Attack+20','"Triple Atk."+3','AGI+8','Accuracy+14','Attack+11',}}, hands="Erilaz Gauntlets +1", ring1="Ifrit Ring", ring2="Ifrit Ring",
  140. back="Buquwik Cape", waist="Fotia Belt", legs="Taeon Tights", feet={ name="Herculean Boots", augments={'Accuracy+25 Attack+25','"Store TP"+2','DEX+10','Accuracy+14','Attack+10',}},}
  141.  
  142. sets.precast.WS['Ground Strike'].Acc = set_combine(sets.precast.WS['Ground Strike'].Normal,
  143. {ammo="Amar Cluster",
  144. ear1="Cessance Earring",
  145. body={ name="Herculean Vest", augments={'Accuracy+20 Attack+20','"Triple Atk."+3','AGI+8','Accuracy+14','Attack+11',}}, ring1="Rufescent Ring",
  146. back="Grounded Mantle +1", feet={ name="Herculean Boots", augments={'Accuracy+25 Attack+25','"Store TP"+2','DEX+10','Accuracy+14','Attack+10',}},})
  147.  
  148. sets.precast.WS['Savage Blade'] = {ammo="Ginsen",
  149. head={ name="Herculean Helm", augments={'Weapon skill damage +4%',}}, neck="Fotia Gorget", ear1="Flame Pearl", ear2="Moonshade Earring",
  150. body="Rawhide Vest", hands={ name="Herculean Gloves", augments={'Accuracy+30','Phys. dmg. taken -3%','AGI+1','Attack+3',}}, ring1="Ifrit Ring", ring2="Ifrit Ring",
  151. back="Buquwik Cape", waist="Fotia Belt", legs="Taeon Tights", feet={ name="Herculean Boots", augments={'Accuracy+25 Attack+25','"Store TP"+2','DEX+10','Accuracy+14','Attack+10',}},}
  152.  
  153. sets.precast.WS['Savage Blade'].Acc = set_combine(sets.precast.WS['Savage Blade'].Normal,
  154. {ammo="Amar Cluster",
  155. ear1="Cessance Earring",
  156. body={ name="Herculean Vest", augments={'Accuracy+20 Attack+20','"Triple Atk."+3','AGI+8','Accuracy+14','Attack+11',}}, ring1="Rufescent Ring",
  157. back="Grounded Mantle +1", feet={ name="Herculean Boots", augments={'Accuracy+25 Attack+25','"Store TP"+2','DEX+10','Accuracy+14','Attack+10',}},})
  158.  
  159. sets.precast.WS['Dimidiation'] = {ammo="Jukukik Feather",
  160. head={ name="Herculean Helm", augments={'Weapon skill damage +4%',}}, neck="Fotia Gorget", ear1="Ishvara Earring", ear2="Moonshade Earring",
  161. body="Rawhide Vest", hands="Rawhide Gloves", ring1="Ramuh Ring", ring2="Ramuh Ring",
  162. back="Kayapa Cape", waist="Fotia Belt", legs="Taeon Tights", feet={ name="Herculean Boots", augments={'Accuracy+25 Attack+25','"Store TP"+2','DEX+10','Accuracy+14','Attack+10',}},}
  163.  
  164. sets.precast.WS['Dimidiation'].Acc = set_combine(sets.precast.WS['Dimidiation'].Normal,
  165. {ammo="Honed Tathlum", head={ name="Herculean Helm", augments={'Weapon skill damage +4%',}}, ear1="Cessance Earring",})
  166.  
  167. sets.precast.WS['Herculean Slash'] = set_combine(sets.precast['Lunge'], {})
  168. sets.precast.WS['Herculean Slash'].Acc = set_combine(sets.precast.WS['Herculean Slash'].Normal, {})
  169.  
  170. sets.precast.WS['Sanguine Blade'] = set_combine(sets.precast['Lunge'], {ring1="Archon Ring"})
  171. sets.precast.WS['Sanguine Blade'].Acc = set_combine(sets.precast.WS['Sanguine Blade'].Normal, {})
  172.  
  173.  
  174. --------------------------------------
  175. -- Midcast sets
  176. --------------------------------------
  177.  
  178. sets.midcast.FastRecast = {}
  179. sets.midcast['Enhancing Magic'] = {head="Erilaz Galea +1", neck="Colossus's torque", ear1="Andoaa Earring",
  180. hands="Runeist mitons +1", waist="Olympus Sash",
  181. back="Merciful Cape", legs="Futhark Trousers +1"}
  182. sets.midcast['Phalanx'] = set_combine(sets.midcast['Enhancing Magic'], {head="Futhark Bandeau"})
  183. sets.midcast['Regen'] = {head="Runeist Bandeau +1", legs="Futhark Trousers +1"}
  184. sets.midcast['Refresh'] = set_combine(sets.enmity, {head="Erilaz Galea +1"})
  185. sets.midcast['Stoneskin'] = {waist="Siegel Sash"}
  186. sets.midcast.Cure = set_combine(sets.enmity, {neck="Colossus's Torque", feet="Futhark Boots +1"})
  187. sets.midcast['Flash'] = {ammo="Iron Gobbet",
  188. head="Halitus Helm", neck="Warder's Charm", ear1="Trux Earring", ear2="Cryptic Earring",
  189. body="Emet Harness +1", hands="Kurys Gloves", ring1="Provocare ring", ring2="Petrov Ring",
  190. back="Evasionist's Cape", waist="Goading Belt", legs="Eri. Leg Guards +1", feet="Erilaz Greaves +1"}
  191. sets.midcast['Foil'] = sets.midcast['Flash']
  192. sets.midcast['Crusade'] = sets.midcast['Flash']
  193.  
  194. --------------------------------------
  195. -- Idle/resting/defense/etc sets
  196. --------------------------------------
  197.  
  198. sets.idle = {ammo="Vanir Battery",
  199. head="Rawhide Mask", neck="Sanctity Necklace", ear1="Ethereal earring", ear2="Genmei earring",
  200. body="Runeist Coat +1", hands="Runeist Mitons +1", ring1="Sheltered Ring", ring2="Paguroidea ring",
  201. back="Reiki Cloak", waist="Fucho-no-Obi", legs="Rawhide Trousers", feet="Skadi's Jambeaux +1"}
  202.  
  203. sets.idle.Refresh = set_combine(sets.idle, {body="Runeist Coat +1", waist="Fucho-no-obi"})
  204.  
  205. sets.defense.PDT = {ammo="Iron Gobbet",
  206. head="Erilaz Galea +1", neck="Loricate Torque +1",
  207. ear1="Ethereal Earring", ear2="Genmei Earring",
  208. body="Erilaz Surcoat +1",
  209. hands="Runeist Mitons +1",
  210. ring1="Dark Ring", ring2="Dark Ring",
  211. waist="Flume Belt",
  212. legs="Eri. Leg Guards +1",
  213. feet="Erilaz Greaves +1",
  214. back="Evasionist's Cape"}
  215.  
  216.  
  217.  
  218. sets.defense.MDT = {ammo="Vanir Battery",
  219. head="Erilaz Galea +1", neck="Warder's Charm", ear1="Sanare Earring", ear2="Etiolation Earring",
  220. body="Runeist Coat +1", hands="Runeist Mitons +1", ring1="Dark Ring", ring2="Shadow Ring",
  221. back="Reiki Cloak", waist="Lieutenant's Sash", legs="Mes'yohi Slacks", feet="Erilaz Greaves +1",}
  222.  
  223. sets.defense.BDT = {ammo="Vanir Battery",
  224. head="Erilaz Galea +1", neck="Loricate Torque +1", ear1="Sanare Earring", ear2="Genmei Earring",
  225. body="Futhark Coat +1", hands="Kurys Gloves", ring1="Dark Ring", ring2="Dark Ring",
  226. back="Mollusca Mantle", waist="Lieutenant's Sash", legs="Mes'yohi Slacks", feet="Erilaz Greaves +1",}
  227.  
  228.  
  229. sets.Kiting = {feet="Skadi's Jambeaux +1"}
  230.  
  231.  
  232. --------------------------------------
  233. -- Engaged sets
  234. --------------------------------------
  235.  
  236. sets.engaged = {ammo="Ginsen",
  237. head="Dampening Tam", neck="Asperity Necklace", ear1="Trux Earring", ear2="Brutal Earring",
  238. body={ name="Herculean Vest", augments={'Accuracy+20 Attack+20','"Triple Atk."+3','AGI+8','Accuracy+14','Attack+11',}},
  239. hands={ name="Herculean Gloves", augments={'Accuracy+30','Phys. dmg. taken -3%','AGI+1','Attack+3',}},
  240. ring1="Epona's Ring", ring2="Petrov Ring",
  241. back="Bleating Mantle", waist="Windbuffet Belt +1",
  242. legs="Taeon Tights",
  243. feet={ name="Herculean Boots", augments={'Accuracy+25 Attack+25','"Store TP"+2','DEX+10','Accuracy+14','Attack+10',}},}
  244.  
  245. sets.engaged.DD = {ammo="Ginsen",
  246. head="Dampening Tam", neck="Asperity Necklace", ear1="Trux Earring", ear2="Brutal Earring",
  247. body="Rawhide Vest", hands={ name="Herculean Gloves", augments={'Accuracy+30','Phys. dmg. taken -3%','AGI+1','Attack+3',}}, ring1="Epona's Ring", ring2="Petrov Ring",
  248. back="Bleating Mantle", waist="Windbuffet Belt +1",
  249. legs="Ta'lab Trousers", feet={ name="Herculean Boots", augments={'Accuracy+25 Attack+25','"Store TP"+2','DEX+10','Accuracy+14','Attack+10',}},}
  250.  
  251. sets.engaged.DDDW = {ammo="Ginsen",
  252. head="Adhemar Bonnet",
  253. neck="Asperity Necklace",
  254. --ear1="Cessance Earring",
  255. ear1="Brutal Earring",ear2="Suppanomimi",
  256. body="Adhemar Jacket",
  257. hands="Adhemar Wristbands",
  258. ring1="Petrov Ring",ring2="Epona's Ring",
  259. back="Bleating Mantle",
  260. waist="Windbuffet Belt +1",
  261. legs="Samnuha Tights",
  262. feet={ name="Herculean Boots", augments={'Accuracy+25 Attack+25','"Store TP"+2','DEX+10','Accuracy+14','Attack+10',}}}
  263.  
  264.  
  265. sets.engaged.Acc = {ammo="Honed Tathlum",
  266. head="Adhemar Bonnet", neck="Combatant's Torque", ear1="Cessance Earring", ear2="Zennaroi Earring",
  267. body={ name="Herculean Vest", augments={'Accuracy+20 Attack+20','"Triple Atk."+3','AGI+8','Accuracy+14','Attack+11',}},
  268. hands={ name="Herculean Gloves", augments={'Accuracy+30','Phys. dmg. taken -3%','AGI+1','Attack+3',}},
  269. ring1="Ramuh Ring", ring2="Ramuh Ring",
  270. back="Grounded Mantle +1", waist="Kentarch Belt +1",
  271. legs={ name="Herculean Trousers", augments={'Accuracy+22 Attack+22','Weapon skill damage +2%','AGI+7','Accuracy+14',}},
  272. feet={ name="Herculean Boots", augments={'Accuracy+25 Attack+25','"Store TP"+2','DEX+10','Accuracy+14','Attack+10',}},}
  273.  
  274. sets.engaged.PDT = {ammo="Amar Cluster",
  275. head="Lithelimb Cap", neck="Combatant's Torque", ear1="Ethereal Earring", ear2="Genmei Earring",
  276. body="Erilaz Surcoat +1", hands="Erilaz Gauntlets +1", ring1="Dark Ring", ring2="Dark Ring",
  277. back="Evasionist's Cape", waist="Flume Belt", legs="Eri. Leg Guards +1", feet="Erilaz Greaves +1"}
  278.  
  279. sets.engaged.MDT = {ammo="Vanir Battery",
  280. head="Dampening Tam", neck="Loricate Torque +1", ear1="Sanare Earring", ear2="Etiolation Earring",
  281. body="Runeist Coat +1", hands="Futhark Mitons", ring1="Dark Ring", ring2="Shadow Ring",
  282. back="Engulfer Cape", waist="Flume Belt", legs="Eri. Leg Guards +1", feet="Erilaz Greaves +1"}
  283.  
  284. sets.engaged.BDT = {ammo="Vanir Battery",
  285. head="Erilaz Galea +1", neck="Loricate Torque +1", ear1="Sanare Earring", ear2="Genmei Earring",
  286. body="Futhark Coat +1", hands="Kurys Gloves", ring1="Dark Ring", ring2="Dark Ring",
  287. back="Mollusca Mantle", waist="Lieutenant's Sash", legs="Mes'yohi Slacks", feet="Erilaz Greaves +1",}
  288.  
  289. sets.engaged.Tank = {ammo="Amar Cluster",
  290. head="Erilaz Galea +1",
  291. neck="Loricate Torque +1",ear1="Ethereal Earring", ear2="Genmei Earring",
  292. body="Futhark Coat +1",
  293. hands={ name="Herculean Gloves", augments={'Accuracy+30','Phys. dmg. taken -3%','AGI+1','Attack+3',}},
  294. legs="Eri. Leg Guards +1",
  295. feet="Erilaz Greaves +1",
  296. ring1="Dark Ring", ring2="Dark Ring",
  297. waist="Flume Belt",
  298. back="Shadow Mantle"}
  299.  
  300. sets.engaged.repulse = {}
  301.  
  302. sets.engaged.Aettir = {main="Aettir"}
  303. sets.engaged.Fettering = {main="Fettering Blade"}
  304.  
  305. end
  306.  
  307. ------------------------------------------------------------------
  308. -- Action events
  309. ------------------------------------------------------------------
  310.  
  311. -- Run after the default midcast() is done.
  312. -- eventArgs is the same one used in job_midcast, in case information needs to be persisted.
  313. function job_post_midcast(spell, action, spellMap, eventArgs)
  314. if spell.english == 'Lunge' or spell.english == 'Swipe' then
  315. local obi = get_obi(get_rune_obi_element())
  316. if obi then
  317. equip({waist=obi})
  318. end
  319. end
  320. end
  321.  
  322.  
  323. function job_aftercast(spell)
  324. if not spell.interrupted then
  325. if spell.type == 'Rune' then
  326. update_timers(spell)
  327. elseif spell.name == "Lunge" or spell.name == "Gambit" or spell.name == 'Rayke' then
  328. reset_timers()
  329. elseif spell.name == "Swipe" then
  330. send_command(trim(1))
  331. end
  332. end
  333. end
  334.  
  335.  
  336. -------------------------------------------------------------------------------------------------------------------
  337. -- Customization hooks for idle and melee sets, after they've been automatically constructed.
  338. -------------------------------------------------------------------------------------------------------------------
  339.  
  340. -------------------------------------------------------------------------------------------------------------------
  341. -- General hooks for other events.
  342. -------------------------------------------------------------------------------------------------------------------
  343. function job_precast(spell)
  344. if info.RuneEnchantment:contains(spell.english) then
  345. equip(sets.enmity)
  346. end
  347. end
  348. -------------------------------------------------------------------------------------------------------------------
  349. -- User code that supplements self-commands.
  350. -------------------------------------------------------------------------------------------------------------------
  351.  
  352. -------------------------------------------------------------------------------------------------------------------
  353. -- Utility functions specific to this job.
  354. -------------------------------------------------------------------------------------------------------------------
  355.  
  356. -- Select default macro book on initial load or subjob change.
  357. function select_default_macro_book()
  358. -- Default macro set/book
  359. if player.sub_job == 'WAR' then
  360. set_macro_page(4, 14)
  361. elseif player.sub_job == 'NIN' then
  362. set_macro_page(4, 14)
  363. elseif player.sub_job == 'SAM' then
  364. set_macro_page(4, 14)
  365. else
  366. set_macro_page(4, 14)
  367. end
  368. end
  369.  
  370. function get_rune_obi_element()
  371. weather_rune = buffactive[elements.rune_of[world.weather_element] or '']
  372. day_rune = buffactive[elements.rune_of[world.day_element] or '']
  373.  
  374. local found_rune_element
  375.  
  376. if weather_rune and day_rune then
  377. if weather_rune > day_rune then
  378. found_rune_element = world.weather_element
  379. else
  380. found_rune_element = world.day_element
  381. end
  382. elseif weather_rune then
  383. found_rune_element = world.weather_element
  384. elseif day_rune then
  385. found_rune_element = world.day_element
  386. end
  387.  
  388. return found_rune_element
  389. end
  390.  
  391. function get_obi(element)
  392. if element and elements.obi_of[element] then
  393. return (player.inventory[elements.obi_of[element]] or player.wardrobe[elements.obi_of[element]]) and elements.obi_of[element]
  394. end
  395. end
  396.  
  397.  
  398. ------------------------------------------------------------------
  399. -- Timer manipulation
  400. ------------------------------------------------------------------
  401.  
  402. -- Add a new run to the custom timers, and update index values for existing timers.
  403. function update_timers(spell)
  404. local expires_time = os.time() + 300
  405. local entry_index = rune_count(spell.name) + 1
  406.  
  407. local entry = {rune=spell.name, index=entry_index, expires=expires_time}
  408.  
  409. rune_timers:append(entry)
  410. local cmd_queue = create_timer(entry).. ';wait 0.05;'
  411.  
  412. cmd_queue = cmd_queue .. trim()
  413.  
  414. -- add_to_chat(123,'cmd_queue='..cmd_queue)
  415.  
  416. send_command(cmd_queue)
  417. end
  418.  
  419. -- Get the command string to create a custom timer for the provided entry.
  420. function create_timer(entry)
  421. local timer_name = '"Rune: ' .. entry.rune .. '-' .. tostring(entry.index) .. '"'
  422. local duration = entry.expires - os.time()
  423. return 'timers c ' .. timer_name .. ' ' .. tostring(duration) .. ' down'
  424. end
  425.  
  426. -- Get the command string to delete a custom timer for the provided entry.
  427. function delete_timer(entry)
  428. local timer_name = '"Rune: ' .. entry.rune .. '-' .. tostring(entry.index) .. '"'
  429. return 'timers d ' .. timer_name .. ''
  430. end
  431.  
  432. -- Reset all timers
  433. function reset_timers()
  434. local cmd_queue = ''
  435. for index,entry in pairs(rune_timers) do
  436. cmd_queue = cmd_queue .. delete_timer(entry) .. ';wait 0.05;'
  437. end
  438. rune_timers:clear()
  439. send_command(cmd_queue)
  440. end
  441.  
  442. -- Get a count of the number of runes of a given type
  443. function rune_count(rune)
  444. local count = 0
  445. local current_time = os.time()
  446. for _,entry in pairs(rune_timers) do
  447. if entry.rune == rune and entry.expires > current_time then
  448. count = count + 1
  449. end
  450. end
  451. return count
  452. end
  453.  
  454. -- Remove the oldest rune(s) from the table, until we're below the max_runes limit.
  455. -- If given a value n, remove n runes from the table.
  456. function trim(n)
  457. local cmd_queue = ''
  458.  
  459. local to_remove = n or (rune_timers:length() - max_runes)
  460.  
  461. while to_remove > 0 and rune_timers:length() > 0 do
  462. local oldest
  463. for index,entry in pairs(rune_timers) do
  464. if oldest == nil or entry.expires < rune_timers[oldest].expires then
  465. oldest = index
  466. end
  467. end
  468.  
  469. cmd_queue = cmd_queue .. prune(rune_timers[oldest].rune)
  470. to_remove = to_remove - 1
  471. end
  472.  
  473. return cmd_queue
  474. end
  475.  
  476. -- Drop the index of all runes of a given type.
  477. -- If the index drops to 0, it is removed from the table.
  478. function prune(rune)
  479. local cmd_queue = ''
  480.  
  481. for index,entry in pairs(rune_timers) do
  482. if entry.rune == rune then
  483. cmd_queue = cmd_queue .. delete_timer(entry) .. ';wait 0.05;'
  484. entry.index = entry.index - 1
  485. end
  486. end
  487.  
  488. for index,entry in pairs(rune_timers) do
  489. if entry.rune == rune then
  490. if entry.index == 0 then
  491. rune_timers[index] = nil
  492. else
  493. cmd_queue = cmd_queue .. create_timer(entry) .. ';wait 0.05;'
  494. end
  495. end
  496. end
  497.  
  498. return cmd_queue
  499. end
  500.  
  501.  
  502. ------------------------------------------------------------------
  503. -- Reset events
  504. ------------------------------------------------------------------
  505.  
  506. windower.raw_register_event('zone change',reset_timers)
  507. windower.raw_register_event('logout',reset_timers)
  508. windower.raw_register_event('status change',function(new, old)
  509. if gearswap.res.statuses[new].english == 'Dead' then
  510. reset_timers()
  511. end
  512. end)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement