mirror of
https://github.com/Foundryborne/daggerheart.git
synced 2026-01-17 23:49:02 +01:00
Few fixes
This commit is contained in:
parent
1bd2bbd02d
commit
aacaf516b2
8 changed files with 50 additions and 39 deletions
|
|
@ -412,8 +412,8 @@ export class DamageRoll extends DHRoll {
|
||||||
static async postEvaluate(roll, config = {}) {
|
static async postEvaluate(roll, config = {}) {
|
||||||
config.roll = {
|
config.roll = {
|
||||||
result: roll.total,
|
result: roll.total,
|
||||||
dice: roll.dice
|
dice: roll.dice,
|
||||||
|
type: config.type
|
||||||
};
|
};
|
||||||
if (roll.healing) config.roll.type = roll.healing.type;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -68,8 +68,8 @@ export const damageTypes = {
|
||||||
};
|
};
|
||||||
|
|
||||||
export const healingTypes = {
|
export const healingTypes = {
|
||||||
health: {
|
hitPoints: {
|
||||||
id: 'health',
|
id: 'hitPoints',
|
||||||
label: 'DAGGERHEART.HealingType.HitPoints.Name',
|
label: 'DAGGERHEART.HealingType.HitPoints.Name',
|
||||||
abbreviation: 'DAGGERHEART.HealingType.HitPoints.Abbreviation'
|
abbreviation: 'DAGGERHEART.HealingType.HitPoints.Abbreviation'
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -126,7 +126,7 @@ export class DHBaseAction extends foundry.abstract.DataModel {
|
||||||
choices: SYSTEM.GENERAL.healingTypes,
|
choices: SYSTEM.GENERAL.healingTypes,
|
||||||
required: true,
|
required: true,
|
||||||
blank: false,
|
blank: false,
|
||||||
initial: SYSTEM.GENERAL.healingTypes.health.id,
|
initial: SYSTEM.GENERAL.healingTypes.hitPoints.id,
|
||||||
label: 'Healing'
|
label: 'Healing'
|
||||||
}),
|
}),
|
||||||
value: new fields.EmbeddedDataField(DHActionDiceData)
|
value: new fields.EmbeddedDataField(DHActionDiceData)
|
||||||
|
|
@ -516,7 +516,8 @@ export class DHHealingAction extends DHBaseAction {
|
||||||
img: x.img,
|
img: x.img,
|
||||||
hit: true
|
hit: true
|
||||||
})),
|
})),
|
||||||
messageTemplate: 'systems/daggerheart/templates/chat/healing-roll.hbs'
|
messageTemplate: 'systems/daggerheart/templates/chat/healing-roll.hbs',
|
||||||
|
type: this.healing.type
|
||||||
};
|
};
|
||||||
|
|
||||||
roll = CONFIG.Dice.daggerheart.DamageRoll.build(config);
|
roll = CONFIG.Dice.daggerheart.DamageRoll.build(config);
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
import { actionsTypes } from '../action/_module.mjs';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Describes metadata about the item data model type
|
* Describes metadata about the item data model type
|
||||||
* @typedef {Object} ItemDataModelMetadata
|
* @typedef {Object} ItemDataModelMetadata
|
||||||
|
|
@ -50,4 +52,24 @@ export default class BaseDataItem extends foundry.abstract.TypeDataModel {
|
||||||
const data = { ...actorRollData, item: { ...this } };
|
const data = { ...actorRollData, item: { ...this } };
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async _preCreate(data, options, user) {
|
||||||
|
if(!this.constructor.metadata.hasInitialAction || !foundry.utils.isEmpty(this.actions)) return;
|
||||||
|
const actionType = {
|
||||||
|
weapon: 'attack'
|
||||||
|
}[this.constructor.metadata.type],
|
||||||
|
cls = actionsTypes.attack,
|
||||||
|
action = new cls(
|
||||||
|
{
|
||||||
|
_id: foundry.utils.randomID(),
|
||||||
|
type: actionType,
|
||||||
|
name: game.i18n.localize(SYSTEM.ACTIONS.actionTypes[actionType].name),
|
||||||
|
...cls.getSourceConfig(this.parent)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
parent: this.parent
|
||||||
|
}
|
||||||
|
);
|
||||||
|
this.updateSource({actions: [action]});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,8 @@ export default class DHWeapon extends BaseDataItem {
|
||||||
isQuantifiable: true,
|
isQuantifiable: true,
|
||||||
embedded: {
|
embedded: {
|
||||||
feature: 'featureTest'
|
feature: 'featureTest'
|
||||||
}
|
},
|
||||||
|
hasInitialAction: true
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -51,24 +52,6 @@ export default class DHWeapon extends BaseDataItem {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
async _preCreate(data, options, user) {
|
|
||||||
const actionType = 'attack',
|
|
||||||
cls = actionsTypes.attack,
|
|
||||||
action = new cls(
|
|
||||||
{
|
|
||||||
_id: foundry.utils.randomID(),
|
|
||||||
type: actionType,
|
|
||||||
name: game.i18n.localize(SYSTEM.ACTIONS.actionTypes[actionType].name),
|
|
||||||
...cls.getSourceConfig(this.parent)
|
|
||||||
},
|
|
||||||
{
|
|
||||||
parent: this.parent
|
|
||||||
}
|
|
||||||
);
|
|
||||||
this.updateSource({actions: [action]});
|
|
||||||
return super._preCreate(data, options, user);
|
|
||||||
}
|
|
||||||
|
|
||||||
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;
|
||||||
|
|
|
||||||
|
|
@ -401,22 +401,27 @@ export default class DhpActor extends Actor {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async takeHealing(resources) {
|
||||||
|
resources.forEach(r => r.value *= -1);
|
||||||
|
await this.modifyResource(resources);
|
||||||
|
}
|
||||||
|
|
||||||
async modifyResource(resources) {
|
async modifyResource(resources) {
|
||||||
if (!resources.length) return;
|
if (!resources.length) return;
|
||||||
let updates = { actor: { target: this, resources: {} }, armor: { target: this.system.armor, resources: {} } };
|
let updates = { actor: { target: this, resources: {} }, armor: { target: this.system.armor, resources: {} } };
|
||||||
resources.forEach(r => {
|
resources.forEach(r => {
|
||||||
switch (r.type) {
|
switch (r.type) {
|
||||||
case 'armorStack':
|
case 'armorStack':
|
||||||
updates.armor.resources['system.marks.value'] = Math.min(
|
updates.armor.resources['system.marks.value'] = Math.max(Math.min(
|
||||||
this.system.armor.system.marks.value + r.value,
|
this.system.armor.system.marks.value + r.value,
|
||||||
this.system.armorScore
|
this.system.armorScore
|
||||||
);
|
), 0);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
updates.actor.resources[`system.resources.${r.type}.value`] = Math.min(
|
updates.actor.resources[`system.resources.${r.type}.value`] = Math.max(Math.min(
|
||||||
this.system.resources[r.type].value + r.value,
|
this.system.resources[r.type].value + r.value,
|
||||||
this.system.resources[r.type].max
|
this.system.resources[r.type].max
|
||||||
);
|
), 0);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,9 @@ export default class DhpChatLog extends foundry.applications.sidebar.tabs.ChatLo
|
||||||
html.querySelectorAll('.damage-button').forEach(element =>
|
html.querySelectorAll('.damage-button').forEach(element =>
|
||||||
element.addEventListener('click', event => this.onDamage(event, data.message))
|
element.addEventListener('click', event => this.onDamage(event, data.message))
|
||||||
);
|
);
|
||||||
html.querySelectorAll('.healing-button').forEach(element => element.addEventListener('click', this.onHealing));
|
html.querySelectorAll('.healing-button').forEach(element =>
|
||||||
|
element.addEventListener('click', event => this.onHealing(event, data.message))
|
||||||
|
);
|
||||||
html.querySelectorAll('.target-indicator').forEach(element =>
|
html.querySelectorAll('.target-indicator').forEach(element =>
|
||||||
element.addEventListener('click', this.onToggleTargets)
|
element.addEventListener('click', this.onToggleTargets)
|
||||||
);
|
);
|
||||||
|
|
@ -87,7 +89,7 @@ export default class DhpChatLog extends foundry.applications.sidebar.tabs.ChatLo
|
||||||
|
|
||||||
onRollHealing = async (event, message) => {
|
onRollHealing = async (event, message) => {
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
const actor = this.getActor(message.system.source.actor);
|
const actor = await this.getActor(message.system.source.actor);
|
||||||
if (!actor || !game.user.isGM) return true;
|
if (!actor || !game.user.isGM) return true;
|
||||||
if (message.system.source.item && message.system.source.action) {
|
if (message.system.source.item && message.system.source.action) {
|
||||||
const action = this.getAction(actor, message.system.source.item, message.system.source.action);
|
const action = this.getAction(actor, message.system.source.item, message.system.source.action);
|
||||||
|
|
@ -98,7 +100,7 @@ export default class DhpChatLog extends foundry.applications.sidebar.tabs.ChatLo
|
||||||
|
|
||||||
onApplyEffect = async (event, message) => {
|
onApplyEffect = async (event, message) => {
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
const actor = this.getActor(message.system.source.actor);
|
const actor = await this.getActor(message.system.source.actor);
|
||||||
if (!actor || !game.user.isGM) return true;
|
if (!actor || !game.user.isGM) return true;
|
||||||
if (message.system.source.item && message.system.source.action) {
|
if (message.system.source.item && message.system.source.action) {
|
||||||
const action = this.getAction(actor, message.system.source.item, message.system.source.action);
|
const action = this.getAction(actor, message.system.source.item, message.system.source.action);
|
||||||
|
|
@ -137,22 +139,20 @@ export default class DhpChatLog extends foundry.applications.sidebar.tabs.ChatLo
|
||||||
|
|
||||||
if (targets.length === 0)
|
if (targets.length === 0)
|
||||||
ui.notifications.info(game.i18n.localize('DAGGERHEART.Notification.Info.NoTargetsSelected'));
|
ui.notifications.info(game.i18n.localize('DAGGERHEART.Notification.Info.NoTargetsSelected'));
|
||||||
|
|
||||||
for (var target of targets) {
|
for (var target of targets) {
|
||||||
await target.actor.takeDamage(message.system.damage.total, message.system.damage.type);
|
await target.actor.takeDamage(message.system.roll.result, message.system.roll.type);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
onHealing = async event => {
|
onHealing = async (event, message) => {
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
const healing = Number.parseInt(event.currentTarget.dataset.value);
|
|
||||||
const targets = Array.from(game.user.targets);
|
const targets = Array.from(game.user.targets);
|
||||||
|
|
||||||
if (targets.length === 0)
|
if (targets.length === 0)
|
||||||
ui.notifications.info(game.i18n.localize('DAGGERHEART.Notification.Info.NoTargetsSelected'));
|
ui.notifications.info(game.i18n.localize('DAGGERHEART.Notification.Info.NoTargetsSelected'));
|
||||||
|
|
||||||
for (var target of targets) {
|
for (var target of targets) {
|
||||||
await target.actor.modifyResource([{ value: healing, type: event.currentTarget.dataset.type }]);
|
await target.actor.takeHealing([{ value: message.system.roll.result, type: message.system.roll.type }]);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="dice-total">{{roll.result}}</div>
|
<div class="dice-total">{{roll.result}}</div>
|
||||||
<div class="flexrow">
|
<div class="flexrow">
|
||||||
<button class="healing-button" data-value="{{roll.result}}" data-type="{{roll.type}}"><span>{{localize "DAGGERHEART.Chat.HealingRoll.Heal"}}</span></button>
|
<button class="healing-button"><span>{{localize "DAGGERHEART.Chat.HealingRoll.Heal"}}</span></button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
Loading…
Add table
Add a link
Reference in a new issue