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:
supervj 2020-10-08 02:20:12 -04:00
parent 4bed1d1869
commit 44312146a7
132 changed files with 748 additions and 1010 deletions

View file

@ -64,6 +64,7 @@
"SW5E.AlignmentNL": "Neutral Light",
"SW5E.AlignmentBN": "Balanced Neutral",
"SW5E.Archetypes": "Archetypes",
"SW5E.Appearance": "Appearance",
"SW5E.ArmorClass": "Armor Class",
"SW5E.AC": "AC",
"SW5E.ArmorProperties": "Armor Properties",
@ -104,6 +105,7 @@
"SW5E.Attuned": "Attuned",
"SW5E.Background": "Background",
"SW5E.Biography": "Biography",
"SW5E.Bonds": "Bonds",
"SW5E.BonusAbilityCheck": "Global Ability Check Bonus",
"SW5E.BonusAbilitySave": "Global Saving Throw Bonus",
"SW5E.BonusAbilitySkill": "Global Skill Check Bonus",
@ -176,7 +178,8 @@
"SW5E.ConsumableMedpac": "Medpac",
"SW5E.ConsumableTrinket": "Trinket",
"SW5E.ConsumableTechnology": "Technology",
"SW5E.ConsumableAmmunition": "Ammunition",
"SW5E.ConsumableForce": "Force Points",
"SW5E.ConsumableTech": "Tech Points",
"SW5E.ConsumableUseWarnStart": "This consumable has",
"SW5E.ConsumableUseWarnEnd": "of the current unit",
"SW5E.ConsumableUnitWarn": "units remaining",
@ -230,6 +233,7 @@
"SW5E.DistSelf": "Self",
"SW5E.DistTouch": "Touch",
"SW5E.Duration": "Duration",
"SW5E.Effects": "Effects",
"SW5E.EquipmentBonus": "Magical Bonus",
"SW5E.EquipmentClothing": "Clothing",
"SW5E.EquipmentHeavy": "Heavy Armor",
@ -244,9 +248,13 @@
"SW5E.Exhaustion": "Exhaustion",
"SW5E.Expertise": "Expertise",
"SW5E.FeatureActionRecharge": "Action Recharge",
"SW5E.Flaws": "Flaws",
"SW5E.ItemTypeArchetype": "Archetype",
"SW5E.ItemTypeClass": "Class",
"SW5E.ItemTypeClassPl": "Class Levels",
"SW5E.ItemTypeClassFeat": "Class Feature",
"SW5E.ItemTypeClassFeats": "Class Features",
"SW5E.ItemTypeConsumable": "Consumable",
"SW5E.ItemTypeConsumablePl": "Consumables",
"SW5E.ItemTypeContainer": "Container",
@ -319,6 +327,7 @@
"SW5E.HitDiceRoll": "Roll Hit Dice",
"SW5E.HitDiceUsed": "Hit Dice Used",
"SW5E.HitDiceWarn": "{name} has no available {formula} Hit Dice remaining!",
"SW5E.Ideals": "Ideals",
"SW5E.Identified": "Identified",
"SW5E.Initiative": "Initiative",
"SW5E.Inspiration": "Inspiration",
@ -497,6 +506,7 @@
"SW5E.OtherFormula": "Other Formula",
"SW5E.PactMagic": "Pact Magic",
"SW5E.Passive": "Passive",
"SW5E.PersonalityTraits": "Personality Traits",
"SW5E.PlaceTemplate": "Place Measured Template",
"SW5E.Polymorph": "Polymorph",
"SW5E.PolymorphAcceptSettings": "Custom Settings",
@ -519,8 +529,9 @@
"SW5E.PolymorphTokens": "Transform all linked tokens?",
"SW5E.PolymorphWarn": "You are not allowed to polymorph this actor!",
"SW5E.PolymorphWildShape": "Wild Shape",
"SW5E.Prepared": "Known",
"SW5E.Prepared": "Prepared",
"SW5E.Concentrate": "Concentrate",
"SW5E.Concentrated": "Concentrate",
"SW5E.Price": "Price",
"SW5E.Proficiency": "Proficiency",
"SW5E.Proficient": "Proficient",
@ -640,6 +651,8 @@
"SW5E.PowerPrepInnate": "Innate Powercasting",
"SW5E.PowerPrepPrepared": "Prepared",
"SW5E.PowerPrepAlways": "Always Prepared",
"SW5E.PowerPreparationMode": "Power Preparation Mode",
"SW5E.PowerPrepared": "Prepared",
"SW5E.PowerConcentrationMode": "Power Concentration Mode",
"SW5E.PowerConcentrating": "Concentrating",
"SW5E.PowerProgArt": "Artificer",

View file

@ -302,7 +302,8 @@
}
}
input[type="text"] {
input[type="text"],
input[type="number"] {
height: 20px;
max-width: 20px;
margin: 0;
@ -419,6 +420,7 @@
padding: 0 5px;
overflow-y: auto;
scrollbar-width: thin;
color: @colorTan;
// Inventory Item
.item {
@ -482,6 +484,7 @@
.inventory-header {
margin: 2px 0;
padding: 0;
align-items: center;
background: rgba(0, 0, 0, 0.05);
border: @borderGroove;
font-weight: bold;
@ -499,6 +502,11 @@
}
}
// Item names
.item-name {
color: @colorDark;
}
// Item Detail Sections
.item-detail {
flex: 0 0 70px;
@ -686,6 +694,44 @@
// Empty powerbook controls
.powerbook-empty .item-controls { flex: 1; }
/* ----------------------------------------- */
/* Active Effects */
/* ----------------------------------------- */
.effects {
.effect-name{
flex: 2;
align-items: center;
color: @colorDark;
h4 { margin: 0; }
}
.effect-icon {
flex: 0 0 30px;
height: 30px;
margin-right: 5px;
border: none;
}
.effect-source,
.effect-duration {
text-align: center;
border-left: 1px solid @colorFaint;
border-right: 1px solid @colorFaint;
}
.effect-controls {
flex: 0 0 60px;
text-align: right;
}
.effect {
align-items: center;
border-bottom: 1px solid @colorFaint;
&:last-child { border-bottom: none; }
}
}
/* ----------------------------------------- */
/* TinyMCE */
/* ----------------------------------------- */

View file

@ -20,7 +20,9 @@
/* ----------------------------------------- */
// Item Sheet form fields
input[type="text"], select {
input[type="text"],
input[type="number"],
select {
height: calc(100% - 2px);
border: 1px solid @colorTan;
background: rgba(0, 0, 0, 0.05);
@ -28,7 +30,8 @@
}
// Hovered Fields
input[type="text"] {
input[type="text"],
input[type="number"] {
&:hover,
&:focus {
border: 1px solid #111;
@ -157,7 +160,8 @@
/* ----------------------------------------- */
// Input Fields
input[type="text"] {
input[type="text"],
input[type="number"] {
background: none;
border: 1px solid transparent;
&:hover,

View file

@ -160,14 +160,14 @@
padding: 0 3px 3px;
label {
flex: 0 0 20px;
.openSans();
.bungeeInline();
font-size: 16px;
font-weight: normal;
line-height: 20px;
text-align: center;
}
textarea {
font-family: "Signika", serif;
.openSans();
border: 1px solid @colorFaint;
resize: none;
}

View file

@ -88,7 +88,9 @@
.details {
// Item Sheet form fields
input[type="text"], select {
input[type="text"],
input[type="number"],
select {
height: 24px;
border: 1px solid @colorTan;
background: rgba(0, 0, 0, 0.05);

View file

@ -6,3 +6,33 @@
@import "character.less";
@import "npc.less";
@import "vehicle.less";
// TODO: Remove number styling after 0.7.x
input[type="number"] {
width: calc(100% - 2px);
min-width: 20px;
height: 26px;
background: rgba(0, 0, 0, 0.05);
padding: 1px 3px;
margin: 0;
color: #191813;
font-family: inherit;
font-size: inherit;
text-align: inherit;
line-height: inherit;
border: 1px solid #7a7971;
border-radius: 3px;
-webkit-user-select: text;
-moz-user-select: text;
-ms-user-select: text;
user-select: text;
-moz-appearance: textfield;
&:focus {
box-shadow: 0 0 5px red;
}
}
input[type="number"]::-webkit-inner-spin-button,
input[type="number"]::-webkit-outer-spin-button {
-webkit-appearance: none;
}

View file

@ -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

View file

@ -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

View file

@ -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
}
}

View file

@ -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});
}

View file

@ -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"]
}
}
};

View file

@ -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"
};

View file

@ -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" ) {

View file

@ -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]);

View file

@ -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});
}

View file

@ -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",

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Some files were not shown because too many files have changed in this diff Show more