From 11cffedd62d02af84793b20c497cf17eaf326ba1 Mon Sep 17 00:00:00 2001 From: MagicBot Date: Thu, 22 Oct 2026 07:48:53 -0400 Subject: [PATCH] Stack a mob's rune skill adjusts by skill type instead of replacing them applyRuneSkills checked mob.skills for the rune name rather than the skill type, so every qualifying [rank, level] pair replaced the skill and only the last one counted. Pairs at or below the mob's level now add up, the same way trainer caps sum their pairs. Value changes: only mobbases with several pairs for one skill, Guard Dog 12017 and Guard 13170. Only Guard Dog is in use (contract 910 Personal Guard Dog); Guard 13170 has no spawns or contracts on dev. Example at level 50: Dodge and Unarmed Combat 30 -> 110, Unarmed Combat Mastery 20 -> 80. Guard ATR/defense/damage formulas don't read these skills. No mobbase has a base skill matching a rune skill, so applyMobbaseSkill values are unaffected. Co-Authored-By: Claude Opus 5.5 --- src/engine/gameManager/NPCManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/engine/gameManager/NPCManager.java b/src/engine/gameManager/NPCManager.java index b0956c58..15a4a1ff 100644 --- a/src/engine/gameManager/NPCManager.java +++ b/src/engine/gameManager/NPCManager.java @@ -471,7 +471,7 @@ public enum NPCManager { if (skillBase == null) continue; if (entry.level <= mob.level) - if (mob.skills.containsKey(entry.name) == false) + if (mob.skills.containsKey(entry.skill_type) == false) mob.skills.put(entry.skill_type, new CharacterSkill(skillBase, mob, entry.rank)); else mob.skills.put(entry.skill_type, new CharacterSkill(skillBase, mob, entry.rank + mob.skills.get(entry.skill_type).getNumTrains()));