mirror of
https://github.com/Foundryborne/daggerheart.git
synced 2026-07-24 19:39:54 +02:00
Compare commits
11 commits
80b5cda9ba
...
624e81ae36
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
624e81ae36 | ||
|
|
1ebbad4797 | ||
|
|
2c1f52413d | ||
|
|
ca82cbcf66 | ||
|
|
07b7c82094 | ||
|
|
958eaa310c | ||
|
|
f5fa59b3bd | ||
|
|
9f29229c94 | ||
|
|
329d820aab | ||
|
|
8e93025947 | ||
|
|
1492491998 |
48 changed files with 411 additions and 299 deletions
|
|
@ -2010,7 +2010,8 @@
|
|||
"Attachments": {
|
||||
"attachHint": "Drop items here to attach them",
|
||||
"transferHint": "If checked, this effect will be applied to any actor that owns this Effect's parent Item. The effect is always applied if this Item is attached to another one."
|
||||
}
|
||||
},
|
||||
"OriginTag": "Origin: {name}"
|
||||
},
|
||||
"GENERAL": {
|
||||
"Ability": {
|
||||
|
|
|
|||
|
|
@ -518,7 +518,7 @@ export default function DHApplicationMixin(Base) {
|
|||
const doc = await getDocFromElement(target),
|
||||
action = doc?.system?.attack ?? doc;
|
||||
const config = action.prepareConfig(event);
|
||||
config.effects = await game.system.api.data.actions.actionsTypes.base.getEffects(
|
||||
config.effects = await game.system.api.data.actions.actionsTypes.base.getActionRelevantEffects(
|
||||
this.document,
|
||||
doc
|
||||
);
|
||||
|
|
@ -603,7 +603,7 @@ export default function DHApplicationMixin(Base) {
|
|||
const doc = await fromUuid(itemUuid);
|
||||
|
||||
//get inventory-item description element
|
||||
const descriptionElement = el.querySelector('.invetory-description');
|
||||
const descriptionElement = el.querySelector('.inventory-description');
|
||||
if (!doc || !descriptionElement) continue;
|
||||
|
||||
// localize the description (idk if it's still necessary)
|
||||
|
|
|
|||
|
|
@ -212,7 +212,7 @@ export default class DHBaseActorSheet extends DHApplicationMixin(ActorSheetV2) {
|
|||
const doc = await getDocFromElement(target),
|
||||
action = doc?.system?.attack ?? doc;
|
||||
const config = action.prepareConfig(event);
|
||||
config.effects = await game.system.api.data.actions.actionsTypes.base.getEffects(
|
||||
config.effects = await game.system.api.data.actions.actionsTypes.base.getActionRelevantEffects(
|
||||
this.document,
|
||||
doc
|
||||
);
|
||||
|
|
|
|||
|
|
@ -342,29 +342,31 @@ export default class DhCountdowns extends HandlebarsApplicationMixin(Application
|
|||
* Sends updates of the countdowns to the GM player. Since this is asynchronous, be sure to
|
||||
* update all the countdowns at the same time.
|
||||
*
|
||||
* @param {...any} progressTypes Countdowns to be updated
|
||||
* @param {...(string | { type: string; undo?: boolean })} progressTypes Countdowns to be updated
|
||||
*/
|
||||
static async updateCountdowns(...progressTypes) {
|
||||
progressTypes = progressTypes.map(p => typeof p === 'string' ? { type: p } : p);
|
||||
const { countdownAutomation } = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.Automation);
|
||||
if (!countdownAutomation) return;
|
||||
|
||||
const countdownSetting = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.Countdowns);
|
||||
const updatedCountdowns = Object.keys(countdownSetting.countdowns).reduce((acc, key) => {
|
||||
const countdown = countdownSetting.countdowns[key];
|
||||
if (progressTypes.indexOf(countdown.progress.type) !== -1 && countdown.progress.current > 0) {
|
||||
acc.push(key);
|
||||
const progressData = progressTypes.find(x => x.type === countdown.progress.type);
|
||||
if (progressData && countdown.progress.current > 0) {
|
||||
acc[key] = { value: progressData.undo ? 1 : -1 };
|
||||
}
|
||||
|
||||
return acc;
|
||||
}, []);
|
||||
}, {});
|
||||
|
||||
const countdownData = countdownSetting.toObject();
|
||||
const settings = {
|
||||
...countdownData,
|
||||
countdowns: Object.keys(countdownData.countdowns).reduce((acc, key) => {
|
||||
const countdown = foundry.utils.deepClone(countdownData.countdowns[key]);
|
||||
if (updatedCountdowns.includes(key)) {
|
||||
countdown.progress.current -= 1;
|
||||
if (updatedCountdowns[key]) {
|
||||
countdown.progress.current += updatedCountdowns[key].value;
|
||||
}
|
||||
|
||||
acc[key] = countdown;
|
||||
|
|
|
|||
|
|
@ -54,6 +54,10 @@ export default class DHBaseAction extends ActionMixin(foundry.abstract.DataModel
|
|||
return {};
|
||||
}
|
||||
|
||||
get hasDescription() {
|
||||
return Boolean(this.description);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a Map containing each Action step based on fields define in schema. Ordered by Fields order property.
|
||||
*
|
||||
|
|
@ -228,7 +232,8 @@ export default class DHBaseAction extends ActionMixin(foundry.abstract.DataModel
|
|||
let config = this.prepareConfig(event, configOptions);
|
||||
if (!config) return;
|
||||
|
||||
config.effects = await game.system.api.data.actions.actionsTypes.base.getEffects(this.actor, this.item);
|
||||
config.effects =
|
||||
await game.system.api.data.actions.actionsTypes.base.getActionRelevantEffects(this.actor, this.item);
|
||||
|
||||
if (Hooks.call(`${CONFIG.DH.id}.preUseAction`, this, config) === false) return;
|
||||
|
||||
|
|
@ -333,27 +338,45 @@ export default class DHBaseAction extends ActionMixin(foundry.abstract.DataModel
|
|||
}
|
||||
|
||||
/**
|
||||
* Get the all potentially applicable effects on the actor
|
||||
* Get the all potentially applicable effects on the actor for the action's RollDialog
|
||||
* @param {DHActor} actor The actor performing the action
|
||||
* @param {DHItem|DhActor} effectParent The parent of the effect
|
||||
* @returns {DhActiveEffect[]}
|
||||
*/
|
||||
static async getEffects(actor, effectParent) {
|
||||
static async getActionRelevantEffects(actor, effectParent) {
|
||||
if (!actor) return [];
|
||||
|
||||
return Array.from(await actor.allApplicableEffects({ noTransferArmor: true, noSelfArmor: true })).filter(
|
||||
effect => {
|
||||
/* Effects on weapons only ever apply for the weapon itself */
|
||||
if (effect.parent.type === 'weapon') {
|
||||
/* Unless they're secondary - then they apply only to other primary weapons */
|
||||
if (effect.parent.system.secondary) {
|
||||
if (effectParent?.type !== 'weapon' || effectParent?.system.secondary) return false;
|
||||
} else if (effectParent?.id !== effect.parent.id) return false;
|
||||
}
|
||||
// Changes on weapon effects are not typically only applicable to show in the roll dialog for the weapon itself
|
||||
// The exemptions to this rule are listed below
|
||||
const weaponTransferredEffectKeys = [
|
||||
'system.bonuses.roll.spellcast.bonus'
|
||||
];
|
||||
|
||||
return !effect.isSuppressed;
|
||||
const results = [];
|
||||
const applicableEffects = await actor.allApplicableEffects({ noTransferArmor: true, noSelfArmor: true });
|
||||
for (const effect of [...applicableEffects].filter(e => !e.isSuppressed)) {
|
||||
if (effect.parent.type === 'weapon') {
|
||||
// Effects on weapons only ever apply for the weapon itself (with a few exceptions)
|
||||
const restricted =
|
||||
effect.parent.system.secondary
|
||||
// Secondary applies only to other primary weapons
|
||||
? effectParent?.type !== 'weapon' || effectParent?.system.secondary
|
||||
// Primary only applies to itself
|
||||
: effectParent?.id !== effect.parent.id;
|
||||
if (restricted) {
|
||||
const sourceChanges = effect._source.system.changes;
|
||||
const changes = sourceChanges.filter(x => weaponTransferredEffectKeys.includes(x.key));
|
||||
if (changes.length) {
|
||||
results.push(effect.clone({ 'system.changes': changes }));
|
||||
}
|
||||
continue;
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
results.push(effect);
|
||||
}
|
||||
|
||||
return results;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -52,6 +52,10 @@ export default class DHArmor extends AttachableItem {
|
|||
);
|
||||
}
|
||||
|
||||
get itemFeatures() {
|
||||
return this.armorFeatures;
|
||||
}
|
||||
|
||||
/**@inheritdoc */
|
||||
async getDescriptionData() {
|
||||
const baseDescription = this.description;
|
||||
|
|
@ -169,8 +173,4 @@ export default class DHArmor extends AttachableItem {
|
|||
const labels = [`${game.i18n.localize('DAGGERHEART.ITEMS.Armor.baseScore')}: ${this.armor.max}`];
|
||||
return labels;
|
||||
}
|
||||
|
||||
get itemFeatures() {
|
||||
return this.armorFeatures;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -113,6 +113,10 @@ export default class DHWeapon extends AttachableItem {
|
|||
);
|
||||
}
|
||||
|
||||
get itemFeatures() {
|
||||
return this.weaponFeatures;
|
||||
}
|
||||
|
||||
/**@inheritdoc */
|
||||
async getDescriptionData() {
|
||||
const baseDescription = this.description;
|
||||
|
|
@ -269,8 +273,4 @@ export default class DHWeapon extends AttachableItem {
|
|||
|
||||
return labels;
|
||||
}
|
||||
|
||||
get itemFeatures() {
|
||||
return this.weaponFeatures;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,19 +1,28 @@
|
|||
import { ResourceUpdateMap } from '../data/action/baseAction.mjs';
|
||||
|
||||
export function updateResourcesForDualityReroll(oldDuality, newDuality, actor) {
|
||||
const { hopeFear } = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.Automation);
|
||||
if (game.user.isGM ? !hopeFear.gm : !hopeFear.players) return;
|
||||
|
||||
const updates = [];
|
||||
const hope = (newDuality >= 0 ? 1 : 0) - (oldDuality >= 0 ? 1 : 0);
|
||||
const stress = (newDuality === 0 ? 1 : 0) - (oldDuality === 0 ? 1 : 0);
|
||||
const fear = (newDuality === -1 ? 1 : 0) - (oldDuality === -1 ? 1 : 0);
|
||||
|
||||
if (hope !== 0) updates.push({ key: 'hope', value: hope, enabled: true });
|
||||
if (stress !== 0) updates.push({ key: 'stress', value: -1 * stress, enabled: true });
|
||||
if (fear !== 0) updates.push({ key: 'fear', value: fear, enabled: true });
|
||||
const { hopeFear, countdownAutomation } =
|
||||
game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.Automation);
|
||||
|
||||
const resourceUpdates = new ResourceUpdateMap(actor);
|
||||
resourceUpdates.addResources(updates);
|
||||
resourceUpdates.updateResources();
|
||||
if (game.user.isGM ? hopeFear.gm : hopeFear.players) {
|
||||
const updates = [];
|
||||
if (hope !== 0) updates.push({ key: 'hope', value: hope, enabled: true });
|
||||
if (stress !== 0) updates.push({ key: 'stress', value: -1 * stress, enabled: true });
|
||||
if (fear !== 0) updates.push({ key: 'fear', value: fear, enabled: true })
|
||||
|
||||
const resourceUpdates = new ResourceUpdateMap(actor);
|
||||
resourceUpdates.addResources(updates);
|
||||
resourceUpdates.updateResources();
|
||||
}
|
||||
|
||||
if (countdownAutomation && fear !== 0) {
|
||||
game.system.api.applications.ui.DhCountdowns.updateCountdowns({
|
||||
type: CONFIG.DH.GENERAL.countdownProgressionTypes.fear.id,
|
||||
undo: fear === 1 ? false : true
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -65,6 +65,10 @@ export default class DhActiveEffect extends foundry.documents.ActiveEffect {
|
|||
);
|
||||
}
|
||||
|
||||
get hasDescription() {
|
||||
return Boolean(this.description);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
/* Event Handlers */
|
||||
/* -------------------------------------------- */
|
||||
|
|
@ -224,12 +228,13 @@ export default class DhActiveEffect extends foundry.documents.ActiveEffect {
|
|||
* @returns {string[]} An array of localized tag strings.
|
||||
*/
|
||||
_getTags() {
|
||||
const tags = [
|
||||
`${game.i18n.localize(this.parent.system.metadata.label)}: ${this.parent.name}`,
|
||||
game.i18n.localize(
|
||||
this.isTemporary ? 'DAGGERHEART.EFFECTS.Duration.temporary' : 'DAGGERHEART.EFFECTS.Duration.passive'
|
||||
)
|
||||
];
|
||||
const tags = [];
|
||||
const originActor = DhActiveEffect.#resolveParentDocument(fromUuidSync(this.origin, { strict: false }), Actor);
|
||||
if (originActor && originActor !== this.actor) {
|
||||
tags.push(_loc('DAGGERHEART.EFFECTS.OriginTag', { name: originActor.name }));
|
||||
} else if (!(this.parent instanceof Actor)) {
|
||||
tags.push(`${_loc(this.parent.system.metadata.label)}: ${this.parent.name}`);
|
||||
}
|
||||
|
||||
for (const statusId of this.statuses) {
|
||||
const status = CONFIG.statusEffects.find(s => s.id === statusId);
|
||||
|
|
|
|||
|
|
@ -549,7 +549,7 @@ export default class DhpActor extends Actor {
|
|||
headerTitle: game.i18n.format('DAGGERHEART.UI.Chat.dualityRoll.abilityCheckTitle', {
|
||||
ability: abilityLabel
|
||||
}),
|
||||
effects: await game.system.api.data.actions.actionsTypes.base.getEffects(this),
|
||||
effects: await game.system.api.data.actions.actionsTypes.base.getActionRelevantEffects(this),
|
||||
roll: {
|
||||
trait: trait,
|
||||
type: 'trait'
|
||||
|
|
|
|||
|
|
@ -167,7 +167,7 @@ export default class DhpChatMessage extends foundry.documents.ChatMessage {
|
|||
if (this.system.action) {
|
||||
const actor = await foundry.utils.fromUuid(config.source.actor);
|
||||
const item = actor?.items.get(config.source.item) ?? null;
|
||||
config.effects = await game.system.api.data.actions.actionsTypes.base.getEffects(actor, item);
|
||||
config.effects = await game.system.api.data.actions.actionsTypes.base.getActionRelevantEffects(actor, item);
|
||||
await this.system.action.workflow.get('damage')?.execute(config, this._id, true);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -46,7 +46,9 @@ export default class DhpCombat extends Combat {
|
|||
for (let actor of actors) {
|
||||
await actor.createEmbeddedDocuments(
|
||||
'ActiveEffect',
|
||||
effects.filter(x => x.effectTargetTypes.includes(actor.type))
|
||||
effects
|
||||
.filter(x => x.effectTargetTypes.includes(actor.type))
|
||||
.map(x => foundry.utils.deepClone(x))
|
||||
);
|
||||
}
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -89,6 +89,10 @@ export default class DHItem extends foundry.documents.Item {
|
|||
return !pack?.locked && this.isOwner && isValidType && hasActions;
|
||||
}
|
||||
|
||||
get hasDescription() {
|
||||
return Boolean(this.system.description) || Boolean(this.system.itemFeatures?.length);
|
||||
}
|
||||
|
||||
/** @inheritdoc */
|
||||
static async createDialog(data = {}, createOptions = {}, options = {}) {
|
||||
const { folders, types, template, context = {}, ...dialogOptions } = options;
|
||||
|
|
|
|||
|
|
@ -261,10 +261,14 @@
|
|||
|
||||
fieldset {
|
||||
align-items: center;
|
||||
margin-top: 5px;
|
||||
border-radius: 6px;
|
||||
border-color: @color-fieldset-border;
|
||||
|
||||
/* Left and right side spacing is set up so that content starts at 15px left indent */
|
||||
margin-top: 5px;
|
||||
padding-inline: 7px;
|
||||
margin-inline: 6px;
|
||||
|
||||
&.glassy {
|
||||
background-color: light-dark(@dark-blue-10, @golden-10);
|
||||
border-color: transparent;
|
||||
|
|
@ -501,7 +505,7 @@
|
|||
height: 1px;
|
||||
width: 100%;
|
||||
border-bottom: 1px solid @color-border;
|
||||
mask-image: linear-gradient(270deg, transparent 0%, black 50%, transparent 100%);
|
||||
mask-image: linear-gradient(270deg, transparent 0%, black 35%,black 50%, black 65%, transparent 100%);
|
||||
}
|
||||
|
||||
side-line-div {
|
||||
|
|
|
|||
|
|
@ -43,16 +43,19 @@
|
|||
}
|
||||
}
|
||||
|
||||
.item-main {
|
||||
border-radius: 5px;
|
||||
padding: 2px;
|
||||
margin: -2px;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
.inventory-item-header .item-label .item-name .expanded-icon {
|
||||
margin-left: 10px;
|
||||
display: inline-block;
|
||||
}
|
||||
&:has(.inventory-item-content.extensible) {
|
||||
.inventory-item-header,
|
||||
.inventory-item-content {
|
||||
background: light-dark(@dark-blue-40, @golden-40);
|
||||
}
|
||||
.item-main {
|
||||
background: light-dark(@dark-blue-40, @golden-40);
|
||||
}
|
||||
&:has(.inventory-item-content.extended) {
|
||||
.inventory-item-header .item-label .item-name .expanded-icon {
|
||||
|
|
@ -60,19 +63,6 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
&:has(.inventory-item-content.extensible) {
|
||||
.inventory-item-header {
|
||||
border-radius: 5px 5px 0 0;
|
||||
}
|
||||
.inventory-item-content {
|
||||
border-radius: 0 0 5px 5px;
|
||||
}
|
||||
}
|
||||
|
||||
&:not(:has(.inventory-item-content.extensible)) .inventory-item-header {
|
||||
border-radius: 5px;
|
||||
}
|
||||
}
|
||||
|
||||
.inventory-item-header,
|
||||
|
|
@ -171,7 +161,7 @@
|
|||
grid-template-rows: 1fr;
|
||||
padding-top: 4px;
|
||||
}
|
||||
.invetory-description {
|
||||
.inventory-description {
|
||||
overflow: hidden;
|
||||
|
||||
h1 {
|
||||
|
|
|
|||
|
|
@ -3,6 +3,8 @@
|
|||
|
||||
.application.daggerheart {
|
||||
prose-mirror {
|
||||
--menu-padding: 4px 0px;
|
||||
--menu-height: calc(var(--menu-button-height) + 8px);
|
||||
height: 100% !important;
|
||||
width: 100%;
|
||||
|
||||
|
|
|
|||
|
|
@ -54,7 +54,7 @@ body.game:is(.performance-low, .noblur) {
|
|||
position: relative;
|
||||
min-height: -webkit-fill-available;
|
||||
transition: opacity 0.3s ease;
|
||||
padding-bottom: 20px;
|
||||
padding-bottom: 16px;
|
||||
|
||||
.tab {
|
||||
padding: 0 10px;
|
||||
|
|
|
|||
|
|
@ -39,6 +39,7 @@
|
|||
|
||||
.window-header > .attribution-header-label {
|
||||
margin-right: var(--spacer-4);
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.tab.inventory {
|
||||
|
|
@ -46,7 +47,7 @@
|
|||
display: grid;
|
||||
grid-template-columns: 1fr 1fr 1fr 1fr;
|
||||
gap: 10px;
|
||||
padding: 10px 10px 0;
|
||||
padding: 12px 12px 0 10px;
|
||||
|
||||
.input {
|
||||
color: light-dark(@dark, @beige);
|
||||
|
|
|
|||
|
|
@ -3,13 +3,20 @@
|
|||
|
||||
.application.sheet.daggerheart.actor.dh-style.adversary {
|
||||
.tab.effects {
|
||||
margin-top: var(--spacer-12);
|
||||
overflow-y: auto;
|
||||
scrollbar-gutter: stable;
|
||||
.with-scroll-shadows();
|
||||
.effects-sections {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 10px;
|
||||
overflow-y: auto;
|
||||
padding-bottom: 20px;
|
||||
.with-scroll-shadows();
|
||||
}
|
||||
fieldset {
|
||||
margin-right: 0; // scroll gutter compensation
|
||||
&:first-child {
|
||||
margin-top: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,14 +3,17 @@
|
|||
@import '../../../utils/mixin.less';
|
||||
|
||||
.application.sheet.daggerheart.actor.dh-style.adversary {
|
||||
.tab.features {
|
||||
.tab.features.active {
|
||||
position: relative;
|
||||
margin-top: var(--spacer-8);
|
||||
padding: var(--spacer-8) 2px 0 var(--left-indent);
|
||||
overflow-y: auto;
|
||||
scrollbar-gutter: stable;
|
||||
.with-scroll-shadows();
|
||||
.feature-section {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 10px;
|
||||
overflow-y: auto;
|
||||
padding-bottom: 20px;
|
||||
.with-scroll-shadows();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
width: 100%;
|
||||
|
||||
> *:not(line-div, .tab-navigation) {
|
||||
padding-left: 15px;
|
||||
padding-left: var(--left-indent);
|
||||
padding-right: 15px;
|
||||
}
|
||||
|
||||
|
|
@ -75,6 +75,7 @@
|
|||
|
||||
.tab-navigation {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
button[data-action="openSettings"] {
|
||||
margin-right: 12px;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
@import './features.less';
|
||||
@import './header.less';
|
||||
@import './sheet.less';
|
||||
@import './header.less';
|
||||
@import './features.less';
|
||||
@import './sidebar.less';
|
||||
@import './effects.less';
|
||||
@import './notes.less';
|
||||
|
||||
|
|
|
|||
|
|
@ -1,3 +1,8 @@
|
|||
.application.sheet.daggerheart.actor.dh-style.adversary .tab.notes.active {
|
||||
padding-bottom: 20px;
|
||||
padding-top: var(--spacer-16);
|
||||
padding-left: var(--left-indent);
|
||||
.editor-content {
|
||||
scrollbar-gutter: stable;
|
||||
.with-scroll-shadows();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,6 +2,8 @@
|
|||
@import '../../../utils/fonts.less';
|
||||
|
||||
.application.sheet.daggerheart.actor.dh-style.adversary {
|
||||
--left-indent: 15px;
|
||||
|
||||
.window-content {
|
||||
display: grid;
|
||||
grid-template-columns: 275px 1fr;
|
||||
|
|
@ -9,28 +11,31 @@
|
|||
height: 100%;
|
||||
width: 100%;
|
||||
padding-bottom: 0;
|
||||
}
|
||||
|
||||
.adversary-sidebar-sheet {
|
||||
grid-row: 1 / span 2;
|
||||
grid-column: 1;
|
||||
.adversary-sidebar-sheet {
|
||||
grid-row: 1 / span 2;
|
||||
grid-column: 1;
|
||||
overflow: hidden;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.adversary-header-sheet {
|
||||
grid-row: 1;
|
||||
grid-column: 2;
|
||||
}
|
||||
|
||||
.tab {
|
||||
grid-row: 2;
|
||||
grid-column: 2;
|
||||
&.active {
|
||||
overflow: hidden;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.adversary-header-sheet {
|
||||
grid-row: 1;
|
||||
grid-column: 2;
|
||||
}
|
||||
|
||||
.tab {
|
||||
grid-row: 2;
|
||||
grid-column: 2;
|
||||
&.active {
|
||||
overflow: hidden;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
padding: 0;
|
||||
margin-right: 1px;
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -11,8 +11,9 @@
|
|||
height: 100%;
|
||||
overflow-y: auto;
|
||||
padding-top: 8px;
|
||||
padding-bottom: 20px;
|
||||
padding-bottom: 4px;
|
||||
height: 100%;
|
||||
scrollbar-gutter: stable;
|
||||
.with-scroll-shadows();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@
|
|||
gap: 10px;
|
||||
overflow-y: auto;
|
||||
padding-bottom: 20px;
|
||||
scrollbar-gutter: stable;
|
||||
.with-scroll-shadows();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
@import './sheet.less';
|
||||
@import './biography.less';
|
||||
@import './effects.less';
|
||||
@import './features.less';
|
||||
@import './header.less';
|
||||
@import './inventory.less';
|
||||
@import './loadout.less';
|
||||
@import './sheet.less';
|
||||
@import './sidebar.less';
|
||||
|
|
|
|||
|
|
@ -4,13 +4,18 @@
|
|||
|
||||
.application.sheet.daggerheart.actor.dh-style.character {
|
||||
.tab.inventory {
|
||||
padding-right: 0;
|
||||
.search-section {
|
||||
padding-right: 14px;
|
||||
}
|
||||
.items-section {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 10px;
|
||||
overflow-y: auto;
|
||||
scrollbar-gutter: stable;
|
||||
margin-top: 20px;
|
||||
padding-bottom: 20px;
|
||||
padding-bottom: 4px;
|
||||
.with-scroll-shadows();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@
|
|||
.application.sheet.daggerheart.actor.dh-style.character {
|
||||
.tab.loadout {
|
||||
.search-section {
|
||||
padding-right: 14px;
|
||||
.btn-toggle-view {
|
||||
background: light-dark(@dark-blue-10, @dark-blue);
|
||||
border: 1px solid @color-border;
|
||||
|
|
@ -52,8 +53,9 @@
|
|||
gap: 10px;
|
||||
height: 100%;
|
||||
overflow-y: auto;
|
||||
scrollbar-gutter: stable;
|
||||
margin-top: 20px;
|
||||
padding-bottom: 20px;
|
||||
padding-bottom: 4px;
|
||||
.with-scroll-shadows();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,28 +10,31 @@
|
|||
width: 100%;
|
||||
padding-bottom: 0;
|
||||
overflow-x: auto;
|
||||
}
|
||||
|
||||
.character-sidebar-sheet {
|
||||
grid-row: 1 / span 2;
|
||||
grid-column: 1;
|
||||
.character-sidebar-sheet {
|
||||
grid-row: 1 / span 2;
|
||||
grid-column: 1;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.character-header-sheet {
|
||||
position: relative;
|
||||
grid-row: 1;
|
||||
grid-column: 2;
|
||||
}
|
||||
|
||||
.tab {
|
||||
grid-row: 2;
|
||||
grid-column: 2;
|
||||
padding-right: 0;
|
||||
margin-right: 2px;
|
||||
margin-bottom: 12px;
|
||||
&.active {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.character-header-sheet {
|
||||
position: relative;
|
||||
grid-row: 1;
|
||||
grid-column: 2;
|
||||
}
|
||||
|
||||
.tab {
|
||||
grid-row: 2;
|
||||
grid-column: 2;
|
||||
&.active {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
overflow: hidden;
|
||||
}
|
||||
overflow: hidden;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,13 +1,17 @@
|
|||
@import '../../../utils/colors.less';
|
||||
@import '../../../utils/mixin.less';
|
||||
|
||||
.application.sheet.daggerheart.actor.dh-style.companion {
|
||||
.tab.effects {
|
||||
margin-right: 2px;
|
||||
padding-right: 0;
|
||||
.effects-sections {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 10px;
|
||||
overflow-y: auto;
|
||||
padding-bottom: 20px;
|
||||
padding-bottom: 4px;
|
||||
scrollbar-gutter: stable;
|
||||
.with-scroll-shadows();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,12 +4,14 @@
|
|||
|
||||
.application.sheet.daggerheart.actor.dh-style.environment {
|
||||
.tab.features {
|
||||
position: relative;
|
||||
.feature-section {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 10px;
|
||||
overflow-y: auto;
|
||||
padding-bottom: 4px;
|
||||
padding: 4px 8px;
|
||||
scrollbar-gutter: stable;
|
||||
.with-scroll-shadows();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
@import './sheet.less';
|
||||
@import './features.less';
|
||||
@import './header.less';
|
||||
@import './potentialAdversaries.less';
|
||||
@import './sheet.less';
|
||||
@import './notes.less';
|
||||
|
|
|
|||
11
styles/less/sheets/actors/environment/notes.less
Normal file
11
styles/less/sheets/actors/environment/notes.less
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
@import '../../../utils/mixin.less';
|
||||
|
||||
.application.sheet.daggerheart.actor.dh-style.environment {
|
||||
.tab.notes {
|
||||
padding: 6px 0 4px 15px;
|
||||
.editor-content {
|
||||
scrollbar-gutter: stable;
|
||||
.with-scroll-shadows();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,4 +1,5 @@
|
|||
@import '../../../utils/colors.less';
|
||||
@import '../../../utils/mixin.less';
|
||||
|
||||
.application.sheet.daggerheart.actor.dh-style.environment {
|
||||
.tab.potentialAdversaries {
|
||||
|
|
@ -7,7 +8,8 @@
|
|||
flex-direction: column;
|
||||
gap: 10px;
|
||||
overflow-y: auto;
|
||||
padding-bottom: 4px;
|
||||
padding: 0 4px 4px 4px;
|
||||
scrollbar-gutter: stable;
|
||||
.with-scroll-shadows();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,6 +16,8 @@
|
|||
.tab {
|
||||
flex: 1;
|
||||
overflow-y: auto;
|
||||
padding-right: 0;
|
||||
margin-right: 2px;
|
||||
|
||||
&.active {
|
||||
overflow: hidden;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
@import './sheet.less';
|
||||
@import './header.less';
|
||||
@import './party-members.less';
|
||||
@import './sheet.less';
|
||||
@import './inventory.less';
|
||||
@import './notes.less';
|
||||
|
|
@ -4,11 +4,17 @@
|
|||
|
||||
.application.sheet.daggerheart.actor.dh-style.party {
|
||||
.tab.inventory {
|
||||
padding-right: 0;
|
||||
.search-section {
|
||||
padding-right: 14px;
|
||||
}
|
||||
|
||||
.items-section {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 10px;
|
||||
overflow-y: auto;
|
||||
scrollbar-gutter: stable;
|
||||
margin-top: 20px;
|
||||
padding-bottom: 4px;
|
||||
.with-scroll-shadows();
|
||||
|
|
|
|||
12
styles/less/sheets/actors/party/notes.less
Normal file
12
styles/less/sheets/actors/party/notes.less
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
@import '../../../utils/mixin.less';
|
||||
|
||||
.application.sheet.daggerheart.actor.dh-style.party {
|
||||
.tab.notes {
|
||||
padding: 16px 0 4px 15px;
|
||||
.editor-content {
|
||||
scrollbar-gutter: stable;
|
||||
padding-left: 8px;
|
||||
.with-scroll-shadows();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -4,6 +4,7 @@
|
|||
|
||||
.application.sheet.daggerheart.actor.dh-style.party .tab.partyMembers {
|
||||
overflow: auto;
|
||||
.with-scroll-shadows();
|
||||
|
||||
.actors-list {
|
||||
display: flex;
|
||||
|
|
|
|||
|
|
@ -21,6 +21,8 @@
|
|||
flex: 1;
|
||||
overflow-y: auto;
|
||||
scrollbar-gutter: stable;
|
||||
margin-right: 2px;
|
||||
padding-right: 8px;
|
||||
|
||||
&.active {
|
||||
overflow: auto;
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
"id": "daggerheart",
|
||||
"title": "Daggerheart",
|
||||
"description": "An unofficial implementation of the Daggerheart system",
|
||||
"version": "2.3.4",
|
||||
"version": "2.4.1",
|
||||
"compatibility": {
|
||||
"minimum": "14.364",
|
||||
"verified": "14.364",
|
||||
|
|
@ -10,7 +10,7 @@
|
|||
},
|
||||
"url": "https://github.com/Foundryborne/daggerheart",
|
||||
"manifest": "https://raw.githubusercontent.com/Foundryborne/daggerheart/v14/system.json",
|
||||
"download": "https://github.com/Foundryborne/daggerheart/releases/download/2.3.4/system.zip",
|
||||
"download": "https://github.com/Foundryborne/daggerheart/releases/download/2.4.1/system.zip",
|
||||
"authors": [
|
||||
{
|
||||
"name": "WBHarry"
|
||||
|
|
|
|||
|
|
@ -1,14 +1,15 @@
|
|||
<section class='tab {{tabs.features.cssClass}} {{tabs.features.id}}' data-tab='{{tabs.features.id}}'
|
||||
data-group='{{tabs.features.group}}'>
|
||||
<div class="feature-section">
|
||||
{{> 'daggerheart.inventory-items'
|
||||
title=tabs.features.label
|
||||
type='feature'
|
||||
collection=@root.features
|
||||
hideContextMenu=true
|
||||
hideModifyControls=true
|
||||
canCreate=@root.editable
|
||||
showActions=@root.editable
|
||||
}}
|
||||
{{#each @root.features as |item|}}
|
||||
{{> 'daggerheart.inventory-item'
|
||||
item=item
|
||||
type='feature'
|
||||
actorType=@root.document.type
|
||||
hideContextMenu=true
|
||||
hideModifyControls=true
|
||||
showActions=@root.editable
|
||||
}}
|
||||
{{/each}}
|
||||
</div>
|
||||
</section>
|
||||
|
|
@ -3,10 +3,7 @@
|
|||
data-tab='{{tabs.notes.id}}'
|
||||
data-group='{{tabs.notes.group}}'
|
||||
>
|
||||
<fieldset class="fit-height">
|
||||
<legend>{{localize tabs.notes.label}}</legend>
|
||||
{{formInput notes.field value=notes.value enriched=notes.enriched toggled=true}}
|
||||
</fieldset>
|
||||
{{formInput notes.field value=notes.value enriched=notes.enriched class="aaa" toggled=true}}
|
||||
|
||||
{{#if (and showAttribution document.system.attribution.artist)}}
|
||||
<label class="artist-attribution">{{localize "DAGGERHEART.GENERAL.artistAttribution" artist=document.system.attribution.artist}}</label>
|
||||
|
|
|
|||
|
|
@ -4,14 +4,15 @@
|
|||
data-group='{{tabs.features.group}}'
|
||||
>
|
||||
<div class="feature-section">
|
||||
{{> 'daggerheart.inventory-items'
|
||||
title=tabs.features.label
|
||||
type='feature'
|
||||
collection=@root.features
|
||||
hideContextMenu=true
|
||||
hideModifyControls=true
|
||||
canCreate=@root.editable
|
||||
showActions=@root.editable
|
||||
}}
|
||||
{{#each @root.features as |item|}}
|
||||
{{> 'daggerheart.inventory-item'
|
||||
item=item
|
||||
type='feature'
|
||||
actorType=@root.document.type
|
||||
hideContextMenu=true
|
||||
hideModifyControls=true
|
||||
showActions=@root.editable
|
||||
}}
|
||||
{{/each}}
|
||||
</div>
|
||||
</section>
|
||||
|
|
@ -3,10 +3,7 @@
|
|||
data-tab='{{tabs.notes.id}}'
|
||||
data-group='{{tabs.notes.group}}'
|
||||
>
|
||||
<fieldset class="fit-height">
|
||||
<legend>{{localize tabs.notes.label}}</legend>
|
||||
{{formInput notes.field value=notes.value enriched=notes.value toggled=true}}
|
||||
</fieldset>
|
||||
{{formInput notes.field value=notes.value enriched=notes.value toggled=true}}
|
||||
|
||||
{{#if (and showAttribution document.system.attribution.artist)}}
|
||||
<label class="artist-attribution">{{localize "DAGGERHEART.GENERAL.artistAttribution" artist=document.system.attribution.artist}}</label>
|
||||
|
|
|
|||
|
|
@ -3,8 +3,5 @@
|
|||
data-tab='{{tabs.notes.id}}'
|
||||
data-group='{{tabs.notes.group}}'
|
||||
>
|
||||
<fieldset class="fit-height">
|
||||
<legend>{{localize tabs.notes.label}}</legend>
|
||||
{{formInput notes.field value=notes.value enriched=notes.value toggled=true}}
|
||||
</fieldset>
|
||||
{{formInput notes.field value=notes.value enriched=notes.value toggled=true}}
|
||||
</section>
|
||||
|
|
@ -25,146 +25,146 @@ Parameters:
|
|||
data-type="{{type}}" data-item-type="{{item.type}}"
|
||||
data-item-uuid="{{item.uuid}}" data-no-compendium-edit="{{noCompendiumEdit}}"
|
||||
>
|
||||
<div class="inventory-item-header {{#if hideContextMenu}}padded{{/if}}" {{#unless noExtensible}}data-action="toggleExtended" {{/unless}}>
|
||||
{{!-- Image --}}
|
||||
<div class="img-portait" draggable="true"
|
||||
{{#unless (eq showActions false)}}data-action='{{ifThen item.usable "useItem" (ifThen (hasProperty item "toChat" ) "toChat" "editDoc" ) }}'{{/unless}}
|
||||
{{#unless hideTooltip}} {{#if (eq type 'attack' )}} data-tooltip="#attack#{{item.actor.uuid}}" {{else}} data-tooltip="#item#{{item.uuid}}" {{/if}} {{/unless}}>
|
||||
<img src="{{item.img}}" class="item-img {{#if isActor}}actor-img{{/if}}" />
|
||||
{{#if (and item.usable (ne showActions false))}}
|
||||
{{#if @root.isNPC}}
|
||||
<img class="roll-img d20" src="systems/daggerheart/assets/icons/dice/default/d20.svg" alt="d20">
|
||||
{{else}}
|
||||
<img class="roll-img duality" src="systems/daggerheart/assets/icons/dice/duality/DualityBW.svg" alt="2d12">
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
</div>
|
||||
|
||||
{{!-- Name & Tags --}}
|
||||
<div class="item-label" draggable="true">
|
||||
{{!-- Item Name --}}
|
||||
<span class="item-name">{{localize item.name}} {{#unless (or noExtensible (not item.system.description))}}<span class="expanded-icon"><i class="fa-solid fa-expand"></i></span>{{/unless}}</span>
|
||||
|
||||
{{!-- Tags Start --}}
|
||||
{{#if (not hideTags)}}
|
||||
{{#> "systems/daggerheart/templates/sheets/global/partials/item-tags.hbs" item}}
|
||||
{{#if (eq ../type 'feature')}}
|
||||
{{#if (and system.featureForm (ne @root.document.type "character"))}}
|
||||
<div class="tag feature-form">
|
||||
<span class="recall-value">{{localize (concat "DAGGERHEART.CONFIG.FeatureForm." system.featureForm)}}</span>
|
||||
</div>
|
||||
<div class="item-main">
|
||||
<div class="inventory-item-header{{#if hideContextMenu}} padded{{/if}}" {{#unless (or noExtensible (not item.hasDescription))}}data-action="toggleExtended" {{/unless}}>
|
||||
{{!-- Image --}}
|
||||
<div class="img-portait" draggable="true"
|
||||
{{#unless (eq showActions false)}}data-action='{{ifThen item.usable "useItem" (ifThen (hasProperty item "toChat" ) "toChat" "editDoc" ) }}'{{/unless}}
|
||||
{{#unless hideTooltip}} {{#if (eq type 'attack' )}} data-tooltip="#attack#{{item.actor.uuid}}" {{else}} data-tooltip="#item#{{item.uuid}}" {{/if}} {{/unless}}>
|
||||
<img src="{{item.img}}" class="item-img {{#if isActor}}actor-img{{/if}}" />
|
||||
{{#if (and item.usable (ne showActions false))}}
|
||||
{{#if @root.isNPC}}
|
||||
<img class="roll-img d20" src="systems/daggerheart/assets/icons/dice/default/d20.svg" alt="d20">
|
||||
{{else}}
|
||||
<img class="roll-img duality" src="systems/daggerheart/assets/icons/dice/duality/DualityBW.svg" alt="2d12">
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
{{/ "systems/daggerheart/templates/sheets/global/partials/item-tags.hbs"}}
|
||||
{{/if}}
|
||||
</div>
|
||||
|
||||
{{!--Tags End --}}
|
||||
</div>
|
||||
{{!-- Name & Tags --}}
|
||||
<div class="item-label" draggable="true">
|
||||
{{!-- Item Name --}}
|
||||
<span class="item-name">{{localize item.name}} {{#unless (or noExtensible (not item.hasDescription))}}<span class="expanded-icon"><i class="fa-solid fa-expand"></i></span>{{/unless}}</span>
|
||||
|
||||
{{!-- Simple Resource --}}
|
||||
{{#if (and (not hideResources) (not (eq item.system.resource.type 'diceValue')))}}
|
||||
{{> "systems/daggerheart/templates/sheets/global/partials/item-resource.hbs"}}
|
||||
{{/if}}
|
||||
{{#if (or isQuantifiable (or (eq item.system.quantity 0) (gt item.system.quantity 1)))}}
|
||||
<div class="item-resource">
|
||||
<input type="number" id="{{item.uuid}}-quantity" class="inventory-item-quantity" value="{{item.system.quantity}}" min="0" />
|
||||
{{!-- Tags Start --}}
|
||||
{{#if (not hideTags)}}
|
||||
{{#> "systems/daggerheart/templates/sheets/global/partials/item-tags.hbs" item}}
|
||||
{{#if (and (eq ../type 'feature') system.featureForm (ne @root.document.type "character"))}}
|
||||
<div class="tag feature-form">
|
||||
<span class="recall-value">{{localize (concat "DAGGERHEART.CONFIG.FeatureForm." system.featureForm)}}</span>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{/ "systems/daggerheart/templates/sheets/global/partials/item-tags.hbs"}}
|
||||
{{/if}}
|
||||
|
||||
{{!--Tags End --}}
|
||||
</div>
|
||||
|
||||
{{!-- Simple Resource --}}
|
||||
{{#if (and (not hideResources) (not (eq item.system.resource.type 'diceValue')))}}
|
||||
{{> "systems/daggerheart/templates/sheets/global/partials/item-resource.hbs"}}
|
||||
{{/if}}
|
||||
{{#if (or isQuantifiable (or (eq item.system.quantity 0) (gt item.system.quantity 1)))}}
|
||||
<div class="item-resource">
|
||||
<input type="number" id="{{item.uuid}}-quantity" class="inventory-item-quantity" value="{{item.system.quantity}}" min="0" />
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{!-- Controls --}}
|
||||
{{#unless hideControls}}
|
||||
<div class="controls">
|
||||
{{!-- Toggle/Equip buttons --}}
|
||||
{{#if @root.editable}}
|
||||
{{#if (and (eq actorType 'character') (eq type 'weapon'))}}
|
||||
<a class="{{#unless item.system.equipped}}unequipped{{/unless}}" data-action="toggleEquipItem"
|
||||
data-tooltip="DAGGERHEART.UI.Tooltip.{{ifThen item.system.equipped 'unequip' 'equip' }}">
|
||||
<i class="fa-solid fa-hands" inert></i>
|
||||
</a>
|
||||
{{/if}}
|
||||
{{#if (and (eq actorType 'character') (eq type 'armor'))}}
|
||||
<a class="{{#unless item.system.equipped}}unequipped{{/unless}}" data-action="toggleEquipItem"
|
||||
data-tooltip="DAGGERHEART.UI.Tooltip.{{ifThen item.system.equipped 'unequip' 'equip' }}">
|
||||
<i class="fa-solid fa-fw fa-shield" inert></i>
|
||||
</a>
|
||||
{{/if}}
|
||||
{{#if (and (eq type 'domainCard'))}}
|
||||
<a data-action="toggleVault"
|
||||
data-tooltip="DAGGERHEART.UI.Tooltip.{{ifThen item.system.inVault 'sendToLoadout' 'sendToVault' }}">
|
||||
<i class="fa-solid {{ifThen item.system.inVault 'fa-arrow-up' 'fa-arrow-down'}}" inert></i>
|
||||
</a>
|
||||
{{/if}}
|
||||
{{#if (and (and (eq type 'effect') (not (eq item.type 'beastform'))))}}
|
||||
<a data-action="toggleEffect"
|
||||
data-tooltip="DAGGERHEART.UI.Tooltip.{{ifThen item.disabled 'enableEffect' 'disableEffect' }}">
|
||||
<i class="{{ifThen item.disabled 'fa-solid fa-toggle-off' 'fa-solid fa-toggle-on'}}" inert></i>
|
||||
</a>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
|
||||
{{!-- Send to Chat --}}
|
||||
{{#if (hasProperty item "toChat")}}
|
||||
<a data-action="toChat" data-tooltip="DAGGERHEART.UI.Tooltip.sendToChat">
|
||||
<i class="fa-regular fa-fw fa-message" inert></i>
|
||||
</a>
|
||||
{{/if}}
|
||||
|
||||
{{!-- Document management buttons or context menu --}}
|
||||
{{#if (and (not isActor) (not hideContextMenu))}}
|
||||
<a data-action="triggerContextMenu" data-tooltip="DAGGERHEART.UI.Tooltip.moreOptions">
|
||||
<i class="fa-solid fa-fw fa-ellipsis-vertical" inert></i>
|
||||
</a>
|
||||
{{else if (and @root.editable (not hideModifyControls))}}
|
||||
<a data-action="editDoc" data-tooltip="DAGGERHEART.UI.Tooltip.edit">
|
||||
<i class="fa-solid fa-edit" inert></i>
|
||||
</a>
|
||||
{{#if (not isActor)}}
|
||||
<a data-action="deleteDoc" data-tooltip="DAGGERHEART.UI.Tooltip.deleteItem">
|
||||
<i class="fa-solid fa-trash" inert></i>
|
||||
</a>
|
||||
{{else if (eq type 'adversary')}}
|
||||
<a data-action='deleteAdversary' data-category="{{categoryAdversary}}" data-tooltip="CONTROLS.CommonDelete">
|
||||
<i class="fas fa-trash" inert></i>
|
||||
</a>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
</div>
|
||||
{{/unless}}
|
||||
</div>
|
||||
{{#unless hideDescription}}
|
||||
<div class="inventory-item-content{{#unless (or noExtensible (not item.hasDescription))}} extensible{{/unless}}">
|
||||
{{!-- Description --}}
|
||||
<div class="inventory-description"></div>
|
||||
</div>
|
||||
{{/unless}}
|
||||
</div>
|
||||
{{!-- Dice Resource --}}
|
||||
{{#if (and (not hideResources) (eq item.system.resource.type 'diceValue'))}}
|
||||
{{> "systems/daggerheart/templates/sheets/global/partials/item-resource.hbs"}}
|
||||
{{/if}}
|
||||
|
||||
{{!-- Controls --}}
|
||||
{{#unless hideControls}}
|
||||
<div class="controls">
|
||||
{{!-- Toggle/Equip buttons --}}
|
||||
{{#if @root.editable}}
|
||||
{{#if (and (eq actorType 'character') (eq type 'weapon'))}}
|
||||
<a class="{{#unless item.system.equipped}}unequipped{{/unless}}" data-action="toggleEquipItem"
|
||||
data-tooltip="DAGGERHEART.UI.Tooltip.{{ifThen item.system.equipped 'unequip' 'equip' }}">
|
||||
<i class="fa-solid fa-hands" inert></i>
|
||||
</a>
|
||||
{{/if}}
|
||||
{{#if (and (eq actorType 'character') (eq type 'armor'))}}
|
||||
<a class="{{#unless item.system.equipped}}unequipped{{/unless}}" data-action="toggleEquipItem"
|
||||
data-tooltip="DAGGERHEART.UI.Tooltip.{{ifThen item.system.equipped 'unequip' 'equip' }}">
|
||||
<i class="fa-solid fa-fw fa-shield" inert></i>
|
||||
</a>
|
||||
{{/if}}
|
||||
{{#if (and (eq type 'domainCard'))}}
|
||||
<a data-action="toggleVault"
|
||||
data-tooltip="DAGGERHEART.UI.Tooltip.{{ifThen item.system.inVault 'sendToLoadout' 'sendToVault' }}">
|
||||
<i class="fa-solid {{ifThen item.system.inVault 'fa-arrow-up' 'fa-arrow-down'}}" inert></i>
|
||||
</a>
|
||||
{{/if}}
|
||||
{{#if (and (and (eq type 'effect') (not (eq item.type 'beastform'))))}}
|
||||
<a data-action="toggleEffect"
|
||||
data-tooltip="DAGGERHEART.UI.Tooltip.{{ifThen item.disabled 'enableEffect' 'disableEffect' }}">
|
||||
<i class="{{ifThen item.disabled 'fa-solid fa-toggle-off' 'fa-solid fa-toggle-on'}}" inert></i>
|
||||
</a>
|
||||
{{/if}}
|
||||
{{!-- Actions Buttons --}}
|
||||
{{#if (and showActions item.system.actions.size)}}
|
||||
<div class="item-buttons">
|
||||
{{#each item.system.actions as | action |}}
|
||||
<div class="item-button">
|
||||
{{#if (and (eq action.type 'beastform') @root.beastformActive)}}
|
||||
<button type="button" data-action="cancelBeastform" data-item-uuid="{{action.uuid}}">
|
||||
<i class="fa-solid {{action.typeIcon}} action-icon"></i>
|
||||
{{localize "DAGGERHEART.ACTORS.Character.cancelBeastform"}}
|
||||
</button>
|
||||
{{else}}
|
||||
<button type="button" data-action="useItem" data-item-uuid="{{action.uuid}}">
|
||||
<i class="fa-solid {{action.typeIcon}} action-icon"></i>
|
||||
{{action.name}}
|
||||
</button>
|
||||
{{/if}}
|
||||
|
||||
{{!-- Send to Chat --}}
|
||||
{{#if (hasProperty item "toChat")}}
|
||||
<a data-action="toChat" data-tooltip="DAGGERHEART.UI.Tooltip.sendToChat">
|
||||
<i class="fa-regular fa-fw fa-message" inert></i>
|
||||
</a>
|
||||
{{/if}}
|
||||
|
||||
{{!-- Document management buttons or context menu --}}
|
||||
{{#if (and (not isActor) (not hideContextMenu))}}
|
||||
<a data-action="triggerContextMenu" data-tooltip="DAGGERHEART.UI.Tooltip.moreOptions">
|
||||
<i class="fa-solid fa-fw fa-ellipsis-vertical" inert></i>
|
||||
</a>
|
||||
{{else if (and @root.editable (not hideModifyControls))}}
|
||||
<a data-action="editDoc" data-tooltip="DAGGERHEART.UI.Tooltip.edit">
|
||||
<i class="fa-solid fa-edit" inert></i>
|
||||
</a>
|
||||
{{#if (not isActor)}}
|
||||
<a data-action="deleteDoc" data-tooltip="DAGGERHEART.UI.Tooltip.deleteItem">
|
||||
<i class="fa-solid fa-trash" inert></i>
|
||||
</a>
|
||||
{{else if (eq type 'adversary')}}
|
||||
<a data-action='deleteAdversary' data-category="{{categoryAdversary}}" data-tooltip="CONTROLS.CommonDelete">
|
||||
<i class="fas fa-trash" inert></i>
|
||||
</a>
|
||||
{{/if}}
|
||||
{{#if action.uses.max}}
|
||||
<div class="spacer"></div>
|
||||
<button type="button" class="action-uses-button" data-action="increaseActionUses" data-item-uuid="{{action.uuid}}">
|
||||
{{action.remainingUses}}/{{action.uses.max}}
|
||||
</button>
|
||||
{{/if}}
|
||||
</div>
|
||||
{{/unless}}
|
||||
</div>
|
||||
<div class="inventory-item-content{{#unless noExtensible}} extensible{{/unless}}">
|
||||
{{!-- Description --}}
|
||||
{{#unless hideDescription}}
|
||||
<div class="invetory-description"></div>
|
||||
{{/unless}}
|
||||
</div>
|
||||
{{!-- Dice Resource --}}
|
||||
{{#if (and (not hideResources) (eq item.system.resource.type 'diceValue'))}}
|
||||
{{> "systems/daggerheart/templates/sheets/global/partials/item-resource.hbs"}}
|
||||
{{/if}}
|
||||
{{!-- Actions Buttons --}}
|
||||
{{#if (and showActions item.system.actions.size)}}
|
||||
<div class="item-buttons">
|
||||
{{#each item.system.actions as | action |}}
|
||||
<div class="item-button">
|
||||
{{#if (and (eq action.type 'beastform') @root.beastformActive)}}
|
||||
<button type="button" data-action="cancelBeastform" data-item-uuid="{{action.uuid}}">
|
||||
<i class="fa-solid {{action.typeIcon}} action-icon"></i>
|
||||
{{localize "DAGGERHEART.ACTORS.Character.cancelBeastform"}}
|
||||
</button>
|
||||
{{else}}
|
||||
<button type="button" data-action="useItem" data-item-uuid="{{action.uuid}}">
|
||||
<i class="fa-solid {{action.typeIcon}} action-icon"></i>
|
||||
{{action.name}}
|
||||
</button>
|
||||
{{/if}}
|
||||
{{#if action.uses.max}}
|
||||
<div class="spacer"></div>
|
||||
<button type="button" class="action-uses-button" data-action="increaseActionUses" data-item-uuid="{{action.uuid}}">
|
||||
{{action.remainingUses}}/{{action.uses.max}}
|
||||
</button>
|
||||
{{/if}}
|
||||
{{/each}}
|
||||
</div>
|
||||
{{/each}}
|
||||
</div>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
</li>
|
||||
Loading…
Add table
Add a link
Reference in a new issue