use of pcgen.core.spell.Spell in project pcgen by PCGen.
the class KnownspellsTokenTest method testUnparseMultTypeLevel.
@Test
public void testUnparseMultTypeLevel() throws PersistenceLayerException {
CDOMGroupRef<Spell> cool = primaryContext.getReferenceContext().getCDOMTypeReference(Spell.class, "Cool");
primaryProf.addToListFor(ListKey.KNOWN_SPELLS, new KnownSpellIdentifier(cool, 4));
CDOMGroupRef<Spell> awesome = primaryContext.getReferenceContext().getCDOMTypeReference(Spell.class, "Awesome");
primaryProf.addToListFor(ListKey.KNOWN_SPELLS, new KnownSpellIdentifier(awesome, 7));
String[] sap = getToken().unparse(primaryContext, primaryProf);
expectSingle(sap, "TYPE=Awesome,LEVEL=7|TYPE=Cool,LEVEL=4");
}
use of pcgen.core.spell.Spell in project pcgen by PCGen.
the class KnownspellsTokenTest method testUnparseMultiple.
@Test
public void testUnparseMultiple() throws PersistenceLayerException {
Spell fireball = primaryContext.getReferenceContext().constructCDOMObject(Spell.class, "Fireball");
Spell bolt = primaryContext.getReferenceContext().constructCDOMObject(Spell.class, "Lightning Bolt");
CDOMDirectSingleRef<Spell> ref = CDOMDirectSingleRef.getRef(fireball);
primaryProf.addToListFor(ListKey.KNOWN_SPELLS, new KnownSpellIdentifier(ref, null));
CDOMDirectSingleRef<Spell> ref2 = CDOMDirectSingleRef.getRef(bolt);
primaryProf.addToListFor(ListKey.KNOWN_SPELLS, new KnownSpellIdentifier(ref2, null));
String[] a = getToken().unparse(primaryContext, primaryProf);
expectSingle(a, "Fireball" + getJoinCharacter() + "Lightning Bolt");
}
use of pcgen.core.spell.Spell in project pcgen by PCGen.
the class KnownspellsTokenTest method testUnparseOne.
@Test
public void testUnparseOne() throws PersistenceLayerException {
Spell fireball = primaryContext.getReferenceContext().constructCDOMObject(Spell.class, "Fireball");
CDOMDirectSingleRef<Spell> ref = CDOMDirectSingleRef.getRef(fireball);
primaryProf.addToListFor(ListKey.KNOWN_SPELLS, new KnownSpellIdentifier(ref, null));
String[] a = getToken().unparse(primaryContext, primaryProf);
expectSingle(a, "Fireball");
}
use of pcgen.core.spell.Spell in project pcgen by PCGen.
the class KnownspellsTokenTest method testRoundRobinTestEqualThreeLevel.
@Test
public void testRoundRobinTestEqualThreeLevel() throws PersistenceLayerException {
if (isTypeLegal()) {
Spell b = construct(primaryContext, "TestWP3");
b.addToListFor(ListKey.TYPE, Type.getConstant("TestAltType"));
b.addToListFor(ListKey.TYPE, Type.getConstant("TestThirdType"));
b.addToListFor(ListKey.TYPE, Type.getConstant("TestType"));
Spell d = construct(secondaryContext, "TestWP3");
d.addToListFor(ListKey.TYPE, Type.getConstant("TestAltType"));
d.addToListFor(ListKey.TYPE, Type.getConstant("TestThirdType"));
d.addToListFor(ListKey.TYPE, Type.getConstant("TestType"));
runRoundRobin("LEVEL=2|TYPE=TestAltType.TestThirdType.TestType,LEVEL=3");
}
}
use of pcgen.core.spell.Spell in project pcgen by PCGen.
the class NPCGenerator method generate.
/**
* Generate a new NPC
*
* @param aPC The PlayerCharacter to fill in options for
* @param align Alignment options to choose from
* @param aRace Race options to choose from
* @param aGender Gender options to choose from
* @param classList <tt>List</tt> of class options to choose from
* @param levels <tt>List</tt> of level choices
* @param aRollMethod the RollMethod to use for stats
*/
public void generate(final PlayerCharacter aPC, final AlignGeneratorOption align, final RaceGeneratorOption aRace, final GenderGeneratorOption aGender, final List<ClassGeneratorOption> classList, final List<LevelGeneratorOption> levels, final RollMethod aRollMethod) {
// Force a more quiet process
ChooserFactory.pushChooserClassname(//$NON-NLS-1$
"pcgen.util.chooser.RandomChooser");
boolean tempShowHP = SettingsHandler.getShowHPDialogAtLevelUp();
SettingsHandler.setShowHPDialogAtLevelUp(false);
int tempChoicePref = UIPropertyContext.getSingleChoiceAction();
UIPropertyContext.setSingleChoiceAction(Constants.CHOOSER_SINGLE_CHOICE_METHOD_SELECT_EXIT);
try {
final int MAX_RETRIES = 5;
for (int i = 0; i < MAX_RETRIES; i++) {
PCAlignment randAlign = getAlignment(align);
if (randAlign != null) {
Logging.debugPrint(//$NON-NLS-1$//$NON-NLS-2$
"NPCGenerator: Selected " + randAlign + " for alignment " + align);
aPC.setAlignment(randAlign);
}
final Race r = getRace(aRace);
if (r == null) {
//$NON-NLS-1$
Logging.debugPrint("NPCGenerator: Got null race. Retrying.");
continue;
}
//$NON-NLS-1$ //$NON-NLS-2$
Logging.debugPrint("NPCGenerator: Selected " + r + " for race " + aRace);
if (r.qualifies(aPC, r)) {
//$NON-NLS-1$
Logging.debugPrint("NPCGenerator: PC qualifies for race " + r);
aPC.setRace(r);
break;
}
}
if (aPC.getRace() == Globals.s_EMPTYRACE) {
Logging.errorPrint("Unable to select race");
return;
}
final Gender gender = getGender(aGender);
//$NON-NLS-1$ //$NON-NLS-2$
Logging.debugPrint("NPCGenerator: Selecting " + gender + " for gender " + aGender);
aPC.setGender(gender);
boolean doneRacialClasses = false;
for (int i = 0; i < classList.size(); i++) {
int numLevels = getLevel(levels.get(i));
//$NON-NLS-1$ //$NON-NLS-2$
Logging.debugPrint("NPCGenerator: Selecting " + numLevels + " for level " + levels.get(i));
PCClass aClass = null;
if (!doneRacialClasses && aPC.hasClass()) {
aClass = aPC.getClassList().get(0);
numLevels = aPC.getLevel(aClass);
doneRacialClasses = true;
i--;
} else {
doneRacialClasses = true;
for (; ; ) {
aClass = getClass(classList.get(i));
if (aClass == null) {
break;
}
if (aClass.getSafe(ObjectKey.VISIBILITY).equals(Visibility.DEFAULT) && aClass.qualifies(aPC, aClass)) {
//$NON-NLS-1$ //$NON-NLS-2$
Logging.debugPrint("NPCGenerator: Selecting " + aClass + " for class " + classList.get(i));
break;
}
// TODO Remove a failed class from the list.
Logging.errorPrint("Counld not add a level of " + aClass);
aClass = null;
break;
}
}
if (aClass == null) {
continue;
}
final PCClass classCopy = aClass.clone();
if (classCopy.containsListFor(ListKey.SUB_CLASS)) {
selectSubClass(aPC, classCopy);
}
if (i == 0) {
generateStats(aPC, classCopy, aRollMethod);
selectDeity(aPC, classCopy);
}
int highestSpellLevel = aPC.getSpellSupport(aClass).getHighestLevelSpell(aPC);
final int[] selectedSpells = new int[highestSpellLevel + 1];
for (int k = 0; k < highestSpellLevel; k++) {
selectedSpells[k] = 0;
}
final int[] bonusSpells = new int[highestSpellLevel + 1];
for (int k = 0; k < highestSpellLevel; k++) {
bonusSpells[k] = 0;
}
// Make a copy of the list because we are going to modify it.
WeightedCollection<SkillChoice> skillList = new WeightedCollection<>(getSkillWeights(classCopy, aPC));
WeightedCollection<Ability> featList = new WeightedCollection<>(getFeatWeights(classCopy));
for (int j = 0; j < numLevels; j++) {
if (i >= 0) {
aPC.incrementClassLevel(1, classCopy, true);
}
final PCClass pcClass = aPC.getClassKeyed(classCopy.getKeyName());
selectSkills(aPC, skillList, pcClass, j + 1);
selectFeats(aPC, featList);
selectDomains(aPC, pcClass);
if (pcClass.get(FactKey.valueOf("SpellType")) != null) {
// spells of some sort (known or prepared).
if (aPC.getSpellSupport(pcClass).hasKnownList() || aPC.getSpellSupport(pcClass).hasKnownSpells(aPC)) {
//$NON-NLS-1$
Logging.debugPrint("NPCGenerator: known spells to select");
for (int lvl = 0; lvl <= highestSpellLevel; ++lvl) {
if (aPC.availableSpells(lvl, pcClass, Globals.getDefaultSpellBook(), true, true)) {
final int a = aPC.getSpellSupport(pcClass).getKnownForLevel(lvl, aPC);
//final int bonus = aPC.getSpellSupport(pcClass).getSpecialtyKnownForLevel(lvl, aPC);
//$NON-NLS-1$ //$NON-NLS-2$
Logging.debugPrint("NPCGenerator: " + a + "known spells to select");
final WeightedCollection<Spell> spellChoices = getKnownSpellWeights(aPC, pcClass, lvl);
final int numToSelect = a - selectedSpells[lvl];
for (int sp = 0; sp < numToSelect; sp++) {
selectSpell(aPC, pcClass, null, Globals.getDefaultSpellBook(), spellChoices, lvl);
selectedSpells[lvl]++;
}
}
}
} else {
// Prepared spells?
//$NON-NLS-1$
Logging.debugPrint("NPCGenerator: prepared spells to select");
aPC.addSpellBook("Prepared Spells");
for (int lvl = 0; lvl <= highestSpellLevel; ++lvl) {
final int castTot = aPC.getSpellSupport(pcClass).getCastForLevel(lvl, "Prepared Spells", true, true, aPC);
final int castNon = aPC.getSpellSupport(pcClass).getCastForLevel(lvl, "Prepared Spells", false, true, aPC);
final int castSpec = castTot - castNon;
//$NON-NLS-1$ //$NON-NLS-2$
Logging.debugPrint("NPCGenerator: " + castTot + "+" + castSpec + " prepared spells to select");
if (castSpec - bonusSpells[lvl] > 0) {
selectDomainSpell(aPC, pcClass, lvl);
bonusSpells[lvl]++;
}
if (castTot > 0) {
final WeightedCollection<Spell> spellChoices = getPreparedSpellWeights(aPC, pcClass, lvl);
final int numToSelect = castNon - selectedSpells[lvl];
for (int sp = 0; sp < numToSelect; sp++) {
selectSpell(aPC, pcClass, null, "Prepared Spells", spellChoices, lvl);
selectedSpells[lvl]++;
}
}
}
}
}
}
}
//$NON-NLS-1$
final String randBioString = "EYES.HAIR.SKIN.HT.WT.AGE.";
aPC.getBioSet().randomize(randBioString, aPC);
final List<String> globalHairStyleList = SystemCollections.getUnmodifiableHairStyleList();
aPC.setPCAttribute(PCAttribute.HAIRSTYLE, globalHairStyleList.get(RandomUtil.getRandomInt(globalHairStyleList.size())));
final List<String> speechList = SystemCollections.getUnmodifiableSpeechList();
aPC.setPCAttribute(PCAttribute.SPEECHTENDENCY, speechList.get(RandomUtil.getRandomInt(speechList.size())));
final List<String> globalPhobiaList = SystemCollections.getUnmodifiablePhobiaList();
aPC.setPCAttribute(PCAttribute.PHOBIAS, globalPhobiaList.get(RandomUtil.getRandomInt(globalPhobiaList.size())));
final List<String> globalInterestsList = SystemCollections.getUnmodifiableInterestsList();
aPC.setPCAttribute(PCAttribute.INTERESTS, globalInterestsList.get(RandomUtil.getRandomInt(globalInterestsList.size())));
final List<String> globalPhraseList = SystemCollections.getUnmodifiablePhraseList();
aPC.setPCAttribute(PCAttribute.CATCHPHRASE, globalPhraseList.get(RandomUtil.getRandomInt(globalPhraseList.size())));
final List<String> globalTraitList = SystemCollections.getUnmodifiableTraitList();
// TODO: it is possible for trait1 == trait2
aPC.setPCAttribute(PCAttribute.PERSONALITY1, globalTraitList.get(RandomUtil.getRandomInt(globalTraitList.size())));
aPC.setPCAttribute(PCAttribute.PERSONALITY2, globalTraitList.get(RandomUtil.getRandomInt(globalTraitList.size())));
final List<String> globalCityList = SystemCollections.getUnmodifiableCityList();
aPC.setPCAttribute(PCAttribute.RESIDENCE, globalCityList.get(RandomUtil.getRandomInt(globalCityList.size())));
final List<String> globalLocationList = SystemCollections.getUnmodifiableLocationList();
aPC.setPCAttribute(PCAttribute.LOCATION, globalLocationList.get(RandomUtil.getRandomInt(globalLocationList.size())));
final List<String> globalBirthplaceList = SystemCollections.getUnmodifiableBirthplaceList();
aPC.setPCAttribute(PCAttribute.BIRTHPLACE, globalBirthplaceList.get(RandomUtil.getRandomInt(globalBirthplaceList.size())));
//TODO: Link in with the doomsday book name generator
// final Names nameGen = Names.getInstance();
// nameGen.init(aNameChoice, aPC);
// aPC.setName(nameGen.getRandomName());
} catch (Exception e) {
Logging.errorPrint("Problem generation NPC", e);
} finally {
SettingsHandler.setShowHPDialogAtLevelUp(tempShowHP);
UIPropertyContext.setSingleChoiceAction(tempChoicePref);
ChooserFactory.popChooserClassname();
}
}
Aggregations