diff --git a/src/engine/objects/MaxSkills.java b/src/engine/objects/MaxSkills.java index e3c2f0aa..2410ba8b 100644 --- a/src/engine/objects/MaxSkills.java +++ b/src/engine/objects/MaxSkills.java @@ -9,10 +9,16 @@ package engine.objects; +import engine.mbEnums; +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 MaxSkills { @@ -42,6 +48,29 @@ public class MaxSkills { this.maxSkillPercent = maxSkillPercent; } + public static void LoadAllMaxSkills() { + + ArrayList maxSkillsList; + int entryCount = 0; + + // Talents only: class/discipline/race adjusts are skill grants, and contracts that key on those runes would read them as caps + for (RuneTemplate rune : RuneTemplate._runes.values()) { + if (rune.rune_type != mbEnums.RuneType.TALENT || rune.rune_skill_adj.isEmpty()) + continue; + + maxSkillsList = new ArrayList<>(); + + for (Map.Entry> skillAdjust : rune.rune_skill_adj.entrySet()) + for (int[] adjust : skillAdjust.getValue()) + maxSkillsList.add(new MaxSkills(rune.template_id, Hasher.SBStringHash(skillAdjust.getKey()), adjust[1], adjust[0])); + + MaxSkillsSet.put(rune.template_id, maxSkillsList); + entryCount += maxSkillsList.size(); + } + + Logger.info("Loaded " + entryCount + " max skills for " + MaxSkillsSet.size() + " runes"); + } + public int getRuneID() { return runeID; } diff --git a/src/engine/server/world/WorldServer.java b/src/engine/server/world/WorldServer.java index f0aa052b..35bdd602 100644 --- a/src/engine/server/world/WorldServer.java +++ b/src/engine/server/world/WorldServer.java @@ -461,7 +461,7 @@ public class WorldServer { Runegate.loadAllRunegates(); Logger.info("Loading Max Skills for Trainers"); - DbManager.SkillsBaseQueries.LOAD_ALL_MAX_SKILLS_FOR_CONTRACT(); + MaxSkills.LoadAllMaxSkills(); //pick a startup Hotzone ZoneManager.generateAndSetRandomHotzone();