diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index e245c7fa..aef0ddd1 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -35,7 +35,7 @@ jobs: env: version: ${{steps.get_version.outputs.version-without-v}} url: https://github.com/${{github.repository}} - manifest: https://raw.githubusercontent.com/${{github.repository}}/main/system.json + manifest: https://github.com/${{github.repository}}/releases/latest/download/system.json download: https://github.com/${{github.repository}}/releases/download/${{github.event.release.tag_name}}/system.zip # Create a zip file with all files required by the module to add to the release diff --git a/lang/en.json b/lang/en.json index d19dfb58..9bcf02b5 100755 --- a/lang/en.json +++ b/lang/en.json @@ -113,9 +113,7 @@ }, "displayInChat": "Display in chat", "deleteTriggerTitle": "Delete Trigger", - "deleteTriggerContent": "Are you sure you want to delete the {trigger} trigger?", - "advantageState": "Advantage State", - "damageOnSave": "Damage on Save" + "deleteTriggerContent": "Are you sure you want to delete the {trigger} trigger?" }, "RollField": { "diceRolling": { @@ -127,7 +125,7 @@ } }, "Settings": { - "attackModifier": "Attack Modifier", + "attackBonus": "Attack Bonus", "attackName": "Attack Name", "criticalThreshold": "Critical Threshold", "includeBase": { "label": "Include Item Damage" }, diff --git a/module/applications/dialogs/tagTeamDialog.mjs b/module/applications/dialogs/tagTeamDialog.mjs index 5236afb8..2d363471 100644 --- a/module/applications/dialogs/tagTeamDialog.mjs +++ b/module/applications/dialogs/tagTeamDialog.mjs @@ -16,11 +16,9 @@ export default class TagTeamDialog extends HandlebarsApplicationMixin(Applicatio ...member.toObject(), uuid: member.uuid, id: member.id, - selected: false, - owned: member.testUserPermission(game.user, CONST.DOCUMENT_OWNERSHIP_LEVELS.OWNER) + selected: false })); - - this.initiator = null; + this.intiator = null; this.openForAllPlayers = true; this.tabGroups.application = Object.keys(party.system.tagTeam.members).length @@ -82,18 +80,6 @@ export default class TagTeamDialog extends HandlebarsApplicationMixin(Applicatio for (const element of htmlElement.querySelectorAll('.roll-type-select')) element.addEventListener('change', this.updateRollType.bind(this)); - - htmlElement - .querySelector('.initiator-member-field') - ?.addEventListener('input', this.updateInitiatorMemberField.bind(this)); - - htmlElement - .querySelector('.initiator-cost-field') - ?.addEventListener('input', this.updateInitiatorCostField.bind(this)); - - htmlElement - .querySelector('.openforall-field') - ?.addEventListener('change', this.updateOpenForAllField.bind(this)); } _configureRenderParts(options) { @@ -149,12 +135,9 @@ export default class TagTeamDialog extends HandlebarsApplicationMixin(Applicatio const selectedMembers = partContext.memberSelection.filter(x => x.selected); partContext.allSelected = selectedMembers.length === 2; - partContext.canStartTagTeam = - partContext.allSelected && this.initiator?.memberId && typeof this.initiator?.cost === 'number'; + partContext.canStartTagTeam = partContext.allSelected && this.initiator; partContext.initiator = this.initiator; - partContext.initiatorOptions = selectedMembers - .filter(actor => actor.owned) - .map(x => ({ value: x.id, label: x.name })); + partContext.initiatorOptions = selectedMembers.map(x => ({ value: x.id, label: x.name })); partContext.initiatorDisabled = !selectedMembers.length; partContext.openForAllPlayers = this.openForAllPlayers; @@ -247,15 +230,14 @@ export default class TagTeamDialog extends HandlebarsApplicationMixin(Applicatio } static async updateData(event, _, formData) { - const partyData = foundry.utils.expandObject(formData.object); + const { initiator, openForAllPlayers, ...partyData } = foundry.utils.expandObject(formData.object); + this.initiator = initiator; + this.openForAllPlayers = openForAllPlayers !== undefined ? openForAllPlayers : this.openForAllPlayers; this.updatePartyData(partyData, this.getUpdatingParts(event.target)); } async updatePartyData(update, updatingParts, options = { render: true }) { - if (!game.users.activeGM) - return ui.notifications.error(game.i18n.localize('DAGGERHEART.UI.Notifications.gmRequired')); - const gmUpdate = async update => { await this.party.update(update); this.render({ parts: updatingParts }); @@ -392,23 +374,6 @@ export default class TagTeamDialog extends HandlebarsApplicationMixin(Applicatio ); } - updateInitiatorMemberField(event) { - if (!this.initiator) this.initiator = {}; - this.initiator.memberId = event.target.value; - this.render(); - } - - updateInitiatorCostField(event) { - if (!this.initiator) this.initiator = {}; - this.initiator.cost = event.target.value ? Number.parseInt(event.target.value) : null; - this.render(); - } - - updateOpenForAllField(event) { - this.openForAllPlayers = event.target.checked; - this.render(); - } - static async #removeRoll(_, button) { this.updatePartyData( { diff --git a/module/applications/sheets-configs/action-config.mjs b/module/applications/sheets-configs/action-config.mjs index e073cfa6..e15b0391 100644 --- a/module/applications/sheets-configs/action-config.mjs +++ b/module/applications/sheets-configs/action-config.mjs @@ -21,6 +21,7 @@ export default class DHActionConfig extends DHActionBaseConfig { static async addEffect(_event) { if (!this.action.effects) return; + const effectData = this._addEffectData.bind(this)(); const data = this.action.toObject(); const created = await this.action.item.createEmbeddedDocuments('ActiveEffect', [ diff --git a/module/canvas/placeables/measuredTemplate.mjs b/module/canvas/placeables/measuredTemplate.mjs index e439dadc..e1ea79f5 100644 --- a/module/canvas/placeables/measuredTemplate.mjs +++ b/module/canvas/placeables/measuredTemplate.mjs @@ -18,7 +18,7 @@ export default class DhMeasuredTemplate extends foundry.canvas.placeables.Measur static getRangeLabels(distanceValue, settings) { let result = { distance: distanceValue, units: '' }; - if (!settings.enabled || !canvas.scene) return result; + if (!settings.enabled) return result; const sceneRangeMeasurement = canvas.scene.flags.daggerheart?.rangeMeasurement; const { disable, custom } = CONFIG.DH.GENERAL.sceneRangeMeasurementSetting; diff --git a/module/data/fields/action/damageField.mjs b/module/data/fields/action/damageField.mjs index 5d40a470..d41d2d4a 100644 --- a/module/data/fields/action/damageField.mjs +++ b/module/data/fields/action/damageField.mjs @@ -232,7 +232,7 @@ export class DHActionDiceData extends foundry.abstract.DataModel { return { multiplier: new fields.StringField({ choices: CONFIG.DH.GENERAL.multiplierTypes, - initial: 'flat', + initial: 'prof', label: 'DAGGERHEART.ACTIONS.Config.damage.multiplier', nullable: false, required: true @@ -244,7 +244,7 @@ export class DHActionDiceData extends foundry.abstract.DataModel { }), dice: new fields.StringField({ choices: CONFIG.DH.GENERAL.diceTypes, - initial: CONFIG.DH.GENERAL.diceTypes.d6, + initial: 'd6', label: 'DAGGERHEART.GENERAL.Dice.single', nullable: false, required: true diff --git a/module/documents/tokenManager.mjs b/module/documents/tokenManager.mjs index f766a677..be5467da 100644 --- a/module/documents/tokenManager.mjs +++ b/module/documents/tokenManager.mjs @@ -95,7 +95,7 @@ export default class DhTokenManager { : this.#actor; const tokenData = await actor.getTokenDocument(); const result = await canvas.scene.createEmbeddedDocuments('Token', [ - { ...tokenData.toObject(), x: this.#activePreview.document.x, y: this.#activePreview.document.y } + { ...tokenData, x: this.#activePreview.document.x, y: this.#activePreview.document.y } ]); this.#activePreview = undefined; diff --git a/module/enrichers/TemplateEnricher.mjs b/module/enrichers/TemplateEnricher.mjs index 1a075518..fd0e78eb 100644 --- a/module/enrichers/TemplateEnricher.mjs +++ b/module/enrichers/TemplateEnricher.mjs @@ -63,12 +63,14 @@ export const renderMeasuredTemplate = async event => { const usedAngle = type === CONE ? (angle ?? CONFIG.MeasuredTemplate.defaults.angle) : type === INFRONT ? '180' : undefined; - let baseDistance = getTemplateDistance(range); + let baseDistance = range; + if (Number.isNaN(Number(range))) { + baseDistance = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.variantRules).rangeMeasurement[ + range + ]; + } - const { grid, distance } = CONFIG.Scene.documentClass.schema.fields.grid.fields; - const sceneGridSize = canvas.scene?.grid.size ?? grid.size.initial; - const sceneGridDistance = canvas.scene?.grid.distance ?? distance.getInitialValue(); - const dimensionConstant = sceneGridSize / sceneGridDistance; + const dimensionConstant = game.scenes.active.grid.size / game.scenes.active.grid.distance; baseDistance *= dimensionConstant; @@ -113,18 +115,3 @@ export const renderMeasuredTemplate = async event => { { create: true } ); }; - -const getTemplateDistance = range => { - const rangeNumber = Number(range); - if (!Number.isNaN(rangeNumber)) return rangeNumber; - - const { custom } = CONFIG.DH.GENERAL.sceneRangeMeasurementSetting; - const sceneMeasurements = canvas.scene?.flags.daggerheart?.rangeMeasurement; - const globalMeasurements = game.settings.get( - CONFIG.DH.id, - CONFIG.DH.SETTINGS.gameSettings.variantRules - ).rangeMeasurement; - - const settings = sceneMeasurements?.setting === custom.id ? sceneMeasurements : globalMeasurements; - return settings[range]; -}; diff --git a/src/packs/domains/domainCard_Rain_of_Blades_Ucenef6JpjQxwXni.json b/src/packs/domains/domainCard_Rain_of_Blades_Ucenef6JpjQxwXni.json index 293490e3..080dd67f 100644 --- a/src/packs/domains/domainCard_Rain_of_Blades_Ucenef6JpjQxwXni.json +++ b/src/packs/domains/domainCard_Rain_of_Blades_Ucenef6JpjQxwXni.json @@ -44,9 +44,7 @@ "flatMultiplier": 1 }, "applyTo": "hitPoints", - "type": [ - "magical" - ], + "type": [], "base": false, "valueAlt": { "multiplier": "prof", @@ -89,6 +87,57 @@ "name": "Cast", "img": "icons/skills/melee/spear-tips-three-green.webp", "range": "veryClose" + }, + "CUKoYyDxQhNc0pLs": { + "type": "damage", + "_id": "CUKoYyDxQhNc0pLs", + "systemPath": "actions", + "description": "

If a target you hit is Vulnerable, they take an extra 1d8 damage.

", + "chatDisplay": true, + "actionType": "action", + "cost": [], + "uses": { + "value": null, + "max": "", + "recovery": null + }, + "damage": { + "parts": { + "hitPoints": { + "value": { + "custom": { + "enabled": false + }, + "multiplier": "flat", + "flatMultiplier": 1, + "dice": "d8", + "bonus": null + }, + "applyTo": "hitPoints", + "type": [], + "base": false, + "resultBased": false, + "valueAlt": { + "multiplier": "prof", + "flatMultiplier": 1, + "dice": "d6", + "bonus": null, + "custom": { + "enabled": false + } + } + } + }, + "includeBase": false + }, + "target": { + "type": "any", + "amount": null + }, + "effects": [], + "name": "Damage Against Vulnerable", + "img": "icons/skills/melee/spear-tips-three-purple.webp", + "range": "" } }, "attribution": { diff --git a/src/packs/items/weapons/weapon_Labrys_Axe_ijWppQzSOqVCb3rE.json b/src/packs/items/weapons/weapon_Labrys_Axe_ijWppQzSOqVCb3rE.json index d5af9b14..11994d3e 100644 --- a/src/packs/items/weapons/weapon_Labrys_Axe_ijWppQzSOqVCb3rE.json +++ b/src/packs/items/weapons/weapon_Labrys_Axe_ijWppQzSOqVCb3rE.json @@ -5,14 +5,22 @@ "_id": "ijWppQzSOqVCb3rE", "img": "icons/weapons/axes/axe-battle-jagged.webp", "system": { - "description": "Protective: +1 to Armor Score", + "description": "", "actions": {}, "attached": [], "tier": 3, "equipped": false, "secondary": false, "burden": "twoHanded", - "weaponFeatures": [], + "weaponFeatures": [ + { + "value": "protective", + "effectIds": [ + "qTxADRsQnKiYfOiQ" + ], + "actionIds": [] + } + ], "attack": { "name": "Attack", "img": "icons/skills/melee/blood-slash-foam-red.webp", @@ -103,8 +111,8 @@ "effects": [ { "name": "Protective", - "description": "+1 to Armor Score", - "img": "icons/magic/defensive/shield-barrier-deflect-teal.webp", + "description": "Add your character's Tier to your Armor Score", + "img": "icons/skills/melee/shield-block-gray-orange.webp", "_id": "vnR4Zhnb0rOqwrFw", "type": "base", "system": { @@ -114,7 +122,7 @@ "phase": "initial", "priority": 20, "value": { - "max": "1" + "max": "ITEM.@system.tier" } } ] diff --git a/system.json b/system.json index ea71aaba..b1fe74d8 100644 --- a/system.json +++ b/system.json @@ -2,7 +2,7 @@ "id": "daggerheart", "title": "Daggerheart", "description": "An unofficial implementation of the Daggerheart system", - "version": "2.0.1", + "version": "2.0.0", "compatibility": { "minimum": "14.359", "verified": "14.359", diff --git a/templates/actionTypes/effect.hbs b/templates/actionTypes/effect.hbs index 8c5e6e68..dd6a7974 100644 --- a/templates/actionTypes/effect.hbs +++ b/templates/actionTypes/effect.hbs @@ -4,6 +4,21 @@