mirror of
https://github.com/Foundryborne/daggerheart.git
synced 2026-01-14 20:51:07 +01:00
Fixed attack
This commit is contained in:
parent
5f6ed71d04
commit
4f5e693c7f
4 changed files with 42 additions and 123 deletions
|
|
@ -320,25 +320,8 @@ export default class CharacterSheet extends DaggerheartSheet(ActorSheetV2) {
|
||||||
const context = await super._prepareContext(_options);
|
const context = await super._prepareContext(_options);
|
||||||
context.document = this.document;
|
context.document = this.document;
|
||||||
context.tabs = super._getTabs(this.constructor.TABS);
|
context.tabs = super._getTabs(this.constructor.TABS);
|
||||||
|
|
||||||
context.config = SYSTEM;
|
context.config = SYSTEM;
|
||||||
|
|
||||||
const selectedAttributes = Object.values(this.document.system.traits).map(x => x.base);
|
|
||||||
context.abilityScoreArray = await game.settings
|
|
||||||
.get(SYSTEM.id, SYSTEM.SETTINGS.gameSettings.Homebrew)
|
|
||||||
.traitArray.reduce((acc, x) => {
|
|
||||||
const selectedIndex = selectedAttributes.indexOf(x);
|
|
||||||
if (selectedIndex !== -1) {
|
|
||||||
selectedAttributes.splice(selectedIndex, 1);
|
|
||||||
} else {
|
|
||||||
acc.push({ name: x, value: x });
|
|
||||||
}
|
|
||||||
|
|
||||||
return acc;
|
|
||||||
}, []);
|
|
||||||
if (!context.abilityScoreArray.includes(0)) context.abilityScoreArray.push({ name: 0, value: 0 });
|
|
||||||
context.abilityScoresFinished = context.abilityScoreArray.every(x => x.value === 0);
|
|
||||||
|
|
||||||
context.attributes = Object.keys(this.document.system.traits).reduce((acc, key) => {
|
context.attributes = Object.keys(this.document.system.traits).reduce((acc, key) => {
|
||||||
acc[key] = {
|
acc[key] = {
|
||||||
...this.document.system.traits[key],
|
...this.document.system.traits[key],
|
||||||
|
|
@ -349,73 +332,6 @@ export default class CharacterSheet extends DaggerheartSheet(ActorSheetV2) {
|
||||||
return acc;
|
return acc;
|
||||||
}, {});
|
}, {});
|
||||||
|
|
||||||
const ancestry = await this.mapFeatureType(
|
|
||||||
this.document.system.ancestry ? [this.document.system.ancestry] : [],
|
|
||||||
SYSTEM.GENERAL.objectTypes
|
|
||||||
);
|
|
||||||
const community = await this.mapFeatureType(
|
|
||||||
this.document.system.community ? [this.document.system.community] : [],
|
|
||||||
SYSTEM.GENERAL.objectTypes
|
|
||||||
);
|
|
||||||
const foundation = {
|
|
||||||
ancestry: ancestry[0],
|
|
||||||
community: community[0],
|
|
||||||
advancement: {}
|
|
||||||
};
|
|
||||||
|
|
||||||
const nrLoadoutCards = this.document.system.domainCards.loadout.length;
|
|
||||||
const loadout = await this.mapFeatureType(this.document.system.domainCards.loadout, SYSTEM.DOMAIN.cardTypes);
|
|
||||||
const vault = await this.mapFeatureType(this.document.system.domainCards.vault, SYSTEM.DOMAIN.cardTypes);
|
|
||||||
context.abilities = {
|
|
||||||
foundation: foundation,
|
|
||||||
loadout: {
|
|
||||||
top: loadout.slice(0, Math.min(2, nrLoadoutCards)),
|
|
||||||
bottom: nrLoadoutCards > 2 ? loadout.slice(2, Math.min(5, nrLoadoutCards)) : [],
|
|
||||||
nrTotal: nrLoadoutCards,
|
|
||||||
listView: game.user.getFlag(SYSTEM.id, SYSTEM.FLAGS.displayDomainCardsAsList)
|
|
||||||
},
|
|
||||||
vault: vault.map(x => ({
|
|
||||||
...x,
|
|
||||||
uuid: x.uuid,
|
|
||||||
sendToLoadoutDisabled: this.document.system.domainCards.loadout.length >= 5
|
|
||||||
}))
|
|
||||||
};
|
|
||||||
|
|
||||||
context.inventory = {
|
|
||||||
consumable: {
|
|
||||||
titles: {
|
|
||||||
name: game.i18n.localize('DAGGERHEART.Sheets.PC.InventoryTab.ConsumableTitle'),
|
|
||||||
quantity: game.i18n.localize('DAGGERHEART.Sheets.PC.InventoryTab.QuantityTitle')
|
|
||||||
},
|
|
||||||
items: this.document.items.filter(x => x.type === 'consumable')
|
|
||||||
},
|
|
||||||
miscellaneous: {
|
|
||||||
titles: {
|
|
||||||
name: game.i18n.localize('DAGGERHEART.Sheets.PC.InventoryTab.MiscellaneousTitle'),
|
|
||||||
quantity: game.i18n.localize('DAGGERHEART.Sheets.PC.InventoryTab.QuantityTitle')
|
|
||||||
},
|
|
||||||
items: this.document.items.filter(x => x.type === 'miscellaneous')
|
|
||||||
},
|
|
||||||
weapons: {
|
|
||||||
titles: {
|
|
||||||
name: game.i18n.localize('DAGGERHEART.Sheets.PC.InventoryTab.WeaponsTitle'),
|
|
||||||
quantity: game.i18n.localize('DAGGERHEART.Sheets.PC.InventoryTab.QuantityTitle')
|
|
||||||
},
|
|
||||||
items: this.document.items.filter(x => x.type === 'weapon')
|
|
||||||
},
|
|
||||||
armor: {
|
|
||||||
titles: {
|
|
||||||
name: game.i18n.localize('DAGGERHEART.Sheets.PC.InventoryTab.ArmorsTitle'),
|
|
||||||
quantity: game.i18n.localize('DAGGERHEART.Sheets.PC.InventoryTab.QuantityTitle')
|
|
||||||
},
|
|
||||||
items: this.document.items.filter(x => x.type === 'armor')
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
if (context.inventory.length === 0) {
|
|
||||||
context.inventory = Array(1).fill(Array(5).fill([]));
|
|
||||||
}
|
|
||||||
|
|
||||||
return context;
|
return context;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -424,26 +340,6 @@ export default class CharacterSheet extends DaggerheartSheet(ActorSheetV2) {
|
||||||
this.render();
|
this.render();
|
||||||
}
|
}
|
||||||
|
|
||||||
async mapFeatureType(data, configType) {
|
|
||||||
return await Promise.all(
|
|
||||||
data.map(async x => {
|
|
||||||
const abilities = x.system.abilities
|
|
||||||
? await Promise.all(x.system.abilities.map(async x => await fromUuid(x.uuid)))
|
|
||||||
: [];
|
|
||||||
|
|
||||||
return {
|
|
||||||
...x,
|
|
||||||
uuid: x.uuid,
|
|
||||||
system: {
|
|
||||||
...x.system,
|
|
||||||
abilities: abilities,
|
|
||||||
type: game.i18n.localize(configType[x.system.type ?? x.type].label)
|
|
||||||
}
|
|
||||||
};
|
|
||||||
})
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
static async rollAttribute(event, button) {
|
static async rollAttribute(event, button) {
|
||||||
const abilityLabel = game.i18n.localize(abilities[button.dataset.attribute].label);
|
const abilityLabel = game.i18n.localize(abilities[button.dataset.attribute].label);
|
||||||
const config = {
|
const config = {
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,9 @@ export default class DhCompanionSheet extends DaggerheartSheet(ActorSheetV2) {
|
||||||
tag: 'form',
|
tag: 'form',
|
||||||
classes: ['daggerheart', 'sheet', 'actor', 'dh-style', 'companion'],
|
classes: ['daggerheart', 'sheet', 'actor', 'dh-style', 'companion'],
|
||||||
position: { width: 700, height: 1000 },
|
position: { width: 700, height: 1000 },
|
||||||
actions: {},
|
actions: {
|
||||||
|
attackRoll: this.attackRoll
|
||||||
|
},
|
||||||
form: {
|
form: {
|
||||||
handler: this.updateForm,
|
handler: this.updateForm,
|
||||||
submitOnChange: true,
|
submitOnChange: true,
|
||||||
|
|
@ -32,4 +34,8 @@ export default class DhCompanionSheet extends DaggerheartSheet(ActorSheetV2) {
|
||||||
await this.document.update(formData.object);
|
await this.document.update(formData.object);
|
||||||
this.render();
|
this.render();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static async attackRoll(event) {
|
||||||
|
this.actor.system.attack.use(event);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
import BaseDataActor from './base.mjs';
|
import BaseDataActor from './base.mjs';
|
||||||
import DhLevelData from '../levelData.mjs';
|
import DhLevelData from '../levelData.mjs';
|
||||||
import ForeignDocumentUUIDField from '../fields/foreignDocumentUUIDField.mjs';
|
import ForeignDocumentUUIDField from '../fields/foreignDocumentUUIDField.mjs';
|
||||||
|
import ActionField from '../fields/actionField.mjs';
|
||||||
|
|
||||||
export default class DhCompanion extends BaseDataActor {
|
export default class DhCompanion extends BaseDataActor {
|
||||||
static LOCALIZATION_PREFIXES = ['DAGGERHEART.Sheets.Companion'];
|
static LOCALIZATION_PREFIXES = ['DAGGERHEART.Sheets.Companion'];
|
||||||
|
|
@ -41,28 +42,38 @@ export default class DhCompanion extends BaseDataActor {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
),
|
),
|
||||||
attack: new fields.SchemaField({
|
attack: new ActionField({
|
||||||
name: new fields.StringField({}),
|
base: {
|
||||||
range: new fields.StringField({
|
name: 'Attack',
|
||||||
required: true,
|
_id: foundry.utils.randomID(),
|
||||||
choices: SYSTEM.GENERAL.range,
|
systemPath: 'attack',
|
||||||
initial: SYSTEM.GENERAL.range.melee.id
|
type: 'attack',
|
||||||
}),
|
range: 'melee',
|
||||||
damage: new fields.SchemaField({
|
target: {
|
||||||
value: new fields.StringField({ initial: 'd6' }),
|
type: 'any',
|
||||||
type: new fields.StringField({
|
amount: 1
|
||||||
required: true,
|
},
|
||||||
choices: SYSTEM.GENERAL.damageTypes,
|
roll: {
|
||||||
initial: SYSTEM.GENERAL.damageTypes.physical.id
|
type: 'weapon',
|
||||||
})
|
bonus: 0
|
||||||
})
|
},
|
||||||
|
damage: {
|
||||||
|
parts: [
|
||||||
|
{
|
||||||
|
multiplier: 'flat'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
}),
|
}),
|
||||||
levelData: new fields.EmbeddedDataField(DhLevelData)
|
levelData: new fields.EmbeddedDataField(DhLevelData)
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
prepareBaseData() {
|
prepareBaseData() {
|
||||||
this.attack.modifier = this.partner?.system?.spellcastingModifiers?.main ?? 0; // Needs to expand on which modifier it is that should be used because of multiclassing;
|
const partnerSpellcastingModifier = this.partner?.system?.spellcastingModifiers?.main;
|
||||||
|
const spellcastingModifier = this.partner?.system?.traits?.[partnerSpellcastingModifier]?.total;
|
||||||
|
this.attack.roll.bonus = spellcastingModifier ?? 0; // Needs to expand on which modifier it is that should be used because of multiclassing;
|
||||||
}
|
}
|
||||||
|
|
||||||
prepareDerivedData() {
|
prepareDerivedData() {
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,13 @@
|
||||||
{{/each}}
|
{{/each}}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="flexcol">
|
<div class="flexrow">
|
||||||
{{formGroup systemFields.attack.fields.name value=source.system.attack.name localize=true }}
|
<div class="form-group">
|
||||||
|
<div class="form-fields">
|
||||||
|
<label>{{localize "DAGGERHEART.Sheets.Companion.FIELDS.attack.name.label"}}</label>
|
||||||
|
<input type="text" name="system.attack.name" value="{{source.system.attack.name}}" />
|
||||||
|
<button data-action="attackRoll">Attack</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
Loading…
Add table
Add a link
Reference in a new issue