Skip to content

Commit f4c6a7e

Browse files
committed
Add new conditions
1 parent 9d413b6 commit f4c6a7e

5 files changed

Lines changed: 127 additions & 0 deletions

File tree

Trust-Cylibs-Include.lua

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ MaxHitPointsPercentCondition = require('cylibs/conditions/max_hpp')
7272
MaxManaPointsPercentCondition = require('cylibs/conditions/max_mpp')
7373
HitPointsPercentRangeCondition = require('cylibs/conditions/hpp_range')
7474
MainJobCondition = require('cylibs/conditions/main_job')
75+
PartyHasMainJobCondition = require('cylibs/conditions/party_has_main_job')
7576
MaxDistanceCondition = require('cylibs/conditions/max_distance')
7677
MaxTacticalPointsCondition = require('cylibs/conditions/max_tp')
7778
MeleeAccuracyCondition = require('cylibs/conditions/melee_accuracy')
@@ -81,6 +82,7 @@ MinTacticalPointsCondition = require('cylibs/conditions/min_tp')
8182
ModeCondition = require('cylibs/conditions/mode')
8283
NeverCondition = require('cylibs/conditions/never')
8384
NotCondition = require('cylibs/conditions/not_condition')
85+
OrCondition = require('cylibs/conditions/or_condition')
8486
NumResistsCondition = require('cylibs/conditions/num_resists')
8587
PetHitPointsPercentCondition = require('cylibs/conditions/pet_hpp')
8688
PetTacticalPointsCondition = require('cylibs/conditions/pet_tp')

cylibs/conditions/condition.lua

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ function Condition.defaultSerializableConditionClasses()
9696
HasBuffCondition.__class,
9797
ZoneCondition.__class,
9898
MainJobCondition.__class,
99+
PartyHasMainJobCondition.__class,
99100
SubJobCondition.__class,
100101
JobCondition.__class,
101102
ReadyAbilityCondition.__class,

cylibs/conditions/or_condition.lua

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
---------------------------
2+
-- Condition checking whether a list of conditions all return `false`.
3+
-- @class module
4+
-- @name OrCondition
5+
local ConfigItem = require('ui/settings/editors/config/ConfigItem')
6+
local GroupConfigItem = require('ui/settings/editors/config/GroupConfigItem')
7+
local localization_util = require('cylibs/util/localization_util')
8+
local PickerConfigItem = require('ui/settings/editors/config/PickerConfigItem')
9+
local serializer_util = require('cylibs/util/serializer_util')
10+
11+
local Condition = require('cylibs/conditions/condition')
12+
local OrCondition = setmetatable({}, { __index = Condition })
13+
OrCondition.__index = OrCondition
14+
OrCondition.__type = "OrCondition"
15+
OrCondition.__class = "OrCondition"
16+
17+
function OrCondition.new(conditions, target_index)
18+
local self = setmetatable(Condition.new(target_index), OrCondition)
19+
self.conditions = conditions or L{}
20+
return self
21+
end
22+
23+
function OrCondition:is_satisfied(target_index)
24+
local target = windower.ffxi.get_mob_by_index(target_index)
25+
if target then
26+
for condition in self.conditions:it() do
27+
if condition:is_satisfied(target_index) then
28+
return true
29+
end
30+
end
31+
end
32+
return false
33+
end
34+
35+
function OrCondition:get_config_items()
36+
if self.conditions:length() > 0 then
37+
return self.conditions[1]:get_config_items()
38+
end
39+
return nil
40+
end
41+
42+
function OrCondition:tostring()
43+
return "Any of "..localization_util.commas(self.conditions:map(function(condition) return condition:tostring() end))
44+
end
45+
46+
function OrCondition.valid_targets()
47+
return Condition.TargetType.AllTargets
48+
end
49+
50+
function OrCondition:serialize()
51+
return "OrCondition.new(" .. serializer_util.serialize_args(self.conditions) .. ")"
52+
end
53+
54+
return OrCondition
55+
56+
57+
58+
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
---------------------------
2+
-- Condition checking whether the player has a specific main job.
3+
-- @class module
4+
-- @name PartyHasMainJobCondition
5+
local serializer_util = require('cylibs/util/serializer_util')
6+
local party_util = require('cylibs/util/party_util')
7+
8+
local Condition = require('cylibs/conditions/condition')
9+
local PickerConfigItem = require('ui/settings/editors/config/PickerConfigItem')
10+
local PartyHasMainJobCondition = setmetatable({}, { __index = Condition })
11+
PartyHasMainJobCondition.__index = PartyHasMainJobCondition
12+
PartyHasMainJobCondition.__type = "PartyHasMainJobCondition"
13+
PartyHasMainJobCondition.__class = "PartyHasMainJobCondition"
14+
15+
function PartyHasMainJobCondition.new(job_name_short)
16+
local self = setmetatable(Condition.new(), PartyHasMainJobCondition)
17+
self.job_name_short = job_name_short or res.jobs[windower.ffxi.get_player().main_job_id].ens
18+
return self
19+
end
20+
21+
function PartyHasMainJobCondition:is_satisfied(target_index)
22+
local party = player.party
23+
if party then
24+
for party_member in party:get_party_members(true):it() do
25+
if party_member:get_main_job_short() == self.job_name_short then
26+
return true
27+
end
28+
end
29+
end
30+
return false
31+
end
32+
33+
function PartyHasMainJobCondition:get_config_items()
34+
local all_job_name_shorts = L{}
35+
for i = 1, 22 do
36+
all_job_name_shorts:append(res.jobs[i].ens)
37+
end
38+
return L{
39+
PickerConfigItem.new('job_name_short', self.job_name_short, all_job_name_shorts, function(job_name_short)
40+
return i18n.resource('jobs', 'ens', job_name_short)
41+
end, "Main Job")
42+
}
43+
end
44+
45+
function PartyHasMainJobCondition:tostring()
46+
return "Party contains player with main job "..i18n.resource('jobs', 'ens', self.job_name_short)
47+
end
48+
49+
function PartyHasMainJobCondition.description()
50+
return "Party contains player with main job X."
51+
end
52+
53+
function PartyHasMainJobCondition.valid_targets()
54+
return S{ Condition.TargetType.Ally }
55+
end
56+
57+
function PartyHasMainJobCondition:serialize()
58+
return "PartyHasMainJobCondition.new(" .. serializer_util.serialize_args(self.job_name_short) .. ")"
59+
end
60+
61+
return PartyHasMainJobCondition
62+
63+
64+
65+

ui/settings/menus/conditions/ConditionSettingsMenuItem.lua

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ function ConditionSettingsMenuItem.new(trustSettings, trustSettingsMode, parentM
4141
[HasBuffCondition.__type] = "has_buff_condition",
4242
[ZoneCondition.__type] = "zone",
4343
[MainJobCondition.__type] = "main_job",
44+
[PartyHasMainJobCondition.__type] = "party_has_main_job",
4445
[JobCondition.__type] = "job",
4546
[ReadyAbilityCondition.__type] = "ready_ability",
4647
[FinishAbilityCondition.__type] = "finish_ability",

0 commit comments

Comments
 (0)