Grabbed dndbeyond's source code
``` ~/go/bin/sourcemapper -output ddb -jsurl https://media.dndbeyond.com/character-app/static/js/main.90aa78c5.js ```
This commit is contained in:
@@ -0,0 +1,86 @@
|
||||
import { DiceAccessors } from '../Dice';
|
||||
import { HelperUtils } from '../Helper';
|
||||
import { ModifierAccessors, ModifierValidators } from '../Modifier';
|
||||
import { RuleDataUtils } from '../RuleData';
|
||||
import { SpellGroupEnum } from '../Spell';
|
||||
import { getAtHigherLevels, getBonusFixedDamage, getLevel, getRange, getSaveDcAbility, getScaleType, getSpellcastingModifier, getSpellGroupInfoLookup, } from './accessors';
|
||||
import { getSpellScaledAtHigher } from './derivers';
|
||||
/**
|
||||
* @deprecated
|
||||
*/
|
||||
export function getSaveDcAbilityKey(spell, ruleData) {
|
||||
return RuleDataUtils.getAbilityKey(getSaveDcAbility(spell), ruleData);
|
||||
}
|
||||
export function getSaveDcAbilityShortName(spell, ruleData) {
|
||||
return RuleDataUtils.getAbilityShortName(getSaveDcAbility(spell), ruleData);
|
||||
}
|
||||
/**
|
||||
* @param spell
|
||||
* @param modifier
|
||||
* @param atHigherLevelInfo
|
||||
* @param castLevel
|
||||
*/
|
||||
export function getSpellFinalScaledDie(spell, modifier, atHigherLevelInfo, castLevel = null) {
|
||||
let scaledDie = atHigherLevelInfo === null ? ModifierAccessors.getDie(modifier) : atHigherLevelInfo.die;
|
||||
if (scaledDie === null) {
|
||||
return null;
|
||||
}
|
||||
const fixedDiceValue = DiceAccessors.getFixedValue(scaledDie);
|
||||
let fixedValue = (fixedDiceValue === null ? 0 : fixedDiceValue) + getBonusFixedDamage(spell);
|
||||
if (ModifierAccessors.getUsePrimaryStat(modifier)) {
|
||||
fixedValue += getSpellcastingModifier(spell);
|
||||
}
|
||||
const isHealingHitModifier = ModifierValidators.isSpellHealingHitPointsModifier(modifier);
|
||||
const spellGroupInfoLookup = getSpellGroupInfoLookup(spell);
|
||||
const healingGroupInfo = HelperUtils.lookupDataOrFallback(spellGroupInfoLookup, SpellGroupEnum.HEALING);
|
||||
if (isHealingHitModifier && healingGroupInfo) {
|
||||
fixedValue += healingGroupInfo.bonusFixedValue;
|
||||
if (healingGroupInfo.useCastLevel && castLevel) {
|
||||
fixedValue += castLevel - getLevel(spell);
|
||||
}
|
||||
}
|
||||
return Object.assign(Object.assign({}, scaledDie), { fixedValue });
|
||||
}
|
||||
export function getScaledRange(spell, castLevel) {
|
||||
var _a, _b, _c;
|
||||
const spellRange = getRange(spell);
|
||||
if (spellRange === null) {
|
||||
return null;
|
||||
}
|
||||
const higherLevel = getSpellScaledAtHigher(spell, getScaleType(spell), (_b = (_a = getAtHigherLevels(spell)) === null || _a === void 0 ? void 0 : _a.range) !== null && _b !== void 0 ? _b : [], null, castLevel);
|
||||
return Object.assign(Object.assign({}, spellRange), { rangeValue: (_c = higherLevel === null || higherLevel === void 0 ? void 0 : higherLevel.range) !== null && _c !== void 0 ? _c : spellRange.rangeValue });
|
||||
}
|
||||
/**
|
||||
*
|
||||
* @param spell
|
||||
*/
|
||||
export function makeKnownKey(mappingId, mappingEntityTypeId) {
|
||||
return `${mappingId}-${mappingEntityTypeId}`;
|
||||
}
|
||||
/**
|
||||
*
|
||||
* @param spell
|
||||
*/
|
||||
export function makeLeveledKnownKey(mappingId, mappingEntityTypeId, castLevel) {
|
||||
return `${makeKnownKey(mappingId, mappingEntityTypeId)}-${castLevel}`;
|
||||
}
|
||||
/**
|
||||
* Given a ClassSpellInfo object and a SpellID, determine if the spell is known by the character
|
||||
* using RPGSpell ID as key
|
||||
* @param spellList
|
||||
* @param spellId
|
||||
* @returns
|
||||
*/
|
||||
export const isSpellKnown = (spellList, spellId) => spellList.spells.some(
|
||||
// Compare the given SpellID with the Spell Definition ID
|
||||
// SpellID is the ID of the record from RPGSpell (SQL Server: Waterdeep)
|
||||
(spell) => {
|
||||
var _a;
|
||||
return ((_a = spell.definition) === null || _a === void 0 ? void 0 : _a.id) === spellId &&
|
||||
spellList.knownSpellIds.some(
|
||||
// Compare the resulting Spell's ID with the KnownSpellID
|
||||
// KnownSpellID is a combination of the ClassMappingID of the record from CharacterSpellMapping (MySQL: YawningPortal)
|
||||
// and the EntityTypeID of its granting feature (i.e.- a Wizard's class spells will be granted as RPGClassSpellMapping) in
|
||||
// the format of "{ClassMappingID}-{EntityTypeID}"
|
||||
(knownSpellId) => spell.id === Number(knownSpellId.split('-')[0]));
|
||||
});
|
||||
Reference in New Issue
Block a user