Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support for new Ancestor uniques #6426

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion src/Classes/ItemsTab.lua
Original file line number Diff line number Diff line change
Expand Up @@ -3331,11 +3331,11 @@ function ItemsTabClass:AddItemTooltip(tooltip, item, slot, dbMode)

if item.base.flask.life or item.base.flask.mana then
local rateInc = modDB:Sum("INC", nil, "FlaskRecoveryRate")
local instantPerc = flaskData.instantPerc
if item.base.flask.life then
local lifeInc = modDB:Sum("INC", nil, "FlaskLifeRecovery")
local lifeMore = modDB:More(nil, "FlaskLifeRecovery")
local lifeRateInc = modDB:Sum("INC", nil, "FlaskLifeRecoveryRate")
local instantPerc = flaskData.instantPerc + modDB:Sum("BASE", nil, "LifeFlaskInstantRecovery")
local inst = flaskData.lifeBase * instantPerc / 100 * (1 + lifeInc / 100) * lifeMore * (1 + effectInc / 100)
local base = flaskData.lifeBase * (1 - instantPerc / 100) * (1 + lifeInc / 100) * lifeMore * (1 + effectInc / 100) * (1 + durInc / 100)
local grad = base * output.LifeRecoveryRateMod
Expand Down Expand Up @@ -3388,6 +3388,7 @@ function ItemsTabClass:AddItemTooltip(tooltip, item, slot, dbMode)
if item.base.flask.mana then
local manaInc = modDB:Sum("INC", nil, "FlaskManaRecovery")
local manaRateInc = modDB:Sum("INC", nil, "FlaskManaRecoveryRate")
local instantPerc = flaskData.instantPerc + modDB:Sum("BASE", nil, "ManaFlaskInstantRecovery")
local inst = flaskData.manaBase * instantPerc / 100 * (1 + manaInc / 100) * (1 + effectInc / 100)
local base = flaskData.manaBase * (1 - instantPerc / 100) * (1 + manaInc / 100) * (1 + effectInc / 100) * (1 + durInc / 100)
local grad = base * output.ManaRecoveryRateMod
Expand Down
158 changes: 138 additions & 20 deletions src/Data/Uniques/Special/New.lua
Original file line number Diff line number Diff line change
Expand Up @@ -6,27 +6,32 @@ data.uniques.new = {

-- New
[[
Kitava's Hunger
Majestic Plate
(60-100)% increased Armour
Recover (1-3)% of Life on Kill
(30-40)% Increased Stun and Block Recovery
+(700-1000) to maximum Life if there are no Life Modifiers on other Equipped items
]],
[[
Arohongui's Tending
Coral Amulet
Ahuana's Bite
Sharktooth Arrow Quiver
League: Ancestor
LevelReq: 56
Implicits: 1
{tags:life}Regenerate (2-4) Life per second
{tags:mana}Regenerate (3-5) Mana per second
{tags:life}(30-40)% increased Life Recovery from Flasks
{tags:mana}(15-30)% increased Mana Recovery from Flasks
Life Flasks used while on Low Life apply Recovery Instantly
Mana Flasks used while on Low Mana apply Recovery Instantly
]],
[[
Gain (6–8) Life per Enemy Hit with Attacks
Adds (30–40) to (60–70) Cold Damage to Attacks
+(20–30)% to Cold Resistance
Enemies Chilled by your Hits have Damage taken increased by Chill Effect
Chill Enemies as though dealing (60–100)% more Damage
]],[[
Akoya's Gaze
Regicide Mask
League: Ancestor
Requires Level 52, 58 Dex, 58 Int
+100 Strength Requirement
(20–25)% increased Warcry Speed
Life Leech from Exerted Attacks is instant
Non-Exerted Attacks deal no Damage
]],[[
Bound Fate
Cloth Belt
League: Ancestor
LevelReq: 16
Implicits: 1
(15-25)% increased Stun and Block Recovery
{tags:jewellery_attribute}+(20-30) to Dexterity
{tags:jewellery_attribute}+(20-30) to Intelligence
{tags:life}+(60-80) to Maximum Life
Expand All @@ -38,13 +43,126 @@ Attacks against you always Hit
Your Damage with Hits is Lucky
Damage of Hits against you is Lucky
]],[[
Defiance of Destiny
Paua Amulet
League: Ancestor
LevelReq: 49
Implicits: 1
{tags:mana}(20–30)% increased Mana Regeneration Rate
{tags:life}+(60–80) to maximum Life
{tags:jewellery_resistance}+(10–40)% to Fire Resistance
{tags:jewellery_resistance}+(10–40)% to Cold Resistance
{tags:jewellery_resistance}+(10–40)% to Lightning Resistance
{tags:life}Gain (25–35)% of Missing Unreserved Life before being Hit by an Enemy
]],[[
Honoured Alliance
Coral Ring
League: Ancestor
LevelReq: 49
Implicits: 1
{tags:life}+(20–30) to maximum Life
10% chance to Trigger Summon Spirit of Akoya on Kill
{tags:jewellery_attribute}+(10–20) to all Attributes
{tags:mana}(30–50)% increased Mana Regeneration Rate
{tags:life}(10–15)% of Damage taken Recouped as Life
]],[[
Ikiaho's Promise
Coral Amulet
League: Ancestor
LevelReq: 30
Implicits: 1
{tags:life}Regenerate (2–4) Life per second
{tags:mana}Regenerate (3–5) Mana per second
{tags:life}(30–40)% increased Life Recovery from Flasks
{tags:mana}(15–30)% increased Mana Recovery from Flasks
Life Flasks used while on Low Life apply Recovery Instantly
Mana Flasks used while on Low Mana apply Recovery Instantly
]],[[
Kahuturoa's Certainty
Ancient Greaves
League: Ancestor
Requires Level 46, 82 Str
(100–150)% increased Armour
5% reduced Movement Speed
(100–200)% increased Stun and Block Recovery
Unaffected by Damaging Ailments
]],[[
Kaom's Binding
Heavy Belt
League: Ancestor
LevelReq: 56
Implicits: 1
{tags:jewellery_attribute}+(30–40) to Strength
{tags:jewellery_defense}+(300–500) to Armour
Take no Burning Damage if you've stopped taking Burning Damage Recently
Nearby Enemies Convert 25% of their Physical Damage to Fire
]],[[
Kiloava's Bluster
Ironwood Buckler
League: Ancestor
Requires Level 57, 137 Dex
Implicits: 1
3% increased Movement Speed
(100–150)% increased Evasion Rating
(15–25)% chance to Avoid Elemental Ailments
+(3–8)% Chance to Block
(30–40)% chance for Elemental Resistances to count as being 90% against Enemy Hits
]],[[
Maata's Teaching
Karui Sceptre
League: Ancestor
Requires Level 56, 96 Str, 96 Int
Implicits: 1
+(30-40) to Intelligence
(25-50)% increased Critical Strike Chance
+2 to Level of all Minion Skill Gems
+(1-2) to Level of all Minion Skill Gems
Minions' Base Attack Critical Strike Chance is equal to the Critical Strike Chance of your Main Hand Weapon
]],
]],[[
Rakiata's Dance
Engraved Greatsword
League: Ancestor
Requires Level 48, 91 Str, 76 Dex
Implicits: 1
60% increased Global Accuracy Rating
Adds (150–200) to (300–350) Cold Damage
Adds 1 to (550–600) Lightning Damage
(15–20)% increased Attack Speed
Treats Enemy Monster Elemental Resistance values as inverted
]],[[
Replica Dragonfang's Flight
Onyx Amulet
LevelReq: 56
Implicits: 1
+(10–16) to all Attributes
+(10–15)% to all Elemental Resistances
+3 to Level of all Spark Gems
(10–15)% increased Reservation Efficiency of Skills
Items and Gems have (10–15)% reduced Attribute Requirements
]],[[
Tawhanuku's Timing
Moonstone Ring
League: Ancestor
{tags:jewellery_defense}+(15–25) to maximum Energy Shield
{tags:caster}(30–40)% increased Spell Damage
{tags:mana}+(60–80) to maximum Mana
(5–10)% chance to Freeze, Shock and Ignite
{tags:jewellery_defense,caster}Spells cause you to gain Energy Shield equal to their Upfront Cost every fifth time you Pay it
]],[[
Utula's Hunger
Majestic Plate
League: Ancestor
Requires Level 53, 145 Str
(60-100)% increased Armour
Recover (1-3)% of Life on Kill
(30-40)% Increased Stun and Block Recovery
+(700-1000) to maximum Life if there are no Life Modifiers on other Equipped items
]],[[
Warrior's Tale
Crimson Jewel
League: Ancestor
Limited to: 1
100% increased effect of Tattoos in Radius
]]
-- Reworked

}
3 changes: 3 additions & 0 deletions src/Modules/CalcPerform.lua
Original file line number Diff line number Diff line change
Expand Up @@ -2808,6 +2808,9 @@ function calcs.perform(env, avoidCache, fullDPSSkipEHP)
if output.HasBonechill and (hasGuaranteedBonechill or enemyDB:Sum("BASE", nil, "ChillVal") > 0) then
t_insert(mods, modLib.createMod("ColdDamageTaken", "INC", num, "Bonechill", { type = "Condition", var = "Chilled" }))
end
if modDB:Flag(nil, "ChillEffectIncDamageTaken") then
t_insert(mods, modLib.createMod("ColdDamageTaken", "INC", num, "Ahuana's Bite", { type = "Condition", var = "Chilled" }))
end
return mods
end
},
Expand Down
13 changes: 13 additions & 0 deletions src/Modules/ModParser.lua
Original file line number Diff line number Diff line change
Expand Up @@ -2594,6 +2594,8 @@ local specialModList = {
["life leech from hits with this weapon is instant"] = { mod("InstantLifeLeech", "BASE", 100, { type = "Condition", var = "{Hand}Attack" }) },
["gain life from leech instantly from hits with this weapon"] = { mod("InstantLifeLeech", "BASE", 100, { type = "Condition", var = "{Hand}Attack" }, { type = "SkillType", skillType = SkillType.Attack }) },
["instant recovery"] = { mod("FlaskInstantRecovery", "BASE", 100) },
["life flasks used while on low life apply recovery instantly"] = { mod("LifeFlaskInstantRecovery", "BASE", 100, { type = "Condition", var = "LowMana" }) },
["mana flasks used while on low mana apply recovery instantly"] = { mod("ManaFlaskInstantRecovery", "BASE", 100, { type = "Condition", var = "LowMana" }) },
["(%d+)%% of recovery applied instantly"] = function(num) return { mod("FlaskInstantRecovery", "BASE", num) } end,
["has no attribute requirements"] = { flag("NoAttributeRequirements") },
["trigger a socketed spell when you attack with this weapon"] = { mod("ExtraSupport", "LIST", { skillId = "SupportTriggerSpellOnAttack", level = 1 }, { type = "SocketedIn", slotName = "{SlotName}" }) },
Expand All @@ -2618,9 +2620,12 @@ local specialModList = {
["([%+%-]%d+)%% to quality of socketed gems"] = function(num) return { mod("GemProperty", "LIST", { keyword = "all", key = "quality", value = num }, { type = "SocketedIn", slotName = "{SlotName}" }) } end,
["([%+%-]%d+)%% to quality of all skill gems"] = function(num) return { mod("GemProperty", "LIST", { keyword = "grants_active_skill", key = "quality", value = num }) } end,
["([%+%-]%d+)%% to quality of socketed ([%a%- ]+) gems"] = function(num, _, type) return { mod("GemProperty", "LIST", { keyword = type, key = "quality", value = num }, { type = "SocketedIn", slotName = "{SlotName}" }) } end,
["([%+%-]%d+)%% to quality of socketed skill gems"] = function(num, _, type) return { mod("GemProperty", "LIST", { keyword = "grants_active_skill", key = "quality", value = num }, { type = "SocketedIn", slotName = "{SlotName}" }) } end,
["([%+%-]%d+) to level of active socketed skill gems"] = function(num) return { mod("GemProperty", "LIST", { keyword = "grants_active_skill", key = "level", value = num }, { type = "SocketedIn", slotName = "{SlotName}" }) } end,
["([%+%-]%d+) to level of socketed active skill gems"] = function(num) return { mod("GemProperty", "LIST", { keyword = "grants_active_skill", key = "level", value = num }, { type = "SocketedIn", slotName = "{SlotName}" }) } end,
["([%+%-]%d+) to level of socketed skill gems"] = function(num) return { mod("GemProperty", "LIST", { keyword = "grants_active_skill", key = "level", value = num }, { type = "SocketedIn", slotName = "{SlotName}" }) } end,
["([%+%-]%d+) to level of socketed active skill gems per (%d+) player levels"] = function(num, _, div) return { mod("GemProperty", "LIST", { keyword = "grants_active_skill", key = "level", value = num }, { type = "SocketedIn", slotName = "{SlotName}" }, { type = "Multiplier", var = "Level", div = tonumber(div) }) } end,
["([%+%-]%d+) to level of socketed skill gems per (%d+) player levels"] = function(num, _, div) return { mod("GemProperty", "LIST", { keyword = "grants_active_skill", key = "level", value = num }, { type = "SocketedIn", slotName = "{SlotName}" }, { type = "Multiplier", var = "Level", div = tonumber(div) }) } end,
["socketed gems fire an additional projectile"] = { mod("ExtraSkillMod", "LIST", { mod = mod("ProjectileCount", "BASE", 1) }, { type = "SocketedIn", slotName = "{SlotName}" }) },
["socketed gems fire (%d+) additional projectiles"] = function(num) return { mod("ExtraSkillMod", "LIST", { mod = mod("ProjectileCount", "BASE", num) }, { type = "SocketedIn", slotName = "{SlotName}" }) } end,
["socketed gems reserve no mana"] = { mod("ManaReserved", "MORE", -100, { type = "SocketedIn", slotName = "{SlotName}" }) },
Expand Down Expand Up @@ -2907,6 +2912,7 @@ local specialModList = {
["spell skills cannot deal critical strikes except on final repeat"] = { flag("SpellSkillsCannotDealCriticalStrikesExceptOnFinalRepeat", nil, ModFlag.Spell), flag("", { type = "Condition", var = "alwaysFinalRepeat" }) },
["critical strikes penetrate (%d+)%% of enemy elemental resistances while affected by zealotry"] = function(num) return { mod("ElementalPenetration", "BASE", num, { type = "Condition", var = "CriticalStrike" }, { type = "Condition", var = "AffectedByZealotry" }) } end,
["attack critical strikes ignore enemy monster elemental resistances"] = { flag("IgnoreElementalResistances", { type = "Condition", var = "CriticalStrike" }, { type = "SkillType", skillType = SkillType.Attack }) },
["treats enemy monster elemental resistance values as inverted"] = { mod("HitsInvertEleResChance", "CHANCE", 100, { type = "Condition", var = "{Hand}Attack" }) } ,
["([%+%-]%d+)%% to critical strike multiplier if you've shattered an enemy recently"] = function(num) return { mod("CritMultiplier", "BASE", num, { type = "Condition", var = "ShatteredEnemyRecently" }) } end,
["(%d+)%% chance to gain a flask charge when you deal a critical strike"] = function(num) return{ mod("FlaskChargeOnCritChance", "BASE", num) } end,
["gain a flask charge when you deal a critical strike"] = { mod("FlaskChargeOnCritChance", "BASE", 100) },
Expand Down Expand Up @@ -3028,6 +3034,7 @@ local specialModList = {
["cannot inflict shock"] = { flag("CannotShock") },
["cannot ignite, chill, freeze or shock"] = { flag("CannotIgnite"), flag("CannotChill"), flag("CannotFreeze"), flag("CannotShock") },
["shock enemies as though dealing (%d+)%% more damage"] = function(num) return { mod("ShockAsThoughDealing", "MORE", num) } end,
["chill enemies as though dealing (%d+)%% more damage"] = function(num) return { mod("ShockAsThoughDealing", "MORE", num) } end,
["inflict non%-damaging ailments as though dealing (%d+)%% more damage"] = function(num) return {
mod("ShockAsThoughDealing", "MORE", num),
mod("ChillAsThoughDealing", "MORE", num),
Expand Down Expand Up @@ -3143,6 +3150,7 @@ local specialModList = {
mod("SpellSuppressionAppliesToAilmentAvoidancePercent", "BASE", num),
flag("SpellSuppressionAppliesToAilmentAvoidance")
} end,
["enemies chilled by your hits have damage taken increased by chill effect"] = { flag("ChillEffectIncDamageTaken") },
-- Bleed
["melee attacks cause bleeding"] = { mod("BleedChance", "BASE", 100, nil, ModFlag.Melee) },
["attacks cause bleeding when hitting cursed enemies"] = { mod("BleedChance", "BASE", 100, nil, ModFlag.Attack, { type = "ActorCondition", actor = "enemy", var = "Cursed" }) },
Expand Down Expand Up @@ -4038,6 +4046,11 @@ local specialModList = {
["unaffected by scorch"] = { mod("SelfScorchEffect", "MORE", -100) },
["unaffected by brittle"] = { mod("SelfBrittleEffect", "MORE", -100) },
["unaffected by sap"] = { mod("SelfSapEffect", "MORE", -100) },
["unaffected by damaging ailments"] = {
mod("SelfBleedEffect", "MORE", -100),
mod("SelfIgniteEffect", "MORE", -100),
mod("SelfPoisonEffect", "MORE", -100),
},
["the effect of chill on you is reversed"] = { flag("SelfChillEffectIsReversed") },
["your movement speed is (%d+)%% of its base value"] = function(num) return { mod("MovementSpeed", "OVERRIDE", num / 100) } end,
["action speed cannot be modified to below (%d+)%% base value"] = function(num) return { mod("MinimumActionSpeed", "MAX", num) } end,
Expand Down