You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
304 lines
7.9 KiB
304 lines
7.9 KiB
// • ▌ ▄ ·. ▄▄▄· ▄▄ • ▪ ▄▄· ▄▄▄▄· ▄▄▄· ▐▄▄▄ ▄▄▄ . |
|
// ·██ ▐███▪▐█ ▀█ ▐█ ▀ ▪██ ▐█ ▌▪▐█ ▀█▪▐█ ▀█ •█▌ ▐█▐▌· |
|
// ▐█ ▌▐▌▐█·▄█▀▀█ ▄█ ▀█▄▐█·██ ▄▄▐█▀▀█▄▄█▀▀█ ▐█▐ ▐▌▐▀▀▀ |
|
// ██ ██▌▐█▌▐█ ▪▐▌▐█▄▪▐█▐█▌▐███▌██▄▪▐█▐█ ▪▐▌██▐ █▌▐█▄▄▌ |
|
// ▀▀ █▪▀▀▀ ▀ ▀ ·▀▀▀▀ ▀▀▀·▀▀▀ ·▀▀▀▀ ▀ ▀ ▀▀ █▪ ▀▀▀ |
|
// Magicbane Emulator Project © 2013 - 2022 |
|
// www.magicbane.com |
|
|
|
|
|
package engine.objects; |
|
|
|
import ch.claude_martin.enumbitset.EnumBitSet; |
|
import engine.Enum; |
|
import engine.gameManager.DbManager; |
|
import engine.gameManager.LootManager; |
|
import engine.loot.BootySetEntry; |
|
import engine.server.MBServerStatics; |
|
|
|
import java.sql.ResultSet; |
|
import java.sql.SQLException; |
|
import java.util.ArrayList; |
|
import java.util.HashMap; |
|
|
|
public class MobBase extends AbstractGameObject { |
|
|
|
private final int loadID; |
|
private final String firstName; |
|
private final byte level; |
|
private final float scale; |
|
public int bootySet; |
|
public Enum.MobBehaviourType fsm; |
|
public EnumBitSet<Enum.MonsterType> notEnemy; |
|
public EnumBitSet<Enum.MonsterType> enemy; |
|
private float healthMax; |
|
private int attackRating; |
|
private int defenseRating; |
|
private float damageMin; |
|
private float damageMax; |
|
private float hitBoxRadius; |
|
private EnumBitSet<Enum.MobFlagType> flags; |
|
private int mask; |
|
private int goldMod; |
|
private int seeInvis; |
|
private int spawnTime = 0; |
|
private int defense = 0; |
|
private int atr = 0; |
|
private float minDmg = 0; |
|
private float maxDmg = 0; |
|
private float attackRange; |
|
private boolean isNecroPet = false; |
|
private MobBaseStats mobBaseStats; |
|
private float walk = 0; |
|
private float run = 0; |
|
private float walkCombat = 0; |
|
private float runCombat = 0; |
|
|
|
/** |
|
* ResultSet Constructor |
|
*/ |
|
public MobBase(ResultSet rs) throws SQLException { |
|
super(rs, rs.getInt("ID")); |
|
|
|
this.loadID = rs.getInt("loadID"); |
|
|
|
this.firstName = rs.getString("name"); |
|
this.level = rs.getByte("level"); |
|
|
|
this.goldMod = rs.getInt("goldMod"); |
|
this.spawnTime = rs.getInt("spawnTime"); |
|
|
|
this.healthMax = rs.getInt("health"); |
|
this.damageMin = rs.getFloat("minDmg"); |
|
this.damageMax = rs.getFloat("maxDmg"); |
|
|
|
this.attackRating = rs.getInt("atr"); |
|
this.defenseRating = rs.getInt("defense"); |
|
this.attackRange = rs.getFloat("attackRange"); |
|
this.bootySet = rs.getInt("bootySet"); |
|
|
|
this.fsm = Enum.MobBehaviourType.valueOf(rs.getString("fsm")); |
|
|
|
this.flags = EnumBitSet.asEnumBitSet(rs.getLong("flags"), Enum.MobFlagType.class); |
|
this.notEnemy = EnumBitSet.asEnumBitSet(rs.getLong("notEnemy"), Enum.MonsterType.class); |
|
this.enemy = EnumBitSet.asEnumBitSet(rs.getLong("enemy"), Enum.MonsterType.class); |
|
|
|
this.seeInvis = rs.getInt("seeInvis"); |
|
this.scale = rs.getFloat("scale"); |
|
this.hitBoxRadius = 5f; |
|
this.mask = 0; |
|
|
|
if (this.getObjectUUID() == 12021 || this.getObjectUUID() == 12022) |
|
this.isNecroPet = true; |
|
|
|
if (Enum.MobFlagType.HUMANOID.elementOf(this.flags)) |
|
this.mask += MBServerStatics.MASK_HUMANOID; |
|
|
|
if (Enum.MobFlagType.UNDEAD.elementOf(this.flags)) |
|
this.mask += MBServerStatics.MASK_UNDEAD; |
|
|
|
if (Enum.MobFlagType.BEAST.elementOf(this.flags)) |
|
this.mask += MBServerStatics.MASK_BEAST; |
|
|
|
if (Enum.MobFlagType.DRAGON.elementOf(this.flags)) |
|
this.mask += MBServerStatics.MASK_DRAGON; |
|
|
|
if (Enum.MobFlagType.RAT.elementOf(this.flags)) |
|
this.mask += MBServerStatics.MASK_RAT; |
|
|
|
this.mobBaseStats = DbManager.MobBaseQueries.LOAD_STATS(this.loadID); |
|
DbManager.MobBaseQueries.LOAD_ALL_MOBBASE_SPEEDS(this); |
|
|
|
} |
|
|
|
public static HashMap<Integer, MobEquipment> loadEquipmentSet(int equipmentSetID) { |
|
|
|
ArrayList<BootySetEntry> equipList; |
|
HashMap<Integer, MobEquipment> equip = new HashMap<>(); |
|
|
|
if (equipmentSetID == 0) |
|
return equip; |
|
|
|
equipList = LootManager._bootySetMap.get(equipmentSetID); |
|
|
|
if (equipList == null) |
|
return equip; |
|
|
|
for (BootySetEntry equipmentSetEntry : equipList) { |
|
|
|
MobEquipment mobEquipment = new MobEquipment(equipmentSetEntry.itemBase, equipmentSetEntry.dropChance); |
|
ItemBase itemBase = mobEquipment.getItemBase(); |
|
|
|
if (itemBase != null) { |
|
if (itemBase.getType().equals(Enum.ItemType.WEAPON)) |
|
if (mobEquipment.getSlot() == 1 && itemBase.getEquipFlag() == 2) |
|
mobEquipment.setSlot(2); |
|
|
|
equip.put(mobEquipment.getSlot(), mobEquipment); |
|
} |
|
} |
|
|
|
return equip; |
|
} |
|
|
|
public static MobBase getMobBase(int id) { |
|
return DbManager.MobBaseQueries.GET_MOBBASE(id); |
|
} |
|
|
|
public static int GetClassType(int mobbaseID) { |
|
|
|
switch (mobbaseID) { |
|
case 17235: |
|
case 17233: |
|
case 17256: |
|
case 17259: |
|
case 17260: |
|
case 17261: |
|
return 2518; |
|
case 17258: |
|
case 17257: |
|
case 17237: |
|
case 17234: |
|
return 2521; |
|
default: |
|
return 2518; |
|
} |
|
} |
|
|
|
public void updateSpeeds(float walk, float walkCombat, float run, float runCombat) { |
|
this.walk = walk; |
|
this.walkCombat = walkCombat; |
|
this.run = run; |
|
this.runCombat = runCombat; |
|
|
|
} |
|
|
|
/* |
|
* Getters |
|
*/ |
|
public String getFirstName() { |
|
return this.firstName; |
|
} |
|
|
|
public int getLoadID() { |
|
return this.loadID; |
|
} |
|
|
|
public int getLevel() { |
|
return this.level; |
|
} |
|
|
|
public float getHealthMax() { |
|
return this.healthMax; |
|
} |
|
|
|
public float getDamageMin() { |
|
return this.damageMin; |
|
} |
|
|
|
public float getDamageMax() { |
|
return this.damageMax; |
|
} |
|
|
|
public int getAttackRating() { |
|
return this.attackRating; |
|
} |
|
|
|
public int getDefenseRating() { |
|
return this.defenseRating; |
|
} |
|
|
|
public EnumBitSet<Enum.MobFlagType> getFlags() { |
|
return this.flags; |
|
} |
|
|
|
public float getScale() { |
|
return this.scale; |
|
} |
|
|
|
public int getTypeMasks() { |
|
return this.mask; |
|
} |
|
|
|
public int getSeeInvis() { |
|
return this.seeInvis; |
|
} |
|
|
|
public int getSpawnTime() { |
|
return this.spawnTime; |
|
} |
|
|
|
@Override |
|
public void updateDatabase() { |
|
// TODO Create update logic. |
|
} |
|
|
|
public float getHitBoxRadius() { |
|
if (this.hitBoxRadius < 0f) { |
|
return 0f; |
|
} else { |
|
return this.hitBoxRadius; |
|
} |
|
} |
|
|
|
public MobBaseStats getMobBaseStats() { |
|
return mobBaseStats; |
|
} |
|
|
|
public float getMaxDmg() { |
|
return maxDmg; |
|
} |
|
|
|
public float getMinDmg() { |
|
return minDmg; |
|
} |
|
|
|
public int getAtr() { |
|
return atr; |
|
} |
|
|
|
public void setAtr(int atr) { |
|
this.atr = atr; |
|
} |
|
|
|
public int getDefense() { |
|
return defense; |
|
} |
|
|
|
public void setDefense(int defense) { |
|
this.defense = defense; |
|
} |
|
|
|
public float getAttackRange() { |
|
return attackRange; |
|
} |
|
|
|
public boolean isNecroPet() { |
|
return isNecroPet; |
|
} |
|
|
|
public float getWalk() { |
|
return walk; |
|
} |
|
|
|
public void setWalk(float walk) { |
|
this.walk = walk; |
|
} |
|
|
|
public float getRun() { |
|
return run; |
|
} |
|
|
|
public void setRun(float run) { |
|
this.run = run; |
|
} |
|
|
|
public float getWalkCombat() { |
|
return walkCombat; |
|
} |
|
|
|
public float getRunCombat() { |
|
return runCombat; |
|
} |
|
|
|
}
|
|
|