Key MobBase on its ID and stop reading loadID

Every static_npc_mobbase row has ID = loadID since 3.6 dropped the
server-made rows, so the race rune and rune effects are looked up by ID and
the loaders no longer filter on loadID. No value change (dev: 2375 of 2375
rows have ID = loadID). Mob.loadID and NPC.loadID are unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
MagicBotandClaude Opus 5.5 committed 2026-10-24 09:37:16 -04:00
1 parent 7027000ba1
commit 236bddc93b
5 files changed
+10 -18

No files matched your search

+2 -4
View File
@@ -39,7 +39,7 @@ public class dbMobBaseHandler extends dbHandlerBase {
return mobBase;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM `static_npc_mobbase` WHERE `ID`=? AND `ID` = `loadID`")) {
PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM `static_npc_mobbase` WHERE `ID`=?")) {
preparedStatement.setInt(1, id);
@@ -58,10 +58,8 @@ public class dbMobBaseHandler extends dbHandlerBase {
ArrayList<MobBase> mobbaseList = new ArrayList<>();
// ID <> loadID rows were junk server-made mobbases (15000-17266); skip them on databases that still have them.
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM `static_npc_mobbase` WHERE `ID` = `loadID`;")) {
PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM `static_npc_mobbase`;")) {
ResultSet rs = preparedStatement.executeQuery();
mobbaseList = getObjectsFromRs(rs, 1000);
+1 -1
View File
@@ -470,7 +470,7 @@ public class MobAI {
//trebuchet spawn handler
if (mob.despawned && mob.getMobBase().getLoadID() == 13171) {
if (mob.despawned && mob.getMobBase().getObjectUUID() == 13171) {
checkForRespawn(mob);
return;
}
+3 -3
View File
@@ -164,7 +164,7 @@ public class Mob extends AbstractIntelligenceAgent implements Delayed {
writer.putInt(0);
writer.putInt(0);
int tid = (mob.mobBase != null) ? mob.mobBase.getLoadID() : 0;
int tid = (mob.mobBase != null) ? mob.mobBase.getObjectUUID() : 0;
if (mob.isPet()) {
writer.putInt(2);
writer.putInt(3);
@@ -191,7 +191,7 @@ public class Mob extends AbstractIntelligenceAgent implements Delayed {
writer.putInt(0);
if (mob.mobBase != null)
writer.putInt(mob.mobBase.getLoadID());
writer.putInt(mob.mobBase.getObjectUUID());
else
writer.putInt(mob.loadID);
@@ -768,7 +768,7 @@ public class Mob extends AbstractIntelligenceAgent implements Delayed {
bonus *= (1 + this.bonuses.getFloatPercentAll(ModType.Speed, SourceType.None));
if (this.isPlayerGuard())
switch (this.mobBase.getLoadID()) {
switch (this.mobBase.getObjectUUID()) {
case 2111:
if (this.isWalk())
if (this.isCombat())
+3 -9
View File
@@ -27,7 +27,6 @@ import java.util.concurrent.ConcurrentHashMap;
public class MobBase extends AbstractGameObject {
private final int loadID;
private final String firstName;
private final byte level;
private final float scale;
@@ -65,8 +64,7 @@ public class MobBase extends AbstractGameObject {
RuneTemplate rune = null;
String fsmName;
this.loadID = rs.getInt("loadID");
rune = RuneTemplate._runes.get(this.loadID);
rune = RuneTemplate._runes.get(this.getObjectUUID());
if (rune != null) {
this.firstName = rune.obj_name;
@@ -87,7 +85,7 @@ public class MobBase extends AbstractGameObject {
this.run = rune.rune_speed.getOrDefault(mbEnums.MovementType.RUN, 0f);
this.runCombat = rune.rune_speed.getOrDefault(mbEnums.MovementType.COMBATRUN, 0f);
} else {
Logger.error("Mobbase " + this.getObjectUUID() + " has no race rune " + this.loadID);
Logger.error("Mobbase " + this.getObjectUUID() + " has no race rune");
this.firstName = "";
this.level = 0;
this.fsm = mbEnums.MobBehaviourType.None;
@@ -126,7 +124,7 @@ public class MobBase extends AbstractGameObject {
this.mask += MBServerStatics.MASK_RAT;
this.mobBaseStats = (rune != null) ? new MobBaseStats(rune) : MobBaseStats.GetGenericStats();
this.effectsList = MobBaseEffects.getEffectsForRune(this.loadID);
this.effectsList = MobBaseEffects.getEffectsForRune(this.getObjectUUID());
}
@@ -171,10 +169,6 @@ public class MobBase extends AbstractGameObject {
return this.firstName;
}
public int getLoadID() {
return this.loadID;
}
public int getLevel() {
return this.level;
}
+1 -1
View File
@@ -236,7 +236,7 @@ public class NPC extends AbstractCharacter {
writer.putInt(0);
if (npc.mobBase != null)
writer.putInt(npc.mobBase.getLoadID());
writer.putInt(npc.mobBase.getObjectUUID());
else
writer.putInt(2011);