The 14 Magister Captain contracts' powers have no client rune or deed (Task 3.9), so they live on the MinionType mage entries instead of the DB fallback in loadAllRunePowers. canCast, mobCast and aiInfoCmd read them through MinionType.getCaptainPowers. No value change: same 56 power ids, rank 40, and all 56 DB tokens equal the powerbase token of their power id (checked on mbdb_108). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
76 lines
2.7 KiB
Java
76 lines
2.7 KiB
Java
// • ▌ ▄ ·. ▄▄▄· ▄▄ • ▪ ▄▄· ▄▄▄▄· ▄▄▄· ▐▄▄▄ ▄▄▄ .
|
|
// ·██ ▐███▪▐█ ▀█ ▐█ ▀ ▪██ ▐█ ▌▪▐█ ▀█▪▐█ ▀█ •█▌ ▐█▐▌·
|
|
// ▐█ ▌▐▌▐█·▄█▀▀█ ▄█ ▀█▄▐█·██ ▄▄▐█▀▀█▄▄█▀▀█ ▐█▐ ▐▌▐▀▀▀
|
|
// ██ ██▌▐█▌▐█ ▪▐▌▐█▄▪▐█▐█▌▐███▌██▄▪▐█▐█ ▪▐▌██▐ █▌▐█▄▄▌
|
|
// ▀▀ █▪▀▀▀ ▀ ▀ ·▀▀▀▀ ▀▀▀·▀▀▀ ·▀▀▀▀ ▀ ▀ ▀▀ █▪ ▀▀▀
|
|
// 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<Integer, ArrayList<RunePowerEntry>> loadAllRunePowers() {
|
|
|
|
HashMap<Integer, ArrayList<RunePowerEntry>> runePowers = new HashMap<>();
|
|
ArrayList<RunePowerEntry> 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;
|
|
}
|
|
|
|
}
|