package com.planet_ink.coffee_mud.Races;
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.*;
public class FaerieDragon extends StdRace
{
public String ID(){ return "Faerie Dragon"; }
public String name(){ return "Faerie Dragon"; }
public int shortestMale(){return 12;}
public int shortestFemale(){return 14;}
public int heightVariance(){return 12;}
public int lightestWeight(){return 10;}
public int weightVariance(){return 15;}
public long forbiddenWornBits(){return Item.WORN_WIELD|Item.WORN_WAIST|Item.WORN_BACK|Item.WORN_ABOUT_BODY|Item.WORN_FEET|Item.WORN_HANDS;}
public String racialCategory(){return "Dragon";}
private String[]racialAbilityNames={"Spell_Invisibility","Spell_FaerieFire","WingFlying"};
private int[]racialAbilityLevels={5,5,1};
private int[]racialAbilityProficiencies={100,100,100};
private boolean[]racialAbilityQuals={false,false,false};
protected String[] racialAbilityNames(){return racialAbilityNames;}
protected int[] racialAbilityLevels(){return racialAbilityLevels;}
protected int[] racialAbilityProficiencies(){return racialAbilityProficiencies;}
protected boolean[] racialAbilityQuals(){return racialAbilityQuals;}
// an ey ea he ne ar ha to le fo no gi mo wa ta wi
private static final int[] parts={0 ,2 ,2 ,1 ,1 ,0 ,0 ,1 ,4 ,4 ,1 ,0 ,1 ,1 ,1 ,2 };
public int[] bodyMask(){return parts;}
private int[] agingChart={0,5,20,110,325,500,850,950,1050};
public int[] getAgingChart(){return agingChart;}
protected static Vector resources=new Vector();
public int availabilityCode(){return Area.THEME_FANTASY|Area.THEME_SKILLONLYMASK;}
public void affectEnvStats(Environmental affected, EnvStats affectableStats)
{
super.affectEnvStats(affected,affectableStats);
affectableStats.setSensesMask(affectableStats.sensesMask()|EnvStats.CAN_SEE_INFRARED);
if(!CMLib.flags().isSleeping(affected))
affectableStats.setDisposition(affectableStats.disposition()|EnvStats.IS_FLYING);
}
public void affectCharStats(MOB affectedMOB, CharStats affectableStats)
{
super.affectCharStats(affectedMOB, affectableStats);
affectableStats.setStat(CharStats.STAT_STRENGTH,affectableStats.getStat(CharStats.STAT_STRENGTH)-2);
affectableStats.setStat(CharStats.STAT_DEXTERITY,affectableStats.getStat(CharStats.STAT_DEXTERITY)+5);
affectableStats.setStat(CharStats.STAT_INTELLIGENCE,affectableStats.getStat(CharStats.STAT_INTELLIGENCE)+2);
}
public void startRacing(MOB mob, boolean verifyOnly)
{
super.startRacing(mob,verifyOnly);
if(!verifyOnly)
{
Ability A=CMClass.getAbility("Draconic");
if(A!=null)
{
mob.addAbility(A);
A.autoInvocation(mob);
if(mob.isMonster())
A.invoke(mob,mob,false,0);
}
}
}
public Weapon myNaturalWeapon()
{
if(naturalWeapon==null)
{
naturalWeapon=CMClass.getWeapon("StdWeapon");
naturalWeapon.setName("tiny talons");
naturalWeapon.setWeaponType(Weapon.TYPE_PIERCING);
}
return naturalWeapon;
}
public String healthText(MOB viewer, MOB mob)
{
double pct=(CMath.div(mob.curState().getHitPoints(),mob.maxState().getHitPoints()));
if(pct<.10)
return "^r" + mob.displayName(viewer) + "^r is raging in bloody pain!^N";
else
if(pct<.20)
return "^r" + mob.displayName(viewer) + "^r is covered in blood.^N";
else
if(pct<.30)
return "^r" + mob.displayName(viewer) + "^r is bleeding badly from lots of wounds.^N";
else
if(pct<.50)
return "^y" + mob.displayName(viewer) + "^y has some bloody wounds and gashed scales.^N";
else
if(pct<.60)
return "^p" + mob.displayName(viewer) + "^p has a few bloody wounds.^N";
else
if(pct<.70)
return "^p" + mob.displayName(viewer) + "^p is cut and bruised heavily.^N";
else
if(pct<.90)
return "^g" + mob.displayName(viewer) + "^g has a few bruises and scratched scales.^N";
else
if(pct<.99)
return "^g" + mob.displayName(viewer) + "^g has a few small bruises.^N";
else
return "^c" + mob.displayName(viewer) + "^c is in perfect health.^N";
}
public Vector myResources()
{
synchronized(resources)
{
if(resources.size()==0)
{
resources.addElement(makeResource
("a "+name().toLowerCase()+" claw",RawMaterial.RESOURCE_BONE));
for(int i=0;i<3;i++)
resources.addElement(makeResource
("a strip of "+name().toLowerCase()+" scales",RawMaterial.RESOURCE_SCALES));
for(int i=0;i<2;i++)
resources.addElement(makeResource
("a pound of "+name().toLowerCase()+" meat",RawMaterial.RESOURCE_MEAT));
resources.addElement(makeResource
("some "+name().toLowerCase()+" blood",RawMaterial.RESOURCE_BLOOD));
}
}
return resources;
}
}