Search in sources :

Example 41 with Race

use of pcgen.core.Race in project pcgen by PCGen.

the class RaceTypeFacetTest method testGetFromTemplateSecondOverrides.

@Test
public void testGetFromTemplateSecondOverrides() {
    Race r = new Race();
    r.put(ObjectKey.RACETYPE, TEST_RACE_TYPE);
    rfacet.set(id, r);
    assertSame(TEST_RACE_TYPE, facet.getRaceType(id));
    PCTemplate t = new PCTemplate();
    t.setName("PCT");
    t.put(ObjectKey.RACETYPE, RACE_TYPE_TOO);
    tfacet.add(id, t, this);
    assertSame(RACE_TYPE_TOO, facet.getRaceType(id));
    PCTemplate t2 = new PCTemplate();
    t2.setName("Other");
    t2.put(ObjectKey.RACETYPE, LAST_RACE_TYPE);
    tfacet.add(id, t2, this);
    assertSame(LAST_RACE_TYPE, facet.getRaceType(id));
    tfacet.remove(id, t, this);
    assertSame(LAST_RACE_TYPE, facet.getRaceType(id));
    tfacet.add(id, t, this);
    assertSame(RACE_TYPE_TOO, facet.getRaceType(id));
    tfacet.remove(id, t, this);
    assertSame(LAST_RACE_TYPE, facet.getRaceType(id));
    tfacet.remove(id, t2, this);
    assertSame(TEST_RACE_TYPE, facet.getRaceType(id));
}
Also used : Race(pcgen.core.Race) PCTemplate(pcgen.core.PCTemplate) Test(org.junit.Test)

Example 42 with Race

use of pcgen.core.Race in project pcgen by PCGen.

the class QualifiedQualifierTokenTest method initializeObjects.

private void initializeObjects() {
    s1 = new Race();
    s1.setName("s1");
    primaryContext.getReferenceContext().importObject(s1);
    s2 = new Race();
    s2.setName("s2");
    primaryContext.getReferenceContext().importObject(s2);
    primaryContext.unconditionallyProcess(s2, "TYPE", "Masterful");
    Race s3 = new Race();
    s3.setName("s3");
    primaryContext.getReferenceContext().importObject(s3);
    primaryContext.unconditionallyProcess(s3, "TYPE", "Masterful");
}
Also used : Race(pcgen.core.Race)

Example 43 with Race

use of pcgen.core.Race in project pcgen by PCGen.

the class EncounterPlugin method generateXofYEL.

/**
	 * Generates creatures for an encounter based on a specified Encounter
	 * Level and number of creatures.
	 * @param size the number of creatures needed for encounter.
	 * @param totalEL total experience level.
	 */
private void generateXofYEL(String size, String totalEL) {
    File f = new File(getDataDirectory() + File.separator + DIR_ENCOUNTER + File.separator + "4_1.xml");
    ReadXML xml;
    VectorTable table41;
    Random roll = new Random(System.currentTimeMillis());
    List<Race> critters = new ArrayList<>();
    if (!f.exists()) {
        //$NON-NLS-1$
        Logging.errorPrintLocalised("in_plugin_encounter_error_missing", f);
        return;
    }
    xml = new ReadXML(f);
    if ((table41 = xml.getTable()) == null) {
        Logging.errorPrint("ACK! error getting table41! " + f.toString());
        return;
    }
    xml = null;
    f = null;
    // verrify values on the table.
    String crs = (String) table41.crossReference(totalEL, size);
    table41 = null;
    if (crs == null) {
        Logging.errorPrint("Tables do not match the given parameters (" + totalEL + ", " + size + ')');
        return;
    }
    Formula crFormula = FormulaFactory.getFormulaFor(crs);
    if (!crFormula.isValid()) {
        Logging.errorPrint("CR Formula " + crs + " was not valid: " + crFormula.toString());
    }
    ChallengeRating cr = new ChallengeRating(crFormula);
    // populate critters with a list of matching monsters with the right CR.
    for (final Race race : Globals.getContext().getReferenceContext().getConstructedCDOMObjects(Race.class)) {
        if (cr.equals(race.get(ObjectKey.CHALLENGE_RATING))) {
            critters.add(race);
        }
    }
    int i = roll.nextInt(critters.size());
    for (int x = 0; x < Integer.parseInt(size); x++) {
        theModel.addElement(critters.get(i).toString());
    }
}
Also used : Formula(pcgen.base.formula.Formula) ChallengeRating(pcgen.cdom.content.ChallengeRating) Random(java.util.Random) Race(pcgen.core.Race) ArrayList(java.util.ArrayList) File(java.io.File) VectorTable(gmgen.io.VectorTable) ReadXML(gmgen.io.ReadXML)

Example 44 with Race

use of pcgen.core.Race in project pcgen by PCGen.

the class EncounterPlugin method handleRace.

private boolean handleRace(PlayerCharacter aPC, int number) {
    Race race = Globals.getContext().getReferenceContext().silentlyGetConstructedCDOMObject(Race.class, (String) theModel.getElementAt(number));
    if (race == null) {
        return false;
    }
    aPC.setRace(race);
    aPC.setName(race.toString());
    return true;
}
Also used : Race(pcgen.core.Race)

Example 45 with Race

use of pcgen.core.Race in project pcgen by PCGen.

the class PreRaceTester method passes.

/**
	 * @see pcgen.core.prereq.PrerequisiteTest#passes(pcgen.core.PlayerCharacter)
	 */
@Override
public int passes(final Prerequisite prereq, final CharacterDisplay display, CDOMObject source) {
    final int reqnumber = Integer.parseInt(prereq.getOperand());
    final String requiredRace = prereq.getKey();
    int runningTotal = 0;
    final Race pcRace = display.getRace();
    Set<Race> racesImitated = getRacesImitatedBy(pcRace);
    if (//$NON-NLS-1$ //$NON-NLS-2$
    requiredRace.startsWith("TYPE=") || requiredRace.startsWith("TYPE.")) {
        StringTokenizer tok = new StringTokenizer(requiredRace.substring(5), ".");
        String type;
        boolean match = false;
        int count = 0;
        int matchCount = 0;
        while (tok.hasMoreTokens()) {
            count++;
            match = false;
            type = tok.nextToken();
            if (pcRace.isType(type)) {
                matchCount++;
                match = true;
                continue;
            }
            if (!match) {
                for (Race mock : racesImitated) {
                    if (mock.isType(type)) {
                        matchCount++;
                        match = true;
                        break;
                    }
                }
            }
        }
        if (count == matchCount) {
            ++runningTotal;
        }
    } else if (//$NON-NLS-1$ //$NON-NLS-2$
    requiredRace.startsWith("RACETYPE=") || requiredRace.startsWith("RACETYPE.")) {
        String raceToMatch = requiredRace.substring(9);
        String raceType = display.getRaceType();
        boolean isMatchingRaceType = raceType.equalsIgnoreCase(requiredRace.substring(9)) ? true : false;
        if (isMatchingRaceType) {
            ++runningTotal;
        } else {
            for (Race mock : racesImitated) {
                RaceType mockRaceType = mock.get(ObjectKey.RACETYPE);
                if (mockRaceType != null && mockRaceType.toString().equalsIgnoreCase(raceToMatch)) {
                    ++runningTotal;
                }
            }
        }
    } else if (requiredRace.startsWith("RACESUBTYPE=") || requiredRace.startsWith("RACESUBTYPE.")) {
        final String reqType = requiredRace.substring(12);
        RaceSubType st = RaceSubType.getConstant(reqType);
        if (display.containsRacialSubType(st)) {
            ++runningTotal;
        }
        if (runningTotal == 0) {
            for (Race mock : racesImitated) {
                if (mock.containsInList(ListKey.RACESUBTYPE, st)) {
                    ++runningTotal;
                    break;
                }
            }
        }
    } else {
        final String characterRace = pcRace == null ? Constants.NONESELECTED : pcRace.getKeyName();
        final int wild = requiredRace.indexOf('%');
        if (wild == 0) {
            //
            if (!characterRace.equalsIgnoreCase(Constants.NONESELECTED)) {
                ++runningTotal;
            }
        } else if (wild > 0) {
            if (characterRace.regionMatches(true, 0, requiredRace, 0, wild)) {
                ++runningTotal;
            } else {
                runningTotal += checkForServesAsRaceWildcard(requiredRace, wild, racesImitated);
            }
        } else {
            if (characterRace.equalsIgnoreCase(requiredRace)) {
                ++runningTotal;
            } else {
                for (Race mock : racesImitated) {
                    if (mock.getDisplayName().equalsIgnoreCase(requiredRace)) {
                        ++runningTotal;
                        break;
                    }
                }
            }
        }
    }
    if (runningTotal > reqnumber) {
        runningTotal = reqnumber;
    }
    runningTotal = prereq.getOperator().compare(runningTotal, reqnumber);
    return countedTotal(prereq, runningTotal);
}
Also used : StringTokenizer(java.util.StringTokenizer) RaceSubType(pcgen.cdom.enumeration.RaceSubType) Race(pcgen.core.Race) RaceType(pcgen.cdom.enumeration.RaceType)

Aggregations

Race (pcgen.core.Race)167 Test (org.junit.Test)78 PCTemplate (pcgen.core.PCTemplate)66 PlayerCharacter (pcgen.core.PlayerCharacter)28 CDOMObject (pcgen.cdom.base.CDOMObject)16 LoadContext (pcgen.rules.context.LoadContext)16 PCClass (pcgen.core.PCClass)15 ArrayList (java.util.ArrayList)10 SizeAdjustment (pcgen.core.SizeAdjustment)10 ParseResult (pcgen.rules.persistence.token.ParseResult)10 AbstractTokenModelTest (tokenmodel.testsupport.AbstractTokenModelTest)10 PCStat (pcgen.core.PCStat)9 FixedSizeFormula (pcgen.cdom.formula.FixedSizeFormula)8 Equipment (pcgen.core.Equipment)8 BonusObj (pcgen.core.bonus.BonusObj)7 Formula (pcgen.base.formula.Formula)6 WieldCategory (pcgen.core.character.WieldCategory)6 GameMode (pcgen.core.GameMode)5 Skill (pcgen.core.Skill)5 CompanionList (pcgen.cdom.list.CompanionList)4