forked from GitHub-Mirrors/foundry-sw5e
Update to dnd 0.98 Core with some fixes
Updated to 0.98 core for 0.7.x compatability (untested) Class Skills are pulling in automatically on class item drop to character sheet. TODO: Expand automated skill drop for Archetypes KNOWN ISSUE: init.value is being converted to a string causing some NaN errors on the html. Initiative was changed to a number instead of a string in 0.98 likely some place is assuming it is still a string. I had to use Number() on the value because it was forcing other vales to be a string because the value is "". Maybe someone can fix this
This commit is contained in:
parent
4bed1d1869
commit
44312146a7
132 changed files with 748 additions and 1010 deletions
|
@ -100,7 +100,7 @@ export default class Actor5e extends Actor {
|
|||
}
|
||||
|
||||
// Ability modifiers and saves
|
||||
const dcBonus = Number.isNumeric(data.bonuses.power.dc) ? parseInt(data.bonuses.power.dc) : 0;
|
||||
const dcBonus = Number.isNumeric(data.bonuses.power?.dc) ? parseInt(data.bonuses.power.dc) : 0;
|
||||
const saveBonus = Number.isNumeric(bonuses.save) ? parseInt(bonuses.save) : 0;
|
||||
const checkBonus = Number.isNumeric(bonuses.check) ? parseInt(bonuses.check) : 0;
|
||||
for (let [id, abl] of Object.entries(data.abilities)) {
|
||||
|
@ -109,7 +109,7 @@ export default class Actor5e extends Actor {
|
|||
abl.saveBonus = saveBonus;
|
||||
abl.checkBonus = checkBonus;
|
||||
abl.save = abl.mod + abl.prof + abl.saveBonus;
|
||||
abl.dc = 8 + abl.mod + abl.prof + dcBonus;
|
||||
abl.dc = 8 + abl.mod + data.attributes.prof + dcBonus;
|
||||
|
||||
// If we merged saves when transforming, take the highest bonus here.
|
||||
if (originalSaves && abl.proficient) {
|
||||
|
@ -126,7 +126,7 @@ export default class Actor5e extends Actor {
|
|||
if ( joat ) init.prof = Math.floor(0.5 * data.attributes.prof);
|
||||
else if ( athlete ) init.prof = Math.ceil(0.5 * data.attributes.prof);
|
||||
else init.prof = 0;
|
||||
init.bonus = init.value + (flags.initiativeAlert ? 5 : 0);
|
||||
init.bonus = Number(init.value + (flags.initiativeAlert ? 5 : 0));
|
||||
init.total = init.mod + init.prof + init.bonus;
|
||||
|
||||
// Prepare power-casting data
|
||||
|
|
|
@ -19,7 +19,8 @@ export default class ActorSheet5e extends ActorSheet {
|
|||
this._filters = {
|
||||
inventory: new Set(),
|
||||
powerbook: new Set(),
|
||||
features: new Set()
|
||||
features: new Set(),
|
||||
effects: new Set()
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -31,7 +32,8 @@ export default class ActorSheet5e extends ActorSheet {
|
|||
scrollY: [
|
||||
".inventory .inventory-list",
|
||||
".features .inventory-list",
|
||||
".powerbook .inventory-list"
|
||||
".powerbook .inventory-list",
|
||||
".effects .inventory-list"
|
||||
],
|
||||
tabs: [{navSelector: ".tabs", contentSelector: ".sheet-body", initial: "description"}]
|
||||
});
|
||||
|
@ -82,7 +84,7 @@ export default class ActorSheet5e extends ActorSheet {
|
|||
abl.label = CONFIG.SW5E.abilities[a];
|
||||
}
|
||||
|
||||
// Update skill labels
|
||||
// Skills
|
||||
if (data.actor.data.skills) {
|
||||
for ( let [s, skl] of Object.entries(data.actor.data.skills)) {
|
||||
skl.ability = CONFIG.SW5E.abilityAbbreviations[skl.ability];
|
||||
|
@ -98,12 +100,21 @@ export default class ActorSheet5e extends ActorSheet {
|
|||
// Prepare owned items
|
||||
this._prepareItems(data);
|
||||
|
||||
// Prepare active effects
|
||||
// TODO Disabled until 0.7.5 release
|
||||
// this._prepareEffects(data);
|
||||
|
||||
// Return data to the sheet
|
||||
return data
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
|
||||
/**
|
||||
* Prepare the data structure for traits data like languages, resistances & vulnerabilities, and proficiencies
|
||||
* @param {object} traits The raw traits data object from the actor data
|
||||
* @private
|
||||
*/
|
||||
_prepareTraits(traits) {
|
||||
const map = {
|
||||
"dr": CONFIG.SW5E.damageResistanceTypes,
|
||||
|
@ -137,6 +148,43 @@ export default class ActorSheet5e extends ActorSheet {
|
|||
|
||||
/* -------------------------------------------- */
|
||||
|
||||
/**
|
||||
* Prepare the data structure for Active Effects which are currently applied to the Actor.
|
||||
* @param {object} data The object of rendering data which is being prepared
|
||||
* @private
|
||||
*/
|
||||
_prepareEffects(data) {
|
||||
|
||||
// Define effect header categories
|
||||
const categories = {
|
||||
temporary: {
|
||||
label: "Temporary Effects",
|
||||
effects: []
|
||||
},
|
||||
passive: {
|
||||
label: "Passive Effects",
|
||||
effects: []
|
||||
},
|
||||
inactive: {
|
||||
label: "Inactive Effects",
|
||||
effects: []
|
||||
}
|
||||
};
|
||||
|
||||
// Iterate over active effects, classifying them into categories
|
||||
for ( let e of this.actor.effects ) {
|
||||
e._getSourceName(); // Trigger a lookup for the source name
|
||||
if ( e.data.disabled ) categories.inactive.effects.push(e);
|
||||
else if ( e.isTemporary ) categories.temporary.effects.push(e);
|
||||
else categories.inactive.push(e);
|
||||
}
|
||||
|
||||
// Add the prepared categories of effects to the rendering data
|
||||
return data.effects = categories;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
|
||||
/**
|
||||
* Insert a power into the powerbook object when rendering the character sheet
|
||||
* @param {Object} data The Actor data being prepared
|
||||
|
@ -344,6 +392,10 @@ export default class ActorSheet5e extends ActorSheet {
|
|||
html.find('.item-delete').click(this._onItemDelete.bind(this));
|
||||
html.find('.item-uses input').click(ev => ev.target.select()).change(this._onUsesChange.bind(this));
|
||||
html.find('.slot-max-override').click(this._onPowerSlotOverride.bind(this));
|
||||
|
||||
// Active Effect management
|
||||
html.find(".effect-control").click(this._onManageActiveEffect.bind(this));
|
||||
|
||||
}
|
||||
|
||||
// Owner Only Listeners
|
||||
|
@ -680,6 +732,28 @@ export default class ActorSheet5e extends ActorSheet {
|
|||
|
||||
/* -------------------------------------------- */
|
||||
|
||||
/**
|
||||
* Manage Active Effect instances through the Actor Sheet via effect control buttons.
|
||||
* @param {MouseEvent} event The left-click event on the effect control
|
||||
* @private
|
||||
*/
|
||||
_onManageActiveEffect(event) {
|
||||
event.preventDefault();
|
||||
const a = event.currentTarget;
|
||||
const li = a.closest(".effect");
|
||||
const effect = this.actor.effects.get(li.dataset.effectId);
|
||||
switch ( a.dataset.action ) {
|
||||
case "edit":
|
||||
return new ActiveEffectConfig(effect).render(true);
|
||||
case "delete":
|
||||
return effect.delete();
|
||||
case "toggle":
|
||||
return effect.update({disabled: !effect.data.disabled});
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
|
||||
/**
|
||||
* Handle rolling an Ability check, either a test or a saving throw
|
||||
* @param {Event} event The originating click event
|
||||
|
|
|
@ -70,7 +70,7 @@ export default class ActorSheet5eCharacter extends ActorSheet5e {
|
|||
};
|
||||
|
||||
// Partition items by category
|
||||
let [items, powers, feats, classes, species] = data.items.reduce((arr, item) => {
|
||||
let [items, powers, feats, classes, species, archetypes, classfeatures] = data.items.reduce((arr, item) => {
|
||||
|
||||
// Item details
|
||||
item.img = item.img || DEFAULT_TOKEN;
|
||||
|
@ -89,10 +89,12 @@ export default class ActorSheet5eCharacter extends ActorSheet5e {
|
|||
if ( item.type === "power" ) arr[1].push(item);
|
||||
else if ( item.type === "feat" ) arr[2].push(item);
|
||||
else if ( item.type === "class" ) arr[3].push(item);
|
||||
else if ( item.type === "species" ) arr[4].push(item);
|
||||
else if ( item.type === "species" ) arr[4].push(item);
|
||||
else if ( item.type === "archetype" ) arr[5].push(item);
|
||||
else if ( item.type === "classfeature" ) arr[6].push(item);
|
||||
else if ( Object.keys(inventory).includes(item.type ) ) arr[0].push(item);
|
||||
return arr;
|
||||
}, [[], [], [], [], []]);
|
||||
}, [[], [], [], [], [], [], []]);
|
||||
|
||||
// Apply active item filters
|
||||
items = this._filterItems(items, this._filters.inventory);
|
||||
|
@ -116,6 +118,8 @@ export default class ActorSheet5eCharacter extends ActorSheet5e {
|
|||
// Organize Features
|
||||
const features = {
|
||||
classes: { label: "SW5E.ItemTypeClassPl", items: [], hasActions: false, dataset: {type: "class"}, isClass: true },
|
||||
classfeatures: { label: "SW5E.ItemTypeClassFeats", items: [], hasActions: false, dataset: {type: "classfeature"}, isClassfeature: true},
|
||||
archetype: { label: "SW5E.ItemTypeArchetype", items: [], hasActions: false, dataset: {type: "archetype"}, isArchetype: true },
|
||||
species: { label: "SW5E.ItemTypeSpecies", items: [], hasActions: false, dataset: {type: "species"}, isSpecies: true},
|
||||
active: { label: "SW5E.FeatureActive", items: [], hasActions: true, dataset: {type: "feat", "activation.type": "action"} },
|
||||
passive: { label: "SW5E.FeaturePassive", items: [], hasActions: false, dataset: {type: "feat"} }
|
||||
|
@ -126,6 +130,8 @@ export default class ActorSheet5eCharacter extends ActorSheet5e {
|
|||
}
|
||||
classes.sort((a, b) => b.levels - a.levels);
|
||||
features.classes.items = classes;
|
||||
features.classfeatures.items = classfeatures;
|
||||
features.archetype.items = archetypes;
|
||||
features.species.items = species;
|
||||
|
||||
// Assign and return
|
||||
|
@ -274,9 +280,18 @@ export default class ActorSheet5eCharacter extends ActorSheet5e {
|
|||
}
|
||||
|
||||
// If the actor already has the class, increment the level instead of creating a new item
|
||||
// then add new features as long as level increases
|
||||
if ( classWasAlreadyPresent ) {
|
||||
const lvl = cls.data.data.levels;
|
||||
return cls.update({"data.levels": Math.min(lvl + 1, 20 + lvl - this.actor.data.data.details.level)})
|
||||
const newLvl = Math.min(lvl + 1, 20 + lvl - this.actor.data.data.details.level);
|
||||
if ( !(lvl === newLvl) ) {
|
||||
cls.update({"data.levels": newLvl});
|
||||
itemData.data.levels = newLvl;
|
||||
Actor5e.getClassFeatures(itemData).then(features => {
|
||||
this.actor.createEmbeddedEntity("OwnedItem", features);
|
||||
});
|
||||
}
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -120,7 +120,7 @@ export default class ActorSheetFlags extends BaseEntitySheet {
|
|||
// Diff the data against any applied overrides and apply
|
||||
// TODO: Remove this logical gate once 0.7.x is release channel
|
||||
if ( !isNewerVersion("0.7.1", game.data.version) ){
|
||||
updateData.data = diffObject(this.object.overrides, updateData.data);
|
||||
updateData = diffObject(this.object.data, updateData);
|
||||
}
|
||||
await actor.update(updateData, {diff: false});
|
||||
}
|
||||
|
|
|
@ -1,694 +1,35 @@
|
|||
export const ClassFeatures = {
|
||||
/* These are the class features for DND5E left in for reference to help build SW5E Class features
|
||||
// Remove once SW5E Class features are added.
|
||||
"barbarian": {
|
||||
"subclasses": {
|
||||
"path-of-the-ancestral-guardian": {
|
||||
"label": "Path of the Ancestral Guardian",
|
||||
"source": "XGE pg. 9"
|
||||
},
|
||||
"path-of-the-battlerager": {
|
||||
"label": "Path of the Battlerager",
|
||||
"source": "SCAG pg. 121"
|
||||
},
|
||||
"path-of-the-berserker": {
|
||||
"label": "Path of the Berserker",
|
||||
"source": "PHB pg. 49",
|
||||
"features": {
|
||||
"3": ["Compendium.sw5e.classfeatures.CkbbAckeCtyHXEnL"],
|
||||
"6": ["Compendium.sw5e.classfeatures.0Jgf8fYY2ExwgQpN"],
|
||||
"10": ["Compendium.sw5e.classfeatures.M6VSMzVtKPhh8B0i"],
|
||||
"14": ["Compendium.sw5e.classfeatures.xzD9zlRP6dUxCtCl"]
|
||||
}
|
||||
},
|
||||
"path-of-the-juggernaut": {
|
||||
"label": "Path of the Juggernaut",
|
||||
"source": "TCS pg. 102"
|
||||
},
|
||||
"path-of-the-storm-herald": {
|
||||
"label": "Path of the Storm Herald",
|
||||
"source": "XGE pg. 10"
|
||||
},
|
||||
"path-of-the-totem-warrior": {
|
||||
"label": "Path of the Totem Warrior",
|
||||
"source": "PHB pg. 50; SCAG pg. 121"
|
||||
},
|
||||
"path-of-the-zealot": {
|
||||
"label": "Path of the Zealot",
|
||||
"source": "XGE pg. 11"
|
||||
}
|
||||
},
|
||||
"features": {
|
||||
"1": ["Compendium.sw5e.classfeatures.VoR0SUrNX5EJVPIO", "Compendium.sw5e.classfeatures.SZbsNbaxFFGwBpNK"],
|
||||
"2": ["Compendium.sw5e.classfeatures.SCVjqRdlZ9cvHVSR", "Compendium.sw5e.classfeatures.vt31lWAULygEl7yk"],
|
||||
"3": ["Compendium.sw5e.classfeatures.TH1QAf6YNGSeBVjT"],
|
||||
"5": ["Compendium.sw5e.classfeatures.XogoBnFWmCAHXppo", "Compendium.sw5e.classfeatures.Kl6zifJ5OmdHlOi2"],
|
||||
"7": ["Compendium.sw5e.classfeatures.NlXslw4yAqmKZWtN"],
|
||||
"9": ["Compendium.sw5e.classfeatures.L94gyvNpUhUe0rwh"],
|
||||
"11": ["Compendium.sw5e.classfeatures.FqfmbPgxiyrWzhYk"],
|
||||
"15": ["Compendium.sw5e.classfeatures.l8tUhZ5Pecm9wz7I"],
|
||||
"18": ["Compendium.sw5e.classfeatures.Q1exex5ALteprrPo"],
|
||||
"20": ["Compendium.sw5e.classfeatures.jVU4AgqfrFaqgXns"]
|
||||
}
|
||||
},
|
||||
"bard": {
|
||||
"subclasses": {
|
||||
"college-of-glamour": {
|
||||
"label": "College of Glamour",
|
||||
"source": "XGE pg. 14",
|
||||
"features": {}
|
||||
},
|
||||
"college-of-lore": {
|
||||
"label": "College of Lore",
|
||||
"source": "PHB pg. 54",
|
||||
"features": {
|
||||
"3": ["Compendium.sw5e.classfeatures.5zPmHPQUne7RDfaU"],
|
||||
"6": ["Compendium.sw5e.classfeatures.myBu3zi5eYvQIcuy"],
|
||||
"14": ["Compendium.sw5e.classfeatures.pquwueEMweRhiWaq"]
|
||||
}
|
||||
},
|
||||
"college-of-swords": {
|
||||
"label": "College of Swords",
|
||||
"source": "XGE pg. 15",
|
||||
"features": {}
|
||||
},
|
||||
"college-of-valor": {
|
||||
"label": "College of Valor",
|
||||
"source": "PHB pg. 55",
|
||||
"features": {}
|
||||
},
|
||||
"college-of-whispers": {
|
||||
"label": "College of Whispers",
|
||||
"source": "XGE pg. 16",
|
||||
"features": {}
|
||||
}
|
||||
},
|
||||
"features": {
|
||||
"1": ["Compendium.sw5e.classfeatures.hpLNiGq7y67d2EHA", "Compendium.sw5e.classfeatures.u4NLajXETJhJU31v"],
|
||||
"2": ["Compendium.sw5e.classfeatures.ezWijmCnlnQ9ZRX2", "Compendium.sw5e.classfeatures.he8RpPXwSl2lVSIk"],
|
||||
"3": ["Compendium.sw5e.classfeatures.ILhzFHiRrqgQ9dFJ", "Compendium.sw5e.classfeatures.aQLg7BWdRnm4Hr9S"],
|
||||
"5": ["Compendium.sw5e.classfeatures.3VDZGs5Ug3hIE322"],
|
||||
"6": ["Compendium.sw5e.classfeatures.SEJmsjkEhdAZ90ki"],
|
||||
"10": ["Compendium.sw5e.classfeatures.aonJ2YjkqkYB9WYB"],
|
||||
"20": ["Compendium.sw5e.classfeatures.GBYN5rH4nh1ocRlY"]
|
||||
}
|
||||
},
|
||||
"cleric": {
|
||||
"subclasses": {
|
||||
"ambition-domain": {
|
||||
"label": "Ambition Domain",
|
||||
"source": "PS:A pg. 27",
|
||||
"features": {}
|
||||
},
|
||||
"arcana-domain": {
|
||||
"label": "Arcana Domain",
|
||||
"source": "SCAG pg. 125",
|
||||
"features": {}
|
||||
},
|
||||
"blood-domain": {
|
||||
"label": "Blood Domain",
|
||||
"source": "TCS pg. 101",
|
||||
"features": {}
|
||||
},
|
||||
"death-domain": {
|
||||
"label": "Death Domain",
|
||||
"source": "DMG pg. 96",
|
||||
"features": {}
|
||||
},
|
||||
"forge-domain": {
|
||||
"label": "Forge Domain",
|
||||
"source": "XGE pg. 18",
|
||||
"features": {}
|
||||
},
|
||||
"grave-domain": {
|
||||
"label": "Grave Domain",
|
||||
"source": "XGE pg. 19",
|
||||
"features": {}
|
||||
},
|
||||
"knowledge-domain": {
|
||||
"label": "Knowledge Domain",
|
||||
"source": "PHB pg. 59",
|
||||
"features": {}
|
||||
},
|
||||
"life-domain": {
|
||||
"label": "Life Domain",
|
||||
"source": "PHB pg. 60",
|
||||
"features": {
|
||||
"1": ["Compendium.sw5e.classfeatures.68bYIOvx6rIqnlOW", "Compendium.sw5e.classfeatures.jF8AFfEMICIJnAkR", "Compendium.sw5e.powers.8dzaICjGy6mTUaUr", "Compendium.sw5e.powers.uUWb1wZgtMou0TVP"],
|
||||
"2": ["Compendium.sw5e.classfeatures.hEymt45rICi4f9eL"],
|
||||
"3": ["Compendium.sw5e.powers.F0GsG0SJzsIOacwV", "Compendium.sw5e.powers.JbxsYXxSOTZbf9I0"],
|
||||
"5": ["Compendium.sw5e.powers.ZU9d6woBdUP8pIPt", "Compendium.sw5e.powers.LmRHHMtplpxr9fX6"],
|
||||
"6": ["Compendium.sw5e.classfeatures.yv49QN6Bzqs0ecCs"],
|
||||
"7": ["Compendium.sw5e.powers.VtCXMdyM6mAdIJZb", "Compendium.sw5e.powers.TgHsuhNasPbhu8MO"],
|
||||
"8": ["Compendium.sw5e.classfeatures.T6u5z8ZTX6UftXqE"],
|
||||
"9": ["Compendium.sw5e.powers.Pyzmm8R7rVsNAPsd", "Compendium.sw5e.powers.AGFMPAmuzwWO6Dfz"],
|
||||
"17": ["Compendium.sw5e.classfeatures.4UOgxzr83vFuUash"]
|
||||
}
|
||||
},
|
||||
"light-domain": {
|
||||
"label": "Light Domain",
|
||||
"source": "PHB pg. 60",
|
||||
"features": {}
|
||||
},
|
||||
"nature-domain": {
|
||||
"label": "Nature Domain",
|
||||
"source": "PHB pg. 61",
|
||||
"features": {}
|
||||
},
|
||||
"order-domain": {
|
||||
"label": "Order Domain",
|
||||
"source": "GGR pg. 25",
|
||||
"features": {}
|
||||
},
|
||||
"solidarity-domain": {
|
||||
"label": "Solidarity Domain",
|
||||
"source": "PS:A pg. 24",
|
||||
"features": {}
|
||||
},
|
||||
"strength-domain": {
|
||||
"label": "Strength Domain",
|
||||
"source": "PS:A pg. 25",
|
||||
"features": {}
|
||||
},
|
||||
"tempest-domain": {
|
||||
"label": "Tempest Domain",
|
||||
"source": "PHB pg. 62",
|
||||
"features": {}
|
||||
},
|
||||
"trickery-domain": {
|
||||
"label": "Trickery Domain",
|
||||
"source": "PHB pg. 62",
|
||||
"features": {}
|
||||
},
|
||||
"war-domain": {
|
||||
"label": "War Domain",
|
||||
"source": "PHB pg. 63",
|
||||
"features": {}
|
||||
},
|
||||
"zeal-domain": {
|
||||
"label": "Zeal Domain",
|
||||
"source": "PS:A pg. 28",
|
||||
"features": {}
|
||||
}
|
||||
},
|
||||
"features": {
|
||||
"1": ["Compendium.sw5e.classfeatures.x637K2Icp2ZFM1TB", "Compendium.sw5e.classfeatures.v4gKwLhAq9vuqza7"],
|
||||
"2": ["Compendium.sw5e.classfeatures.YpiLQEKGalROn7iJ"],
|
||||
"5": ["Compendium.sw5e.classfeatures.NMy4piwXIpLjYbRE"],
|
||||
"10": ["Compendium.sw5e.classfeatures.eVXqHn0ojWrEuYGU"]
|
||||
},
|
||||
},
|
||||
"druid": {
|
||||
"subclasses": {
|
||||
"circle-of-dreams": {
|
||||
"label": "Circle of Dreams",
|
||||
"source": "XGE pg. 22",
|
||||
"features": {}
|
||||
},
|
||||
"circle-of-the-land": {
|
||||
"label": "Circle of the Land",
|
||||
"source": "PHB pg. 68",
|
||||
"features": {
|
||||
"2": ["Compendium.sw5e.classfeatures.lT8GsPOPgRzDC3QJ", "Compendium.sw5e.classfeatures.wKdRtFsvGfMKQHLY"],
|
||||
"3": ["Compendium.sw5e.classfeatures.YiK59gWSlcQ6Mbdz"],
|
||||
"6": ["Compendium.sw5e.classfeatures.3FB25qKxmkmxcxuC"],
|
||||
"10": ["Compendium.sw5e.classfeatures.OTvrJSJSUgAwXrWX"],
|
||||
"14": ["Compendium.sw5e.classfeatures.EuX1kJNIw1F68yus"]
|
||||
}
|
||||
},
|
||||
"circle-of-the-moon": {
|
||||
"label": "Circle of the Moon",
|
||||
"source": "PHB pg. 69",
|
||||
"features": {}
|
||||
},
|
||||
"circle-of-the-shepherd": {
|
||||
"label": "Circle of the Shepherd",
|
||||
"source": "XGE pg. 23",
|
||||
"features": {}
|
||||
},
|
||||
"circle-of-spores": {
|
||||
"label": "Circle of Spores",
|
||||
"source": "GGR pg. 26",
|
||||
"features": {}
|
||||
}
|
||||
},
|
||||
"features": {
|
||||
"1": ["Compendium.sw5e.classfeatures.LzJ5ayHt0OlSVGxi", "Compendium.sw5e.classfeatures.i6tPm3FNK13Ftc9v"],
|
||||
"2": ["Compendium.sw5e.classfeatures.swK0r5TOIxredxWS", "Compendium.sw5e.classfeatures.u6Du2P9s81SWuGbi"],
|
||||
"18": ["Compendium.sw5e.classfeatures.cVDEQo0ow1WJT7Wl", "Compendium.sw5e.classfeatures.xvgPu1O57DgXCM86"],
|
||||
"20": ["Compendium.sw5e.classfeatures.ip4bvmGoz3qkoqes"]
|
||||
},
|
||||
},
|
||||
"fighter": {
|
||||
"subclasses": {
|
||||
"arcane-archer": {
|
||||
"label": "Arcane Archer",
|
||||
"source": "XGE pg. 28",
|
||||
"features": {}
|
||||
},
|
||||
"banneret": {
|
||||
"label": "Banneret",
|
||||
"source": "SCAG pg. 128",
|
||||
"features": {}
|
||||
},
|
||||
"battle-master": {
|
||||
"label": "Battle Master",
|
||||
"source": "PHB pg. 73",
|
||||
"features": {}
|
||||
},
|
||||
"cavalier": {
|
||||
"label": "Cavalier",
|
||||
"source": "XGE pg. 30",
|
||||
"features": {}
|
||||
},
|
||||
"champion": {
|
||||
"label": "Champion",
|
||||
"source": "PHB pg. 72",
|
||||
"features": {
|
||||
"3": ["Compendium.sw5e.classfeatures.YgLQV1O849wE5TgM"],
|
||||
"7": ["Compendium.sw5e.classfeatures.dHu1yzIjD38BvGGd"],
|
||||
"11": ["Compendium.sw5e.classfeatures.kYJsED0rqqqUcgKz"],
|
||||
"15": ["Compendium.sw5e.classfeatures.aVKH6TLn1AG9hPSA"],
|
||||
"18": ["Compendium.sw5e.classfeatures.ipG5yx1tRNmeJfSH"]
|
||||
}
|
||||
},
|
||||
"echo-knight": {
|
||||
"label": "Echo Knight",
|
||||
"source": "EGW pg. 183",
|
||||
"features": {}
|
||||
},
|
||||
"eldritch-knight": {
|
||||
"label": "Eldritch Knight",
|
||||
"source": "PHB pg. 74",
|
||||
"features": {}
|
||||
},
|
||||
"samurai": {
|
||||
"label": "Samurai",
|
||||
"source": "XGE pg. 31",
|
||||
"features": {}
|
||||
}
|
||||
},
|
||||
"features": {
|
||||
"1": ["Compendium.sw5e.classfeatures.fbExzwNwEAl2kW9c", "Compendium.sw5e.classfeatures.nTjmWbyHweXuIqwc"],
|
||||
"2": ["Compendium.sw5e.classfeatures.xF1VTcJ3AdkbTsdQ"],
|
||||
"3": ["Compendium.sw5e.classfeatures.ax8M0X0q1GGWM26j"],
|
||||
"5": ["Compendium.sw5e.classfeatures.q9g1MLXuLZyxjQMg"],
|
||||
"9": ["Compendium.sw5e.classfeatures.653ZHbNcmm7ZGXbw"]
|
||||
},
|
||||
},
|
||||
"monk": {
|
||||
"subclasses": {
|
||||
"way-of-the-cobalt-soul": {
|
||||
"label": "Way of the Cobalt Soul",
|
||||
"source": "TCS pg. 104",
|
||||
"features": {}
|
||||
},
|
||||
"way-of-the-drunken-master": {
|
||||
"label": "Way of the Drunken Master",
|
||||
"source": "XGE pg. 33",
|
||||
"features": {}
|
||||
},
|
||||
"way-of-the-elements": {
|
||||
"label": "Way of the Four Elements",
|
||||
"source": "PHB pg. 80",
|
||||
"features": {}
|
||||
},
|
||||
"way-of-the-kensei": {
|
||||
"label": "Way of the Kensei",
|
||||
"source": "XGE pg. 34",
|
||||
"features": {}
|
||||
},
|
||||
"way-of-the-long-death": {
|
||||
"label": "Way of the Long Death",
|
||||
"source": "SCAG pg. 130",
|
||||
"features": {}
|
||||
},
|
||||
"way-of-the-open-hand": {
|
||||
"label": "Way of the Open Hand",
|
||||
"source": "PHB pg. 79",
|
||||
"features": {
|
||||
"3": ["Compendium.sw5e.classfeatures.iQxLNydNLlCHNKbp"],
|
||||
"6": ["Compendium.sw5e.classfeatures.Q7mOdk4b1lgjcptF"],
|
||||
"11": ["Compendium.sw5e.classfeatures.rBDZLatuoolT2FUW"],
|
||||
"17": ["Compendium.sw5e.classfeatures.h1gM8SH3BNRtFevE"]
|
||||
}
|
||||
},
|
||||
"way-of-the-shadow": {
|
||||
"label": "Way of Shadow",
|
||||
"source": "PHB pg. 80",
|
||||
"features": {}
|
||||
},
|
||||
"way-of-the-sun-soul": {
|
||||
"label": "Way of the Sun Soul",
|
||||
"source": "XGE pg. 35; SCAG pg. 131",
|
||||
"features": {}
|
||||
}
|
||||
},
|
||||
"features": {
|
||||
"1": ["Compendium.sw5e.classfeatures.UAvV7N7T4zJhxdfI", "Compendium.sw5e.classfeatures.l50hjTxO2r0iecKw"],
|
||||
"2": ["Compendium.sw5e.classfeatures.10b6z2W1txNkrGP7", "Compendium.sw5e.classfeatures.7vSrGc0MP5Vzm9Ac"],
|
||||
"3": ["Compendium.sw5e.classfeatures.rtpQdX77dYWbDIOH", "Compendium.sw5e.classfeatures.mzweVbnsJPQiVkAe"],
|
||||
"4": ["Compendium.sw5e.classfeatures.KQz9bqxVkXjDl8gK"],
|
||||
"5": ["Compendium.sw5e.classfeatures.XogoBnFWmCAHXppo", "Compendium.sw5e.classfeatures.pvRc6GAu1ok6zihC"],
|
||||
"6": ["Compendium.sw5e.classfeatures.7flZKruSSu6dHg6D"],
|
||||
"7": ["Compendium.sw5e.classfeatures.a4P4DNMmH8CqSNkC", "Compendium.sw5e.classfeatures.ZmC31XKS4YNENnoc"],
|
||||
"10": ["Compendium.sw5e.classfeatures.bqWA7t9pDELbNRkp"],
|
||||
"13": ["Compendium.sw5e.classfeatures.XjuGBeB8Y0C3A5D4"],
|
||||
"14": ["Compendium.sw5e.classfeatures.7D2EkLdISwShEDlN"],
|
||||
"15": ["Compendium.sw5e.classfeatures.gDH8PMrKvLHaNmEI"],
|
||||
"18": ["Compendium.sw5e.classfeatures.3jwFt3hSqDswBlOH"],
|
||||
"20": ["Compendium.sw5e.classfeatures.mQNPg89YIs7g5tG4"]
|
||||
},
|
||||
},
|
||||
"paladin": {
|
||||
"subclasses": {
|
||||
"oath-of-the-ancients": {
|
||||
"label": "Oath of the Ancients",
|
||||
"source": "PHB pg. 86",
|
||||
"features": {}
|
||||
},
|
||||
"oath-of-conquest": {
|
||||
"label": "Oath of Conquest",
|
||||
"source": "SCAG pg. 128",
|
||||
"features": {}
|
||||
},
|
||||
"oath-of-the-crown": {
|
||||
"label": "Oath of the Crown",
|
||||
"source": "SCAG pg. 132",
|
||||
"features": {}
|
||||
},
|
||||
"oath-of-devotion": {
|
||||
"label": "Oath of Devotion",
|
||||
"source": "PHB pg. 85",
|
||||
"features": {
|
||||
"3": ["Compendium.sw5e.powers.xmDBqZhRVrtLP8h2", "Compendium.sw5e.powers.gvdA9nPuWLck4tBl"],
|
||||
"5": ["Compendium.sw5e.powers.F0GsG0SJzsIOacwV", "Compendium.sw5e.powers.CylBa7jR8DSbo8Z3"],
|
||||
"9": ["Compendium.sw5e.powers.ZU9d6woBdUP8pIPt", "Compendium.sw5e.powers.15Fa6q1nH27XfbR8"],
|
||||
"13": ["Compendium.sw5e.powers.da0a1t2FqaTjRZGT", "Compendium.sw5e.powers.TgHsuhNasPbhu8MO"],
|
||||
"17": ["Compendium.sw5e.powers.d54VDyFulD9xxY7J", "Compendium.sw5e.powers.5e1xTohkzqFqbYH4"]
|
||||
}
|
||||
},
|
||||
"oathbreaker": {
|
||||
"label": "Oathbreaker",
|
||||
"source": "DMG pg. 97",
|
||||
"features": {}
|
||||
},
|
||||
"oath-of-redemption": {
|
||||
"label": "Oath of Redemption",
|
||||
"source": "XGE pg. 38",
|
||||
"features": {}
|
||||
},
|
||||
"oath-of-vengeance": {
|
||||
"label": "Oath of Vengeance",
|
||||
"source": "PHB pg. 87",
|
||||
"features": {}
|
||||
}
|
||||
},
|
||||
"features": {
|
||||
"1": ["Compendium.sw5e.classfeatures.E8ozg8avUVOX9N7u", "Compendium.sw5e.classfeatures.OdrvL3afwLOPeuYZ"],
|
||||
"2": ["Compendium.sw5e.classfeatures.ySMPQ6zNSlvkrl2f", "Compendium.sw5e.classfeatures.fbExzwNwEAl2kW9c", "Compendium.sw5e.classfeatures.ihoQHsmVZlyDbPhX"],
|
||||
"3": ["Compendium.sw5e.classfeatures.dY9yrqkyEDuF0CG2", "Compendium.sw5e.classfeatures.olAqNsUTIef9x8xC"],
|
||||
"5": ["Compendium.sw5e.classfeatures.XogoBnFWmCAHXppo"],
|
||||
"6": ["Compendium.sw5e.classfeatures.carGDhkIdoduTC0I"],
|
||||
"10": ["Compendium.sw5e.classfeatures.nahSkBO6LH4HkpaT"],
|
||||
"11": ["Compendium.sw5e.classfeatures.FAk41RPCTcvCk6KI"],
|
||||
"14": ["Compendium.sw5e.classfeatures.U7BIPVPsptBmwsnV"]
|
||||
},
|
||||
},
|
||||
"ranger": {
|
||||
"subclasses": {
|
||||
"beast-master": {
|
||||
"label": "Beast Master",
|
||||
"source": "PHB pg. 93",
|
||||
"features": {}
|
||||
},
|
||||
"gloom-stalker": {
|
||||
"label": "Gloom Stalker",
|
||||
"source": "XGE pg. 41",
|
||||
"features": {}
|
||||
},
|
||||
"horizon-walker": {
|
||||
"label": "Horizon Walker",
|
||||
"source": "XGE pg. 42",
|
||||
"features": {}
|
||||
},
|
||||
"hunter": {
|
||||
"label": "Hunter",
|
||||
"source": "PHB pg. 93",
|
||||
"features": {
|
||||
"3": ["Compendium.sw5e.classfeatures.wrxIW5sDfmGr3u5s"],
|
||||
"7": ["Compendium.sw5e.classfeatures.WgQrqjmeyMqDzVt3"],
|
||||
"11": ["Compendium.sw5e.classfeatures.7zlTRRXT1vWSBGjX"],
|
||||
"15": ["Compendium.sw5e.classfeatures.a0Sq88dgnREcIMfl"]
|
||||
}
|
||||
},
|
||||
"monster-slayer": {
|
||||
"label": "Monster Slayer",
|
||||
"source": "XGE pg. 43",
|
||||
"features": {}
|
||||
}
|
||||
},
|
||||
"features": {
|
||||
"1": ["Compendium.sw5e.classfeatures.4Vpj9vCOB37GtXk6", "Compendium.sw5e.classfeatures.8fbZt2Qh7ZttwIan"],
|
||||
"2": ["Compendium.sw5e.classfeatures.fbExzwNwEAl2kW9c", "Compendium.sw5e.classfeatures.u6xV3Ki3TXRrD7zg"],
|
||||
"3": ["Compendium.sw5e.classfeatures.1dJHU48yNqn3lcfx", "Compendium.sw5e.classfeatures.kaHcUGiwi8AtfZIm"],
|
||||
"5": ["Compendium.sw5e.classfeatures.XogoBnFWmCAHXppo"],
|
||||
"8": ["Compendium.sw5e.classfeatures.C5fzaOBc6HxyOWRn"],
|
||||
"10": ["Compendium.sw5e.classfeatures.r0unvWK0lPsDthDx"],
|
||||
"14": ["Compendium.sw5e.classfeatures.DhU2dWCNnX78TstR"],
|
||||
"18": ["Compendium.sw5e.classfeatures.QBVmY56RMQuh6C8h"],
|
||||
"20": ["Compendium.sw5e.classfeatures.3CaP1vFHVR8LgHjx"]
|
||||
},
|
||||
},
|
||||
"rogue": {
|
||||
"subclasses": {
|
||||
"arcane-trickster": {
|
||||
"label": "Arcane Trickster",
|
||||
"source": "PHB pg. 97",
|
||||
"features": {}
|
||||
},
|
||||
"assassin": {
|
||||
"label": "Assassin",
|
||||
"source": "PHB pg. 97",
|
||||
"features": {}
|
||||
},
|
||||
"inquisitive": {
|
||||
"label": "Inquisitive",
|
||||
"source": "XGE pg. 45",
|
||||
"features": {}
|
||||
},
|
||||
"mastermind": {
|
||||
"label": "Mastermind",
|
||||
"source": "XGE pg. 46; SCAG pg. 135",
|
||||
"features": {}
|
||||
},
|
||||
"scout": {
|
||||
"label": "Scout",
|
||||
"source": "XGE pg. 47",
|
||||
"features": {}
|
||||
},
|
||||
"swashbuckler": {
|
||||
"label": "Swashbuckler",
|
||||
"source": "XGE pg. 47; SCAG pg. 135",
|
||||
"features": {}
|
||||
},
|
||||
"thief": {
|
||||
"label": "Thief",
|
||||
"source": "PHB pg. 97",
|
||||
"features": {
|
||||
"3": ["Compendium.sw5e.classfeatures.ga3dt2zrCn2MHK8R", "Compendium.sw5e.classfeatures.FGrbXs6Ku5qxFK5G"],
|
||||
"9": ["Compendium.sw5e.classfeatures.Ei1Oh4UAA2E30jcD"],
|
||||
"13": ["Compendium.sw5e.classfeatures.NqWyHE7Rpw9lyKWu"],
|
||||
"17": ["Compendium.sw5e.classfeatures.LhRm1EeUMvp2EWhV"]
|
||||
}
|
||||
}
|
||||
},
|
||||
"features": {
|
||||
"1": ["Compendium.sw5e.classfeatures.3sYPftQKnbbVnHrh", "Compendium.sw5e.classfeatures.DPN2Gfk8yi1Z5wp7", "Compendium.sw5e.classfeatures.ohwfuwnvuoBWlSQr"],
|
||||
"2": ["Compendium.sw5e.classfeatures.01pcLg6PRu5zGrsb"],
|
||||
"3": ["Compendium.sw5e.classfeatures.80USV8ZFPIahpLd0"],
|
||||
"5": ["Compendium.sw5e.classfeatures.Mm64SKAHJWYecgXS"],
|
||||
"7": ["Compendium.sw5e.classfeatures.a4P4DNMmH8CqSNkC"],
|
||||
"11": ["Compendium.sw5e.classfeatures.YN9xm6MCvse4Y60u"],
|
||||
"14": ["Compendium.sw5e.classfeatures.fjsBk7zxoAbLf8ZI"],
|
||||
"15": ["Compendium.sw5e.classfeatures.V4pwFxlwHtNeB4w9"],
|
||||
"18": ["Compendium.sw5e.classfeatures.L7nJSRosos8sHJH9"],
|
||||
"20": ["Compendium.sw5e.classfeatures.rQhWDaMHMn7iU4f2"]
|
||||
},
|
||||
},
|
||||
"sorcerer": {
|
||||
"subclasses": {
|
||||
"draconic-bloodline": {
|
||||
"label": "Draconic Bloodline",
|
||||
"source": "PHB pg. 102",
|
||||
"features": {
|
||||
"1": ["Compendium.sw5e.classfeatures.EZsonMThTNLZq35j", "Compendium.sw5e.classfeatures.MW1ExvBLm8Hg82aA"],
|
||||
"6": ["Compendium.sw5e.classfeatures.x6eEZ9GUsuOcEa3G"],
|
||||
"14": ["Compendium.sw5e.classfeatures.3647zjKSE9zFwOXc"],
|
||||
"18": ["Compendium.sw5e.classfeatures.Gsha4bl0apxqspFy"]
|
||||
}
|
||||
},
|
||||
"divine-soul": {
|
||||
"label": "Divine Soul",
|
||||
"source": "XGE pg. 50",
|
||||
"features": {}
|
||||
},
|
||||
"pyromancer": {
|
||||
"label": "Pyromancer",
|
||||
"source": "PS:K pg. 9",
|
||||
"features": {}
|
||||
},
|
||||
"runechild": {
|
||||
"label": "Runechild",
|
||||
"source": "TCS pg. 103",
|
||||
"features": {}
|
||||
},
|
||||
"shadow-magic": {
|
||||
"label": "Shadow Magic",
|
||||
"source": "XGE pg. 50",
|
||||
"features": {}
|
||||
},
|
||||
"storm-sorcery": {
|
||||
"label": "Storm Sorcery",
|
||||
"source": "XGE pg. 51; SCAG pg. 137",
|
||||
"features": {}
|
||||
},
|
||||
"wild-magic": {
|
||||
"label": "Wild Magic",
|
||||
"source": "PHB pg. 103",
|
||||
"features": {}
|
||||
}
|
||||
},
|
||||
"features": {
|
||||
"1": ["Compendium.sw5e.classfeatures.cmRCL9T9UgRYOj1c", "Compendium.sw5e.classfeatures.oygRF3ZjTv2T7z0Y"],
|
||||
"2": ["Compendium.sw5e.classfeatures.LBKChJY5n02Afhnq"],
|
||||
"3": ["Compendium.sw5e.classfeatures.9Uh7uTDNZ04oTJsL"],
|
||||
"20": ["Compendium.sw5e.classfeatures.F2lEKSmOY0NUruzY"]
|
||||
},
|
||||
},
|
||||
"warlock": {
|
||||
"subclasses": {
|
||||
"the-archfey": {
|
||||
"label": "The Archfey",
|
||||
"source": "PHB pg. 108",
|
||||
"features": {}
|
||||
},
|
||||
"the-celestial": {
|
||||
"label": "The Celestial",
|
||||
"source": "XGE pg. 54",
|
||||
"features": {}
|
||||
},
|
||||
"the-fiend": {
|
||||
"label": "The Fiend",
|
||||
"source": "PHB pg. 109",
|
||||
"features": {
|
||||
"1": ["Compendium.sw5e.classfeatures.Jv0zu4BtUi8bFCqJ"],
|
||||
"6": ["Compendium.sw5e.classfeatures.OQSb0bO1yDI4aiMx"],
|
||||
"10": ["Compendium.sw5e.classfeatures.9UZ2WjUF2k58CQug"],
|
||||
"14": ["Compendium.sw5e.classfeatures.aCUmlnHlUPHS0rdu"]
|
||||
}
|
||||
},
|
||||
"the-hexblade": {
|
||||
"label": "The Hexblade",
|
||||
"source": "XGE pg. 55",
|
||||
"features": {}
|
||||
},
|
||||
"the-oldone": {
|
||||
"label": "The Great Old One",
|
||||
"source": "PHB pg. 109",
|
||||
"features": {}
|
||||
},
|
||||
"the-undying": {
|
||||
"label": "The Undying",
|
||||
"source": "SCAG pg. 139",
|
||||
"features": {}
|
||||
}
|
||||
},
|
||||
"features": {
|
||||
"1": ["Compendium.sw5e.classfeatures.jTXHaK0vvT5DV3uO", "Compendium.sw5e.classfeatures.x6IJZwr6f0SGral7"],
|
||||
"2": ["Compendium.sw5e.classfeatures.8MlxM2nEfE3Q0EVk"],
|
||||
"3": ["Compendium.sw5e.classfeatures.QwgfIpCN8VWfoUtX"],
|
||||
"11": ["Compendium.sw5e.classfeatures.zB77V8BcCJvWVxck"],
|
||||
"13": ["Compendium.sw5e.classfeatures.HBn6FXLz7Eiudz0V"],
|
||||
"15": ["Compendium.sw5e.classfeatures.knDZR4l4QfLTKinm"],
|
||||
"17": ["Compendium.sw5e.classfeatures.vMxJQEKeK6WwZFaF"],
|
||||
"20": ["Compendium.sw5e.classfeatures.0C04rwyvoknvFYiy"]
|
||||
},
|
||||
},
|
||||
"wizard": {
|
||||
"subclasses": {
|
||||
"school-of-abjuration": {
|
||||
"label": "School of Abjuration",
|
||||
"source": "PHB pg. 115",
|
||||
"features": {}
|
||||
},
|
||||
"school-of-bladesinging": {
|
||||
"label": "School of Bladesinging",
|
||||
"source": "SCAG pg. 141",
|
||||
"features": {}
|
||||
},
|
||||
"school-of-chronurgy-magic": {
|
||||
"label": "School of Chronurgy Magic",
|
||||
"source": "EGW pg. 185",
|
||||
"features": {}
|
||||
},
|
||||
"school-of-conjuration": {
|
||||
"label": "School of Conjuration",
|
||||
"source": "PHB pg. 116",
|
||||
"features": {}
|
||||
},
|
||||
"school-of-divination": {
|
||||
"label": "School of Divination",
|
||||
"source": "PHB pg. 116",
|
||||
"features": {}
|
||||
},
|
||||
"school-of-enchantment": {
|
||||
"label": "School of Enchantment",
|
||||
"source": "PHB pg. 117",
|
||||
"features": {}
|
||||
},
|
||||
"school-of-evocation": {
|
||||
"label": "School of Evocation",
|
||||
"source": "PHB pg. 117",
|
||||
"features": {
|
||||
"2": ["Compendium.sw5e.classfeatures.7uzJ2JkmsdRGLra3", "Compendium.sw5e.classfeatures.6VBXkjjBgjSpNElh"],
|
||||
"6": ["Compendium.sw5e.classfeatures.evEWCpE5MYgr5RRW"],
|
||||
"10": ["Compendium.sw5e.classfeatures.7O85kj6uDEG5NzUE"],
|
||||
"14": ["Compendium.sw5e.classfeatures.VUtSLeCzFubGXmGx"]
|
||||
}
|
||||
},
|
||||
"school-of-graviturgy-magic": {
|
||||
"label": "School of Graviturgy Magic",
|
||||
"source": "EGW pg. 185",
|
||||
"features": {}
|
||||
},
|
||||
"school-of-illusion": {
|
||||
"label": "School of Illusion",
|
||||
"source": "PHB pg. 118",
|
||||
"features": {}
|
||||
},
|
||||
"school-of-necromancy": {
|
||||
"label": "School of Necromancy",
|
||||
"source": "PHB pg. 118",
|
||||
"features": {}
|
||||
},
|
||||
"school-of-transmutation": {
|
||||
"label": "School of Transmutation",
|
||||
"source": "PHB pg. 119",
|
||||
"features": {}
|
||||
},
|
||||
"school-of-war-magic": {
|
||||
"label": "School of War Magic",
|
||||
"source": "XGE pg. 59",
|
||||
"features": {}
|
||||
}
|
||||
},
|
||||
"features": {
|
||||
"1": ["Compendium.sw5e.classfeatures.gbNo5eVPaqr8IVKL", "Compendium.sw5e.classfeatures.e0uTcFPpgxjIyUW9"],
|
||||
"2": ["Compendium.sw5e.classfeatures.AEWr9EMxy5gj4ZFT"],
|
||||
"18": ["Compendium.sw5e.classfeatures.JfFfHTeIszx1hNRx"],
|
||||
"20": ["Compendium.sw5e.classfeatures.nUrZDi6QN1YjwAr6", "Compendium.sw5e.classfeatures.31bKbWe9ZGVLEns6"]
|
||||
},
|
||||
}
|
||||
*/
|
||||
};
|
||||
"berserker": {
|
||||
"archetypes": {
|
||||
"addicted-approach": {
|
||||
"label": "Addicted Approach",
|
||||
"source": "PHB",
|
||||
"features": {
|
||||
"3": ["Compendium.sw5e.archetypes.PCwepUZqHYlxr4T3", "Compendium.sw5e.classfeatures.efOA0nrvUqKJOOeP", "Compendium.sw5e.classfeatures.nT6AfpQXSZ4IeChO"],
|
||||
"6": ["Compendium.sw5e.classfeatures.GbJDWzoTKWL7sEpR"],
|
||||
"10": ["Compendium.sw5e.classfeatures.3jqPPd5qJBBnonPw"],
|
||||
"14": ["Compendium.sw5e.classfeatures.xzRNHB2M2HdOZzr7"]
|
||||
}
|
||||
}
|
||||
},
|
||||
"features": {
|
||||
"1": ["Compendium.sw5e.classfeatures.IDt6duVrBzL8euRc", "Compendium.sw5e.classfeatures.rPOLy96fW96N2UPg"],
|
||||
"2": ["Compendium.sw5e.classfeatures.DlYiCiG39R0goG9u", "Compendium.sw5e.classfeatures.FbSpxpXm1xONn0na", "Compendium.sw5e.classfeatures.KDiQ8O2evV2Z1YTo", "Compendium.sw5e.classfeatures.Q1JyHnVs9iIEBs91", "Compendium.sw5e.classfeatures.ROdICoWR82v6A2Rf", "Compendium.sw5e.classfeatures.cdCx5Hvq2rYRMzRj", "Compendium.sw5e.classfeatures.dTdbL8dypa6BAdnP", "Compendium.sw5e.classfeatures.h1uDhP1tEOuvjRw6", "Compendium.sw5e.classfeatures.hMiA075EKBBOL2cv", "Compendium.sw5e.classfeatures.sgJdISZMtwv08WPJ", "Compendium.sw5e.classfeatures.v4CZJ8LBMl5PYZCO"],
|
||||
"3": ["Compendium.sw5e.classfeatures.kzwSN9SabKgWZZvU"],
|
||||
"4": ["Compendium.sw5e.classfeatures.9oyy0MMqEws2qoil"],
|
||||
"5": ["Compendium.sw5e.classfeatures.dPWmHiWmpnhHTsgd"],
|
||||
"7": ["Compendium.sw5e.classfeatures.Cid5ujSdnooH0vMm", "Compendium.sw5e.classfeatures.WTBhKJgkArQI3Tgv", "Compendium.sw5e.classfeatures.oiT3TJxzRWPKAX9E", "Compendium.sw5e.classfeatures.pMEmIt3NWThbee8k", "Compendium.sw5e.classfeatures.qWV5YogZcpZ3Y3xj"],
|
||||
"9": ["Compendium.sw5e.classfeatures.bi8G8H5Ur9B3BAyM"],
|
||||
"11": ["Compendium.sw5e.classfeatures.eWbTifdXJvvXT4CV"],
|
||||
"13": ["Compendium.sw5e.classfeatures.Hg8zYh1iXL0DGUVq", "Compendium.sw5e.classfeatures.QRnYiJmRk18ekE9v", "Compendium.sw5e.classfeatures.sfEr8ZBFVddlfLeF", "Compendium.sw5e.classfeatures.yGC9VzT840qQWxca"],
|
||||
"15": ["Compendium.sw5e.classfeatures.YHPUv9lN3nCapAgP"],
|
||||
"18": ["Compendium.sw5e.classfeatures.fFKNqUAWh0ZOhvRc"],
|
||||
"20": ["Compendium.sw5e.classfeatures.IWTDawTUf79eWbEV"]
|
||||
}
|
||||
},
|
||||
"consular": {
|
||||
"features": {
|
||||
"20": ["Compendium.sw5e.classfeatures.gSGeitc98ItAwhfF"]
|
||||
}
|
||||
}
|
||||
};
|
|
@ -252,7 +252,9 @@ SW5E.consumableTypes = {
|
|||
"medpac": "SW5E.ConsumableMedpac",
|
||||
"technology": "SW5E.ConsumableTechnology",
|
||||
"ammunition": "SW5E.ConsumableAmmunition",
|
||||
"trinket": "SW5E.ConsumableTrinket"
|
||||
"trinket": "SW5E.ConsumableTrinket",
|
||||
"force": "SW5E.ConsumableForce",
|
||||
"tech": "SW5E.ConsumableTech"
|
||||
};
|
||||
|
||||
/* -------------------------------------------- */
|
||||
|
@ -488,7 +490,11 @@ SW5E.powerScalingModes = {
|
|||
|
||||
/* -------------------------------------------- */
|
||||
|
||||
// Weapon Types
|
||||
|
||||
/**
|
||||
* Define the set of types which a weapon item can take
|
||||
* @type {Object}
|
||||
*/
|
||||
SW5E.weaponTypes = {
|
||||
"simpleVW": "SW5E.WeaponSimpleVW",
|
||||
"simpleB": "SW5E.WeaponSimpleB",
|
||||
|
@ -500,7 +506,6 @@ SW5E.weaponTypes = {
|
|||
"improv": "SW5E.WeaponImprov",
|
||||
"ammo": "SW5E.WeaponAmmo",
|
||||
"siege": "SW5E.WeaponSiege"
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -182,8 +182,16 @@ export default class Item5e extends Item {
|
|||
|
||||
// Species Items
|
||||
else if ( itemData.type === "species" ) {
|
||||
//labels.species = C.species[data.species];
|
||||
}
|
||||
// labels.species = C.species[data.species];
|
||||
}
|
||||
// Archetype Items
|
||||
else if ( itemData.type === "archetype" ) {
|
||||
// labels.archetype = C.archetype[data.archetype];
|
||||
}
|
||||
// Class Feature Items
|
||||
else if ( itemData.type === "classfeature" ) {
|
||||
|
||||
}
|
||||
|
||||
// Equipment Items
|
||||
else if ( itemData.type === "equipment" ) {
|
||||
|
|
|
@ -180,7 +180,14 @@ export default class ItemSheet5e extends ItemSheet {
|
|||
else if ( item.type === "species" ) {
|
||||
|
||||
}
|
||||
|
||||
else if ( item.type === "archetype" ) {
|
||||
|
||||
}
|
||||
|
||||
else if ( item.type === "classfeature" ) {
|
||||
|
||||
}
|
||||
|
||||
// Action type
|
||||
if ( item.data.actionType ) {
|
||||
props.push(CONFIG.SW5E.itemActionTypes[item.data.actionType]);
|
||||
|
|
|
@ -250,3 +250,33 @@ const _migrateRemoveDeprecated = function(ent, updateData) {
|
|||
updateData[`data.${parts.join(".")}`] = null;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/* -------------------------------------------- */
|
||||
|
||||
|
||||
/**
|
||||
* A general tool to purge flags from all entities in a Compendium pack.
|
||||
* @param {Compendium} pack The compendium pack to clean
|
||||
* @private
|
||||
*/
|
||||
export async function purgeFlags(pack) {
|
||||
const cleanFlags = (flags) => {
|
||||
const flags5e = flags.sw5e || null;
|
||||
return flags5e ? {sw5e: flags5e} : {};
|
||||
};
|
||||
await pack.configure({locked: false});
|
||||
const content = await pack.getContent();
|
||||
for ( let entity of content ) {
|
||||
const update = {_id: entity.id, flags: cleanFlags(entity.data.flags)};
|
||||
if ( pack.entity === "Actor" ) {
|
||||
update.items = entity.data.items.map(i => {
|
||||
i.flags = cleanFlags(i.flags);
|
||||
return i;
|
||||
})
|
||||
}
|
||||
await pack.updateEntity(update, {recursive: false});
|
||||
console.log(`Purged flags from ${entity.name}`);
|
||||
}
|
||||
await pack.configure({locked: true});
|
||||
}
|
||||
|
|
|
@ -13,6 +13,7 @@ export const preloadHandlebarsTemplates = async function() {
|
|||
"systems/sw5e/templates/actors/parts/actor-inventory.html",
|
||||
"systems/sw5e/templates/actors/parts/actor-features.html",
|
||||
"systems/sw5e/templates/actors/parts/actor-powerbook.html",
|
||||
"systems/sw5e/templates/actors/parts/actor-effects.html",
|
||||
|
||||
// Item Sheet Partials
|
||||
"systems/sw5e/templates/items/parts/item-action.html",
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue