From 1bce2a959efbc2cd4f8ef314f76e662e0cf53de0 Mon Sep 17 00:00:00 2001 From: Plushtoast Date: Sun, 14 Mar 2021 20:31:36 +0100 Subject: [PATCH] patch 1.2.1 --- lang/de.json | 4 +- lang/en.json | 4 +- modules/hooks/init.js | 1 + modules/item/subclasses/ceremony-item-dsa.js | 4 +- .../item/subclasses/meleeweapon-item-dsa.js | 9 ++- .../item/subclasses/rangeweapon-item.dsa.js | 5 ++ modules/item/subclasses/ritual-item-dsa.js | 5 +- modules/item/subclasses/skill-item-dsa.js | 4 +- modules/item/subclasses/spell-item-dsa.js | 10 +-- modules/item/subclasses/trait-item-dsa.js | 5 ++ modules/system/dice-dsa5.js | 10 ++- .../dialog/combatskill-enhanced-dialog.html | 2 +- templates/dialog/default-combat-dialog.html | 62 +++++++++++++++++++ templates/dialog/enhanced-default-dialog.html | 6 ++ 14 files changed, 118 insertions(+), 13 deletions(-) create mode 100644 templates/dialog/default-combat-dialog.html diff --git a/lang/de.json b/lang/de.json index 12c56a7e..985a9cdd 100644 --- a/lang/de.json +++ b/lang/de.json @@ -421,7 +421,9 @@ "MODS": { "partChecks": "Teilprobenmodifikator", "FP": "Fertigkeitspunktemodifikator", - "combatTurmoil": "Schuss ins Kampfgetümmel" + "combatTurmoil": "Schuss ins Kampfgetümmel", + "QS": "Qualitätsstufenmodifikator", + "damage": "Schadensmodifikator (z.B. 1d6)" }, "WIZARD": { diff --git a/lang/en.json b/lang/en.json index 057ba853..677cc452 100644 --- a/lang/en.json +++ b/lang/en.json @@ -438,7 +438,9 @@ "MODS": { "partChecks": "Part of skill check modifier", "FP": "Skill points modifier", - "combatTurmoil": "Shooting into Melee" + "combatTurmoil": "Shooting into Melee", + "QS": "Quality level modifier", + "damage": "Damage modifier (f.e. 1d6)" }, "SKILL": { diff --git a/modules/hooks/init.js b/modules/hooks/init.js index 14641f6d..35599194 100644 --- a/modules/hooks/init.js +++ b/modules/hooks/init.js @@ -54,6 +54,7 @@ Hooks.once("init", () => { "systems/dsa5/templates/items/item-description.html", "systems/dsa5/templates/dialog/default-dialog.html", "systems/dsa5/templates/dialog/enhanced-default-dialog.html", + "systems/dsa5/templates/dialog/default-combat-dialog.html", "systems/dsa5/templates/chat/roll/test-card.html", "systems/dsa5/templates/items/item-equipment.html", "systems/dsa5/templates/actors/actor-combat.html", diff --git a/modules/item/subclasses/ceremony-item-dsa.js b/modules/item/subclasses/ceremony-item-dsa.js index 8c6e0899..1a8e2df1 100644 --- a/modules/item/subclasses/ceremony-item-dsa.js +++ b/modules/item/subclasses/ceremony-item-dsa.js @@ -1,4 +1,5 @@ import DSA5 from "../../system/config-dsa5.js"; +import ItemRulesDSA5 from "../../system/item-rules-dsa5.js"; import LiturgyItemDSA5 from "./liturgy-item-dsa.js"; export default class CeremonyItemDSA5 extends LiturgyItemDSA5 { @@ -16,9 +17,10 @@ export default class CeremonyItemDSA5 extends LiturgyItemDSA5 { }) } - static getSituationalModifiers(situationalModifiers, actor, data) { + static getSituationalModifiers(situationalModifiers, actor, data, source) { let skMod = 0 let zkMod = 0 + situationalModifiers.push(...ItemRulesDSA5.getTalentBonus(actor.data, source.name, ["advantage", "disadvantage", "specialability", "equipment"])) if (game.user.targets.size) { game.user.targets.forEach(target => { skMod = target.actor.data.data.status.soulpower.max * -1 diff --git a/modules/item/subclasses/meleeweapon-item-dsa.js b/modules/item/subclasses/meleeweapon-item-dsa.js index e302b681..85670490 100644 --- a/modules/item/subclasses/meleeweapon-item-dsa.js +++ b/modules/item/subclasses/meleeweapon-item-dsa.js @@ -129,11 +129,16 @@ export default class MeleeweaponDSA5 extends Itemdsa5 { testData.situationalModifiers.push({ name: game.i18n.localize("opportunityAttack"), value: attackOfOpportunity - }) - testData.situationalModifiers.push({ + }, { name: game.i18n.localize("attackFromBehind"), value: html.find('[name="attackFromBehind"]').is(":checked") ? -4 : 0 + }, { + name: game.i18n.localize("MODS.damage"), + damageBonus: html.find('[name="damageModifier"]').val(), + value: 0, + step: 1 }) + testData.situationalModifiers.push(...Itemdsa5.getSpecAbModifiers(html, mode)) return { testData, cardOptions }; diff --git a/modules/item/subclasses/rangeweapon-item.dsa.js b/modules/item/subclasses/rangeweapon-item.dsa.js index f9f3dd86..4f4894eb 100644 --- a/modules/item/subclasses/rangeweapon-item.dsa.js +++ b/modules/item/subclasses/rangeweapon-item.dsa.js @@ -136,6 +136,11 @@ export default class RangeweaponItemDSA5 extends Itemdsa5 { }, { name: game.i18n.localize("aim"), value: Number(html.find('[name="aim"]').val()) || 0 + }, { + name: game.i18n.localize("MODS.damage"), + damageBonus: html.find('[name="damageModifier"]').val(), + value: 0, + step: 1 }) testData.situationalModifiers.push(...Itemdsa5.getSpecAbModifiers(html, "attack")) return { testData, cardOptions }; diff --git a/modules/item/subclasses/ritual-item-dsa.js b/modules/item/subclasses/ritual-item-dsa.js index 94a36d5a..23ec201c 100644 --- a/modules/item/subclasses/ritual-item-dsa.js +++ b/modules/item/subclasses/ritual-item-dsa.js @@ -1,6 +1,8 @@ import DSA5 from "../../system/config-dsa5.js"; import AdvantageRulesDSA5 from "../../system/advantage-rules-dsa5.js"; import SpellItemDSA5 from "./spell-item-dsa.js"; +import ItemRulesDSA5 from "../../system/item-rules-dsa5.js"; + export default class RitualItemDSA5 extends SpellItemDSA5 { static getCallbackData(testData, html, actor) { super.getCallbackData(testData, html, actor) @@ -18,9 +20,10 @@ export default class RitualItemDSA5 extends SpellItemDSA5 { value: html.find('[name="timeModifier"]').val() }) } - static getSituationalModifiers(situationalModifiers, actor, data) { + static getSituationalModifiers(situationalModifiers, actor, data, source) { let skMod = 0 let zkMod = 0 + situationalModifiers.push(...ItemRulesDSA5.getTalentBonus(actor.data, source.name, ["advantage", "disadvantage", "specialability", "equipment"])) situationalModifiers.push(...AdvantageRulesDSA5.getVantageAsModifier(actor.data, game.i18n.localize('LocalizedIDs.minorSpirits'), -1)) situationalModifiers.push(...AdvantageRulesDSA5.getVantageAsModifier(actor.data, game.i18n.localize('LocalizedIDs.magicalAttunement'))) situationalModifiers.push(...AdvantageRulesDSA5.getVantageAsModifier(actor.data, game.i18n.localize('LocalizedIDs.magicalRestriction'), -1)) diff --git a/modules/item/subclasses/skill-item-dsa.js b/modules/item/subclasses/skill-item-dsa.js index de5e6934..775ff7ef 100644 --- a/modules/item/subclasses/skill-item-dsa.js +++ b/modules/item/subclasses/skill-item-dsa.js @@ -52,8 +52,10 @@ export default class SkillItemDSA5 extends Itemdsa5 { testData.situationalModifiers = Actordsa5._parseModifiers('[name="situationalModifiers"]') testData.advancedModifiers = { chars: [0, 1, 2].map(x => Number(html.find(`[name="ch${x}"]`).val())), - fps: Number(html.find(`[name="fp"]`).val()) + fps: Number(html.find(`[name="fp"]`).val()), + qls: Number(html.find(`[name="qs"]`).val()) } + return { testData, cardOptions }; } }; diff --git a/modules/item/subclasses/spell-item-dsa.js b/modules/item/subclasses/spell-item-dsa.js index b25a4ad2..6076b064 100644 --- a/modules/item/subclasses/spell-item-dsa.js +++ b/modules/item/subclasses/spell-item-dsa.js @@ -4,6 +4,7 @@ import DSA5StatusEffects from "../../status/status_effects.js"; import AdvantageRulesDSA5 from "../../system/advantage-rules-dsa5.js"; import Itemdsa5 from "../item-dsa5.js"; import Actordsa5 from "../../actor/actor-dsa5.js"; +import ItemRulesDSA5 from "../../system/item-rules-dsa5.js"; export default class SpellItemDSA5 extends Itemdsa5 { static chatData(data, name) { return [ @@ -55,7 +56,8 @@ export default class SpellItemDSA5 extends Itemdsa5 { testData.extensions = SpellItemDSA5.getSpecAbModifiers(html).join(", ") testData.advancedModifiers = { chars: [0, 1, 2].map(x => Number(html.find(`[name="ch${x}"]`).val())), - fps: Number(html.find(`[name="fp"]`).val()) + fps: Number(html.find(`[name="fp"]`).val()), + qls: Number(html.find(`[name="qs"]`).val()) } } @@ -67,10 +69,10 @@ export default class SpellItemDSA5 extends Itemdsa5 { return res } - static getSituationalModifiers(situationalModifiers, actor, data) { + static getSituationalModifiers(situationalModifiers, actor, data, source) { let skMod = 0 let zkMod = 0 - + situationalModifiers.push(...ItemRulesDSA5.getTalentBonus(actor.data, source.name, ["advantage", "disadvantage", "specialability", "equipment"])) situationalModifiers.push(...AdvantageRulesDSA5.getVantageAsModifier(actor.data, game.i18n.localize('LocalizedIDs.minorSpirits'), -1)) situationalModifiers.push(...AdvantageRulesDSA5.getVantageAsModifier(actor.data, game.i18n.localize('LocalizedIDs.magicalAttunement'))) situationalModifiers.push(...AdvantageRulesDSA5.getVantageAsModifier(actor.data, game.i18n.localize('LocalizedIDs.magicalRestriction'), -1)) @@ -121,7 +123,7 @@ export default class SpellItemDSA5 extends Itemdsa5 { } let situationalModifiers = actor ? DSA5StatusEffects.getRollModifiers(actor, spell) : [] - this.getSituationalModifiers(situationalModifiers, actor, data) + this.getSituationalModifiers(situationalModifiers, actor, data, spell) data["situationalModifiers"] = situationalModifiers let dialogOptions = { diff --git a/modules/item/subclasses/trait-item-dsa.js b/modules/item/subclasses/trait-item-dsa.js index 172ea306..3be50e38 100644 --- a/modules/item/subclasses/trait-item-dsa.js +++ b/modules/item/subclasses/trait-item-dsa.js @@ -162,6 +162,11 @@ export default class TraitItemDSA5 extends Itemdsa5 { }, { name: game.i18n.localize("aim"), value: Number(html.find('[name="aim"]').val()) || 0 + }, { + name: game.i18n.localize("MODS.damage"), + damageBonus: html.find('[name="damageModifier"]').val(), + value: 0, + step: 1 }) testData.situationalModifiers.push(...Itemdsa5.getSpecAbModifiers(html, mode)) return { testData, cardOptions }; diff --git a/modules/system/dice-dsa5.js b/modules/system/dice-dsa5.js index 88c894bd..24ef3392 100644 --- a/modules/system/dice-dsa5.js +++ b/modules/system/dice-dsa5.js @@ -664,6 +664,12 @@ export default class DiceDSA5 { description = description.join(", ") + let ql = (fps == 0 ? 1 : (fps > 0 ? Math.ceil(fps / 3) : 0)) + (testData.qualityStep != undefined ? Number(testData.qualityStep) : 0) + + if (ql > 0) ql += (testData.advancedModifiers.qls || 0) + + Math.min(game.settings.get("dsa5", "capQSat"), ql) + return { result: fps, characteristics: [ @@ -671,7 +677,7 @@ export default class DiceDSA5 { { char: testData.source.data.characteristic2.value, res: roll.terms[2].results[0].result, suc: res[1] <= 0, tar: tar[1] }, { char: testData.source.data.characteristic3.value, res: roll.terms[4].results[0].result, suc: res[2] <= 0, tar: tar[2] } ], - qualityStep: Math.min(game.settings.get("dsa5", "capQSat"), (fps == 0 ? 1 : (fps > 0 ? Math.ceil(fps / 3) : 0)) + (testData.qualityStep != undefined ? Number(testData.qualityStep) : 0)), + qualityStep: ql, description: description, preData: testData, successLevel: successLevel, @@ -921,6 +927,8 @@ export default class DiceDSA5 { chatData.modifierList.push({ name: game.i18n.localize('MODS.partChecks'), value: testData.preData.advancedModifiers.chars }) if (testData.preData.advancedModifiers.fps != 0) chatData.modifierList.push({ name: game.i18n.localize('MODS.FP'), value: testData.preData.advancedModifiers.fps }) + if (testData.preData.advancedModifiers.qls != 0) + chatData.modifierList.push({ name: game.i18n.localize('MODS.QS'), value: testData.preData.advancedModifiers.qls }) } if (["gmroll", "blindroll"].includes(chatOptions.rollMode)) chatOptions["whisper"] = ChatMessage.getWhisperRecipients("GM").map(u => u.id); diff --git a/templates/dialog/combatskill-enhanced-dialog.html b/templates/dialog/combatskill-enhanced-dialog.html index 0842964a..478e92d8 100644 --- a/templates/dialog/combatskill-enhanced-dialog.html +++ b/templates/dialog/combatskill-enhanced-dialog.html @@ -1,7 +1,7 @@
- {{> systems/dsa5/templates/dialog/default-dialog.html}} {{#if melee}} + {{> systems/dsa5/templates/dialog/default-combat-dialog.html}} {{#if melee}}
diff --git a/templates/dialog/default-combat-dialog.html b/templates/dialog/default-combat-dialog.html new file mode 100644 index 00000000..4ee33b72 --- /dev/null +++ b/templates/dialog/default-combat-dialog.html @@ -0,0 +1,62 @@ +
+
+
+
+
+ {{#if showAttack}} +
+ {{localize 'CHARAbbrev.damage'}} +
+ {{/if}} +
+
+
+ +
+
+ +
+ {{#if showAttack}} +
+ +
+ {{/if}} +
+
+{{# if difficultyLabels}} +
+ + +
+{{/if}} +
+ + +
+{{#if hasSituationalModifiers}} +
+ + +
+{{/if}} \ No newline at end of file diff --git a/templates/dialog/enhanced-default-dialog.html b/templates/dialog/enhanced-default-dialog.html index fc3c8314..60b139e1 100644 --- a/templates/dialog/enhanced-default-dialog.html +++ b/templates/dialog/enhanced-default-dialog.html @@ -11,6 +11,9 @@
{{localize 'CHARAbbrev.FP'}}
+
+ {{localize 'CHARAbbrev.QS'}} +
@@ -27,6 +30,9 @@
+
+ +
{{# if difficultyLabels}}