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.core.collections.*;
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.Libraries.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 2003-2019 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 Artisan extends StdCharClass
{
@Override
public String ID()
{
return "Artisan";
}
private final static String localizedStaticName = CMLib.lang().L("Artisan");
@Override
public String name()
{
return localizedStaticName;
}
@Override
public String baseClass()
{
return "Commoner";
}
@Override
public int getBonusPracLevel()
{
return 2;
}
@Override
public int getBonusAttackLevel()
{
return -1;
}
@Override
public int getAttackAttribute()
{
return CharStats.STAT_WISDOM;
}
@Override
public int getLevelsPerBonusDamage()
{
return 30;
}
@Override
public String getHitPointsFormula()
{
return "((@x6<@x7)/6)+(1*(1?5))";
}
@Override
public String getManaFormula()
{
return "((@x4<@x5)/10)+(1*(1?2))";
}
@Override
public int allowedArmorLevel()
{
return CharClass.ARMOR_CLOTH;
}
@Override
public int allowedWeaponLevel()
{
return CharClass.WEAPONS_DAGGERONLY;
}
private final Set<Integer> disallowedWeapons = buildDisallowedWeaponClasses();
@Override
protected Set<Integer> disallowedWeaponClasses(final MOB mob)
{
return disallowedWeapons;
}
@Override
public int availabilityCode()
{
return Area.THEME_FANTASY;
}
public Artisan()
{
super();
for(final int i : CharStats.CODES.BASECODES())
maxStatAdj[i]=4;
}
@Override
public void initializeClass()
{
super.initializeClass();
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Proficiency_EdgedWeapon",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Skill_Recall",25,true);
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Searching",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"FireBuilding",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Skill_Swim",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Bandaging",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"ClanCrafting",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Skill_Write",false);
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Foraging",false,"+WIS 9");
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Drilling",false,"+INT 9");
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Hunting",false,"+DEX 9");
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Butchering",false,"+INT 9");
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Fishing",false,"+DEX 9");
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Chopping",false,"+CON 9");
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Mining",false,"+STR 9");
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Digging",false,"+STR 9");
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Skill_WildernessLore",false,CMParms.parseSemicolons("Searching(75);Foraging(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Skill_Autoswim",false,CMParms.parseSemicolons("Skill_Swim(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Farming",false,CMParms.parseSemicolons("Foraging(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"FoodPreserving",false,CMParms.parseSemicolons("Foraging(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Shearing",false,CMParms.parseSemicolons("Foraging(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Familiarity_EdgedWeapon",false,CMParms.parseSemicolons("Proficiency_EdgedWeapon(75);Drilling(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Speculate",false,CMParms.parseSemicolons("Foraging(75);Drilling(75);Hunting(75);Fishing(75);Chopping(75);Mining(75);Digging(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Sculpting",false,CMParms.parseSemicolons("Mining(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Smelting",false,CMParms.parseSemicolons("FireBuilding(75);Mining(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Pottery",false,CMParms.parseSemicolons("Digging(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Masonry",false,CMParms.parseSemicolons("Mining(75);Digging(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Composting",false,CMParms.parseSemicolons("Farming(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"FoodPrep",false,CMParms.parseSemicolons("FoodPreserving(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Cooking",false,CMParms.parseSemicolons("FoodPreserving(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Baking",false,CMParms.parseSemicolons("FoodPreserving(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Distilling",false,CMParms.parseSemicolons("FoodPreserving(75);Drilling(75);FireBuilding(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Landscaping",false,CMParms.parseSemicolons("Composting",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),30,"MasterFarming",false,CMParms.parseSemicolons("Landscaping(75);Farming(100)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Herbology",false,CMParms.parseSemicolons("FoodPrep(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Textiling",false,CMParms.parseSemicolons("Shearing(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Gardening",false,CMParms.parseSemicolons("Composting(75);Herbology(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Floristry",false,CMParms.parseSemicolons("Skill_WildernessLore(75);Herbology(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),30,"MasterForaging",false,CMParms.parseSemicolons("Foraging(100);Distilling(75);Herbology(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),30,"MasterBaking",false,CMParms.parseSemicolons("Baking(100);MasterFarming(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),30,"MasterFoodPrep",false,CMParms.parseSemicolons("FoodPrep(100);Gardening(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Proficiency_Staff",false,CMParms.parseSemicolons("Fishing(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"FishLore",false,CMParms.parseSemicolons("Fishing(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Irrigation",false,CMParms.parseSemicolons("Composting(75);FishLore(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),30,"MasterGardening",false,CMParms.parseSemicolons("Gardening(100);MasterFoodPrep(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Tanning",false,CMParms.parseSemicolons("Butchering(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"MeatCuring",false,CMParms.parseSemicolons("Butchering(75);Fishing(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Carpentry",false,CMParms.parseSemicolons("Chopping(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Skill_Climb",false,CMParms.parseSemicolons("Chopping(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Skill_Autoclimb",false,CMParms.parseSemicolons("Skill_Climb(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Proficiency_Axe",false,CMParms.parseSemicolons("Chopping(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"ScrimShaw",false,CMParms.parseSemicolons("Butchering(75);Sculpting(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Proficiency_BluntWeapon",false,CMParms.parseSemicolons("Sculpting(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Dyeing",false,CMParms.parseSemicolons("Textiling(75);Tanning(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Tailoring",false,CMParms.parseSemicolons("Textiling(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"CageBuilding",false,CMParms.parseSemicolons("Carpentry(75);Hunting(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"AnimalHusbandry",false,CMParms.parseSemicolons("Shearing(75);Bandaging(75);CageBuilding(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Branding",false,CMParms.parseSemicolons("Shearing(75);Bandaging(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Taxidermy",false,CMParms.parseSemicolons("Hunting(75);Tanning(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),30,"MasterCooking",false,CMParms.parseSemicolons("Cooking(100);MasterForaging(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"LeatherWorking",false,CMParms.parseSemicolons("Hunting(75);Tanning(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Baiting",false,CMParms.parseSemicolons("FishLore(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Trawling",false,CMParms.parseSemicolons("FishLore(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),30,"MasterButchering",false,CMParms.parseSemicolons("Butchering(100);Taxidermy(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Cobbling",false,CMParms.parseSemicolons("LeatherWorking(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Familiarity_Staff",false,CMParms.parseSemicolons("Proficiency_Staff(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Skill_Trip",false,CMParms.parseSemicolons("Familiarity_Staff(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),30,"MasterFishing",false,CMParms.parseSemicolons("Fishing(100);Baiting(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Skill_Stability",false,CMParms.parseSemicolons("Trawling(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Skill_Autocrawl",false,CMParms.parseSemicolons("Skill_Stability(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),30,"MasterTrawling",false,CMParms.parseSemicolons("Trawling(100);MasterFishing(75);Skill_Stability(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"PaperMaking",false,CMParms.parseSemicolons("Carpentry(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Fletching",false,CMParms.parseSemicolons("Carpentry(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Wainwrighting",false,CMParms.parseSemicolons("Carpentry(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"InstrumentMaking",false,CMParms.parseSemicolons("Carpentry(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Familiarity_BluntWeapon",false,CMParms.parseSemicolons("Proficiency_BluntWeapon(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Blacksmithing",false,CMParms.parseSemicolons("Smelting(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Construction",false,CMParms.parseSemicolons("Carpentry(75);Blacksmithing(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Familiarity_Shield",false,CMParms.parseSemicolons("Carpentry(75);Blacksmithing(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"GlassBlowing",false,CMParms.parseSemicolons("Pottery(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"JewelMaking",false,CMParms.parseSemicolons("Pottery(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Siegecraft",false,CMParms.parseSemicolons("Fletching(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Boatwright",false,CMParms.parseSemicolons("Wainwrighting(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),30,"MasterChopping",false,CMParms.parseSemicolons("Chopping(100);Siegecraft(75);Boatwright(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Shipwright",false,CMParms.parseSemicolons("Boatwright(75);Trawling(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),7,"ClanShipwrighting",false,CMParms.parseSemicolons("Shipwright(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Weaving",false,CMParms.parseSemicolons("Chopping(75);Skill_WildernessLore(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"PlantLore",false,CMParms.parseSemicolons("Herbology(75);Floristry(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Skill_FindHome",false,CMParms.parseSemicolons("Construction(75);Masonry(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Skill_FindShip",false,CMParms.parseSemicolons("Fishing(75);Shipwright(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Proficiency_Hammer",false,CMParms.parseSemicolons("Blacksmithing(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Familiarity_Hammer",false,CMParms.parseSemicolons("Proficiency_Hammer(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Fighter_HammerRing",false,CMParms.parseSemicolons("Familiarity_Hammer(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),30,"MasterShearing",false,CMParms.parseSemicolons("Shearing(100);AnimalHusbandry(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Skill_Cage",false,CMParms.parseSemicolons("AnimalHusbandry(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Skill_MountedCombat",false,CMParms.parseSemicolons("AnimalHusbandry(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Embroidering",false,CMParms.parseSemicolons("Skill_Write(50);Tailoring(75);Leatherworking(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),30,"MasterFloristry",false,CMParms.parseSemicolons("Floristry(100);Painting(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),30,"MasterHerbology",false,CMParms.parseSemicolons("Herbology(100);MasterCooking(75);MasterFoodPrep(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Thief_Lore",false,CMParms.parseSemicolons("Skill_Write(75);PaperMaking(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Proficiency_Ranged",false,CMParms.parseSemicolons("Fletching(100)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Familiarity_Ranged",false,CMParms.parseSemicolons("Proficiency_Ranged(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Fighter_CoverDefence",false,CMParms.parseSemicolons("Proficiency_Ranged(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Skill_WandUse",false,CMParms.parseSemicolons("Speculate(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),30,"MasterDrilling",false,CMParms.parseSemicolons("Drilling(100);Speculate(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"StaffMaking",false,CMParms.parseSemicolons("Familiarity_Staff(75);Thief_Lore(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"WandMaking",false,CMParms.parseSemicolons("Skill_WandUse(75);Thief_Lore(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Rodsmithing",false,CMParms.parseSemicolons("Skill_WandUse(75);Thief_Lore(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Proficiency_Natural",false,CMParms.parseSemicolons("AnimalHusbandry(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Fighter_Kick",false,CMParms.parseSemicolons("Proficiency_Natural(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Skill_Dodge",false,CMParms.parseSemicolons("Proficiency_Natural(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Weaponsmithing",false,CMParms.parseSemicolons("Blacksmithing(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Armorsmithing",false,CMParms.parseSemicolons("Blacksmithing(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"LockSmith",false,CMParms.parseSemicolons("Blacksmithing(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Scrapping",false,CMParms.parseSemicolons("Armorsmithing(75);LeatherWorking(75);Tailoring(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),30,"MasterTailoring",false,CMParms.parseSemicolons("Tailoring(100);Scrapping(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),30,"MasterLeatherWorking",false,CMParms.parseSemicolons("LeatherWorking(100);Scrapping(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),30,"MasterArmorsmithing",false,CMParms.parseSemicolons("Armorsmithing(100);Scrapping(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Costuming",false,CMParms.parseSemicolons("Tailoring(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),30,"MasterDistilling",false,CMParms.parseSemicolons("Distilling(100);Herbology(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Thief_Appraise",false,CMParms.parseSemicolons("JewelMaking(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Lacquerring",false,CMParms.parseSemicolons("JewelMaking(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Proficiency_Sword",false,CMParms.parseSemicolons("Weaponsmithing(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Skill_AttackHalf",false,CMParms.parseSemicolons("Proficiency_Sword(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Familiarity_Sword",false,CMParms.parseSemicolons("Proficiency_Sword(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Skill_Parry",false,CMParms.parseSemicolons("Proficiency_Sword(100)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),30,"MasterWeaponsmithing",false,CMParms.parseSemicolons("Weaponsmithing(100);Familiarity_Sword(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Engraving",false,CMParms.parseSemicolons("Skill_Write(50);Blacksmithing(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),30,"MasterCostuming",false,CMParms.parseSemicolons("Costuming(100);PaperMaking(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Merchant",false,CMParms.parseSemicolons("Engraving(75);Embroidering(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Skill_Haggle",false,CMParms.parseSemicolons("Merchant(75);Thief_Appraise(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Excavation",false,CMParms.parseSemicolons("Masonry(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),30,"MasterMining",false,CMParms.parseSemicolons("Mining(100);Excavation(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),30,"MasterDigging",false,CMParms.parseSemicolons("Digging(100);Excavation(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Painting",false,CMParms.parseSemicolons("Lacquerring(75);Dyeing(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Skill_Warrants",false,CMParms.parseSemicolons("Distilling(75);Painting(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Familiarity_Axe",false,CMParms.parseSemicolons("Proficiency_Axe(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"SmokeRings",false,CMParms.parseSemicolons("Herbology(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Decorating",false,CMParms.parseSemicolons("Painting(75);Construction(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Thief_StrategicRetreat",false,CMParms.parseSemicolons("Skill_Autoclimb(75);Skill_Autoswim(75);Skill_Autocrawl(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),1,"Skill_ShipLore",false,CMParms.parseSemicolons("Shipwright(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),60,"LegendaryWeaponsmithing",false,CMParms.parseSemicolons("MasterWeaponsmithing(100)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),30,"MasterDyeing",false,CMParms.parseSemicolons("Dyeing(100);Herbology(75)",true));
CMLib.ableMapper().addCharAbilityMapping(ID(),30,"MasterLacquerring",false,CMParms.parseSemicolons("Lacquerring(100);Herbology(75)",true));
}
@Override
public void startCharacter(final MOB mob, final boolean isBorrowedClass, final boolean verifyOnly)
{
super.startCharacter(mob, isBorrowedClass, verifyOnly);
if(mob.fetchEffect("ArtisanalFocus")==null)
{
final Ability A=CMClass.getAbility("ArtisanalFocus");
if(A!=null)
{
A.setSavable(true);
mob.addNonUninvokableEffect(A);
}
}
}
@Override
public void executeMsg(final Environmental myHost, final CMMsg msg)
{
if((msg.source() == myHost)
&&(msg.source().charStats().getCurrentClass() == this))
{
if((msg.targetMinor() == CMMsg.TYP_ITEMGENERATED)
&&(msg.target() != null)
&&(msg.tool() instanceof Ability)
&&(msg.value() > 0)
&&((!(msg.target() instanceof DoorKey))||(msg.tool().ID().equals("LockSmith")))
&&(((((Ability)msg.tool()).classificationCode() & Ability.ALL_DOMAINS) == Ability.DOMAIN_CRAFTINGSKILL)
||((((Ability)msg.tool()).classificationCode() & Ability.ALL_DOMAINS) == Ability.DOMAIN_EPICUREAN)
||((((Ability)msg.tool()).classificationCode() & Ability.ALL_DOMAINS) == Ability.DOMAIN_BUILDINGSKILL)))
{
CMLib.leveler().postExperience(msg.source(),null,null,msg.value(),false);
}
else
if((msg.targetMinor() == CMMsg.TYP_RECIPELEARNED)
&&(msg.target() != null)
&&(msg.tool() instanceof Ability)
&&((((Ability)msg.tool()).classificationCode() & Ability.ALL_DOMAINS) == Ability.DOMAIN_CRAFTINGSKILL)
&&(msg.value() > 0))
{
final Map<String,Object> persMap = msg.source().playerStats().getClassVariableMap(this);
if(persMap != null)
{
final String key = "LAST_DATE_FOR_"+msg.tool().ID().toUpperCase().trim();
long[] lastTime = (long[])persMap.get(key);
if(lastTime == null)
{
lastTime = new long[1];
persMap.put(key, lastTime);
}
final Area homeA=CMLib.map().areaLocation(msg.source().getStartRoom());
final TimeClock homeL = (homeA == null) ? null : homeA.getTimeObj();
if((homeL!=null)
&&((homeL.toHoursSinceEpoc() - lastTime[0])>0))
{
lastTime[0] = homeL.toHoursSinceEpoc();
CMLib.leveler().postExperience(msg.source(), null, null, msg.value(), false);
}
}
}
}
}
@Override
public boolean tick(final Tickable ticking, final int tickID)
{
if((tickID==Tickable.TICKID_MOB)&&(ticking instanceof MOB))
{
final MOB mob=(MOB)ticking;
if(ID().equals(mob.charStats().getCurrentClass().ID())&&(CMLib.dice().rollPercentage()<20))
{
int exp=0;
for(final Enumeration<Ability> a=mob.effects();a.hasMoreElements();)
{
final Ability A=a.nextElement();
if((A!=null)
&&(!A.isAutoInvoked())
&&((A.classificationCode()&Ability.ALL_ACODES)==Ability.ACODE_COMMON_SKILL)
&&(mob.isMine(A)))
exp++;
}
if(exp>0)
{
exp=exp/2;
if(exp<1)
exp=1;
CMLib.leveler().postExperience(mob,null,null,exp,false);
}
}
}
return super.tick(ticking,tickID);
}
private final String[] raceRequiredList = new String[] { "All" };
@Override
public String[] getRequiredRaceList()
{
return raceRequiredList;
}
@SuppressWarnings("unchecked")
private final Pair<String,Integer>[] minimumStatRequirements=new Pair[]
{
new Pair<String,Integer>("Strength",Integer.valueOf(9)),
new Pair<String,Integer>("Dexterity",Integer.valueOf(9))
};
@Override
public Pair<String, Integer>[] getMinimumStatRequirements()
{
return minimumStatRequirements;
}
@Override
public List<Item> outfit(final MOB myChar)
{
if(outfitChoices==null)
{
final Weapon w=CMClass.getWeapon("Dagger");
if(w == null)
return new Vector<Item>();
outfitChoices=new Vector<Item>();
outfitChoices.add(w);
}
return outfitChoices;
}
@Override
public String getOtherBonusDesc()
{
return L("Gains experience when using common skills and no common skill limits.");
}
}