The main release package of Ashita v3. Contains all the needed files for users to get up and running. Used by the launcher/injector to auto-update as well. https://ashitaxi.com/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

205 lines
7.9 KiB

--[[
* 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 = 'atom0s';
_addon.name = 'tparty';
_addon.version = '3.0.0';
require 'common'
require 'ffxi.targets'
----------------------------------------------------------------------------------------------------
-- Variables
----------------------------------------------------------------------------------------------------
local tparty = { };
tparty.targethpp_str = '__tparty_targethpp'; -- The base name used for a string object.
tparty.partytpp_str = '__tparty_partytpp'; -- The base name used for a string object.
----------------------------------------------------------------------------------------------------
-- func: load
-- desc: Event called when the addon is being loaded.
----------------------------------------------------------------------------------------------------
ashita.register_event('load', function()
-- Pull the current configuration info for position calculations..
tparty.window_x = AshitaCore:GetConfigurationManager():get_int32('boot_config', 'window_x', 800);
tparty.window_y = AshitaCore:GetConfigurationManager():get_int32('boot_config', 'window_y', 800);
tparty.menu_x = AshitaCore:GetConfigurationManager():get_int32('boot_config', 'menu_x', 0);
tparty.menu_y = AshitaCore:GetConfigurationManager():get_int32('boot_config', 'menu_y', 0);
-- Ensure the menu sizes have a valid resolution..
if (tparty.menu_x <= 0) then
tparty.menu_x = tparty.window_x;
end
if (tparty.menu_y <= 0) then
tparty.menu_y = tparty.window_y;
end
-- Calculate the scaling based on the resolution..
tparty.scale_x = tparty.window_x / tparty.menu_x;
tparty.scale_y = tparty.window_y / tparty.menu_y;
-- Create the target hp % text object..
local f = AshitaCore:GetFontManager():Create(tparty.targethpp_str);
f:SetColor(0xFFFFFFFF);
f:SetFontFamily('Arial');
f:SetFontHeight(8 * tparty.scale_y);
f:SetBold(true);
f:SetRightJustified(true);
f:SetPositionX(0);
f:SetPositionY(0);
f:SetText('0.0');
f:SetLocked(true);
f:SetVisibility(true);
-- Create the individual party member labels..
for x = 0, 17 do
f = AshitaCore:GetFontManager():Create(string.format('%s%d', tparty.partytpp_str, x));
f:SetColor(0xFFFFFFFF);
f:SetFontFamily('Arial');
f:SetFontHeight(8 * tparty.scale_y);
f:SetBold(true);
f:SetRightJustified(true);
f:SetPositionX(0);
f:SetPositionY(0);
f:SetText(string.format('TP: %d', x));
f:SetLocked(true);
f:SetVisibility(true);
end
end);
----------------------------------------------------------------------------------------------------
-- func: unload
-- desc: Event called when the addon is being unloaded.
----------------------------------------------------------------------------------------------------
ashita.register_event('unload', function()
-- Cleanup the font objects..
AshitaCore:GetFontManager():Delete(tparty.targethpp_str);
for x = 0, 17 do
AshitaCore:GetFontManager():Delete(string.format('%s%d', tparty.partytpp_str, x));
end
end);
----------------------------------------------------------------------------------------------------
-- func: render
-- desc: Event called when the addon is being rendered.
----------------------------------------------------------------------------------------------------
ashita.register_event('render', function()
-- Obtain needed information managers..
local party = AshitaCore:GetDataManager():GetParty();
local target = AshitaCore:GetDataManager():GetTarget();
-- Calculate offset position starting points..
local posx = tparty.window_x - (101 * tparty.scale_x);
local posy = tparty.window_y - (34 * tparty.scale_y);
local curx = 0;
local cury = 0;
-- Locate the players zone..
local zone = party:GetMemberZone(0);
-- Handle the players local party..
for x = 0, 5 do
-- Get the current player slot font object..
local f = AshitaCore:GetFontManager():Get(string.format('%s%d', tparty.partytpp_str, x));
-- Ensure the player is valid to render information for..
if (x ~= 0 and zone ~= party:GetMemberZone(x) or party:GetMemberActive(x) == 0) then
f:SetVisibility(false);
else
-- Calculate the needed position of the font..
curx = posx;
cury = posy - ((party:GetAllianceParty0MemberCount() - 1 - x) * (20 * tparty.scale_y));
-- Update the font object..
local tp = party:GetMemberCurrentTP(x);
f:SetPositionX(curx);
f:SetPositionY(cury);
f:SetText(tostring(tp));
f:SetVisibility(true);
if (tp >= 1000) then
f:SetColor(0xFF00FF00);
else
f:SetColor(0xFFFFFFFF);
end
end
end
-- Calculate the alliance offsets..
local posx_a0 = posx;
local posy_a0 = tparty.window_y - (389 * tparty.scale_y);
local posx_a1 = posx;
local posy_a1 = tparty.window_y - (288 * tparty.scale_y);
-- Handle the alliance party information..
for x = 6, 17 do
curx = 0;
cury = 0;
-- Calculate the alliance position..
if ((x >= 6) and (x < 12)) then
curx = posx_a0;
cury = posy_a0 + (((x - 6) * 16) * tparty.scale_y);
else
curx = posx_a1;
cury = posy_a1 + (((x - 12) * 16) * tparty.scale_y);
end
-- Get the current player slot font object..
local f = AshitaCore:GetFontManager():Get(string.format('%s%d', tparty.partytpp_str, x));
local tp = party:GetMemberCurrentTP(x);
f:SetPositionX(curx);
f:SetPositionY(cury);
f:SetText(tostring(tp));
if (tp >= 1000) then
f:SetColor(0xFF00FF00);
else
f:SetColor(0xFFFFFFFF);
end
-- Set the visibility of the party members information..
if (party:GetMemberActive(x) == 0 or zone ~= party:GetMemberZone(x)) then
f:SetVisibility(false);
else
f:SetVisibility(true);
end
end
-- Obtain the current target..
local target = ashita.ffxi.targets.get_target('t');
if (target == nil) then
f = AshitaCore:GetFontManager():Get(tparty.targethpp_str);
f:SetText('0');
f:SetVisibility(false);
else
curx = posx - 2;
cury = posy - (((party:GetAllianceParty0MemberCount() - 1) * 21) + 34) * tparty.scale_y;
f = AshitaCore:GetFontManager():Get(tparty.targethpp_str);
f:SetPositionX(curx);
f:SetPositionY(cury);
f:SetText(tostring(target.HealthPercent));
f:SetVisibility(true);
end
end);