Updated Armor SRD

This commit is contained in:
WBHarry 2026-02-10 21:44:22 +01:00
parent 47b16392eb
commit b9e3eec34c
42 changed files with 1520 additions and 23 deletions

View file

@ -2982,6 +2982,9 @@
"cannotAlterArmorEffectChanges": "You cannot alter the changes length of an armor effect", "cannotAlterArmorEffectChanges": "You cannot alter the changes length of an armor effect",
"cannotAlterArmorEffectType": "You cannot alter the type of armor effect changes" "cannotAlterArmorEffectType": "You cannot alter the type of armor effect changes"
}, },
"Progress": {
"migrationLabel": "Performing system migration. Please wait and do not close Foundry."
},
"Sidebar": { "Sidebar": {
"actorDirectory": { "actorDirectory": {
"tier": "Tier {tier} {type}", "tier": "Tier {tier} {type}",

View file

@ -7,3 +7,4 @@ export { default as DhFearTracker } from './fearTracker.mjs';
export { default as DhHotbar } from './hotbar.mjs'; export { default as DhHotbar } from './hotbar.mjs';
export { default as DhSceneNavigation } from './sceneNavigation.mjs'; export { default as DhSceneNavigation } from './sceneNavigation.mjs';
export { ItemBrowser } from './itemBrowser.mjs'; export { ItemBrowser } from './itemBrowser.mjs';
export { default as DhProgress } from './progress.mjs';

View file

@ -0,0 +1,27 @@
export default class DhProgress {
#notification;
constructor({ max, label = '' }) {
this.max = max;
this.label = label;
this.#notification = ui.notifications.info(this.label, { progress: true });
}
updateMax(newMax) {
this.max = newMax;
}
advance({ by = 1, label = this.label } = {}) {
if (this.value === this.max) return;
this.value += Math.abs(by);
this.#notification.update({ message: label, pct: this.value / this.max });
}
close({ label = '' } = {}) {
this.#notification.update({ message: label, pct: 1 });
}
static createMigrationProgress(max = 0) {
return new DhProgress({ max, label: game.i18n.localize('DAGGERHEART.UI.Progress.migrationLabel') });
}
}

View file

@ -107,9 +107,10 @@ export default class ArmorEffect extends foundry.data.ActiveEffectTypeDataModel
} }
async updateArmorMax(newMax) { async updateArmorMax(newMax) {
const { effect, ...baseChange } = this.armorChange;
const newChanges = [ const newChanges = [
{ {
...this.armorChange, ...baseChange,
max: newMax, max: newMax,
value: Math.min(this.armorChange.value, newMax) value: Math.min(this.armorChange.value, newMax)
} }
@ -152,7 +153,7 @@ export default class ArmorEffect extends foundry.data.ActiveEffectTypeDataModel
armorChange.key = 'system.armorScore'; armorChange.key = 'system.armorScore';
} }
static getDefaultEffectData() { static getDefaultObject() {
return { return {
type: 'armor', type: 'armor',
name: game.i18n.localize('DAGGERHEART.EFFECTS.Armor.newArmorEffect'), name: game.i18n.localize('DAGGERHEART.EFFECTS.Armor.newArmorEffect'),
@ -160,13 +161,6 @@ export default class ArmorEffect extends foundry.data.ActiveEffectTypeDataModel
}; };
} }
async _preCreate(data, options, user) {
const allowed = await super._preCreate(data, options, user);
if (allowed === false) return;
await this.updateSource({ ...ArmorEffect.getDefaultEffectData(), data });
}
async _preUpdate(changes, options, user) { async _preUpdate(changes, options, user) {
const allowed = await super._preUpdate(changes, options, user); const allowed = await super._preUpdate(changes, options, user);
if (allowed === false) return false; if (allowed === false) return false;

View file

@ -85,7 +85,7 @@ export default class DHArmor extends AttachableItem {
if (!this.parent.effects.some(x => x.type === 'armor')) { if (!this.parent.effects.some(x => x.type === 'armor')) {
this.parent.createEmbeddedDocuments('ActiveEffect', [ this.parent.createEmbeddedDocuments('ActiveEffect', [
game.system.api.data.activeEffects.ArmorEffect.getDefaultEffectData() game.system.api.data.activeEffects.ArmorEffect.getDefaultObject()
]); ]);
} }
} }
@ -175,6 +175,25 @@ export default class DHArmor extends AttachableItem {
} }
} }
/** @inheritDoc */
static migrateDocumentData(source) {
if (source.system.baseScore !== undefined && !source.effects.some(x => x.type === 'armor')) {
// source.effects.push({
// ...game.system.api.data.activeEffects.ArmorEffect.getDefaultObject(),
// changes: [{
// type: CONFIG.DH.GENERAL.activeEffectModes.armor.id,
// phase: 'initial',
// priority: 20,
// value: 0,
// max: source.system.baseScore
// }],
// });
if (!source.flags) source.flags = {};
if (!source.flags.daggerheart) source.flags.daggerheart = {};
source.flags.daggerheart.baseScoreMigrationValue = source.system.baseScore;
}
}
/** /**
* Generates a list of localized tags based on this item's type-specific properties. * Generates a list of localized tags based on this item's type-specific properties.
* @returns {string[]} An array of localized tag strings. * @returns {string[]} An array of localized tag strings.

View file

@ -230,4 +230,14 @@ export default class DHItem extends foundry.documents.Item {
async _preDelete() { async _preDelete() {
this.deleteTriggers(); this.deleteTriggers();
} }
/** @inheritDoc */
static migrateData(source) {
const documentClass = game.system.api.data.items[`DH${source.type.capitalize()}`];
if (documentClass?.migrateDocumentData) {
documentClass.migrateDocumentData(source);
}
return super.migrateData(source);
}
} }

View file

@ -246,6 +246,106 @@ export async function runMigrations() {
lastMigrationVersion = '1.6.0'; lastMigrationVersion = '1.6.0';
} }
if (foundry.utils.isNewerVersion('2.0.0', lastMigrationVersion)) {
/* Migrate existing armors to the new Armor Effects */
const progress = game.system.api.applications.ui.DhProgress.createMigrationProgress(0);
const lockedPacks = [];
const itemPacks = game.packs.filter(x => x.metadata.type === 'Item');
const actorPacks = game.packs.filter(x => x.metadata.type === 'Actor');
const getIndexes = async (packs, type) => {
const indexes = [];
for (const pack of packs) {
const indexValues = pack.index.values().reduce((acc, index) => {
if (index.type === type) acc.push(index.uuid);
return acc;
}, []);
if (indexValues.length && pack.locked) {
lockedPacks.push(pack.collection);
await pack.configure({ locked: false });
}
indexes.push(...indexValues);
}
return indexes;
};
const armorEntries = await getIndexes(itemPacks, 'armor');
const actorEntries = await getIndexes(actorPacks, 'actor');
const worldArmors = game.items.filter(x => x instanceof game.system.api.documents.DHItem && x.type === 'armor');
for (const character of game.actors.filter(x => x.type === 'character')) {
worldArmors.push(...character.items.filter(x => x.type === 'armor'));
}
/* The async fetches are the mainstay of time. Leaving 1 progress for the sync logic */
const newMax = armorEntries.length + actorEntries.length + 1;
progress.updateMax(newMax);
const compendiumArmors = [];
for (const entry of armorEntries) {
const armor = await foundry.utils.fromUuid(entry);
compendiumArmors.push(armor);
progress.advance();
}
for (const entry of actorEntries) {
const actor = await foundry.utils.fromUuid(entry);
compendiumArmors.push(...actor.items.filter(x => x.type === 'armor'));
progress.advance();
}
// const lockedPacks = [];
// const compendiumArmors = [];
// const compendiumCharacters = [];
// for (let pack of game.packs.filter(x => x.metadata.type === 'Item')) {
// if (pack.locked) {
// lockedPacks.push(pack.collection);
// await pack.configure({ locked: false });
// }
// const documents = await pack.getDocuments({ type: 'armor' });
// compendiumArmors.push(...documents.filter(x => x instanceof game.system.api.documents.DHItem && x.type === 'armor'));
// compendiumCharacters.push(...documents.filter(x => x.type === 'character'));
// }
for (const armor of [...compendiumArmors, ...worldArmors]) {
const hasArmorEffect = armor.effects.some(x => x.type === 'armor');
const migrationArmorScore = armor.flags.daggerheart?.baseScoreMigrationValue;
if (migrationArmorScore !== undefined && !hasArmorEffect) {
await armor.createEmbeddedDocuments('ActiveEffect', [
{
...game.system.api.data.activeEffects.ArmorEffect.getDefaultObject(),
changes: [
{
type: CONFIG.DH.GENERAL.activeEffectModes.armor.id,
phase: 'initial',
priority: 20,
value: 0,
max: migrationArmorScore
}
]
}
]);
}
}
progress.advance();
for (let packId of lockedPacks) {
const pack = game.packs.get(packId);
await pack.configure({ locked: true });
}
progress.close();
// lastMigrationVersion = '2.0.0';
}
//#endregion //#endregion
await game.settings.set(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.LastMigrationVersion, lastMigrationVersion); await game.settings.set(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.LastMigrationVersion, lastMigrationVersion);

View file

@ -63,6 +63,44 @@
"compendiumSource": null "compendiumSource": null
}, },
"_key": "!items.effects!LzLOJ9EVaHWAjoq9.qlzHOAnpBYzosQxK" "_key": "!items.effects!LzLOJ9EVaHWAjoq9.qlzHOAnpBYzosQxK"
},
{
"type": "armor",
"name": "Armor Effect",
"img": "icons/equipment/chest/breastplate-helmet-metal.webp",
"system": {
"changes": [
{
"type": "armor",
"phase": "initial",
"priority": 20,
"value": 0,
"max": 6
}
]
},
"_id": "I0649iXfgoME38fU",
"disabled": false,
"start": null,
"duration": {
"value": null,
"units": "seconds",
"expiry": null,
"expired": false
},
"description": "",
"origin": null,
"tint": "#ffffff",
"transfer": true,
"statuses": [],
"showIcon": 1,
"folder": null,
"sort": 0,
"flags": {},
"_stats": {
"compendiumSource": null
},
"_key": "!items.effects!LzLOJ9EVaHWAjoq9.I0649iXfgoME38fU"
} }
], ],
"sort": 0, "sort": 0,

View file

@ -68,6 +68,44 @@
"compendiumSource": null "compendiumSource": null
}, },
"_key": "!items.effects!crIbCb9NZ4K0VpoU.awdHgEaM54G3emOU" "_key": "!items.effects!crIbCb9NZ4K0VpoU.awdHgEaM54G3emOU"
},
{
"type": "armor",
"name": "Armor Effect",
"img": "icons/equipment/chest/breastplate-helmet-metal.webp",
"system": {
"changes": [
{
"type": "armor",
"phase": "initial",
"priority": 20,
"value": 0,
"max": 6
}
]
},
"_id": "kRaWET7LV25rD4jy",
"disabled": false,
"start": null,
"duration": {
"value": null,
"units": "seconds",
"expiry": null,
"expired": false
},
"description": "",
"origin": null,
"tint": "#ffffff",
"transfer": true,
"statuses": [],
"showIcon": 1,
"folder": null,
"sort": 0,
"flags": {},
"_stats": {
"compendiumSource": null
},
"_key": "!items.effects!crIbCb9NZ4K0VpoU.kRaWET7LV25rD4jy"
} }
], ],
"sort": 0, "sort": 0,

View file

@ -63,6 +63,44 @@
"compendiumSource": null "compendiumSource": null
}, },
"_key": "!items.effects!epkAmlZVk7HOfUUT.Fq9Q93IHCchhfSss" "_key": "!items.effects!epkAmlZVk7HOfUUT.Fq9Q93IHCchhfSss"
},
{
"type": "armor",
"name": "Armor Effect",
"img": "icons/equipment/chest/breastplate-helmet-metal.webp",
"system": {
"changes": [
{
"type": "armor",
"phase": "initial",
"priority": 20,
"value": 0,
"max": 5
}
]
},
"_id": "lJBLFQHDjmgLsLL8",
"disabled": false,
"start": null,
"duration": {
"value": null,
"units": "seconds",
"expiry": null,
"expired": false
},
"description": "",
"origin": null,
"tint": "#ffffff",
"transfer": true,
"statuses": [],
"showIcon": 1,
"folder": null,
"sort": 0,
"flags": {},
"_stats": {
"compendiumSource": null
},
"_key": "!items.effects!epkAmlZVk7HOfUUT.lJBLFQHDjmgLsLL8"
} }
], ],
"sort": 0, "sort": 0,

View file

@ -25,7 +25,46 @@
"artist": "" "artist": ""
} }
}, },
"effects": [], "effects": [
{
"type": "armor",
"name": "Armor Effect",
"img": "icons/equipment/chest/breastplate-helmet-metal.webp",
"system": {
"changes": [
{
"type": "armor",
"phase": "initial",
"priority": 20,
"value": 0,
"max": 5
}
]
},
"_id": "1vzHmkVScl1KyHxy",
"disabled": false,
"start": null,
"duration": {
"value": null,
"units": "seconds",
"expiry": null,
"expired": false
},
"description": "",
"origin": null,
"tint": "#ffffff",
"transfer": true,
"statuses": [],
"showIcon": 1,
"folder": null,
"sort": 0,
"flags": {},
"_stats": {
"compendiumSource": null
},
"_key": "!items.effects!itSOp2GCyem0f7oM.1vzHmkVScl1KyHxy"
}
],
"sort": 0, "sort": 0,
"ownership": { "ownership": {
"default": 0, "default": 0,

View file

@ -63,6 +63,44 @@
"compendiumSource": null "compendiumSource": null
}, },
"_key": "!items.effects!ITAjcigTcUw5pMCN.8ze88zUwdkQSKKJq" "_key": "!items.effects!ITAjcigTcUw5pMCN.8ze88zUwdkQSKKJq"
},
{
"type": "armor",
"name": "Armor Effect",
"img": "icons/equipment/chest/breastplate-helmet-metal.webp",
"system": {
"changes": [
{
"type": "armor",
"phase": "initial",
"priority": 20,
"value": 0,
"max": 3
}
]
},
"_id": "B5hlwTWBUSJYZurq",
"disabled": false,
"start": null,
"duration": {
"value": null,
"units": "seconds",
"expiry": null,
"expired": false
},
"description": "",
"origin": null,
"tint": "#ffffff",
"transfer": true,
"statuses": [],
"showIcon": 1,
"folder": null,
"sort": 0,
"flags": {},
"_stats": {
"compendiumSource": null
},
"_key": "!items.effects!ITAjcigTcUw5pMCN.B5hlwTWBUSJYZurq"
} }
], ],
"sort": 0, "sort": 0,

View file

@ -63,6 +63,44 @@
"compendiumSource": null "compendiumSource": null
}, },
"_key": "!items.effects!WuoVwZA53XRAIt6d.Hy0sNtFS1JAXxgwC" "_key": "!items.effects!WuoVwZA53XRAIt6d.Hy0sNtFS1JAXxgwC"
},
{
"type": "armor",
"name": "Armor Effect",
"img": "icons/equipment/chest/breastplate-helmet-metal.webp",
"system": {
"changes": [
{
"type": "armor",
"phase": "initial",
"priority": 20,
"value": 0,
"max": 5
}
]
},
"_id": "lDRMjmZXRJDbhK03",
"disabled": false,
"start": null,
"duration": {
"value": null,
"units": "seconds",
"expiry": null,
"expired": false
},
"description": "",
"origin": null,
"tint": "#ffffff",
"transfer": true,
"statuses": [],
"showIcon": 1,
"folder": null,
"sort": 0,
"flags": {},
"_stats": {
"compendiumSource": null
},
"_key": "!items.effects!WuoVwZA53XRAIt6d.lDRMjmZXRJDbhK03"
} }
], ],
"sort": 0, "sort": 0,

View file

@ -63,6 +63,44 @@
"compendiumSource": null "compendiumSource": null
}, },
"_key": "!items.effects!mNN6pvcsS10ChrWF.s8KtTIngTjnOlaTP" "_key": "!items.effects!mNN6pvcsS10ChrWF.s8KtTIngTjnOlaTP"
},
{
"type": "armor",
"name": "Armor Effect",
"img": "icons/equipment/chest/breastplate-helmet-metal.webp",
"system": {
"changes": [
{
"type": "armor",
"phase": "initial",
"priority": 20,
"value": 0,
"max": 6
}
]
},
"_id": "qYkj3jKDdFzflfh4",
"disabled": false,
"start": null,
"duration": {
"value": null,
"units": "seconds",
"expiry": null,
"expired": false
},
"description": "",
"origin": null,
"tint": "#ffffff",
"transfer": true,
"statuses": [],
"showIcon": 1,
"folder": null,
"sort": 0,
"flags": {},
"_stats": {
"compendiumSource": null
},
"_key": "!items.effects!mNN6pvcsS10ChrWF.qYkj3jKDdFzflfh4"
} }
], ],
"sort": 0, "sort": 0,

View file

@ -63,6 +63,44 @@
"compendiumSource": null "compendiumSource": null
}, },
"_key": "!items.effects!haULhuEg37zUUvhb.ZfO5NjpqEIzZVlPq" "_key": "!items.effects!haULhuEg37zUUvhb.ZfO5NjpqEIzZVlPq"
},
{
"type": "armor",
"name": "Armor Effect",
"img": "icons/equipment/chest/breastplate-helmet-metal.webp",
"system": {
"changes": [
{
"type": "armor",
"phase": "initial",
"priority": 20,
"value": 0,
"max": 4
}
]
},
"_id": "d6ICO5qZArh0xF1y",
"disabled": false,
"start": null,
"duration": {
"value": null,
"units": "seconds",
"expiry": null,
"expired": false
},
"description": "",
"origin": null,
"tint": "#ffffff",
"transfer": true,
"statuses": [],
"showIcon": 1,
"folder": null,
"sort": 0,
"flags": {},
"_stats": {
"compendiumSource": null
},
"_key": "!items.effects!haULhuEg37zUUvhb.d6ICO5qZArh0xF1y"
} }
], ],
"sort": 0, "sort": 0,

View file

@ -63,6 +63,44 @@
"compendiumSource": null "compendiumSource": null
}, },
"_key": "!items.effects!vMJxEWz1srfwMsoj.8bwf1Ri3jYkjphEv" "_key": "!items.effects!vMJxEWz1srfwMsoj.8bwf1Ri3jYkjphEv"
},
{
"type": "armor",
"name": "Armor Effect",
"img": "icons/equipment/chest/breastplate-helmet-metal.webp",
"system": {
"changes": [
{
"type": "armor",
"phase": "initial",
"priority": 20,
"value": 0,
"max": 5
}
]
},
"_id": "2q3uXc7EbTNSIjs8",
"disabled": false,
"start": null,
"duration": {
"value": null,
"units": "seconds",
"expiry": null,
"expired": false
},
"description": "",
"origin": null,
"tint": "#ffffff",
"transfer": true,
"statuses": [],
"showIcon": 1,
"folder": null,
"sort": 0,
"flags": {},
"_stats": {
"compendiumSource": null
},
"_key": "!items.effects!vMJxEWz1srfwMsoj.2q3uXc7EbTNSIjs8"
} }
], ],
"sort": 0, "sort": 0,

View file

@ -62,7 +62,46 @@
"artist": "" "artist": ""
} }
}, },
"effects": [], "effects": [
{
"type": "armor",
"name": "Armor Effect",
"img": "icons/equipment/chest/breastplate-helmet-metal.webp",
"system": {
"changes": [
{
"type": "armor",
"phase": "initial",
"priority": 20,
"value": 0,
"max": 5
}
]
},
"_id": "a8frrkkR4i2TBFdF",
"disabled": false,
"start": null,
"duration": {
"value": null,
"units": "seconds",
"expiry": null,
"expired": false
},
"description": "",
"origin": null,
"tint": "#ffffff",
"transfer": true,
"statuses": [],
"showIcon": 1,
"folder": null,
"sort": 0,
"flags": {},
"_stats": {
"compendiumSource": null
},
"_key": "!items.effects!mdQ69eFHyAQUDmE7.a8frrkkR4i2TBFdF"
}
],
"sort": 0, "sort": 0,
"ownership": { "ownership": {
"default": 0, "default": 0,

View file

@ -88,7 +88,46 @@
"artist": "" "artist": ""
} }
}, },
"effects": [], "effects": [
{
"type": "armor",
"name": "Armor Effect",
"img": "icons/equipment/chest/breastplate-helmet-metal.webp",
"system": {
"changes": [
{
"type": "armor",
"phase": "initial",
"priority": 20,
"value": 0,
"max": 7
}
]
},
"_id": "a1x2R28RtXE2jqu5",
"disabled": false,
"start": null,
"duration": {
"value": null,
"units": "seconds",
"expiry": null,
"expired": false
},
"description": "",
"origin": null,
"tint": "#ffffff",
"transfer": true,
"statuses": [],
"showIcon": 1,
"folder": null,
"sort": 0,
"flags": {},
"_stats": {
"compendiumSource": null
},
"_key": "!items.effects!hAY6UgdGT7dj22Pr.a1x2R28RtXE2jqu5"
}
],
"sort": 0, "sort": 0,
"ownership": { "ownership": {
"default": 0, "default": 0,

View file

@ -64,6 +64,44 @@
"compendiumSource": null "compendiumSource": null
}, },
"_key": "!items.effects!Q6LxmtFetDDkoZVZ.xGxqTCO8MjNq5Cw6" "_key": "!items.effects!Q6LxmtFetDDkoZVZ.xGxqTCO8MjNq5Cw6"
},
{
"type": "armor",
"name": "Armor Effect",
"img": "icons/equipment/chest/breastplate-helmet-metal.webp",
"system": {
"changes": [
{
"type": "armor",
"phase": "initial",
"priority": 20,
"value": 0,
"max": 4
}
]
},
"_id": "4yImObrCOaWLGxgH",
"disabled": false,
"start": null,
"duration": {
"value": null,
"units": "seconds",
"expiry": null,
"expired": false
},
"description": "",
"origin": null,
"tint": "#ffffff",
"transfer": true,
"statuses": [],
"showIcon": 1,
"folder": null,
"sort": 0,
"flags": {},
"_stats": {
"compendiumSource": null
},
"_key": "!items.effects!Q6LxmtFetDDkoZVZ.4yImObrCOaWLGxgH"
} }
], ],
"sort": 0, "sort": 0,

View file

@ -86,7 +86,46 @@
"artist": "" "artist": ""
} }
}, },
"effects": [], "effects": [
{
"type": "armor",
"name": "Armor Effect",
"img": "icons/equipment/chest/breastplate-helmet-metal.webp",
"system": {
"changes": [
{
"type": "armor",
"phase": "initial",
"priority": 20,
"value": 0,
"max": 6
}
]
},
"_id": "8VtWedDMEX0tbqTn",
"disabled": false,
"start": null,
"duration": {
"value": null,
"units": "seconds",
"expiry": null,
"expired": false
},
"description": "",
"origin": null,
"tint": "#ffffff",
"transfer": true,
"statuses": [],
"showIcon": 1,
"folder": null,
"sort": 0,
"flags": {},
"_stats": {
"compendiumSource": null
},
"_key": "!items.effects!bcQUh4QG3qFX0Vx6.8VtWedDMEX0tbqTn"
}
],
"sort": 0, "sort": 0,
"ownership": { "ownership": {
"default": 0, "default": 0,

View file

@ -63,6 +63,44 @@
"compendiumSource": null "compendiumSource": null
}, },
"_key": "!items.effects!7emTSt6nhZuTlvt5.QIefVb73cm9gYju8" "_key": "!items.effects!7emTSt6nhZuTlvt5.QIefVb73cm9gYju8"
},
{
"type": "armor",
"name": "Armor Effect",
"img": "icons/equipment/chest/breastplate-helmet-metal.webp",
"system": {
"changes": [
{
"type": "armor",
"phase": "initial",
"priority": 20,
"value": 0,
"max": 4
}
]
},
"_id": "TRI0rfHs8RTSCmuY",
"disabled": false,
"start": null,
"duration": {
"value": null,
"units": "seconds",
"expiry": null,
"expired": false
},
"description": "",
"origin": null,
"tint": "#ffffff",
"transfer": true,
"statuses": [],
"showIcon": 1,
"folder": null,
"sort": 0,
"flags": {},
"_stats": {
"compendiumSource": null
},
"_key": "!items.effects!7emTSt6nhZuTlvt5.TRI0rfHs8RTSCmuY"
} }
], ],
"sort": 0, "sort": 0,

View file

@ -68,6 +68,44 @@
"compendiumSource": null "compendiumSource": null
}, },
"_key": "!items.effects!UdUJNa31WxFW2noa.mfKMW9SX3Mnos1nY" "_key": "!items.effects!UdUJNa31WxFW2noa.mfKMW9SX3Mnos1nY"
},
{
"type": "armor",
"name": "Armor Effect",
"img": "icons/equipment/chest/breastplate-helmet-metal.webp",
"system": {
"changes": [
{
"type": "armor",
"phase": "initial",
"priority": 20,
"value": 0,
"max": 4
}
]
},
"_id": "VpaGM3KSKQFG5wC8",
"disabled": false,
"start": null,
"duration": {
"value": null,
"units": "seconds",
"expiry": null,
"expired": false
},
"description": "",
"origin": null,
"tint": "#ffffff",
"transfer": true,
"statuses": [],
"showIcon": 1,
"folder": null,
"sort": 0,
"flags": {},
"_stats": {
"compendiumSource": null
},
"_key": "!items.effects!UdUJNa31WxFW2noa.VpaGM3KSKQFG5wC8"
} }
], ],
"sort": 0, "sort": 0,

View file

@ -63,6 +63,44 @@
"compendiumSource": null "compendiumSource": null
}, },
"_key": "!items.effects!yJFp1bfpecDcStVK.v1FNEsypRF5W6vVc" "_key": "!items.effects!yJFp1bfpecDcStVK.v1FNEsypRF5W6vVc"
},
{
"type": "armor",
"name": "Armor Effect",
"img": "icons/equipment/chest/breastplate-helmet-metal.webp",
"system": {
"changes": [
{
"type": "armor",
"phase": "initial",
"priority": 20,
"value": 0,
"max": 3
}
]
},
"_id": "qNXDdLhZkPe6Wnxa",
"disabled": false,
"start": null,
"duration": {
"value": null,
"units": "seconds",
"expiry": null,
"expired": false
},
"description": "",
"origin": null,
"tint": "#ffffff",
"transfer": true,
"statuses": [],
"showIcon": 1,
"folder": null,
"sort": 0,
"flags": {},
"_stats": {
"compendiumSource": null
},
"_key": "!items.effects!yJFp1bfpecDcStVK.qNXDdLhZkPe6Wnxa"
} }
], ],
"sort": 0, "sort": 0,

View file

@ -79,7 +79,46 @@
"artist": "" "artist": ""
} }
}, },
"effects": [], "effects": [
{
"type": "armor",
"name": "Armor Effect",
"img": "icons/equipment/chest/breastplate-helmet-metal.webp",
"system": {
"changes": [
{
"type": "armor",
"phase": "initial",
"priority": 20,
"value": 0,
"max": 4
}
]
},
"_id": "E3Zwl9T3EuK7hOOB",
"disabled": false,
"start": null,
"duration": {
"value": null,
"units": "seconds",
"expiry": null,
"expired": false
},
"description": "",
"origin": null,
"tint": "#ffffff",
"transfer": true,
"statuses": [],
"showIcon": 1,
"folder": null,
"sort": 0,
"flags": {},
"_stats": {
"compendiumSource": null
},
"_key": "!items.effects!dvyQeUVRLc9y6rnt.E3Zwl9T3EuK7hOOB"
}
],
"sort": 0, "sort": 0,
"ownership": { "ownership": {
"default": 0, "default": 0,

View file

@ -63,6 +63,44 @@
"compendiumSource": null "compendiumSource": null
}, },
"_key": "!items.effects!K5WkjS0NGqHYmhU3.JHupzYULxdQzFzuj" "_key": "!items.effects!K5WkjS0NGqHYmhU3.JHupzYULxdQzFzuj"
},
{
"type": "armor",
"name": "Armor Effect",
"img": "icons/equipment/chest/breastplate-helmet-metal.webp",
"system": {
"changes": [
{
"type": "armor",
"phase": "initial",
"priority": 20,
"value": 0,
"max": 5
}
]
},
"_id": "QXvJ3gL1kNcOLaqC",
"disabled": false,
"start": null,
"duration": {
"value": null,
"units": "seconds",
"expiry": null,
"expired": false
},
"description": "",
"origin": null,
"tint": "#ffffff",
"transfer": true,
"statuses": [],
"showIcon": 1,
"folder": null,
"sort": 0,
"flags": {},
"_stats": {
"compendiumSource": null
},
"_key": "!items.effects!K5WkjS0NGqHYmhU3.QXvJ3gL1kNcOLaqC"
} }
], ],
"sort": 0, "sort": 0,

View file

@ -68,6 +68,44 @@
"compendiumSource": null "compendiumSource": null
}, },
"_key": "!items.effects!9f7RozpPTqrzJS1m.wstJ1aKKtmXgCwxB" "_key": "!items.effects!9f7RozpPTqrzJS1m.wstJ1aKKtmXgCwxB"
},
{
"type": "armor",
"name": "Armor Effect",
"img": "icons/equipment/chest/breastplate-helmet-metal.webp",
"system": {
"changes": [
{
"type": "armor",
"phase": "initial",
"priority": 20,
"value": 0,
"max": 5
}
]
},
"_id": "7ahyQs2byVwsUVAF",
"disabled": false,
"start": null,
"duration": {
"value": null,
"units": "seconds",
"expiry": null,
"expired": false
},
"description": "",
"origin": null,
"tint": "#ffffff",
"transfer": true,
"statuses": [],
"showIcon": 1,
"folder": null,
"sort": 0,
"flags": {},
"_stats": {
"compendiumSource": null
},
"_key": "!items.effects!9f7RozpPTqrzJS1m.7ahyQs2byVwsUVAF"
} }
], ],
"sort": 0, "sort": 0,

View file

@ -63,6 +63,44 @@
"compendiumSource": null "compendiumSource": null
}, },
"_key": "!items.effects!jphnMZjnS2FkOH3s.BFwU3ErPaajUSMUz" "_key": "!items.effects!jphnMZjnS2FkOH3s.BFwU3ErPaajUSMUz"
},
{
"type": "armor",
"name": "Armor Effect",
"img": "icons/equipment/chest/breastplate-helmet-metal.webp",
"system": {
"changes": [
{
"type": "armor",
"phase": "initial",
"priority": 20,
"value": 0,
"max": 4
}
]
},
"_id": "uF8AksqGBBfKrrVM",
"disabled": false,
"start": null,
"duration": {
"value": null,
"units": "seconds",
"expiry": null,
"expired": false
},
"description": "",
"origin": null,
"tint": "#ffffff",
"transfer": true,
"statuses": [],
"showIcon": 1,
"folder": null,
"sort": 0,
"flags": {},
"_stats": {
"compendiumSource": null
},
"_key": "!items.effects!jphnMZjnS2FkOH3s.uF8AksqGBBfKrrVM"
} }
], ],
"sort": 0, "sort": 0,

View file

@ -25,7 +25,46 @@
"artist": "" "artist": ""
} }
}, },
"effects": [], "effects": [
{
"type": "armor",
"name": "Armor Effect",
"img": "icons/equipment/chest/breastplate-helmet-metal.webp",
"system": {
"changes": [
{
"type": "armor",
"phase": "initial",
"priority": 20,
"value": 0,
"max": 4
}
]
},
"_id": "OqL5x4lkQvjbzSGx",
"disabled": false,
"start": null,
"duration": {
"value": null,
"units": "seconds",
"expiry": null,
"expired": false
},
"description": "",
"origin": null,
"tint": "#ffffff",
"transfer": true,
"statuses": [],
"showIcon": 1,
"folder": null,
"sort": 0,
"flags": {},
"_stats": {
"compendiumSource": null
},
"_key": "!items.effects!t91M61pSCMKStTNt.OqL5x4lkQvjbzSGx"
}
],
"sort": 0, "sort": 0,
"ownership": { "ownership": {
"default": 0, "default": 0,

View file

@ -75,6 +75,44 @@
"compendiumSource": null "compendiumSource": null
}, },
"_key": "!items.effects!tzZntboNtHL5C6VM.P3aCN8PQgPXP4C9M" "_key": "!items.effects!tzZntboNtHL5C6VM.P3aCN8PQgPXP4C9M"
},
{
"type": "armor",
"name": "Armor Effect",
"img": "icons/equipment/chest/breastplate-helmet-metal.webp",
"system": {
"changes": [
{
"type": "armor",
"phase": "initial",
"priority": 20,
"value": 0,
"max": 4
}
]
},
"_id": "wKp8iBd3KfaMlzJh",
"disabled": false,
"start": null,
"duration": {
"value": null,
"units": "seconds",
"expiry": null,
"expired": false
},
"description": "",
"origin": null,
"tint": "#ffffff",
"transfer": true,
"statuses": [],
"showIcon": 1,
"folder": null,
"sort": 0,
"flags": {},
"_stats": {
"compendiumSource": null
},
"_key": "!items.effects!tzZntboNtHL5C6VM.wKp8iBd3KfaMlzJh"
} }
], ],
"sort": 0, "sort": 0,

View file

@ -25,7 +25,46 @@
"artist": "" "artist": ""
} }
}, },
"effects": [], "effects": [
{
"type": "armor",
"name": "Armor Effect",
"img": "icons/equipment/chest/breastplate-helmet-metal.webp",
"system": {
"changes": [
{
"type": "armor",
"phase": "initial",
"priority": 20,
"value": 0,
"max": 3
}
]
},
"_id": "TbWKQ0R6AfNNeqNd",
"disabled": false,
"start": null,
"duration": {
"value": null,
"units": "seconds",
"expiry": null,
"expired": false
},
"description": "",
"origin": null,
"tint": "#ffffff",
"transfer": true,
"statuses": [],
"showIcon": 1,
"folder": null,
"sort": 0,
"flags": {},
"_stats": {
"compendiumSource": null
},
"_key": "!items.effects!nibfdNtp2PtxvbVz.TbWKQ0R6AfNNeqNd"
}
],
"sort": 0, "sort": 0,
"ownership": { "ownership": {
"default": 0, "default": 0,

View file

@ -63,6 +63,44 @@
"compendiumSource": null "compendiumSource": null
}, },
"_key": "!items.effects!EsIN5OLKe9ZYFNXZ.8Oa6Y375X8UpcPph" "_key": "!items.effects!EsIN5OLKe9ZYFNXZ.8Oa6Y375X8UpcPph"
},
{
"type": "armor",
"name": "Armor Effect",
"img": "icons/equipment/chest/breastplate-helmet-metal.webp",
"system": {
"changes": [
{
"type": "armor",
"phase": "initial",
"priority": 20,
"value": 0,
"max": 7
}
]
},
"_id": "QAkiVlwfclxQ6JSD",
"disabled": false,
"start": null,
"duration": {
"value": null,
"units": "seconds",
"expiry": null,
"expired": false
},
"description": "",
"origin": null,
"tint": "#ffffff",
"transfer": true,
"statuses": [],
"showIcon": 1,
"folder": null,
"sort": 0,
"flags": {},
"_stats": {
"compendiumSource": null
},
"_key": "!items.effects!EsIN5OLKe9ZYFNXZ.QAkiVlwfclxQ6JSD"
} }
], ],
"sort": 0, "sort": 0,

View file

@ -68,6 +68,44 @@
"compendiumSource": null "compendiumSource": null
}, },
"_key": "!items.effects!SXWjUR2aUR6bYvdl.zvzkRX2Uevemmbz4" "_key": "!items.effects!SXWjUR2aUR6bYvdl.zvzkRX2Uevemmbz4"
},
{
"type": "armor",
"name": "Armor Effect",
"img": "icons/equipment/chest/breastplate-helmet-metal.webp",
"system": {
"changes": [
{
"type": "armor",
"phase": "initial",
"priority": 20,
"value": 0,
"max": 7
}
]
},
"_id": "mMYVCcmoBJxjU0er",
"disabled": false,
"start": null,
"duration": {
"value": null,
"units": "seconds",
"expiry": null,
"expired": false
},
"description": "",
"origin": null,
"tint": "#ffffff",
"transfer": true,
"statuses": [],
"showIcon": 1,
"folder": null,
"sort": 0,
"flags": {},
"_stats": {
"compendiumSource": null
},
"_key": "!items.effects!SXWjUR2aUR6bYvdl.mMYVCcmoBJxjU0er"
} }
], ],
"sort": 0, "sort": 0,

View file

@ -63,6 +63,44 @@
"compendiumSource": null "compendiumSource": null
}, },
"_key": "!items.effects!c6tMXz4rPf9ioQrf.3AUNxBoj7mp1ziJQ" "_key": "!items.effects!c6tMXz4rPf9ioQrf.3AUNxBoj7mp1ziJQ"
},
{
"type": "armor",
"name": "Armor Effect",
"img": "icons/equipment/chest/breastplate-helmet-metal.webp",
"system": {
"changes": [
{
"type": "armor",
"phase": "initial",
"priority": 20,
"value": 0,
"max": 6
}
]
},
"_id": "vgnBNFSXks1BcFQ5",
"disabled": false,
"start": null,
"duration": {
"value": null,
"units": "seconds",
"expiry": null,
"expired": false
},
"description": "",
"origin": null,
"tint": "#ffffff",
"transfer": true,
"statuses": [],
"showIcon": 1,
"folder": null,
"sort": 0,
"flags": {},
"_stats": {
"compendiumSource": null
},
"_key": "!items.effects!c6tMXz4rPf9ioQrf.vgnBNFSXks1BcFQ5"
} }
], ],
"sort": 0, "sort": 0,

View file

@ -25,7 +25,46 @@
"artist": "" "artist": ""
} }
}, },
"effects": [], "effects": [
{
"type": "armor",
"name": "Armor Effect",
"img": "icons/equipment/chest/breastplate-helmet-metal.webp",
"system": {
"changes": [
{
"type": "armor",
"phase": "initial",
"priority": 20,
"value": 0,
"max": 6
}
]
},
"_id": "m6HRZpgaMnuw1dE7",
"disabled": false,
"start": null,
"duration": {
"value": null,
"units": "seconds",
"expiry": null,
"expired": false
},
"description": "",
"origin": null,
"tint": "#ffffff",
"transfer": true,
"statuses": [],
"showIcon": 1,
"folder": null,
"sort": 0,
"flags": {},
"_stats": {
"compendiumSource": null
},
"_key": "!items.effects!Tptgl5WOj76TyFn7.m6HRZpgaMnuw1dE7"
}
],
"sort": 0, "sort": 0,
"ownership": { "ownership": {
"default": 0, "default": 0,

View file

@ -63,6 +63,44 @@
"compendiumSource": null "compendiumSource": null
}, },
"_key": "!items.effects!AQzU2RsqS5V5bd1v.3n4O7PyAWMEFdr5p" "_key": "!items.effects!AQzU2RsqS5V5bd1v.3n4O7PyAWMEFdr5p"
},
{
"type": "armor",
"name": "Armor Effect",
"img": "icons/equipment/chest/breastplate-helmet-metal.webp",
"system": {
"changes": [
{
"type": "armor",
"phase": "initial",
"priority": 20,
"value": 0,
"max": 6
}
]
},
"_id": "aRwIF0ss6R7AYNZf",
"disabled": false,
"start": null,
"duration": {
"value": null,
"units": "seconds",
"expiry": null,
"expired": false
},
"description": "",
"origin": null,
"tint": "#ffffff",
"transfer": true,
"statuses": [],
"showIcon": 1,
"folder": null,
"sort": 0,
"flags": {},
"_stats": {
"compendiumSource": null
},
"_key": "!items.effects!AQzU2RsqS5V5bd1v.aRwIF0ss6R7AYNZf"
} }
], ],
"sort": 0, "sort": 0,

View file

@ -55,7 +55,46 @@
"artist": "" "artist": ""
} }
}, },
"effects": [], "effects": [
{
"type": "armor",
"name": "Armor Effect",
"img": "icons/equipment/chest/breastplate-helmet-metal.webp",
"system": {
"changes": [
{
"type": "armor",
"phase": "initial",
"priority": 20,
"value": 0,
"max": 5
}
]
},
"_id": "YvXWUYVaXDHugsEr",
"disabled": false,
"start": null,
"duration": {
"value": null,
"units": "seconds",
"expiry": null,
"expired": false
},
"description": "",
"origin": null,
"tint": "#ffffff",
"transfer": true,
"statuses": [],
"showIcon": 1,
"folder": null,
"sort": 0,
"flags": {},
"_stats": {
"compendiumSource": null
},
"_key": "!items.effects!tN8kAeBvNKM3EBFo.YvXWUYVaXDHugsEr"
}
],
"sort": 0, "sort": 0,
"ownership": { "ownership": {
"default": 0, "default": 0,

View file

@ -62,7 +62,46 @@
"artist": "" "artist": ""
} }
}, },
"effects": [], "effects": [
{
"type": "armor",
"name": "Armor Effect",
"img": "icons/equipment/chest/breastplate-helmet-metal.webp",
"system": {
"changes": [
{
"type": "armor",
"phase": "initial",
"priority": 20,
"value": 0,
"max": 6
}
]
},
"_id": "vkJeIaXB25W3MAt1",
"disabled": false,
"start": null,
"duration": {
"value": null,
"units": "seconds",
"expiry": null,
"expired": false
},
"description": "",
"origin": null,
"tint": "#ffffff",
"transfer": true,
"statuses": [],
"showIcon": 1,
"folder": null,
"sort": 0,
"flags": {},
"_stats": {
"compendiumSource": null
},
"_key": "!items.effects!P4qAEDJUoNLgVRsA.vkJeIaXB25W3MAt1"
}
],
"sort": 0, "sort": 0,
"ownership": { "ownership": {
"default": 0, "default": 0,

View file

@ -62,7 +62,46 @@
"artist": "" "artist": ""
} }
}, },
"effects": [], "effects": [
{
"type": "armor",
"name": "Armor Effect",
"img": "icons/equipment/chest/breastplate-helmet-metal.webp",
"system": {
"changes": [
{
"type": "armor",
"phase": "initial",
"priority": 20,
"value": 0,
"max": 4
}
]
},
"_id": "2dj1LoZcV6tCKpKj",
"disabled": false,
"start": null,
"duration": {
"value": null,
"units": "seconds",
"expiry": null,
"expired": false
},
"description": "",
"origin": null,
"tint": "#ffffff",
"transfer": true,
"statuses": [],
"showIcon": 1,
"folder": null,
"sort": 0,
"flags": {},
"_stats": {
"compendiumSource": null
},
"_key": "!items.effects!tHlBUDQC24YMZqd6.2dj1LoZcV6tCKpKj"
}
],
"sort": 0, "sort": 0,
"ownership": { "ownership": {
"default": 0, "default": 0,

View file

@ -93,6 +93,44 @@
"compendiumSource": null "compendiumSource": null
}, },
"_key": "!items.effects!8X16lJQ3xltTwynm.rkrqlwqtR9REgRx7" "_key": "!items.effects!8X16lJQ3xltTwynm.rkrqlwqtR9REgRx7"
},
{
"type": "armor",
"name": "Armor Effect",
"img": "icons/equipment/chest/breastplate-helmet-metal.webp",
"system": {
"changes": [
{
"type": "armor",
"phase": "initial",
"priority": 20,
"value": 0,
"max": 8
}
]
},
"_id": "3Kn7ZRjhrw1WfALW",
"disabled": false,
"start": null,
"duration": {
"value": null,
"units": "seconds",
"expiry": null,
"expired": false
},
"description": "",
"origin": null,
"tint": "#ffffff",
"transfer": true,
"statuses": [],
"showIcon": 1,
"folder": null,
"sort": 0,
"flags": {},
"_stats": {
"compendiumSource": null
},
"_key": "!items.effects!8X16lJQ3xltTwynm.3Kn7ZRjhrw1WfALW"
} }
], ],
"sort": 0, "sort": 0,

View file

@ -68,6 +68,44 @@
"compendiumSource": null "compendiumSource": null
}, },
"_key": "!items.effects!QjwsIhXKqnlvRBMv.V8CcTcVAIxHq8KNd" "_key": "!items.effects!QjwsIhXKqnlvRBMv.V8CcTcVAIxHq8KNd"
},
{
"type": "armor",
"name": "Armor Effect",
"img": "icons/equipment/chest/breastplate-helmet-metal.webp",
"system": {
"changes": [
{
"type": "armor",
"phase": "initial",
"priority": 20,
"value": 0,
"max": 5
}
]
},
"_id": "6YpS3uYWIbeSgreg",
"disabled": false,
"start": null,
"duration": {
"value": null,
"units": "seconds",
"expiry": null,
"expired": false
},
"description": "",
"origin": null,
"tint": "#ffffff",
"transfer": true,
"statuses": [],
"showIcon": 1,
"folder": null,
"sort": 0,
"flags": {},
"_stats": {
"compendiumSource": null
},
"_key": "!items.effects!QjwsIhXKqnlvRBMv.6YpS3uYWIbeSgreg"
} }
], ],
"sort": 0, "sort": 0,

View file

@ -55,7 +55,46 @@
"artist": "" "artist": ""
} }
}, },
"effects": [], "effects": [
{
"type": "armor",
"name": "Armor Effect",
"img": "icons/equipment/chest/breastplate-helmet-metal.webp",
"system": {
"changes": [
{
"type": "armor",
"phase": "initial",
"priority": 20,
"value": 0,
"max": 5
}
]
},
"_id": "tiE0sRrTm2Ex9TAO",
"disabled": false,
"start": null,
"duration": {
"value": null,
"units": "seconds",
"expiry": null,
"expired": false
},
"description": "",
"origin": null,
"tint": "#ffffff",
"transfer": true,
"statuses": [],
"showIcon": 1,
"folder": null,
"sort": 0,
"flags": {},
"_stats": {
"compendiumSource": null
},
"_key": "!items.effects!PSW3BxCGmtLeWOxM.tiE0sRrTm2Ex9TAO"
}
],
"sort": 0, "sort": 0,
"ownership": { "ownership": {
"default": 0, "default": 0,

View file

@ -55,7 +55,46 @@
"artist": "" "artist": ""
} }
}, },
"effects": [], "effects": [
{
"type": "armor",
"name": "Armor Effect",
"img": "icons/equipment/chest/breastplate-helmet-metal.webp",
"system": {
"changes": [
{
"type": "armor",
"phase": "initial",
"priority": 20,
"value": 0,
"max": 6
}
]
},
"_id": "fpPIhNaFxaz40Iaj",
"disabled": false,
"start": null,
"duration": {
"value": null,
"units": "seconds",
"expiry": null,
"expired": false
},
"description": "",
"origin": null,
"tint": "#ffffff",
"transfer": true,
"statuses": [],
"showIcon": 1,
"folder": null,
"sort": 0,
"flags": {},
"_stats": {
"compendiumSource": null
},
"_key": "!items.effects!OvzgUTYy2RCN85vV.fpPIhNaFxaz40Iaj"
}
],
"sort": 0, "sort": 0,
"ownership": { "ownership": {
"default": 0, "default": 0,