Fix after testing

This commit is contained in:
2026-01-10 22:35:39 +01:00
parent b113f630bf
commit 936d525503
119 changed files with 3193 additions and 1096 deletions

View File

@@ -29,26 +29,16 @@ export class HeritiersRollDialog {
// Préparer les boutons selon le mode et le niveau
const buttons = this._prepareButtons(rollData)
// Lancer le dialog de manière asynchrone (sans attendre)
setTimeout(() => {
foundry.applications.api.DialogV2.wait({
window: { title: "Test de Capacité", icon: "fa-solid fa-dice" },
classes: ["heritiers-roll-dialog"],
position: { width: 420, height: 'fit-content' },
modal: false,
content,
buttons,
rejectClose: false,
render: (event, html) => {
this._activateListeners(html, rollData)
}
})
}, 0)
// Retourner un objet avec une méthode render() vide pour compatibilité
return {
render: () => {} // No-op for compatibility with old code
}
// Utiliser DialogV2.wait avec le HTML rendu
return foundry.applications.api.DialogV2.wait({
window: { title: "Test de Capacité", icon: "fa-solid fa-dice" },
classes: ["heritiers-roll-dialog"],
position: { width: 420 },
modal: false,
content,
buttons,
rejectClose: false
})
}
/**
@@ -63,7 +53,7 @@ export class HeritiersRollDialog {
// Bouton d8 toujours disponible
buttons.push({
action: "rolld8",
label: "Lancer 1d8",
label: "1d8",
icon: "fa-solid fa-dice-d8",
default: true,
callback: (event, button, dialog) => {
@@ -77,7 +67,7 @@ export class HeritiersRollDialog {
if (enableD10) {
buttons.push({
action: "rolld10",
label: "Lancer 1d10",
label: "1d10",
icon: "fa-solid fa-dice-d10",
callback: (event, button, dialog) => {
this._updateRollDataFromForm(rollData, button.form.elements)
@@ -91,7 +81,7 @@ export class HeritiersRollDialog {
if (enableD12) {
buttons.push({
action: "rolld12",
label: "Lancer 1d12",
label: "1d12",
icon: "fa-solid fa-dice-d12",
callback: (event, button, dialog) => {
this._updateRollDataFromForm(rollData, button.form.elements)
@@ -104,7 +94,7 @@ export class HeritiersRollDialog {
if (rollData.tricherie) {
buttons.push({
action: "rollTricherie",
label: "Lancer avec 1 Point de Tricherie",
label: "Lancer 1 Tricherie",
icon: "fa-solid fa-mask",
callback: (event, button, dialog) => {
this._updateRollDataFromForm(rollData, button.form.elements)
@@ -117,7 +107,7 @@ export class HeritiersRollDialog {
if (rollData.heritage) {
buttons.push({
action: "rollHeritage",
label: "Lancer avec 1 Point d'Héritage",
label: "Lancer 1 Héritage",
icon: "fa-solid fa-crown",
callback: (event, button, dialog) => {
this._updateRollDataFromForm(rollData, button.form.elements)
@@ -145,94 +135,6 @@ export class HeritiersRollDialog {
return buttons
}
/**
* Activer les listeners sur le formulaire
* @param {HTMLElement} html - L'élément HTML du dialog
* @param {Object} rollData - Data for the roll
* @private
*/
static _activateListeners(html, rollData) {
// Seuil de Difficulté
const sdValue = html.querySelector('#sdValue')
if (sdValue) {
sdValue.addEventListener('change', (event) => {
rollData.sdValue = Number(event.currentTarget.value)
})
}
// Caractéristique
const caracKey = html.querySelector('#caracKey')
if (caracKey) {
caracKey.addEventListener('change', (event) => {
rollData.caracKey = String(event.currentTarget.value)
})
}
// Bonus/Malus contextuel
const bonusMalusContext = html.querySelector('#bonus-malus-context')
if (bonusMalusContext) {
bonusMalusContext.addEventListener('change', (event) => {
rollData.bonusMalusContext = Number(event.currentTarget.value)
})
}
// Attaque à plusieurs
const bonusAttaquePlusieurs = html.querySelector('#bonus-attaque-plusieurs')
if (bonusAttaquePlusieurs) {
bonusAttaquePlusieurs.addEventListener('change', (event) => {
rollData.bonusAttaquePlusieurs = Number(event.currentTarget.value)
})
}
// Spécialité
const useSpecialite = html.querySelector('#useSpecialite')
if (useSpecialite) {
useSpecialite.addEventListener('change', (event) => {
rollData.useSpecialite = event.currentTarget.checked
})
}
// Points d'usage du pouvoir
const pouvoirPointsUsage = html.querySelector('#pouvoirPointsUsage')
if (pouvoirPointsUsage) {
pouvoirPointsUsage.addEventListener('change', (event) => {
rollData.pouvoirPointsUsage = Number(event.currentTarget.value)
})
}
// Attaque dans le dos
const attaqueDos = html.querySelector('#attaqueDos')
if (attaqueDos) {
attaqueDos.addEventListener('change', (event) => {
rollData.attaqueDos = event.currentTarget.checked
})
}
// Seconde arme
const secondeArme = html.querySelector('#bonus-attaque-seconde-arme')
if (secondeArme) {
secondeArme.addEventListener('change', (event) => {
rollData.secondeArme = String(event.currentTarget.value)
})
}
// Attaque ciblée
const attaqueCible = html.querySelector('#attaque-cible')
if (attaqueCible) {
attaqueCible.addEventListener('change', (event) => {
rollData.attaqueCible = String(event.currentTarget.value)
})
}
// Attaque à deux armes
const attaqueDeuxArmes = html.querySelector('#bonus-attaque-deux-armes')
if (attaqueDeuxArmes) {
attaqueDeuxArmes.addEventListener('change', (event) => {
rollData.attaqueDeuxArmes = Number(event.currentTarget.value)
})
}
}
/**
* Mettre à jour rollData avec les valeurs du formulaire
* @param {Object} rollData - L'objet rollData à mettre à jour
@@ -305,7 +207,7 @@ export class HeritiersRollDialog {
} else {
rollData.mainDice = dice
}
HeritiersUtility.rollHeritiers(rollData)
}
}

View File

@@ -13,7 +13,7 @@ export default class HeritiersAccessoireSheet extends HeritiersItemSheet {
/** @override */
static PARTS = {
sheet: {
template: "systems/fvtt-les-heritiers/templates/item-accessoire-sheet.html",
template: "systems/fvtt-les-heritiers/templates/item-accessoire-sheet.hbs",
},
}
}

View File

@@ -13,7 +13,7 @@ export default class HeritiersArmeSheet extends HeritiersItemSheet {
/** @override */
static PARTS = {
sheet: {
template: "systems/fvtt-les-heritiers/templates/item-arme-sheet.html",
template: "systems/fvtt-les-heritiers/templates/item-arme-sheet.hbs",
},
}
}

View File

@@ -13,7 +13,7 @@ export default class HeritiersAtoutFeeriqueSheet extends HeritiersItemSheet {
/** @override */
static PARTS = {
sheet: {
template: "systems/fvtt-les-heritiers/templates/item-atoutfeerique-sheet.html",
template: "systems/fvtt-les-heritiers/templates/item-atoutfeerique-sheet.hbs",
},
}
}

View File

@@ -13,7 +13,7 @@ export default class HeritiersAvantageSheet extends HeritiersItemSheet {
/** @override */
static PARTS = {
sheet: {
template: "systems/fvtt-les-heritiers/templates/item-avantage-sheet.html",
template: "systems/fvtt-les-heritiers/templates/item-avantage-sheet.hbs",
},
}
}

View File

@@ -40,6 +40,10 @@ export default class HeritiersActorSheet extends HandlebarsApplicationMixin(foun
createItem: HeritiersActorSheet.#onCreateItem,
equipItem: HeritiersActorSheet.#onEquipItem,
modifyQuantity: HeritiersActorSheet.#onModifyQuantity,
quantityIncrease: HeritiersActorSheet.#onQuantityIncrease,
quantityDecrease: HeritiersActorSheet.#onQuantityDecrease,
pvIncrease: HeritiersActorSheet.#onPvIncrease,
pvDecrease: HeritiersActorSheet.#onPvDecrease,
rollInitiative: HeritiersActorSheet.#onRollInitiative,
rollCarac: HeritiersActorSheet.#onRollCarac,
rollRang: HeritiersActorSheet.#onRollRang,
@@ -78,7 +82,7 @@ export default class HeritiersActorSheet extends HandlebarsApplicationMixin(foun
* Tab groups state
* @type {object}
*/
tabGroups = { primary: "stats" }
tabGroups = { primary: "competences" }
/** @override */
async _prepareContext() {
@@ -370,18 +374,18 @@ export default class HeritiersActorSheet extends HandlebarsApplicationMixin(foun
*/
static async #onCreateItem(event, target) {
const itemType = target.dataset.type
// Cas spécial pour les sorts avec une compétence spécifique
if (itemType === "sort" && target.dataset.sortCompetence) {
const sortCompetence = target.dataset.sortCompetence
await this.actor.createEmbeddedDocuments('Item', [{
name: `Nouveau ${itemType} de ${sortCompetence}`,
type: itemType,
system: { competence: sortCompetence }
await this.actor.createEmbeddedDocuments('Item', [{
name: `Nouveau ${itemType} de ${sortCompetence}`,
type: itemType,
system: { competence: sortCompetence }
}], { renderSheet: true })
return
}
await this.actor.createEmbeddedDocuments("Item", [{ name: `Nouveau ${itemType}`, type: itemType }], { renderSheet: true })
}
@@ -415,6 +419,59 @@ export default class HeritiersActorSheet extends HandlebarsApplicationMixin(foun
}
}
/**
* Increase item quantity
* @param {Event} event
* @param {HTMLElement} target
* @private
*/
static async #onQuantityIncrease(event, target) {
const li = target.closest(".item")
const itemId = li?.dataset.itemId
if (itemId) {
await this.actor.incDecQuantity(itemId, 1)
}
}
/**
* Decrease item quantity
* @param {Event} event
* @param {HTMLElement} target
* @private
*/
static async #onQuantityDecrease(event, target) {
const li = target.closest(".item")
const itemId = li?.dataset.itemId
if (itemId) {
await this.actor.incDecQuantity(itemId, -1)
}
}
/**
* Increase PV
* @param {Event} event
* @param {HTMLElement} target
* @private
*/
static async #onPvIncrease(event, target) {
const currentPv = this.actor.system.pv.value || 0
const maxPv = this.actor.system.pv.max || 0
const newPv = Math.min(currentPv + 1, maxPv)
await this.actor.update({ 'system.pv.value': newPv })
}
/**
* Decrease PV
* @param {Event} event
* @param {HTMLElement} target
* @private
*/
static async #onPvDecrease(event, target) {
const currentPv = this.actor.system.pv.value || 0
const newPv = Math.max(currentPv - 1, 0)
await this.actor.update({ 'system.pv.value': newPv })
}
/**
* Roll initiative
* @param {Event} event

View File

@@ -13,7 +13,7 @@ export default class HeritiersCapaciteNaturelleSheet extends HeritiersItemSheet
/** @override */
static PARTS = {
sheet: {
template: "systems/fvtt-les-heritiers/templates/item-capacitenaturelle-sheet.html",
template: "systems/fvtt-les-heritiers/templates/item-capacitenaturelle-sheet.hbs",
},
}
}

View File

@@ -8,12 +8,58 @@ export default class HeritiersCompetenceSheet extends HeritiersItemSheet {
...super.DEFAULT_OPTIONS.window,
title: "SHEETS.Item.competence",
},
actions: {
addSpecialite: HeritiersCompetenceSheet.#onAddSpecialite,
deleteSpecialite: HeritiersCompetenceSheet.#onDeleteSpecialite,
editSpecialite: HeritiersCompetenceSheet.#onEditSpecialite,
editSpecialiteDescription: HeritiersCompetenceSheet.#onEditSpecialiteDescription,
}
}
/** @override */
static PARTS = {
sheet: {
template: "systems/fvtt-les-heritiers/templates/item-competence-sheet.html",
template: "systems/fvtt-les-heritiers/templates/item-competence-sheet.hbs",
},
}
/* -------------------------------------------- */
/* Event Handlers */
/* -------------------------------------------- */
static async #onAddSpecialite(event, target) {
let spec = foundry.utils.duplicate(this.item.system.specialites) || []
spec.push({ name: "Nouvelle Spécialité", id: foundry.utils.randomID(16), used: false })
await this.item.update({ 'system.specialites': spec })
}
static async #onDeleteSpecialite(event, target) {
const li = target.closest(".specialite-item")
let index = parseInt(li.dataset.specialiteIndex)
let spec = foundry.utils.duplicate(this.item.system.specialites) || []
spec.splice(index, 1)
await this.item.update({ 'system.specialites': spec })
}
static async #onEditSpecialite(event, target) {
const li = target.closest(".specialite-item")
let index = parseInt(li.dataset.specialiteIndex)
let spec = foundry.utils.duplicate(this.item.system.specialites) || []
if (spec[index]) {
spec[index].name = target.value
spec[index].id = spec[index].id || foundry.utils.randomID(16)
await this.item.update({ 'system.specialites': spec })
}
}
static async #onEditSpecialiteDescription(event, target) {
const li = target.closest(".specialite-item")
let index = parseInt(li.dataset.specialiteIndex)
let spec = foundry.utils.duplicate(this.item.system.specialites) || []
if (spec[index]) {
spec[index].description = target.value
spec[index].id = spec[index].id || foundry.utils.randomID(16)
await this.item.update({ 'system.specialites': spec })
}
}
}

View File

@@ -13,7 +13,7 @@ export default class HeritiersContactSheet extends HeritiersItemSheet {
/** @override */
static PARTS = {
sheet: {
template: "systems/fvtt-les-heritiers/templates/item-contact-sheet.html",
template: "systems/fvtt-les-heritiers/templates/item-contact-sheet.hbs",
},
}
}

View File

@@ -13,7 +13,7 @@ export default class HeritiersDesavantageSheet extends HeritiersItemSheet {
/** @override */
static PARTS = {
sheet: {
template: "systems/fvtt-les-heritiers/templates/item-desavantage-sheet.html",
template: "systems/fvtt-les-heritiers/templates/item-desavantage-sheet.hbs",
},
}
}

View File

@@ -13,7 +13,7 @@ export default class HeritiersEquipementSheet extends HeritiersItemSheet {
/** @override */
static PARTS = {
sheet: {
template: "systems/fvtt-les-heritiers/templates/item-equipement-sheet.html",
template: "systems/fvtt-les-heritiers/templates/item-equipement-sheet.hbs",
},
}
}

View File

@@ -13,7 +13,7 @@ export default class HeritiersFeeSheet extends HeritiersItemSheet {
/** @override */
static PARTS = {
sheet: {
template: "systems/fvtt-les-heritiers/templates/item-fee-sheet.html",
template: "systems/fvtt-les-heritiers/templates/item-fee-sheet.hbs",
},
}
}

View File

@@ -17,12 +17,12 @@ export default class HeritiersPersonnageSheet extends HeritiersActorSheet {
/** @override */
static PARTS = {
sheet: {
template: "systems/fvtt-les-heritiers/templates/actor-sheet.html",
template: "systems/fvtt-les-heritiers/templates/actor-sheet.hbs",
},
}
/** @override */
tabGroups = { primary: "stats" }
tabGroups = { primary: "competences" }
/** @override */
async _prepareContext() {

View File

@@ -17,12 +17,12 @@ export default class HeritiersPnjSheet extends HeritiersActorSheet {
/** @override */
static PARTS = {
sheet: {
template: "systems/fvtt-les-heritiers/templates/actor-pnj-sheet.html",
template: "systems/fvtt-les-heritiers/templates/actor-pnj-sheet.hbs",
},
}
/** @override */
tabGroups = { primary: "stats" }
tabGroups = { primary: "competences" }
/** @override */
async _prepareContext() {

View File

@@ -13,7 +13,7 @@ export default class HeritiersPouvoirSheet extends HeritiersItemSheet {
/** @override */
static PARTS = {
sheet: {
template: "systems/fvtt-les-heritiers/templates/item-pouvoir-sheet.html",
template: "systems/fvtt-les-heritiers/templates/item-pouvoir-sheet.hbs",
},
}
}

View File

@@ -13,7 +13,7 @@ export default class HeritiersProfilSheet extends HeritiersItemSheet {
/** @override */
static PARTS = {
sheet: {
template: "systems/fvtt-les-heritiers/templates/item-profil-sheet.html",
template: "systems/fvtt-les-heritiers/templates/item-profil-sheet.hbs",
},
}
}

View File

@@ -13,7 +13,7 @@ export default class HeritiersProtectionSheet extends HeritiersItemSheet {
/** @override */
static PARTS = {
sheet: {
template: "systems/fvtt-les-heritiers/templates/item-protection-sheet.html",
template: "systems/fvtt-les-heritiers/templates/item-protection-sheet.hbs",
},
}
}

View File

@@ -1,4 +1,5 @@
import HeritiersItemSheet from "./base-item-sheet.mjs"
import { HeritiersUtility } from "../../heritiers-utility.js"
export default class HeritiersSortSheet extends HeritiersItemSheet {
/** @override */
@@ -13,7 +14,14 @@ export default class HeritiersSortSheet extends HeritiersItemSheet {
/** @override */
static PARTS = {
sheet: {
template: "systems/fvtt-les-heritiers/templates/item-sort-sheet.html",
template: "systems/fvtt-les-heritiers/templates/item-sort-sheet.hbs",
},
}
/** @override */
async _prepareContext() {
const context = await super._prepareContext()
context.competencesMagie = HeritiersUtility.getCompetencesMagie() || []
return context
}
}

View File

@@ -158,6 +158,20 @@ export class HeritiersActorSheet extends foundry.appv1.sheets.ActorSheet {
this.actor.incDecQuantity(li.data("item-id"), value);
})
html.find('[data-action="quantityIncrease"]').click(event => {
event.preventDefault()
event.stopPropagation()
const li = $(event.currentTarget).parents(".item")
this.actor.incDecQuantity(li.data("item-id"), 1);
})
html.find('[data-action="quantityDecrease"]').click(event => {
event.preventDefault()
event.stopPropagation()
const li = $(event.currentTarget).parents(".item")
this.actor.incDecQuantity(li.data("item-id"), -1);
})
html.find('.roll-initiative').click((event) => {
this.actor.rollInitiative()
})

View File

@@ -360,18 +360,6 @@ export class HeritiersActor extends Actor {
/* -------------------------------------------- */
async prepareData() {
let pvMax = (this.system.caracteristiques.con.rang * 3) + 9 + this.system.pv.mod
if (this.system.pv.max != pvMax) {
this.update({ 'system.pv.max': pvMax })
}
if (this.system.biodata.magie || this.type == "pnj") {
let pointsAmes = this.system.caracteristiques.esp.rang + this.system.caracteristiques.san.rang + this.getMaxRangMagie()
if (this.system.magie.pointsame.max != pointsAmes) {
this.update({ 'system.magie.pointsame.max': pointsAmes })
}
}
super.prepareData();
}
@@ -395,6 +383,15 @@ export class HeritiersActor extends Actor {
/* -------------------------------------------- */
prepareDerivedData() {
// Calculate derived PV max
let pvMax = (this.system.caracteristiques.con.rang * 3) + 9 + this.system.pv.mod
this.system.pv.max = pvMax
// Calculate derived Points d'Âme max
if (this.system.biodata.magie || this.type == "pnj") {
let pointsAmes = this.system.caracteristiques.esp.rang + this.system.caracteristiques.san.rang + this.getMaxRangMagie()
this.system.magie.pointsame.max = pointsAmes
}
if (this.type == 'personnage') {
}
@@ -713,8 +710,7 @@ export class HeritiersActor extends Actor {
rollData.caracKey = "per"
}
rollData.carac = this.system.caracteristiques[rollData.caracKey]
let rollDialog = await HeritiersRollDialog.create(this, rollData)
rollDialog.render(true)
await HeritiersRollDialog.create(this, rollData)
}
/* -------------------------------------------- */
@@ -723,8 +719,7 @@ export class HeritiersActor extends Actor {
rollData.mode = "carac"
rollData.carac = this.system.caracteristiques[key]
rollData.caracKey = key
let rollDialog = await HeritiersRollDialog.create(this, rollData)
rollDialog.render(true)
await HeritiersRollDialog.create(this, rollData)
}
/* -------------------------------------------- */
@@ -733,8 +728,7 @@ export class HeritiersActor extends Actor {
rollData.mode = "rang"
rollData.rang = this.system.rang[key]
rollData.rangKey = key
let rollDialog = await HeritiersRollDialog.create(this, rollData)
rollDialog.render(true)
await HeritiersRollDialog.create(this, rollData)
}
/* -------------------------------------------- */
async rollRootCompetence(compKey) {
@@ -742,8 +736,7 @@ export class HeritiersActor extends Actor {
rollData.mode = "competence"
rollData.competence = { name: this.system.competences[compKey].label, system: { niveau: this.system.competences[compKey].niveau } }
console.log("RollDatra", rollData)
let rollDialog = await HeritiersRollDialog.create(this, rollData)
rollDialog.render(true)
await HeritiersRollDialog.create(this, rollData)
}
/* -------------------------------------------- */
@@ -751,8 +744,7 @@ export class HeritiersActor extends Actor {
let rollData = this.getCommonRollData(compId)
rollData.mode = "competence"
console.log("RollDatra", rollData)
let rollDialog = await HeritiersRollDialog.create(this, rollData)
rollDialog.render(true)
await HeritiersRollDialog.create(this, rollData)
}
/* -------------------------------------------- */
@@ -824,8 +816,7 @@ export class HeritiersActor extends Actor {
rollData.caracKey = sort.system.carac1
}
console.log("RollData", rollData)
let rollDialog = await HeritiersRollDialog.create(this, rollData)
rollDialog.render(true)
await HeritiersRollDialog.create(this, rollData)
}
@@ -846,13 +837,13 @@ export class HeritiersActor extends Actor {
rollData.caracKey = key
rollData.arme = arme
rollData.mode = "arme"
rollData.attackType = "Attaque normale"
rollData.armes = this.getOtherMeleeWeapons(arme)
if (rollData.defenderTokenId && arme.system.isMelee) {
rollData.cacheDifficulte = true
}
console.log(">>>> ARME", rollData)
let rollDialog = await HeritiersRollDialog.create(this, rollData)
rollDialog.render(true)
await HeritiersRollDialog.create(this, rollData)
}
}
@@ -868,10 +859,10 @@ export class HeritiersActor extends Actor {
rollData.caracKey = key
rollData.arme = foundry.utils.duplicate(arme)
rollData.mode = "attaquebrutale"
rollData.attackType = "Attaque brutale"
rollData.armes = this.getOtherMeleeWeapons(arme)
rollData.rulesMalus.push({ name: "Attaque brutale", value: -2 })
let rollDialog = await HeritiersRollDialog.create(this, rollData)
rollDialog.render(true)
await HeritiersRollDialog.create(this, rollData)
}
}
/* -------------------------------------------- */
@@ -887,8 +878,8 @@ export class HeritiersActor extends Actor {
rollData.arme = foundry.utils.duplicate(arme)
rollData.armes = this.getOtherMeleeWeapons(arme)
rollData.mode = "attaquecharge"
let rollDialog = await HeritiersRollDialog.create(this, rollData)
rollDialog.render(true)
rollData.attackType = "Attaque en charge"
await HeritiersRollDialog.create(this, rollData)
}
}
@@ -903,11 +894,11 @@ export class HeritiersActor extends Actor {
rollData.caracKey = "agi"
rollData.arme = foundry.utils.duplicate(arme)
rollData.mode = "assommer"
rollData.attackType = "Assommer"
if (rollData.defenderTokenId) {
rollData.cacheDifficulte = true
}
let rollDialog = await HeritiersRollDialog.create(this, rollData)
rollDialog.render(true)
await HeritiersRollDialog.create(this, rollData)
}
}
@@ -1001,8 +992,7 @@ export class HeritiersActor extends Actor {
//ui.notifications.warn("Le pouvoir actif " + pouvoir.name + " a été utilisé, dépense de " + pouvoirPointsUsage + " points d'usage")
}
}
let rollDialog = await HeritiersRollDialog.create(this, rollData)
rollDialog.render(true)
await HeritiersRollDialog.create(this, rollData)
}
}

View File

@@ -11,7 +11,6 @@ export class HeritiersItemSheet extends foundry.appv1.sheets.ItemSheet {
return foundry.utils.mergeObject(super.defaultOptions, {
classes: ["fvtt-les-heritiers", "sheet", "item"],
template: "systems/fvtt-les-heritiers/templates/item-sheet.html",
dragDrop: [{ dragSelector: null, dropSelector: null }],
width: 620,
height: 550,
@@ -142,32 +141,36 @@ export class HeritiersItemSheet extends foundry.appv1.sheets.ItemSheet {
})
html.find('#add-specialite').click(ev => {
let spec = foundry.utils.duplicate(this.object.system.specialites)
let spec = foundry.utils.duplicate(this.item.system.specialites) || []
spec.push({ name: "Nouvelle Spécialité", id: foundry.utils.randomID(16), used: false })
this.object.update({ 'system.specialites': spec })
this.item.update({ 'system.specialites': spec })
})
html.find('.delete-specialite').click(ev => {
const li = $(ev.currentTarget).parents(".specialite-item")
let index = li.data("specialite-index")
let spec = foundry.utils.duplicate(this.object.system.specialites)
let spec = foundry.utils.duplicate(this.item.system.specialites) || []
spec.splice(index, 1)
this.object.update({ 'system.specialites': spec })
this.item.update({ 'system.specialites': spec })
})
html.find('.edit-specialite').change(ev => {
const li = $(ev.currentTarget).parents(".specialite-item")
let index = li.data("specialite-index")
let spec = foundry.utils.duplicate(this.object.system.specialites)
spec[index].name = ev.currentTarget.value
spec[index].id = spec[index].id || foundry.utils.randomID(16)
this.object.update({ 'system.specialites': spec })
let spec = foundry.utils.duplicate(this.item.system.specialites) || []
if (spec[index]) {
spec[index].name = ev.currentTarget.value
spec[index].id = spec[index].id || foundry.utils.randomID(16)
this.item.update({ 'system.specialites': spec })
}
})
html.find('.edit-specialite-description').change(ev => {
const li = $(ev.currentTarget).parents(".specialite-item")
let index = li.data("specialite-index")
let spec = foundry.utils.duplicate(this.object.system.specialites)
spec[index].description = ev.currentTarget.value
spec[index].id = spec[index].id || foundry.utils.randomID(16)
this.object.update({ 'system.specialites': spec })
let spec = foundry.utils.duplicate(this.item.system.specialites) || []
if (spec[index]) {
spec[index].description = ev.currentTarget.value
spec[index].id = spec[index].id || foundry.utils.randomID(16)
this.item.update({ 'system.specialites': spec })
}
})
html.find('#add-automation').click(ev => {
@@ -203,7 +206,7 @@ export class HeritiersItemSheet extends foundry.appv1.sheets.ItemSheet {
/* -------------------------------------------- */
get template() {
let type = this.item.type;
return `systems/fvtt-les-heritiers/templates/item-${type}-sheet.html`;
return `systems/fvtt-les-heritiers/templates/item-${type}-sheet.hbs`;
}
/* -------------------------------------------- */

View File

@@ -114,12 +114,38 @@ function welcomeMessage() {
ChatMessage.create({
user: game.user.id,
whisper: [game.user.id],
content: `<div id="welcome-message-heritiers"><span class="rdd-roll-part">
<strong>Bienvenue dans Les Heritiers et la Belle Epoque !</strong>
<p>Les livres du JDR Les Heritiers sont nécessaires pour jouer : https://www.titam-france.fr</p>
<p>Les Heritiers est jeu de rôle publié par Titam France/Sombres projets, tout les droits leur appartiennent.</p>
<p>Système développé par LeRatierBretonnien, support sur le <a href="https://discord.gg/pPSDNJk">Discord FR de Foundry</a>.</p>
` });
content: `
<div class="heritiers-chat-card heritiers-welcome-card">
<div class="chat-card-header welcome-header">
<div class="welcome-icon-wrapper">
<i class="fas fa-book-open welcome-icon"></i>
</div>
<div class="chat-actor-info">
<h3 class="chat-actor-name">Bienvenue dans Les Héritiers !</h3>
<div class="chat-action-name">et la Belle Époque</div>
</div>
</div>
<div class="chat-card-content welcome-content">
<div class="welcome-section">
<i class="fas fa-info-circle"></i>
<p>Les livres du JDR <strong>Les Héritiers</strong> sont nécessaires pour jouer.</p>
</div>
<div class="welcome-section">
<i class="fas fa-copyright"></i>
<p><em>Les Héritiers</em> est un jeu de rôle publié par <strong>Titam France / Sombres Projets</strong>. Tous les droits leur appartiennent.</p>
</div>
<div class="welcome-section">
<i class="fas fa-code"></i>
<p>Système développé par <strong>LeRatierBretonnien</strong></p>
<p>Support sur le <a href="https://discord.gg/pPSDNJk" target="_blank"><i class="fab fa-discord"></i> Discord FR de Foundry</a></p>
</div>
</div>
</div>
`
});
}
/* -------------------------------------------- */

View File

@@ -46,14 +46,14 @@ export class HeritiersRollDialog extends Dialog {
if (rollData.tricherie) {
buttons["rollTricherie"] = {
icon: '<i class="fas fa-check"></i>',
label: "Lancer avec 1 Point de Tricherie",
label: "Avec 1 Tricherie",
callback: () => { this.roll("tricherie") }
}
}
if (rollData.heritage) {
buttons["rollHeritage"] = {
icon: '<i class="fas fa-check"></i>',
label: "Lancer avec 1 Point d'Héritage",
label: "Avec 1 Héritage",
callback: () => { this.roll("heritage") }
}
}

View File

@@ -76,6 +76,10 @@ export class HeritiersUtility {
Handlebars.registerHelper('mul', function (a, b) {
return parseInt(a) * parseInt(b);
})
Handlebars.registerHelper('and', function (...args) {
// Last argument is Handlebars options object, ignore it
return args.slice(0, -1).every(Boolean);
})
}
@@ -197,10 +201,11 @@ export class HeritiersUtility {
const templatePaths = [
'systems/fvtt-les-heritiers/templates/editor-notes-gm.html',
'systems/fvtt-les-heritiers/templates/partial-item-header.html',
'systems/fvtt-les-heritiers/templates/partial-item-description.html',
'systems/fvtt-les-heritiers/templates/partial-item-nav.html',
'systems/fvtt-les-heritiers/templates/partial-utile-skills.html'
'systems/fvtt-les-heritiers/templates/partial-item-header.hbs',
'systems/fvtt-les-heritiers/templates/partial-item-description.hbs',
'systems/fvtt-les-heritiers/templates/partial-item-nav.hbs',
'systems/fvtt-les-heritiers/templates/partial-utile-skills.hbs',
'systems/fvtt-les-heritiers/templates/partial-actor-equipment.hbs'
]
return foundry.applications.handlebars.loadTemplates(templatePaths);
}
@@ -478,7 +483,7 @@ export class HeritiersUtility {
this.computeArmeDegats(rollData, actor)
}
this.createChatWithRollMode(rollData.alias, {
content: await foundry.applications.handlebars.renderTemplate(`systems/fvtt-les-heritiers/templates/chat-cc-result.html`, rollData)
content: await foundry.applications.handlebars.renderTemplate(`systems/fvtt-les-heritiers/templates/chat-cc-result.hbs`, rollData)
}, rollData, "selfroll")
}
/* -------------------------------------------- */
@@ -490,7 +495,7 @@ export class HeritiersUtility {
this.computeMarge(rollData, valeurDefense)
rollData.dureeAssommer = (rollData.marge) ? rollData.marge * 2 : 1
this.createChatWithRollMode(rollData.alias, {
content: await foundry.applications.handlebars.renderTemplate(`systems/fvtt-les-heritiers/templates/chat-assommer-result.html`, rollData)
content: await foundry.applications.handlebars.renderTemplate(`systems/fvtt-les-heritiers/templates/chat-assommer-result.hbs`, rollData)
}, rollData, "selfroll")
}
/* -------------------------------------------- */
@@ -570,6 +575,10 @@ export class HeritiersUtility {
console.log(">>>> ", myRoll)
this.computeResult(actor, rollData)
this.computeMarge(rollData, rollData.sdValue) // Calcul de la marge si seuil présent
// Compute weapon damage for successful attacks
if (rollData.arme && rollData.isSuccess) {
this.computeArmeDegats(rollData, actor)
}
}
if (rollData.mode == "init") {
@@ -593,7 +602,7 @@ export class HeritiersUtility {
}
this.createChatWithRollMode(rollData.alias, {
content: await foundry.applications.handlebars.renderTemplate(`systems/fvtt-les-heritiers/templates/chat-generic-result.html`, rollData)
content: await foundry.applications.handlebars.renderTemplate(`systems/fvtt-les-heritiers/templates/chat-generic-result.hbs`, rollData)
}, rollData)
// Gestion attaque standard
@@ -631,7 +640,7 @@ export class HeritiersUtility {
this.computeResult(rollData)
this.createChatWithRollMode(rollData.alias, {
content: await foundry.applications.handlebars.renderTemplate(`systems/fvtt-les-heritiers/templates/chat-generic-result.html`, rollData)
content: await foundry.applications.handlebars.renderTemplate(`systems/fvtt-les-heritiers/templates/chat-generic-result.hbs`, rollData)
}, rollData)
}
@@ -844,7 +853,8 @@ export class HeritiersUtility {
/* -------------------------------------------- */
static async confirmDelete(actorSheet, li) {
let itemId = li.data("item-id");
// Support both jQuery and native elements
let itemId = li.dataset ? li.dataset.itemId : li.data("item-id");
let msgTxt = "<p>Certain de supprimer cet item ?";
let buttons = {
delete: {
@@ -852,7 +862,11 @@ export class HeritiersUtility {
label: "Oui !",
callback: () => {
actorSheet.actor.deleteEmbeddedDocuments("Item", [itemId]);
li.slideUp(200, () => actorSheet.render(false));
if (li.slideUp) {
li.slideUp(200, () => actorSheet.render(false));
} else {
actorSheet.render(false);
}
}
},
cancel: {

View File

@@ -23,7 +23,7 @@ export default class CompetenceDataModel extends foundry.abstract.TypeDataModel
}),
soufflemouvement: new fields.SchemaField({
1: new fields.StringField({ initial: "" }),
2: new fields.NumberField({ initial: 0, integer: true }),
2: new fields.StringField({ initial: "" }),
3: new fields.StringField({ initial: "" }),
4: new fields.StringField({ initial: "" })
}),

View File

@@ -5,7 +5,7 @@ export default class ContactDataModel extends foundry.abstract.TypeDataModel {
static defineSchema() {
const fields = foundry.data.fields;
return {
contacttype: new fields.StringField({ initial: "" }),
contacttype: new fields.StringField({ initial: "contact" }),
description: new fields.HTMLField({ initial: "" })
};
}