Skip to content

Commit 74a5384

Browse files
authored
Merge pull request LandSandBoat#10371 from Skold177/Heady-Artifice
[sql] [lua] Implement Overdrive, Tactical Switch, Correct Burden Calculations
2 parents ad85890 + 41c5212 commit 74a5384

16 files changed

Lines changed: 489 additions & 318 deletions

File tree

scripts/actions/abilities/heady_artifice.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ abilityObject.onAbilityCheck = function(player, target, ability)
1212
end
1313

1414
abilityObject.onUseAbility = function(player, target, ability, action)
15-
return xi.job_utils.puppetmaster.onAbilityUseHeadyArtiface(player, target, ability, action)
15+
return xi.job_utils.puppetmaster.onAbilityUseHeadyArtifice(player, target, ability, action)
1616
end
1717

1818
return abilityObject

scripts/actions/abilities/overdrive.lua

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ abilityObject.onAbilityCheck = function(player, target, ability)
1212
return xi.job_utils.puppetmaster.onAbilityCheckOverdrive(player, target, ability)
1313
end
1414

15-
abilityObject.onUseAbility = function(player, target, ability)
16-
return xi.job_utils.puppetmaster.onAbilityUseOverdrive(player, target, ability)
15+
abilityObject.onUseAbility = function(player, target, ability, action)
16+
return xi.job_utils.puppetmaster.onAbilityUseOverdrive(player, target, ability, action)
1717
end
1818

1919
return abilityObject

scripts/actions/abilities/pets/attachments/heat_seeker.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ attachmentObject.onEquip = function(automaton)
4040
return
4141
end
4242

43-
local thunderManeuvers = master:countEffect(xi.effect.THUNDER_MANEUVER)
43+
local thunderManeuvers = xi.automaton.getManeuverCount(master, master:countEffect(xi.effect.THUNDER_MANEUVER))
4444

4545
if thunderManeuvers == 0 then
4646
return

scripts/actions/abilities/pets/attachments/pattern_reader.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ attachmentObject.onEquip = function(automaton)
3737
return
3838
end
3939

40-
local windManeuvers = master:countEffect(xi.effect.WIND_MANEUVER)
40+
local windManeuvers = xi.automaton.getManeuverCount(master, master:countEffect(xi.effect.WIND_MANEUVER))
4141

4242
if windManeuvers == 0 then
4343
return

scripts/actions/abilities/pets/attachments/target_marker.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ attachmentObject.onEquip = function(automaton)
2424
return
2525
end
2626

27-
local thunderManeuvers = master:countEffect(xi.effect.THUNDER_MANEUVER)
27+
local thunderManeuvers = xi.automaton.getManeuverCount(master, master:countEffect(xi.effect.THUNDER_MANEUVER))
2828
local storedAccuracyBonus = pet:getLocalVar('targetMarkerAccuracyBonus')
2929
local updatedAccuracyBonus = accuracyTable[thunderManeuvers] or 0
3030

scripts/actions/abilities/tactical_switch.lua

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ abilityObject.onAbilityCheck = function(player, target, ability)
1111
return xi.job_utils.puppetmaster.onAbilityCheckTacticalSwitch(player, target, ability)
1212
end
1313

14-
abilityObject.onUseAbility = function(player, target, ability)
15-
return xi.job_utils.puppetmaster.onAbilityUseTacticalSwitch(player, target, ability)
14+
abilityObject.onUseAbility = function(player, target, ability, action)
15+
return xi.job_utils.puppetmaster.onAbilityUseTacticalSwitch(player, target, ability, action)
1616
end
1717

1818
return abilityObject

scripts/effects/overdrive.lua

Lines changed: 71 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,80 @@
11
-----------------------------------
22
-- xi.effect.OVERDRIVE
3+
-- https://wiki.ffo.jp/html/954.html
4+
-- TODO: More testing on "significant resistance to status ailments" for now, gives Rank 11 resistance to status ailments during effect.
35
-----------------------------------
46
---@type TEffect
57
local effectObject = {}
68

9+
local jobPointBonuses =
10+
{
11+
[1] = xi.mod.STR,
12+
[2] = xi.mod.DEX,
13+
[3] = xi.mod.VIT,
14+
[4] = xi.mod.AGI,
15+
[5] = xi.mod.INT,
16+
[6] = xi.mod.MND,
17+
[7] = xi.mod.CHR,
18+
}
19+
20+
local statusAilmentResRanks =
21+
{
22+
xi.mod.PARALYZE_RES_RANK,
23+
xi.mod.BIND_RES_RANK,
24+
xi.mod.SILENCE_RES_RANK,
25+
xi.mod.SLOW_RES_RANK,
26+
xi.mod.POISON_RES_RANK,
27+
xi.mod.LIGHT_SLEEP_RES_RANK,
28+
xi.mod.DARK_SLEEP_RES_RANK,
29+
xi.mod.BLIND_RES_RANK,
30+
-- xi.mod.GRAVITY_RES_RANK,
31+
}
32+
33+
local overdriveDefenseDivisors =
34+
{
35+
[xi.automaton.frame.VALOREDGE ] = 24,
36+
[xi.automaton.frame.STORMWAKER] = 16,
37+
[xi.automaton.frame.SHARPSHOT ] = 18,
38+
[xi.automaton.frame.HARLEQUIN ] = 20,
39+
}
40+
741
effectObject.onEffectGain = function(target, effect)
8-
target:addMod(xi.mod.OVERLOAD_THRESH, 5000)
9-
local pet = target:getPet()
10-
local jpBonus = target:getJobPointLevel(xi.jp.OVERDRIVE_EFFECT) * 5
42+
if target:getObjType() == xi.objType.PC then
43+
effect:addMod(xi.mod.OVERLOAD_THRESH, 5000)
44+
target:updateAttachments()
45+
end
46+
47+
if target:getObjType() == xi.objType.PET then
48+
effect:addMod(xi.mod.HASTE_MAGIC, 2500)
49+
effect:addMod(xi.mod.ATTP, 25)
50+
effect:addMod(xi.mod.RATTP, 25)
51+
effect:addMod(xi.mod.ACC, 25)
52+
effect:addMod(xi.mod.RACC, 25)
53+
effect:addMod(xi.mod.EVA, 25)
54+
55+
local master = target:getMaster()
56+
57+
if not master then
58+
return
59+
end
1160

12-
if pet then
13-
pet:setLocalVar('overdrive', 1)
14-
pet:addMod(xi.mod.HASTE_MAGIC, 2500)
15-
pet:addMod(xi.mod.MAIN_DMG_RATING, 30)
16-
pet:addMod(xi.mod.RANGED_DMG_RATING, 30)
17-
pet:addMod(xi.mod.ATTP, 50)
18-
pet:addMod(xi.mod.RATTP, 50)
19-
pet:addMod(xi.mod.ACC, 100)
20-
pet:addMod(xi.mod.RACC, 100)
21-
pet:addMod(xi.mod.EVA, 50)
22-
pet:addMod(xi.mod.MEVA, 50)
23-
pet:addMod(xi.mod.REVA, 50)
24-
pet:addMod(xi.mod.DMG, -5000)
25-
if jpBonus > 0 then
26-
pet:addMod(xi.mod.STR, jpBonus)
27-
pet:addMod(xi.mod.DEX, jpBonus)
28-
pet:addMod(xi.mod.VIT, jpBonus)
29-
pet:addMod(xi.mod.AGI, jpBonus)
30-
pet:addMod(xi.mod.INT, jpBonus)
31-
pet:addMod(xi.mod.MND, jpBonus)
32-
pet:addMod(xi.mod.CHR, jpBonus)
61+
local frameEquipped = target:getAutomatonFrame()
62+
local frameDivisor = overdriveDefenseDivisors[frameEquipped] or 24
63+
64+
if frameDivisor then
65+
effect:addMod(xi.mod.DEFP, math.floor(400 / frameDivisor))
66+
end
67+
68+
for _, mod in pairs(statusAilmentResRanks) do
69+
effect:addMod(mod, 11)
70+
end
71+
72+
local jobPointBonus = master:getJobPointLevel(xi.jp.OVERDRIVE_EFFECT) * 5
73+
74+
if jobPointBonus > 0 then
75+
for _, mod in pairs(jobPointBonuses) do
76+
effect:addMod(mod, jobPointBonus)
77+
end
3378
end
3479
end
3580
end
@@ -38,32 +83,8 @@ effectObject.onEffectTick = function(target, effect)
3883
end
3984

4085
effectObject.onEffectLose = function(target, effect)
41-
target:delMod(xi.mod.OVERLOAD_THRESH, 5000)
42-
local pet = target:getPet()
43-
local jpBonus = target:getJobPointLevel(xi.jp.OVERDRIVE_EFFECT) * 5
44-
45-
if pet and pet:getLocalVar('overdrive') ~= 0 then
46-
pet:setLocalVar('overdrive', 0)
47-
pet:delMod(xi.mod.HASTE_MAGIC, 2500)
48-
pet:delMod(xi.mod.MAIN_DMG_RATING, 30)
49-
pet:delMod(xi.mod.RANGED_DMG_RATING, 30)
50-
pet:delMod(xi.mod.ATTP, 50)
51-
pet:delMod(xi.mod.RATTP, 50)
52-
pet:delMod(xi.mod.ACC, 100)
53-
pet:delMod(xi.mod.RACC, 100)
54-
pet:delMod(xi.mod.EVA, 50)
55-
pet:delMod(xi.mod.MEVA, 50)
56-
pet:delMod(xi.mod.REVA, 50)
57-
pet:delMod(xi.mod.DMG, -5000)
58-
if jpBonus > 0 then
59-
pet:delMod(xi.mod.STR, jpBonus)
60-
pet:delMod(xi.mod.DEX, jpBonus)
61-
pet:delMod(xi.mod.VIT, jpBonus)
62-
pet:delMod(xi.mod.AGI, jpBonus)
63-
pet:delMod(xi.mod.INT, jpBonus)
64-
pet:delMod(xi.mod.MND, jpBonus)
65-
pet:delMod(xi.mod.CHR, jpBonus)
66-
end
86+
if target:getObjType() == xi.objType.PC then
87+
target:updateAttachments()
6788
end
6889
end
6990

scripts/effects/overload.lua

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,26 +5,16 @@
55
local effectObject = {}
66

77
effectObject.onEffectGain = function(target, effect)
8-
local pet = target:getPet()
9-
if pet then
10-
pet:setLocalVar('overload', 1)
11-
pet:addMod(xi.mod.HASTE_MAGIC, -5000)
12-
pet:addMod(xi.mod.MOVE_SPEED_WEIGHT_PENALTY, 50)
13-
pet:addMod(xi.mod.EVA, -10)
8+
if target:getObjType() == xi.objType.PET then
9+
effect:addMod(xi.mod.HASTE_MAGIC, -5000)
10+
effect:addMod(xi.mod.MOVE_SPEED_WEIGHT_PENALTY, 50)
1411
end
1512
end
1613

1714
effectObject.onEffectTick = function(target, effect)
1815
end
1916

2017
effectObject.onEffectLose = function(target, effect)
21-
local pet = target:getPet()
22-
if pet and pet:getLocalVar('overload') ~= 0 then
23-
pet:setLocalVar('overload', 0)
24-
pet:delMod(xi.mod.HASTE_MAGIC, -5000)
25-
pet:delMod(xi.mod.MOVE_SPEED_WEIGHT_PENALTY, 50)
26-
pet:delMod(xi.mod.EVA, -10)
27-
end
2818
end
2919

3020
return effectObject

scripts/enum/mod.lua

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -585,6 +585,8 @@ xi.mod =
585585

586586
-- Puppetmaster
587587
AUTOMATON_LVL_BONUS = 1044, -- Automaton: Lv. (Increases automaton's base level above 99)
588+
TACTICAL_SWITCH_TP_BONUS = 1199, -- TP bonus granted by Tactical Switch (percent)
589+
OVERDRIVE_BONUS_DURATION = 1200, -- Extra seconds added to Overdrive
588590

589591
-- Blue Mage
590592
ENHANCES_BURST_AFFINITY = 1139, -- Increases WSC bonus on spells cast with Burst Affinity (percent)

scripts/enum/recast.lua

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ xi.recastID =
2222
PHANTOM_ROLL = 193,
2323
DOUBLE_UP = 194,
2424
QUICKDRAW = 195,
25+
ACTIVATE = 205,
2526
STRATAGEM = 231,
2627
SPECIAL2 = 254, -- Level 96 1HR abilities
2728
}

0 commit comments

Comments
 (0)