Skip to content

Commit c5dd88c

Browse files
authored
Merge branch 'PathOfBuildingCommunity:dev' into dev
2 parents ebfe541 + 454eff8 commit c5dd88c

24 files changed

Lines changed: 1308 additions & 708 deletions

.busted

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
return {
22
_all = {
3-
coverage = true,
3+
coverage = false,
44
verbose = true,
55
},
66
default = {

.github/ISSUE_TEMPLATE/accuracy_bug_report.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: Accuracy bug report
22
description: Create a bug report to help us fix incorrect wording in Path of Building for PoE1.
3-
labels: ["bug:accuracy"]
3+
labels: ["bug: accuracy"]
44
body:
55
- type: markdown
66
attributes:

.github/ISSUE_TEMPLATE/behaviour_bug_report.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: Behaviour bug report
22
description: Create a bug report to help us fix incorrect behaviour or logic in Path of Building for PoE1.
3-
labels: ["bug:behaviour"]
3+
labels: ["bug: behaviour"]
44
body:
55
- type: markdown
66
attributes:

.github/ISSUE_TEMPLATE/calculation_bug_report.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: Calculation bug report
22
description: Create a bug report to help us fix incorrect calculations in Path of Building for PoE1.
3-
labels: ["bug:calculation"]
3+
labels: ["bug: calculation"]
44
body:
55
- type: markdown
66
attributes:

.github/ISSUE_TEMPLATE/config.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
blank_issues_enabled: false

.github/workflows/test.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ jobs:
1313
- name: Checkout
1414
uses: actions/checkout@v4
1515
- name: Run tests
16-
run: busted --lua=luajit --no-coverage
16+
run: busted --lua=luajit
1717
check_modcache:
1818
runs-on: ubuntu-latest
1919
container: ghcr.io/pathofbuildingcommunity/pathofbuilding-tests:latest

src/Classes/ConfigTab.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ local ConfigTabClass = newClass("ConfigTab", "UndoHandler", "ControlHost", "Cont
168168
self.build.buildFlag = true
169169
end)
170170
elseif varData.type == "count" or varData.type == "integer" or varData.type == "countAllowZero" or varData.type == "float" then
171-
control = new("EditControl", {"TOPLEFT",lastSection,"TOPLEFT"}, {234, 0, 90, 18}, "", nil, (varData.type == "integer" and "^%-%d") or (varData.type == "float" and "^%d.") or "%D", 7, function(buf, placeholder)
171+
control = new("EditControl", {"TOPLEFT",lastSection,"TOPLEFT"}, {234, 0, 90, 18}, "", nil, (varData.type == "integer" and "^%-%d") or (varData.type == "float" and "^%d.") or "%D", 10, function(buf, placeholder)
172172
if placeholder then
173173
self.configSets[self.activeConfigSetId].placeholder[varData.var] = tonumber(buf)
174174
else

src/Data/Gems.lua

Lines changed: 0 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -2057,27 +2057,6 @@ return {
20572057
reqInt = 0,
20582058
naturalMaxLevel = 20,
20592059
},
2060-
["Metadata/Items/Gems/SkillGemPhaseRun"] = {
2061-
name = "Phase Run",
2062-
baseTypeName = "Phase Run",
2063-
gameId = "Metadata/Items/Gems/SkillGemPhaseRun",
2064-
variantId = "PhaseRun",
2065-
grantedEffectId = "PhaseRun",
2066-
tags = {
2067-
dexterity = true,
2068-
grants_active_skill = true,
2069-
spell = true,
2070-
duration = true,
2071-
movement = true,
2072-
physical = true,
2073-
travel = true,
2074-
},
2075-
tagString = "Spell, Duration, Movement, Physical, Travel",
2076-
reqStr = 0,
2077-
reqDex = 100,
2078-
reqInt = 0,
2079-
naturalMaxLevel = 20,
2080-
},
20812060
["Metadata/Items/Gems/SkillGemSupportMeleePhysicalDamage"] = {
20822061
name = "Melee Physical Damage",
20832062
gameId = "Metadata/Items/Gems/SupportGemMeleePhysicalDamage",
@@ -4174,25 +4153,6 @@ return {
41744153
reqInt = 40,
41754154
naturalMaxLevel = 20,
41764155
},
4177-
["Metadata/Items/Gems/SkillGemArcticArmour"] = {
4178-
name = "Arctic Armour",
4179-
baseTypeName = "Arctic Armour",
4180-
gameId = "Metadata/Items/Gems/SkillGemArcticArmour",
4181-
variantId = "ArcticArmour",
4182-
grantedEffectId = "ArcticArmour",
4183-
tags = {
4184-
dexterity = true,
4185-
grants_active_skill = true,
4186-
spell = true,
4187-
duration = true,
4188-
cold = true,
4189-
},
4190-
tagString = "Spell, Duration, Cold",
4191-
reqStr = 0,
4192-
reqDex = 60,
4193-
reqInt = 40,
4194-
naturalMaxLevel = 20,
4195-
},
41964156
["Metadata/Items/Gems/SkillGemVaalArcticArmour"] = {
41974157
name = "Vaal Arctic Armour",
41984158
baseTypeName = "Vaal Arctic Armour",
@@ -6327,27 +6287,6 @@ return {
63276287
reqInt = 100,
63286288
naturalMaxLevel = 20,
63296289
},
6330-
["Metadata/Items/Gems/SkillGemLightningTendrils"] = {
6331-
name = "Lightning Tendrils",
6332-
baseTypeName = "Lightning Tendrils",
6333-
gameId = "Metadata/Items/Gems/SkillGemLightningTendrilsChannelled",
6334-
variantId = "LightningTendrils",
6335-
grantedEffectId = "LightningTendrils",
6336-
tags = {
6337-
critical = true,
6338-
intelligence = true,
6339-
grants_active_skill = true,
6340-
spell = true,
6341-
area = true,
6342-
lightning = true,
6343-
channelling = true,
6344-
},
6345-
tagString = "Critical, Spell, AoE, Lightning, Channelling",
6346-
reqStr = 0,
6347-
reqDex = 0,
6348-
reqInt = 100,
6349-
naturalMaxLevel = 1,
6350-
},
63516290
["Metadata/Items/Gems/SkillGemKineticBlast"] = {
63526291
name = "Kinetic Blast",
63536292
baseTypeName = "Kinetic Blast",

src/Data/ModCache.lua

Lines changed: 5 additions & 10 deletions
Large diffs are not rendered by default.

src/Data/Skills/act_str.lua

Lines changed: 84 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -7687,38 +7687,16 @@ skills["MoltenStrike"] = {
76877687
t_insert(breakdown.OverlapChance, s_format("^8=^7 %.2f^8%%", output.OverlapChance))
76887688
end
76897689

7690-
local numProjectiles = skillModList:Sum("BASE", skillCfg, "ProjectileCount")
7690+
local numProjectiles = output.ProjectileCount
76917691
local dpsMult = 1
7692-
if skillPart == 3 or skillPart == 5 or skillPart == 6 then
7692+
if skillPart == 3 then
76937693
dpsMult = overlapChance * numProjectiles
7694-
7695-
if skillPart ~= 6 then
7696-
if breakdown then
7697-
breakdown.SkillDPSMultiplier = {}
7698-
t_insert(breakdown.SkillDPSMultiplier, "DPS multiplier")
7699-
t_insert(breakdown.SkillDPSMultiplier, "^8= number of projectiles * overlap chance")
7700-
t_insert(breakdown.SkillDPSMultiplier, s_format("^8=^7 %d^8 *^7 %.3f^8", numProjectiles, overlapChance))
7701-
t_insert(breakdown.SkillDPSMultiplier, s_format("^8=^7 %.3f", dpsMult))
7702-
end
7703-
else
7704-
-- zenith: make an effective dpsMult for the weighted average of normal and 5th attack balls
7705-
local gemQuality = activeSkill.activeEffect.quality
7706-
local fifthAttackMulti = 1 + 8 + 0.1 * gemQuality
7707-
local fifthAttackOverallMulti = fifthAttackMulti * overlapChance * (numProjectiles + 5)
7708-
dpsMult = 0.8 * dpsMult + 0.2 * fifthAttackOverallMulti
7709-
7710-
if breakdown then
7711-
breakdown.SkillDPSMultiplier = {}
7712-
t_insert(breakdown.SkillDPSMultiplier, "Weighted average DPS multiplier for balls")
7713-
t_insert(breakdown.SkillDPSMultiplier, "^8= (0.8 * balls dps) + (0.2 * 5th attack balls dps)")
7714-
t_insert(breakdown.SkillDPSMultiplier, "^8= (0.8 * normal ball hit * overlap chance * number of projectiles) " ..
7715-
"+ (0.2 * ball hit * 5th attack multiplier * overlap chance * (number of projectiles + 5))")
7716-
t_insert(breakdown.SkillDPSMultiplier, "^8= ball hit * overlap chance * (0.8 * number of projectiles " ..
7717-
"+ 0.2 * 5th attack multiplier * (number of projectiles + 5))")
7718-
t_insert(breakdown.SkillDPSMultiplier, s_format("^8= ball hit * ^7%.3f ^8* (0.8 * ^7%d ^8+ 0.2 * ^7%.1f ^8* ^7%d^8)",
7719-
overlapChance, numProjectiles, fifthAttackMulti, numProjectiles + 5))
7720-
t_insert(breakdown.SkillDPSMultiplier, s_format("^8= ball hit * ^7 %.3f", dpsMult))
7721-
end
7694+
if breakdown then
7695+
breakdown.SkillDPSMultiplier = {}
7696+
t_insert(breakdown.SkillDPSMultiplier, "DPS multiplier")
7697+
t_insert(breakdown.SkillDPSMultiplier, "^8= number of projectiles * overlap chance")
7698+
t_insert(breakdown.SkillDPSMultiplier, s_format("^8=^7 %d^8 *^7 %.3f^8", numProjectiles, overlapChance))
7699+
t_insert(breakdown.SkillDPSMultiplier, s_format("^8=^7 %.3f", dpsMult))
77227700
end
77237701
end
77247702
if dpsMult ~= 1 then
@@ -7856,16 +7834,89 @@ skills["MoltenStrikeAltX"] = {
78567834
area = true,
78577835
},
78587836
},
7859-
preDamageFunc = skills.MoltenStrike.preDamageFunc,
7837+
preDamageFunc = function(activeSkill, output, breakdown)
7838+
local skillCfg = activeSkill.skillCfg
7839+
local skillData = activeSkill.skillData
7840+
local skillPart = activeSkill.skillPart
7841+
local skillModList = activeSkill.skillModList
7842+
local t_insert = table.insert
7843+
local s_format = string.format
7844+
7845+
-- melee part doesn't need to calc balls
7846+
if skillPart == 1 then
7847+
return
7848+
end
7849+
7850+
local enemyRadius = skillModList:Override(skillCfg, "EnemyRadius") or skillModList:Sum("BASE", skillCfg, "EnemyRadius")
7851+
local ballRadius = output.AreaOfEffectRadius
7852+
local innerRadius = output.AreaOfEffectRadiusSecondary
7853+
local outerRadius = output.AreaOfEffectRadiusTertiary
7854+
7855+
-- logic adapted from MoldyDwarf's calculator
7856+
local hitRange = enemyRadius + ballRadius - innerRadius
7857+
local landingRange = outerRadius - innerRadius
7858+
local overlapChance = math.min(1, hitRange / landingRange)
7859+
output.OverlapChance = overlapChance * 100
7860+
7861+
if breakdown then
7862+
breakdown.OverlapChance = { }
7863+
t_insert(breakdown.OverlapChance, "Chance for individual balls to land on the enemy:")
7864+
t_insert(breakdown.OverlapChance, "^8= (area where a ball can land on enemy) / (total area)")
7865+
t_insert(breakdown.OverlapChance, "^8= (enemy radius + ball radius - min travel) / (max travel - min travel)")
7866+
t_insert(breakdown.OverlapChance, s_format("^8= (^7%d^8 + ^7%d^8 - ^7%d) / (^7%d^8 - ^7%d)",
7867+
enemyRadius, ballRadius, innerRadius, outerRadius, innerRadius))
7868+
t_insert(breakdown.OverlapChance, s_format("^8=^7 %.2f^8%%", output.OverlapChance))
7869+
end
7870+
7871+
local numProjectiles = output.ProjectileCount
7872+
local dpsMult = 1
7873+
if skillPart == 3 or skillPart == 5 or skillPart == 6 then
7874+
dpsMult = overlapChance * numProjectiles
7875+
7876+
if skillPart ~= 6 then
7877+
if breakdown then
7878+
breakdown.SkillDPSMultiplier = {}
7879+
t_insert(breakdown.SkillDPSMultiplier, "DPS multiplier")
7880+
t_insert(breakdown.SkillDPSMultiplier, "^8= number of projectiles * overlap chance")
7881+
t_insert(breakdown.SkillDPSMultiplier, s_format("^8=^7 %d^8 *^7 %.3f^8", numProjectiles, overlapChance))
7882+
t_insert(breakdown.SkillDPSMultiplier, s_format("^8=^7 %.3f", dpsMult))
7883+
end
7884+
else
7885+
-- zenith: make an effective dpsMult for the weighted average of normal and 5th attack balls
7886+
local fifthAttackMulti = 1 + skillData.FifthStrikeDamage / 100
7887+
local fifthAttackOverallMulti = fifthAttackMulti * overlapChance * (numProjectiles + skillData.FifthStrikeProjectiles)
7888+
dpsMult = 0.8 * dpsMult + 0.2 * fifthAttackOverallMulti
7889+
7890+
if breakdown then
7891+
breakdown.SkillDPSMultiplier = {}
7892+
t_insert(breakdown.SkillDPSMultiplier, "Weighted average DPS multiplier for balls")
7893+
t_insert(breakdown.SkillDPSMultiplier, "^8= (0.8 * balls dps) + (0.2 * 5th attack balls dps)")
7894+
t_insert(breakdown.SkillDPSMultiplier, s_format("^8= (0.8 * normal ball hit * overlap chance * number of projectiles) " ..
7895+
"+ (0.2 * ball hit * 5th attack multiplier * overlap chance * (number of projectiles + %d))", skillData.FifthStrikeProjectiles))
7896+
t_insert(breakdown.SkillDPSMultiplier, s_format("^8= ball hit * overlap chance * (0.8 * number of projectiles " ..
7897+
"+ 0.2 * 5th attack multiplier * (number of projectiles + %d))", skillData.FifthStrikeProjectiles))
7898+
t_insert(breakdown.SkillDPSMultiplier, s_format("^8= ball hit * ^7%.3f ^8* (0.8 * ^7%d ^8+ 0.2 * ^7%.1f ^8* ^7%d^8)",
7899+
overlapChance, numProjectiles, fifthAttackMulti, numProjectiles + skillData.FifthStrikeProjectiles))
7900+
t_insert(breakdown.SkillDPSMultiplier, s_format("^8= ball hit * ^7 %.3f", dpsMult))
7901+
end
7902+
end
7903+
end
7904+
if dpsMult ~= 1 then
7905+
skillData.dpsMultiplier = (skillData.dpsMultiplier or 1) * dpsMult
7906+
output.SkillDPSMultiplier = (output.SkillDPSMultiplier or 1) * dpsMult
7907+
end
7908+
end,
78607909
statMap = {
78617910
["active_skill_hit_ailment_damage_with_projectile_+%_final"] = {
78627911
mod("Damage", "MORE", nil, bit.band(ModFlag.Hit, ModFlag.Ailment), 0, { type = "SkillPart", skillPartList = { 2, 3, 4, 5, 6 } })
78637912
},
78647913
["molten_strike_every_5th_attack_projectiles_damage_+%_final"] = {
7865-
mod("Damage", "MORE", nil, bit.band(ModFlag.Hit, ModFlag.Ailment), 0, { type = "SkillPart", skillPartList = { 4, 5 } })
7914+
mod("Damage", "MORE", nil, bit.band(ModFlag.Hit, ModFlag.Ailment), 0, { type = "SkillPart", skillPartList = { 4, 5 } }),
7915+
skill("FifthStrikeDamage", nil),
78667916
},
78677917
["molten_strike_every_5th_attack_fire_X_additional_projectiles"] = {
7868-
mod("ProjectileCount", "BASE", nil, 0, 0, { type = "SkillPart", skillPartList = { 4, 5 } })
7918+
mod("ProjectileCount", "BASE", nil, 0, 0, { type = "SkillPart", skillPartList = { 4, 5 } }),
7919+
skill("FifthStrikeProjectiles", nil),
78697920
},
78707921
},
78717922
baseFlags = {

0 commit comments

Comments
 (0)