summaryrefslogtreecommitdiff
path: root/Data/BuiltIn/Libraries/lua-addons/addons/autocontrol/burdometer.lua
diff options
context:
space:
mode:
Diffstat (limited to 'Data/BuiltIn/Libraries/lua-addons/addons/autocontrol/burdometer.lua')
-rw-r--r--Data/BuiltIn/Libraries/lua-addons/addons/autocontrol/burdometer.lua96
1 files changed, 96 insertions, 0 deletions
diff --git a/Data/BuiltIn/Libraries/lua-addons/addons/autocontrol/burdometer.lua b/Data/BuiltIn/Libraries/lua-addons/addons/autocontrol/burdometer.lua
new file mode 100644
index 0000000..c36f645
--- /dev/null
+++ b/Data/BuiltIn/Libraries/lua-addons/addons/autocontrol/burdometer.lua
@@ -0,0 +1,96 @@
+local sets = require("sets")
+local texts = require("texts")
+local burden = require("burden")
+
+local pet_actions =
+{
+ [136] = "activate",
+ [139] = "deactivate",
+ [141] = "fire",
+ [142] = "ice",
+ [143] = "wind",
+ [144] = "earth",
+ [145] = "thunder",
+ [146] = "water",
+ [147] = "light",
+ [148] = "dark",
+ [309] = "cooldown",
+ [310] = "deus_ex_automata",
+}
+
+local maneuvers =
+S{
+ 141,
+ 142,
+ 143,
+ 144,
+ 145,
+ 146,
+ 147,
+ 148,
+}
+
+str = 'Fire: \\cs(${color_fire|255,255,255})${fire|0}\\cr - ${time_fire|0}s - ${risk_fire|0}%'
+str = str .. '\nIce: \\cs(${color_ice|255,255,255})${ice|0}\\cr - ${time_ice|0}s - ${risk_ice|0}%'
+str = str .. '\nWind: \\cs(${color_wind|255,255,255})${wind|0}\\cr - ${time_wind|0}s - ${risk_wind|0}%'
+str = str .. '\nEarth: \\cs(${color_earth|255,255,255})${earth|0}\\cr - ${time_earth|0}s - ${risk_earth|0}%'
+str = str .. '\nThunder: \\cs(${color_thunder|255,255,255})${thunder|0}\\cr - ${time_thunder|0}s - ${risk_thunder|0}%'
+str = str .. '\nWater: \\cs(${color_water|255,255,255})${water|0}\\cr - ${time_water|0}s - ${risk_water|0}%'
+str = str .. '\nLight: \\cs(${color_light|255,255,255})${light|0}\\cr - ${time_light|0}s - ${risk_light|0}%'
+str = str .. '\nDark: \\cs(${color_dark|255,255,255})${dark|0}\\cr - ${time_dark|0}s - ${risk_dark|0}%'
+
+local hud = texts.new(str, settings)
+
+function update_hud(element)
+ hud[element] = burden[element]
+
+ risk = burden[element] - burden.threshold
+ hud["risk_" .. element] = risk > 0 and risk or 0
+ hud["color_" .. element] = "255," .. (risk > 33 and 0 or 255) .. "," .. (risk > 0 and 0 or 255)
+ hud["time_" .. element] = (burden[element] / burden.decay_rate) * 3
+end
+
+windower.register_event("action", function(act)
+ local abil_id = act['param']
+ local actor_id = act['actor_id']
+ local player = windower.ffxi.get_player()
+ local pet_index = windower.ffxi.get_mob_by_index(player.index).pet_index
+
+ if player.main_job_id ~= 18 then
+ return
+ end
+
+ if act["category"] == 6 and actor_id == player.id and pet_actions[abil_id] then
+ burden:update(pet_actions[abil_id]) -- Always assumes good burden (+15).
+ if maneuvers:contains(abil_id) then
+ if act.targets[1].actions[1].param > 0 then
+ burden[pet_actions[abil_id]] = burden.threshold + act.targets[1].actions[1].param -- Corrects for bad burden when over threshold.
+ end
+ update_hud(pet_actions[abil_id])
+ end
+ end
+end)
+
+local function decay_event()
+ for element in pairs(burden) do
+ update_hud(element)
+ end
+end
+burden.set_decay_event(decay_event)
+
+windower.register_event("zone change", function()
+ burden:zone()
+end)
+
+local function update_decay_rate(buff_id)
+ if buff_id == 305 then
+ burden:update_decay_rate()
+ end
+end
+
+windower.register_event("gain buff", update_decay_rate)
+windower.register_event("lose buff", update_decay_rate)
+
+decay_event()
+
+return hud