diff --git a/src/services/experience/ExperienceManager.java b/src/services/experience/ExperienceManager.java index 10fc487c8..63ebb6bad 100644 --- a/src/services/experience/ExperienceManager.java +++ b/src/services/experience/ExperienceManager.java @@ -104,7 +104,17 @@ public final class ExperienceManager extends Manager { // TODO show +XP flytext // At this point, we check if their level should be adjusted. + short oldLevel = creatureObject.getLevel(); attemptLevelUp(creatureObject, xpType, newXpTotal); + short newLevel = creatureObject.getLevel(); + + if (oldLevel > newLevel) { // If we've leveled up at least once + new LevelChangedIntent(creatureObject, oldLevel, newLevel).broadcast(); + // TODO increase health of creatureObject + // TODO flytext object.showFlyText(OutOfBand.ProsePackage("@cbt_spam:skill_up"), 2.5f, new RGB(154, 205, 50), 0, true); + // TODO client effect clienteffect/skill_granted.cef + // TODO audio sound/music_acq_bountyhunter.snd + } } else { Log.e(this, "%d %s XP to %s failed because XP can't be given to NPCs", xpGained, xpType, creatureObject); } @@ -122,12 +132,7 @@ public final class ExperienceManager extends Manager { if (xpNextLevel != null) { if (newXpTotal >= xpNextLevel) { - new LevelChangedIntent(creatureObject, currentLevel, nextLevel).broadcast(); creatureObject.setLevel(nextLevel); - // TODO increase health of creatureObject - // TODO flytext object.showFlyText(OutOfBand.ProsePackage("@cbt_spam:skill_up"), 2.5f, new RGB(154, 205, 50), 0, true); - // TODO client effect clienteffect/skill_granted.cef - // TODO audio sound/music_acq_bountyhunter.snd // Recursively attempt to level up again, in case we've gained enough XP to level up multiple times. attemptLevelUp(creatureObject, xpType, newXpTotal); diff --git a/src/services/experience/SkillTemplateService.java b/src/services/experience/SkillTemplateService.java index 71c096c72..0c5106b0a 100644 --- a/src/services/experience/SkillTemplateService.java +++ b/src/services/experience/SkillTemplateService.java @@ -73,28 +73,30 @@ public final class SkillTemplateService extends Service { } private void handleLevelChangedIntent(LevelChangedIntent i) { + short oldLevel = i.getPreviousLevel(); short newLevel = i.getNewLevel(); CreatureObject creatureObject = i.getCreatureObject(); - // Skills are only awarded every third or fourth level - if ((newLevel == 4 || newLevel == 7 || newLevel == 10) || ((newLevel > 10) && (((newLevel - 10) % 4) == 0))) { - PlayerObject playerObject = creatureObject.getPlayerObject(); - String profession = playerObject.getProfession(); - String[] templates = skillTemplates.get(profession); - - if(templates == null) { - Log.w(this, "%s tried to level up to %d with invalid profession %s", creatureObject, newLevel, profession); + for (int level = oldLevel; level < newLevel; level++) { + // Skills are only awarded every third or fourth level + if ((level == 4 || level == 7 || level == 10) || ((level > 10) && (((level - 10) % 4) == 0))) { + PlayerObject playerObject = creatureObject.getPlayerObject(); + String profession = playerObject.getProfession(); + String[] templates = skillTemplates.get(profession); + + if (templates == null) { + Log.w(this, "%s tried to level up to %d with invalid profession %s", creatureObject, level, profession); + } else { + int skillIndex = ((level <= 10) ? ((level - 1) / 3) : ((((level - 10) / 4)) + 3)); + + String skillName = templates[skillIndex]; + new SkillBoxGrantedIntent(skillName, creatureObject).broadcast(); + playerObject.setProfWheelPosition(skillName); + // TODO roadmap reward items + } } else { - int skillIndex = ((newLevel <= 10) ? ((newLevel - 1) / 3) : ((((newLevel - 10) / 4)) + 3)); - - String skillName = templates[skillIndex]; - new SkillBoxGrantedIntent(skillName, creatureObject).broadcast(); - playerObject.setProfWheelPosition(skillName); - // TODO roadmap reward items + Log.d(this, "Level %d has no skillbox - %s is rewarded nothing", level, creatureObject); } - } else { - Log.d(this, "Level %d has no skillbox - %s is rewarded nothing", newLevel, creatureObject); } } - }