Skip to content

Commit 47dbfa7

Browse files
committed
Merge branch 'dev' into lua_update_for_PyPoB
2 parents c655680 + ade1249 commit 47dbfa7

73 files changed

Lines changed: 136558 additions & 5710 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

CHANGELOG.md

Lines changed: 133 additions & 0 deletions
Large diffs are not rendered by default.

changelog.txt

Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,118 @@
1+
VERSION[2.20.2][2022/08/16]
2+
3+
--- Implemented Enhancements ---
4+
* Reintroduce Show/Hide skill cost based upon whether it has a base cost (QuickStick123)
5+
--- Accuracy Improvements ---
6+
* Use correct max shock in breakdown (Lilylicious)
7+
--- Fixed Bugs ---
8+
* Fix timeless jewel socket index bug (Lothrik)
9+
* Fix missing unique sliders (Lothrik)
10+
* Filter out unused modifier line ranges (Lothrik)
11+
12+
13+
VERSION[2.20.1][2022/08/16]
14+
15+
--- Fixed Bugs ---
16+
* Revert skill costs being hidden if you reduced the cost to 0 as it was causing an error (LocalIdentity)
17+
* Fix Juggernaut "Armour applies to Elemental damage" node not working (Lilylicious)
18+
19+
VERSION[2.20.0][2022/08/16]
20+
21+
--- Implemented Enhancements ---
22+
* Update skill tree to 3.19 (Regisle)
23+
* Add new 3.19 uniques (QuickStick123, LocalIdentity, Wires77)
24+
* Timeless jewel search improvements (Regisle, Lothrik)
25+
* You can now auto generate weights for nodes based on skill DPS
26+
* You can scroll on the horizontal scroll bars to change values (hold Ctrl/Shift to scroll slower/faster)
27+
* Update a wide variety of unique items (Sinured, QuickStick123, Lexy, Nightblade, Paliak, Wires77, Lothrik)
28+
* Add support for
29+
* Damage over Time DPS cap (deathbeam, Regisle, LocalIdentity)
30+
* 3.19 Trickster ascendancy (Lilylicious, Regisle)
31+
* Deal 10% less damage on Indomitable Resolve (Regisle)
32+
* Armour applies to Elemental damage (Regisle)
33+
* Vorana's March mods (LocalIdentity)
34+
* Non-critical strikes deal less damage (Regisle)
35+
* More Ailment effect modifiers (Regisle)
36+
* Used Life flask in the past 10 seconds (Regisle)
37+
* Debuff expiration rate (Regisle)
38+
* Basic recoup breakdown (Regisle)
39+
* Modifiers to enemy damage (Regisle)
40+
* PvP skill scaling (Regisle)
41+
* PvP hit taken (Regisle)
42+
* Non-Vaal gem modifiers (Nostrademous)
43+
* Debilitate debuff (deathbeam)
44+
* Minions have Unholy Might (QuickStick123)
45+
* 3.19 Arrow Dancing Keystone (QuickStick123)
46+
* Counting Mastery type allocations (Nostrademous)
47+
* More triple damage mods (Paliak)
48+
* Kalandra inverted stats (Nostrademous)
49+
* Stacking max shock (Lilylicious)
50+
* Ryslatha Pantheon Life flask charge generation (deathbeam)
51+
* Lightning Conduit's new Trigger flag (Nostrademous)
52+
* Enemy Overwhelm (QuickStick123)
53+
* Burning and Caustic ground and Flame Surge (deathbeam)
54+
* Burning and caustic ground in total/combined DPS (Regisle)
55+
* Parsing of Link skill mods (QuickStick123)
56+
* Fix Incinerate gem tooltip (Paliak)
57+
* Always use configured or base chill for bonechill and remove bonechill config (deathbeam)
58+
* Update ward recharge speed (Lexy)
59+
* Update Brittle to 3.19 values (Lexy)
60+
* Added Thrusting as a base sword subType (Nostrademous)
61+
* Minion charges and ailments work like players (Lilylicious)
62+
* Take into account weapon conditions for shock (Lilylicious)
63+
* Properly support gain on kill (Regisle)
64+
* Update Chainbreaker wording and display Rage Regeneration (Sinured)
65+
66+
--- User Interface ---
67+
* Display reservation efficiency as percentage with two decimal places instead of a full float multiplier (Paliak)
68+
* Display effect of active gem variant when mousing over the "Variant" drop-down selector (talkmill)
69+
* Change sidebar to show red numbers for unreserved life of 0 (talkmill)
70+
71+
--- Accuracy Improvements ---
72+
* General improvements to "Damaging Hits" section and armour breakdown (QuickStick123)
73+
* Apply spell suppression to EHP calculations and add support for Instinct (Regisle)
74+
* Improve stun avoid calcs (Regisle)
75+
* Improve scaled modifier precision (Lothrik)
76+
* Restructure leech to apply cap later (QuickStick123)
77+
78+
--- Fixed Bugs ---
79+
* Blood offering stats not calculated (talkmill)
80+
* Node power sorting at infinite values (Regisle)
81+
* Config tab being 1 change behind enemy level (Regisle)
82+
* Bottom bar wrapping in the tree tab (talkmill)
83+
* Sidebar always showing Culling DPS and Recoverable ES (LocalIdentity)
84+
* Evasion to armour conversion calculation not including "armour and evasion" base stats (MrCoolTheCucumber)
85+
* Trypanon crit chance calculations (LocalIdentity)
86+
* Total more multipliers not being round to nearest percent as done in game (QuickStick123)
87+
* Evasion as Extra Armour with Iron Reflexes (LocalIdentity)
88+
* Buff stages on Scorching Ray, Frost Shield, and Sigil of Power (Wires77)
89+
* Veiled mod pool on autogenerated unique weapons (LocalIdentity)
90+
* Bleed DPS when using multiple totems (LocalIdentity)
91+
* Alternate ailments not working with anomalous grace (QuickStick123)
92+
* Various spelling errors (Nightblade, Regisle)
93+
* Imported items variable percentages (Wires77)
94+
* Vaal Discipline not counting towards Aura count (LocalIdentity)
95+
* Enable skill tooltip visibility for non-vaal active skill gems (Lothrik)
96+
* Default level for pinnacles (Lilylicious)
97+
* Prevent invalid character level values (Lothrik)
98+
* Catalysts visually not scaling certain mods (QuickStick123)
99+
* Force rebuild to initialise boss presets and remove phys fallback (Regisle)
100+
* Remove parsing for Tawhoa, Forest's Strength as it is not implemented (Lilylicious)
101+
* Selected Mastery Tree Upconversion Error (Nostrademous)
102+
* Set skillset to nil instead of removing it from table and reordering it (deathbeam)
103+
* Build did not save on generating a build code (talkmill)
104+
* Multistrike damage calculation with skills which have bow and melee Tag (Sinured)
105+
* Guaranteed ailments were not using correct values (Lilylicious)
106+
* Longshot affects all projectiles that hit (Lilylicious)
107+
* Scorching Ray totem DoT was not stacking (Regisle)
108+
* Tornado was using Cast rate instead of Hit rate (Sinured)
109+
* Skill costs being hidden if you reduced the cost to 0 (QuickStick123)
110+
111+
--- Preliminary changes ---
112+
* These changes might be changed further once the official patch is out
113+
* Lifetap & Blessing interaction (Sinured)
114+
115+
1116
VERSION[2.19.2][2022/07/15]
2117

3118
--- User Interface ---

fix_ascendancy_positions.py

Lines changed: 48 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
logging.basicConfig(level=logging.INFO)
1010

1111

12-
@dataclasses.dataclass(frozen=True, slots=True)
12+
@dataclasses.dataclass(frozen=True) #, slots=True) #, slots breaks becouse its already defined?
1313
class Point2D:
1414
"""Two-dimensional point. Supports subtracting points."""
1515
x: int
@@ -40,6 +40,42 @@ def __sub__(self, other: Point2D) -> Point2D:
4040
"Saboteur": Point2D(10200, -2200),
4141
"Ascendant": Point2D(-7800, 7200),
4242
}
43+
EXTRA_NODES = {
44+
"Necromancer": [{"Node": {"name": "Nine Lives", "icon": "Art/2DArt/SkillIcons/passives/Ascendants/Int.png", "isNotable": True, "skill" : 27602},
45+
"offset": Point2D(-1500, -1000)}],
46+
"Guardian": [{"Node": {"name": "Searing Purity", "icon": "Art/2DArt/SkillIcons/passives/Ascendants/StrInt.png", "isNotable": True, "skill" : 57568},
47+
"offset": Point2D(-1000, 1500)}],
48+
"Berserker": [{"Node": {"name": "Indomitable Resolve", "icon": "Art/2DArt/SkillIcons/passives/Ascendants/Str.png", "isNotable": True, "skill" : 52435},
49+
"offset": Point2D(-1000, 0)}],
50+
"Ascendant": [{"Node": {"name": "Unleashed Potential", "icon": "Art/2DArt/SkillIcons/passives/Ascendants/SkillPoint.png", "skill" : 19355},
51+
"offset": Point2D(-1000, 1000)}],
52+
"Champion": [{"Node": {"name": "Fatal Flourish", "icon": "Art/2DArt/SkillIcons/passives/Ascendants/StrDex.png", "isNotable": True, "skill" : 42469},
53+
"offset": Point2D(0, 1000)}],
54+
"Raider": [{"Node": {"name": "Fury of Nature", "icon": "Art/2DArt/SkillIcons/passives/Ascendants/Dex.png", "isNotable": True, "skill" : 18054},
55+
"offset": Point2D(1000, -1500)}],
56+
"Saboteur": [{"Node": {"name": "Harness the Void", "icon": "Art/2DArt/SkillIcons/passives/Ascendants/DexInt.png", "isNotable": True, "skill" : 57331},
57+
"offset": Point2D(1000, -1500)}],
58+
}
59+
EXTRA_NODE_IDS = { #these can be any value but for now they are hardcoded to what random numbers generated last time for consistancy, the "hash" value is what we should probs use though as its the value in the ggpk
60+
"Nine Lives": {"NodeID": 33600, "GroupID" : 44472},
61+
"Searing Purity": {"NodeID": 22278, "GroupID" : 50933},
62+
"Soul Drinker": {"NodeID": 19264, "GroupID" : 37841, "hash" : 45999},
63+
"Harness the Void": {"GroupID" : 37841},
64+
"Fury of Nature": {"NodeID": 62630, "GroupID" : 56600},
65+
"Fatal Flourish": {"NodeID": 11264, "GroupID" : 63033},
66+
"Indomitable Resolve": {"NodeID": 15386, "GroupID" : 25519},
67+
"Unleashed Potential": {"NodeID": 55193, "GroupID" : 60495},
68+
}
69+
EXTRA_NODES_STATS = { # these should not be hardcoded here, but should by inserted later via the exporter from the ggpk (they are AsendencySpecialEdlritch in PassiveSkills.dat, though reminder text seems to be missing)
70+
"Nine Lives": {"stats": ["25% of Damage taken Recouped as Life, Mana and Energy Shield", "Recoup Effects instead occur over 3 seconds"], "reminderText": ["(Only Damage from Hits can be Recouped, over 4 seconds following the Hit)"]},
71+
"Searing Purity": {"stats": ["45% of Chaos Damage taken as Fire Damage", "45% of Chaos Damage taken as Lightning Damage"], "reminderText": []},
72+
"Soul Drinker": {"stats": ["2% of Damage Leeched as Energy Shield", "20% increased Attack and Cast Speed while Leeching Energy Shield", "Energy Shield Leech effects are not removed when Energy Shield is Filled"], "reminderText": ["(Leeched Energy Shield is recovered over time. Multiple Leeches can occur simultaneously, up to a maximum rate)"]},
73+
"Harness the Void": {"stats": ["27% chance to gain 25% of Non-Chaos Damage with Hits as Extra Chaos Damage", "13% chance to gain 50% of Non-Chaos Damage with Hits as Extra Chaos Damage", "7% chance to gain 100% of Non-Chaos Damage with Hits as Extra Chaos Damage"], "reminderText": []},
74+
"Fury of Nature" : {"stats": ["Non-Damaging Elemental Ailments you inflict spread to nearby enemies in a radius of 20", "Non-Damaging Elemental Ailments you inflict have 100% more Effect"], "reminderText": ["(Elemental Ailments are Ignited, Scorched, Chilled, Frozen, Brittled, Shocked, and Sapped)"]},
75+
"Fatal Flourish": {"stats": ["Final Repeat of Attack Skills deals 60% more Damage", "Non-Travel Attack Skills Repeat an additional Time"], "reminderText": []},
76+
"Indomitable Resolve": {"stats": ["Deal 10% less Damage", "Take 25% less Damage"], "reminderText": []},
77+
"Unleashed Potential" : {"stats": ["400% increased Endurance, Frenzy and Power Charge Duration", "25% chance to gain a Power, Frenzy or Endurance Charge on Kill", "+1 to Maximum Endurance Charges", "+1 to Maximum Frenzy Charges", "+1 to Maximum Power Charges"], "reminderText": []},
78+
}
4379

4480

4581
def fix_ascendancy_positions(path: os.PathLike) -> None:
@@ -70,6 +106,17 @@ def fix_ascendancy_positions(path: os.PathLike) -> None:
70106
offset = NODE_GROUPS[ascendancy] - ascendancy_starting_point[ascendancy]
71107
group["x"] += offset.x
72108
group["y"] += offset.y
109+
for ascendancy in EXTRA_NODES:
110+
for node in EXTRA_NODES[ascendancy]:
111+
if str(EXTRA_NODE_IDS[node["Node"]["name"]]["GroupID"]) in data["groups"]: #using hardcoded value from last time, can use another method instead, like just grabbing the next avalible value
112+
print("GroupID already taken")
113+
return
114+
node["Node"]["group"] = EXTRA_NODE_IDS[node["Node"]["name"]]["GroupID"]
115+
data["groups"][node["Node"]["group"]] = {"x": NODE_GROUPS[ascendancy].x + node["offset"].x, "y": NODE_GROUPS[ascendancy].y + node["offset"].y, "orbits": [0], "nodes": [node["Node"]["skill"]]}
116+
data["nodes"][node["Node"]["skill"]] = node["Node"] | {"ascendancyName": ascendancy, "orbit": 0, "orbitIndex": 0, "out": [], "in": [], "stats": [], "reminderText": []}
117+
if node["Node"]["name"] in EXTRA_NODES_STATS:
118+
data["nodes"][node["Node"]["skill"]]["stats"] = EXTRA_NODES_STATS[node["Node"]["name"]]["stats"]
119+
data["nodes"][node["Node"]["skill"]]["reminderText"] = EXTRA_NODES_STATS[node["Node"]["name"]]["reminderText"]
73120
with open(path, "w", encoding="utf-8") as o:
74121
json.dump(data, o, indent=4)
75122

0 commit comments

Comments
 (0)