Corrections sur attaque, equipement et compétences à 7

This commit is contained in:
2026-03-27 14:26:41 +01:00
parent e7504d0ecb
commit 896fa512b5
11 changed files with 69 additions and 36 deletions

View File

@@ -2682,3 +2682,19 @@ ul, li {
opacity: 0.9;
}
}
/* Fix: item-controls toujours visibles dans le tab combat (armures, boucliers) */
.fvtt-yggdrasill .sheet-body[data-tab="combat"] .item.flexrow {
flex-wrap: nowrap;
align-items: center;
.item-controls {
display: flex !important;
visibility: visible !important;
opacity: 1 !important;
position: static !important;
flex: 0 0 auto;
align-items: center;
gap: 0.25rem;
}
}

View File

@@ -75,7 +75,7 @@ export default class YggdrasillPersonnageSheet extends YggdrasillActorSheet {
}
context.optionsBase = {}
for (let i = 0; i <= 5; i++) {
for (let i = 0; i <= 10; i++) {
context.optionsBase[i] = i.toString()
}

View File

@@ -223,19 +223,20 @@ export class YggdrasillRollDialog {
* @private
*/
static _updateAttackData(rollData, actor) {
const config = game.system.yggdrasill.config
const attackType = rollData.attackDef.typeAttack
const attackMode = config.attackMode?.[attackType]
if (attackMode) {
rollData.attackData = rollData.attackData || {}
rollData.attackData.categName = attackMode.categName
rollData.attackData.caracName = attackMode.caracName
rollData.attackData.malus = this._computeValue(attackMode.malus, actor)
rollData.attackData.bonusdegats = this._computeValue(attackMode.bonusdegats, actor)
rollData.attackData.protection = this._computeValue(attackMode.protection, actor)
rollData.attackData.label = attackMode.label
rollData.attackData.description = attackMode.description
let attackData
if (rollData.mode === "armecc") {
attackData = actor.getAttaqueData(attackType)
} else {
attackData = actor.getTirData(attackType)
}
if (attackData) {
rollData.attackDef = { ...rollData.attackDef, ...attackData }
rollData.attackData = { ...rollData.attackDef }
// Mettre à jour la caractéristique utilisée pour le jet (nbDice)
rollData.selectedCarac = attackData.carac
}
}

View File

@@ -7,7 +7,7 @@ export default class ArmureDataModel extends foundry.abstract.TypeDataModel {
return {
categorie: new fields.StringField({ initial: "" }),
equipe: new fields.BooleanField({ initial: false }),
protection: new fields.StringField({ initial: "" }),
protection: new fields.NumberField({ initial: 0, integer: true }),
enc: new fields.NumberField({ initial: 0, integer: true }),
valeur: new fields.NumberField({ initial: 0, integer: true }),
description: new fields.HTMLField({ initial: "" })

View File

@@ -597,18 +597,19 @@ export class YggdrasillActor extends Actor {
let attackData = foundry.utils.duplicate(attackMode[mode]);
if ( attackData){
attackData.mode = mode;
attackData.carac = foundry.utils.duplicate(this.system.carac[attackData.categName].carac[attackData.caracName]);
const categ = this.system.carac[attackData.categName];
attackData.carac = foundry.utils.duplicate(categ?.carac[attackData.caracName] ?? {});
if ( attackData.malus != 0) {
let malusTab = attackData.malus.split(';');
attackData.malus = this.system.carac[attackData.categName].carac[malusTab[0]].value * Number(malusTab[1])
attackData.malus = (categ?.carac[malusTab[0]]?.value ?? 0) * Number(malusTab[1]);
}
if ( attackData.protection != 0) {
let malusTab = attackData.protection.split(';');
attackData.protection = this.system.carac[attackData.categName].carac[malusTab[0]].value * Number(malusTab[1])
attackData.protection = (categ?.carac[malusTab[0]]?.value ?? 0) * Number(malusTab[1]);
}
if ( attackData.bonusdegats != 0) {
let malusTab = attackData.bonusdegats.split(';');
attackData.bonusdegats = this.system.carac[attackData.categName].carac[malusTab[0]].value * Number(malusTab[1])
attackData.bonusdegats = (categ?.carac[malusTab[0]]?.value ?? 0) * Number(malusTab[1]);
}
}
return attackData;
@@ -619,18 +620,19 @@ export class YggdrasillActor extends Actor {
let attackData = foundry.utils.duplicate( tirMode[mode] );
if ( attackData){
attackData.mode = mode;
attackData.carac = foundry.utils.duplicate(this.system.carac[attackData.categName].carac[attackData.caracName]);
const categ = this.system.carac[attackData.categName];
attackData.carac = foundry.utils.duplicate(categ?.carac[attackData.caracName] ?? {});
if ( attackData.malus != 0) {
let malusTab = attackData.malus.split(';');
attackData.malus = this.system.carac[attackData.categName].carac[malusTab[0]].value * Number(malusTab[1])
attackData.malus = (categ?.carac[malusTab[0]]?.value ?? 0) * Number(malusTab[1]);
}
if ( attackData.protection != 0) {
let malusTab = attackData.protection.split(';');
attackData.protection = this.system.carac[attackData.categName].carac[malusTab[0]].value * Number(malusTab[1])
attackData.protection = (categ?.carac[malusTab[0]]?.value ?? 0) * Number(malusTab[1]);
}
if ( attackData.bonusdegats != 0) {
let malusTab = attackData.bonusdegats.split(';');
attackData.bonusdegats = this.system.carac[attackData.categName].carac[malusTab[0]].value * Number(malusTab[1])
attackData.bonusdegats = (categ?.carac[malusTab[0]]?.value ?? 0) * Number(malusTab[1]);
}
}
return attackData;
@@ -730,13 +732,13 @@ export class YggdrasillActor extends Actor {
for( let item of this.items) {
if (item.type == "equipement" || item.type == "armecc"
|| item.type == "armedist" || item.type == "armure" || item.type == "monnaie" || item.type == "bouclier") {
encTotal += (item.system.enc * item.system.quantite);
encTotal += (item.system.enc * (item.system.quantite || 1));
}
}
for( let item of this.items) {
if (item.type == "bouclier" && item.system.equipe) {
encTotal -= (item.system.enc * item.system.quantite);
encTotal += (item.system.enccomb * item.system.quantite);
encTotal -= (item.system.enc * (item.system.quantite || 1));
encTotal += (item.system.enccomb * (item.system.quantite || 1));
}
}
return encTotal;

View File

@@ -6,7 +6,7 @@ export class YggdrasillCombat extends Combat {
/* -------------------------------------------- */
async rollInitiative(ids, formula = undefined, messageOptions = {} ) {
ids = typeof ids === "string" ? [ids] : ids;
const currentId = this.combatant._id;
const currentId = this.combatant?.id;
for (let cId = 0; cId < ids.length; cId++) {
const c = this.combatants.get(ids[cId]);
let initBonus = c.actor ? c.actor.getInitiativeScore() : 0;
@@ -17,7 +17,7 @@ export class YggdrasillCombat extends Combat {
}
if (roll.total <= 0) roll.total = 0;
//console.log("Compute init for", roll.total);
let id = c._id || c.id;
let id = c.id;
await this.updateEmbeddedDocuments("Combatant", [{ _id: id, initiative: roll.total }]);
// Send a chat message
@@ -25,9 +25,9 @@ export class YggdrasillCombat extends Combat {
let messageData = foundry.utils.mergeObject(
{
speaker: {
scene: canvas.scene._id,
actor: c.actor ? c.actor._id : null,
token: c.token._id,
scene: canvas.scene.id,
actor: c.actor ? c.actor.id : null,
token: c.token.id,
alias: c.token.name,
sound: CONFIG.sounds.dice,
},

View File

@@ -137,7 +137,7 @@ Hooks.once("ready", function () {
ui.notifications.info("Attention ! Vous n'est connecté à aucun personnage");
ChatMessage.create({
content: "<b>WARNING</b> Le joueur " + game.user.name + " n'est pas connecté à un personnage !",
user: game.user._id
user: game.user.id
});
}

View File

@@ -162,7 +162,7 @@ export class YggdrasillUtility {
/* -------------------------------------------- */
static async rollYggdrasill( rollData ) {
let sumDice = ( rollData.isEpuise | rollData.isMeurtri) ? 1 : 2;
let sumDice = ( rollData.isEpuise || rollData.isMeurtri) ? 1 : 2;
// Init stuff
let isCritical = false;
@@ -283,7 +283,7 @@ export class YggdrasillUtility {
/* -------------------------------------------- */
static getUsers(filter) {
return game.users.filter(filter).map(user => user.system._id);
return game.users.filter(filter).map(user => user.id);
}
/* -------------------------------------------- */
static getWhisperRecipients(rollMode, name) {

View File

@@ -2857,5 +2857,19 @@ li {
opacity: 0.9;
}
}
/* Fix: item-controls toujours visibles dans le tab combat (armures, boucliers) */
.fvtt-yggdrasill .sheet-body[data-tab="combat"] .item.flexrow {
flex-wrap: nowrap;
align-items: center;
}
.fvtt-yggdrasill .sheet-body[data-tab="combat"] .item.flexrow .item-controls {
display: flex !important;
visibility: visible !important;
opacity: 1 !important;
position: static !important;
flex: 0 0 auto;
align-items: center;
gap: 0.25rem;
}
/*# sourceMappingURL=yggdrasill.css.map */
/*# sourceMappingURL=yggdrasill.css.map */

File diff suppressed because one or more lines are too long

View File

@@ -351,7 +351,7 @@
</ul>
<div><h4>Armures (Protection Totale : {{protectionTotal}}) </h4></div>
<ul class="item-list alternate-list">
<ul class="stat-list alternate-list">
<li class="stat flexrow" >
<span class="stat-label flexrow">Nom</span>
<span class="stat-label flexrow">Catégorie</span>
@@ -375,7 +375,7 @@
</ul>
<div><h4>Bouclier (Bonus de défense physique : {{dpBouclier}}) </h4></div>
<ul class="item-list alternate-list">
<ul class="stat-list alternate-list">
<li class="stat flexrow" >
<span class="stat-label flexrow">Nom</span>
<span class="stat-label flexrow">Catégorie</span>