diff --git a/src/engine/db/handlers/dbSkillBaseHandler.java b/src/engine/db/handlers/dbSkillBaseHandler.java index f089a61e..39508ca9 100644 --- a/src/engine/db/handlers/dbSkillBaseHandler.java +++ b/src/engine/db/handlers/dbSkillBaseHandler.java @@ -19,6 +19,7 @@ import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; +import java.util.HashMap; public class dbSkillBaseHandler extends dbHandlerBase { @@ -28,71 +29,33 @@ public class dbSkillBaseHandler extends dbHandlerBase { } public SkillsBase GET_BASE(final int objectUUID) { - - SkillsBase skillsBase = (SkillsBase) DbManager.getFromCache(GameObjectType.SkillsBase, objectUUID); - - if (skillsBase != null) - return skillsBase; - - try (Connection connection = DbManager.getConnection(); - PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM static_skill_skillsbase WHERE ID = ?")) { - - preparedStatement.setInt(1, objectUUID); - ResultSet rs = preparedStatement.executeQuery(); - - skillsBase = (SkillsBase) getObjectFromRs(rs); - - } catch (SQLException e) { - Logger.error(e); - } - - SkillsBase.putInCache(skillsBase); - return skillsBase; + return (SkillsBase) DbManager.getFromCache(GameObjectType.SkillsBase, objectUUID); } public SkillsBase GET_BASE_BY_NAME(String name) { - - SkillsBase skillsBase = SkillsBase.getFromCache(name); - - if (skillsBase != null) - return skillsBase; - - try (Connection connection = DbManager.getConnection(); - PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM static_skill_skillsbase WHERE name = ?")) { - - preparedStatement.setString(1, name); - ResultSet rs = preparedStatement.executeQuery(); - - skillsBase = (SkillsBase) getObjectFromRs(rs); - - } catch (SQLException e) { - Logger.error(e); - } - - SkillsBase.putInCache(skillsBase); - return skillsBase; + return SkillsBase.getFromCache(name); } public SkillsBase GET_BASE_BY_TOKEN(final int token) { + return SkillsBase.getFromCache(token); + } - SkillsBase skillsBase = SkillsBase.getFromCache(token); + public HashMap GET_ALL_SKILL_NAMES() { - if (skillsBase != null) - return skillsBase; + HashMap skillNames = new HashMap<>(); try (Connection connection = DbManager.getConnection(); - PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM static_skill_skillsbase WHERE token = ?")) { + PreparedStatement preparedStatement = connection.prepareStatement("SELECT ID, name FROM static_skill_skillsbase")) { - preparedStatement.setInt(1, token); ResultSet rs = preparedStatement.executeQuery(); - skillsBase = (SkillsBase) getObjectFromRs(rs); + while (rs.next()) + skillNames.put(rs.getInt("ID"), rs.getString("name")); } catch (SQLException e) { Logger.error(e); } - SkillsBase.putInCache(skillsBase); - return skillsBase; + return skillNames; } } diff --git a/src/engine/objects/SkillsBase.java b/src/engine/objects/SkillsBase.java index a750c029..7410f27a 100644 --- a/src/engine/objects/SkillsBase.java +++ b/src/engine/objects/SkillsBase.java @@ -10,8 +10,10 @@ package engine.objects; import engine.gameManager.DbManager; +import engine.mbEnums.AttributeType; import engine.mbEnums.SourceType; import engine.parsers.objects.RuneTemplate; +import engine.parsers.objects.wpak.SkillTemplate; import engine.server.MBServerStatics; import engine.util.Hasher; import org.pmw.tinylog.Logger; @@ -75,6 +77,20 @@ public class SkillsBase extends AbstractGameObject { this.spiMod = spiMod; } + public SkillsBase(int skillsBaseID, SkillTemplate template) { + super(skillsBaseID); + this.name = template.skill_name; + this.nameNoSpace = name.replace(" ", ""); + this.description = template.description; + this.sourceType = SourceType.GetSourceType(this.nameNoSpace.replace("-", "").replace("\"", "").replace(",", "")); + this.token = Hasher.SBStringHash(this.name); + this.strMod = template.attr_weights.getOrDefault(AttributeType.Strength, 0).shortValue(); + this.dexMod = template.attr_weights.getOrDefault(AttributeType.Dexterity, 0).shortValue(); + this.conMod = template.attr_weights.getOrDefault(AttributeType.Constitution, 0).shortValue(); + this.intMod = template.attr_weights.getOrDefault(AttributeType.Intelligence, 0).shortValue(); + this.spiMod = template.attr_weights.getOrDefault(AttributeType.Spirit, 0).shortValue(); + } + /** * ResultSet Constructor */ @@ -107,6 +123,31 @@ public class SkillsBase extends AbstractGameObject { return null; } + // Skill ids stay in static_skill_skillsbase (dyn_character_skill and SkillReq use them); everything else is Skills.cfg + public static void LoadAllSkillsBase() { + + HashMap skillsByName = new HashMap<>(); + HashMap skillNames = DbManager.SkillsBaseQueries.GET_ALL_SKILL_NAMES(); + SkillTemplate template; + + for (SkillTemplate skill : SkillTemplate._skills.values()) + skillsByName.put(skill.skill_name, skill); + + for (Map.Entry skillName : skillNames.entrySet()) { + + template = skillsByName.get(skillName.getValue()); + + if (template == null) { + Logger.error("static_skill_skillsbase " + skillName.getKey() + " '" + skillName.getValue() + "' has no Skills.cfg entry"); + continue; + } + + putInCache(new SkillsBase(skillName.getKey(), template)); + } + + Logger.info("Loaded " + skillsCache.size() + " skills of " + SkillTemplate._skills.size() + " in Skills.cfg"); + } + // Level 0 adjusts are the skills a rune grants outright; higher levels are trainer caps public static void LoadAllRuneSkills() { diff --git a/src/engine/server/login/LoginServer.java b/src/engine/server/login/LoginServer.java index 55a5b291..41ab0649 100644 --- a/src/engine/server/login/LoginServer.java +++ b/src/engine/server/login/LoginServer.java @@ -349,6 +349,9 @@ public class LoginServer { exit(1); } + Logger.info("Loading SkillsBase"); + SkillsBase.LoadAllSkillsBase(); + Logger.info("Loading Starting Kits"); StartingKitTemplate._kits = StartingKitParser.parseStartingKitFile(); diff --git a/src/engine/server/world/WorldServer.java b/src/engine/server/world/WorldServer.java index c5b5a880..463b897d 100644 --- a/src/engine/server/world/WorldServer.java +++ b/src/engine/server/world/WorldServer.java @@ -349,6 +349,9 @@ public class WorldServer { exit(1); } + Logger.info("Loading SkillsBase"); + SkillsBase.LoadAllSkillsBase(); + Logger.info("Loading Starting Kits"); StartingKitTemplate._kits = StartingKitParser.parseStartingKitFile();