Load rune granted skills from level-0 rune_skill_adj instead of static_skill_skillsgranted

Load moved after the rune templates are parsed.
Parity (scripts/p27.py): 76 of 107 DB runes match. Value changes (JSON
wins, Task 2.7 decisions):
- Blade Master 3005: Sword +10 removed (no rune_skill_adj in the JSON;
  Blade Weaver 3006 keeps Sword +10). Reaches players via PlayerBonuses.
- Pet 2522: Dodge and Unarmed Combat 1 -> 22. Not reachable; players
  never hold the Pet rune.
- 29 Master X / trainer runes lose their rows (no level-0 pairs in the
  JSON). Not reachable; players never hold trainer runes. Their caps
  still load into MaxSkills.
- 2243 mob/guard race runes gain rows. Not reachable; PlayerBonuses
  only reads player race/class/promotion/held runes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
MagicBotandClaude Opus 5.5 committed 2026-10-22 07:46:48 -04:00
1 parent e3aae0af5c
commit 865949fd1c
2 files changed
+34 -3

No files matched your search

+30
View File
@@ -11,11 +11,16 @@ package engine.objects;
import engine.gameManager.DbManager;
import engine.mbEnums.SourceType;
import engine.parsers.objects.RuneTemplate;
import engine.server.MBServerStatics;
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;
import java.util.concurrent.ConcurrentHashMap;
@@ -102,6 +107,31 @@ public class SkillsBase extends AbstractGameObject {
return null;
}
// Level 0 adjusts are the skills a rune grants outright; higher levels are trainer caps
public static void LoadAllRuneSkills() {
HashMap<Integer, Integer> grantedSkills;
int entryCount = 0;
for (RuneTemplate rune : RuneTemplate._runes.values()) {
grantedSkills = new HashMap<>();
for (Map.Entry<String, ArrayList<int[]>> skillAdjust : rune.rune_skill_adj.entrySet())
for (int[] adjust : skillAdjust.getValue())
if (adjust[1] == 0)
grantedSkills.put(Hasher.SBStringHash(skillAdjust.getKey()), adjust[0]);
if (grantedSkills.isEmpty())
continue;
runeSkillsCache.put(rune.template_id, grantedSkills);
entryCount += grantedSkills.size();
}
Logger.info("Loaded " + entryCount + " granted skills for " + runeSkillsCache.size() + " runes");
}
public static void putInCache(SkillsBase sb) {
if (sb == null)
+4 -3
View File
@@ -282,9 +282,6 @@ public class WorldServer {
Logger.info("Initializing PowersManager.");
PowersManager.initPowersManager(true);
Logger.info("Loading granted Skills for Runes");
DbManager.SkillsBaseQueries.LOAD_ALL_RUNE_SKILLS();
Logger.info("Loading Player Friends");
DbManager.PlayerCharacterQueries.LOAD_PLAYER_FRIENDS();
@@ -353,6 +350,10 @@ public class WorldServer {
BaseClass.LoadAllBaseClasses();
Race.loadAllRaces();
RuneBaseEffect.LoadRuneBaseEffects();
Logger.info("Loading granted Skills for Runes");
SkillsBase.LoadAllRuneSkills();
Logger.info("Loading MobBases.");
DbManager.MobBaseQueries.GET_ALL_MOBBASES();