feat!: migrate to v12

BREAKING CHANGE: Support for v11 has been dropped
This commit is contained in:
Johannes Loher 2025-02-22 15:47:10 +01:00
parent 1dd2705bf1
commit 6ac9f49463
Signed by: saluu
GPG key ID: 7CB0A9FB553DA045
13 changed files with 52 additions and 89 deletions

View file

@ -33,8 +33,6 @@ const foundryGlobals = {
renderTemplate: false,
TokenDocument: false,
Roll: false,
PoolTerm: false,
DiceTerm: false,
TextEditor: false,
CONST: false,
getProperty: false,

View file

@ -15,7 +15,7 @@ import { evaluateCheck, getRequiredNumberOfDice } from "./check-evaluation";
* - Roll a check with a racial ability that makes `2` a coup and `19` a fumble: `/r dsv19c2:19`
* - Roll a check with a racial ability that makes `5` a coup and default fumble: `/r dsv19c5`
*/
export class DS4Check extends DiceTerm {
export class DS4Check extends foundry.dice.terms.DiceTerm {
constructor({ modifiers = [], results = [], options } = {}) {
super({
faces: 20,
@ -86,8 +86,15 @@ export class DS4Check extends DiceTerm {
}
/** @override */
_evaluateSync({ minimize = false, maximize = false } = {}) {
super._evaluateSync({ minimize, maximize });
_evaluateSync(options = {}) {
super._evaluateSync(options);
this.evaluateResults();
return this;
}
/** @override */
async _evaluateAsync(options = {}) {
await super._evaluateAsync(options);
this.evaluateResults();
return this;
}

View file

@ -7,14 +7,14 @@ import { getGame } from "../utils/utils";
import { DS4Check } from "./check";
export function registerSlayingDiceModifier() {
PoolTerm.MODIFIERS.x = slay;
foundry.dice.terms.PoolTerm.MODIFIERS.x = slay;
}
/**
* @this {PoolTerm}
* @param {string} modifier
*/
function slay(modifier) {
async function slay(modifier) {
const rgx = /[xX]/;
const match = modifier.match(rgx);
if (!match || !this.rolls) return;
@ -25,7 +25,7 @@ function slay(modifier) {
checked++;
if (diceTerm instanceof DS4Check && diceTerm.coup) {
const formula = `dsv${diceTerm.checkTargetNumber}c${diceTerm.maximumCoupResult}:${diceTerm.minimumFumbleResult}n`;
const additionalRoll = Roll.create(formula).evaluate({ async: false });
const additionalRoll = await Roll.create(formula).evaluate();
this.rolls.push(additionalRoll);
this.results.push({ result: additionalRoll.total ?? 0, active: true });

View file

@ -40,8 +40,8 @@
}
},
"compatibility": {
"minimum": "11.305",
"verified": "11"
"minimum": "12.331",
"verified": "12"
},
"esmodules": ["ds4.js"],
"styles": ["css/ds4.css"],
@ -118,9 +118,10 @@
"manifest": "https://git.f3l.de/api/packages/dungeonslayers/generic/ds4/latest/system.json",
"download": "https://git.f3l.de/dungeonslayers/ds4/releases/download/1.21.1/ds4.zip",
"initiative": "@combatValues.initiative.total",
"gridDistance": 1,
"gridUnits": "m",
"grid": {
"distance": 1,
"units": "m"
},
"primaryTokenAttribute": "combatValues.hitPoints",
"manifestPlusVersion": "1.2.0",
"url": "https://git.f3l.de/dungeonslayers/ds4"
}

View file

@ -25,11 +25,7 @@ SPDX-License-Identifier: MIT
<label for="check-modifier-{{id}}">{{localize "DS4.DialogRollOptionsCheckModifierLabel"}}</label>
<div class="form-fields">
<select id="check-modifier-{{id}}" name="check-modifier" data-dtype="String">
{{#select "custom"}}
{{#each checkModifiers as |checkModifier|}}
<option value="{{checkModifier.value}}">{{checkModifier.label}}</option>
{{/each}}
{{/select}}
{{selectOptions checkModifiers selected="custom"}}
</select>
</div>
</div>
@ -52,11 +48,7 @@ SPDX-License-Identifier: MIT
<label for="roll-mode-{{id}}">{{localize "DS4.DialogRollOptionsRollModeLabel"}}</label>
<div class="form-fields">
<select id="roll-mode-{{id}}" name="roll-mode" data-dtype="String">
{{#select rollMode}}
{{#each rollModes as |rollModeValue rollModeKey|}}
<option value="{{rollModeKey}}">{{localize rollModeValue}}</option>
{{/each}}
{{/select}}
{{selectOptions rollModes selected=rollMode localize=true}}
</select>
</div>
</div>

View file

@ -8,14 +8,14 @@ SPDX-License-Identifier: MIT
<!-- Effect Header -->
<header class="sheet-header">
<img class="effect-icon" src="{{ data.icon }}" data-edit="icon">
<img class="effect-img" src="{{ data.img }}" data-edit="img">
<h1 class="effect-title">
<input name="name" type="text" value="{{data.name}}" placeholder="{{ localize 'Name' }}" />
</h1>
</header>
<!-- Effect Configuration Tabs -->
<nav class="sheet-tabs tabs">
<nav class="sheet-tabs tabs" aria-role="{{localize 'SHEETS.FormNavLabel'}}">
<a class="item" data-tab="details"><i class="fas fa-book"></i> {{localize "EFFECT.TabDetails"}}</a>
<a class="item" data-tab="duration"><i class="fas fa-clock"></i> {{localize "EFFECT.TabDuration"}}</a>
<a class="item" data-tab="effects"><i class="fas fa-cogs"></i> {{localize "EFFECT.TabEffects"}}</a>
@ -24,9 +24,9 @@ SPDX-License-Identifier: MIT
<!-- Details Tab -->
<section class="tab" data-tab="details">
<div class="form-group">
<label>{{ localize "EFFECT.IconTint" }}</label>
<label>{{ localize "EFFECT.Tint" }}</label>
<div class="form-fields">
{{colorPicker name="tint" value=data.tint}}
<color-picker name="tint" value="{{data.tint}}" placeholder="#ffffff"></color-picker>
</div>
</div>
@ -38,9 +38,7 @@ SPDX-License-Identifier: MIT
<div class="form-group">
<label>{{ localize "EFFECT.Disabled" }}</label>
<div class="form-fields">
<input type="checkbox" name="disabled" {{ checked data.disabled }} />
</div>
<input type="checkbox" name="disabled" {{ checked data.disabled }}/>
</div>
{{#if isActorEffect}}
@ -62,6 +60,17 @@ SPDX-License-Identifier: MIT
</div>
{{/if}}
<div class="form-group">
<label>Status Conditions</label>
<div class="form-fields">
<multi-select name="statuses">
{{#each statuses as |status|}}
<option value="{{status.id}}" {{status.selected}}>{{status.label}}</option>
{{/each}}
</multi-select>
</div>
</div>
<div class="form-group">
<label>{{ localize "DS4.ActiveEffectApplyToItems" }}</label>
<div class="form-fields">

View file

@ -12,11 +12,7 @@ SPDX-License-Identifier: MIT
for="system.baseInfo.creatureType-{{data._id}}">{{config.i18n.creatureBaseInfo.creatureType}}</label>
<select class="ds4-actor-properties__property-select" id="system.baseInfo.creatureType-{{data._id}}"
name="system.baseInfo.creatureType" data-dtype="String">
{{#select data.system.baseInfo.creatureType}}
{{#each config.i18n.creatureTypes as |value key|}}
<option value="{{key}}">{{value}}</option>
{{/each}}
{{/select}}
{{selectOptions config.i18n.creatureTypes selected=data.system.baseInfo.creatureType}}
</select>
</div>
<div class="ds4-actor-properties__property">
@ -36,11 +32,7 @@ SPDX-License-Identifier: MIT
for="system.baseInfo.sizeCategory-{{data._id}}">{{config.i18n.creatureBaseInfo.sizeCategory}}</label>
<select class="ds4-actor-properties__property-select" id="system.baseInfo.sizeCategory-{{data._id}}"
name="system.baseInfo.sizeCategory" data-dtype="String">
{{#select data.system.baseInfo.sizeCategory}}
{{#each config.i18n.creatureSizeCategories as |value key|}}
<option value="{{key}}">{{value}}</option>
{{/each}}
{{/select}}
{{selectOptions config.i18n.creatureSizeCategories selected=data.system.baseInfo.sizeCategory}}
</select>
</div>
<div class="ds4-actor-properties__property">

View file

@ -18,8 +18,8 @@ SPDX-License-Identifier: MIT
{{!-- active --}}
{{#if effectData.active}}<i class="fas fa-check"></i>{{else}}<i class="fas fa-ban"></i>{{/if}}
{{!-- icon --}}
{{> systems/ds4/templates/sheets/shared/components/rollable-image.hbs rollable=false src=effectData.icon
{{!-- img --}}
{{> systems/ds4/templates/sheets/shared/components/rollable-image.hbs rollable=false src=effectData.img
alt=(localize "DS4.DocumentImageAltText" name=effectData.label) title=effectData.label}}
{{!-- name --}}

View file

@ -9,8 +9,8 @@ SPDX-License-Identifier: MIT
!-- @param effectData: The data of the item.
--}}
<li class="ds4-embedded-document-list__row effect" data-effect-id="{{effectData._id}}">
{{!-- icon --}}
{{> systems/ds4/templates/sheets/shared/components/rollable-image.hbs rollable=false src=effectData.icon
{{!-- img --}}
{{> systems/ds4/templates/sheets/shared/components/rollable-image.hbs rollable=false src=effectData.img
alt=(localize "DS4.DocumentImageAltText" name=effectData.name) title=effectData.name}}
{{!-- name --}}

View file

@ -10,11 +10,7 @@ SPDX-License-Identifier: MIT
<label for="system.armorType-{{data._id}}">{{localize "DS4.ArmorType"}}</label>
<div class="form-fields">
<select id="system.armorType-{{data._id}}" name="system.armorType" data-dtype="String">
{{#select data.system.armorType}}
{{#each config.i18n.armorTypes as |value key|}}
<option value="{{key}}">{{value}}</option>
{{/each}}
{{/select}}
{{selectOptions config.i18n.armorTypes selected=data.system.armorType}}
</select>
</div>
</div>
@ -22,11 +18,7 @@ SPDX-License-Identifier: MIT
<label for="system.armorMaterialType-{{data._id}}">{{localize "DS4.ArmorMaterialType"}}</label>
<div class="form-fields">
<select id="system.armorMaterialType-{{data._id}}" name="system.armorMaterialType" data-dtype="String">
{{#select data.system.armorMaterialType}}
{{#each config.i18n.armorMaterialTypes as |value key|}}
<option value="{{key}}">{{value}}</option>
{{/each}}
{{/select}}
{{selectOptions config.i18n.armorMaterialTypes selected=data.system.armorMaterialType}}
</select>
</div>
</div>

View file

@ -15,11 +15,7 @@ SPDX-License-Identifier: MIT
<label for="system.availability-{{data._id}}">{{localize "DS4.ItemAvailability"}}</label>
<div class="form-fields">
<select id="system.availability-{{data._id}}" name="system.availability" data-dtype="String">
{{#select data.system.availability}}
{{#each config.i18n.itemAvailabilities as |value key|}}
<option value="{{key}}">{{value}}</option>
{{/each}}
{{/select}}
{{selectOptions config.i18n.itemAvailabilities selected=data.system.availability}}
</select>
</div>
</div>

View file

@ -29,11 +29,7 @@ SPDX-License-Identifier: MIT
"DS4.SpellType"}}</label>
<div class="form-fields">
<select id="system.spellType-{{data._id}}" name="system.spellType" data-dtype="String">
{{#select data.system.spellType}}
{{#each config.i18n.spellTypes as |value key|}}
<option value="{{key}}">{{value}}</option>
{{/each}}
{{/select}}
{{selectOptions config.i18n.spellTypes selected=data.system.spellType}}
</select>
</div>
</div>
@ -43,11 +39,7 @@ SPDX-License-Identifier: MIT
<input data-dtype="String" type="text" name="system.maxDistance.value"
value="{{data.system.maxDistance.value}}" />
<select name="system.maxDistance.unit" data-dtype="String">
{{#select data.system.maxDistance.unit}}
{{#each config.i18n.distanceUnits as |value key|}}
<option value="{{key}}">{{value}}</option>
{{/each}}
{{/select}}
{{selectOptions config.i18n.distanceUnits selected=data.system.maxDistance.unit}}
</select>
</div>
</div>
@ -57,11 +49,7 @@ SPDX-License-Identifier: MIT
<input data-dtype="String" type="text" name="system.effectRadius.value"
value="{{data.system.effectRadius.value}}" />
<select name="system.effectRadius.unit" data-dtype="String">
{{#select data.system.effectRadius.unit}}
{{#each config.i18n.distanceUnits as |value key|}}
<option value="{{key}}">{{value}}</option>
{{/each}}
{{/select}}
{{selectOptions config.i18n.distanceUnits selected=data.system.effectRadius.unit}}
</select>
</div>
</div>
@ -70,11 +58,7 @@ SPDX-License-Identifier: MIT
<div class="form-fields">
<input data-dtype="String" type="text" name="system.duration.value" value="{{data.system.duration.value}}" />
<select name="system.duration.unit" data-dtype="String">
{{#select data.system.duration.unit}}
{{#each config.i18n.temporalUnits as |value key|}}
<option value="{{key}}">{{value}}</option>
{{/each}}
{{/select}}
{{selectOptions config.i18n.temporalUnits selected=data.system.duration.unit}}
</select>
</div>
</div>
@ -83,11 +67,7 @@ SPDX-License-Identifier: MIT
title="{{localize 'DS4.CooldownDurationDescription'}}">{{localize "DS4.CooldownDuration"}}</label>
<div class="form-fields">
<select id="system.cooldownDuration-{{data._id}}" name="system.cooldownDuration" data-dtype="String">
{{#select data.system.cooldownDuration}}
{{#each config.i18n.cooldownDurations as |value key|}}
<option value="{{key}}">{{value}}</option>
{{/each}}
{{/select}}
{{selectOptions config.i18n.cooldownDurations selected=data.system.cooldownDuration}}
</select>
</div>
</div>

View file

@ -10,11 +10,7 @@ SPDX-License-Identifier: MIT
<label for="system.attackType-{{data._id}}">{{localize "DS4.AttackType"}}</label>
<div class="form-fields">
<select id="system.attackType-{{data._id}}" name="system.attackType" data-dtype="String">
{{#select data.system.attackType}}
{{#each config.i18n.attackTypes as |value key|}}
<option value="{{key}}">{{value}}</option>
{{/each}}
{{/select}}
{{selectOptions config.i18n.attackTypes selected=data.system.attackType}}
</select>
</div>
</div>