/** * Adds the SkillCost objects granted by CDOMObjects added to the Player Character to this * GlobalSkillCostFacet. * * <p>Triggered when one of the Facets to which GlobalSkillCostFacet listens fires a * DataFacetChangeEvent to indicate a CDOMObject was added to a Player Character. * * @param dfce The DataFacetChangeEvent containing the information about the change * @see * pcgen.cdom.facet.event.DataFacetChangeListener#dataAdded(pcgen.cdom.facet.event.DataFacetChangeEvent) */ @Override public void dataAdded(DataFacetChangeEvent<CharID, CDOMObject> dfce) { CDOMObject cdo = dfce.getCDOMObject(); CharID id = dfce.getCharID(); for (CDOMReference<Skill> ref : cdo.getSafeListFor(ListKey.CSKILL)) { for (Skill sk : ref.getContainedObjects()) { add(id, SkillCost.CLASS, sk, cdo); } } for (CDOMReference<Skill> ref : cdo.getSafeListFor(ListKey.CCSKILL)) { for (Skill sk : ref.getContainedObjects()) { add(id, SkillCost.CROSS_CLASS, sk, cdo); } } }
/** * Adds available Languages to this facet when a CDOMObject added to a Player Character makes * Languages available to the Player Character. * * <p>Triggered when one of the Facets to which StartingLanguageFacet listens fires a * DataFacetChangeEvent to indicate a CDOMObject was added to a Player Character. * * @param dfce The DataFacetChangeEvent containing the information about the change * @see pcgen.cdom.facet.DataFacetChangeListener#dataAdded(pcgen.cdom.facet.DataFacetChangeEvent) */ @Override public void dataAdded(DataFacetChangeEvent<CDOMObject> dfce) { CDOMObject cdo = dfce.getCDOMObject(); Collection<CDOMReference<Language>> list = cdo.getListMods(Language.STARTING_LIST); if (list != null) { CharID id = dfce.getCharID(); for (CDOMReference<Language> ref : list) { addAll(id, ref.getContainedObjects(), cdo); } } }
/** * Sets the locked flag on a PC * * @param pc */ public static void applyDomain(PlayerCharacter pc, Domain d) { ClassSource source = pc.getDomainSource(d); PCClass aClass = pc.getClassKeyed(source.getPcclass().getKeyName()); if (aClass != null) { int maxLevel; for (maxLevel = 0; maxLevel < 10; maxLevel++) { if (pc.getSpellSupport(aClass).getCastForLevel(maxLevel, pc) == 0) { break; } } if (maxLevel > 0) { addSpellsToClassForLevels(pc, d, aClass, 0, maxLevel - 1); } if ((maxLevel > 1) && (aClass.getSafe(IntegerKey.KNOWN_SPELLS_FROM_SPECIALTY) == 0)) { DomainSpellList domainSpellList = d.get(ObjectKey.DOMAIN_SPELLLIST); final List<Spell> aList = pc.getAllSpellsInLists(Collections.singletonList(domainSpellList)); for (Spell gcs : aList) { if (SpellLevel.getFirstLvlForKey(gcs, domainSpellList, pc) < maxLevel) { pc.setDomainSpellCount(aClass, 1); break; } } } } Collection<CDOMReference<Spell>> mods = d.getSafeListMods(Spell.SPELLS); for (CDOMReference<Spell> ref : mods) { Collection<Spell> spells = ref.getContainedObjects(); Collection<AssociatedPrereqObject> assoc = d.getListAssociations(Spell.SPELLS, ref); for (AssociatedPrereqObject apo : assoc) { if (!PrereqHandler.passesAll(apo.getPrerequisiteList(), pc, d)) { continue; } for (Spell s : spells) { String book = apo.getAssociation(AssociationKey.SPELLBOOK); List<CharacterSpell> aList = pc.getCharacterSpells(aClass, s, book, -1); if (aList.isEmpty()) { Formula times = apo.getAssociation(AssociationKey.TIMES_PER_UNIT); CharacterSpell cs = new CharacterSpell(d, s); int resolvedTimes = times.resolve(pc, d.getQualifiedKey()).intValue(); cs.addInfo(1, resolvedTimes, book); pc.addCharacterSpell(aClass, cs); } } } } }
private List<Skill> getSkillChoices(PlayerCharacter aPC) { final List<Skill> skillsOfType = new ArrayList<Skill>(); for (CDOMReference<Skill> ref : skillList) { skillsOfType.addAll(ref.getContainedObjects()); } if (skillsOfType.size() == 0) { return null; } else if (skillsOfType.size() == 1) { return skillsOfType; } List<Skill> skillChoices = new ArrayList<Skill>(); skillChoices = Globals.getChoiceFromList("Select skill", skillsOfType, skillChoices, getSafeCount(), aPC); return skillChoices; }