package com.planet_ink.coffee_mud.CharClasses;
import com.planet_ink.coffee_mud.core.interfaces.*;
import com.planet_ink.coffee_mud.core.*;
import com.planet_ink.coffee_mud.Abilities.interfaces.*;
import com.planet_ink.coffee_mud.Areas.interfaces.*;
import com.planet_ink.coffee_mud.Behaviors.interfaces.*;
import com.planet_ink.coffee_mud.CharClasses.interfaces.*;
import com.planet_ink.coffee_mud.Commands.interfaces.*;
import com.planet_ink.coffee_mud.Common.interfaces.*;
import com.planet_ink.coffee_mud.Exits.interfaces.*;
import com.planet_ink.coffee_mud.Items.interfaces.*;
import com.planet_ink.coffee_mud.Locales.interfaces.*;
import com.planet_ink.coffee_mud.MOBS.interfaces.*;
import com.planet_ink.coffee_mud.Races.interfaces.*;
import java.util.*;
/*
Copyright 2000-2006 Bo Zimmerman
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
public class Mage extends StdCharClass
{
public String ID(){return "Mage";}
public String name(){return "Mage";}
public String baseClass(){return ID();}
public int getMaxHitPointsLevel(){return 8;}
public int getBonusPracLevel(){return 4;}
public int getBonusAttackLevel(){return 0;}
public int getAttackAttribute(){return CharStats.STAT_INTELLIGENCE;}
public int getLevelsPerBonusDamage(){ return 10;}
public int getPracsFirstLevel(){return 6;}
public int getTrainsFirstLevel(){return 3;}
public int getMovementMultiplier(){return 8;}
public int getHPDivisor(){return 6;}
public int getHPDice(){return 1;}
public int getHPDie(){return 5;}
public int getManaDivisor(){return 2;}
public int getManaDice(){return 1;}
public int getManaDie(){return 6;}
protected String armorFailMessage(){return "<S-NAME> watch(es) <S-HIS-HER> armor absorb <S-HIS-HER> magical energy!";}
public int allowedArmorLevel(){return CharClass.ARMOR_CLOTH;}
public int allowedWeaponLevel(){return CharClass.WEAPONS_MAGELIKE;}
private HashSet disallowedWeapons=buildDisallowedWeaponClasses();
protected HashSet disallowedWeaponClasses(MOB mob){return disallowedWeapons;}
public int requiredArmorSourceMinor(){return CMMsg.TYP_CAST_SPELL;}
public Mage()
{
super();
maxStatAdj[CharStats.STAT_INTELLIGENCE]=7;
}
public void initializeClass()
{
super.initializeClass();
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Skill_Write",100,true);
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Skill_WandUse",25,true);
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Skill_Recall",25,true);
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Skill_Revoke",true);
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Skill_Swim",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),15,"Skill_Climb",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),8,"Skill_Spellcraft",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Skill_ScrollCopy",false);
// level 1
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Spell_MagicMissile",true);
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Spell_ResistMagicMissiles",true);
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Spell_ReadMagic",true);
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Spell_Shield",true);
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Spell_IronGrip",true);
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Spell_Erase",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Spell_InsatiableThirst",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Spell_MagicalAura",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Spell_Ventriloquate",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Spell_SpiderClimb",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Spell_WizardsChest",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Spell_RepairingAura",false);
// level 2
CMLib.ableMapper().addCharAbilityMapping(ID(),2,"Spell_Blur",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),2,"Spell_Infravision",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),2,"Spell_DetectUndead",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),2,"Spell_ObscureSelf",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),2,"Spell_LightenItem",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),2,"Spell_SummonSteed",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),2,"Spell_ResistPoison",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),2,"Spell_EnchantArrows",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),2,"Spell_Enlarge",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),2,"Spell_Shrink",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),2,"Spell_Light",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),2,"Spell_Clog",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),2,"Spell_AnimateItem",false);
// level 3
CMLib.ableMapper().addCharAbilityMapping(ID(),3,"Spell_KnowAlignment",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),3,"Spell_DeadenSmell",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),3,"Spell_DetectMetal",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),3,"Spell_Dream",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),3,"Spell_ResistGas",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),3,"Spell_Grease",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),3,"Spell_SummoningWard",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),3,"Spell_SummonCompanion",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),3,"Spell_WizardLock",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),3,"Spell_Deafness",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),3,"Spell_Knock",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),3,"Spell_FeatherFall",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),3,"Spell_Sleep",false);
// level 4
CMLib.ableMapper().addCharAbilityMapping(ID(),4,"Spell_FakeFood",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),4,"Spell_FakeSpring",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),4,"Spell_Frost",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),4,"Spell_AcidArrow",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),4,"Spell_Hunger",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),4,"Spell_DetectWater",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),4,"Spell_DetectPoison",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),4,"Spell_ResistAcid",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),4,"Spell_MageArmor",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),4,"Spell_BurningHands",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),4,"Spell_Friends",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),4,"Spell_WaterBreathing",false);
// level 5
CMLib.ableMapper().addCharAbilityMapping(ID(),5,"Spell_DetectMagic",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),5,"Spell_FloatingDisc",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),5,"Spell_DetectGold",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),5,"Spell_WallOfStone",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),5,"Spell_Spook",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),5,"Spell_CharmWard",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),5,"Spell_ResistCold",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),5,"Spell_Mend",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),5,"Spell_WeaknessGas",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),5,"Spell_DispelMagic",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),5,"Spell_FaerieFire",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),5,"Spell_MysticShine",false);
// clan magic
CMLib.ableMapper().addCharAbilityMapping(ID(),5,"Spell_CEqAcid",0,"",false,true);
CMLib.ableMapper().addCharAbilityMapping(ID(),5,"Spell_CEqCold",0,"",false,true);
CMLib.ableMapper().addCharAbilityMapping(ID(),5,"Spell_CEqElectric",0,"",false,true);
CMLib.ableMapper().addCharAbilityMapping(ID(),5,"Spell_CEqFire",0,"",false,true);
CMLib.ableMapper().addCharAbilityMapping(ID(),5,"Spell_CEqGas",0,"",false,true);
CMLib.ableMapper().addCharAbilityMapping(ID(),5,"Spell_CEqMind",0,"",false,true);
CMLib.ableMapper().addCharAbilityMapping(ID(),5,"Spell_CEqParalysis",0,"",false,true);
CMLib.ableMapper().addCharAbilityMapping(ID(),5,"Spell_CEqPoison",0,"",false,true);
CMLib.ableMapper().addCharAbilityMapping(ID(),5,"Spell_CEqWater",0,"",false,true);
CMLib.ableMapper().addCharAbilityMapping(ID(),5,"Spell_CEqDisease",0,"",false,true);
// level 6
CMLib.ableMapper().addCharAbilityMapping(ID(),6,"Spell_WeaknessAcid",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),6,"Spell_Augury",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),6,"Spell_Charm",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),6,"Spell_Meld",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),6,"Spell_IllusoryWall",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),6,"Spell_FindFamiliar",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),6,"Spell_StinkingCloud",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),6,"Spell_DetectInvisible",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),6,"Spell_ResistElectricity",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),6,"Spell_GraceOfTheCat",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),6,"Spell_ShockingGrasp",false);
// level 7
CMLib.ableMapper().addCharAbilityMapping(ID(),7,"Spell_WeaknessCold",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),7,"Spell_Darkness",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),7,"Spell_Invisibility",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),7,"Spell_GhostSound",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),7,"Spell_LightSensitivity",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),7,"Spell_Tourettes",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),7,"Spell_Refit",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),7,"Spell_ResistFire",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),7,"Spell_DetectHidden",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),7,"Spell_PassDoor",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),7,"Spell_Fireball",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),7,"Spell_SummonMonster",false);
// level 8
CMLib.ableMapper().addCharAbilityMapping(ID(),8,"Spell_WeaknessElectricity",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),8,"Spell_FaerieFog",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),8,"Spell_Lightning",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),8,"Spell_ResistDisease",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),8,"Spell_TeleportationWard",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),8,"Spell_Shatter",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),8,"Spell_ElementalStorm",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),8,"Spell_WallOfDarkness",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),8,"Spell_Fear",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),8,"Spell_IdentifyObject",false);
// level 9
CMLib.ableMapper().addCharAbilityMapping(ID(),9,"Spell_WeaknessFire",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),9,"Spell_Blindness",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),9,"Spell_Mirage",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),9,"Spell_Awe",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),9,"Spell_ComprehendLangs",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),9,"Spell_MagicMouth",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),9,"Spell_Daydream",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),9,"Spell_IceSheet",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),9,"Spell_Farsight",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),9,"Spell_Flameshield",false);
// level 10
CMLib.ableMapper().addCharAbilityMapping(ID(),10,"Spell_LocateObject",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),10,"Spell_Slow",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),10,"Spell_MassSleep",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),10,"Spell_ArcaneMark",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),10,"Spell_PhantomHound",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),10,"Spell_ResistArrows",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),10,"Spell_Teleport",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),10,"Spell_GustOfWind",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),10,"Spell_Ugliness",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),10,"Spell_Mute",false);
// level 11
CMLib.ableMapper().addCharAbilityMapping(ID(),11,"Spell_Claireaudience",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),11,"Spell_Feeblemind",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),11,"Spell_Stoneskin",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),11,"Spell_WallOfIce",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),11,"Spell_AcidFog",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),11,"Spell_HeatMetal",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),11,"Spell_Laughter",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),11,"Spell_Weaken",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),11,"Spell_MirrorImage",false);
// level 12
CMLib.ableMapper().addCharAbilityMapping(ID(),12,"Spell_Clairevoyance",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),12,"Spell_ChangeSex",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),12,"Spell_Haste",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),12,"Spell_DestroyObject",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),12,"Spell_Enlightenment",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),12,"Spell_MinorGlobe",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),12,"Spell_Shelter",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),12,"Spell_Confusion",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),12,"Spell_Delirium",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),12,"Spell_Fly",false);
//level 13
CMLib.ableMapper().addCharAbilityMapping(ID(),13,"Spell_DistantVision",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),13,"Spell_Reinforce",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),13,"Spell_ResistParalyzation",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),13,"Spell_FeignDeath",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),13,"Spell_Earthquake",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),13,"Spell_Gate",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),13,"Spell_GiantStrength",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),13,"Spell_Frenzy",false);
// level 14
CMLib.ableMapper().addCharAbilityMapping(ID(),14,"Spell_Nondetection",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),14,"Spell_KnowValue",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),14,"Spell_Silence",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),14,"Spell_ArcanePossession",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),14,"Spell_WallOfAir",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),14,"Spell_AnimateWeapon",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),14,"Spell_MassInvisibility",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),14,"Spell_Scribe",false);
// level 15
CMLib.ableMapper().addCharAbilityMapping(ID(),15,"Spell_Advancement",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),15,"Spell_Ensnare",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),15,"Spell_Hold",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),15,"Spell_FakeWeapon",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),15,"Spell_Blink",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),15,"Spell_Polymorph",false);
// level 16
CMLib.ableMapper().addCharAbilityMapping(ID(),16,"Spell_ChainLightening",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),16,"Spell_Choke",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),16,"Spell_Dismissal",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),16,"Skill_Meditation",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),16,"Spell_MageClaws",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),16,"Spell_FreeMovement",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),16,"Spell_PredictWeather",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),16,"Spell_FakeArmor",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),16,"Spell_Youth",0,"",false,true);
// level 17
CMLib.ableMapper().addCharAbilityMapping(ID(),17,"Spell_ClarifyScroll",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),17,"Spell_FoolsGold",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),17,"Spell_WallOfFire",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),17,"Spell_Siphon",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),17,"Spell_Portal",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),17,"Spell_RechargeWand",false);
// level 18
CMLib.ableMapper().addCharAbilityMapping(ID(),18,"Spell_SeeAura",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),18,"Spell_ReverseGravity",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),18,"Spell_Web",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),18,"Spell_Delude",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),18,"Spell_ResistPetrification",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),18,"Spell_Summon",false);
// level 19
CMLib.ableMapper().addCharAbilityMapping(ID(),19,"Spell_FleshStone",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),19,"Spell_Forget",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),19,"Spell_StoneFlesh",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),19,"Spell_WallOfForce",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),19,"Spell_ImprovedInvisibility",false);
// level 20
CMLib.ableMapper().addCharAbilityMapping(ID(),20,"Spell_Scry",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),20,"Spell_ImprovedPolymorph",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),20,"Spell_Nightmare",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),20,"Spell_Cloudkill",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),20,"Spell_Repulsion",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),20,"Spell_EnchantArmor",false);
// level 21
CMLib.ableMapper().addCharAbilityMapping(ID(),21,"Spell_Command",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),21,"Spell_Immunity",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),21,"Spell_SummonEnemy",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),21,"Spell_MassHaste",false);
// level 22
CMLib.ableMapper().addCharAbilityMapping(ID(),22,"Spell_Disenchant",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),22,"Spell_MajorGlobe",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),22,"Spell_Hungerless",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),22,"Spell_MeteorStorm",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),22,"Spell_EnchantWeapon",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),22,"Spell_DetectSentience",false);
// level 23
CMLib.ableMapper().addCharAbilityMapping(ID(),23,"Spell_Dragonfire",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),23,"Spell_MindBlock",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),23,"Spell_Cogniportive",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),23,"Spell_TimeStop",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),23,"Spell_CombatPrecognition",false);
// level 24
CMLib.ableMapper().addCharAbilityMapping(ID(),24,"Spell_Delay",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),24,"Spell_Frailty",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),24,"Spell_Boomerang",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),24,"Spell_Thirstless",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),24,"Spell_SummonFlyer",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),24,"Spell_Anchor",false);
// level 25
CMLib.ableMapper().addCharAbilityMapping(ID(),25,"Spell_SpellTurning",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),25,"Spell_Disintegrate",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),25,"Spell_DemonGate",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),25,"Spell_MassFly",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),25,"Spell_Geas",false);
// level 30
if(ID().equals(baseClass()))
CMLib.ableMapper().addCharAbilityMapping(ID(),30,"Spell_Spellbinding",true);
}
public int availabilityCode(){return Area.THEME_FANTASY;}
public String statQualifications(){return "Intelligence 9+";}
public boolean qualifiesForThisClass(MOB mob, boolean quiet)
{
if(mob.baseCharStats().getStat(CharStats.STAT_INTELLIGENCE)<=8)
{
if(!quiet)
mob.tell("You need at least a 9 Intelligence to become a Mage.");
return false;
}
if(!(mob.charStats().getMyRace().racialCategory().equals("Human"))
&& !(mob.charStats().getMyRace().racialCategory().equals("Elf"))
&& !(mob.charStats().getMyRace().racialCategory().equals("Gith"))
&& !(mob.charStats().getMyRace().racialCategory().equals("Dragon"))
&& !(mob.charStats().getMyRace().racialCategory().equals("Humanoid"))
&& !(mob.charStats().getMyRace().racialCategory().equals("Illithid"))
&& !(mob.charStats().getMyRace().racialCategory().equals("Gnome"))
&& !(mob.charStats().getMyRace().racialCategory().equals("Fairy-kin"))
&& !(mob.charStats().getMyRace().racialCategory().equals("HalfElf")))
{
if(!quiet)
mob.tell("You need to be Human, Elf, Gnome, or Half Elf to be a Mage.");
return false;
}
return super.qualifiesForThisClass(mob,quiet);
}
public void grantAbilities(MOB mob, boolean isBorrowedClass)
{
super.grantAbilities(mob,isBorrowedClass);
Vector grantable=new Vector();
int level=mob.charStats().getClassLevel(this);
int numSpells=3;
if(level<8)
numSpells=3;
else
if(level<19)
numSpells=2;
else
numSpells=1;
for(Enumeration a=CMClass.abilities();a.hasMoreElements();)
{
Ability A=(Ability)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_SPELL)))
{if (!grantable.contains(A.ID())) grantable.addElement(A.ID());}
}
for(int a=0;a<mob.numLearnedAbilities();a++)
{
Ability A=mob.fetchAbility(a);
if(grantable.contains(A.ID()))
{
grantable.remove(A.ID());
numSpells--;
}
}
for(int i=0;i<numSpells;i++)
{
if(grantable.size()==0) break;
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);
}
}
}
public Vector outfit(MOB myChar)
{
if(outfitChoices==null)
{
outfitChoices=new Vector();
Weapon w=CMClass.getWeapon("Quarterstaff");
outfitChoices.addElement(w);
}
return outfitChoices;
}
}