Browse Source

Mobs have runes loaded at bootstrap and effects applied. Moved logic to NPCManager.

master
MagicBot 2 years ago
parent
commit
6b2790f9c1
  1. 164
      src/engine/gameManager/NPCManager.java
  2. 32
      src/engine/objects/AbstractCharacter.java
  3. 2
      src/engine/objects/AbstractWorldObject.java
  4. 250
      src/engine/objects/Mob.java

164
src/engine/gameManager/NPCManager.java

@ -1,7 +1,8 @@
package engine.gameManager; package engine.gameManager;
import engine.objects.BootySetEntry; import engine.objects.*;
import engine.objects.EquipmentSetEntry; import engine.powers.EffectsBase;
import org.pmw.tinylog.Logger;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
@ -26,4 +27,163 @@ public enum NPCManager {
public static void LoadAllBootySets() { public static void LoadAllBootySets() {
_bootySetMap = DbManager.ItemBaseQueries.LOAD_BOOTY_FOR_MOBS(); _bootySetMap = DbManager.ItemBaseQueries.LOAD_BOOTY_FOR_MOBS();
} }
public static void initializeStaticEffects(Mob mob) {
EffectsBase eb = null;
for (MobBaseEffects mbe : mob.mobBase.getRaceEffectsList()) {
eb = PowersManager.getEffectByToken(mbe.getToken());
if (eb == null) {
Logger.info("EffectsBase Null for Token " + mbe.getToken());
continue;
}
//check to upgrade effects if needed.
if (mob.effects.containsKey(Integer.toString(eb.getUUID()))) {
if (mbe.getReqLvl() > (int) mob.level)
continue;
Effect eff = mob.effects.get(Integer.toString(eb.getUUID()));
if (eff == null)
continue;
if (eff.getTrains() > mbe.getRank())
continue;
//new effect is of a higher rank. remove old effect and apply new one.
eff.cancelJob();
mob.addEffectNoTimer(Integer.toString(eb.getUUID()), eb, mbe.getRank(), true);
} else {
if (mbe.getReqLvl() > (int) mob.level)
continue;
mob.addEffectNoTimer(Integer.toString(eb.getUUID()), eb, mbe.getRank(), true);
}
}
//Apply all rune effects.
// Only Captains have contracts
if (mob.contract != null || mob.isPlayerGuard) {
RuneBase guardRune = RuneBase.getRuneBase(252621);
for (MobBaseEffects mbe : guardRune.getEffectsList()) {
eb = PowersManager.getEffectByToken(mbe.getToken());
if (eb == null) {
Logger.info("Mob: " + mob.getObjectUUID() + " EffectsBase Null for Token " + mbe.getToken());
continue;
}
//check to upgrade effects if needed.
if (mob.effects.containsKey(Integer.toString(eb.getUUID()))) {
if (mbe.getReqLvl() > (int) mob.level)
continue;
Effect eff = mob.effects.get(Integer.toString(eb.getUUID()));
if (eff == null)
continue;
//Current effect is a higher rank, dont apply.
if (eff.getTrains() > mbe.getRank())
continue;
//new effect is of a higher rank. remove old effect and apply new one.
eff.cancelJob();
mob.addEffectNoTimer(Integer.toString(eb.getUUID()), eb, mbe.getRank(), true);
} else {
if (mbe.getReqLvl() > (int) mob.level)
continue;
mob.addEffectNoTimer(Integer.toString(eb.getUUID()), eb, mbe.getRank(), true);
}
}
RuneBase WarriorRune = RuneBase.getRuneBase(2518);
for (MobBaseEffects mbe : WarriorRune.getEffectsList()) {
eb = PowersManager.getEffectByToken(mbe.getToken());
if (eb == null) {
Logger.info("EffectsBase Null for Token " + mbe.getToken());
continue;
}
//check to upgrade effects if needed.
if (mob.effects.containsKey(Integer.toString(eb.getUUID()))) {
if (mbe.getReqLvl() > (int) mob.level)
continue;
Effect eff = mob.effects.get(Integer.toString(eb.getUUID()));
if (eff == null)
continue;
//Current effect is a higher rank, dont apply.
if (eff.getTrains() > mbe.getRank())
continue;
//new effect is of a higher rank. remove old effect and apply new one.
eff.cancelJob();
mob.addEffectNoTimer(Integer.toString(eb.getUUID()), eb, mbe.getRank(), true);
} else {
if (mbe.getReqLvl() > (int) mob.level)
continue;
mob.addEffectNoTimer(Integer.toString(eb.getUUID()), eb, mbe.getRank(), true);
}
}
}
// Apply effects from RuneSet
if (mob.runeSetID != 0)
for (int runeID : _runeSetMap.get(mob.runeSetID)) {
RuneBase rune = RuneBase.getRuneBase(runeID);
if (rune != null)
for (MobBaseEffects mbe : rune.getEffectsList()) {
eb = PowersManager.getEffectByToken(mbe.getToken());
if (eb == null) {
Logger.info("EffectsBase Null for Token " + mbe.getToken());
continue;
}
//check to upgrade effects if needed.
if (mob.effects.containsKey(Integer.toString(eb.getUUID()))) {
if (mbe.getReqLvl() > (int) mob.level)
continue;
Effect eff = mob.effects.get(Integer.toString(eb.getUUID()));
if (eff == null)
continue;
//Current effect is a higher rank, dont apply.
if (eff.getTrains() > mbe.getRank())
continue;
//new effect is of a higher rank. remove old effect and apply new one.
eff.cancelJob();
mob.addEffectNoTimer(Integer.toString(eb.getUUID()), eb, mbe.getRank(), true);
} else {
if (mbe.getReqLvl() > (int) mob.level)
continue;
mob.addEffectNoTimer(Integer.toString(eb.getUUID()), eb, mbe.getRank(), true);
}
}
}
}
} }

32
src/engine/objects/AbstractCharacter.java

@ -51,7 +51,7 @@ public abstract class AbstractCharacter extends AbstractWorldObject {
protected short statIntCurrent; protected short statIntCurrent;
protected short statSpiCurrent; protected short statSpiCurrent;
protected short unusedStatPoints; protected short unusedStatPoints;
protected short level; public short level;
protected int exp; protected int exp;
protected Vector3fImmutable bindLoc; protected Vector3fImmutable bindLoc;
protected Vector3fImmutable faceDir; protected Vector3fImmutable faceDir;
@ -496,26 +496,6 @@ public abstract class AbstractCharacter extends AbstractWorldObject {
return this.statSpiCurrent; return this.statSpiCurrent;
} }
public final void setStatStrCurrent(final short value) {
this.statStrCurrent = (value < 1) ? (short) 1 : value;
}
public final void setStatDexCurrent(final short value) {
this.statDexCurrent = (value < 1) ? (short) 1 : value;
}
public final void setStatConCurrent(final short value) {
this.statConCurrent = (value < 1) ? (short) 1 : value;
}
public final void setStatIntCurrent(final short value) {
this.statIntCurrent = (value < 1) ? (short) 1 : value;
}
public final void setStatSpiCurrent(final short value) {
this.statSpiCurrent = (value < 1) ? (short) 1 : value;
}
public short getLevel() { public short getLevel() {
return this.level; return this.level;
} }
@ -1917,16 +1897,6 @@ public abstract class AbstractCharacter extends AbstractWorldObject {
this.itemCasting = itemCasting; this.itemCasting = itemCasting;
} }
public static void MoveInsideBuilding(PlayerCharacter source, AbstractCharacter ac){
MoveToPointMsg moveMsg = new MoveToPointMsg();
moveMsg.setPlayer(ac);
moveMsg.setTarget(ac, BuildingManager.getBuildingFromCache(ac.inBuildingID));
Dispatch dispatch = Dispatch.borrow(source, moveMsg);
DispatchMessage.dispatchMsgDispatch(dispatch, DispatchChannel.PRIMARY);
}
//updates //updates
public void update(){ public void update(){
} }

2
src/engine/objects/AbstractWorldObject.java

@ -50,7 +50,7 @@ public abstract class AbstractWorldObject extends AbstractGameObject {
protected AtomicFloat health = new AtomicFloat(); protected AtomicFloat health = new AtomicFloat();
public float healthMax; public float healthMax;
protected boolean load = true; protected boolean load = true;
protected ConcurrentHashMap<String, Effect> effects = new ConcurrentHashMap<>(MBServerStatics.CHM_INIT_CAP, MBServerStatics.CHM_LOAD, MBServerStatics.CHM_THREAD_LOW); public ConcurrentHashMap<String, Effect> effects = new ConcurrentHashMap<>(MBServerStatics.CHM_INIT_CAP, MBServerStatics.CHM_LOAD, MBServerStatics.CHM_THREAD_LOW);
private int objectTypeMask = 0; private int objectTypeMask = 0;
private Bounds bounds; private Bounds bounds;

250
src/engine/objects/Mob.java

@ -34,7 +34,6 @@ import engine.net.client.msg.PlaceAssetMsg;
import engine.net.client.msg.chat.ChatSystemMsg; import engine.net.client.msg.chat.ChatSystemMsg;
import engine.powers.EffectsBase; import engine.powers.EffectsBase;
import engine.server.MBServerStatics; import engine.server.MBServerStatics;
import engine.server.world.WorldServer;
import org.joda.time.DateTime; import org.joda.time.DateTime;
import org.pmw.tinylog.Logger; import org.pmw.tinylog.Logger;
@ -69,7 +68,7 @@ public class Mob extends AbstractIntelligenceAgent {
protected int dbID; //the database ID protected int dbID; //the database ID
protected int loadID; protected int loadID;
protected boolean isMob; protected boolean isMob;
protected MobBase mobBase; public MobBase mobBase;
protected float spawnRadius; protected float spawnRadius;
protected int spawnTime; protected int spawnTime;
//used by static mobs //used by static mobs
@ -79,14 +78,14 @@ public class Mob extends AbstractIntelligenceAgent {
protected float statLon; protected float statLon;
protected float statAlt; protected float statAlt;
protected Building building; protected Building building;
protected Contract contract; public Contract contract;
private int currentID; private int currentID;
private int ownerUID = 0; //only used by pets private int ownerUID = 0; //only used by pets
private boolean hasLoot = false; private boolean hasLoot = false;
private AbstractWorldObject fearedObject = null; private AbstractWorldObject fearedObject = null;
private int buildingID; private int buildingID;
private boolean isSiege = false; private boolean isSiege = false;
private boolean isPlayerGuard = false; public boolean isPlayerGuard = false;
private long timeToSpawnSiege; private long timeToSpawnSiege;
private AbstractCharacter npcOwner; private AbstractCharacter npcOwner;
private Vector3fImmutable inBuildingLoc = null; private Vector3fImmutable inBuildingLoc = null;
@ -112,7 +111,6 @@ public class Mob extends AbstractIntelligenceAgent {
public int bootySetID = 0; public int bootySetID = 0;
private int lootSet = 0; private int lootSet = 0;
private boolean isGuard; private boolean isGuard;
private ArrayList<Integer> fidelityRunes = null;
/** /**
* No Id Constructor * No Id Constructor
@ -311,21 +309,6 @@ public class Mob extends AbstractIntelligenceAgent {
if (this.fidalityID != 0) if (this.fidalityID != 0)
this.nameOverride = rs.getString("mob_name"); this.nameOverride = rs.getString("mob_name");
if (this.fidalityID != 0) {
Zone parentZone = ZoneManager.getZoneByUUID(this.parentZoneID);
if (parentZone != null) {
this.fidelityRunes = WorldServer.ZoneFidelityMobRunes.get(parentZone.getLoadNum()).get(this.fidalityID);
if (this.fidelityRunes != null)
for (Integer runeID : this.fidelityRunes) {
if (runeID == 252623) {
this.isGuard = true;
this.noAggro = true;
}
}
}
}
} catch (Exception e) { } catch (Exception e) {
Logger.error(currentID + ""); Logger.error(currentID + "");
} }
@ -600,8 +583,8 @@ public class Mob extends AbstractIntelligenceAgent {
int level = mob.getLevel(); int level = mob.getLevel();
level = (level < 0) ? 0 : level; level = Math.max(level, 0);
level = (level > 50) ? 50 : level; level = Math.min(level, 50);
double minGold; double minGold;
double maxGold; double maxGold;
@ -726,30 +709,6 @@ public class Mob extends AbstractIntelligenceAgent {
return skill.getModifiedAmount(); return skill.getModifiedAmount();
} }
public static int getBuildingSlot(Mob mob) {
int slot = -1;
if (mob.building == null)
return -1;
BuildingModelBase buildingModel = BuildingModelBase.getModelBase(mob.building.getMeshUUID());
if (buildingModel == null)
return -1;
if (mob.building.getHirelings().containsKey(mob))
slot = (mob.building.getHirelings().get(mob));
if (buildingModel.getNPCLocation(slot) == null)
return -1;
return slot;
}
public static void HandleAssistedAggro(PlayerCharacter source, PlayerCharacter target) { public static void HandleAssistedAggro(PlayerCharacter source, PlayerCharacter target) {
HashSet<AbstractWorldObject> mobsInRange = WorldGrid.getObjectsInRangePartial(source, MBServerStatics.AI_DROP_AGGRO_RANGE, MBServerStatics.MASK_MOB); HashSet<AbstractWorldObject> mobsInRange = WorldGrid.getObjectsInRangePartial(source, MBServerStatics.AI_DROP_AGGRO_RANGE, MBServerStatics.MASK_MOB);
@ -984,199 +943,6 @@ public class Mob extends AbstractIntelligenceAgent {
} }
} }
private void initializeStaticEffects() {
EffectsBase eb = null;
for (MobBaseEffects mbe : this.mobBase.getRaceEffectsList()) {
eb = PowersManager.getEffectByToken(mbe.getToken());
if (eb == null) {
Logger.info("EffectsBase Null for Token " + mbe.getToken());
continue;
}
//check to upgrade effects if needed.
if (this.effects.containsKey(Integer.toString(eb.getUUID()))) {
if (mbe.getReqLvl() > (int) this.level)
continue;
Effect eff = this.effects.get(Integer.toString(eb.getUUID()));
if (eff == null)
continue;
if (eff.getTrains() > mbe.getRank())
continue;
//new effect is of a higher rank. remove old effect and apply new one.
eff.cancelJob();
this.addEffectNoTimer(Integer.toString(eb.getUUID()), eb, mbe.getRank(), true);
} else {
if (mbe.getReqLvl() > (int) this.level)
continue;
this.addEffectNoTimer(Integer.toString(eb.getUUID()), eb, mbe.getRank(), true);
}
}
//Apply all rune effects.
// Only Captains have contracts
if (contract != null || this.isPlayerGuard) {
RuneBase guardRune = RuneBase.getRuneBase(252621);
for (MobBaseEffects mbe : guardRune.getEffectsList()) {
eb = PowersManager.getEffectByToken(mbe.getToken());
if (eb == null) {
Logger.info("EffectsBase Null for Token " + mbe.getToken());
continue;
}
//check to upgrade effects if needed.
if (this.effects.containsKey(Integer.toString(eb.getUUID()))) {
if (mbe.getReqLvl() > (int) this.level)
continue;
Effect eff = this.effects.get(Integer.toString(eb.getUUID()));
if (eff == null)
continue;
//Current effect is a higher rank, dont apply.
if (eff.getTrains() > mbe.getRank())
continue;
//new effect is of a higher rank. remove old effect and apply new one.
eff.cancelJob();
this.addEffectNoTimer(Integer.toString(eb.getUUID()), eb, mbe.getRank(), true);
} else {
if (mbe.getReqLvl() > (int) this.level)
continue;
this.addEffectNoTimer(Integer.toString(eb.getUUID()), eb, mbe.getRank(), true);
}
}
RuneBase WarriorRune = RuneBase.getRuneBase(2518);
for (MobBaseEffects mbe : WarriorRune.getEffectsList()) {
eb = PowersManager.getEffectByToken(mbe.getToken());
if (eb == null) {
Logger.info("EffectsBase Null for Token " + mbe.getToken());
continue;
}
//check to upgrade effects if needed.
if (this.effects.containsKey(Integer.toString(eb.getUUID()))) {
if (mbe.getReqLvl() > (int) this.level)
continue;
Effect eff = this.effects.get(Integer.toString(eb.getUUID()));
if (eff == null)
continue;
//Current effect is a higher rank, dont apply.
if (eff.getTrains() > mbe.getRank())
continue;
//new effect is of a higher rank. remove old effect and apply new one.
eff.cancelJob();
this.addEffectNoTimer(Integer.toString(eb.getUUID()), eb, mbe.getRank(), true);
} else {
if (mbe.getReqLvl() > (int) this.level)
continue;
this.addEffectNoTimer(Integer.toString(eb.getUUID()), eb, mbe.getRank(), true);
}
}
}
if (this.fidelityRunes != null) {
for (int fidelityRune : this.fidelityRunes) {
RuneBase rune = RuneBase.getRuneBase(fidelityRune);
if (rune != null)
for (MobBaseEffects mbe : rune.getEffectsList()) {
eb = PowersManager.getEffectByToken(mbe.getToken());
if (eb == null) {
Logger.info("EffectsBase Null for Token " + mbe.getToken());
continue;
}
//check to upgrade effects if needed.
if (this.effects.containsKey(Integer.toString(eb.getUUID()))) {
if (mbe.getReqLvl() > (int) this.level)
continue;
Effect eff = this.effects.get(Integer.toString(eb.getUUID()));
if (eff == null)
continue;
//Current effect is a higher rank, dont apply.
if (eff.getTrains() > mbe.getRank())
continue;
//new effect is of a higher rank. remove old effect and apply new one.
eff.cancelJob();
this.addEffectNoTimer(Integer.toString(eb.getUUID()), eb, mbe.getRank(), true);
} else {
if (mbe.getReqLvl() > (int) this.level)
continue;
this.addEffectNoTimer(Integer.toString(eb.getUUID()), eb, mbe.getRank(), true);
}
}
}
} else
for (RuneBase rune : this.mobBase.getRunes()) {
for (MobBaseEffects mbe : rune.getEffectsList()) {
eb = PowersManager.getEffectByToken(mbe.getToken());
if (eb == null) {
Logger.info("EffectsBase Null for Token " + mbe.getToken());
continue;
}
//check to upgrade effects if needed.
if (this.effects.containsKey(Integer.toString(eb.getUUID()))) {
if (mbe.getReqLvl() > (int) this.level)
continue;
Effect eff = this.effects.get(Integer.toString(eb.getUUID()));
if (eff == null)
continue;
//Current effect is a higher rank, dont apply.
if (eff.getTrains() > mbe.getRank())
continue;
//new effect is of a higher rank. remove old effect and apply new one.
eff.cancelJob();
this.addEffectNoTimer(Integer.toString(eb.getUUID()), eb, mbe.getRank(), true);
} else {
if (mbe.getReqLvl() > (int) this.level)
continue;
this.addEffectNoTimer(Integer.toString(eb.getUUID()), eb, mbe.getRank(), true);
}
}
}
}
/* /*
* Getters * Getters
@ -1638,7 +1404,7 @@ public class Mob extends AbstractIntelligenceAgent {
this.bindLoc = this.lastBindLoc; this.bindLoc = this.lastBindLoc;
this.setLoc(this.lastBindLoc); this.setLoc(this.lastBindLoc);
this.stopMovement(this.lastBindLoc); this.stopMovement(this.lastBindLoc);
this.initializeStaticEffects(); NPCManager.initializeStaticEffects(this);
this.recalculateStats(); this.recalculateStats();
this.setHealth(this.healthMax); this.setHealth(this.healthMax);
@ -1646,8 +1412,6 @@ public class Mob extends AbstractIntelligenceAgent {
if (!this.isSiege && !this.isPlayerGuard && contract == null) if (!this.isSiege && !this.isPlayerGuard && contract == null)
loadInventory(); loadInventory();
// LoadJob.getInstance();
// LoadJob.forceLoad(this);
} }
public void despawn() { public void despawn() {
@ -2341,7 +2105,7 @@ public class Mob extends AbstractIntelligenceAgent {
} }
try { try {
this.initializeStaticEffects(); NPCManager.initializeStaticEffects(this);
try { try {
this.initializeSkills(); this.initializeSkills();

Loading…
Cancel
Save