mirror of
https://github.com/Foundryborne/daggerheart.git
synced 2026-01-12 11:41:08 +01:00
[Fix] 654 - CharacterCreation DomainCard Effects (#665)
* Character creation fix and levelup style fixes * . * Fixed old origin logic
This commit is contained in:
parent
bcedc74bf3
commit
ead2f6b8f3
11 changed files with 66 additions and 48 deletions
|
|
@ -1,6 +1,6 @@
|
||||||
import { abilities } from '../../config/actorConfig.mjs';
|
import { abilities } from '../../config/actorConfig.mjs';
|
||||||
import { burden } from '../../config/generalConfig.mjs';
|
import { burden } from '../../config/generalConfig.mjs';
|
||||||
import { createEmbeddedItemWithEffects } from '../../helpers/utils.mjs';
|
import { createEmbeddedItemsWithEffects, createEmbeddedItemWithEffects } from '../../helpers/utils.mjs';
|
||||||
|
|
||||||
const { HandlebarsApplicationMixin, ApplicationV2 } = foundry.applications.api;
|
const { HandlebarsApplicationMixin, ApplicationV2 } = foundry.applications.api;
|
||||||
|
|
||||||
|
|
@ -555,13 +555,7 @@ export default class DhCharacterCreation extends HandlebarsApplicationMixin(Appl
|
||||||
await createEmbeddedItemWithEffects(this.character, this.setup.community);
|
await createEmbeddedItemWithEffects(this.character, this.setup.community);
|
||||||
await createEmbeddedItemWithEffects(this.character, this.setup.class);
|
await createEmbeddedItemWithEffects(this.character, this.setup.class);
|
||||||
await createEmbeddedItemWithEffects(this.character, this.setup.subclass);
|
await createEmbeddedItemWithEffects(this.character, this.setup.subclass);
|
||||||
await this.character.createEmbeddedDocuments(
|
await createEmbeddedItemsWithEffects(this.character, Object.values(this.setup.domainCards));
|
||||||
'Item',
|
|
||||||
Object.values(this.setup.domainCards).map(x => ({
|
|
||||||
...x,
|
|
||||||
effects: x.effects?.map(effect => effect.toObject())
|
|
||||||
}))
|
|
||||||
);
|
|
||||||
|
|
||||||
if (this.equipment.armor.uuid)
|
if (this.equipment.armor.uuid)
|
||||||
await createEmbeddedItemWithEffects(this.character, this.equipment.armor, {
|
await createEmbeddedItemWithEffects(this.character, this.equipment.armor, {
|
||||||
|
|
@ -583,14 +577,9 @@ export default class DhCharacterCreation extends HandlebarsApplicationMixin(Appl
|
||||||
if (this.equipment.inventory.choiceB.uuid)
|
if (this.equipment.inventory.choiceB.uuid)
|
||||||
await createEmbeddedItemWithEffects(this.character, this.equipment.inventory.choiceB);
|
await createEmbeddedItemWithEffects(this.character, this.equipment.inventory.choiceB);
|
||||||
|
|
||||||
await this.character.createEmbeddedDocuments(
|
await createEmbeddedItemsWithEffects(
|
||||||
'Item',
|
this.character,
|
||||||
this.setup.class.system.inventory.take
|
this.setup.class.system.inventory.take.filter(x => x)
|
||||||
.filter(x => x)
|
|
||||||
.map(x => ({
|
|
||||||
...x,
|
|
||||||
effects: x.effects?.map(effect => effect.toObject())
|
|
||||||
}))
|
|
||||||
);
|
);
|
||||||
|
|
||||||
await this.character.update({
|
await this.character.update({
|
||||||
|
|
|
||||||
|
|
@ -44,10 +44,12 @@ export default class DhlevelUp extends HandlebarsApplicationMixin(ApplicationV2)
|
||||||
|
|
||||||
static PARTS = {
|
static PARTS = {
|
||||||
tabs: { template: 'systems/daggerheart/templates/levelup/tabs/tab-navigation.hbs' },
|
tabs: { template: 'systems/daggerheart/templates/levelup/tabs/tab-navigation.hbs' },
|
||||||
advancements: { template: 'systems/daggerheart/templates/levelup/tabs/advancements.hbs' },
|
advancements: {
|
||||||
|
template: 'systems/daggerheart/templates/levelup/tabs/advancements.hbs'
|
||||||
|
},
|
||||||
selections: {
|
selections: {
|
||||||
template: 'systems/daggerheart/templates/levelup/tabs/selections.hbs',
|
template: 'systems/daggerheart/templates/levelup/tabs/selections.hbs',
|
||||||
scrollable: ['.selections']
|
scrollable: ['.levelup-selections-container']
|
||||||
},
|
},
|
||||||
summary: { template: 'systems/daggerheart/templates/levelup/tabs/summary.hbs' },
|
summary: { template: 'systems/daggerheart/templates/levelup/tabs/summary.hbs' },
|
||||||
footer: { template: 'systems/daggerheart/templates/levelup/tabs/footer.hbs' }
|
footer: { template: 'systems/daggerheart/templates/levelup/tabs/footer.hbs' }
|
||||||
|
|
|
||||||
|
|
@ -479,7 +479,8 @@ export const multiplierTypes = {
|
||||||
cast: 'Spellcast',
|
cast: 'Spellcast',
|
||||||
scale: 'Cost Scaling',
|
scale: 'Cost Scaling',
|
||||||
result: 'Roll Result',
|
result: 'Roll Result',
|
||||||
flat: 'Flat'
|
flat: 'Flat',
|
||||||
|
tier: 'Tier'
|
||||||
};
|
};
|
||||||
|
|
||||||
export const diceSetNumbers = {
|
export const diceSetNumbers = {
|
||||||
|
|
|
||||||
|
|
@ -224,14 +224,11 @@ export default class DHBaseAction extends ActionMixin(foundry.abstract.DataModel
|
||||||
}
|
}
|
||||||
|
|
||||||
const resources = config.costs
|
const resources = config.costs
|
||||||
.filter(c =>
|
.filter(
|
||||||
c.enabled !== false
|
c =>
|
||||||
&&
|
c.enabled !== false &&
|
||||||
(
|
((!successCost && (!c.consumeOnSuccess || config.roll?.success)) ||
|
||||||
(!successCost && (!c.consumeOnSuccess || config.roll?.success))
|
(successCost && c.consumeOnSuccess))
|
||||||
||
|
|
||||||
(successCost && c.consumeOnSuccess)
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
.map(c => {
|
.map(c => {
|
||||||
const resource = usefulResources[c.key];
|
const resource = usefulResources[c.key];
|
||||||
|
|
@ -244,17 +241,15 @@ export default class DHBaseAction extends ActionMixin(foundry.abstract.DataModel
|
||||||
});
|
});
|
||||||
|
|
||||||
await this.actor.modifyResource(resources);
|
await this.actor.modifyResource(resources);
|
||||||
if (config.uses?.enabled
|
if (
|
||||||
&&
|
config.uses?.enabled &&
|
||||||
(
|
((!successCost && (!config.uses?.consumeOnSuccess || config.roll?.success)) ||
|
||||||
(!successCost && (!config.uses?.consumeOnSuccess || config.roll?.success))
|
(successCost && config.uses?.consumeOnSuccess))
|
||||||
||
|
)
|
||||||
(successCost && config.uses?.consumeOnSuccess)
|
this.update({ 'uses.value': this.uses.value + 1 });
|
||||||
)
|
|
||||||
) this.update({ 'uses.value': this.uses.value + 1 });
|
|
||||||
|
|
||||||
if(config.roll?.success || successCost)
|
if (config.roll?.success || successCost)
|
||||||
(config.message ?? config.parent).update({'system.successConsumed': true})
|
(config.message ?? config.parent).update({ 'system.successConsumed': true });
|
||||||
}
|
}
|
||||||
/* */
|
/* */
|
||||||
|
|
||||||
|
|
@ -307,11 +302,9 @@ export default class DHBaseAction extends ActionMixin(foundry.abstract.DataModel
|
||||||
}
|
}
|
||||||
|
|
||||||
async applyEffect(effect, actor) {
|
async applyEffect(effect, actor) {
|
||||||
const origin = effect.parent?.parent ? effect.parent.parent.uuid : effect.parent.uuid;
|
const existingEffect = actor.effects.find(e => e.origin === effect.uuid);
|
||||||
// Enable an existing effect on the target if it originated from this effect
|
|
||||||
const existingEffect = actor.effects.find(e => e.origin === origin);
|
|
||||||
if (existingEffect) {
|
if (existingEffect) {
|
||||||
return existingEffect.update(
|
return effect.update(
|
||||||
foundry.utils.mergeObject({
|
foundry.utils.mergeObject({
|
||||||
...effect.constructor.getInitialDuration(),
|
...effect.constructor.getInitialDuration(),
|
||||||
disabled: false
|
disabled: false
|
||||||
|
|
@ -324,7 +317,7 @@ export default class DHBaseAction extends ActionMixin(foundry.abstract.DataModel
|
||||||
...effect.toObject(),
|
...effect.toObject(),
|
||||||
disabled: false,
|
disabled: false,
|
||||||
transfer: false,
|
transfer: false,
|
||||||
origin: origin
|
origin: effect.uuid
|
||||||
});
|
});
|
||||||
await ActiveEffect.implementation.create(effectData, { parent: actor });
|
await ActiveEffect.implementation.create(effectData, { parent: actor });
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -75,7 +75,8 @@ export default class DhActiveEffect extends foundry.documents.ActiveEffect {
|
||||||
if (isOriginTarget && change.effect.origin) {
|
if (isOriginTarget && change.effect.origin) {
|
||||||
change.value = change.value.replaceAll(/origin\.@/gi, '@');
|
change.value = change.value.replaceAll(/origin\.@/gi, '@');
|
||||||
try {
|
try {
|
||||||
const doc = foundry.utils.fromUuidSync(change.effect.origin);
|
const effect = foundry.utils.fromUuidSync(change.effect.origin);
|
||||||
|
const doc = effect.parent?.parent;
|
||||||
if (doc) parseModel = doc;
|
if (doc) parseModel = doc;
|
||||||
} catch (_) {}
|
} catch (_) {}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -371,6 +371,21 @@ export async function createEmbeddedItemWithEffects(actor, baseData, update) {
|
||||||
return doc;
|
return doc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function createEmbeddedItemsWithEffects(actor, baseData) {
|
||||||
|
const effectData = [];
|
||||||
|
for (let d of baseData) {
|
||||||
|
const data = d.uuid.startsWith('Compendium') ? await foundry.utils.fromUuid(d.uuid) : d;
|
||||||
|
effectData.push({
|
||||||
|
...data,
|
||||||
|
id: data.id,
|
||||||
|
uuid: data.uuid,
|
||||||
|
effects: data.effects?.map(effect => effect.toObject())
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
await actor.createEmbeddedDocuments('Item', effectData);
|
||||||
|
}
|
||||||
|
|
||||||
export const slugify = name => {
|
export const slugify = name => {
|
||||||
return name.toLowerCase().replaceAll(' ', '-').replaceAll('.', '');
|
return name.toLowerCase().replaceAll(' ', '-').replaceAll('.', '');
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -112,6 +112,10 @@
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
|
|
||||||
|
.card-preview-container {
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
|
||||||
.card-preview-container {
|
.card-preview-container {
|
||||||
border-color: light-dark(@dark-blue, @golden);
|
border-color: light-dark(@dark-blue, @golden);
|
||||||
}
|
}
|
||||||
|
|
@ -157,7 +161,10 @@
|
||||||
.selections-outer-container {
|
.selections-outer-container {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: space-evenly;
|
justify-content: space-evenly;
|
||||||
height: 210px;
|
|
||||||
|
&.enlarged {
|
||||||
|
height: 240px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.section-container {
|
.section-container {
|
||||||
|
|
|
||||||
|
|
@ -83,10 +83,15 @@
|
||||||
background: grey;
|
background: grey;
|
||||||
padding: 0 12px;
|
padding: 0 12px;
|
||||||
border-radius: 6px;
|
border-radius: 6px;
|
||||||
|
z-index: 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
img {
|
img {
|
||||||
height: 124px;
|
height: 124px;
|
||||||
|
|
||||||
|
&.svg {
|
||||||
|
filter: @beige-filter;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.levelup-domain-selected {
|
.levelup-domain-selected {
|
||||||
|
|
@ -138,6 +143,10 @@
|
||||||
padding: 0 12px;
|
padding: 0 12px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.levelup-trait-increases {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
.levelup-radio-choices {
|
.levelup-radio-choices {
|
||||||
display: flex;
|
display: flex;
|
||||||
gap: 8px;
|
gap: 8px;
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.checkbox-group-container {
|
.checkbox-group-container {
|
||||||
|
width: 100%;
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-columns: 1fr 3fr;
|
grid-template-columns: 1fr 3fr;
|
||||||
gap: 4px;
|
gap: 4px;
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@
|
||||||
<input type="range" id="volume" class="mixed-ancestry-slider" value="{{mixedAncestry}}" min="0" max="1" />
|
<input type="range" id="volume" class="mixed-ancestry-slider" value="{{mixedAncestry}}" min="0" max="1" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="selections-outer-container">
|
<div class="selections-outer-container enlarged">
|
||||||
<div class="selections-container primary-ancestry-card">
|
<div class="selections-container primary-ancestry-card">
|
||||||
{{#> "systems/daggerheart/templates/components/card-preview.hbs" primaryAncestry altPartialBlock=true secondaryDisabled=secondaryAncestry.uuid mixedAncestry=mixedAncestry }}
|
{{#> "systems/daggerheart/templates/components/card-preview.hbs" primaryAncestry altPartialBlock=true secondaryDisabled=secondaryAncestry.uuid mixedAncestry=mixedAncestry }}
|
||||||
{{#if uuid}}
|
{{#if uuid}}
|
||||||
|
|
|
||||||
|
|
@ -99,7 +99,7 @@
|
||||||
{{#each this.multiclass.domains}}
|
{{#each this.multiclass.domains}}
|
||||||
<div class="levelup-domain-selection-container {{#if this.disabled}}disabled{{/if}}" {{#if (not this.disabled)}}data-action="selectDomain" data-uuid="{{../multiclass.uuid}}" data-domain="{{this.id}}" data-path="{{../multiclass.path}}" {{/if}}>
|
<div class="levelup-domain-selection-container {{#if this.disabled}}disabled{{/if}}" {{#if (not this.disabled)}}data-action="selectDomain" data-uuid="{{../multiclass.uuid}}" data-domain="{{this.id}}" data-path="{{../multiclass.path}}" {{/if}}>
|
||||||
<div class="levelup-domain-label">{{localize this.label}}</div>
|
<div class="levelup-domain-label">{{localize this.label}}</div>
|
||||||
<img src="{{this.src}}" />
|
<img class="svg" src="{{this.src}}" />
|
||||||
{{#if this.selected}}
|
{{#if this.selected}}
|
||||||
<div class="levelup-domain-selected">
|
<div class="levelup-domain-selected">
|
||||||
<i class="fa-solid fa-check"></i>
|
<i class="fa-solid fa-check"></i>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue