diff --git a/src/engine/gameManager/CombatManager.java b/src/engine/gameManager/CombatManager.java index 20ceeb07..c7f267ca 100644 --- a/src/engine/gameManager/CombatManager.java +++ b/src/engine/gameManager/CombatManager.java @@ -215,11 +215,11 @@ public enum CombatManager { wepSpeed = 10; //Old was 10, but it can be reached lower with legit buffs,effects. delay = (long)wepSpeed * 100L; - } else if (attacker.getObjectType().equals(mbEnums.GameObjectType.Mob)) { + } else { - //unarmed mob, use the natural attack speed from its rune + //unarmed, use the natural attack speed from the mob or race rune - float naturalSpeed = getNaturalAttackSpeed((Mob) attacker, slot); + float naturalSpeed = getNaturalAttackSpeed(attacker, slot); if (naturalSpeed > 0) { @@ -662,13 +662,28 @@ public enum CombatManager { } - public static float getNaturalAttackSpeed(Mob mob, mbEnums.EquipSlotType slot) { + public static float getNaturalAttackSpeed(AbstractCharacter attacker, mbEnums.EquipSlotType slot) { // Returns the rune natural attack speed (x100 ms) for this hand, or 0 if the rune has none. + // Mobs use their mobbase rune, players use their race rune. - ItemTemplate rune = ItemTemplate.templates.get(mob.loadID); + int runeID; + ItemTemplate rune; int hand = slot.equals(mbEnums.EquipSlotType.LHELD) ? 2 : 1; + switch (attacker.getObjectType()) { + case Mob: + runeID = ((Mob) attacker).loadID; + break; + case PlayerCharacter: + runeID = ((PlayerCharacter) attacker).getRaceID(); + break; + default: + return 0; + } + + rune = ItemTemplate.templates.get(runeID); + if (rune == null || rune.rune_natural_attacks.isEmpty()) return 0;