diff options
Diffstat (limited to 'Data/BuiltIn/Libraries/addons/addons/autocontrol/burden.lua')
-rw-r--r-- | Data/BuiltIn/Libraries/addons/addons/autocontrol/burden.lua | 186 |
1 files changed, 186 insertions, 0 deletions
diff --git a/Data/BuiltIn/Libraries/addons/addons/autocontrol/burden.lua b/Data/BuiltIn/Libraries/addons/addons/autocontrol/burden.lua new file mode 100644 index 0000000..51a8136 --- /dev/null +++ b/Data/BuiltIn/Libraries/addons/addons/autocontrol/burden.lua @@ -0,0 +1,186 @@ +local set = require("sets") +local packets = require("packets") + +local o = { + fire = 0, + earth = 0, + water = 0, + wind = 0, + ice = 0, + thunder = 0, + light = 0, + dark = 0, +} +local burden = {} +local mt = { + __index = burden +} +setmetatable(o, mt) +local updaters = {} +local heatsink + +windower.register_event('incoming chunk',function(id,org,modi,is_injected,is_blocked) + if id == 0x044 then + local attachments = windower.ffxi.get_mjob_data().attachments + if attachments then + for _, id in pairs(attachments) do + heatsink = (id == 8610) + if heatsink then + break + end + end + end + end +end) + +local thresholdModifiers = +{ + [11101] = 40, -- Cirque Farsetto +2 + [11201] = 20, -- Cirque Farsetto +1 + [14930] = 5, -- Pup. Dastanas + [15030] = 5, -- Pup. Dastanas +1 + [16281] = 5, -- Buffoon's Collar + [16282] = 5, -- Buffoon's Collar +1 + [20520] = 40, -- Midnights + [26263] = 10, -- Visucius's Mantle + [26932] = 40, -- Kara. Farsetto + [26933] = 40, -- Kara. Farsetto +1 + [27960] = 5, -- Foire Dastanas + [27981] = 5, -- Foire Dastanas +1 + [28634] = 5, -- Dispersal Mantle +} +burden.threshold = 30 + +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", +} +function burden:update(action) + updaters[action](self) +end + +function burden:zone() + for k in pairs(self) do + self[k] = 15 + end +end + +function burden.set_decay_event(func) + burden.decay_event = func +end +function updaters.deactivate(self) + for k in pairs(self) do + self[k] = 0 + end +end + +function updaters.activate(self) + for _, id in pairs(windower.ffxi.get_mjob_data().attachments) do + heatsink = (id == 8610) + if heatsink then + break + end + end + burden.update_decay_rate() + for k in pairs(self) do + self[k] = 15 + end +end +updaters.deus_ex_automata = updaters.activate + +function updaters.cooldown(self) + for k in pairs(self) do + self[k] = self[k] / 2 + end +end + +function updaters.maneuver(self, type) + self[type] = self[type] + 15 + local inventory = windower.ffxi.get_items() + local equipment = { + sub = {}, + ammo = {}, + main = {}, + head = {}, + body = {}, + back = {}, + legs = {}, + feet = {}, + neck = {}, + hands = {}, + range = {}, + waist = {}, + left_ear = {}, + left_ring = {}, + right_ear = {}, + right_ring = {}, + } + for k, v in pairs(inventory.equipment) do + equipment[string.gsub(k ,"_bag","")][k] = v + end + burden.threshold = 30 + for k, v in pairs(equipment) do + item = windower.ffxi.get_items(v[k .. "_bag"], v[k]) + if thresholdModifiers[item.id] then + burden.threshold = burden.threshold + thresholdModifiers[item.id] + end + end +end + +function updaters.ice(self) updaters.maneuver(self, "ice") end +function updaters.fire(self) updaters.maneuver(self, "fire") end +function updaters.wind(self) updaters.maneuver(self, "wind") end +function updaters.dark(self) updaters.maneuver(self, "dark") end +function updaters.earth(self) updaters.maneuver(self, "earth") end +function updaters.water(self) updaters.maneuver(self, "water") end +function updaters.light(self) updaters.maneuver(self, "light") end +function updaters.thunder(self) updaters.maneuver(self, "thunder") end + +burden.decay_rate = 1 +function burden.decay() + for k in pairs(o) do + if o[k] > burden.decay_rate then + o[k] = o[k] - burden.decay_rate + elseif o[k] > 0 then + o[k] = 0 + end + end + if burden.decay_event then + burden.decay_event() + end + coroutine.schedule(burden.decay, 3) +end +coroutine.schedule(burden.decay, os.date("*t").sec % 3) + +local count_to_decay_rate = { + [0] = 2, + [1] = 4, + [2] = 5, + [3] = 6, +} +function burden.update_decay_rate() + if heatsink then + local count = 0 + for _, v in pairs(windower.ffxi.get_player().buffs) do + if v == 305 then + count = count + 1 + end + end + burden.decay_rate = count_to_decay_rate[count]; + else + burden.decay_rate = 1 + end +end + +return o |