Hypnotoad
8 years ago
commit
c74bda6338
4 changed files with 268 additions and 0 deletions
@ -0,0 +1,3 @@
@@ -0,0 +1,3 @@
|
||||
# status |
||||
|
||||
Tracks party member's debuffs onscreen without needing to target them. |
@ -0,0 +1,11 @@
@@ -0,0 +1,11 @@
|
||||
{ |
||||
"font": { |
||||
"bgcolor": 2147483648, |
||||
"bgvisible": true, |
||||
"color": 4294967295, |
||||
"family": "Arial", |
||||
"position": [ 100, 300 ], |
||||
"size": 10 |
||||
}, |
||||
"max_displayed": 10 |
||||
} |
@ -0,0 +1,182 @@
@@ -0,0 +1,182 @@
|
||||
--[[ |
||||
* Ashita - Copyright (c) 2014 - 2017 atom0s [atom0s@live.com] |
||||
* |
||||
* This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. |
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/ or send a letter to |
||||
* Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. |
||||
* |
||||
* By using Ashita, you agree to the above license and its terms. |
||||
* |
||||
* Attribution - You must give appropriate credit, provide a link to the license and indicate if changes were |
||||
* made. You must do so in any reasonable manner, but not in any way that suggests the licensor |
||||
* endorses you or your use. |
||||
* |
||||
* Non-Commercial - You may not use the material (Ashita) for commercial purposes. |
||||
* |
||||
* No-Derivatives - If you remix, transform, or build upon the material (Ashita), you may not distribute the |
||||
* modified material. You are, however, allowed to submit the modified works back to the original |
||||
* Ashita project in attempt to have it added to the original project. |
||||
* |
||||
* You may not apply legal terms or technological measures that legally restrict others |
||||
* from doing anything the license permits. |
||||
* |
||||
* No warranties are given. |
||||
]]-- |
||||
|
||||
_addon.author = 'Hypnotoad'; |
||||
_addon.name = 'status'; |
||||
_addon.version = '3.0.0'; |
||||
|
||||
require 'common' |
||||
local StatusEffects = require('statuseffects'); |
||||
local Party = {}; |
||||
|
||||
--------------------------------------------------------------------------------------------------- |
||||
-- desc: Default Status configuration table. |
||||
--------------------------------------------------------------------------------------------------- |
||||
local default_config = |
||||
{ |
||||
max_displayed = 10, |
||||
font = |
||||
{ |
||||
family = 'Arial', |
||||
size = 10, |
||||
color = 0xFFFFFFFF, |
||||
position = { 100, 300 }, |
||||
bgcolor = 0x80000000, |
||||
bgvisible = true, |
||||
} |
||||
}; |
||||
local configs = default_config; |
||||
|
||||
--------------------------------------------------------------------------------------------------- |
||||
-- func: load |
||||
-- desc: First called when our addon is loaded. |
||||
--------------------------------------------------------------------------------------------------- |
||||
ashita.register_event('load', function() |
||||
-- Load the configuration file.. |
||||
configs = ashita.settings.load_merged(_addon.path .. '/settings/settings.json', configs); |
||||
|
||||
local previous = 0; |
||||
for i = 1, 5 do |
||||
Party[i] = {}; |
||||
Party[i][1] = ''; -- party member name |
||||
Party[i][2] = {}; -- buff name |
||||
Party[i][3] = {}; -- buff id |
||||
|
||||
local name = string.format("__status_bar%d", i); |
||||
local bar = AshitaCore:GetFontManager():Create(name); |
||||
|
||||
if (i == 1) then |
||||
bar:SetPositionX(configs.font.position[1]); |
||||
bar:SetPositionY(configs.font.position[2]); |
||||
else |
||||
bar:SetParent(previous); |
||||
bar:SetAnchorParent(1); -- 1 = Right |
||||
bar:SetPositionX(3); |
||||
bar:SetPositionY(0); |
||||
end |
||||
|
||||
bar:SetColor(configs.font.color); |
||||
bar:SetFontFamily(configs.font.family); |
||||
bar:SetFontHeight(configs.font.size); |
||||
bar:SetBold(false); |
||||
bar:GetBackground():SetColor(configs.font.bgcolor); |
||||
bar:GetBackground():SetVisibility(configs.font.bgvisible); |
||||
bar:SetVisibility(true); |
||||
|
||||
previous = bar; |
||||
|
||||
for j = 1, 32 do |
||||
Party[i][3][j] = 0xFF; |
||||
end |
||||
end |
||||
end); |
||||
|
||||
--------------------------------------------------------------------------------------------------- |
||||
-- func: unload |
||||
-- desc: Called when our addon is unloaded. |
||||
--------------------------------------------------------------------------------------------------- |
||||
ashita.register_event('unload', function() |
||||
-- Get the font object.. |
||||
local f = AshitaCore:GetFontManager():Get('__status_bar1'); |
||||
|
||||
-- Update the configuration position.. |
||||
configs.font.position = { f:GetPositionX(), f:GetPositionY() }; |
||||
|
||||
-- Save the configuration file.. |
||||
ashita.settings.save(_addon.path .. '/settings/settings.json', configs); |
||||
|
||||
-- Delete the font objects.. |
||||
for i = 1, 5 do |
||||
local name = string.format("__status_bar%d", i); |
||||
AshitaCore:GetFontManager():Delete(name); |
||||
end |
||||
end); |
||||
|
||||
--------------------------------------------------------------------------------------------------- |
||||
-- func: Render |
||||
-- desc: Called when our addon is rendered. |
||||
--------------------------------------------------------------------------------------------------- |
||||
ashita.register_event('render', function() |
||||
local Text = ''; |
||||
local limit = 0; |
||||
|
||||
for i = 1, 5 do |
||||
local Text = ''; |
||||
local name = string.format("__status_bar%d", i); |
||||
local bar = AshitaCore:GetFontManager():Get(name); |
||||
|
||||
for j = 1, 32 do |
||||
if (limit >= configs.max_displayed) then |
||||
break; |
||||
end |
||||
|
||||
if (Party[i][3][j] ~= 0xFF) then |
||||
if (Text ~= "") then |
||||
Text = Text .. "\n"; |
||||
end |
||||
|
||||
Text = Text .. Party[i][2][j] .. " (" .. Party[i][1] .. ")"; |
||||
limit = limit + 1; |
||||
end |
||||
end |
||||
|
||||
bar:SetText(Text); |
||||
Text = ''; |
||||
end |
||||
end); |
||||
|
||||
--------------------------------------------------------------------------------------------------- |
||||
-- func: incoming_packet |
||||
-- desc: Called when our addon receives an incoming packet. |
||||
--------------------------------------------------------------------------------------------------- |
||||
ashita.register_event('incoming_packet', function(id, size, packet) |
||||
-- Party Member's Status |
||||
if (id == 0x76) then |
||||
for i = 0, 4 do |
||||
local userIndex = struct.unpack('H', packet, 8+1 + (i * 0x30)); |
||||
|
||||
if (AshitaCore:GetDataManager():GetEntity():GetName(userIndex) ~= nil) then |
||||
|
||||
Party[i+1][1] = AshitaCore:GetDataManager():GetEntity():GetName(userIndex); |
||||
|
||||
for j = 0, 31 do |
||||
local BitMask = bit.band(bit.rshift(struct.unpack('b', packet, bit.rshift(j, 2) + 0x0C + (i * 0x30) + 1), 2 * (j % 4)), 3); |
||||
if (struct.unpack('b', packet, 0x14 + (i * 0x30) + j + 1) ~= -1 or BitMask > 0) then |
||||
local buffid = bit.bor(struct.unpack('B', packet, 0x14 + (i * 0x30) + j + 1), bit.lshift(BitMask, 8)); |
||||
|
||||
if (table.haskey(StatusEffects, buffid)) then |
||||
Party[i+1][2][j+1] = AshitaCore:GetResourceManager():GetString("statusnames", buffid, 2); |
||||
Party[i+1][3][j+1] = buffid; |
||||
else |
||||
Party[i+1][3][j+1] = 0xFF; |
||||
end |
||||
end |
||||
end |
||||
end |
||||
end |
||||
end |
||||
|
||||
return false; |
||||
end); |
@ -0,0 +1,72 @@
@@ -0,0 +1,72 @@
|
||||
|
||||
local StatusEffects = |
||||
{ |
||||
2, -- Sleep |
||||
3, -- Poison |
||||
4, -- Paralysis |
||||
5, -- Blindness |
||||
6, -- Silence |
||||
7, -- Petrification |
||||
8, -- Disease |
||||
9, -- Curse |
||||
11, -- Bind |
||||
12, -- Weight |
||||
13, -- Slow |
||||
14, -- Charm |
||||
15, -- Doom |
||||
17, -- Charm |
||||
19, -- Sleep |
||||
20, -- Curse |
||||
21, -- Addle |
||||
31, -- Plague |
||||
--40, -- Protect |
||||
--41, -- Shell |
||||
--42, -- Regen |
||||
--43, -- Refresh |
||||
--100, -- Barfire |
||||
--101, -- Barblizzard |
||||
--102, -- Baraero |
||||
--103, -- Barstone |
||||
--104, -- Barthunder |
||||
--105, -- Barwater |
||||
--106, -- Barsleep |
||||
--107, -- Barpoison |
||||
--108, -- Barparalyze |
||||
--109, -- Barblind |
||||
--110, -- Barsilence |
||||
--111, -- Barpetrify |
||||
--112, -- Barvirus |
||||
128, -- Burn |
||||
129, -- Frost |
||||
130, -- Choke |
||||
131, -- Rasp |
||||
132, -- Shock |
||||
133, -- Drown |
||||
134, -- Dia |
||||
135, -- Bio |
||||
136, -- STR Down |
||||
137, -- DEX Down |
||||
138, -- VIT Down |
||||
139, -- AGI Down |
||||
140, -- INT Down |
||||
141, -- MND Down |
||||
142, -- CHR Down |
||||
144, -- Max HP Down |
||||
145, -- Max MP Down |
||||
146, -- Accuracy Down |
||||
147, -- Attack Down |
||||
148, -- Evasion Down |
||||
149, -- Defense Down |
||||
156, -- Flash |
||||
167, -- Magic Def Down |
||||
168, -- Inhibit TP |
||||
174, -- Magic Acc Down |
||||
175, -- Magic Atk Down |
||||
189, -- Max TP Down |
||||
--275, -- Auspice |
||||
--286, -- Baramnesia |
||||
404, -- Magic Evasion Down |
||||
473 -- Muddled |
||||
}; |
||||
|
||||
return StatusEffects; |
Loading…
Reference in new issue