Search in sources :

Example 1 with PreVariableParser

use of plugin.pretokens.parser.PreVariableParser in project pcgen by PCGen.

the class PreVarRoundRobin method setUp.

@Override
protected void setUp() throws Exception {
    super.setUp();
    TokenRegistration.register(new PreVariableParser());
    TokenRegistration.register(new PreVariableWriter());
}
Also used : PreVariableWriter(plugin.pretokens.writer.PreVariableWriter) PreVariableParser(plugin.pretokens.parser.PreVariableParser)

Example 2 with PreVariableParser

use of plugin.pretokens.parser.PreVariableParser in project pcgen by PCGen.

the class PreVariableParserTest method testNotEqual.

/**
	 * @throws Exception
	 */
@Test
public void testNotEqual() throws Exception {
    PreVariableParser parser = new PreVariableParser();
    Prerequisite prereq = parser.parse("VARNEQ", "Enraged,1", false, false);
    assertEquals("<prereq kind=\"var\" key=\"Enraged\" operator=\"NEQ\" operand=\"1\" >\n</prereq>\n", prereq.toString());
}
Also used : PreVariableParser(plugin.pretokens.parser.PreVariableParser) Prerequisite(pcgen.core.prereq.Prerequisite) Test(org.junit.Test)

Example 3 with PreVariableParser

use of plugin.pretokens.parser.PreVariableParser in project pcgen by PCGen.

the class PreVarTest method testMutipleNegative.

public void testMutipleNegative() throws Exception {
    final PlayerCharacter character = getCharacter();
    setPCStat(character, str, 10);
    setPCStat(character, dex, 14);
    character.calcActiveBonuses();
    PreVariableParser parser = new PreVariableParser();
    Prerequisite prereq = parser.parse("VAR", "abs(STR),1,abs(DEX),3", true, false);
    assertTrue("Test matches with no stats passing", PrereqHandler.passes(prereq, character, null));
    setPCStat(character, str, 12);
    character.calcActiveBonuses();
    assertTrue("Test matches with no stats passing", PrereqHandler.passes(prereq, character, null));
    setPCStat(character, dex, 16);
    character.calcActiveBonuses();
    assertFalse("Test should match now both stats pass", PrereqHandler.passes(prereq, character, null));
}
Also used : PlayerCharacter(pcgen.core.PlayerCharacter) PreVariableParser(plugin.pretokens.parser.PreVariableParser)

Example 4 with PreVariableParser

use of plugin.pretokens.parser.PreVariableParser in project pcgen by PCGen.

the class PCClassTest method testBypassClassPrereqs.

/**
	 * Test the interaction of prerequisites on PCClasses and bonuses and the
	 * Bypass Class Prereqs flag.
	 * @throws Exception
	 */
public void testBypassClassPrereqs() throws Exception {
    LoadContext context = Globals.getContext();
    // Setup class with prereqs and var based abilities with prereqs.
    final PreVariableParser parser = new PreVariableParser();
    final Prerequisite aPrereq = parser.parse("VARGTEQ", "Foo,1", false, false);
    final GameMode gameMode = SettingsHandler.getGame();
    RuleCheck aClassPreRule = gameMode.getModeContext().getReferenceContext().silentlyGetConstructedCDOMObject(RuleCheck.class, "CLASSPRE");
    if (aClassPreRule == null) {
        aClassPreRule = new RuleCheck();
        aClassPreRule.setName("CLASSPRE");
        gameMode.getModeContext().getReferenceContext().importObject(aClassPreRule);
    }
    aClassPreRule.setDefault(false);
    final PCClass aPrClass = new PCClass();
    aPrClass.setName("PreReqClass");
    aPrClass.put(StringKey.KEY_NAME, "KEY_PreReqClass");
    final BonusObj aBonus = Bonus.newBonus(context, "MISC|SR|10|PREVARGTEQ:Foo,2");
    if (aBonus != null) {
        aPrClass.addToListFor(ListKey.BONUS, aBonus);
    }
    aPrClass.addPrerequisite(aPrereq);
    final PCClass aQClass = new PCClass();
    aQClass.setName("QualClass");
    aQClass.put(StringKey.KEY_NAME, "KEY_QualClass");
    CDOMDirectSingleRef<PCClass> ref = CDOMDirectSingleRef.getRef(aPrClass);
    aQClass.addToListFor(ListKey.QUALIFY, new Qualifier(PCClass.class, ref));
    //aQClass.setQualifyString("KEY_PreReqClass|PreReqVar");
    final PCClass aNqClass = new PCClass();
    aNqClass.setName("NonQualClass");
    aNqClass.put(StringKey.KEY_NAME, "KEY_NonQualClass");
    aNqClass.put(VariableKey.getConstant("Foo"), FormulaFactory.ONE);
    aNqClass.getOriginalClassLevel(2).put(VariableKey.getConstant("Foo"), FormulaFactory.getFormulaFor(2));
    // Setup character without prereqs
    final PlayerCharacter character = getCharacter();
    // Test no prereqs and no bypass fails class and var
    assertFalse("PC with no prereqs should fail class qual test.", aPrClass.qualifies(character, aPrClass));
    assertEquals("PC with no prereqs should fail var qual test.", 0.0, aPrClass.getBonusTo("MISC", "SR", 1, character), 0.1);
    // Test no prereqs and bypass passes class and fails var
    aClassPreRule.setDefault(true);
    assertTrue("PC with no prereqs should pass class qual test when bypassing prereqs is on.", aPrClass.qualifies(character, aPrClass));
    assertEquals("PC with no prereqs should fail var qual test when bypass prereqs is on.", 0.0, aPrClass.getBonusTo("MISC", "SR", 1, character), 0.1);
    // Test prereqs and bypass pass class and var
    character.incrementClassLevel(1, aNqClass);
    assertTrue("PC with prereqs and bypass should pass class qual test.", aPrClass.qualifies(character, aPrClass));
    character.incrementClassLevel(1, aNqClass);
    assertEquals("PC with prereqs and bypass should pass var qual test.", 10.0, aPrClass.getBonusTo("MISC", "SR", 1, character), 0.1);
    // Test prereqs and no bypass passes class and var
    aClassPreRule.setDefault(false);
    assertTrue("PC with prereqs and no bypass should pass class qual test.", aPrClass.qualifies(character, aPrClass));
    assertEquals("PC with prereqs and no bypass should pass var qual test.", 10.0, aPrClass.getBonusTo("MISC", "SR", 1, character), 0.1);
}
Also used : BonusObj(pcgen.core.bonus.BonusObj) PreVariableParser(plugin.pretokens.parser.PreVariableParser) LoadContext(pcgen.rules.context.LoadContext) Qualifier(pcgen.cdom.reference.Qualifier) Prerequisite(pcgen.core.prereq.Prerequisite)

Example 5 with PreVariableParser

use of plugin.pretokens.parser.PreVariableParser in project pcgen by PCGen.

the class PCClassTest method setUp.

/**
	 * @see pcgen.AbstractCharacterTestCase#setUp()
	 */
@Override
protected void setUp() throws Exception {
    super.setUp();
    Campaign customCampaign = new Campaign();
    customCampaign.setName("Unit Test");
    customCampaign.setName("KEY_Unit Test");
    customCampaign.addToListFor(ListKey.DESCRIPTION, new Description("Unit Test data"));
    CampaignSourceEntry source;
    try {
        source = new CampaignSourceEntry(customCampaign, new URI("file:/" + getClass().getName() + ".java"));
    } catch (URISyntaxException e) {
        throw new UnreachableError(e);
    }
    // Create the monseter class type
    GameMode gamemode = SettingsHandler.getGame();
    gamemode.addClassType("Monster		CRFORMULA:0			ISMONSTER:YES	XPPENALTY:NO");
    gamemode.setSkillMultiplierLevels("4");
    // Create the humanoid class
    String classDef = "CLASS:Humanoid	KEY:KEY_Humanoid	HD:8		CLASSTYPE:Monster	STARTSKILLPTS:1	" + "MODTOSKILLS:NO	MONSKILL:6+INT	MONNONSKILLHD:1|PRESIZELTEQ:M	" + "MONNONSKILLHD:2|PRESIZEEQ:L";
    PCClassLoader classLoader = new PCClassLoader();
    LoadContext context = Globals.getContext();
    humanoidClass = classLoader.parseLine(context, null, classDef, source);
    Globals.getContext().getReferenceContext().importObject(humanoidClass);
    classDef = "CLASS:Nymph		KEY:KEY_Nymph	CLASSTYPE:Monster	HD:6	STARTSKILLPTS:6	MODTOSKILLS:YES	";
    classLoader = new PCClassLoader();
    nymphClass = classLoader.parseLine(context, null, classDef, source);
    Globals.getContext().getReferenceContext().importObject(nymphClass);
    CDOMDirectSingleRef<SizeAdjustment> mediumRef = CDOMDirectSingleRef.getRef(medium);
    CDOMDirectSingleRef<SizeAdjustment> largeRef = CDOMDirectSingleRef.getRef(large);
    // Create the large size mod
    // Create the BugBear race
    bugbearRace = new Race();
    bugbearRace.setName("Bugbear");
    bugbearRace.put(StringKey.KEY_NAME, "KEY_Bugbear");
    bugbearRace.put(FormulaKey.SIZE, new FixedSizeFormula(mediumRef));
    bugbearRace.addToListFor(ListKey.HITDICE_ADVANCEMENT, Integer.MAX_VALUE);
    bugbearRace.put(IntegerKey.INITIAL_SKILL_MULT, 1);
    Globals.getContext().getReferenceContext().importObject(bugbearRace);
    bigBugbearRace = new Race();
    bigBugbearRace.setName("BigBugbear");
    bigBugbearRace.put(StringKey.KEY_NAME, "KEY_BigBugbear");
    bigBugbearRace.put(FormulaKey.SIZE, new FixedSizeFormula(largeRef));
    bigBugbearRace.addToListFor(ListKey.HITDICE_ADVANCEMENT, Integer.MAX_VALUE);
    bigBugbearRace.put(IntegerKey.INITIAL_SKILL_MULT, 1);
    Globals.getContext().getReferenceContext().importObject(bigBugbearRace);
    // Create the Nymph race
    nymphRace = new Race();
    nymphRace.setName("Nymph");
    nymphRace.put(StringKey.KEY_NAME, "KEY_Nymph");
    nymphRace.put(FormulaKey.SIZE, new FixedSizeFormula(mediumRef));
    nymphRace.addToListFor(ListKey.HITDICE_ADVANCEMENT, Integer.MAX_VALUE);
    nymphRace.put(ObjectKey.MONSTER_CLASS, new LevelCommandFactory(CDOMDirectSingleRef.getRef(nymphClass), FormulaFactory.getFormulaFor(0)));
    Globals.getContext().getReferenceContext().importObject(nymphRace);
    // Setup class with prereqs and var based abilities with prereqs.
    PreVariableParser parser = new PreVariableParser();
    prereq = parser.parse("VARGTEQ", "Foo,1", false, false);
    classPreRule = new RuleCheck();
    classPreRule.setName("CLASSPRE");
    classPreRule.setDefault(false);
    gamemode.getModeContext().getReferenceContext().importObject(classPreRule);
    prClass = new PCClass();
    prClass.setName("PreReqClass");
    prClass.put(StringKey.KEY_NAME, "KEY_PreReqClass");
    final BonusObj aBonus = Bonus.newBonus(context, "MISC|SR|10|PREVARGTEQ:Foo,2");
    if (aBonus != null) {
        prClass.addToListFor(ListKey.BONUS, aBonus);
    }
    prClass.addPrerequisite(prereq);
    qClass = new PCClass();
    qClass.setName("QualClass");
    qClass.put(StringKey.KEY_NAME, "KEY_QualClass");
    CDOMDirectSingleRef<PCClass> ref = CDOMDirectSingleRef.getRef(prClass);
    qClass.addToListFor(ListKey.QUALIFY, new Qualifier(PCClass.class, ref));
    nqClass = new PCClass();
    nqClass.setName("NonQualClass");
    nqClass.put(StringKey.KEY_NAME, "KEY_NonQualClass");
    nqClass.put(VariableKey.getConstant("Foo"), FormulaFactory.ONE);
    nqClass.getOriginalClassLevel(2).put(VariableKey.getConstant("Foo"), FormulaFactory.getFormulaFor(2));
}
Also used : LevelCommandFactory(pcgen.cdom.content.LevelCommandFactory) BonusObj(pcgen.core.bonus.BonusObj) PreVariableParser(plugin.pretokens.parser.PreVariableParser) URISyntaxException(java.net.URISyntaxException) UnreachableError(pcgen.base.lang.UnreachableError) URI(java.net.URI) FixedSizeFormula(pcgen.cdom.formula.FixedSizeFormula) CampaignSourceEntry(pcgen.persistence.lst.CampaignSourceEntry) LoadContext(pcgen.rules.context.LoadContext) PCClassLoader(pcgen.persistence.lst.PCClassLoader) Qualifier(pcgen.cdom.reference.Qualifier)

Aggregations

PreVariableParser (plugin.pretokens.parser.PreVariableParser)11 Qualifier (pcgen.cdom.reference.Qualifier)3 PlayerCharacter (pcgen.core.PlayerCharacter)3 BonusObj (pcgen.core.bonus.BonusObj)3 Prerequisite (pcgen.core.prereq.Prerequisite)3 LoadContext (pcgen.rules.context.LoadContext)3 PreVariableWriter (plugin.pretokens.writer.PreVariableWriter)3 URI (java.net.URI)1 URISyntaxException (java.net.URISyntaxException)1 Test (org.junit.Test)1 UnreachableError (pcgen.base.lang.UnreachableError)1 LevelCommandFactory (pcgen.cdom.content.LevelCommandFactory)1 KnownSpellFacet (pcgen.cdom.facet.KnownSpellFacet)1 FixedSizeFormula (pcgen.cdom.formula.FixedSizeFormula)1 ClassSpellList (pcgen.cdom.list.ClassSpellList)1 Ability (pcgen.core.Ability)1 SpecialAbility (pcgen.core.SpecialAbility)1 Spell (pcgen.core.spell.Spell)1 CampaignSourceEntry (pcgen.persistence.lst.CampaignSourceEntry)1 PCClassLoader (pcgen.persistence.lst.PCClassLoader)1