summaryrefslogtreecommitdiff
path: root/Data/BuiltIn/Libraries/addons/addons/autocontrol/burden.lua
diff options
context:
space:
mode:
Diffstat (limited to 'Data/BuiltIn/Libraries/addons/addons/autocontrol/burden.lua')
-rw-r--r--Data/BuiltIn/Libraries/addons/addons/autocontrol/burden.lua186
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