use of pcgen.core.PCStat in project pcgen by PCGen.
the class PCGVer2Creator method appendStatLines.
/*
* ###############################################################
* Character Attributes methods
* ###############################################################
*/
private void appendStatLines(StringBuilder buffer) {
for (PCStat aStat : charDisplay.getStatSet()) {
buffer.append(IOConstants.TAG_STAT).append(':');
buffer.append(aStat.getKeyName());
buffer.append('|');
buffer.append(IOConstants.TAG_SCORE).append(':');
buffer.append(charDisplay.getStat(aStat));
buffer.append(IOConstants.LINE_SEP);
}
}
use of pcgen.core.PCStat in project pcgen by PCGen.
the class UnlockedStatFacetTest method setUp.
@Override
public void setUp() throws Exception {
super.setUp();
CDOMObject cdo1 = new PCTemplate();
cdo1.setName("Templ");
CDOMObject cdo2 = new Race();
cdo2.setName("Race");
PCStat st1 = new PCStat();
PCStat st2 = new PCStat();
cdo1.addToListFor(ListKey.UNLOCKED_STATS, CDOMDirectSingleRef.getRef(st1));
cdo2.addToListFor(ListKey.UNLOCKED_STATS, CDOMDirectSingleRef.getRef(st2));
source = new CDOMObject[] { cdo1, cdo2 };
stat = new PCStat[] { st1, st2 };
}
use of pcgen.core.PCStat in project pcgen by PCGen.
the class StatLockFacetTest method setUp.
@Override
public void setUp() throws Exception {
facet = new StatLockFacet();
super.setUp();
facet.setFormulaResolvingFacet(new FormulaResolvingFacet());
CDOMObject cdo1 = new PCTemplate();
cdo1.setName("Templ");
CDOMObject cdo2 = new Race();
cdo2.setName("Race");
PCStat pcs1 = new PCStat();
pcs1.setName("Stat1");
PCStat pcs2 = new PCStat();
pcs2.setName("Stat2");
StatLock st1 = new StatLock(CDOMDirectSingleRef.getRef(pcs1), FormulaFactory.getFormulaFor(4));
StatLock st2 = new StatLock(CDOMDirectSingleRef.getRef(pcs2), FormulaFactory.getFormulaFor(2));
cdo1.addToListFor(ListKey.STAT_LOCKS, st1);
cdo2.addToListFor(ListKey.STAT_LOCKS, st2);
source = new CDOMObject[] { cdo1, cdo2 };
target = new StatLock[] { st1, st2 };
}
use of pcgen.core.PCStat in project pcgen by PCGen.
the class SkillCostDisplay method getModifierExplanation.
/**
* Builds up a string describing what makes up the misc modifier for a skill
* for a character. This can either be in long form '+2[skill TUMBLE gteq
* 5|TYPE=SYNERGY.STACK]' or in short form '+2[TUMBLE]'. Any modifiers that
* cannot be determined will be displayed as a single entry of 'OTHER'.
*
* @param aPC
* The character associated with this skill.
* @param shortForm
* True if the abbreviated form should be used.
* @return The explanation of the misc modifier's make-up.
*/
public static String getModifierExplanation(Skill sk, PlayerCharacter aPC, boolean shortForm) {
double bonusObjTotal = 0.0;
List<String> explanation = new ArrayList<>();
String keyName = sk.getKeyName();
String bonusKey = ("SKILL." + keyName).toUpperCase();
for (BonusObj bonus : aPC.getActiveBonusList()) {
// calculate bonus and add to activeBonusMap
if (aPC.isApplied(bonus) && "SKILL".equals(bonus.getBonusName())) {
boolean include = bonusForThisSkill(bonus, keyName);
if (!include) {
for (BonusPair bp : aPC.getStringListFromBonus(bonus)) {
String bpKey = bp.fullyQualifiedBonusType.toUpperCase();
if (bpKey.equals(bonusKey)) {
include = true;
break;
}
}
}
if (include) {
double iBonus = 0;
for (BonusPair bp : aPC.getStringListFromBonus(bonus)) {
String bpKey = bp.fullyQualifiedBonusType.toUpperCase();
if (bpKey.startsWith(bonusKey)) {
iBonus += bp.resolve(aPC).doubleValue();
}
}
if (!CoreUtility.doublesEqual(iBonus, 0.0)) {
explanation.add(Delta.toString((int) iBonus) + aPC.getBonusContext(bonus, shortForm));
bonusObjTotal += iBonus;
}
}
}
}
StringBuilder bonusDetails = new StringBuilder();
bonusDetails.append(StringUtil.joinToStringBuilder(explanation, " "));
// TODO: Need to add other bonuses which are not encoded as bonus
// objects
// - familiars, racial, feats - and add them to bonusObjTotal
double bonus;
CDOMSingleRef<PCStat> statref = sk.get(ObjectKey.KEY_STAT);
if (statref != null) {
PCStat stat = statref.get();
bonus = aPC.getStatModFor(stat);
bonus += aPC.getTotalBonusTo("SKILL", "STAT." + stat.getKeyName());
SkillCostDisplay.appendBonusDesc(bonusDetails, bonus, "STAT");
}
// The catch-all for non-bonusObj modifiers.
bonus = aPC.getTotalBonusTo("SKILL", keyName) - bonusObjTotal;
SkillCostDisplay.appendBonusDesc(bonusDetails, bonus, "OTHER");
// loop through all current skill types checking for boni
for (Type singleType : sk.getTrueTypeList(false)) {
bonus = aPC.getTotalBonusTo("SKILL", "TYPE." + singleType);
SkillCostDisplay.appendBonusDesc(bonusDetails, bonus, "TYPE." + singleType);
}
// now check for any lists of skills, etc
bonus = aPC.getTotalBonusTo("SKILL", "LIST");
SkillCostDisplay.appendBonusDesc(bonusDetails, bonus, "LIST");
// now check for ALL
bonus = aPC.getTotalBonusTo("SKILL", "ALL");
SkillCostDisplay.appendBonusDesc(bonusDetails, bonus, "ALL");
// function
if (aPC.isClassSkill(sk)) {
bonus = aPC.getTotalBonusTo("CSKILL", keyName);
SkillCostDisplay.appendBonusDesc(bonusDetails, bonus, "CSKILL");
// loop through all current skill types checking for boni
for (Type singleType : sk.getTrueTypeList(false)) {
bonus = aPC.getTotalBonusTo("CSKILL", "TYPE." + singleType);
SkillCostDisplay.appendBonusDesc(bonusDetails, bonus, "CSKILL");
}
bonus = aPC.getTotalBonusTo("CSKILL", "LIST");
SkillCostDisplay.appendBonusDesc(bonusDetails, bonus, "CSKILL");
}
if (!aPC.isClassSkill(sk) && !sk.getSafe(ObjectKey.EXCLUSIVE)) {
bonus = aPC.getTotalBonusTo("CCSKILL", keyName);
SkillCostDisplay.appendBonusDesc(bonusDetails, bonus, "CCSKILL");
// loop through all current skill types checking for boni
for (Type singleType : sk.getTrueTypeList(false)) {
bonus = aPC.getTotalBonusTo("CCSKILL", "TYPE." + singleType);
SkillCostDisplay.appendBonusDesc(bonusDetails, bonus, "CCSKILL");
}
bonus = aPC.getTotalBonusTo("CCSKILL", "LIST");
SkillCostDisplay.appendBonusDesc(bonusDetails, bonus, "CCSKILL");
}
// Encumbrance
int aCheckMod = sk.getSafe(ObjectKey.ARMOR_CHECK).calculateBonus(aPC);
SkillCostDisplay.appendBonusDesc(bonusDetails, aCheckMod, "ARMOR");
String aString = SettingsHandler.getGame().getRankModFormula();
if (!aString.isEmpty()) {
aString = aString.replaceAll(Pattern.quote("$$RANK$$"), SkillRankControl.getTotalRank(aPC, sk).toString());
bonus = aPC.getVariableValue(aString, "").intValue();
SkillCostDisplay.appendBonusDesc(bonusDetails, bonus, "RANKS");
}
return bonusDetails.toString();
}
use of pcgen.core.PCStat in project pcgen by PCGen.
the class TemplateModifier method modifierString.
/**
* Generate a string that represents the changes this Template will apply.
*
* @param aPC
* the Pc we'd like the string generated with reference to
*
* @return a string explaining the Template
*/
public static String modifierString(PCTemplate pct, PlayerCharacter aPC) {
// More likely to be
StringBuilder mods = new StringBuilder(50);
// true than 16
// (the default)
CharID id = aPC.getCharID();
for (PCStat stat : statFacet.getSet(id)) {
if (NonAbilityDisplay.isNonAbilityForObject(stat, pct)) {
mods.append(stat.getKeyName()).append(":nonability ");
} else {
int statMod = BonusCalc.getStatMod(pct, stat, aPC);
if (statMod != 0) {
mods.append(stat.getKeyName()).append(':').append(statMod).append(' ');
}
}
}
Map<DamageReduction, Set<Object>> drMap = new IdentityHashMap<>();
CharacterDisplay display = aPC.getDisplay();
int totalLevels = display.getTotalLevels();
int totalHitDice = display.totalHitDice();
List<PCTemplate> templList = new ArrayList<>();
templList.add(pct);
templList.addAll(pct.getConditionalTemplates(totalLevels, totalHitDice));
for (PCTemplate subt : templList) {
List<DamageReduction> tList = subt.getListFor(ListKey.DAMAGE_REDUCTION);
if (tList != null) {
for (DamageReduction dr : tList) {
Set<Object> set = drMap.get(dr);
if (set == null) {
set = new HashSet<>();
drMap.put(dr, set);
}
set.add(pct);
}
}
}
if (!drMap.isEmpty()) {
mods.append("DR:").append(drFacet.getDRString(id, drMap));
}
if (!aPC.hasControl(CControl.ACVARTOTAL)) {
int nat = (int) BonusCalc.charBonusTo(pct, "COMBAT", "AC", aPC);
if (nat != 0) {
mods.append("AC BONUS:").append(nat);
}
}
float cr = pct.getCR(totalLevels, totalHitDice);
if (cr != 0) {
mods.append("CR:").append(cr).append(' ');
}
if (display.getTemplateSR(pct, totalLevels, totalHitDice) != 0) {
mods.append("SR:").append(display.getTemplateSR(pct, totalLevels, totalHitDice)).append(' ');
}
return mods.toString();
}
Aggregations