Build power requirements from rune item_power_grant
PowerReq lists now come from the rune JSON on world and login: level from power_value, skill and power prereqs from power_granted_skills/powers. The DB table is no longer read. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
24e91cc0a9
commit
9e50d0a5ad
3 files changed
+53
-1
No files matched your search
@@ -11,8 +11,11 @@ package engine.objects;
|
||||
|
||||
import engine.gameManager.DbManager;
|
||||
import engine.gameManager.PowersManager;
|
||||
import engine.parsers.objects.PowerGrant;
|
||||
import engine.parsers.objects.RuneTemplate;
|
||||
import engine.powers.PowersBase;
|
||||
import engine.server.MBServerStatics;
|
||||
import engine.util.Hasher;
|
||||
import org.pmw.tinylog.Logger;
|
||||
|
||||
import java.sql.Connection;
|
||||
@@ -21,6 +24,7 @@ import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
|
||||
@@ -32,7 +36,7 @@ public class PowerReq extends AbstractGameObject implements Comparable<PowerReq>
|
||||
private short level;
|
||||
private ConcurrentHashMap<Integer, Byte> powerReqs;
|
||||
private ConcurrentHashMap<Integer, Byte> skillReqs;
|
||||
private static ConcurrentHashMap<Integer, ArrayList<PowerReq>> runePowers = fillRunePowers();
|
||||
private static ConcurrentHashMap<Integer, ArrayList<PowerReq>> runePowers = new ConcurrentHashMap<>(MBServerStatics.CHM_INIT_CAP, MBServerStatics.CHM_LOAD, MBServerStatics.CHM_THREAD_LOW);
|
||||
|
||||
/**
|
||||
* No Table ID Constructor
|
||||
@@ -64,6 +68,21 @@ public class PowerReq extends AbstractGameObject implements Comparable<PowerReq>
|
||||
this.token = 0;
|
||||
}
|
||||
|
||||
public PowerReq(PowerGrant powerGrant) {
|
||||
super();
|
||||
this.token = Hasher.SBStringHash(powerGrant.power_type);
|
||||
this.powersBase = PowersManager.getPowerByToken(this.token);
|
||||
this.level = (short) powerGrant.power_value;
|
||||
this.powerReqs = new ConcurrentHashMap<>(MBServerStatics.CHM_INIT_CAP, MBServerStatics.CHM_LOAD, MBServerStatics.CHM_THREAD_LOW);
|
||||
this.skillReqs = new ConcurrentHashMap<>(MBServerStatics.CHM_INIT_CAP, MBServerStatics.CHM_LOAD, MBServerStatics.CHM_THREAD_LOW);
|
||||
|
||||
for (Map.Entry<String, Integer> entry : powerGrant.power_granted_powers.entrySet())
|
||||
this.powerReqs.put(Hasher.SBStringHash(entry.getKey()), entry.getValue().byteValue());
|
||||
|
||||
for (Map.Entry<String, Integer> entry : powerGrant.power_granted_skills.entrySet())
|
||||
this.skillReqs.put(Hasher.SBStringHash(entry.getKey()), entry.getValue().byteValue());
|
||||
}
|
||||
|
||||
/**
|
||||
* ResultSet Constructor
|
||||
*/
|
||||
@@ -89,6 +108,33 @@ public class PowerReq extends AbstractGameObject implements Comparable<PowerReq>
|
||||
return new ArrayList<>();
|
||||
}
|
||||
|
||||
// item_power_grant power_value is the level the power unlocks at
|
||||
public static void loadRunePowers() {
|
||||
|
||||
ArrayList<PowerReq> runePR;
|
||||
int entryCount = 0;
|
||||
|
||||
PowerReq.runePowers = new ConcurrentHashMap<>(MBServerStatics.CHM_INIT_CAP, MBServerStatics.CHM_LOAD, MBServerStatics.CHM_THREAD_LOW);
|
||||
|
||||
for (RuneTemplate rune : RuneTemplate._runes.values()) {
|
||||
|
||||
if (rune.item_power_grant.isEmpty())
|
||||
continue;
|
||||
|
||||
runePR = new ArrayList<>();
|
||||
|
||||
for (PowerGrant powerGrant : rune.item_power_grant)
|
||||
runePR.add(new PowerReq(powerGrant));
|
||||
|
||||
//order the list by level so prerequisites are met
|
||||
Collections.sort(runePR);
|
||||
PowerReq.runePowers.put(rune.template_id, runePR);
|
||||
entryCount += runePR.size();
|
||||
}
|
||||
|
||||
Logger.info("Loaded " + entryCount + " power requirements for " + PowerReq.runePowers.size() + " runes");
|
||||
}
|
||||
|
||||
public static ConcurrentHashMap<Integer, ArrayList<PowerReq>> fillRunePowers() {
|
||||
|
||||
PowerReq.runePowers = new ConcurrentHashMap<>(MBServerStatics.CHM_INIT_CAP, MBServerStatics.CHM_LOAD, MBServerStatics.CHM_THREAD_LOW);
|
||||
|
||||
@@ -384,6 +384,9 @@ public class LoginServer {
|
||||
Logger.info("Initializing PowersManager.");
|
||||
PowersManager.initPowersManager(false);
|
||||
|
||||
Logger.info("Loading Rune Power Requirements");
|
||||
PowerReq.loadRunePowers();
|
||||
|
||||
RuneBase.LoadAllRuneBases();
|
||||
BaseClass.LoadAllBaseClasses();
|
||||
PromotionClass.LoadAllPromotions();
|
||||
|
||||
@@ -430,6 +430,9 @@ public class WorldServer {
|
||||
Logger.info("Indexing Cache Templates");
|
||||
CObjectIndex.build();
|
||||
|
||||
Logger.info("Loading Rune Power Requirements");
|
||||
PowerReq.loadRunePowers();
|
||||
|
||||
Logger.info("Loading PromotionClasses");
|
||||
PromotionClass.LoadAllPromotions();
|
||||
|
||||
|
||||
Reference in new issue
Block a user