diff --git a/src/engine/objects/AbstractCharacter.java b/src/engine/objects/AbstractCharacter.java index 1b42ecda..89f83055 100644 --- a/src/engine/objects/AbstractCharacter.java +++ b/src/engine/objects/AbstractCharacter.java @@ -656,10 +656,22 @@ public abstract class AbstractCharacter extends AbstractWorldObject { AssignDamageAtrForPlayers(abstractCharacter, equipped.get(EquipSlotType.LHELD), false, equipped.get(EquipSlotType.LHELD)); if (abstractCharacter.getObjectType().equals(GameObjectType.Mob)) { Mob mob = (Mob) abstractCharacter; - abstractCharacter.minDamageHandOne = (int) mob.mobBase.getDamageMin(); - abstractCharacter.minDamageHandTwo = (int) mob.mobBase.getDamageMin(); - abstractCharacter.maxDamageHandOne = (int) mob.mobBase.getDamageMax(); - abstractCharacter.maxDamageHandTwo = (int) mob.mobBase.getDamageMax(); + ItemTemplate rune = ItemTemplate.templates.get(mob.loadID); + float minDamage = mob.mobBase.getDamageMin(); + float maxDamage = mob.mobBase.getDamageMax(); + + // [AI] The client (ArcMobile, 0x46D200) takes mob damage straight from the rune MINDAMAGE/MAXDAMAGE, + // with no stat scaling. Use the rune when it has damage, otherwise keep the mobbase value. + + if (rune != null && rune.rune_max_damage > 0) { + minDamage = rune.rune_min_damage; + maxDamage = rune.rune_max_damage; + } + + abstractCharacter.minDamageHandOne = (int) minDamage; + abstractCharacter.minDamageHandTwo = (int) minDamage; + abstractCharacter.maxDamageHandOne = (int) maxDamage; + abstractCharacter.maxDamageHandTwo = (int) maxDamage; abstractCharacter.atrHandOne = mob.mobBase.getAttackRating(); abstractCharacter.atrHandTwo = mob.mobBase.getAttackRating(); abstractCharacter.defenseRating = mob.mobBase.getDefenseRating();