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

+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);