diff --git a/Trust-Cylibs-Include.lua b/Trust-Cylibs-Include.lua index 1d9929a8..09db2f27 100644 --- a/Trust-Cylibs-Include.lua +++ b/Trust-Cylibs-Include.lua @@ -73,6 +73,7 @@ NeverCondition = require('cylibs/conditions/never') NotCondition = require('cylibs/conditions/not_condition') NumResistsCondition = require('cylibs/conditions/num_resists') PetHitPointsPercentCondition = require('cylibs/conditions/pet_hpp') +PetTacticalPointsCondition = require('cylibs/conditions/pet_tp') ReadyAbilityCondition = require('cylibs/conditions/ready_ability') SkillchainPropertyCondition = require('cylibs/conditions/skillchain_property') SpellRecastReadyCondition = require('cylibs/conditions/spell_recast_ready') diff --git a/Trust.lua b/Trust.lua index f32d1605..97822e30 100644 --- a/Trust.lua +++ b/Trust.lua @@ -1,7 +1,7 @@ _addon.author = 'Cyrite' _addon.commands = {'Trust','trust'} _addon.name = 'Trust' -_addon.version = '10.7.1' +_addon.version = '10.7.3' _addon.release_notes = [[ This update introduces new menus for Bard, autocomplete for Trust commands, new commands and important bug fixes for users running the diff --git a/cylibs/conditions/condition.lua b/cylibs/conditions/condition.lua index 495a4229..a177a4aa 100644 --- a/cylibs/conditions/condition.lua +++ b/cylibs/conditions/condition.lua @@ -99,6 +99,7 @@ function Condition.defaultSerializableConditionClasses() EnemiesNearbyCondition.__class, ModeCondition.__class, PetHitPointsPercentCondition.__class, + PetTacticalPointsCondition.__class, HasPetCondition.__class, NumResistsCondition.__class, SkillchainPropertyCondition.__class, diff --git a/cylibs/conditions/pet_tp.lua b/cylibs/conditions/pet_tp.lua new file mode 100644 index 00000000..8ac1cea1 --- /dev/null +++ b/cylibs/conditions/pet_tp.lua @@ -0,0 +1,61 @@ +--------------------------- +-- Condition checking the player's pet's tactical points. +-- @class module +-- @name PetTacticalPointsCondition +local ConfigItem = require('ui/settings/editors/config/ConfigItem') +local PickerConfigItem = require('ui/settings/editors/config/PickerConfigItem') +local serializer_util = require('cylibs/util/serializer_util') + +local Condition = require('cylibs/conditions/condition') +local PetTacticalPointsCondition = setmetatable({}, { __index = Condition }) +PetTacticalPointsCondition.__index = PetTacticalPointsCondition +PetTacticalPointsCondition.__type = "PetTacticalPointsCondition" +PetTacticalPointsCondition.__class = "PetTacticalPointsCondition" + +function PetTacticalPointsCondition.new(tp, operator) + local self = setmetatable(Condition.new(), PetTacticalPointsCondition) + self.tp = tp or 1000 + self.operator = operator or Condition.Operator.LessThanOrEqualTo + return self +end + +function PetTacticalPointsCondition:is_satisfied(target_index, tp) + local target = windower.ffxi.get_mob_by_index(target_index) + if target and tp then + local pet_index = target.pet_index + if pet_index and pet_index ~= 0 then + local pet = windower.ffxi.get_mob_by_index(pet_index) + return pet and Condition:eval(tp, self.tp, self.operator) + end + end + return false +end + +function PetTacticalPointsCondition:get_config_items() + return L{ + ConfigItem.new('tp', 0, 3000, 100, function(value) return value.."" end, "TP"), + PickerConfigItem.new('operator', self.operator, L{ Condition.Operator.GreaterThanOrEqualTo, Condition.Operator.Equals, Condition.Operator.GreaterThan, Condition.Operator.LessThan, Condition.Operator.LessThanOrEqualTo }, nil, "Operator") + } +end + +function PetTacticalPointsCondition:tostring() + return "Pet TP "..self.operator.." "..self.tp +end + +function PetTacticalPointsCondition.description() + return "Pet TP." +end + +function PetTacticalPointsCondition.valid_targets() + return S{ Condition.TargetType.Self } +end + +function PetTacticalPointsCondition:serialize() + return "PetTacticalPointsCondition.new(" .. serializer_util.serialize_args(self.tp, self.operator) .. ")" +end + +return PetTacticalPointsCondition + + + + diff --git a/cylibs/trust/roles/gambiter.lua b/cylibs/trust/roles/gambiter.lua index 887a0216..3e1950f2 100644 --- a/cylibs/trust/roles/gambiter.lua +++ b/cylibs/trust/roles/gambiter.lua @@ -96,6 +96,24 @@ function Gambiter:on_add() end end) + WindowerEvents.PetUpdate:addAction(function(owner_id, pet_id, pet_index, pet_name, pet_hpp, pet_mpp, pet_tp) + local target = self:get_player() + if target and target:get_id() == owner_id then + logger.notice(self.__class, 'on_pet_update', 'check_gambits') + + local gambits = self:get_all_gambits():filter(function(gambit) + for condition in gambit:getConditions():it() do + if condition.__type == PetTacticalPointsCondition.__type then + return true + end + return false + end + end) + + self:check_gambits(L{ target }, gambits, pet_tp) + end + end) + self.skillchainer:on_skillchain():addAction(function(target_id, skillchain_step) local target = self:get_target() if target and target:get_id() == target_id then diff --git a/data/DRG.lua b/data/DRG.lua index 9c13c581..2ad2a145 100644 --- a/data/DRG.lua +++ b/data/DRG.lua @@ -22,6 +22,7 @@ return { Default = L{ Gambit.new("Self", L{NotCondition.new(L{HasBuffCondition.new("Spirit Surge")}), NotCondition.new(L{HasPetCondition.new()})}, JobAbility.new("Call Wyvern", L{}, L{}), "Self", L{}), Gambit.new("Self", L{HasPetCondition.new(L{}), PetHitPointsPercentCondition.new(25, "<=")}, JobAbility.new("Spirit Link", L{}, L{}), "Self"), + Gambit.new("Self", L{HasPetCondition.new(L{}), PetTacticalPointsCondition.new(3000, "=="), MaxTacticalPointsCondition.new(500)}, JobAbility.new("Spirit Link", L{}, L{}), "Self", L{}), Gambit.new("Self", L{HasPetCondition.new(L{}), InBattleCondition.new()}, JobAbility.new("Spirit Bond", L{}, L{}), "Self"), Gambit.new("Enemy", L{MaxTacticalPointsCondition.new(1000)}, JobAbility.new("Jump", L{}, L{}), "Self"), Gambit.new("Enemy", L{MaxTacticalPointsCondition.new(1000)}, JobAbility.new("High Jump", L{}, L{}), "Self"), diff --git a/manifest.json b/manifest.json index b6ed0715..3a45bf90 100644 --- a/manifest.json +++ b/manifest.json @@ -1,4 +1,4 @@ { - "version": "10.7.1", - "download_url": "https://github.com/cyritegamestudios/trust/releases/download/v10.7.1/trust.zip" + "version": "10.7.3", + "download_url": "https://github.com/cyritegamestudios/trust/archive/refs/heads/alpha.zip" } diff --git a/ui/settings/menus/conditions/ConditionSettingsMenuItem.lua b/ui/settings/menus/conditions/ConditionSettingsMenuItem.lua index 53293d25..8827eaca 100644 --- a/ui/settings/menus/conditions/ConditionSettingsMenuItem.lua +++ b/ui/settings/menus/conditions/ConditionSettingsMenuItem.lua @@ -47,6 +47,7 @@ function ConditionSettingsMenuItem.new(trustSettings, trustSettingsMode, parentM [EnemiesNearbyCondition.__type] = "enemies_nearby", [ModeCondition.__type] = "mode", [PetHitPointsPercentCondition.__type] = "pet_hpp", + [PetTacticalPointsCondition.__type] = "pet_tp", [HasPetCondition.__type] = "has_pet", [NumResistsCondition.__type] = "num_resists", [SkillchainPropertyCondition.__type] = "skillchain_property", diff --git a/ui/settings/menus/gambits/GambitSettingsMenuItem.lua b/ui/settings/menus/gambits/GambitSettingsMenuItem.lua index 11d5f2b2..82ab2762 100644 --- a/ui/settings/menus/gambits/GambitSettingsMenuItem.lua +++ b/ui/settings/menus/gambits/GambitSettingsMenuItem.lua @@ -113,7 +113,7 @@ end function GambitSettingsMenuItem:getAbilities(gambitTarget, flatten) local gambitTargetMap = T{ [GambitTarget.TargetType.Self] = S{'Self'}, - [GambitTarget.TargetType.Ally] = S{'Party'}, + [GambitTarget.TargetType.Ally] = S{'Party', 'Corpse'}, [GambitTarget.TargetType.Enemy] = S{'Enemy'} } local targets = gambitTargetMap[gambitTarget]