diff --git a/src/engine/objects/PromotionClass.java b/src/engine/objects/PromotionClass.java index 81e8b3d1..1cb4cf96 100644 --- a/src/engine/objects/PromotionClass.java +++ b/src/engine/objects/PromotionClass.java @@ -16,6 +16,7 @@ import engine.net.ByteBufferWriter; import engine.parsers.cache.CObjectIndex; import engine.parsers.objects.RuneTemplate; import engine.util.Hasher; +import org.pmw.tinylog.Logger; import java.sql.ResultSet; import java.sql.SQLException; @@ -162,6 +163,24 @@ public class PromotionClass extends AbstractGameObject { return tokens; } + public static void LoadAllPromotions() { + + int loadedCount = 0; + + for (RuneTemplate rune : RuneTemplate._runes.values()) { + if (!isPromotionRune(rune)) + continue; + + DbManager.addToCache(new PromotionClass(rune)); + loadedCount++; + } + + Logger.info("Loaded " + loadedCount + " promotion classes from runes"); + + // The CSR/admin rows 2901+ have no promotion rune; the DB loader skips ids already cached + DbManager.PromotionQueries.GET_ALL_PROMOTIONS(); + } + public static void serializeForClientMsg(PromotionClass promotionClass, ByteBufferWriter writer) { writer.putInt(3); // For BaseClass writer.putInt(0); // Pad diff --git a/src/engine/parsers/cache/ParityCheck.java b/src/engine/parsers/cache/ParityCheck.java index aaca0e3c..4d861267 100644 --- a/src/engine/parsers/cache/ParityCheck.java +++ b/src/engine/parsers/cache/ParityCheck.java @@ -9,17 +9,10 @@ package engine.parsers.cache; import engine.gameManager.ConfigManager; -import engine.gameManager.DbManager; -import engine.mbEnums; -import engine.objects.AbstractGameObject; -import engine.objects.PromotionClass; -import engine.parsers.objects.RuneTemplate; import org.pmw.tinylog.Logger; -import java.util.HashSet; import java.util.LinkedHashMap; import java.util.Objects; -import java.util.concurrent.ConcurrentHashMap; import java.util.function.Consumer; // Dev-only check that compares DB-built objects with the cache JSON before a loader is switched. @@ -35,10 +28,6 @@ public class ParityCheck { private int differenceCount = 0; private int missingCount = 0; - static { - register("static_rune_promotion", ParityCheck::comparePromotionClasses); - } - private ParityCheck(String table) { this.table = table; } @@ -92,42 +81,4 @@ public class ParityCheck { differenceCount++; Logger.warn("Parity: " + table + "/" + id + "/" + field + ": db=" + dbValue + " json=" + jsonValue); } - - private static void comparePromotionClasses(ParityCheck check) { - - ConcurrentHashMap cache; - PromotionClass promotionClass; - PromotionClass jsonClass; - RuneTemplate rune; - int id; - - cache = DbManager.getMap(mbEnums.GameObjectType.PromotionClass); - - if (cache == null) { - Logger.warn("Parity: static_rune_promotion: no PromotionClass objects loaded"); - return; - } - - for (AbstractGameObject cached : cache.values()) { - promotionClass = (PromotionClass) cached; - id = promotionClass.getObjectUUID(); - rune = RuneTemplate._runes.get(id); - - // The CSR/admin rows 2901+ are TALENT runes in the JSON, not promotions - if (rune != null && !PromotionClass.isPromotionRune(rune)) - rune = null; - - if (!check.compareRow(id, rune)) - continue; - - jsonClass = new PromotionClass(rune); - - check.compareField(id, "name", promotionClass.getName(), jsonClass.getName()); - check.compareField(id, "token", promotionClass.getToken(), jsonClass.getToken()); - check.compareField(id, "healthMod", promotionClass.getHealthMod(), jsonClass.getHealthMod()); - check.compareField(id, "manaMod", promotionClass.getManaMod(), jsonClass.getManaMod()); - check.compareField(id, "staminaMod", promotionClass.getStaminaMod(), jsonClass.getStaminaMod()); - check.compareField(id, "allowedRunes", new HashSet<>(promotionClass.getRuneList()), new HashSet<>(jsonClass.getRuneList())); - } - } } diff --git a/src/engine/server/login/LoginServer.java b/src/engine/server/login/LoginServer.java index 9b83202b..76d0a9e6 100644 --- a/src/engine/server/login/LoginServer.java +++ b/src/engine/server/login/LoginServer.java @@ -334,6 +334,7 @@ public class LoginServer { RuneBaseAttribute.LoadAllAttributes(); RuneBase.LoadAllRuneBases(); BaseClass.LoadAllBaseClasses(); + PromotionClass.LoadAllPromotions(); Race.loadAllRaces(); RuneBaseEffect.LoadRuneBaseEffects(); diff --git a/src/engine/server/world/WorldServer.java b/src/engine/server/world/WorldServer.java index 9faf7c02..b068e426 100644 --- a/src/engine/server/world/WorldServer.java +++ b/src/engine/server/world/WorldServer.java @@ -336,7 +336,7 @@ public class WorldServer { CObjectIndex.build(); Logger.info("Loading PromotionClasses"); - DbManager.PromotionQueries.GET_ALL_PROMOTIONS(); + PromotionClass.LoadAllPromotions(); Logger.info("Loading NPC and Mob Rune Sets"); NPCManager._runeSetMap = dbNPCHandler.LOAD_RUNES_FOR_NPC_AND_MOBS();