Start mobequip refactor

This commit is contained in:
2024-03-18 09:38:33 -04:00
parent 7fa8c3bfff
commit 0590ae64e7
20 changed files with 79 additions and 435 deletions
+35 -45
View File
@@ -74,7 +74,6 @@ public class Mob extends AbstractIntelligenceAgent implements Delayed {
private int currentID;
private long lastAttackTime = 0;
private int lastMobPowerToken = 0;
public HashMap<Enum.EquipSlotType, MobEquipment> equip = null;
private DeferredPowerJob weaponPower;
private DateTime upgradeDateTime = null;
private boolean lootSync = false;
@@ -257,12 +256,12 @@ public class Mob extends AbstractIntelligenceAgent implements Delayed {
// get a copy of the equipped items.
if (mob.equip != null) {
if (!mob.charItemManager.equipped.isEmpty()) {
writer.putInt(mob.equip.size());
writer.putInt(mob.charItemManager.equipped.size());
for (MobEquipment me : mob.equip.values())
MobEquipment.serializeForClientMsg(me, writer);
for (Item me : mob.charItemManager.equipped.values())
Item._serializeForClientMsg(me, writer);
} else
writer.putInt(0);
@@ -934,7 +933,7 @@ public class Mob extends AbstractIntelligenceAgent implements Delayed {
playerAgroMap.clear();
if (!this.isPlayerGuard() && this.equip != null)
if (!this.isPlayerGuard() && this.charItemManager.equipped != null)
LootManager.GenerateEquipmentDrop(this);
}
@@ -1122,7 +1121,7 @@ public class Mob extends AbstractIntelligenceAgent implements Delayed {
public void calculateAtrDefenseDamage() {
if (this.charItemManager == null || this.equip == null) {
if (this.charItemManager == null || this.charItemManager.equipped == null) {
Logger.error("Player " + currentID + " missing skills or equipment");
defaultAtrAndDamage(true);
defaultAtrAndDamage(false);
@@ -1141,16 +1140,16 @@ public class Mob extends AbstractIntelligenceAgent implements Delayed {
this.rangeHandTwo = 6.5f;
this.speedHandTwo = 20;
if (this.equip.get(EquipSlotType.RHELD) != null)
calculateAtrDamageForWeapon(this.equip.get(EquipSlotType.LHELD), true); //has mainhand weapon to calculate
if (this.charItemManager.equipped.get(EquipSlotType.RHELD) != null)
calculateAtrDamageForWeapon(this.charItemManager.equipped.get(EquipSlotType.LHELD), true); //has mainhand weapon to calculate
if (this.equip.get(EquipSlotType.LHELD) != null && !ItemTemplate.isShield(this.equip.get(EquipSlotType.LHELD).template))
calculateAtrDamageForWeapon(this.equip.get(EquipSlotType.LHELD), false); //has offhand weapon to calculate
if (this.charItemManager.equipped.get(EquipSlotType.LHELD) != null && !ItemTemplate.isShield(this.charItemManager.equipped.get(EquipSlotType.LHELD).template))
calculateAtrDamageForWeapon(this.charItemManager.equipped.get(EquipSlotType.LHELD), false); //has offhand weapon to calculate
try {
calculateAtrDamageForWeapon(this.equip.get(EquipSlotType.RHELD), true);
calculateAtrDamageForWeapon(this.charItemManager.equipped.get(EquipSlotType.RHELD), true);
} catch (Exception e) {
this.atrHandOne = (short) this.mobBase.getAttackRating();
@@ -1162,7 +1161,7 @@ public class Mob extends AbstractIntelligenceAgent implements Delayed {
}
try {
calculateAtrDamageForWeapon(this.equip.get(EquipSlotType.LHELD), false);
calculateAtrDamageForWeapon(this.charItemManager.equipped.get(EquipSlotType.LHELD), false);
} catch (Exception e) {
@@ -1176,14 +1175,14 @@ public class Mob extends AbstractIntelligenceAgent implements Delayed {
try {
float defense = this.mobBase.getDefenseRating();
defense += getShieldDefense(equip.get(EquipSlotType.LHELD));
defense += getArmorDefense(equip.get(EquipSlotType.HELM));
defense += getArmorDefense(equip.get(EquipSlotType.CHEST));
defense += getArmorDefense(equip.get(EquipSlotType.UPARM));
defense += getArmorDefense(equip.get(EquipSlotType.HANDS));
defense += getArmorDefense(equip.get(EquipSlotType.LEGS));
defense += getArmorDefense(equip.get(EquipSlotType.FEET));
defense += getWeaponDefense(equip);
defense += getShieldDefense(charItemManager.equipped.get(EquipSlotType.LHELD));
defense += getArmorDefense(charItemManager.equipped.get(EquipSlotType.HELM));
defense += getArmorDefense(charItemManager.equipped.get(EquipSlotType.CHEST));
defense += getArmorDefense(charItemManager.equipped.get(EquipSlotType.UPARM));
defense += getArmorDefense(charItemManager.equipped.get(EquipSlotType.HANDS));
defense += getArmorDefense(charItemManager.equipped.get(EquipSlotType.LEGS));
defense += getArmorDefense(charItemManager.equipped.get(EquipSlotType.FEET));
defense += getWeaponDefense(charItemManager.equipped);
// TODO add error log here
if (this.bonuses != null) {
@@ -1217,9 +1216,9 @@ public class Mob extends AbstractIntelligenceAgent implements Delayed {
// calculate defense for equipment
}
private float getWeaponDefense(HashMap<Enum.EquipSlotType, MobEquipment> equipped) {
private float getWeaponDefense(ConcurrentHashMap<Enum.EquipSlotType, Item> equipped) {
MobEquipment weapon = equipped.get(EquipSlotType.RHELD);
Item weapon = equipped.get(EquipSlotType.RHELD);
ItemBase wb = null;
CharacterSkill skill, mastery;
float val = 0;
@@ -1256,7 +1255,7 @@ public class Mob extends AbstractIntelligenceAgent implements Delayed {
return val;
}
private float getShieldDefense(MobEquipment shield) {
private float getShieldDefense(Item shield) {
if (shield == null)
return 0;
@@ -1285,7 +1284,7 @@ public class Mob extends AbstractIntelligenceAgent implements Delayed {
return (def * (1 + ((int) skillMod / 100f)));
}
private float getArmorDefense(MobEquipment armor) {
private float getArmorDefense(Item armor) {
if (armor == null)
return 0;
@@ -1313,7 +1312,7 @@ public class Mob extends AbstractIntelligenceAgent implements Delayed {
return (def * (1 + ((int) armorSkill.getModifiedAmount() / 50f)));
}
private void calculateAtrDamageForWeapon(MobEquipment weapon, boolean mainHand) {
private void calculateAtrDamageForWeapon(Item weapon, boolean mainHand) {
int baseStrength = 0;
@@ -1501,13 +1500,13 @@ public class Mob extends AbstractIntelligenceAgent implements Delayed {
public ItemBase getWeaponItemBase(boolean mainHand) {
if (this.equipmentSetID != 0)
if (equip != null) {
MobEquipment me;
if (charItemManager.equipped != null) {
Item me;
if (mainHand)
me = equip.get(1); //mainHand
me = charItemManager.equipped.get(EquipSlotType.RHELD); //mainHand
else
me = equip.get(2); //offHand
me = charItemManager.equipped.get(EquipSlotType.LHELD); //offHand
if (me != null) {
@@ -1521,14 +1520,14 @@ public class Mob extends AbstractIntelligenceAgent implements Delayed {
MobBase mb = this.mobBase;
if (mb != null)
if (equip != null) {
if (this.charItemManager.equipped.isEmpty() == false) {
MobEquipment me;
Item me;
if (mainHand)
me = equip.get(1); //mainHand
me = this.charItemManager.equipped.get(EquipSlotType.RHELD); //mainHand
else
me = equip.get(2); //offHand
me = this.charItemManager.equipped.get(EquipSlotType.LHELD); //offHand
if (me != null)
return me.getItemBase();
@@ -1670,14 +1669,9 @@ public class Mob extends AbstractIntelligenceAgent implements Delayed {
this.loadInventory();
if (this.equipmentSetID != 0)
this.equip = MobBase.loadEquipmentSet(this.equipmentSetID);
this.charItemManager.equipped = MobBase.loadEquipmentSet(this.equipmentSetID);
else
this.equip = new HashMap<>();
if (this.equip == null) {
Logger.error("Null equipset returned for uuid " + currentID);
this.equip = new HashMap<>(0);
}
this.charItemManager.equipped = new ConcurrentHashMap<>();
// Combine mobbase and mob aggro arrays into one bitvector
//skip for pets
@@ -1835,10 +1829,6 @@ public class Mob extends AbstractIntelligenceAgent implements Delayed {
this.lootSync = lootSync;
}
public HashMap<Enum.EquipSlotType, MobEquipment> getEquip() {
return equip;
}
public String getNameOverride() {
return firstName + " " + lastName;
}