From 0921b031eaa0e61f47c5aca45dcb1d1ec16d580d Mon Sep 17 00:00:00 2001 From: MagicBot Date: Thu, 22 Oct 2026 07:45:59 -0400 Subject: [PATCH] Load rune skill adjusts from rune_skill_adj instead of static_rune_skill_adjusts Parity (scripts/p27.py): all 2259 DB runes and 69290 rows match in value and order; token = SBStringHash(skill_type), name = obj_name. The JSON adds 95 class/discipline/talent runes; applyRuneSkills reads by mobbase ID and none of them is a mobbase, so no reachable value change. Co-Authored-By: Claude Opus 5.5 --- src/engine/powers/RuneSkillAdjustEntry.java | 40 +++++++++++++++++++++ src/engine/server/world/WorldServer.java | 3 +- 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/src/engine/powers/RuneSkillAdjustEntry.java b/src/engine/powers/RuneSkillAdjustEntry.java index 5842e43d..7868d1cf 100644 --- a/src/engine/powers/RuneSkillAdjustEntry.java +++ b/src/engine/powers/RuneSkillAdjustEntry.java @@ -8,8 +8,15 @@ package engine.powers; +import engine.parsers.objects.RuneTemplate; +import engine.util.Hasher; +import org.pmw.tinylog.Logger; + import java.sql.ResultSet; import java.sql.SQLException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; public class RuneSkillAdjustEntry { @@ -28,4 +35,37 @@ public class RuneSkillAdjustEntry { this.level = rs.getInt("level"); } + public RuneSkillAdjustEntry(RuneTemplate rune, String skillType, int[] adjust) { + this.name = rune.obj_name; + this.token = Hasher.SBStringHash(skillType); + this.skill_type = skillType; + this.rank = adjust[0]; + this.level = adjust[1]; + } + + public static HashMap> loadAllRuneSkillAdjusts() { + + HashMap> runeSkillAdjusts = new HashMap<>(); + ArrayList skillAdjustList; + int entryCount = 0; + + for (RuneTemplate rune : RuneTemplate._runes.values()) { + + if (rune.rune_skill_adj.isEmpty()) + continue; + + skillAdjustList = new ArrayList<>(); + + for (Map.Entry> skillAdjust : rune.rune_skill_adj.entrySet()) + for (int[] adjust : skillAdjust.getValue()) + skillAdjustList.add(new RuneSkillAdjustEntry(rune, skillAdjust.getKey(), adjust)); + + runeSkillAdjusts.put(rune.template_id, skillAdjustList); + entryCount += skillAdjustList.size(); + } + + Logger.info("Loaded " + entryCount + " skill adjusts for " + runeSkillAdjusts.size() + " runes"); + return runeSkillAdjusts; + } + } diff --git a/src/engine/server/world/WorldServer.java b/src/engine/server/world/WorldServer.java index da22ecc9..f0aa052b 100644 --- a/src/engine/server/world/WorldServer.java +++ b/src/engine/server/world/WorldServer.java @@ -39,6 +39,7 @@ import engine.parsers.cache.RuneParser; import engine.parsers.objects.DeedTemplate; import engine.parsers.objects.ItemTemplate; import engine.parsers.objects.RuneTemplate; +import engine.powers.RuneSkillAdjustEntry; import engine.server.MBServerStatics; import engine.util.MapLoader; import engine.util.ThreadUtils; @@ -359,7 +360,7 @@ public class WorldServer { PowersManager._allRunePowers = dbRuneBaseHandler.LOAD_RUNE_POWERS(); Logger.info("Loading Rune Skill Adjusts"); - PowersManager._allRuneSkillAdjusts = dbRuneBaseHandler.LOAD_RUNE_SKILL_ADJUSTS(); + PowersManager._allRuneSkillAdjusts = RuneSkillAdjustEntry.loadAllRuneSkillAdjusts(); Logger.info("Loading item enchants"); DbManager.LootQueries.LOAD_ENCHANT_VALUES();