// • ▌ ▄ ·. ▄▄▄· ▄▄ • ▪ ▄▄· ▄▄▄▄· ▄▄▄· ▐▄▄▄ ▄▄▄ . // ·██ ▐███▪▐█ ▀█ ▐█ ▀ ▪██ ▐█ ▌▪▐█ ▀█▪▐█ ▀█ •█▌ ▐█▐▌· // ▐█ ▌▐▌▐█·▄█▀▀█ ▄█ ▀█▄▐█·██ ▄▄▐█▀▀█▄▄█▀▀█ ▐█▐ ▐▌▐▀▀▀ // ██ ██▌▐█▌▐█ ▪▐▌▐█▄▪▐█▐█▌▐███▌██▄▪▐█▐█ ▪▐▌██▐ █▌▐█▄▄▌ // ▀▀ █▪▀▀▀ ▀ ▀ ·▀▀▀▀ ▀▀▀·▀▀▀ ·▀▀▀▀ ▀ ▀ ▀▀ █▪ ▀▀▀ // Magicbane Emulator Project © 2013 - 2026 // https://www.magicbane.com package engine.powers; import engine.parsers.objects.PowerGrant; 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; public class RunePowerEntry { public String name; public int token; public String power_type; public int rank; public RunePowerEntry(ResultSet rs) throws SQLException { this.name = rs.getString("name"); this.token = rs.getInt("token"); this.power_type = rs.getString("power_type"); this.rank = rs.getInt("rank"); } public RunePowerEntry(RuneTemplate rune, PowerGrant powerGrant) { this.name = rune.obj_name; this.token = Hasher.SBStringHash(powerGrant.power_type); this.power_type = powerGrant.power_type; this.rank = powerGrant.power_value; } public RunePowerEntry(String name, String powerType, int rank) { this.name = name; this.token = Hasher.SBStringHash(powerType); this.power_type = powerType; this.rank = rank; } // Guard captain contract powers have no rune; they live on mbEnums.MinionType public static HashMap> loadAllRunePowers() { HashMap> runePowers = new HashMap<>(); ArrayList powerList; int entryCount = 0; for (RuneTemplate rune : RuneTemplate._runes.values()) { if (rune.item_power_grant.isEmpty()) continue; powerList = new ArrayList<>(); for (PowerGrant powerGrant : rune.item_power_grant) powerList.add(new RunePowerEntry(rune, powerGrant)); runePowers.put(rune.template_id, powerList); entryCount += powerList.size(); } Logger.info("Loaded " + entryCount + " rune powers for " + runePowers.size() + " runes"); return runePowers; } }