@Override public void affectCharStats(MOB affected, CharStats affectableStats) { super.affectCharStats(affected, affectableStats); affectableStats.setStat( CharStats.STAT_SAVE_MIND, affectableStats.getStat(CharStats.STAT_SAVE_MIND) + (2 * affectableStats.getClassLevel(this))); }
@Override public void level(MOB mob, List<String> newAbilityIDs) { super.level(mob, newAbilityIDs); if (CMSecurity.isDisabled(CMSecurity.DisFlag.LEVELS)) return; final int attArmor = (((int) Math.round(CMath.div(mob.charStats().getStat(CharStats.STAT_DEXTERITY), 9.0))) + 1); mob.tell(L("^NYour grace grants you a defensive bonus of ^H@x1^?.^N", "" + attArmor)); }
@Override public void grantAbilities(MOB mob, boolean isBorrowedClass) { super.grantAbilities(mob, isBorrowedClass); if (mob.playerStats() == null) { final List<AbilityMapper.AbilityMapping> V = CMLib.ableMapper() .getUpToLevelListings(ID(), mob.charStats().getClassLevel(ID()), false, false); for (final AbilityMapper.AbilityMapping able : V) { final Ability A = CMClass.getAbility(able.abilityID); if ((A != null) && ((A.classificationCode() & Ability.ALL_ACODES) == Ability.ACODE_CHANT) && (!CMLib.ableMapper().getDefaultGain(ID(), true, A.ID()))) giveMobAbility( mob, A, CMLib.ableMapper().getDefaultProficiency(ID(), true, A.ID()), CMLib.ableMapper().getDefaultParm(ID(), true, A.ID()), isBorrowedClass); } return; } final Vector grantable = new Vector(); final int level = mob.charStats().getClassLevel(this); int numChants = 2; for (final Enumeration<Ability> a = CMClass.abilities(); a.hasMoreElements(); ) { final Ability A = a.nextElement(); if ((CMLib.ableMapper().getQualifyingLevel(ID(), true, A.ID()) == level) && ((CMLib.ableMapper().getQualifyingLevel(ID(), true, A.ID()) <= 25) && (!CMLib.ableMapper().getSecretSkill(ID(), true, A.ID())) && (!CMLib.ableMapper().getDefaultGain(ID(), true, A.ID())) && ((A.classificationCode() & Ability.ALL_ACODES) == Ability.ACODE_CHANT))) { if (!grantable.contains(A.ID())) grantable.addElement(A.ID()); } } for (int a = 0; a < mob.numAbilities(); a++) { final Ability A = mob.fetchAbility(a); if (grantable.contains(A.ID())) { grantable.remove(A.ID()); numChants--; } } for (int i = 0; i < numChants; i++) { if (grantable.size() == 0) break; final String AID = (String) grantable.elementAt(CMLib.dice().roll(1, grantable.size(), -1)); if (AID != null) { grantable.removeElement(AID); giveMobAbility( mob, CMClass.getAbility(AID), CMLib.ableMapper().getDefaultProficiency(ID(), true, AID), CMLib.ableMapper().getDefaultParm(ID(), true, AID), isBorrowedClass); } } }
@Override public void affectCharState(MOB affected, CharState affectableState) { super.affectCharState(affected, affectableState); if (affected.location() != null) for (int i = 0; i < affected.location().numItems(); i++) { final Item I = affected.location().getItem(i); if ((I != null) && (I.ID().equals("DruidicMonument"))) affectableState.setMana(affectableState.getMana() + (affectableState.getMana() / 2)); } }
@Override public void affectPhyStats(Physical affected, PhyStats affectableStats) { super.affectPhyStats(affected, affectableStats); if (affected instanceof MOB) { if (CMLib.flags().isStanding((MOB) affected)) { final MOB mob = (MOB) affected; final int attArmor = (((int) Math.round(CMath.div(mob.charStats().getStat(CharStats.STAT_DEXTERITY), 9.0))) + 1) * (mob.charStats().getClassLevel(this) - 1); affectableStats.setArmor(affectableStats.armor() - attArmor); } } }
@Override public void executeMsg(Environmental host, CMMsg msg) { if (host instanceof MOB) { final MOB myChar = (MOB) host; if (msg.amISource(myChar) && (msg.tool() instanceof Ability) && (!myChar.isMonster()) && (msg.sourceMinor() == CMMsg.TYP_PREINVOKE) && (myChar.isMine(msg.tool())) && (myChar.charStats().getClassLevel(this) >= 30) && (CMLib.ableMapper().getQualifyingLevel(ID(), true, msg.tool().ID()) < 1)) invokable = new WeakReference(msg.tool()); } super.executeMsg(host, msg); Bard.visitationBonusMessage(host, msg); }
@Override public void grantAbilities(MOB mob, boolean isBorrowedClass) { super.grantAbilities(mob, isBorrowedClass); if (mob.playerStats() == null) { final List<AbilityMapper.AbilityMapping> V = CMLib.ableMapper() .getUpToLevelListings(ID(), mob.charStats().getClassLevel(ID()), false, false); for (final AbilityMapper.AbilityMapping able : V) { final Ability A = CMClass.getAbility(able.abilityID); if ((A != null) && ((A.classificationCode() & Ability.ALL_ACODES) == Ability.ACODE_SONG) && (!CMLib.ableMapper().getDefaultGain(ID(), true, A.ID()))) giveMobAbility( mob, A, CMLib.ableMapper().getDefaultProficiency(ID(), true, A.ID()), CMLib.ableMapper().getDefaultParm(ID(), true, A.ID()), isBorrowedClass); } } }
@Override public void executeMsg(Environmental host, CMMsg msg) { super.executeMsg(host, msg); Druid.doAnimalFollowerLevelingCheck(this, host, msg); Druid.doAnimalFreeingCheck(this, host, msg); }
@Override public void initializeClass() { super.initializeClass(); CMLib.ableMapper().addCharAbilityMapping(ID(), 1, "Skill_Write", 0, true); CMLib.ableMapper().addCharAbilityMapping(ID(), 1, "Skill_Recall", 50, true); CMLib.ableMapper().addCharAbilityMapping(ID(), 1, "Skill_Revoke", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 1, "Skill_WandUse", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 1, "Skill_Swim", 100, true); CMLib.ableMapper().addCharAbilityMapping(ID(), 1, "Skill_Climb", 100, true); CMLib.ableMapper().addCharAbilityMapping(ID(), 1, "Specialization_Natural", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 1, "Specialization_Staff", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 1, "Herbology", 0, false); CMLib.ableMapper().addCharAbilityMapping(ID(), 1, "Druidic", 75, true); CMLib.ableMapper().addCharAbilityMapping(ID(), 1, "Druid_DruidicPass", true); CMLib.ableMapper().addCharAbilityMapping(ID(), 1, "Druid_ShapeShift", true); CMLib.ableMapper().addCharAbilityMapping(ID(), 1, "Druid_MyPlants", true); CMLib.ableMapper().addCharAbilityMapping(ID(), 1, "Chant_PredictWeather", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 1, "Chant_BestowName", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 1, "Chant_SummonPlants", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 1, "Chant_HardenSkin", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 1, "Skill_WildernessLore", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 2, "Chant_SummonWater", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 2, "Chant_LocatePlants", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 2, "Chant_SensePoison", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 3, "Chant_SummonFood", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 3, "Chant_Moonbeam", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 3, "Chant_RestoreMana", 0, "", false, true); CMLib.ableMapper().addCharAbilityMapping(ID(), 3, "Chant_SenseLife", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 4, "Chant_Tangle", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 4, "Chant_SummonFire", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 4, "Chant_LocateAnimals", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 5, "Chant_FortifyFood", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 5, "Chant_Farsight", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 5, "Chant_FeelElectricity", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 6, "Chant_CalmAnimal", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 6, "Chant_Sunray", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 6, "Chant_Treeform", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 7, "Chant_Goodberry", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 7, "Chant_Hunger", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 7, "Chant_FeelCold", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 7, "Chant_NaturalBalance", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 8, "Chant_WarpWood", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 8, "Chant_ControlFire", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 8, "Chant_VenomWard", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 9, "Chant_CalmWind", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 9, "Chant_Barkskin", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 9, "Chant_WaterWalking", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 10, "Chant_AnimalFriendship", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 10, "Chant_FeelHeat", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 10, "Chant_GrowClub", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 10, "Chant_Brittle", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 11, "Chant_PlantPass", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 11, "Chant_WindGust", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 11, "Chant_Poison", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 12, "Chant_Treemind", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 12, "Chant_WhisperWard", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 12, "Chant_BreatheWater", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 13, "Chant_HoldAnimal", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 13, "Chant_PlantBed", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 13, "Chant_LightningWard", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 14, "Chant_ColdWard", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 14, "Chant_Bury", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 14, "Chant_IllusionaryForest", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 14, "Chant_Hippieness", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 15, "Herbalism", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 15, "Chant_Fertilization", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 15, "Chant_CharmAnimal", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 15, "Chant_CalmWeather", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 15, "PlantLore", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 16, "Chant_FireWard", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 16, "Chant_Shillelagh", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 16, "Chant_SummonPeace", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 17, "Chant_Plague", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 17, "Chant_DistantGrowth", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 17, "Chant_Earthquake", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 18, "Chant_PlantMaze", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 18, "Chant_GasWard", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 18, "Chant_Hibernation", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 18, "Chant_Reabsorb", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 19, "Chant_SummonAnimal", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 19, "Chant_Nectar", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 19, "Chant_SummonHeat", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 19, "Chant_SenseSentience", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 20, "Scrapping", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 20, "Chant_Grapevine", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 20, "Chant_SummonCold", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 20, "Chant_SummonInsects", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 21, "Chant_AnimalSpy", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 21, "Chant_SummonRain", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 21, "Chant_PlantSnare", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 21, "Chant_SensePregnancy", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 21, "Chant_SenseFluids", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 22, "Chant_Treemorph", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 22, "Chant_SummonWind", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 22, "Chant_NeutralizePoison", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 22, "Chant_FindPlant", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 22, "Chant_SensePlants", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 23, "Chant_GrowItem", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 23, "Chant_SummonLightning", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 23, "Chant_SummonMount", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 23, "Chant_FindOre", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 23, "Chant_SenseOres", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 24, "Chant_CharmArea", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 24, "Chant_SummonElemental", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 24, "Chant_SummonFear", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 24, "Chant_SenseAge", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 24, "Chant_FindGem", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 24, "Chant_SenseGems", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 25, "Chant_SpeedTime", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 25, "Chant_SummonSapling", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 25, "Chant_Feralness", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 30, "Chant_Reincarnation", true); }
@Override public void executeMsg(Environmental host, CMMsg msg) { super.executeMsg(host, msg); Bard.visitationBonusMessage(host, msg); }
@Override public void initializeClass() { super.initializeClass(); CMLib.ableMapper().addCharAbilityMapping(ID(), 1, "Specialization_Natural", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 1, "Specialization_Ranged", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 1, "Specialization_Sword", true); CMLib.ableMapper().addCharAbilityMapping(ID(), 1, "Skill_Recall", 50, true); CMLib.ableMapper().addCharAbilityMapping(ID(), 1, "Skill_Write", 50, true); CMLib.ableMapper().addCharAbilityMapping(ID(), 1, "Skill_Swim", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 1, "Skill_Befriend", 50, true); CMLib.ableMapper().addCharAbilityMapping(ID(), 1, "Dance_Stop", 100, true); CMLib.ableMapper().addCharAbilityMapping(ID(), 1, "Dance_CanCan", true); CMLib.ableMapper().addCharAbilityMapping(ID(), 2, "Thief_Lore", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 2, "Dance_Foxtrot", true); CMLib.ableMapper().addCharAbilityMapping(ID(), 3, "Fighter_Kick", true); CMLib.ableMapper().addCharAbilityMapping(ID(), 3, "Skill_Climb", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 3, "Dance_Tarantella", true); CMLib.ableMapper().addCharAbilityMapping(ID(), 4, "Thief_Appraise", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 4, "Dance_Waltz", true); CMLib.ableMapper().addCharAbilityMapping(ID(), 5, "Skill_Dodge", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 5, "Dance_Salsa", true); CMLib.ableMapper().addCharAbilityMapping(ID(), 5, "Dance_Grass", true); CMLib.ableMapper().addCharAbilityMapping(ID(), 6, "Dance_Clog", true); CMLib.ableMapper().addCharAbilityMapping(ID(), 7, "Thief_Distract", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 7, "Dance_Capoeira", true); CMLib.ableMapper().addCharAbilityMapping(ID(), 8, "Dance_Tap", true); CMLib.ableMapper().addCharAbilityMapping(ID(), 8, "Dance_Swing", true); CMLib.ableMapper().addCharAbilityMapping(ID(), 9, "Skill_Disarm", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 9, "Dance_Basse", true); CMLib.ableMapper().addCharAbilityMapping(ID(), 10, "Fighter_BodyFlip", true); CMLib.ableMapper().addCharAbilityMapping(ID(), 10, "Dance_Tango", true); CMLib.ableMapper().addCharAbilityMapping(ID(), 11, "Fighter_Spring", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 11, "Dance_Polka", true); CMLib.ableMapper().addCharAbilityMapping(ID(), 12, "Dance_RagsSharqi", true); CMLib.ableMapper().addCharAbilityMapping(ID(), 12, "Dance_Manipuri", true); CMLib.ableMapper().addCharAbilityMapping(ID(), 13, "Skill_Trip", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 13, "Dance_Cotillon", true); CMLib.ableMapper().addCharAbilityMapping(ID(), 14, "Skill_TwoWeaponFighting", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 14, "Dance_Ballet", true); CMLib.ableMapper().addCharAbilityMapping(ID(), 15, "Fighter_Tumble", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 15, "Dance_Jitterbug", true); CMLib.ableMapper().addCharAbilityMapping(ID(), 16, "Dance_Butoh", true); CMLib.ableMapper().addCharAbilityMapping(ID(), 17, "Skill_Attack2", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 17, "Dance_Courante", true); CMLib.ableMapper().addCharAbilityMapping(ID(), 18, "Dance_Musette", true); CMLib.ableMapper().addCharAbilityMapping(ID(), 19, "Fighter_Endurance", true); CMLib.ableMapper().addCharAbilityMapping(ID(), 19, "Fighter_Cartwheel", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 19, "Dance_Swords", true); CMLib.ableMapper().addCharAbilityMapping(ID(), 20, "Dance_Flamenco", true); CMLib.ableMapper().addCharAbilityMapping(ID(), 21, "Fighter_Roll", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 21, "Dance_Jingledress", true); CMLib.ableMapper().addCharAbilityMapping(ID(), 22, "Dance_Morris", true); CMLib.ableMapper().addCharAbilityMapping(ID(), 23, "Fighter_BlindFighting", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 23, "Dance_Butterfly", true); CMLib.ableMapper().addCharAbilityMapping(ID(), 24, "Dance_Macabre", true); CMLib.ableMapper().addCharAbilityMapping(ID(), 25, "Fighter_CircleTrip", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 25, "Dance_War", true); CMLib.ableMapper().addCharAbilityMapping(ID(), 30, "Dance_Square", true); }
@Override public void grantAbilities(MOB mob, boolean isBorrowedClass) { super.grantAbilities(mob, isBorrowedClass); // if he already has one, don't give another! if (mob.playerStats() != null) { final int classLevel = mob.baseCharStats().getClassLevel(this); if (classLevel < 2) return; if ((classLevel % 2) != 0) return; int maxSkills = classLevel / 2; // now only give one, for current level, respecting alignment! // first, get a list of all skills you don't qualify for that you MIGHT have gained or will // gain final List<Ability> choices = new Vector<Ability>(); for (final Enumeration<Ability> a = CMClass.abilities(); a.hasMoreElements(); ) { final Ability A = a.nextElement(); final int lql = CMLib.ableMapper().lowestQualifyingLevel(A.ID()); if ((CMLib.ableMapper().qualifyingLevel(mob, A) <= 0) && (lql < 25) && (lql > 0) && (!CMLib.ableMapper().getSecretSkill(A.ID())) && (CMLib.ableMapper().qualifiesByAnyCharClass(A.ID())) && (CMLib.ableMapper().availableToTheme(A.ID(), Area.THEME_FANTASY, true)) && (!CMLib.ableMapper().qualifiesOnlyByClan(mob, A)) && (!CMLib.ableMapper().qualifiesOnlyByRace(mob, A)) && (A.isAutoInvoked() || ((A.triggerStrings() != null) && (A.triggerStrings().length > 0)))) choices.add(A); } // now count those you already have for (int a = choices.size() - 1; a >= 0; a--) { final Ability A = choices.get(a); if (mob.fetchAbility(A.ID()) != null) maxSkills--; } if (maxSkills < 1) // if that reduced you to 0, you are done. return; // now eliminate those you already have, and those that are // above your level, if you are <25 for (int a = choices.size() - 1; a >= 0; a--) { final Ability A = choices.get(a); final int lql = CMLib.ableMapper().lowestQualifyingLevel(A.ID()); if ((mob.fetchAbility(ID()) != null) || ((lql != classLevel) && (lql != classLevel - 1) && (classLevel < 25))) choices.remove(a); } if (choices.size() == 0) return; final Ability A = choices.get(CMLib.dice().roll(1, choices.size(), -1)); if (A != null) giveMobAbility(mob, A, 0, "", isBorrowedClass); } else { final List<AbilityMapper.AbilityMapping> V = CMLib.ableMapper() .getUpToLevelListings(ID(), mob.charStats().getClassLevel(ID()), false, false); for (final AbilityMapper.AbilityMapping able : V) { final Ability A = CMClass.getAbility(able.abilityID); if ((A != null) && (!CMLib.ableMapper().getAllQualified(ID(), true, A.ID())) && (!CMLib.ableMapper().getDefaultGain(ID(), true, A.ID()))) giveMobAbility( mob, A, CMLib.ableMapper().getDefaultProficiency(ID(), true, A.ID()), CMLib.ableMapper().getDefaultParm(ID(), true, A.ID()), isBorrowedClass); } } }
@Override public void initializeClass() { super.initializeClass(); CMLib.ableMapper().addCharAbilityMapping(ID(), 1, "Specialization_Natural", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 1, "Specialization_Ranged", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 1, "Specialization_EdgedWeapon", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 1, "Specialization_Sword", true); CMLib.ableMapper().addCharAbilityMapping(ID(), 1, "Skill_Recall", 50, true); CMLib.ableMapper().addCharAbilityMapping(ID(), 1, "Skill_Write", 50, true); CMLib.ableMapper().addCharAbilityMapping(ID(), 1, "Skill_Swim", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 1, "Skill_Befriend", 50, true); CMLib.ableMapper().addCharAbilityMapping(ID(), 1, "Song_Nothing", true); CMLib.ableMapper().addCharAbilityMapping(ID(), 1, "Skill_Haggle", true); CMLib.ableMapper().addCharAbilityMapping(ID(), 2, "Thief_Swipe", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 2, "Skill_Revoke", true); CMLib.ableMapper().addCharAbilityMapping(ID(), 3, "Skill_Disguise", true); CMLib.ableMapper().addCharAbilityMapping(ID(), 3, "Skill_Climb", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 3, "Thief_Hide", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 4, "Thief_Mark", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 4, "Song_Charm", true); CMLib.ableMapper().addCharAbilityMapping(ID(), 5, "Fighter_Rescue", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 5, "Skill_StrikeTheSet", true); CMLib.ableMapper().addCharAbilityMapping(ID(), 6, "Skill_Songcraft", true); CMLib.ableMapper().addCharAbilityMapping(ID(), 6, "Spell_ReadMagic", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 7, "Skill_Imitation", true); CMLib.ableMapper().addCharAbilityMapping(ID(), 7, "Skill_CastBlocking", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 8, "Thief_Distract", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 8, "Skill_WandUse", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 9, "Skill_Warrants", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 9, "Skill_BreakALeg", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 10, "Skill_Dodge", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 10, "Song_Detection", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 11, "Skill_FalseArrest", true); CMLib.ableMapper().addCharAbilityMapping(ID(), 11, "Song_Comprehension", true); CMLib.ableMapper().addCharAbilityMapping(ID(), 12, "Skill_Spellcraft", true); CMLib.ableMapper().addCharAbilityMapping(ID(), 12, "Ranger_Track", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 12, "Spell_MagicMissile", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 12, "Song_Rage", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 13, "Skill_Map", true); CMLib.ableMapper().addCharAbilityMapping(ID(), 13, "Skill_Trip", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 14, "Thief_AnalyzeMark", true); CMLib.ableMapper().addCharAbilityMapping(ID(), 14, "Skill_Upstage", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 15, "Skill_Chantcraft", true); CMLib.ableMapper().addCharAbilityMapping(ID(), 15, "Song_Protection", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 16, "Skill_Shuffle", true); CMLib.ableMapper().addCharAbilityMapping(ID(), 16, "Skill_ExitStageLeft", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 17, "Skill_Attack2", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 17, "Chant_SummonPlants", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 18, "Skill_Prayercraft", true); CMLib.ableMapper().addCharAbilityMapping(ID(), 18, "Prayer_CureLight", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 18, "Song_Mana", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 19, "Song_Knowledge", true); CMLib.ableMapper().addCharAbilityMapping(ID(), 19, "Skill_CurtainCall", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 20, "Thief_Detection", true); CMLib.ableMapper().addCharAbilityMapping(ID(), 20, "Skill_Monologue", true); CMLib.ableMapper().addCharAbilityMapping(ID(), 21, "Song_Thanks", true); CMLib.ableMapper().addCharAbilityMapping(ID(), 21, "Spell_LocateObject", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 22, "Skill_Parry", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 22, "Skill_AdLib", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 23, "Thief_Con", true); CMLib.ableMapper().addCharAbilityMapping(ID(), 23, "Song_Strength", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 24, "Song_Disgust", true); CMLib.ableMapper().addCharAbilityMapping(ID(), 24, "Thief_FrameMark", false); CMLib.ableMapper().addCharAbilityMapping(ID(), 25, "Skill_MarkDisguise", true); // 30 -- cheaper skills }