From d6df01f8f34f6927b2226af73dda0e0816b89cc5 Mon Sep 17 00:00:00 2001 From: MagicBot Date: Thu, 22 Oct 2026 08:31:49 -0400 Subject: [PATCH] Skip mob race runes when loading power granted trains Their item_power_action entries are mob power ranks by level, not trains, and getGrantedTrains only looks up a player's race, class, promotion and runes. RACE runes load only when they are a player Race (static_rune_race). Cuts the table from 379384 entries / 969 powers to 2596 / 925; no value a player can read changes. Co-Authored-By: Claude Opus 5.5 --- src/engine/objects/PowerGrantedTrains.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/engine/objects/PowerGrantedTrains.java b/src/engine/objects/PowerGrantedTrains.java index e4d7dda9..413eccd5 100644 --- a/src/engine/objects/PowerGrantedTrains.java +++ b/src/engine/objects/PowerGrantedTrains.java @@ -10,6 +10,7 @@ package engine.objects; import engine.gameManager.DbManager; +import engine.mbEnums; import engine.parsers.objects.RuneTemplate; import engine.server.MBServerStatics; import engine.util.Hasher; @@ -94,14 +95,19 @@ public class PowerGrantedTrains { return (short) 0; } - // Trains are power_arguments[0] of the first action; only mob race runes carry more than one. + // Trains are power_arguments[0] of the first action. Mob race runes are skipped: + // their power actions are mob power ranks by level, not trains. public static void loadGrantedPowers() { ConcurrentHashMap powerGrants = new ConcurrentHashMap<>(MBServerStatics.CHM_INIT_CAP, MBServerStatics.CHM_LOAD, MBServerStatics.CHM_THREAD_LOW); int token; int grantCount = 0; - for (RuneTemplate rune : RuneTemplate._runes.values()) + for (RuneTemplate rune : RuneTemplate._runes.values()) { + + if (rune.rune_type == mbEnums.RuneType.RACE && Race.getRace(rune.template_id) == null) + continue; + for (Map.Entry> powerAction : rune.item_power_action.entrySet()) { if (powerAction.getValue().isEmpty()) @@ -112,6 +118,7 @@ public class PowerGrantedTrains { .addRuneGrant(rune.template_id, (short) powerAction.getValue().get(0)[0]); grantCount++; } + } PowerGrantedTrains.grantedPowers = powerGrants; Logger.info("Loaded " + grantCount + " power train grants for " + powerGrants.size() + " powers");