finding and fixing bugs. (#88)

This commit is contained in:
IrkTheImp 2025-05-31 03:53:47 -05:00 committed by GitHub
parent e57db2fdc8
commit d34272a301
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 69 additions and 20 deletions

View file

@ -37,9 +37,10 @@ export default class PCSheet extends DaggerheartSheet(ActorSheetV2) {
attackRoll: this.attackRoll, attackRoll: this.attackRoll,
tabToLoadout: () => this.domainCardsTab(false), tabToLoadout: () => this.domainCardsTab(false),
tabToVault: () => this.domainCardsTab(true), tabToVault: () => this.domainCardsTab(true),
sendToVault: (_, button) => this.moveDomainCard(button, true), sendToVault: this.moveDomainCard,
sentToLoadout: (_, button) => this.moveDomainCard(button, false), sendToLoadout: this.moveDomainCard,
useDomainCard: this.useDomainCard, useDomainCard: this.useDomainCard,
removeCard: this.removeDomainCard,
selectClass: this.selectClass, selectClass: this.selectClass,
selectSubclass: this.selectSubclass, selectSubclass: this.selectSubclass,
selectAncestry: this.selectAncestry, selectAncestry: this.selectAncestry,
@ -640,7 +641,8 @@ export default class PCSheet extends DaggerheartSheet(ActorSheetV2) {
this.render(); this.render();
} }
static async moveDomainCard(button, toVault) { static async moveDomainCard(_, button) {
const toVault = button.dataset.action === 'sendToVault';
if (!toVault && this.document.system.domainCards.loadout.length >= this.document.system.domainData.maxLoadout) { if (!toVault && this.document.system.domainCards.loadout.length >= this.document.system.domainData.maxLoadout) {
return; return;
} }
@ -655,6 +657,7 @@ export default class PCSheet extends DaggerheartSheet(ActorSheetV2) {
const cls = getDocumentClass('ChatMessage'); const cls = getDocumentClass('ChatMessage');
const systemData = { const systemData = {
title: `${game.i18n.localize('DAGGERHEART.Chat.DomainCard.Title')} - ${capitalize(button.dataset.domain)}`, title: `${game.i18n.localize('DAGGERHEART.Chat.DomainCard.Title')} - ${capitalize(button.dataset.domain)}`,
origin: this.document.id,
img: card.img, img: card.img,
name: card.name, name: card.name,
description: card.system.effect, description: card.system.effect,
@ -673,6 +676,13 @@ export default class PCSheet extends DaggerheartSheet(ActorSheetV2) {
cls.create(msg.toObject()); cls.create(msg.toObject());
} }
static async removeDomainCard(_, button) {
if (button.dataset.type === 'domainCard') {
const card = this.document.items.find(x => x.uuid === button.dataset.key);
await card.delete();
}
}
static async selectClass() { static async selectClass() {
(await game.packs.get('daggerheart.classes'))?.render(true); (await game.packs.get('daggerheart.classes'))?.render(true);
} }
@ -872,6 +882,7 @@ export default class PCSheet extends DaggerheartSheet(ActorSheetV2) {
const cls = getDocumentClass('ChatMessage'); const cls = getDocumentClass('ChatMessage');
const systemData = { const systemData = {
title: game.i18n.localize('DAGGERHEART.Chat.FeatureTitle'), title: game.i18n.localize('DAGGERHEART.Chat.FeatureTitle'),
origin: this.document.id,
img: item.img, img: item.img,
name: item.name, name: item.name,
description: item.system.description, description: item.system.description,
@ -902,6 +913,7 @@ export default class PCSheet extends DaggerheartSheet(ActorSheetV2) {
: type === 'community' : type === 'community'
? game.i18n.localize('DAGGERHEART.Chat.FoundationCard.CommunityTitle') ? game.i18n.localize('DAGGERHEART.Chat.FoundationCard.CommunityTitle')
: game.i18n.localize('DAGGERHEART.Chat.FoundationCard.SubclassFeatureTitle'), : game.i18n.localize('DAGGERHEART.Chat.FoundationCard.SubclassFeatureTitle'),
origin: this.document.id,
img: item.img, img: item.img,
name: item.name, name: item.name,
description: item.system.description, description: item.system.description,
@ -929,14 +941,20 @@ export default class PCSheet extends DaggerheartSheet(ActorSheetV2) {
const title = `${item.name} - ${game.i18n.localize(`DAGGERHEART.Sheets.PC.DomainCard.${capitalize(button.dataset.key)}Title`)}`; const title = `${item.name} - ${game.i18n.localize(`DAGGERHEART.Sheets.PC.DomainCard.${capitalize(button.dataset.key)}Title`)}`;
const cls = getDocumentClass('ChatMessage'); const cls = getDocumentClass('ChatMessage');
const systemData = {
title: game.i18n.localize('DAGGERHEART.Chat.FoundationCard.SubclassFeatureTitle'),
origin: this.document.id,
name: title,
img: item.img,
description: ability.description
};
const msg = new cls({ const msg = new cls({
type: 'abilityUse',
user: game.user.id, user: game.user.id,
system: systemData,
content: await foundry.applications.handlebars.renderTemplate( content: await foundry.applications.handlebars.renderTemplate(
'systems/daggerheart/templates/chat/ability-use.hbs', 'systems/daggerheart/templates/chat/ability-use.hbs',
{ systemData
title: game.i18n.localize('DAGGERHEART.Chat.FoundationCard.SubclassFeatureTitle'),
card: { name: title, img: item.img, description: ability.description }
}
) )
}); });
@ -948,14 +966,19 @@ export default class PCSheet extends DaggerheartSheet(ActorSheetV2) {
const item = this.document.items.find(x => x.uuid === button.dataset.id); const item = this.document.items.find(x => x.uuid === button.dataset.id);
const cls = getDocumentClass('ChatMessage'); const cls = getDocumentClass('ChatMessage');
const systemData = {
title: game.i18n.localize('DAGGERHEART.Chat.FoundationCard.SubclassFeatureTitle'),
origin: this.document.id,
name: item.name,
img: item.img,
description: item.system.description
};
const msg = new cls({ const msg = new cls({
user: game.user.id, user: game.user.id,
system: systemData,
content: await foundry.applications.handlebars.renderTemplate( content: await foundry.applications.handlebars.renderTemplate(
'systems/daggerheart/templates/chat/ability-use.hbs', 'systems/daggerheart/templates/chat/ability-use.hbs',
{ systemData
title: game.i18n.localize('DAGGERHEART.Chat.FoundationCard.SubclassFeatureTitle'),
card: { name: item.name, img: item.img, description: item.system.description }
}
) )
}); });

View file

@ -4,11 +4,12 @@ export default class DhpAbilityUse extends foundry.abstract.TypeDataModel {
return { return {
title: new fields.StringField({}), title: new fields.StringField({}),
origin: new fields.StringField({}),
img: new fields.StringField({}), img: new fields.StringField({}),
name: new fields.StringField({}), name: new fields.StringField({}),
description: new fields.StringField({}), description: new fields.StringField({}),
actions: new fields.ArrayField( actions: new fields.ArrayField(
new fields.SchemaField({ new fields.ObjectField({
name: new fields.StringField({}), name: new fields.StringField({}),
damage: new fields.SchemaField({ damage: new fields.SchemaField({
type: new fields.StringField({}), type: new fields.StringField({}),
@ -19,11 +20,11 @@ export default class DhpAbilityUse extends foundry.abstract.TypeDataModel {
value: new fields.StringField({}) value: new fields.StringField({})
}), }),
cost: new fields.SchemaField({ cost: new fields.SchemaField({
type: new fields.StringField({ nullable: true }), type: new fields.StringField({}),
value: new fields.NumberField({ nullable: true }) value: new fields.NumberField({})
}), }),
target: new fields.SchemaField({ target: new fields.SchemaField({
type: new fields.StringField({}) type: new fields.StringField({ nullable: true })
}) })
}) })
) )

View file

@ -307,10 +307,20 @@ export default class DhpActor extends Actor {
let update = {}; let update = {};
switch (type) { switch (type) {
case SYSTEM.GENERAL.healingTypes.health.id: case SYSTEM.GENERAL.healingTypes.health.id:
update = { 'system.resources.health.value': Math.max(this.system.resources.health.value - healing, 0) }; update = {
'system.resources.health.value': Math.min(
this.system.resources.health.value + healing,
this.system.resources.health.max
)
};
break; break;
case SYSTEM.GENERAL.healingTypes.stress.id: case SYSTEM.GENERAL.healingTypes.stress.id:
update = { 'system.resources.stress.value': Math.max(this.system.resources.stress.value - healing, 0) }; update = {
'system.resources.stress.value': Math.min(
this.system.resources.stress.value + healing,
this.system.resources.stress.max
)
};
break; break;
} }
@ -343,7 +353,10 @@ export default class DhpActor extends Actor {
} }
if (action.cost.type != null && action.cost.value != null) { if (action.cost.type != null && action.cost.value != null) {
if (this.system.resources[action.cost.type].value < action.cost.value - 1) { if (
this.system.resources[action.cost.type].value - action.cost.value <=
this.system.resources[action.cost.type].min
) {
ui.notifications.error(game.i18n.localize(`Insufficient ${action.cost.type} to use this ability`)); ui.notifications.error(game.i18n.localize(`Insufficient ${action.cost.type} to use this ability`));
return; return;
} }

View file

@ -36,7 +36,7 @@ export default class DhpChatLog extends foundry.applications.sidebar.tabs.ChatLo
element.addEventListener('click', event => this.selectAdvantage.bind(this)(event, data.message)) element.addEventListener('click', event => this.selectAdvantage.bind(this)(event, data.message))
); );
html.querySelectorAll('.ability-use-button').forEach(element => html.querySelectorAll('.ability-use-button').forEach(element =>
element.addEventListener('click', this.abilityUseButton.bind(this)(event, data.message)) element.addEventListener('click', event => this.abilityUseButton.bind(this)(event, data.message))
); );
}; };
@ -134,6 +134,7 @@ export default class DhpChatLog extends foundry.applications.sidebar.tabs.ChatLo
event.stopPropagation(); event.stopPropagation();
const action = message.system.actions[Number.parseInt(event.currentTarget.dataset.index)]; const action = message.system.actions[Number.parseInt(event.currentTarget.dataset.index)];
await game.user.character.useAction(action); const actor = game.actors.get(message.system.origin);
await actor.useAction(action);
}; };
} }

View file

@ -547,6 +547,11 @@
margin-top: @tinyMargin; margin-top: @tinyMargin;
} }
} }
.ability-card-action-cost {
margin: auto;
font-size: 1.5em;
}
} }
img { img {

View file

@ -1770,6 +1770,10 @@
.daggerheart.chat.domain-card .ability-card-footer button:nth-of-type(n + 3) { .daggerheart.chat.domain-card .ability-card-footer button:nth-of-type(n + 3) {
margin-top: 2px; margin-top: 2px;
} }
.daggerheart.chat.domain-card .ability-card-footer .ability-card-action-cost {
margin: auto;
font-size: 1.5em;
}
.daggerheart.chat.domain-card img { .daggerheart.chat.domain-card img {
width: 80px; width: 80px;
} }

View file

@ -10,6 +10,7 @@
<button class="ability-use-button" data-index="{{index}}"> <button class="ability-use-button" data-index="{{index}}">
{{action.name}} {{action.name}}
</button> </button>
{{#if action.cost.value}}<div class="ability-card-action-cost">{{action.cost.value}} {{action.cost.type}}</div>{{/if}}
{{/each}} {{/each}}
</footer> </footer>
</div> </div>

View file

@ -16,6 +16,7 @@
</div> </div>
</div> </div>
<div class="abilities-text-container domain"> <div class="abilities-text-container domain">
<div ><i data-action="removeCard" data-type="{{card.type}}" data-key="{{card.uuid}}" class="fas fa-trash icon-button row-icon"></i></div>
<div class="abilities-card-title">{{card.name}}</div> <div class="abilities-card-title">{{card.name}}</div>
{{#if inVault}} {{#if inVault}}
<div class="abilities-card-description">{{{card.system.effect}}}</div> <div class="abilities-card-description">{{{card.system.effect}}}</div>