Gestion de jets de competences et modificateurs associés

This commit is contained in:
LeRatierBretonnien 2024-05-31 09:23:01 +02:00
parent af65209d23
commit 6b47cd3f40
33 changed files with 326 additions and 485 deletions

6
images/.directory Normal file
View File

@ -0,0 +1,6 @@
[Dolphin]
SortOrder=1
Timestamp=2024,5,30,18,14,56.568
Version=4
ViewMode=1
VisibleRoles=Details_text,Details_size,Details_modificationtime,Details_creationtime,CustomizedDetails

View File

@ -0,0 +1 @@
<svg style="height: 512px; width: 512px;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><defs><radialGradient id="darkzaitzev-acrobatic-gradient-0"><stop offset="0%" stop-color="#333232" stop-opacity="1"></stop><stop offset="100%" stop-color="#9e9c9c" stop-opacity="1"></stop></radialGradient></defs><rect fill="url(#darkzaitzev-acrobatic-gradient-0)" height="512" width="512" rx="32" ry="32"></rect><g class="" style="" transform="translate(0,0)"><path d="M140.488 19.31s-26.726 65.584-24.572 75.734c1.878 9.191 9.306.316 12.457 7.064 5.59 11.803 55.342 93.663 49.182 98.626-1.558 1.36-39.38-.402-67.961-5.845-52.49-9.998-94.822 2.352-77.039 42.21 26.177 58.653 133.15 154.14 97.89 183.602-40.844 34.159 19.82 117.249 79.275 40.308 10.885-14.085 29.356-73.201-1.614-69.579-37.447 4.38-14.128-30.491-14.128-30.491l23.345-29.92c12.96-1.9 134.534-21.449 134.534-21.449l-4.226-27.002-174.475 20.25s-24.16-32.453-35.964-50.687c-9.37-11.474 62.005 4.88 76.388-10.522 19.968-21.276 7.601-43.88 7.601-43.88L155.35 69.201zm114.619 43.977l-62.759 39.419 16.081 28.897 114.931-58.86zm-124.743 78.84l-46.691 31.612 48.224 10.444 17.417-12.13zm175.08 24.496l-52.166 34.37 51.969 32.462.058-21.93c51.869 12.43 140.22 48.13 126.472 191.26l23.908-73.889 27.884 33.386c-5.502-166.903-150.537-170.593-178.19-171.609zm-74.376 175.953l-19.91 25.873 110.89 14.697s18.638-17.84 15.035-18.976c-27.712-8.623-79.886-16.97-106.015-21.594z" fill="#000" fill-opacity="1"></path></g></svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@ -0,0 +1 @@
<svg style="height: 512px; width: 512px;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><defs><radialGradient id="lorc-awareness-gradient-0"><stop offset="0%" stop-color="#333232" stop-opacity="1"></stop><stop offset="100%" stop-color="#9e9c9c" stop-opacity="1"></stop></radialGradient></defs><rect fill="url(#lorc-awareness-gradient-0)" height="512" width="512" rx="32" ry="32"></rect><g class="" style="" transform="translate(0,0)"><path d="M121.406 18.313c-57.98 16.562-98.06 51.613-98.062 92.28-.003 40.518 39.805 75.616 97.437 92.25-33.653-22.005-55.22-55.224-55.218-92.25 0-37.237 21.85-70.277 55.844-92.28zm276.531 0c33.995 22.003 55.844 55.043 55.844 92.28.004 37.026-21.563 70.245-55.217 92.25 57.632-16.634 97.44-51.732 97.437-92.25-.003-40.667-40.082-75.718-98.063-92.28zM163.28 41.656c-43.303 12.368-73.215 38.565-73.218 68.938-.002 30.26 29.707 56.482 72.75 68.906-25.135-16.434-41.25-41.255-41.25-68.906 0-27.813 16.328-52.503 41.72-68.938zm192.782 0c25.39 16.435 41.72 41.125 41.72 68.938 0 27.65-16.115 52.472-41.25 68.906 43.043-12.424 72.752-38.645 72.75-68.906-.004-30.373-29.915-56.57-73.22-68.938zm-101.03 6.813c-23.457 3.027-44.22 30.026-44.22 64.655 0 19.094 6.635 36.007 16.438 47.75l10.22 12.25-15.69 2.938c-12.834 2.4-22.282 9.19-30.25 20.062-7.965 10.872-14 25.903-18.218 43.156-7.727 31.62-9.362 70.17-9.593 103.94h41.655l.625 8.655 10.625 141.375h90.344l9.374-141.313.594-8.718h39.625c-.017-34.152-.373-73.232-7.375-105.095-3.818-17.37-9.612-32.392-17.688-43.156-8.076-10.765-17.99-17.51-32.344-19.72l-16-2.47 10.125-12.624c9.38-11.682 15.69-28.4 15.69-47.03 0-36.92-23.274-64.564-49.095-64.564-2.8 0-4.505-.137-4.844-.093zm-51.438 12.155c-31.38 8.964-53.063 27.96-53.063 49.97 0 21.927 21.53 40.935 52.72 49.936-18.212-11.908-29.875-29.898-29.875-49.936.003-20.153 11.82-38.06 30.22-49.97zm112.156 0c18.398 11.91 30.216 29.816 30.22 49.97 0 20.037-11.664 38.027-29.876 49.936 31.19-9 52.72-28.008 52.72-49.936-.002-22.01-21.686-41.005-53.064-49.97z" fill="#000" fill-opacity="1"></path></g></svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

View File

@ -0,0 +1 @@
<svg style="height: 512px; width: 512px;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><defs><radialGradient id="delapouite-classical-knowledge-gradient-0"><stop offset="0%" stop-color="#333232" stop-opacity="1"></stop><stop offset="100%" stop-color="#9e9c9c" stop-opacity="1"></stop></radialGradient></defs><rect fill="url(#delapouite-classical-knowledge-gradient-0)" height="512" width="512" rx="32" ry="32"></rect><g class="" style="" transform="translate(0,0)"><path d="M104 37.25V215.1c3.6 9.9 10 14.1 20.9 17 11.4 2.9 27.1 3.1 43.9 3.1 16.8 0 34.6-.1 51.4 3.6 9.5 2.1 18.7 5.7 26.8 11.2V55.43c-7.2-9.9-15.9-13.69-27.3-15.09-12.2-1.49-27.3.55-42.9 2.83-15.7 2.28-31.9 4.81-47.7 2.88-8.7-1.07-17.3-3.87-25.1-8.8zm304 0c-7.8 4.93-16.4 7.73-25.1 8.8-15.8 1.93-32-.6-47.7-2.88-15.6-2.28-30.7-4.32-42.9-2.83-11.4 1.4-20.1 5.19-27.3 15.09V250c8.1-5.5 17.3-9.1 26.8-11.2 16.8-3.7 34.6-3.6 51.4-3.6 16.8 0 32.5-.2 43.9-3.1 10.9-2.9 17.3-7.1 20.9-17V37.25zM130.8 80.03h89.4v18h-89.4v-18zm161 0h89.4v18h-89.4v-18zm-161 44.47h89.4v18h-89.4v-18zm161 0h89.4v18h-89.4v-18zm-161 46.8h89.4v18h-89.4v-18zm161 0h89.4v18h-89.4v-18zM96 249c-17.3 0-29.19 7.3-37.77 18.9C49.66 279.4 45 295.7 45 312s4.66 32.6 13.23 44.1C66.81 367.7 78.7 375 96 375c22 0 35.7-7.1 44.4-14 8.6-6.9 11.5-13 11.5-13l2.5-5h203.2l2.5 5s2.9 6.1 11.5 13c8.7 6.9 22.4 14 44.4 14 17.3 0 29.2-7.3 37.8-18.9 8.5-11.5 13.2-27.8 13.2-44.1s-4.7-32.6-13.2-44.1c-8.6-11.6-20.5-18.9-37.8-18.9-22 0-35.7 7.1-44.4 14-8.6 6.9-11.5 13-11.5 13l-2.5 5H154.4l-2.5-5s-2.9-6.1-11.5-13c-8.7-6.9-22.4-14-44.4-14zm4.6 21.9c.9 0 1.9 0 2.9.1 13.5 1.2 28.2 8.9 44.1 24h216.8c15.9-15.1 30.6-22.8 44.1-24 14.2-1.2 26.6 5.8 33.1 16.2 13.1 20.9 7 53.9-20.6 72.3l-10-15c20.4-13.6 22.3-36.6 15.4-47.7-3.5-5.6-8.1-8.6-16.4-7.8-8.2.7-20.6 6.3-35.6 21.4l-2.7 2.6H140.3l-2.7-2.6c-15-15.1-27.4-20.7-35.6-21.4-8.26-.8-12.9 2.2-16.37 7.8-6.92 11.1-4.99 34.1 15.37 47.7l-9.99 15c-27.65-18.4-33.72-51.4-20.64-72.3 5.72-9.1 15.9-15.6 27.92-16.3h2.31zM169 361v126h30V361h-30zm48 0v126h30V361h-30zm48 0v126h30V361h-30zm48 0v126h30V361h-30z" fill="#000" fill-opacity="1"></path></g></svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

1
images/icons/revolt.svg Normal file
View File

@ -0,0 +1 @@
<svg style="height: 512px; width: 512px;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><defs><radialGradient id="sbed-revolt-gradient-0"><stop offset="0%" stop-color="#333232" stop-opacity="1"></stop><stop offset="100%" stop-color="#9e9c9c" stop-opacity="1"></stop></radialGradient></defs><rect fill="url(#sbed-revolt-gradient-0)" height="512" width="512" rx="32" ry="32"></rect><g class="" style="" transform="translate(0,0)"><path d="M106 145.23c0-36.923 37.5-36.923 37.5-36.923s-18.75-23.163-18.75-36.922c0-13.76 0-18.462 18.75-36.922C162.25 16 162.25 16 181 16h150c18.75 0 42.22 19.56 56.25 36.923C398.26 66.556 406 89.845 406 101.813c0 61.88-50.018 178.424-50.018 178.424l6.137 215.197-203.352.566L181 274.46l-37.5-36.922c-18.75-18.462-37.5-36.924-37.5-55.384z" fill="#000" fill-opacity="1"></path></g></svg>

After

Width:  |  Height:  |  Size: 825 B

View File

@ -0,0 +1 @@
<svg style="height: 512px; width: 512px;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><defs><radialGradient id="delapouite-shaking-hands-gradient-0"><stop offset="0%" stop-color="#333232" stop-opacity="1"></stop><stop offset="100%" stop-color="#9e9c9c" stop-opacity="1"></stop></radialGradient></defs><rect fill="url(#delapouite-shaking-hands-gradient-0)" height="512" width="512" rx="32" ry="32"></rect><g class="" style="" transform="translate(0,0)"><path d="M494 61.363l-82.58 77.934 78.994 132.96 3.586-4.458V61.362zM18 62.5v225.893c4.48.582 9.863.903 15.295.96 11.87.125 21.654-.65 27.15-1.144L113.1 154.974 18 62.5zm389.154 104.86l-7.04 4.556c-.15.097-5.362 3.336-6.893 4.29l-10.605 6.42.15.09c-4.914 3.057-6.28 3.917-11.857 7.38-2.83 1.757-2.9 1.798-5.584 3.465-20.29-10.907-42.306-19.29-67.998-25.882-32.312 9.762-66.542 23.888-100.722 37.142 14.19 17.087 29.96 22.651 45.845 22.85 18.42.23 37.25-7.78 50.218-16.754l7.4-5.12 7.426 10.73 115.453 83.33 45.112-29.987-60.906-102.51zM126.477 170.1L81.11 284.887 97.76 297.69l30.795-34.905 2.467-2.795 3.72-.232c1.5-.094 2.98-.138 4.44-.13 10.212.066 19.342 2.716 26.19 8.76 5.072 4.472 8.444 10.426 10.4 17.32l2.28-.142c11.995-.75 22.802 1.725 30.63 8.63 7.827 6.907 11.63 17.323 12.38 29.32l.07 1.08c6.44 1.216 12.205 3.752 16.893 7.888 7.828 6.906 11.63 17.32 12.38 29.317l.197 3.12c.642.202 1.275.424 1.9.658l2.033-2.853 5.47-7.678 2.813-3.95 7.33 5.223 59.428 42.336c6.464-1.594 10.317-4.075 12.46-7.086 2.147-3.012 3.233-7.47 2.624-14.107l-71.258-51.03-7.318-5.24 5.19-7.246 6.67-9.365 7.33 5.223 80.335 57.226c6.464-1.593 10.32-4.074 12.463-7.085 2.144-3.01 3.23-7.457 2.625-14.082l-92.398-65.55-7.34-5.21 10.414-14.68 7.343 5.208 92.414 65.565c6.47-1.594 10.327-4.075 12.473-7.088 2.148-3.015 3.233-7.476 2.62-14.125l-110.44-79.71c-14.655 8.688-33.402 15.648-53.557 15.396-23.587-.295-48.817-11.566-67.377-40.05a9 9 0 0 1 4.343-13.327c13.014-4.945 26.163-10.17 39.343-15.354l-92.056-6.834zm12.902 107.62l-47.564 53.91c.927 6.746 3.04 10.942 5.887 13.454 2.847 2.512 7.275 4.085 14.084 4.164l47.563-53.908c-.927-6.747-3.04-10.945-5.887-13.457-2.847-2.512-7.274-4.084-14.084-4.162zm43.308 25.81l-53.713 60.88c.926 6.747 3.04 10.945 5.886 13.457 2.85 2.51 7.275 4.083 14.085 4.16l53.713-60.878c-.926-6.748-3.04-10.944-5.887-13.457-2.846-2.512-7.273-4.085-14.083-4.164zm29.34 38.286l-47.56 53.91c.927 6.746 3.04 10.943 5.887 13.456 2.848 2.512 7.275 4.083 14.084 4.162L232 359.44c-.927-6.75-3.04-10.947-5.887-13.46-2.847-2.512-7.274-4.083-14.084-4.162zm24.702 39.137l-38.794 44.28c.925 6.76 3.038 10.962 5.888 13.476 2.845 2.51 7.267 4.082 14.067 4.163l38.796-44.28c-.926-6.758-3.04-10.96-5.89-13.476-2.844-2.51-7.266-4.08-14.066-4.162zm35.342 4.79c1.694 4.62 2.673 9.74 3.014 15.192l.232 3.704-8.277 9.448 26.724 19.037c6.464-1.594 10.316-4.075 12.46-7.086 2.145-3.01 3.233-7.464 2.628-14.093l-36.78-26.2z" fill="#000" fill-opacity="1"></path></g></svg>

After

Width:  |  Height:  |  Size: 2.9 KiB

1
images/icons/strong.svg Normal file
View File

@ -0,0 +1 @@
<svg style="height: 512px; width: 512px;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><defs><radialGradient id="lorc-strong-gradient-0"><stop offset="0%" stop-color="#333232" stop-opacity="1"></stop><stop offset="100%" stop-color="#9e9c9c" stop-opacity="1"></stop></radialGradient></defs><rect fill="url(#lorc-strong-gradient-0)" height="512" width="512" rx="32" ry="32"></rect><g class="" style="" transform="translate(0,0)"><path d="M257.375 20.313c-13.418 0-26.07 7.685-35.938 21.75-9.868 14.064-16.343 34.268-16.343 56.75 0 22.48 6.475 42.654 16.344 56.718 9.868 14.066 22.52 21.75 35.937 21.75 13.418 0 26.038-7.684 35.906-21.75 9.87-14.063 16.376-34.236 16.376-56.718 0-22.48-6.506-42.685-16.375-56.75-9.867-14.064-22.487-21.75-35.905-21.75zm-150.25 43.062c-20.305.574-23.996 13.892-31.78 29.03-23.298 45.304-55.564 164.75-55.564 164.75l160.47-5.436 29.125 137.593-22.78 106.03h149.093l-22.282-106 24.25-137.5 157.53 5.313c.002 0-32.264-119.447-55.56-164.75-7.787-15.14-11.477-28.457-31.782-29.03-17.898 0-32.406 15.552-32.406 34.718 0 19.166 14.508 34.72 32.406 34.72 3.728 0 7.258-.884 10.594-2.126l7.937 74.406L309.437 165c-.285.42-.552.867-.843 1.28-12.436 17.724-30.604 29.69-51.22 29.69-20.614 0-38.782-11.966-51.218-29.69-.277-.395-.54-.816-.812-1.218l-116.75 40.032 7.937-74.406c3.337 1.242 6.867 2.125 10.595 2.125 17.898 0 32.406-15.553 32.406-34.72 0-19.165-14.507-34.718-32.405-34.718z" fill="#000" fill-opacity="1"></path></g></svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@ -70,15 +70,15 @@ export class TeDeumActorPJSheet extends ActorSheet {
// Update Inventory Item // Update Inventory Item
html.find('.item-edit').click(ev => { html.find('.item-edit').click(ev => {
const li = $(ev.currentTarget).parents(".item") const li = $(ev.currentTarget).parents(".item-id")
let itemId = li.data("item-id") let itemId = li.data("item-id")
const item = this.actor.items.get( itemId ); const item = this.actor.items.get( itemId );
item.sheet.render(true); item.sheet.render(true);
}); });
// Delete Inventory Item // Delete Inventory Item
html.find('.item-delete').click(ev => { html.find('.item-delete').click(ev => {
const li = $(ev.currentTarget).parents(".item") const li = $(ev.currentTarget).parents(".item-id")
EcrymeUtility.confirmDelete(this, li).catch("Error : No deletion confirmed") TeDeumUtility.confirmDelete(this, li).catch("Error : No deletion confirmed")
}) })
html.find('.item-add').click(ev => { html.find('.item-add').click(ev => {
let dataType = $(ev.currentTarget).data("type") let dataType = $(ev.currentTarget).data("type")
@ -107,9 +107,8 @@ export class TeDeumActorPJSheet extends ActorSheet {
} ); } );
html.find('.roll-competence').click((event) => { html.find('.roll-competence').click((event) => {
let categKey = $(event.currentTarget).data("category-key") let compId = $(event.currentTarget).data("comp-id")
let skillKey = $(event.currentTarget).data("skill-key") this.actor.rollCompetence(compId)
this.actor.rollSkill(categKey, skillKey)
}); });
html.find('.roll-arme').click((event) => { html.find('.roll-arme').click((event) => {
const armeId = $(event.currentTarget).data("arme-id") const armeId = $(event.currentTarget).data("arme-id")

View File

@ -1,5 +1,6 @@
/* -------------------------------------------- */ /* -------------------------------------------- */
import { TeDeumUtility } from "../common/tedeum-utility.js"; import { TeDeumUtility } from "../common/tedeum-utility.js";
import { TeDeumRollDialog } from "../dialogs/tedeum-roll-dialog.js";
/* -------------------------------------------- */ /* -------------------------------------------- */
/* -------------------------------------------- */ /* -------------------------------------------- */
@ -98,8 +99,28 @@ export class TeDeumActor extends Actor {
return comp; return comp;
} }
/* -------------------------------------------- */
calculMalusBlessures() {
let modifierBlessures = 0
let nbBlessures = 0
// Cumul des malus de blessures
for (let locKey in this.system.localisation) {
let loc = this.system.localisation[locKey]
let bDef = game.system.tedeum.config.blessures[loc.blessures]
modifierBlessures += bDef.modifier
nbBlessures += bDef.count
}
// Si le nombre de blessures est supérieur au score d'endurance, alors malus supplémentaire
let endurance = this.items.find(item => item.type == "competence" && item.name.toLowerCase() == "endurance")
if ( nbBlessures > endurance.system.score) {
modifierBlessures += -1
}
return modifierBlessures
}
/* -------------------------------------------- */ /* -------------------------------------------- */
updateCarac(c, key) { updateCarac(c, key) {
c.key = key
c.name = game.system.tedeum.config.caracteristiques[key].label c.name = game.system.tedeum.config.caracteristiques[key].label
c.generalqualite = game.system.tedeum.config.descriptionValeur[c.value].qualite c.generalqualite = game.system.tedeum.config.descriptionValeur[c.value].qualite
c.qualite = game.system.tedeum.config.descriptionValeur[c.value][key] c.qualite = game.system.tedeum.config.descriptionValeur[c.value][key]
@ -124,6 +145,19 @@ export class TeDeumActor extends Actor {
providence.dice = game.system.tedeum.config.providence[providence.value].diceValue providence.dice = game.system.tedeum.config.providence[providence.value].diceValue
return providence return providence
} }
/* -------------------------------------------- */
modifyProvidence(value) {
let providence = foundry.utils.duplicate(this.system.providence)
providence.value = Math.min(Math.max(providence.value + value, 0), 6)
this.update( { "system.providence": providence } )
}
/* -------------------------------------------- */
modifyXP(key, value) {
let xp = this.system.caracteristiques[key].experience
xp = Math.max(xp + value, 0)
this.update( { [`system.caracteristiques.${key}.experience`]: xp } )
}
/* -------------------------------------------- */ /* -------------------------------------------- */
filterCompetencesByCarac(key) { filterCompetencesByCarac(key) {
@ -132,6 +166,8 @@ export class TeDeumActor extends Actor {
if (c.system.isBase) { if (c.system.isBase) {
c.system.score = this.system.caracteristiques[c.system.caracteristique].value c.system.score = this.system.caracteristiques[c.system.caracteristique].value
} }
let caracDice = game.system.tedeum.config.descriptionValeur[this.system.caracteristiques[c.system.caracteristique].value].dice
c.system.formula = caracDice + "+" + c.system.score
}) })
return foundry.utils.deepClone( comp || {} ) return foundry.utils.deepClone( comp || {} )
} }
@ -275,26 +311,30 @@ export class TeDeumActor extends Actor {
rollData.actorImg = this.img rollData.actorImg = this.img
rollData.actorId = this.id rollData.actorId = this.id
rollData.img = this.img rollData.img = this.img
rollData.isReroll = false rollData.providence = this.prepareProvidence()
rollData.malusBlessures = this.calculMalusBlessures()
return rollData return rollData
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
getCommonCompetence(skillid) { getCommonCompetence(compId) {
let rollData = this.getCommonRollData() let rollData = this.getCommonRollData()
let competence = duplicate(this.items.find(it => it.type =="competence" && it.id == skillid)) let competence = duplicate(this.items.find(it => it.type =="competence" && it.id == compId))
rollData.competence = competence rollData.competence = competence
let c = foundry.utils.duplicate(this.system.caracteristiques[competence.system.caracteristique])
this.updateCarac( c, competence.system.caracteristique)
rollData.carac = c
rollData.img = competence.img rollData.img = competence.img
return rollData return rollData
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
rollCompetence(skillId) { rollCompetence(compId) {
let rollData = this.getCommonCompetence(skillId) let rollData = this.getCommonCompetence(compId)
rollData.mode = "competence" rollData.mode = "competence"
rollData.title = rollData.competence.name rollData.title = rollData.competence.name
this.startRoll(rollData).catch("Error on startRoll") this.startRoll(rollData).catch("Error on startRoll")
@ -319,7 +359,8 @@ export class TeDeumActor extends Actor {
/* -------------------------------------------- */ /* -------------------------------------------- */
async startRoll(rollData) { async startRoll(rollData) {
let rollDialog = await EcrymeRollDialog.create(this, rollData) console.log("startRoll", rollData)
let rollDialog = await TeDeumRollDialog.create(this, rollData)
rollDialog.render(true) rollDialog.render(true)
} }

View File

@ -48,7 +48,7 @@ export const TEDEUM_CONFIG = {
11: { valeur: 11, qualite: "Excellent", dice: "d12", negativeDice: "d6", savoir: "Docte", sensibilite: "Subtil", entregent: "Galant", puissance: "Musculeux", complexion: "Sanguin", adresse: "Preste" }, 11: { valeur: 11, qualite: "Excellent", dice: "d12", negativeDice: "d6", savoir: "Docte", sensibilite: "Subtil", entregent: "Galant", puissance: "Musculeux", complexion: "Sanguin", adresse: "Preste" },
12: { valeur: 12, qualite: "Admirable", dice: "d20", negativeDice: "d4", savoir: "Humaniste", sensibilite: "Spirituel", entregent: "Sémillant", puissance: "Hercule", complexion: "Aguerri", adresse: "Alerte" }, 12: { valeur: 12, qualite: "Admirable", dice: "d20", negativeDice: "d4", savoir: "Humaniste", sensibilite: "Spirituel", entregent: "Sémillant", puissance: "Hercule", complexion: "Aguerri", adresse: "Alerte" },
}, },
diceValeur: [ "d4", "d6", "d8", "d10", "d12", "d20" ],
degatsArmure : { degatsArmure : {
sansarmure : { label: "Sans armure"}, sansarmure : { label: "Sans armure"},
cuir : { label: "Cuir"}, cuir : { label: "Cuir"},
@ -110,5 +110,21 @@ export const TEDEUM_CONFIG = {
domesticite: { label: "Domesticité", id: "domesticite", value: 8 }, domesticite: { label: "Domesticité", id: "domesticite", value: 8 },
paysannerie: { label: "Paysannerie", id: "paysannerie", value: 9 }, paysannerie: { label: "Paysannerie", id: "paysannerie", value: 9 },
gueux: { label: "Gueux", id: "gueux", value: 10 }, gueux: { label: "Gueux", id: "gueux", value: 10 },
} },
bonusMalus: [
{ value: "-2", label: "-2 niveaux" },
{ value: "-1", label: "-1 niveau" },
{ value: "0", label: "Aucun" },
{ value: "1", label: "+1 niveau" },
{ value: "2", label: "+2 niveaux" }
],
blessures: [
{ value: 0, label: "Indemne", degatsMax: -1, count: 0, modifier: 0 },
{ value: 1, label: "Estafilade/Contusion", degatsMax: 2, count: 1, modifier: 0 },
{ value: 2, label: "Plaie", degatsMax: 4, count: 1, modifier: -1 },
{ value: 3, label: "Plaie béante", degatsMax: 6, count: 1, modifier: -2 },
{ value: 4, label: "Plaie atroce", degatsMax: 6, count: 1, horsCombat: true, modifier: -12 },
{ value: 5, label: "Tué net", degatsMax: 100, count: 1, horsCombat: true, mort: true, modifier: -12 }
]
} }

View File

@ -131,14 +131,14 @@ export class TeDeumUtility {
html.on("click", '.button-select-confront', event => { html.on("click", '.button-select-confront', event => {
let messageId = TeDeumUtility.findChatMessageId(event.currentTarget) let messageId = TeDeumUtility.findChatMessageId(event.currentTarget)
let message = game.messages.get(messageId) let message = game.messages.get(messageId)
let rollData = message.getFlag("world", "ecryme-rolldata") let rollData = message.getFlag("world", "te-deum-rolldata")
ui.notifications.info( game.i18n.localize("ECRY.chat.confrontselect")) ui.notifications.info( game.i18n.localize("ECRY.chat.confrontselect"))
TeDeumUtility.manageConfrontation(rollData) TeDeumUtility.manageConfrontation(rollData)
}) })
html.on("click", '.button-apply-cephaly-difficulty', event => { html.on("click", '.button-apply-cephaly-difficulty', event => {
let messageId = TeDeumUtility.findChatMessageId(event.currentTarget) let messageId = TeDeumUtility.findChatMessageId(event.currentTarget)
let message = game.messages.get(messageId) let message = game.messages.get(messageId)
let rollData = message.getFlag("world", "ecryme-rolldata") let rollData = message.getFlag("world", "te-deum-rolldata")
let difficulty = $("#" + rollData.rollId + "-cephaly-difficulty").val() let difficulty = $("#" + rollData.rollId + "-cephaly-difficulty").val()
TeDeumUtility.manageCephalyDifficulty(rollData, difficulty) TeDeumUtility.manageCephalyDifficulty(rollData, difficulty)
}) })
@ -317,22 +317,47 @@ export class TeDeumUtility {
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
static computeResults(rollData) { static async computeResults(rollData) {
rollData.isSuccess = false rollData.isSuccess = false
rollData.isReussiteCritique = false
rollData.isEchecCritique = false
if (!rollData.difficulty || rollData.difficulty == "-") { if (!rollData.difficulty || rollData.difficulty == "-") {
return return
} }
rollData.margin = rollData.total - rollData.difficulty rollData.margin = rollData.total - rollData.difficulty
if (rollData.total > rollData.difficulty) { if (rollData.total >= rollData.difficulty) {
rollData.isSuccess = true rollData.isSuccess = true
let maxMargin = rollData.skill.value + ((rollData.spec) ? 2 : 0) if (rollData.total >= 2 * rollData.difficulty) {
rollData.margin = Math.min(rollData.margin, maxMargin) rollData.isReussiteCritique = true
}
}
if (rollData.diceSum == 1) {
let critiqueRoll = await new Roll(rollData.carac.negativeDice).roll()
await this.showDiceSoNice(myRoll, game.settings.get("core", "rollMode"))
rollData.critiqueRoll = foundry.utils.duplicate(critiqueRoll)
if (critiqueRoll.total > rollData.competence.score) {
rollData.isEchecCritique = true
}
} }
} }
/* -------------------------------------------- */
static modifyDice(dice, bonusMalus) {
let newIndex = game.system.tedeum.config.diceValeur.indexOf(dice) + Number(bonusMalus)
newIndex = Math.min(Math.max(newIndex, 0), game.system.tedeum.config.diceValeur.length - 1)
return game.system.tedeum.config.diceValeur[newIndex]
}
/* -------------------------------------------- */ /* -------------------------------------------- */
static computeRollFormula(rollData, actor, isConfrontation = false) { static computeRollFormula(rollData, actor, isConfrontation = false) {
rollData.diceFormula = "" let diceFormula = ""
if (rollData.competence) {
let diceBase = this.modifyDice(rollData.carac.dice, rollData.bonusMalus+rollData.malusBlessures)
diceFormula = diceBase + "x + " + rollData.competence.system.score
}
if (rollData.enableProvidence) {
diceFormula += " + " + rollData.providence.dice
}
return diceFormula return diceFormula
} }
@ -342,26 +367,36 @@ export class TeDeumUtility {
let actor = game.actors.get(rollData.actorId) let actor = game.actors.get(rollData.actorId)
// Fix difficulty // Fix difficulty
if (!rollData.difficulty || rollData.difficulty == "-") { if (!rollData.difficulty || rollData.difficulty == "-") {
rollData.difficulty = 0 rollData.difficulty = 7
} }
rollData.difficulty = Number(rollData.difficulty) rollData.difficulty = game.system.tedeum.config.difficulte[rollData.difficulty].value
let diceFormula = this.computeRollFormula(rollData, actor) let diceFormula = this.computeRollFormula(rollData, actor)
// Performs roll // Performs roll
let myRoll = new Roll(diceFormula).roll({ async: false }) let myRoll = await new Roll(diceFormula).roll()
await this.showDiceSoNice(myRoll, game.settings.get("core", "rollMode")) await this.showDiceSoNice(myRoll, game.settings.get("core", "rollMode"))
rollData.roll = duplicate(myRoll) rollData.roll = foundry.utils.duplicate(myRoll)
rollData.total = myRoll.total rollData.total = myRoll.total
rollData.diceSum = myRoll.terms[0].total rollData.diceSum = myRoll.terms[0].total
rollData.diceFormula = diceFormula
this.computeResults(rollData) await this.computeResults(rollData)
let msg = await this.createChatWithRollMode(rollData.alias, { let msg = await this.createChatWithRollMode(rollData.alias, {
content: await renderTemplate(`systems/fvtt-te-deum/templates/chat/chat-generic-result.hbs`, rollData) content: await renderTemplate(`systems/fvtt-te-deum/templates/chat/chat-generic-result.hbs`, rollData)
}) })
await msg.setFlag("world", "ecryme-rolldata", rollData) await msg.setFlag("world", "te-deum-rolldata", rollData)
console.log("Rolldata result", rollData) console.log("Rolldata result", rollData)
// Decrement providence if needed
if (rollData.enableProvidence) {
actor.modifyProvidence(-1)
}
// Manage XP
if (rollData.isReussiteCritique || rollData.isEchecCritique) {
actor.modifyXP(rollData.carac.key, 1)
}
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
@ -454,6 +489,10 @@ export class TeDeumUtility {
type: "roll-data", type: "roll-data",
rollMode: game.settings.get("core", "rollMode"), rollMode: game.settings.get("core", "rollMode"),
difficulty: "pardefaut", difficulty: "pardefaut",
bonusMalus : "0",
isReroll : false,
enableProvidence : false,
malusBlessures: 0,
config: duplicate(game.system.tedeum.config) config: duplicate(game.system.tedeum.config)
} }
TeDeumUtility.updateWithTarget(rollData) TeDeumUtility.updateWithTarget(rollData)

View File

@ -6,7 +6,7 @@ export class TeDeumRollDialog extends Dialog {
static async create(actor, rollData) { static async create(actor, rollData) {
let options = { classes: ["tedeum-roll-dialog"], width: 540, height: 'fit-content', 'z-index': 99999 } let options = { classes: ["tedeum-roll-dialog"], width: 540, height: 'fit-content', 'z-index': 99999 }
let html = await renderTemplate('systems/fvtt-tedeum/templates/dialogs/roll-dialog-generic.hbs', rollData); let html = await renderTemplate('systems/fvtt-te-deum/templates/dialogs/roll-dialog-generic.hbs', rollData);
return new TeDeumRollDialog(actor, rollData, html, options); return new TeDeumRollDialog(actor, rollData, html, options);
} }
@ -38,12 +38,12 @@ export class TeDeumRollDialog extends Dialog {
/* -------------------------------------------- */ /* -------------------------------------------- */
roll() { roll() {
EcrymeUtility.rollEcryme(this.rollData) TeDeumUtility.rollTeDeum(this.rollData)
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
async refreshDialog() { async refreshDialog() {
const content = await renderTemplate("systems/fvtt-tedeum/templates/dialogs/roll-dialog-generic.hbs", this.rollData) const content = await renderTemplate("systems/fvtt-te-deum/templates/dialogs/roll-dialog-generic.hbs", this.rollData)
this.data.content = content this.data.content = content
this.render(true) this.render(true)
} }
@ -61,8 +61,15 @@ export class TeDeumRollDialog extends Dialog {
this.rollData.bonusMalusPerso = Number(event.currentTarget.value) this.rollData.bonusMalusPerso = Number(event.currentTarget.value)
}) })
html.find('#roll-difficulty').change((event) => { html.find('#roll-difficulty').change((event) => {
this.rollData.difficulty = Number(event.currentTarget.value) || 0 this.rollData.difficulty = String(event.currentTarget.value) || "pardefaut"
}) })
html.find('#roll-bonus-malus').change((event) => {
this.rollData.bonusMalus = event.currentTarget.value || "0"
})
html.find('#roll-enable-providence').change((event) => {
this.rollData.enableProvidence = event.currentTarget.checked
})
} }
} }

View File

@ -1 +1 @@
MANIFEST-000022 MANIFEST-000042

View File

@ -1,3 +1,8 @@
2024/05/06-06:55:13.182706 7f87a4a006c0 Recovering log #20 2024/05/30-18:20:39.192517 7f19c60006c0 Recovering log #40
2024/05/06-06:55:13.193417 7f87a4a006c0 Delete type=3 #18 2024/05/30-18:20:39.203008 7f19c60006c0 Delete type=3 #38
2024/05/06-06:55:13.193524 7f87a4a006c0 Delete type=0 #20 2024/05/30-18:20:39.203069 7f19c60006c0 Delete type=0 #40
2024/05/31-09:06:57.898180 7f19c56006c0 Level-0 table #45: started
2024/05/31-09:06:57.898214 7f19c56006c0 Level-0 table #45: 0 bytes OK
2024/05/31-09:06:57.905181 7f19c56006c0 Delete type=0 #43
2024/05/31-09:06:57.905376 7f19c56006c0 Manual compaction at level-0 from '!folders!4OPhigzcPv46qbWW' @ 72057594037927935 : 1 .. '!items!zwC0H39ar5Pl1l92' @ 0 : 0; will stop at (end)
2024/05/31-09:06:57.905426 7f19c56006c0 Manual compaction at level-1 from '!folders!4OPhigzcPv46qbWW' @ 72057594037927935 : 1 .. '!items!zwC0H39ar5Pl1l92' @ 0 : 0; will stop at (end)

View File

@ -1,8 +1,8 @@
2024/05/05-20:14:18.376388 7f87a54006c0 Recovering log #16 2024/05/29-14:03:31.123056 7f1708c006c0 Recovering log #36
2024/05/05-20:14:18.386554 7f87a54006c0 Delete type=3 #14 2024/05/29-14:03:31.132934 7f1708c006c0 Delete type=3 #34
2024/05/05-20:14:18.386658 7f87a54006c0 Delete type=0 #16 2024/05/29-14:03:31.132990 7f1708c006c0 Delete type=0 #36
2024/05/05-22:07:39.129357 7f879e4006c0 Level-0 table #21: started 2024/05/29-14:17:02.858350 7f17072006c0 Level-0 table #41: started
2024/05/05-22:07:39.129390 7f879e4006c0 Level-0 table #21: 0 bytes OK 2024/05/29-14:17:02.858400 7f17072006c0 Level-0 table #41: 0 bytes OK
2024/05/05-22:07:39.175466 7f879e4006c0 Delete type=0 #19 2024/05/29-14:17:02.865141 7f17072006c0 Delete type=0 #39
2024/05/05-22:07:39.175815 7f879e4006c0 Manual compaction at level-0 from '!folders!4OPhigzcPv46qbWW' @ 72057594037927935 : 1 .. '!items!zwC0H39ar5Pl1l92' @ 0 : 0; will stop at (end) 2024/05/29-14:17:02.865366 7f17072006c0 Manual compaction at level-0 from '!folders!4OPhigzcPv46qbWW' @ 72057594037927935 : 1 .. '!items!zwC0H39ar5Pl1l92' @ 0 : 0; will stop at (end)
2024/05/05-22:07:39.175892 7f879e4006c0 Manual compaction at level-1 from '!folders!4OPhigzcPv46qbWW' @ 72057594037927935 : 1 .. '!items!zwC0H39ar5Pl1l92' @ 0 : 0; will stop at (end) 2024/05/29-14:17:02.865414 7f17072006c0 Manual compaction at level-1 from '!folders!4OPhigzcPv46qbWW' @ 72057594037927935 : 1 .. '!items!zwC0H39ar5Pl1l92' @ 0 : 0; will stop at (end)

Binary file not shown.

Binary file not shown.

View File

@ -1 +1 @@
MANIFEST-000084 MANIFEST-000104

View File

@ -1,3 +1,7 @@
2024/05/06-06:55:13.169191 7f879fe006c0 Recovering log #82 2024/05/30-18:20:39.177986 7f19c74006c0 Recovering log #102
2024/05/06-06:55:13.180412 7f879fe006c0 Delete type=3 #80 2024/05/30-18:20:39.190129 7f19c74006c0 Delete type=3 #100
2024/05/06-06:55:13.180524 7f879fe006c0 Delete type=0 #82 2024/05/30-18:20:39.190232 7f19c74006c0 Delete type=0 #102
2024/05/31-09:06:57.885512 7f19c56006c0 Level-0 table #107: started
2024/05/31-09:06:57.885543 7f19c56006c0 Level-0 table #107: 0 bytes OK
2024/05/31-09:06:57.891829 7f19c56006c0 Delete type=0 #105
2024/05/31-09:06:57.905315 7f19c56006c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)

View File

@ -1,7 +1,7 @@
2024/05/05-20:14:18.363805 7f879f4006c0 Recovering log #78 2024/05/29-14:03:31.108608 7f17096006c0 Recovering log #98
2024/05/05-20:14:18.374315 7f879f4006c0 Delete type=3 #76 2024/05/29-14:03:31.119647 7f17096006c0 Delete type=3 #96
2024/05/05-20:14:18.374420 7f879f4006c0 Delete type=0 #78 2024/05/29-14:03:31.119700 7f17096006c0 Delete type=0 #98
2024/05/05-22:07:39.092489 7f879e4006c0 Level-0 table #83: started 2024/05/29-14:17:02.850741 7f17072006c0 Level-0 table #103: started
2024/05/05-22:07:39.092519 7f879e4006c0 Level-0 table #83: 0 bytes OK 2024/05/29-14:17:02.850779 7f17072006c0 Level-0 table #103: 0 bytes OK
2024/05/05-22:07:39.129220 7f879e4006c0 Delete type=0 #81 2024/05/29-14:17:02.858192 7f17072006c0 Delete type=0 #101
2024/05/05-22:07:39.175791 7f879e4006c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end) 2024/05/29-14:17:02.865350 7f17072006c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)

Binary file not shown.

Binary file not shown.

View File

@ -503,7 +503,6 @@ nav.sheet-tabs .item:after {
right: 0; right: 0;
height: 2rem; height: 2rem;
width: 1px; width: 1px;
border-right: 1px dashed rgba(52, 52, 52, 0.25);
} }
.sheet .tab[data-tab] { .sheet .tab[data-tab] {
@ -556,8 +555,8 @@ ul, li {
} }
.sheet li { .sheet li {
margin: 0.010rem; margin: 0.2rem;
padding: 0.25rem; padding: 0.15rem;
} }
.header-fields li { .header-fields li {
margin: 0; margin: 0;
@ -584,13 +583,11 @@ ul, li {
} }
.list-item { .list-item {
/*margin: 0.125rem;*/ margin: 0.125rem;
/*box-shadow: inset 0px 0px 1px #00000096; box-shadow: inset 0px 0px 1px #00000096;
border-radius: 0.25rem; border-radius: 0.25rem;
padding: 0.125rem;*/ padding: 0.125rem;
flex: 1 1 5rem; flex: 1 1 5rem;
display: flex !important;
color: rgba(19, 18, 18, 0.95);
} }
.list-item-shadow { .list-item-shadow {
background:rgba(87, 60, 32, 0.35); background:rgba(87, 60, 32, 0.35);
@ -648,12 +645,9 @@ ul, li {
flex-grow: 0; flex-grow: 0;
} }
.comp-column-list {
column-count: 4;
}
.comp-li { .comp-li {
max-width: 6rem; max-width: 8rem;
width: 6rem; width: 8rem;
} }
.description-label { .description-label {
flex-grow: 2; flex-grow: 2;
@ -731,8 +725,8 @@ ul, li {
flex-grow: 0; flex-grow: 0;
flex-shrink: 0; flex-shrink: 0;
flex-basis: 40px; flex-basis: 40px;
margin-right: 0.25rem; margin-right: 0.15rem;
margin-left: 0.25rem; margin-left: 0.15rem;
} }
.abilities-table { .abilities-table {
@ -830,7 +824,7 @@ ul, li {
} }
.sidebar-tab .directory-list .entity { .sidebar-tab .directory-list .entity {
border-top: 1px dashed rgba(0,0,0,0.25); border-top: 1px rgba(0,0,0,0.25);
border-bottom: 0 none; border-bottom: 0 none;
padding: 0.25rem 0; padding: 0.25rem 0;
} }
@ -1217,64 +1211,9 @@ ul, li {
max-width: 2rem; max-width: 2rem;
min-width: 2rem; min-width: 2rem;
} }
.item-name-label-header { .item-field {
flex-grow:2;
max-width: 12rem;
min-width: 12rem;
}
.item-name-label-header-long {
flex-grow:2;
max-width: 14rem;
min-width: 14rem;
}
.item-name-label-header-long2 {
flex-grow:2;
max-width: 24rem;
min-width: 24rem;
}
.item-name-label {
flex-grow:2;
max-width: 10rem;
min-width: 10rem;
}
.item-name-label-long {
flex-grow:2;
max-width: 12rem;
min-width: 12rem;
}
.item-name-label-long2 {
flex-grow:2;
max-width: 20rem;
min-width: 20rem;
}
.item-name-label-long3 {
flex-grow:2;
max-width: 18rem;
min-width: 18rem;
}
.item-name-label-short {
flex-grow:1;
max-width: 4rem;
min-width: 4rem;
}
.item-name-label-medium {
flex-grow:2;
max-width: 6rem;
min-width: 6rem;
}
.item-name-label-text-margin {
margin-top: 4px; margin-top: 4px;
} }
.item-name-label-long2 {
flex-grow:2;
max-width: 22rem;
min-width: 22rem;
}
.item-name-label-level2 {
flex-grow:2;
max-width: 9rem;
min-width: 9rem;
}
.item-field-label-short { .item-field-label-short {
flex-grow:1; flex-grow:1;
max-width: 4rem; max-width: 4rem;
@ -1295,9 +1234,27 @@ ul, li {
max-width: 10rem; max-width: 10rem;
min-width: 10rem; min-width: 10rem;
} }
.item-field-label-long14 {
flex-grow:1;
max-width: 14rem;
min-width: 14rem;
}
.carac-box {
background-color: rgba(155, 155, 150, 0.3);
box-shadow: inset 0px 0px 1px #00000096;
border-radius: 0.45rem;
}
.comp-box {
max-width: 16rem;
min-width: 16rem;
width: 16rem;
min-height: 1.6rem;
}
.item-control-end { .item-control-end {
align-self: flex-end; align-self: flex-end;
} }
.alternate-list { .alternate-list {
margin-top: 4px; margin-top: 4px;
flex-wrap: nowrap; flex-wrap: nowrap;
@ -1314,6 +1271,9 @@ ul, li {
min-width:3rem; min-width:3rem;
max-width: 3rem; max-width: 3rem;
} }
.item-left-pad {
margin-left: 4px;
}
.attribute-label { .attribute-label {
font-weight: bold; font-weight: bold;
} }

View File

@ -475,7 +475,6 @@ nav.sheet-tabs .item:after {
right: 0; right: 0;
height: 2rem; height: 2rem;
width: 1px; width: 1px;
border-right: 1px dashed rgba(52, 52, 52, 0.25);
} }
.sheet .tab[data-tab] { .sheet .tab[data-tab] {
@ -528,8 +527,8 @@ ul, li {
} }
.sheet li { .sheet li {
margin: 0.010rem; margin: 0.2rem;
padding: 0.25rem; padding: 0.15rem;
} }
.header-fields li { .header-fields li {
margin: 0; margin: 0;
@ -556,13 +555,11 @@ ul, li {
} }
.list-item { .list-item {
/*margin: 0.125rem;*/ margin: 0.125rem;
/*box-shadow: inset 0px 0px 1px #00000096; box-shadow: inset 0px 0px 1px rgba(0,0,0,0.58824);
border-radius: 0.25rem; border-radius: 0.25rem;
padding: 0.125rem;*/ padding: 0.125rem;
flex: 1 1 5rem; flex: 1 1 5rem;
display: flex !important;
color: rgba(19, 18, 18, 0.95);
} }
.list-item-shadow { .list-item-shadow {
background:rgba(87, 60, 32, 0.35); background:rgba(87, 60, 32, 0.35);
@ -620,13 +617,9 @@ ul, li {
flex-grow: 0; flex-grow: 0;
} }
.comp-column-list {
-moz-column-count: 4;
column-count: 4;
}
.comp-li { .comp-li {
max-width: 6rem; max-width: 8rem;
width: 6rem; width: 8rem;
} }
.description-label { .description-label {
flex-grow: 2; flex-grow: 2;
@ -704,8 +697,8 @@ ul, li {
flex-grow: 0; flex-grow: 0;
flex-shrink: 0; flex-shrink: 0;
flex-basis: 40px; flex-basis: 40px;
margin-right: 0.25rem; margin-right: 0.15rem;
margin-left: 0.25rem; margin-left: 0.15rem;
} }
.abilities-table { .abilities-table {
@ -805,7 +798,7 @@ ul, li {
} }
.sidebar-tab .directory-list .entity { .sidebar-tab .directory-list .entity {
border-top: 1px dashed rgba(0,0,0,0.25); border-top: 1px rgba(0,0,0,0.25);
border-bottom: 0 none; border-bottom: 0 none;
padding: 0.25rem 0; padding: 0.25rem 0;
} }
@ -1199,64 +1192,9 @@ ul, li {
max-width: 2rem; max-width: 2rem;
min-width: 2rem; min-width: 2rem;
} }
.item-name-label-header { .item-field {
flex-grow:2;
max-width: 12rem;
min-width: 12rem;
}
.item-name-label-header-long {
flex-grow:2;
max-width: 14rem;
min-width: 14rem;
}
.item-name-label-header-long2 {
flex-grow:2;
max-width: 24rem;
min-width: 24rem;
}
.item-name-label {
flex-grow:2;
max-width: 10rem;
min-width: 10rem;
}
.item-name-label-long {
flex-grow:2;
max-width: 12rem;
min-width: 12rem;
}
.item-name-label-long2 {
flex-grow:2;
max-width: 20rem;
min-width: 20rem;
}
.item-name-label-long3 {
flex-grow:2;
max-width: 18rem;
min-width: 18rem;
}
.item-name-label-short {
flex-grow:1;
max-width: 4rem;
min-width: 4rem;
}
.item-name-label-medium {
flex-grow:2;
max-width: 6rem;
min-width: 6rem;
}
.item-name-label-text-margin {
margin-top: 4px; margin-top: 4px;
} }
.item-name-label-long2 {
flex-grow:2;
max-width: 22rem;
min-width: 22rem;
}
.item-name-label-level2 {
flex-grow:2;
max-width: 9rem;
min-width: 9rem;
}
.item-field-label-short { .item-field-label-short {
flex-grow:1; flex-grow:1;
max-width: 4rem; max-width: 4rem;
@ -1277,9 +1215,27 @@ ul, li {
max-width: 10rem; max-width: 10rem;
min-width: 10rem; min-width: 10rem;
} }
.item-field-label-long14 {
flex-grow:1;
max-width: 14rem;
min-width: 14rem;
}
.carac-box {
background-color: rgba(155, 155, 150, 0.3);
box-shadow: inset 0px 0px 1px rgba(0,0,0,0.58824);
border-radius: 0.45rem;
}
.comp-box {
max-width: 16rem;
min-width: 16rem;
width: 16rem;
min-height: 1.6rem;
}
.item-control-end { .item-control-end {
align-self: flex-end; align-self: flex-end;
} }
.alternate-list { .alternate-list {
margin-top: 4px; margin-top: 4px;
flex-wrap: nowrap; flex-wrap: nowrap;
@ -1296,6 +1252,9 @@ ul, li {
min-width:3rem; min-width:3rem;
max-width: 3rem; max-width: 3rem;
} }
.item-left-pad {
margin-left: 4px;
}
.attribute-label { .attribute-label {
font-weight: bold; font-weight: bold;
} }

View File

@ -38,34 +38,34 @@
<div class="tab principal" data-group="primary" data-tab="principal"> <div class="tab principal" data-group="primary" data-tab="principal">
<div class="grid grid-2col"> <div class="grid grid-2col">
<ul>
<ul class="item-list alternate-list">
{{#each caracList as |char key|}} {{#each caracList as |char key|}}
<li class="flexrow"> <li class="item flexrow list-item carac-box">
<label class="item-field-label-medium">{{char.name}}</label> <label class="item-left-pad item-field item-field-label-medium">{{char.name}}</label>
<select type="text" class="input-numeric-short" name="system.caracteristiques.{{key}}.value"data-dtype="Number" /> <select type="text" class="input-numeric-short" name="system.caracteristiques.{{key}}.value"data-dtype="Number" />
{{selectOptions @root.config.descriptionValeur selected=char.value labelAttr="valeur"}} {{selectOptions @root.config.descriptionValeur selected=char.value labelAttr="valeur"}}
</select> </select>
<label class="">{{char.qualite}}</label> <label class="item-field item-field-label-medium">{{char.qualite}}</label>
<label class="">{{char.dice}}</label> <label class="item-field item-field-label-medium">{{char.dice}} ({{char.negativeDice}})</label>
<label class="">{{char.negativeDice}}</label>
</li> </li>
{{/each}} {{/each}}
</ul> </ul>
<ul> <ul class="item-list alternate-list">
<li class="flexrow"> <li class="item flexrow list-item carac-box">
<label class="item-field-label-medium">Providence</label> <label class="item-left-pad item-field item-field-label-medium">Providence</label>
<select type="text" class="input-numeric-short" name="system.providence.value" data-dtype="Number" /> <select type="text" class="input-numeric-short" name="system.providence.value" data-dtype="Number" />
{{selectOptions @root.config.providence selected=providence.value nameAttr="value" valueAttr="value" labelAttr="value"}} {{selectOptions @root.config.providence selected=providence.value nameAttr="value" valueAttr="value" labelAttr="value"}}
</select> </select>
<label class="item-field-label-long">{{providence.qualite}}</label> <label class="item-field item-field-label-long">{{providence.qualite}}</label>
<label class="item-field-label-short">{{providence.dice}}</label> <label class="item-field item-field-label-short">{{providence.dice}}</label>
</li> </li>
<li class="flexrow"> <li class="item flexrow list-item carac-box">
<label class="">Bienveillance</label> <label class="item-left-pad item-field item-field-label-medium">Bienveillance</label>
<input class="input-numeric-short" type="text" name="system.bienveillance.value" data-dtype="Number" /> <input class="input-numeric-short" type="text" name="system.bienveillance.value" data-dtype="Number" />
<label class="item-field-label-long"></label> <label class="item-field item-field-label-long"></label>
<label class="item-field-label-short"></label> <label class="item-field item-field -label-short"></label>
</li> </li>
</ul> </ul>
@ -79,76 +79,27 @@
{{#each arbreCompetences as |carac key|}} {{#each arbreCompetences as |carac key|}}
<ul> <ul>
<li class="flexrow"> <li class="flexrow">
<h3 class="item-field-label-medium" data-tooltip="Caracteristique">{{carac.name}}</h3> <h3 class="item-field-label-long14" data-tooltip="Caracteristique">{{carac.name}} : {{carac.qualite}}</h3>
<label class="">{{carac.value}}</label> <label class="item-field item-field-label-short">{{carac.value}}</label>
<label class="">{{carac.qualite}}</label> <label class="item-field item-field-label-medium">{{carac.dice}} (xp : {{carac.experience}})</label>
<label class="">{{carac.dice}}</label>
<label class="">{{carac.negativeDice}}</label>
</li> </li>
<ul class="comp-column-list"> <ul class="ul-level1 flexrow item-list alternate-list">
{{#each carac.competences as |comp skillkey|}} {{#each carac.competences as |comp skillkey|}}
<li class="flexrow comp-li"> <li class="flexrow carac-box comp-box item-id" data-item-id="{{comp.id}}">
<label class="item-field-label-medium">{{comp.name}}</label> <label class="item-left-pad item-field item-field-label-long">
<label class="item-field-label-medium">{{comp.system.score}}</label> <a class="roll-competence" data-comp-id="{{comp.id}}">{{comp.name}} {{comp.system.formula}} </a>
</label>
<span>&nbsp;</span>
<a class="item-control item-edit" title="Editer"><i class="fas fa-edit"></i></a>
<a class="item-control item-delete" title="Supprimer"><i class="fas fa-trash"></i></a>
</li> </li>
{{/each}} {{/each}}
</ul>
</ul>
</ul> </ul>
{{/each}} {{/each}}
</div> </div>
{{#if hasCephaly}}
{{!-- Cephaly Tab --}}
<div class="tab cephaly" data-group="primary" data-tab="cephaly">
<div class="grid grid-2col">
<div>
<h3>{{localize "ECRY.ui.cephaly"}}</h3>
<ul class="stat-list alternate-list item-list">
{{#each cephalySkills as |skill skillkey|}}
<li class="item flexrow list-item">
<span class="item-name-label-long">
<a class="roll-cephaly" data-category-key="cephaly" data-skill-key="{{skillkey}}">
<i class="fa-solid fa-dice-d6"></i>
{{localize skill.name}}
</a></span>
<select class="item-field-label-short" type="text" name="system.cephaly.skilllist.{{skillkey}}.value"
value="{{skill.value}}" data-dtype="Number">
{{#select skill.value}}
{{#each @root.config.skillLevel as |level key| }}
<option value="{{level}}">{{level}}</option>
{{/each}}
{{/select}}
</select>
</li>
{{/each}}
</ul>
</div>
<div>
{{#if annency}}
<h3>{{localize "ECRY.ui.annency"}} : <a class="open-annency" data-annency-id="{{annency.id}}">{{annency.name}}<i class="fas fa-edit"></i></a></h3>
<ul class="stat-list alternate-list item-list">
<li class="item flexrow list-item">
<span class="item-name-label-long">
{{annency.system.base.description}}
</span>
</li>
</ul>
{{/if}}
</div>
</div>
</div>
{{/if}}
<div class="tab traits" data-group="primary" data-tab="traits"> <div class="tab traits" data-group="primary" data-tab="traits">
<ul class="item-list alternate-list"> <ul class="item-list alternate-list">

View File

@ -1,37 +0,0 @@
<div class="chat-message-header">
{{#if actorImg}}
<img class="actor-icon" src="{{actorImg}}" alt="{{alias}}" />
{{/if}}
<h4 class="chat-actor-name">{{alias}}</h4>
</div>
<hr>
{{#if img}}
<div>
<img class="chat-icon" src="{{img}}" alt="{{alias}}" />
</div>
{{/if}}
<div>
<ul>
<li>{{localize "ECRY.ui.cephaly"}} : {{localize skill.name}}</li>
{{#if annency}}
<li>{{localize "ECRY.ui.annencybonus"}} {{annency.name}}: {{annencyBonus}}</li>
{{/if}}
{{#if (gt marginExecution 0)}}
<li>{{localize "ECRY.ui.execution"}} {{executionTotal}} vs {{difficulty}} : {{marginExecution}}</li>
<li>{{localize cephalySuccess}}</li>
{{/if}}
{{#if (gt marginPreservation 0)}}
<li>{{localize "ECRY.ui.preservation"}} {{preservationTotal}} vs {{difficulty}} : {{marginPreservation}}</li>
<li>{{localize cephalyFailure}}</li>
{{/if}}
</ul>
</div>
</div>

View File

@ -1,72 +0,0 @@
<div class="chat-message-header">
{{#if actorImg}}
<img class="actor-icon" src="{{actorImg}}" alt="{{alias}}" />
{{/if}}
<h4 class="chat-actor-name">{{alias}}</h4>
</div>
<hr>
{{#if img}}
<div>
<img class="chat-icon" src="{{img}}" alt="{{alias}}" />
</div>
{{/if}}
<div>
<ul>
{{#if (eq mode "cephaly")}}
<li>{{localize "ECRY.ui.cephaly"}} : {{localize skill.name}} </li>
{{else}}
<li>Confrontation : {{alias}} </li>
{{/if}}
<li>{{localize skill.name}}: {{skill.value}} </li>
{{#if spec}}
<li>{{localize "ECRY.chat.specialization"}} {{spec.name}} (+{{spec.system.bonus}}) </li>
{{/if}}
{{#each traitsBonus as |trait idx|}}
{{#if trait.activated}}
<li>{{localize "ECRY.chat.traitbonus"}}: {{trait.name}} ({{trait.system.level}}) </li>
{{/if}}
{{/each}}
{{#each traitsMalus as |trait idx|}}
{{#if trait.activated}}
<li>{{localize "ECRY.chat.traitmalus"}}: {{trait.name}} ({{trait.system.level}}) </li>
{{/if}}
{{/each}}
{{#if bonusMalusTraits}}
<li>{{localize "ECRY.chat.bonusmalustraits"}}: {{bonusMalusTraits}} </li>
{{/if}}
{{#if (isGM)}}
{{else}}
<li>{{localize "ECRY.ui.execution"}} : {{executionTotal}}</li>
<li>{{localize "ECRY.ui.preservation"}} : {{preservationTotal}}</li>
{{/if}}
</ul>
{{#if (isGM)}}
{{#if (eq mode "cephaly")}}
<div>
<span>{{localize "ECRY.chat.difficulty"}}</span>
<select id="{{rollId}}-cephaly-difficulty" name="cephaly-difficulty">
{{#for 1 20 1}}
<option value="{{this}}">{{this}}</option>
{{/for}}
</select>
</div>
<button class="button-apply-cephaly-difficulty">{{localize "ECRY.ui.cephalydifficulty"}}</button>
{{else}}
<button class="button-select-confront">{{localize "ECRY.ui.selectconfront"}}</button>
{{/if}}
{{else}}
<div>
{{localize "ECRY.chat.sentogm"}}
</div>
{{/if}}
</div>
</div>

View File

@ -1,54 +0,0 @@
<div class="chat-message-header">
{{#if actorImg}}
<img class="actor-icon" src="{{actorImg}}" alt="{{alias}}" />
{{/if}}
<h4 class="chat-actor-name">{{alias}}</h4>
</div>
<hr>
{{#if img}}
<div>
<img class="chat-icon" src="{{img}}" alt="{{alias}}" />
</div>
{{/if}}
<div>
<ul>
<li>Confrontation : {{rollData1.alias}} vs {{rollData2.alias}}</li>
<li>{{localize rollData1.skill.name}} ({{rollData1.skill.value}}) vs {{localize rollData2.skill.name}} ({{rollData2.skill.value}}) </li>
<li>{{rollData1.executionTotal}} vs {{rollData2.preservationTotal}} : {{marginExecution}}</li>
<li>{{rollData1.preservationTotal}} vs {{rollData2.executionTotal}} : {{marginPreservation}}</li>
{{#if rollData1.weapon}}
<li>{{rollData1.alias}} {{rollData1.weapon.name}} ({{rollData1.weapon.system.effect}})
</li>
{{/if}}
{{#if rollData2.weapon}}
<li>{{rollData2.alias}} {{rollData2.weapon.name}} ({{rollData2.weapon.system.effect}})</li>
{{/if}}
<li>{{localize "ECRY.ui.effect"}} {{localize "ECRY.ui.execution"}} : {{effectExecution}}</li>
{{#if impactExecution}}
<li>Impact {{rollData2.alias}} : 1 {{localize (concat "ECRY.ui." impactExecution)}}</li>
<button class="button-apply-impact" data-actor-id="{{rollData2.actorId}}" data-impact-type={{rollData1.skill.categKey}} data-impact="{{impactExecution}}">{{localize "ECRY.ui.applyimpact"}}</button>
{{/if}}
{{#if bonus2}}
<li>Bonus {{rollData2.alias}} : {{bonus2}}</li>
<button class="button-apply-bonus" data-actor-id="{{rollData2.actorId}}" data-bonus="{{bonus2}}">{{localize "ECRY.ui.applybonus"}}</button>
{{/if}}
<li>{{localize "ECRY.ui.effect"}} {{localize "ECRY.ui.preservation"}} : {{effectPreservation}}</li>
{{#if impactPreservation}}
<li>Impact {{rollData1.alias}} : 1 {{localize (concat "ECRY.ui." impactPreservation)}}</li>
<button class="button-apply-impact" data-actor-id="{{rollData1.actorId}}" data-impact-type={{rollData1.skill.categKey}} data-impact="{{impactPreservation}}">{{localize "ECRY.ui.applyimpact"}}</button>
{{/if}}
{{#if bonus1}}
<li>Bonus {{rollData1.alias}} : {{bonus1}}</li>
<button class="button-apply-bonus" data-actor-id="{{rollData1.actorId}}" data-bonus="{{bonus1}}">{{localize "ECRY.ui.applybonus"}}</button>
{{/if}}
</ul>
</div>
</div>

View File

@ -18,47 +18,33 @@
<div> <div>
<ul> <ul>
{{#if skill}} {{#if carac}}
<li>{{localize skill.name}}: {{skill.value}} </li> <li>{{carac.name}}: {{carac.qualite}} ({{carac.dice}}) </li>
{{#if spec}} {{/if}}
<li>{{localize "ECRY.chat.specialization"}} {{spec.name}} (+{{spec.system.bonus}}) </li> {{#if competence}}
{{/if}} <li>{{competence.name}}: {{competence.system.score}} </li>
{{/if}} {{/if}}
{{#if bonusMalus}}
{{#if impactMalus}} <li>Bonus/Malus: {{bonusMalus}} </li>
<li>{{localize "ECRY.ui.impactmalus"}}: {{impactMalus}} </li> {{/if}}
{{/if}} {{#if enableProvidence}}
<li>Un niveau de Providence a été utilisé !</li>
{{#if skillTranscendence}}
<li>{{localize "ECRY.ui.skilltranscendence"}}: {{skillTranscendence}} </li>
{{/if}}
{{#if traitsBonusList}}
{{#each traitsBonusList as |trait idx|}}
<li>{{localize "ECRY.chat.traitbonus"}}: {{trait.name}} ({{trait.system.level}}) </li>
{{/each}}
{{/if}}
{{#if traitsMalusList}}
{{#each traitsMalusList as |trait idx|}}
<li>{{localize "ECRY.chat.traitmalus"}}: {{trait.name}} ({{trait.system.level}}) </li>
{{/each}}
{{/if}}
{{#if bonusMalusTraits}}
<li>{{localize "ECRY.chat.bonusmalustraits"}}: {{bonusMalusTraits}} </li>
{{/if}}
<li>{{localize "ECRY.chat.formula"}}: {{diceFormula}} </li>
<li>{{localize "ECRY.chat.dicesum"}}: {{diceSum}} </li>
<li>{{localize "ECRY.chat.result"}}: {{total}} </li>
{{#if difficulty}}
<li>{{localize "ECRY.chat.difficulty"}}: {{difficulty}} - {{localize "ECRY.chat.margin"}}: {{margin}} </li>
{{#if isSuccess}}
<li><label class="chat-result-text chat-result-success ">{{localize "ECRY.chat.success"}}</label></li>
{{else}}
<li><label class="chat-result-text chat-result-failure">{{localize "ECRY.chat.failure"}}</label></li>
{{/if}}
{{/if}} {{/if}}
<li>Dés: {{diceFormula}} </li>
<li>Difficulté: {{difficulty}} </li>
<li><strong>Résultat: {{total}}</strong> </li>
{{#if isSuccess}}
<li><strong>Succès !</strong> </li>
{{#if isReussiteCritique}}
<li><strong>Réussite critique ! 1 XP gagné en {{carac.name}}.</strong> </li>
{{/if}}
{{else}}
<li><strong>Echec !</strong> </li>
{{#if isEchecCritique}}
<li><strong>Echec critique ! 1 XP gagné en {{carac.name}}.</strong> </li>
{{/if}}
{{/if}}
</ul> </ul>
</div> </div>

View File

@ -7,18 +7,43 @@
</header> </header>
<div class="flexcol"> <div class="flexcol">
<div class="flexrow">
<span class="roll-dialog-label">Caracteristique </span>
<span class="roll-dialog-label">{{carac.name}} : {{carac.qualite}} ({{carac.dice}})</span>
</div>
{{> systems/fvtt-ecryme/templates/dialogs/partial-common-roll-dialog.hbs}} {{#if competence}}
<div class="flexrow">
<span class="roll-dialog-label">Compétence </span>
<span class="roll-dialog-label">{{competence.name}} ({{competence.system.score}})</span>
</div>
{{/if}}
{{#if malusBlessures}}
<div class="flexrow">
<span class="roll-dialog-label">Malus Blessures </span>
<span class="roll-dialog-label">{{malusBlessures}} niveaux</span>
</div>
{{/if}}
<div class="flexrow">
<span class="roll-dialog-label">Bonus/Malus : </span>
<select class="" type="text" id="roll-bonus-malus" value="{{bonusMalus}}" data-dtype="Number">
{{selectOptions config.bonusMalus selected=bonusMalus labelAttr="label" valueAttr="value" nameAttr="value"}}
</select>
</div>
{{#if providence.value}}
<div class="flexrow">
<span class="roll-dialog-label">Utiliser la Providence ({{providence.dice}})</span>
<input type="checkbox" id="roll-enable-providence" {{checked enableProvidence}} />
</div>
{{/if}}
<div class="flexrow"> <div class="flexrow">
<span class="roll-dialog-label">Difficulté : </span> <span class="roll-dialog-label">Difficulté : </span>
<select class="" type="text" id="roll-difficulty" value="{{difficulty}}" data-dtype="Number"> <select class="" type="text" id="roll-difficulty" value="{{difficulty}}" data-dtype="Number">
{{#select difficulty}} {{selectOptions config.difficulte selected=difficulty labelAttr="label"}}
{{#each config.difficulty as |diffData value| }}
<option value="{{diffData.value}}">{{localize diffData.difficulty}} / {{localize diffData.frequency}}
({{diffData.value}})</option>
{{/each}}
{{/select}}
</select> </select>
</div> </div>