Use race rune natural attack speed for unarmed players

Extend getNaturalAttackSpeed to resolve the rune from the attacker type:
mobbase rune for mobs, race rune for players. Unarmed players now swing
at their race rune speed (20 = 2.0 s per hand) instead of a flat 5000 ms.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-15 06:56:21 -04:00
co-authored by Claude Opus 5.5
parent 9aa44d4e9a
commit b690195233
+20 -5
View File
@@ -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;