Compare commits

...

19 Commits
0.9.2 ... main

Author SHA1 Message Date
root d5386fad8c auto commit 2026-03-14 14:59:54 +01:00
macniel 85403fbc0a Merge remote-tracking branch 'origin/main' 2026-03-14 14:46:03 +01:00
macniel f4b4233dcb fixes close on submit 2026-03-14 14:45:50 +01:00
macniel b59be2e977 fixes inability to roll attack or parry. 2026-03-14 14:43:07 +01:00
root e4779b14a2 auto commit 2026-03-14 11:08:31 +01:00
macniel e79dad89a0 fixes calculation for weapon ini from non-existing ranged weapon statistic. 2026-03-14 11:06:14 +01:00
macniel 1dd43451c2 #69 fixes equipment dialog to adhere the new model and laid out controls in a pleasing manner. 2026-03-14 11:00:32 +01:00
macniel 9dc95f7ff7 Improves Import to report what was not imported. 2026-03-14 00:14:17 +01:00
macniel 8812557607 #71 replaces richtext with simple texteditor and also fixes databinding collision between alter and groesse. 2026-03-13 23:42:09 +01:00
macniel 6470018c90 #68 clicking on a Spellname will open the Spell Dialog with a reduced but fixed display of inputs. Hides Complex inputs for now. This applies to Skillnames with Skill Dialogs as well. 2026-03-13 20:19:36 +01:00
macniel 013967e066 #74 forces a reposition check on rendering the charactersheet. 2026-03-12 19:46:55 +01:00
macniel 4b915d2e47 #70 the numeric value of AsP and KaP are now displayed correctly on main charactersheet. 2026-03-12 19:39:02 +01:00
macniel 029f6dd325 #72 allows names of talents to trail off when they no longer fit in the limited space. 2026-03-12 19:37:14 +01:00
macniel efb9a415e4 #80 adds a temporary solution to quickly roll Initiative on a given Weapon 2026-03-12 19:26:28 +01:00
macniel b459c96961 Merge remote-tracking branch 'origin/main' 2026-03-12 19:06:27 +01:00
macniel c874943bbe #81 adds type="button" to every button so that they aren't activated on pressing RETURN/ENTER. 2026-03-12 19:05:55 +01:00
macniel e4ae6a14b5 #79 prevents rkp to collapse when charactersheet is sized smaller in width 2026-03-12 18:48:35 +01:00
macniel 3956cab508 prevents rkp to collapse when charactersheet is sized smaller in width 2026-03-12 18:47:59 +01:00
root 21df7378dc auto commit 2026-02-23 21:11:07 +01:00
53 changed files with 678 additions and 249 deletions

View File

@ -35,6 +35,7 @@ export class CombatActionDialog extends HandlebarsApplicationMixin(ApplicationV2
selectTarget: CombatActionDialog.#onSelectTarget,
selectWeaponAndSkill: CombatActionDialog.#onSelectWeaponAndSkill,
selectManeuver: CombatActionDialog.#onSelectManeuver,
attack: CombatActionDialog.#onAttack
}
}
@ -165,6 +166,12 @@ export class CombatActionDialog extends HandlebarsApplicationMixin(ApplicationV2
event.preventDefault()
CombatActionDialog._instance.#processOnSubmitForm(event, form, formData)
this.close()
}
static async #onAttack(event, target) {
CombatActionDialog._instance.#processOnSubmitForm(event, this.element, new FormData(this.element))
this.close()
}
_configureRenderOptions(options) {

View File

@ -34,6 +34,7 @@ export class DefenseActionDialog extends HandlebarsApplicationMixin(ApplicationV
actions: {
selectWeaponAndSkill: DefenseActionDialog.#onSelectWeaponAndSkill,
selectManeuver: DefenseActionDialog.#onSelectManeuver,
defend: DefenseActionDialog.#onDefend,
}
}
@ -102,6 +103,11 @@ export class DefenseActionDialog extends HandlebarsApplicationMixin(ApplicationV
targetNumber: this._targetNumber,
modDescription: maneuver?.modDescription?.replace("{}", "" + this._mod) ?? ""
})
this.close()
}
static async #onDefend(event, target) {
this.element.submit()
}
_configureRenderOptions(options) {

View File

@ -0,0 +1,61 @@
const {
ApplicationV2,
HandlebarsApplicationMixin
} = foundry.applications.api
export class XmlImportReportDialog extends HandlebarsApplicationMixin(ApplicationV2) {
static DEFAULT_OPTIONS = {
classes: ['dsa41', 'dialog', 'xmlimport'],
tag: "form",
position: {
width: 320,
height: 478
},
window: {
resizable: false,
},
form: {
submitOnChange: false,
closeOnSubmit: true,
},
}
static PARTS = {
form: {
template: 'systems/DSA_4-1/templates/dialog/xml-import-report.hbs',
}
}
/**
* @type {Actor}
* @private
*/
_actor = null
_report = null
constructor(actor, report) {
super();
this._actor = actor
this._report = report
}
_configureRenderOptions(options) {
super._configureRenderOptions(options)
options.window.title = `${this._actor.name} import abgeschlossen`
return options
}
async _prepareContext(options) {
const context = await super._prepareContext(options)
context.report = this._report
return context
}
_onRender(context, options) {
}
}

View File

@ -56,6 +56,7 @@ class CharacterSheet extends HandlebarsApplicationMixin(ActorSheetV2) {
openCombatAction: CharacterSheet.#openCombatAction,
openLiturgyDialog: CharacterSheet.openLiturgyDialog,
openSpellDialog: CharacterSheet.openSpellDialog,
openSkillDialog: CharacterSheet.openSkillDialog,
castSpell: CharacterSheet.castSpell,
progressCooldown: CharacterSheet.#progressCooldown,
cancelCooldown: CharacterSheet.#cancelCooldown,
@ -73,7 +74,8 @@ class CharacterSheet extends HandlebarsApplicationMixin(ActorSheetV2) {
openStandaloneLiturgies: CharacterSheet.#openStandaloneLiturgies,
openStandaloneHealth: CharacterSheet.#openStandaloneHealth,
setWounds: CharacterSheet.#setWounds,
switchSet: CharacterSheet.#switchSet
switchSet: CharacterSheet.#switchSet,
openInitiative: CharacterSheet.#openInitiative,
}
}
@ -157,6 +159,18 @@ class CharacterSheet extends HandlebarsApplicationMixin(ActorSheetV2) {
new AttributeDialog(this.document, target.dataset.itemId).render(true)
}
// TODO: add combat statistics and dialog
static async #openInitiative(event, target) {
const {formula} = target.dataset
const evaluated = await new Roll(formula.replace("w", "d")).evaluate()
const context = {
formula,
initiativeRolled: evaluated.terms[0].results[0].result,
total: evaluated.total
}
await displayRoll(evaluated, game.user, this.document, false, false, 'systems/DSA_4-1/templates/chat/initiative-message.hbs', context)
}
static async #progressCooldown(event, target) {
const {cooldownId} = target.dataset
const cooldowns = this.document.system.cooldowns
@ -248,12 +262,18 @@ class CharacterSheet extends HandlebarsApplicationMixin(ActorSheetV2) {
this.document.itemTypes["Spell"]?.find(p => p.id === itemId)?.sheet.render(true)
}
static openSkillDialog(event, target) {
const {itemId} = target.dataset
this.document.itemTypes["Skill"]?.find(p => p.id === itemId)?.sheet.render(true)
}
static castSpell(event, target) {
const {itemId} = target.dataset
new SpellDialog(this.document, itemId).render(true)
}
static #startResting(event, target) {
const dialog = new RestingDialog(this.document)
dialog.render(true)
@ -355,6 +375,8 @@ class CharacterSheet extends HandlebarsApplicationMixin(ActorSheetV2) {
event.preventDefault()
await this.document.update(formData.object)
return false
}
static async #rollDamage(event, target) {
@ -495,7 +517,7 @@ class CharacterSheet extends HandlebarsApplicationMixin(ActorSheetV2) {
isRanged: true,
at: `${this.document.system.fk.aktuell + skill.system.at}`,
tp: `${fernkampf.system.rangedAttackDamage}`,
ini: `${context.inidice}w6 + ${context.inivalue + fernkampf.system.iniModifier ?? 0}`,
ini: `${context.inidice}w6 + ${context.inivalue ?? 0}`,
})
}
})
@ -717,6 +739,8 @@ class CharacterSheet extends HandlebarsApplicationMixin(ActorSheetV2) {
Liturgies._onRender(context, options, this.element)
Skills._onRender(context, options, this.element)
Spells._onRender(context, options, this.element)
this._onPosition(this.position)
}
async _canDragDrop() {
@ -746,7 +770,7 @@ class CharacterSheet extends HandlebarsApplicationMixin(ActorSheetV2) {
if (documentClass) {
const document = await documentClass.fromDropData(data)
if (document.type === "Equipment" || document.type === "Advantage" || document.type === "Spell" || document.type === "Liturgy" || document.type === "ActiveEffect" || document.type === "SpecialAbility") {
if (document.type === "Equipment" || document.type === "Advantage" || document.type === "Spell" || document.type === "Liturgy" || document.type === "ActiveEffect" || document.type === "SpecialAbility" || document.type === "Skill") {
// No duplication by moving items from one actor to another
if ((targetDocument?.name ?? false) === document.name && targetDocument._id !== document._id && await foundry.applications.api.DialogV2.confirm({

View File

@ -16,8 +16,11 @@ class EquipmentSheet extends HandlebarsApplicationMixin(DocumentSheetV2) {
resizable: true,
},
actions: {
editImage: DocumentSheetV2.DEFAULT_OPTIONS.actions.editImage
editImage: DocumentSheetV2.DEFAULT_OPTIONS.actions.editImage,
addToMelee: EquipmentSheet.#addToMelee,
removeFromMelee: EquipmentSheet.#removeFromMelee,
addToRanged: EquipmentSheet.#addToRanged,
removeFromRanged: EquipmentSheet.#removeFromRanged
}
}
@ -72,6 +75,38 @@ class EquipmentSheet extends HandlebarsApplicationMixin(DocumentSheetV2) {
return options
}
static async #addToMelee(event, target) {
const optionId = this.element.querySelector(`[data-target-field="${target.dataset.targetField}"]`).value
const meleeSkills = this.document.system.meleeSkills
if (optionId.trim() !== '' && !meleeSkills.includes(optionId)) {
meleeSkills.push(optionId)
await this.document.update({'system.meleeSkills': meleeSkills})
}
}
static async #removeFromMelee(event, target) {
const {optionId} = target.dataset
let meleeSkills = this.document.system.meleeSkills
meleeSkills = meleeSkills.toSpliced(meleeSkills.indexOf(optionId), 1)
await this.document.update({'system.meleeSkills': meleeSkills})
}
static async #addToRanged(event, target) {
const optionId = this.element.querySelector(`[data-target-field="${target.dataset.targetField}"]`).value
const rangedSkills = this.document.system.rangedSkills
if (optionId.trim() !== '' && !rangedSkills.includes(optionId)) {
rangedSkills.push(optionId)
await this.document.update({'system.rangedSkills': rangedSkills})
}
}
static async #removeFromRanged(event, target) {
const {optionId} = target.dataset
let rangedSkills = this.document.system.rangedSkills
rangedSkills = rangedSkills.toSpliced(rangedSkills.indexOf(optionId), 1)
await this.document.update({'system.rangedSkills': rangedSkills})
}
/**
* Handle form submission
* @this {EquipmentSheet}
@ -177,7 +212,9 @@ class EquipmentSheet extends HandlebarsApplicationMixin(DocumentSheetV2) {
"Raufen": "Raufen"
},
entries: equipmentData.meleeSkills,
targetField: "meleeSkills"
targetField: "meleeSkills",
removeOption: "removeFromMelee",
addOption: "addToMelee",
}
}
@ -193,7 +230,9 @@ class EquipmentSheet extends HandlebarsApplicationMixin(DocumentSheetV2) {
"Bogen": "Bogen",
},
entries: equipmentData.rangedSkills,
targetField: "rangedSkills"
targetField: "rangedSkills",
removeOption: "removeFromRanged",
addOption: "addToRanged",
}
}

View File

@ -72,6 +72,7 @@ export class SpellSheet extends HandlebarsApplicationMixin(DocumentSheetV2) {
context.system = spellData.system;
context.flags = spellData.flags;
context.name = spellData.name;
return context;
}

View File

@ -5,8 +5,17 @@ import {Culture} from "../documents/culture.mjs";
import {Species} from "../documents/species.mjs";
import {SpecialAbility} from "../documents/specialAbility.mjs";
import {Equipment} from "../documents/equipment.mjs";
import {XmlImportReportDialog} from "../dialog/xmlImportReportDialog.mjs";
export class XmlImport {
#unknownSkills = []
#unknownSpells = []
#unknownLiturgies = []
#unknownItem = []
#unknownSpecialAbilities = []
#unknownAdvantage = []
#months = [
"Praios",
"Rondra",
@ -88,6 +97,19 @@ export class XmlImport {
let characterJson = this.#mapRawJson(actor, rawJson, options)
actor.update(characterJson)
const sumOfAllUnknowns = this.#unknownSkills.length + this.#unknownSpells.length + this.#unknownLiturgies.length + this.#unknownItem.length + this.#unknownSpecialAbilities.length + this.#unknownAdvantage.length
if (sumOfAllUnknowns > 0) {
const report = []
this.#unknownSkills.forEach( i => report.push({name: i, type: "Talent"}))
this.#unknownSpells.forEach( i => report.push({name: i, type: "Zauber"}))
this.#unknownLiturgies.forEach( i => report.push({name: i, type: "Liturgie"}))
this.#unknownItem.forEach( i => report.push({name: i, type: "Gegenstand"}))
this.#unknownSpecialAbilities.forEach( i => report.push({name: i, type: "Sonderfertigkeit"}))
new XmlImportReportDialog(actor, report).render(true)
}
}
@ -363,6 +385,8 @@ export class XmlImport {
} catch (error) {
console.error(`${talentName} not found in items`, error)
}
} else {
this.#unknownSkills.push(talentName.trim())
}
}
@ -383,6 +407,8 @@ export class XmlImport {
} catch (error) {
console.error(`${advantageName} not found in items`, error)
}
} else {
this.#unknownAdvantage.push(advantageName.trim())
}
}
@ -401,6 +427,8 @@ export class XmlImport {
} catch (error) {
console.error(`${spell} not found in items`, error)
}
} else {
this.#unknownSpells.push(SCREAMING_NAME.trim())
}
}
@ -418,6 +446,8 @@ export class XmlImport {
} catch (error) {
console.error(`${liturgy} not found in items`, error)
}
} else {
this.#unknownLiturgies.push(liturgyName.trim())
}
}
@ -544,6 +574,7 @@ export class XmlImport {
}
})
])
this.#unknownItem.push(e.modallgemein?.name?.value ?? e.name)
}
})
}
@ -605,6 +636,8 @@ export class XmlImport {
}
})
])
this.#unknownSpecialAbilities.push(specialAbility.name)
}
})

View File

@ -0,0 +1,36 @@
.array-editor {
.array-entry {
display: flex;
gap: 4px;
.label {
flex: 1 0;
align-self: center;
}
button.remove {
flex: 0 1;
}
&:nth-child(odd) {
background-color: rgba(0, 0, 0, 0.1);
}
}
.options {
display: flex;
gap: 4px;
select {
flex: 1 0;
}
button {
height: 32px;
width: 32px;
}
}
}

View File

@ -97,10 +97,17 @@ $rollable_colours_font: (
top: 0;
height: 32px;
padding-left: 24px;
display: grid;
grid-template-columns: 1fr 1fr;
span.name {
text-overflow: ellipsis;
overflow: hidden;
text-wrap: nowrap;
line-height: 32px;
vertical-align: middle;
word-break: break-all;
margin-right: 8px;
}
}

View File

@ -38,6 +38,9 @@
}
.rkp {
overflow: hidden;
padding-bottom: 6px;
text-wrap: nowrap;
.pill {
@include buttons.pill-button;

View File

@ -5,91 +5,223 @@
.tab.meta.active > div {
display: grid;
grid-auto-columns: 1fr 1fr;
grid-template-columns: 80px auto;
display: grid;
grid-auto-columns: 1fr 1fr;
grid-template-columns: 80px auto;
grid-template-rows: 48px auto 48px;
gap: 8px;
grid-template-areas:
grid-template-areas:
"quantity name"
"description description"
"bottomline bottomline";
.name {
grid-area: name;
.name {
grid-area: name;
}
.name {
position: relative;
.img {
position: absolute;
right: 0;
bottom: 6px;
width: 24px;
height: 24px;
}
.name {
position: relative;
label {
position: absolute;
left: 0;
top: 0;
right: 26px;
bottom: 0;
}
}
.img {
position: absolute;
right: 0;
bottom: 6px;
width: 24px;
height: 24px;
}
.bottomline {
grid-area: bottomline;
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 8px;
.named-value {
position: relative;
height: 48px;
label {
position: absolute;
left: 0;
top: 0;
right: 26px;
bottom: 0;
}
}
width: 80px;
line-height: 24px;
vertical-align: middle;
.bottomline {
grid-area: bottomline;
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 8px;
.named-value {
position: relative;
height: 48px;
label {
input {
position: absolute;
left: 0;
left: 80px;
top: 0;
bottom: 0;
width: 80px;
line-height: 24px;
vertical-align: middle;
input {
position: absolute;
left: 80px;
top: 0;
bottom: 0;
right: 0;
}
right: 0;
}
}
}
.quantity {
grid-area: quantity;
}
.description {
grid-area: description;
position: relative;
display: flex;
flex-direction: column;
label {
flex: 0;
}
.editor {
flex: 1;
}
}
}
.quantity {
grid-area: quantity;
}
.description {
grid-area: description;
position: relative;
display: flex;
flex-direction: column;
label {
flex: 0;
}
.editor {
flex: 1;
}
}
}
.tab.melee.active > div {
display: grid;
grid-template-columns: 1fr 1fr;
grid-template-rows: 48px auto 48px 48px;
gap: 8px;
grid-template-areas:
"tp tpbonus"
"applicableSkills applicableSkills"
"initiativeMod breakFactor"
"atMod paMod";
.tp {
grid-area: tp;
}
.tp-bonus {
grid-area: tpbonus;
display: grid;
grid-template-rows: 16px 1fr;
gap: 4px;
grid-template-areas: "label label" "tp kk";
label {
grid-area: label;
text-align: center;
}
}
.applicable-skills {
grid-area: applicableSkills;
.array-editor {
display: flex;
flex-direction: column;
height: 100%;
padding-bottom: 24px;
ul {
flex: 1 0;
}
}
}
.initiative-modifier {
grid-area: initiativeMod;
}
.breakfactor {
grid-area: breakFactor;
}
.at-mod {
grid-area: atMod;
}
.pa-mod {
grid-area: paMod;
}
}
.tab.armor.active > div {
display: grid;
grid-template-columns: 1fr 1fr 1fr 1fr;
grid-template-rows: 48px auto 48px 48px;
gap: 8px;
grid-template-areas:
"head head chest chest"
"back back belly belly"
"leftArm leftArm rightArm rightArm"
"leftLeg leftLeg rightLeg rightLeg"
"totalArmor totalHandicap iniMod breakFactor"
"atMod atMod paMod paMod";
.head {
grid-area: head;
}
.chest {
grid-area: chest;
}
.back {
grid-area: back;
}
.belly {
grid-area: belly;
}
.left-arm {
grid-area: leftArm;
}
.right-arm {
grid-area: rightArm;
}
.left-leg {
grid-area: leftLeg;
}
.right-leg {
grid-area: rightLeg;
}
.total {
grid-area: totalArmor;
}
.handicap {
grid-area: totalHandicap;
}
.initiative-modifier {
grid-area: iniMod;
}
.break-factor {
grid-area: breakFactor;
}
.at-mod {
grid-area: atMod;
}
.pa-mod {
grid-area: paMod;
}
}
}

View File

@ -0,0 +1,54 @@
.dsa41.sheet.item.spell {
.meta-details {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
grid-template-rows: 52px 52px 1fr;
.name {
grid-row: 1;
grid-column: 1/span 3;
}
.zfw {
grid-row: 2;
grid-column: 2;
}
.probenmod {
grid-row: 2;
grid-column: 3;
}
.statistics {
grid-row: 2;
grid-column: 1;
display: grid;
grid-template-columns: 1fr 1fr 1fr;
grid-template-rows: auto 1fr;
& > label {
grid-column: 1/4;
text-align: center;
}
}
.effect {
grid-row: 3;
grid-column: 1/span 3;
display: flex;
flex-flow: column;
label {
display: block;
}
textarea {
display: block;
height: 100%;
resize: none;
}
}
}
}

View File

@ -9,6 +9,7 @@
grid-template-rows: 32px 1fr 32px;
gap: 8px 0;
grid-template-areas: "file" "options" "actions";
height: 100%;
.file-input {
grid-area: file;
@ -30,6 +31,7 @@
fieldset {
grid-area: options;
overflow-x: auto;
div {

View File

@ -54,8 +54,9 @@
flex: 0;
}
.editor {
.editor, textarea {
flex: 1;
resize: none;
}
}

View File

@ -28,8 +28,9 @@
flex: 0;
}
.editor {
.editor, textarea {
flex: 1;
resize: none;
}
}

View File

@ -11,6 +11,7 @@
@use "molecules/coins";
@use "molecules/weights";
@use "molecules/fieldset";
@use "molecules/array-editor";
@use "molecules/tabs";
@use "molecules/paperdoll";
@ -22,6 +23,7 @@
@use "organisms/equipment-sheet";
@use "organisms/creature-sheet";
@use "organisms/modify-liturgy";
@use "organisms/spell-sheet";
@use "organisms/skill-sheet";
@use "organisms/active-effect-sheet";
@use "organisms/advantage-sheet";

View File

@ -2,7 +2,7 @@
"id": "DSA_4-1",
"title": "Das Schwarze Auge 4.1",
"description": "Noch ein Spielsystem für Das Schwarze Auge 4.1",
"version": "0.9.1",
"version": "0.10.1",
"compatibility": {
"minimum": 12,
"verified": 13
@ -364,5 +364,5 @@
"primaryTokenAttribute": "lep.aktuell",
"url": "https://git.macniel.online/macniel/foundry-dsa41-game",
"manifest": "https://git.macniel.online/macniel/foundry-dsa41-game/raw/branch/main/src/system.json",
"download": "https://git.macniel.online/macniel/foundry-dsa41-game/releases/download/0.9.1/release.zip"
"download": "https://git.macniel.online/macniel/foundry-dsa41-game/releases/download/0.10.1/release.zip"
}

View File

@ -45,18 +45,18 @@
{{#if this.hasLiturgies}}
<div class="sidebar-element resource-bar">
<label>KaP: {{this.ke}}</label><span class="resource-fill kap" style="width: {{this.keper}}%"></span>
<label>KaP: {{this.kapcurrent}}</label><span class="resource-fill kap" style="width: {{this.keper}}%"></span>
</div>
{{/if}}
{{#if this.hasSpells}}
<div class="sidebar-element resource-bar">
<label>AsP: {{this.asp}}</label><span class="resource-fill asp" style="width: {{this.aspper}}%"></span>
<label>AsP: {{this.aspcurrent}}</label><span class="resource-fill asp" style="width: {{this.aspper}}%"></span>
</div>
{{/if}}
<div class="sidebar-element button">
<button data-action="rest"><i class="fa-solid fa-bed"></i> Rasten</button>
<button type="button" data-action="rest"><i class="fa-solid fa-bed"></i> Rasten</button>
</div>
{{#each attacks}}
@ -91,7 +91,8 @@
{{/if}}
{{#if this.ini}}
<div data-tooltip="{{localize "WEAPON.initiative" weapon=this.name}}"
class="ini sidebar-element rollable" data-action="openInitiative"><label>INI</label>
class="ini sidebar-element rollable" data-action="openInitiative" data-formula="{{this.ini}}">
<label>INI</label>
<div class="formula">{{this.ini}}</div>
</div>
{{/if}}
@ -130,14 +131,14 @@
<div class="sidebuttons">
<div>
<button data-action="openStandaloneADVSF">Vorteile</button>
<button data-action="openStandaloneHealth">Gesundheit</button>
<button data-action="openStandaloneSkills">Talente</button>
<button data-action="openBagpack">Inventar</button>
<button type="button" data-action="openStandaloneADVSF">Vorteile</button>
<button type="button" data-action="openStandaloneHealth">Gesundheit</button>
<button type="button" data-action="openStandaloneSkills">Talente</button>
<button type="button" data-action="openBagpack">Inventar</button>
{{#if this.hasLiturgies}}
<button data-action="openStandaloneLiturgies">Liturgien</button>{{/if}}
<button type="button" data-action="openStandaloneLiturgies">Liturgien</button>{{/if}}
{{#if this.hasSpells}}
<button data-action="openStandaloneSpells">Zauber</button>{{/if}}
<button type="button" data-action="openStandaloneSpells">Zauber</button>{{/if}}
</div>
</div>

View File

@ -10,8 +10,8 @@
<div class="buttons">
<button data-action="newItem"><i class="fa-solid fa-sack" data-tooltip="Neuer Gegenstand"></i></button>
<button data-action="openItemBrowser"><i class="fa-solid fa-store" data-tooltip="Einkaufen"></i></button>
<button type="button" data-action="newItem"><i class="fa-solid fa-sack" data-tooltip="Neuer Gegenstand"></i></button>
<button type="button" data-action="openItemBrowser"><i class="fa-solid fa-store" data-tooltip="Einkaufen"></i></button>
</div>

View File

@ -18,7 +18,7 @@
</td>
<td>{{this.conditions}}</td>
<td>{{#if ../isGM}}
<button data-action="removeEffect" data-actor-id="{{actor}}" data-effect-id="{{id}}"><i
<button type="button" data-action="removeEffect" data-actor-id="{{actor}}" data-effect-id="{{id}}"><i
class="fa-solid fa-trash"></i></button>{{/if}}</td>
</tr>
{{/each}}

View File

@ -18,8 +18,8 @@
<div class="inventory-header">
<h3>Inventar</h3>
<div class="buttons">
<button data-action="newItem"><i class="fa-solid fa-sack" data-tooltip="Neuer Gegenstand"></i></button>
<button data-action="openItemBrowser"><i class="fa-solid fa-store" data-tooltip="Einkaufen"></i></button>
<button type="button" data-action="newItem"><i class="fa-solid fa-sack" data-tooltip="Neuer Gegenstand"></i></button>
<button type="button" data-action="openItemBrowser"><i class="fa-solid fa-store" data-tooltip="Einkaufen"></i></button>
</div>
</div>
<div class="inventory">

View File

@ -11,37 +11,27 @@
</div>
<div><label for="system.meta.groesse">Größe</label>
<input type="number" name="system.meta.groesse" value="{{system.meta.groesse}}"/>
<input type="text" name="system.meta.groesse" value="{{system.meta.groesse}}"/>
</div>
<div><label for="system.meta.gewicht">Gewicht</label>
<input type="number" name="system.meta.gewicht" value="{{system.meta.gewicht}}"/>
<input type="text" name="system.meta.gewicht" value="{{system.meta.gewicht}}"/>
</div>
</div>
<div class="double"><label>Alter</label>
<input type="number" name="system.meta.groesse" value="{{system.meta.alter}}"/>
<input type="text" name="system.meta.alter" value="{{system.meta.alter}}"/>
<input type="text" name="system.meta.geburtsdatum" value="{{system.meta.geburtstag}}"/>
</div>
</div>
<div class="meta-data html">
<div><label>Notizen</label>
<prose-mirror
<textarea
name="system.meta.notizen"
button="false"
editable="{{editable}}"
toggled="true"
value="{{system.meta.notizen}}">
{{{system.meta.notizen}}}
</prose-mirror>
editable="{{editable}}">{{{system.meta.notizen}}}</textarea>
</div>
<div><label>Aussehen</label>
<prose-mirror
<textarea
name="system.meta.aussehen"
button="false"
editable="{{editable}}"
toggled="true"
value="{{system.meta.aussehen}}">
{{{system.meta.aussehen}}}
</prose-mirror>
editable="{{editable}}">{{{system.meta.aussehen}}}</textarea>
</div>
</div>
</section>

View File

@ -15,9 +15,9 @@
{{/each}}
{{#if setEquipped}}
<button disabled="disabled">Ausgerüstet</button>
<button type="button" disabled="disabled">Ausgerüstet</button>
{{else}}
<button data-action="switchSet" data-id="{{@index}}">Wechseln</button>
<button type="button" data-action="switchSet" data-id="{{@index}}">Wechseln</button>
{{/if}}

View File

@ -19,9 +19,9 @@
src="{{this.icon}}"/></div>
{{/each}}
{{#if (eq ../actor.system.setEquipped @index)}}
<button disabled="disabled">Ausgerüstet</button>
<button type="button" disabled="disabled">Ausgerüstet</button>
{{else}}
<button data-operation="switchSet" data-id="{{@index}}">Wechseln</button>
<button type="button" data-operation="switchSet" data-id="{{@index}}">Wechseln</button>
{{/if}}
</div>

View File

@ -19,9 +19,9 @@
src="{{this.icon}}"/></div>
{{/each}}
{{#if (eq ../actor.system.setEquipped @index)}}
<button disabled="disabled">Ausgerüstet</button>
<button type="button" disabled="disabled">Ausgerüstet</button>
{{else}}
<button data-operation="switchSet" data-id="{{@index}}">Wechseln</button>
<button type="button" data-operation="switchSet" data-id="{{@index}}">Wechseln</button>
{{/if}}
</div>

View File

@ -5,10 +5,10 @@
<div class="social-line">
<div><label>Stand</label>
<input type="text" name="system.meta.stand" value="{{system.meta.stand}}"/>
<input id="stand" type="text" name="system.meta.stand" value="{{system.meta.stand}}"/>
</div>
<div><label>Titel</label>
<input type="text" name="system.meta.titel" value="{{system.meta.titel}}"/>
<input id="titel" type="text" name="system.meta.titel" value="{{system.meta.titel}}"/>
</div>
<div><label>Sozialstatus</label>
@ -17,24 +17,14 @@
</div>
<div class="meta-data html">
<div><label>Verbindungen</label>
<prose-mirror
<textarea
name="system.verbindungen"
button="false"
editable="{{editable}}"
toggled="true"
value="{{system.meta.verbindungen}}">
{{{system.meta.verbindungen}}}
</prose-mirror>
editable="{{editable}}">{{{system.meta.verbindungen}}}</textarea>
</div>
<div><label>Familie</label>
<prose-mirror
<textarea
name="system.meta.familie"
button="false"
editable="{{editable}}"
toggled="true"
value="{{system.meta.familie}}">
{{{system.meta.familie}}}
</prose-mirror>
editable="{{editable}}">{{{system.meta.familie}}}</textarea>
</div>
</div>
</section>

View File

@ -45,9 +45,8 @@
value="{{this.tp}}"/>
</td>
<td>
<button class="button-inline remove-attack" data-action="removeAttack" data-index="{{this.index}}">
<i
class="fa-solid fa-trash"></i></button>
<button type="button" class="button-inline remove-attack" data-action="removeAttack" data-index="{{this.index}}">
<i class="fa-solid fa-trash"></i></button>
</td>
</tr>
{{/each}}
@ -73,7 +72,7 @@
<input type="text" id="attack_tp" placeholder="1d6+3"/>
</td>
<td>
<button data-action="addAttack" class="button-inline add-attack"><i class="fa-solid fa-plus"></i>
<button type="button" data-action="addAttack" class="button-inline add-attack"><i class="fa-solid fa-plus"></i>
</button>
</td>

View File

@ -8,7 +8,7 @@
<img src="{{this.img}}" style="width: 32px; height: 32px;"/>
<span class="name">{{this.name}}</span>
<span class="price">{{currency this.system.price}}</span>
<button data-action="buy" data-item-id="{{this._id}}"><i class="fa-solid fa-coins"></i></button>
<button type="button" data-action="buy" data-item-id="{{this._id}}"><i class="fa-solid fa-coins"></i></button>
</div>
{{/each}}
</div>

View File

@ -21,7 +21,7 @@
<input type="number" name="system.services.{{@key}}.availability"
value="{{this.availability}}"/>
</label>
<button class="actions" data-action="removeService" data-row-id="{{@key}}"><i
<button type="button" class="actions" data-action="removeService" data-row-id="{{@key}}"><i
class="fa-solid fa-trash"></i></button>
<div class="description">
<label class="description_label">Beschreibung</label>
@ -42,7 +42,7 @@
<span class="availability {{#if
(lte this.availability 0)}}infinite{{/if}}">{{#unless
(lte this.availability 0)}}{{this.availability}}{{/unless}}</span>
<button class="actions"><i class="fa-solid fa-coins"></i></button>
<button type="button" class="actions"><i class="fa-solid fa-coins"></i></button>
</div>
{{/if}}
{{/each}}

View File

@ -0,0 +1,6 @@
<div>
<div>Formel: {{formula}}</div>
<div>Gewürfelt: {{initiativeRolled}}</div>
<hr/>
<div>Initiative: {{total}}</div>
</div>

View File

@ -51,7 +51,7 @@
</fieldset>
<button class="actions" data-action="use"><i class="fa-solid fa-bolt"></i> Eigenschaftseinsatz {{#if modResult}}
<button type="button" class="actions" data-action="use"><i class="fa-solid fa-bolt"></i> Eigenschaftseinsatz {{#if modResult}}
[{{displayModResult}}]{{/if}}</button>
</section>

View File

@ -13,7 +13,7 @@
<option value="glückspiel-v-glückspiel">Vergleichend: Glücksspiel</option>
<option value="falschspiel-v-sinnenschärfe">Schummeln</option>
</select>
<button data-action="applyPreset"><i class="fa-solid fa-fill"></i></button>
<button type="button" data-action="applyPreset"><i class="fa-solid fa-fill"></i></button>
</label>
</div>
@ -338,7 +338,7 @@
<div class="offenseActorSave"><label><input name="saveOffenseData" type="checkbox">Daten speichern</label>
</div>
{{/if}}
<button data-action="doBattle"><i class="fa-solid fa-user-secret"></i> Würfeln</button>
<button type="button" data-action="doBattle"><i class="fa-solid fa-user-secret"></i> Würfeln</button>
{{#if (or (not defenseTalents) (not defenseAttributes))}}
<div class="defenseActorSave"><label><input name="saveDefenseData" type="checkbox">Daten speichern</label>
</div>

View File

@ -57,7 +57,7 @@
<div class="actions">
<button {{#if ready}}class="ready" {{else}}data-tooltip="{{notReadyReason}}"{{/if}} type="submit"><i
<button type="button" data-action="attack" {{#if ready}}class="ready" {{else}}data-tooltip="{{notReadyReason}}"{{/if}}><i
class="fa-solid fa-swords"></i>Angreifen <span
class="value"></span></button>
</div>

View File

@ -43,7 +43,7 @@
<div class="actions">
<button {{#if ready}}class="ready" {{else}}data-tooltip="{{notReadyReason}}"{{/if}} type="submit"><i
<button type="button" data-action="defend" {{#if ready}}class="ready" {{else}}data-tooltip="{{notReadyReason}}"{{/if}}><i
class="fa-solid fa-shield"></i>Verteidigen <span
class="value"></span></button>
</div>

View File

@ -54,7 +54,7 @@
<td>{{this.displayRank}}</td>
<td>{{this.mod}}</td>
<td>
<button data-action="removeMod" data-index="{{@key}}">
<button type="button" data-action="removeMod" data-index="{{@key}}">
<i class="fa-solid fa-xmark"></i>
</button>
</td>
@ -74,7 +74,7 @@
<option value="castduration">Wirkzeit</option>
<option value="duration">Wirkungsdauer</option>
</select>
<button data-action="addMod"><i class="fa fa-plus"></i></button>
<button type="button" data-action="addMod"><i class="fa fa-plus"></i></button>
<span id="info"></span>
</div>
</div>
@ -97,7 +97,7 @@
</fieldset>
<button class="actions" data-action="castLiturgy"><i class="fa-solid fa-sparkles"></i> Wirken {{#if modResult}}
<button type="button" class="actions" data-action="castLiturgy"><i class="fa-solid fa-sparkles"></i> Wirken {{#if modResult}}
[{{displayModResult}}]{{/if}}</button>
</section>

View File

@ -71,5 +71,5 @@
</div>
</fieldset>
<button class="actions" data-action="regenerate"><i class="fa-solid fa-bed"></i> Regenerieren</button>
<button type="button" class="actions" data-action="regenerate"><i class="fa-solid fa-bed"></i> Regenerieren</button>
</section>

View File

@ -63,7 +63,7 @@
</fieldset>
{{/if}}
<button class="actions" {{#unless noSelectedRepresentation}}data-action="diceRoll"{{else}} disabled="disabled"{{/unless}}><i class="fa-solid fa-dice"></i> Zauber würfeln {{#if
<button type="button" class="actions" {{#unless noSelectedRepresentation}}data-action="diceRoll"{{else}} disabled="disabled"{{/unless}}><i class="fa-solid fa-dice"></i> Zauber würfeln {{#if
displayModResult}}
[{{displayModResult}}]{{/if}}</button>
@ -137,11 +137,11 @@
</fieldset>
<div class="actions">
<button {{#if ready}}data-action="cast" {{else}}
<button type="button" {{#if ready}}data-action="cast" {{else}}
data-tooltip="{{{notReadyReasons}}}" disabled="disabled" {{/if}}><i class="fa-solid fa-sparkles"></i> Zauber
wirken
</button>
<button data-action="cancel">
<button type="button" data-action="cancel">
Zauber abbrechen
</button>
</div>

View File

@ -51,7 +51,7 @@
</fieldset>
<button class="actions" data-action="use"><i class="fa-solid fa-bolt"></i> Talenteinsatz {{#if modResult}}
<button type="button" class="actions" data-action="use"><i class="fa-solid fa-bolt"></i> Talenteinsatz {{#if modResult}}
[{{displayModResult}}]{{/if}}</button>
</section>

View File

@ -0,0 +1,16 @@
<section>
<fieldset>
<legend>Folgendes konnte nicht importiert werden</legend>
<div class="scroll-y">
<ul>
{{#each report}}
<li><em>{{this.type}}</em> {{this.name}}</li>
{{/each}}
</ul>
</div>
</fieldset>
</section>

View File

@ -4,7 +4,7 @@
<img class="img" src="{{img}}" data-action="editImage" data-edit="img" alt="{{name}}" title="{{name}}"/>
<input type="text" name="name" value="{{name}}"/>
<button class="editEffects" data-id="{{this.effectId}}" data-action="openEffect">
<button type="button" class="editEffects" data-id="{{this.effectId}}" data-action="openEffect">
<i class="fas fa-pencil-alt"></i>
</button>
</div>

View File

@ -48,7 +48,7 @@
{{#each liturgies.rank0}}
<div class="liturgy" data-action="openLiturgy" data-rank="0" data-liturgy-id="{{this.id}}">
<span>{{this.name}}</span>
<button data-action="removeLiturgy" data-rank="0" data-liturgy-id="{{this.id}}"
<button type="button" data-action="removeLiturgy" data-rank="0" data-liturgy-id="{{this.id}}"
class="mini"><i class="fa fa-xmark"></i></button>
</div>
{{/each}}
@ -61,7 +61,7 @@
{{#each liturgies.rank1}}
<div class="liturgy" data-action="openLiturgy" data-rank="1" data-liturgy-id="{{this.id}}">
<span>{{this.name}}</span>
<button data-action="removeLiturgy" data-rank="1" data-liturgy-id="{{this.id}}"
<button type="button" data-action="removeLiturgy" data-rank="1" data-liturgy-id="{{this.id}}"
class="mini"><i class="fa fa-xmark"></i></button>
</div>
{{/each}}
@ -74,7 +74,7 @@
{{#each liturgies.rank2}}
<div class="liturgy" data-action="openLiturgy" data-rank="2" data-liturgy-id="{{this.id}}">
<span>{{this.name}}</span>
<button data-action="removeLiturgy" data-rank="2" data-liturgy-id="{{this.id}}"
<button type="button" data-action="removeLiturgy" data-rank="2" data-liturgy-id="{{this.id}}"
class="mini"><i class="fa fa-xmark"></i></button>
</div>
{{/each}}
@ -87,7 +87,7 @@
{{#each liturgies.rank3}}
<div class="liturgy" data-action="openLiturgy" data-rank="3" data-liturgy-id="{{this.id}}">
<span>{{this.name}}</span>
<button data-action="removeLiturgy" data-rank="3" data-liturgy-id="{{this.id}}"
<button type="button" data-action="removeLiturgy" data-rank="3" data-liturgy-id="{{this.id}}"
class="mini"><i class="fa fa-xmark"></i></button>
</div>
{{/each}}
@ -100,7 +100,7 @@
{{#each liturgies.rank4}}
<div class="liturgy" data-action="openLiturgy" data-rank="4" data-liturgy-id="{{this.id}}">
<span>{{this.name}}</span>
<button data-action="removeLiturgy" data-rank="4" data-liturgy-id="{{this.id}}"
<button type="button" data-action="removeLiturgy" data-rank="4" data-liturgy-id="{{this.id}}"
class="mini"><i class="fa fa-xmark"></i></button>
</div>
{{/each}}
@ -113,7 +113,7 @@
{{#each liturgies.rank5}}
<div class="liturgy" data-action="openLiturgy" data-rank="5" data-liturgy-id="{{this.id}}">
<span>{{this.name}}</span>
<button data-action="removeLiturgy" data-rank="5" data-liturgy-id="{{this.id}}"
<button type="button" data-action="removeLiturgy" data-rank="5" data-liturgy-id="{{this.id}}"
class="mini"><i class="fa fa-xmark"></i></button>
</div>
{{/each}}
@ -126,7 +126,7 @@
{{#each liturgies.rank6}}
<div class="liturgy" data-action="openLiturgy" data-rank="6" data-liturgy-id="{{this.id}}">
<span>{{this.name}}</span>
<button data-action="removeLiturgy" data-rank="6" data-liturgy-id="{{this.id}}"
<button type="button" data-action="removeLiturgy" data-rank="6" data-liturgy-id="{{this.id}}"
class="mini"><i class="fa fa-xmark"></i></button>
</div>
{{/each}}
@ -139,7 +139,7 @@
{{#each liturgies.rank7}}
<div class="liturgy" data-action="openLiturgy" data-rank="7" data-liturgy-id="{{this.id}}">
<span>{{this.name}}</span>
<button data-action="removeLiturgy" data-rank="7" data-liturgy-id="{{this.id}}"
<button type="button" data-action="removeLiturgy" data-rank="7" data-liturgy-id="{{this.id}}"
class="mini"><i class="fa fa-xmark"></i></button>
</div>
{{/each}}
@ -152,7 +152,7 @@
{{#each liturgies.rank8}}
<div class="liturgy" data-action="openLiturgy" data-rank="8" data-liturgy-id="{{this.id}}">
<span>{{this.name}}</span>
<button data-action="removeLiturgy" data-rank="8" data-liturgy-id="{{this.id}}"
<button type="button" data-action="removeLiturgy" data-rank="8" data-liturgy-id="{{this.id}}"
class="mini"><i class="fa fa-xmark"></i></button>
</div>
{{/each}}

View File

@ -3,79 +3,81 @@
data-group="{{tabs.armor.group}}">
<div>
<fieldset>
<legend>Rüstungswerte</legend>
<div>
<label>Gesamt Rüstungswert
<input type="text" name="system.armorValue.total" value="{{system.armorValue.total}}"/>
<div class="head">
<label>Kopf
<input type="text" name="system.armorValue.kopf" value="{{system.armorValue.kopf}}"/>
</label>
</div>
<div>
<div class="chest">
<label>Brust
<input type="text" name="system.armorValue.brust" value="{{system.armorValue.brust}}"/>
</label>
</div>
<div class="back">
<label>Rücken
<input type="text" name="system.armorValue.ruecken" value="{{system.armorValue.ruecken}}"/>
</label>
</div>
<div class="belly">
<label>Bauch
<input type="text" name="system.armorValue.bauch" value="{{system.armorValue.bauch}}"/>
</label>
</div>
<div class="left-arm">
<label>Linker Arm
<input type="text" name="system.armorValue.armlinks" value="{{system.armorValue.armlinks}}"/>
</label>
</div>
<div>
<div class="right-arm">
<label>Rechter Arm
<input type="text" name="system.armorValue.armrechts" value="{{system.armorValue.armrechts}}"/>
</label>
</div>
<div>
<div class="left-leg">
<label>Linkes Bein
<input type="text" name="system.armorValue.beinlinks" value="{{system.armorValue.beinlinks}}"/>
</label>
</div>
<div>
<div class="right-leg">
<label>Rechtes Bein
<input type="text" name="system.armorValue.beinrechts" value="{{system.armorValue.beinrechts}}"/>
</label>
</div>
<div>
<label>Bauch
<input type="text" name="system.armorValue.bauch" value="{{system.armorValue.bauch}}"/>
</label>
</div>
<div>
<label>Brust
<input type="text" name="system.armorValue.brust" value="{{system.armorValue.brust}}"/>
</label>
</div>
<div>
<label>Rücken
<input type="text" name="system.armorValue.ruecken" value="{{system.armorValue.ruecken}}"/>
</label>
</div>
<div>
<label>Kopf
<input type="text" name="system.armorValue.kopf" value="{{system.armorValue.kopf}}"/>
</label>
</div>
</fieldset>
<div class="total">
<label>Rüstungswert
<input type="text" name="system.armorValue.total" value="{{system.armorValue.total}}"/>
</label>
</div>
<div>
<label>Gesamt Behinderung
<div class="handicap">
<label>Behinderung
<input type="text" name="system.armorHandicap" value="{{system.armorHandicap}}"/>
</label>
</div>
<div>
<label>Initiative Modifaktor
<div class="initiative-modifier">
<label>Initiative
<input type="text" name="system.iniModifier" value="{{system.iniModifier}}"/>
</label>
</div>
<div>
<div class="break-factor">
<label>Bruchfaktor
<input type="text" name="system.breakFactor" value="{{system.breakFactor}}"/>
</label>
</div>
<div>
<div class="at-mod">
<label>Attacke
<input type="text" name="system.attackModifier" value="{{system.attackModifier}}"/>
</label>
</div>
<div>
<div class="pa-mod">
<label>Parade
<input type="text" name="system.parryModifier" value="{{system.parryModifier}}"/>
</label>

View File

@ -1,40 +1,38 @@
<section class="tab {{tabs.melee.id}} {{tabs.melee.cssClass}}"
data-tab="{{tabs.melee.id}}"
data-group="{{tabs.melee.group}}">
<div>
<div>
<div class="melee">
<div class="tp">
<label>TP
<input type="text" name="system.meleeAttackDamage" value="{{system.meleeAttackDamage}}"/>
</label>
</div>
<div>
<label>TP/KK
<div class="tp-bonus">
<label>TP/KK</label>
<input name="system.meleeAttackModifier" type="number" value="{{system.meleeAttackModifier}}"/>
<input name="system.meleeAttackModifierIncrement" type="number"
value="{{system.meleeAttackModifierIncrement}}"/>
</label>
</div>
<div>
<label>Geführte Talente
<div class="applicable-skills">
<label>Geführte Talente</label>
{{> "systems/DSA_4-1/templates/ui/partial-array-editor.hbs" this.meleeSkillsAndOptions}}
</label>
</div>
<div>
<div class="initiative-modifier">
<label>Initiative
<input name="system.iniModifier" type="number" value="{{system.iniModifier}}"/>
</label>
</div>
<div>
<div class="breakfactor">
<label>Bruchfaktor
<input name="system.breakFactor" type="number" value="{{system.breakFactor}}"/>
</label>
</div>
<div>
<div class="at-mod">
<label>Attacke
<input name="system.attackModifier" type="number" value="{{system.attackModifier}}"/>
</label>
</div>
<div>
<div class="pa-mod">
<label>Parade
<input name="system.parryModifier" type="number" value="{{system.parryModifier}}"/>
</label>

View File

@ -1,29 +1,29 @@
<section class="tab {{tabs.ranged.id}} {{tabs.ranged.cssClass}}"
data-tab="{{tabs.ranged.id}}"
data-group="{{tabs.ranged.group}}">
<div>
<div>
<div class="ranged">
<div class="tp">
<label>TP
<input type="text" name="system.rangedAttackDamage" value="{{system.rangedAttackDamage}}"/>
</label>
</div>
<div>
<div class="ranges">
<label>Reichweiten
<input type="text" name="system.rangedRangeModifier" value="{{system.rangedRangeModifier}}"/>
</label>
</div>
<div>
<div class="tpmod">
<label>TP+
<input type="text" name="system.rangeRangeDamageModifier"
value="{{system.rangeRangeDamageModifier}}"/>
</label>
</div>
<div>
<div class="applicable-skills">
<label>Geführte Talente
{{> "systems/DSA_4-1/templates/ui/partial-array-editor.hbs" this.rangedSkillsAndOptions}}
</label>
</div>
<div>
<div class="reload-time">
<label>Ladedauer (Aktionen)
<input type="text" name="system.rangedReloadTime" value="{{system.rangedReloadTime}}"/>
</label>

View File

@ -15,7 +15,7 @@
<input name="grad" type="number" min="0" max="7" step="1"/>
</label>
<div class="actions">
<button data-action="addCommonality"><i class="fa-solid fa-plus"></i> Hinzugefügen</button>
<button type="button" data-action="addCommonality"><i class="fa-solid fa-plus"></i> Hinzugefügen</button>
</div>
</div>
</fieldset>
@ -27,7 +27,7 @@
<span class="deity">{{this.name}}</span>
<span class="rank">Grad {{grad}}</span>
{{#if ../editable}}
<button class="action" data-action="removeCommonality" data-id="{{@key}}"><i
<button type="button" class="action" data-action="removeCommonality" data-id="{{@key}}"><i
class="fa-solid fa-xmark"></i></button>
{{/if}}
</div>

View File

@ -12,7 +12,7 @@
</label>
</div>
<div class="taw">
<label>TAW:
<label>TaW:
<input type="text" name="system.taw"
value="{{system.taw}}"/>
</label>

View File

@ -1,24 +1,40 @@
<section class="tab {{tabs.meta.id}} {{tabs.meta.cssClass}}"
data-tab="{{tabs.meta.id}}"
data-group="{{tabs.meta.group}}">
<div>
<div>
<div class="meta-details">
<div class="name">
<label>Name
<input type="text" name="name"
value="{{name}}"/>
</label>
</div>
<div>
<label>Probe
<input type="text" name="system.probe.0"
value="{{system.probe.[0]}}"/>
<input type="text" name="system.probe.1"
value="{{system.probe.[1]}}"/>
<input type="text" name="system.probe.2"
value="{{system.probe.[2]}}"/>
<div class="zfw">
<label>ZfW:
<input type="text" name="system.zfw"
value="{{system.zfw}}"/>
</label>
</div>
<div><label>Proben Modifikation
<div class="statistics">
<label class="throw">Probe</label>
<div><label><input type="text" name="system.probe.0"
value="{{system.probe.[0]}}"/></label></div>
<div><label><input type="text" name="system.probe.1"
value="{{system.probe.[1]}}"/></label></div>
<div><label><input type="text" name="system.probe.2"
value="{{system.probe.[2]}}"/></label></div>
</div>
<div class="probenmod">
<label>Proben-Mod
<input type="text" name="system.probeMod"
value="{{system.probeMod}}"/>
</label>
</div>
<div class="effect">
<label for="wirkung">Wirkung</label>
<textarea id="wirkung" name="system.wirkung">{{system.wirkung}}</textarea>
</div>
<!--
<div><label>Proben Modifikation
<input type="text" name="system.probeMod"
value="{{system.probeMod}}"/>
</label></div>
@ -33,16 +49,11 @@
<input type="text" name="system.kosten" value="{{system.kosten}}"/>
</label>
</div>
<div>
<label>Wirkung
<input type="text" name="system.wirkung" value="{{system.wirkung}}"/>
</label>
</div>
<div>
<label>Wirkungsdauer
<input type="text" name="system.wirkungsdauer" value="{{system.wirkungsdauer}}"/>
</label>
</div>
-->
</div>
</section>

View File

@ -2,10 +2,18 @@
<ul>
{{#each entries}}
<li>{{this}}</li>
<li class="array-entry">
<span class="label">{{this}}</span>
<button class="remove" type="button" data-action="{{../removeOption}}" data-option-id="{{this}}">
<i class="fa fa-minus"></i>
</button>
</li>
{{/each}}
</ul>
<select data-target-field="{{targetField}}">
<div class="options">
<select class="selector" data-target-field="{{targetField}}">
{{selectOptions options inverted=true}}
</select>
<button class=add" type="button" data-target-field="{{targetField}}" data-action="{{addOption}}"><i class="fa fa-plus"></i></button>
</div>
</div>

View File

@ -7,7 +7,7 @@
data-action="activateCooldown"
{{/if}}
data-cooldown-id="{{@key}}">{{this.title}}</span>
<button data-tooltip="{{localize "COOLDOWN.cancel" t=this.title}}" class="btn-right"
<button type="button" data-tooltip="{{localize "COOLDOWN.cancel" t=this.title}}" class="btn-right"
data-action="cancelCooldown" data-cooldown-id="{{@key}}">
<i class="fa-solid fa-xmark"></i>
</button>

View File

@ -13,7 +13,7 @@
</span>
</div>
<div class="container">
<span class="name" data-id="{{this.id}}">{{this.name}}</span>
<span class="name" data-item-id="{{this.id}}" data-action="openSkillDialog">{{this.name}}</span>
<div class="werte">
{{#each this.werte}}
<div class="eigenschaft"><span class="name">{{this.name}}</span><span

View File

@ -13,7 +13,7 @@
</span>
</div>
<div class="container">
<span class="name" data-id="{{this.id}}">{{this.name}}</span>
<span class="name" data-item-id="{{this.id}}" data-action="openSkillDialog">{{this.name}}</span>
<div class="werte">
<div class="eigenschaft"><span class="name">Komp</span><span
class="value">{{this.komplexität}}</span></div>

View File

@ -1,8 +1,7 @@
<div class="block rollable {{this.type}} {{this.gruppe}}" data-id="{{this.id}}"
data-action="rollCombatSkill" data-tooltip="{{this.name}}<br/>{{#if this.at}}AT: {{this.at}} {{/if}}{{#if
this.pa}}PA: {{this.pa}}{{/if}}<hr/><i class='fa-solid fa-computer-mouse'></i>: Attacke<br/><kbd>Shift</kbd>+<i class='fa-solid fa-computer-mouse'></i>: Parrieren">
<div class="block rollable {{this.type}} {{this.gruppe}}" data-id="{{this.id}}">
<div class="die">
<div class="die" data-action="rollCombatSkill" data-tooltip="{{this.name}}<br/>{{#if this.at}}AT: {{this.at}} {{/if}}{{#if
this.pa}}PA: {{this.pa}}{{/if}}<hr/><i class='fa-solid fa-computer-mouse'></i>: Attacke<br/><kbd>Shift</kbd>+<i class='fa-solid fa-computer-mouse'></i>: Parrieren">
{{> 'systems/DSA_4-1/templates/ui/partial-die.hbs' }}
<span class="value"
data-id="{{this.id}}">{{#if this.taw}}
@ -15,7 +14,7 @@
</span>
</div>
<div class="container">
<span class="name" data-id="{{this.id}}">{{this.name}}</span>
<span class="name" data-item-id="{{this.id}}" data-action="openSkillDialog">{{this.name}}</span>
<div class="werte">
<div class="eigenschaft"><span class="name">AT</span><span class="value">{{this.at}}</span></div>

View File

@ -6,9 +6,9 @@
<legend class="variant-operator"><select name="variant">
{{selectOptions variantChoices selected=currentSelectedVariantName inverted=true}}
</select>
<button {{#if currentSelectedVariant}}data-action="addVariant" {{else}}disabled="disabled"{{/if}}><i
<button type="button" {{#if currentSelectedVariant}}data-action="addVariant" {{else}}disabled="disabled"{{/if}}><i
class="fa-solid fa-plus"></i></button>
<button {{#if currentSelectedVariant}}data-action="removeVariant" {{else}}disabled="disabled"{{/if}}><i
<button type="button" {{#if currentSelectedVariant}}data-action="removeVariant" {{else}}disabled="disabled"{{/if}}><i
class="fa-solid fa-minus"></i></button>
</legend>
@ -91,7 +91,7 @@
{{/if}}
{{/if}}
<td>
<button data-action="removeRequirement" data-index="{{@key}}"><i
<button type="button" data-action="removeRequirement" data-index="{{@key}}"><i
class="fa-solid fa-trash"></i></button>
</td>
</tr>
@ -100,7 +100,7 @@
<tfoot>
<tr>
<td colspan="4">
<button {{#if currentSelectedVariant}}data-action="addRequirement"
<button type="button" {{#if currentSelectedVariant}}data-action="addRequirement"
{{else}}disabled="disabled"{{/if}}><i class="fa-solid fa-plus"></i></button>
</td>
</tr>
@ -116,7 +116,7 @@
<td><input type="text" value="{{this.name}}" name="mod.{{@key}}.name"/></td>
<td><input type="number" value="{{this.value}}" name="mod.{{@key}}.value"/></td>
<td>
<button data-action="removeMod" data-index="{{@key}}"><i class="fa-solid fa-trash"></i>
<button type="button" data-action="removeMod" data-index="{{@key}}"><i class="fa-solid fa-trash"></i>
</button>
</td>
</tr>
@ -125,7 +125,7 @@
<tfoot>
<tr>
<td colspan="3">
<button {{#if currentSelectedVariant}}data-action="addMod"
<button type="button" {{#if currentSelectedVariant}}data-action="addMod"
{{else}}disabled="disabled"{{/if}}><i class="fa-solid fa-plus"></i></button>
</td>
</tr>
@ -134,7 +134,7 @@
</div>
{{/if}}
<button {{#if currentSelectedVariant}}data-action="saveVariant" {{else}}disabled="disabled"{{/if}}><i
<button type="button" {{#if currentSelectedVariant}}data-action="saveVariant" {{else}}disabled="disabled"{{/if}}><i
class="fa-solid fa-save"></i> Speichern
</button>