diff --git a/changelog.md b/changelog.md index 997d3178..f830ae20 100644 --- a/changelog.md +++ b/changelog.md @@ -3,7 +3,9 @@ - le propriétaire est indiqué dans les feuilles d'équipements/compétences/... - Ecaille d'efficacité - l'écaille d'efficacité est prise en compte même si on n'utilise pas le ciblage en combat + - l'écaille d'efficacité est prise en compte pour l'initiative - Corrections + - l'état général est pris en compte pour les initiatives - le tooltip de l'initiative affiche correctement l'initiative ## 12.0.7 - La propriété d'Astrobazzarh diff --git a/module/rdd-combat.js b/module/rdd-combat.js index 014f4e7b..66cbe453 100644 --- a/module/rdd-combat.js +++ b/module/rdd-combat.js @@ -75,6 +75,12 @@ export class RdDCombatManager extends Combat { } } } + static calculAjustementInit(actor, arme) { + const efficacite = (arme?.system.magique) ? arme.system.ecaille_efficacite : 0 + const etatGeneral = actor.getEtatGeneral() ?? 0 + return efficacite + etatGeneral + + } /************************************************************************************/ async rollInitiative(ids, formula = undefined, messageOptions = {}) { @@ -84,12 +90,14 @@ export class RdDCombatManager extends Combat { // calculate initiative for (let cId = 0; cId < ids.length; cId++) { const combatant = this.combatants.get(ids[cId]); - let rollFormula = formula ?? RdDCombatManager.formuleInitiative(2, 10, 0, 0); + const ajustement = RdDCombatManager.calculAjustementInit(combatant.actor, undefined); + let rollFormula = formula ?? RdDCombatManager.formuleInitiative(2, 10, 0, ajustement); + if (!formula) { if (combatant.actor.type == 'creature' || combatant.actor.type == 'entite') { const competence = combatant.actor.items.find(it => RdDItemCompetenceCreature.isCompetenceAttaque(it)) if (competence) { - rollFormula = RdDCombatManager.formuleInitiative(2, competence.system.carac_value, competence.system.niveau, 0); + rollFormula = RdDCombatManager.formuleInitiative(2, competence.system.carac_value, competence.system.niveau, etatGeneral); } } else { const armeCombat = combatant.actor.itemTypes['arme'].find(it => it.system.equipe) @@ -109,9 +117,9 @@ export class RdDCombatManager extends Combat { if (competence && competence.system.defaut_carac) { const carac = combatant.actor.system.carac[competence.system.defaut_carac].value; const niveau = competence.system.niveau; - const bonusEcaille = (armeCombat?.system.magique) ? armeCombat.system.ecaille_efficacite : 0; - //console.log("RollInitiative", competence, carac, niveau, bonusEcaille); - rollFormula = RdDCombatManager.formuleInitiative(2, carac, niveau, bonusEcaille); + + const ajustement = RdDCombatManager.calculAjustementInit(combatant.actor, armeCombat) + rollFormula = RdDCombatManager.formuleInitiative(2, carac, niveau, ajustement); } else { ui.notifications.warn(`Votre arme ${armeCombat.name} n'a pas de compétence renseignée`); } @@ -215,13 +223,16 @@ export class RdDCombatManager extends Combat { static $prepareAttaqueArme(infoAttaque) { const comp = infoAttaque.competences.find(c => c.name == infoAttaque.competence); - const attaque = foundry.utils.duplicate(infoAttaque.arme); + const arme = infoAttaque.arme; + const attaque = foundry.utils.duplicate(arme); attaque.action = 'attaque'; attaque.system.competence = infoAttaque.competence; attaque.system.dommagesReels = infoAttaque.dommagesReel; attaque.system.infoMain = infoAttaque.infoMain; attaque.system.niveau = comp.system.niveau; - attaque.system.initiative = RdDCombatManager.calculInitiative(comp.system.niveau, infoAttaque.carac[comp.system.defaut_carac].value); + + const ajustement = (arme?.parent?.getEtatGeneral() ?? 0) + (arme?.system.magique) ? arme.system.ecaille_efficacite : 0; + attaque.system.initiative = RdDCombatManager.calculInitiative(comp.system.niveau, infoAttaque.carac[comp.system.defaut_carac].value, ajustement); return attaque; } @@ -336,7 +347,6 @@ export class RdDCombatManager extends Combat { ui.notifications.warn(`Le combatant ${combatant.name} n'est pas associé à un acteur, impossible de déterminer ses actions de combat!`) return []; } - let initInfo = ""; let initOffset = 0; let caracForInit = 0; @@ -371,9 +381,9 @@ export class RdDCombatManager extends Combat { initOffset = RdDCombatManager._baseInitOffset(compData.system.categorie, action); } - let malus = combatant.actor.getEtatGeneral(); // Prise en compte état général // Cas des créatures et entités vs personnages - let rollFormula = RdDCombatManager.formuleInitiative(initOffset, caracForInit, compNiveau, malus); + const ajustement = RdDCombatManager.calculAjustementInit(combatant.actor, action) + let rollFormula = RdDCombatManager.formuleInitiative(initOffset, caracForInit, compNiveau, ajustement); // Garder la trace de l'arme/compétence utilisée pour l'iniative combatant.initiativeData = { arme: action } // pour reclasser l'init au round 0 game.combat.rollInitiative(combatantId, rollFormula, { initInfo: initInfo });