--[[
* 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 ) ;