|  |  |  | @@ -100,14 +100,14 @@ export class RdDCombatManager extends Combat { | 
		
	
		
			
				|  |  |  |  |             const carac = combatant.actor.data.data.carac[competence.data.defaut_carac].value; | 
		
	
		
			
				|  |  |  |  |             const niveau = competence.data.niveau; | 
		
	
		
			
				|  |  |  |  |             const bonusEcaille = (armeCombat?.data.magique) ? armeCombat.data.ecaille_efficacite : 0; | 
		
	
		
			
				|  |  |  |  |             rollFormula = RdDCombatManager.formuleInitiative(2,  carac, niveau, bonusEcaille); | 
		
	
		
			
				|  |  |  |  |             rollFormula = RdDCombatManager.formuleInitiative(2, carac, niveau, bonusEcaille); | 
		
	
		
			
				|  |  |  |  |           } | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
		
			
				|  |  |  |  |       //console.log("Combatat", c); | 
		
	
		
			
				|  |  |  |  |       const roll = combatant.getInitiativeRoll(rollFormula); | 
		
	
		
			
				|  |  |  |  |       if ( !roll.total) { | 
		
	
		
			
				|  |  |  |  |         roll.evaluate( {async: false}); | 
		
	
		
			
				|  |  |  |  |       if (!roll.total) { | 
		
	
		
			
				|  |  |  |  |         roll.evaluate({ async: false }); | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
		
			
				|  |  |  |  |       if (roll.total <= 0) roll.total = 0.00; | 
		
	
		
			
				|  |  |  |  |       console.log("Compute init for", rollFormula, roll.total, combatant); | 
		
	
	
		
			
				
					
					|  |  |  | @@ -187,7 +187,7 @@ export class RdDCombatManager extends Combat { | 
		
	
		
			
				|  |  |  |  |             action.data.dommagesReels = Number(tableauDegats[0]); | 
		
	
		
			
				|  |  |  |  |             arme2main.data.dommagesReels = Number(tableauDegats[1]); | 
		
	
		
			
				|  |  |  |  |           } | 
		
	
		
			
				|  |  |  |  |           else{ | 
		
	
		
			
				|  |  |  |  |           else { | 
		
	
		
			
				|  |  |  |  |             ui.notifications.info("Les dommages de l'arme à 1/2 mains " + action.name + " ne sont pas corrects (ie sous la forme X/Y)"); | 
		
	
		
			
				|  |  |  |  |           } | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
	
		
			
				
					
					|  |  |  | @@ -197,24 +197,23 @@ export class RdDCombatManager extends Combat { | 
		
	
		
			
				|  |  |  |  |   } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |   static listActionsPossessions(actor) { | 
		
	
		
			
				|  |  |  |  |     return RdDCombatManager._indexActions(actor.getPossessions().map(p => | 
		
	
		
			
				|  |  |  |  |       { | 
		
	
		
			
				|  |  |  |  |         return { | 
		
	
		
			
				|  |  |  |  |           name: p.name, | 
		
	
		
			
				|  |  |  |  |           action: 'conjurer', | 
		
	
		
			
				|  |  |  |  |           data: { | 
		
	
		
			
				|  |  |  |  |             competence: p.name, | 
		
	
		
			
				|  |  |  |  |             possessionid: p.data.data.possessionid, | 
		
	
		
			
				|  |  |  |  |           } | 
		
	
		
			
				|  |  |  |  |     return RdDCombatManager._indexActions(actor.getPossessions().map(p => { | 
		
	
		
			
				|  |  |  |  |       return { | 
		
	
		
			
				|  |  |  |  |         name: p.name, | 
		
	
		
			
				|  |  |  |  |         action: 'conjurer', | 
		
	
		
			
				|  |  |  |  |         data: { | 
		
	
		
			
				|  |  |  |  |           competence: p.name, | 
		
	
		
			
				|  |  |  |  |           possessionid: p.data.data.possessionid, | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |       })); | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
		
			
				|  |  |  |  |     })); | 
		
	
		
			
				|  |  |  |  |   } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |   /* -------------------------------------------- */ | 
		
	
		
			
				|  |  |  |  |   static listActionsCombat(combatant) { | 
		
	
		
			
				|  |  |  |  |     const actor = combatant.actor; | 
		
	
		
			
				|  |  |  |  |     let actions = RdDCombatManager.listActionsPossessions(actor); | 
		
	
		
			
				|  |  |  |  |     if (actions.length>0) { | 
		
	
		
			
				|  |  |  |  |     if (actions.length > 0) { | 
		
	
		
			
				|  |  |  |  |       return actions; | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     let items = actor.data.items; | 
		
	
	
		
			
				
					
					|  |  |  | @@ -329,19 +328,19 @@ export class RdDCombatManager extends Combat { | 
		
	
		
			
				|  |  |  |  |     } else { | 
		
	
		
			
				|  |  |  |  |       compData = Misc.data(RdDItemCompetence.findCompetence(combatant.actor.data.items, action.data.competence)); | 
		
	
		
			
				|  |  |  |  |       compNiveau = compData.data.niveau; | 
		
	
		
			
				|  |  |  |  |         initInfo = action.name + " / " + action.data.competence; | 
		
	
		
			
				|  |  |  |  |           | 
		
	
		
			
				|  |  |  |  |         if (combatant.actor.data.type == 'creature' || combatant.actor.data.type == 'entite') { | 
		
	
		
			
				|  |  |  |  |           caracForInit = compData.data.carac_value; | 
		
	
		
			
				|  |  |  |  |           if (compData.data.categorie == "lancer") { | 
		
	
		
			
				|  |  |  |  |             initOffset = 7; | 
		
	
		
			
				|  |  |  |  |           } | 
		
	
		
			
				|  |  |  |  |           else { | 
		
	
		
			
				|  |  |  |  |             initOffset = 5; | 
		
	
		
			
				|  |  |  |  |           } | 
		
	
		
			
				|  |  |  |  |         } else { | 
		
	
		
			
				|  |  |  |  |           caracForInit = Misc.data(combatant.actor).data.carac[compData.data.defaut_carac].value; | 
		
	
		
			
				|  |  |  |  |           initOffset = RdDCombatManager._baseInitOffset(compData.data.categorie, action); | 
		
	
		
			
				|  |  |  |  |       initInfo = action.name + " / " + action.data.competence; | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |       if (combatant.actor.data.type == 'creature' || combatant.actor.data.type == 'entite') { | 
		
	
		
			
				|  |  |  |  |         caracForInit = compData.data.carac_value; | 
		
	
		
			
				|  |  |  |  |         if (compData.data.categorie == "lancer") { | 
		
	
		
			
				|  |  |  |  |           initOffset = 7; | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |         else { | 
		
	
		
			
				|  |  |  |  |           initOffset = 5; | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |       } else { | 
		
	
		
			
				|  |  |  |  |         caracForInit = Misc.data(combatant.actor).data.carac[compData.data.defaut_carac].value; | 
		
	
		
			
				|  |  |  |  |         initOffset = RdDCombatManager._baseInitOffset(compData.data.categorie, action); | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
	
		
			
				
					
					|  |  |  | @@ -372,7 +371,7 @@ export class RdDCombatManager extends Combat { | 
		
	
		
			
				|  |  |  |  |   static displayInitiativeMenu(html, combatantId) { | 
		
	
		
			
				|  |  |  |  |     console.log("Combatant ; ", combatantId); | 
		
	
		
			
				|  |  |  |  |     const combatant = game.combat.combatants.get(combatantId); | 
		
	
		
			
				|  |  |  |  |     if (! (combatant?.actor) ) { | 
		
	
		
			
				|  |  |  |  |     if (!(combatant?.actor)) { | 
		
	
		
			
				|  |  |  |  |       ui.notifications.warn(`Le combatant ${combatant.name ?? combatantId} n'est pas associé à un acteur, impossible de déterminer ses actions de combat!`) | 
		
	
		
			
				|  |  |  |  |       return; | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
	
		
			
				
					
					|  |  |  | @@ -457,7 +456,7 @@ export class RdDCombat { | 
		
	
		
			
				|  |  |  |  |     else { | 
		
	
		
			
				|  |  |  |  |       const defender = target?.actor; | 
		
	
		
			
				|  |  |  |  |       const defenderTokenId = target?.data._id; | 
		
	
		
			
				|  |  |  |  |       if ( defender.type == 'entite' && defender.data.data.definition.typeentite == ENTITE_NONINCARNE) { | 
		
	
		
			
				|  |  |  |  |       if (defender.type == 'entite' && defender.data.data.definition.typeentite == ENTITE_NONINCARNE) { | 
		
	
		
			
				|  |  |  |  |         ui.notifications.warn("Vous ne pouvez pas cibler une entité non incarnée !!!!"); | 
		
	
		
			
				|  |  |  |  |       } else { | 
		
	
		
			
				|  |  |  |  |         return this.create(attacker, defender, defenderTokenId, target) | 
		
	
	
		
			
				
					
					|  |  |  | @@ -567,7 +566,7 @@ export class RdDCombat { | 
		
	
		
			
				|  |  |  |  |   async onEvent(button, event) { | 
		
	
		
			
				|  |  |  |  |     const chatMessage = ChatUtility.getChatMessage(event); | 
		
	
		
			
				|  |  |  |  |     const defenderRoll = ChatUtility.getMessageData(chatMessage, 'defender-roll'); | 
		
	
		
			
				|  |  |  |  |     const attackerRoll = defenderRoll?.attackerRoll ?? ChatUtility.getMessageData(chatMessage, 'attacker-roll') ; | 
		
	
		
			
				|  |  |  |  |     const attackerRoll = defenderRoll?.attackerRoll ?? ChatUtility.getMessageData(chatMessage, 'attacker-roll'); | 
		
	
		
			
				|  |  |  |  |     console.log('RdDCombat', attackerRoll, defenderRoll); | 
		
	
		
			
				|  |  |  |  |     const defenderTokenId = event.currentTarget.attributes['data-defenderTokenId']?.value; | 
		
	
		
			
				|  |  |  |  |  | 
		
	
	
		
			
				
					
					|  |  |  | @@ -760,7 +759,7 @@ export class RdDCombat { | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |   /* -------------------------------------------- */ | 
		
	
		
			
				|  |  |  |  |   async _onAttaqueParticuliere(rollData) { | 
		
	
		
			
				|  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |     const isMeleeDiffNegative = (rollData.competence.type == 'competencecreature' || rollData.selectedCarac.label == "Mêlée") && rollData.diffLibre < 0; | 
		
	
		
			
				|  |  |  |  |     // force toujours, sauf empoignade | 
		
	
		
			
				|  |  |  |  |     // finesse seulement en mélée, pour l'empoignade, ou si la difficulté libre est de -1 minimum | 
		
	
	
		
			
				
					
					|  |  |  | @@ -778,7 +777,7 @@ export class RdDCombat { | 
		
	
		
			
				|  |  |  |  |     else if (!isForce && !isFinesse && isRapide) { | 
		
	
		
			
				|  |  |  |  |       return await this.choixParticuliere(rollData, "rapidite"); | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |     const choixParticuliere = await ChatMessage.create({ | 
		
	
		
			
				|  |  |  |  |       alias: this.attacker.name, | 
		
	
		
			
				|  |  |  |  |       whisper: ChatUtility.getWhisperRecipientsAndGMs(this.attacker.name), | 
		
	
	
		
			
				
					
					|  |  |  | @@ -817,7 +816,7 @@ export class RdDCombat { | 
		
	
		
			
				|  |  |  |  |   } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |   /* -------------------------------------------- */ | 
		
	
		
			
				|  |  |  |  |   isPossession( attackerRoll) { | 
		
	
		
			
				|  |  |  |  |   isPossession(attackerRoll) { | 
		
	
		
			
				|  |  |  |  |     return attackerRoll.selectedCarac.label.toLowerCase() == 'possession'; | 
		
	
		
			
				|  |  |  |  |   } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
	
		
			
				
					
					|  |  |  | @@ -962,9 +961,8 @@ export class RdDCombat { | 
		
	
		
			
				|  |  |  |  |     const arme = this.defender.getArmeParade(armeParadeId); | 
		
	
		
			
				|  |  |  |  |     console.log("RdDCombat.parade >>>", attackerRoll, armeParadeId, arme); | 
		
	
		
			
				|  |  |  |  |     const competence = Misc.templateData(arme)?.competence; | 
		
	
		
			
				|  |  |  |  |     if (competence == undefined) | 
		
	
		
			
				|  |  |  |  |     { | 
		
	
		
			
				|  |  |  |  |       console.error("Pas de compétence de parade associée à ", arme) ; | 
		
	
		
			
				|  |  |  |  |     if (competence == undefined) { | 
		
	
		
			
				|  |  |  |  |       console.error("Pas de compétence de parade associée à ", arme); | 
		
	
		
			
				|  |  |  |  |       return; | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
	
		
			
				
					
					|  |  |  | @@ -1247,6 +1245,8 @@ export class RdDCombat { | 
		
	
		
			
				|  |  |  |  |   /* -------------------------------------------- */ | 
		
	
		
			
				|  |  |  |  |   /* retourne true si on peut continuer, false si on ne peut pas continuer */ | 
		
	
		
			
				|  |  |  |  |   async accorderEntite(when = 'avant-encaissement') { | 
		
	
		
			
				|  |  |  |  |     console.log("TETETET", game.settings.get(SYSTEM_RDD, "accorder-entite-cauchemar"), this.defender.isEntite([ENTITE_INCARNE]), this.defender.isEntiteAccordee(this.attacker)) | 
		
	
		
			
				|  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |     if (when != game.settings.get(SYSTEM_RDD, "accorder-entite-cauchemar") | 
		
	
		
			
				|  |  |  |  |       || this.defender == undefined | 
		
	
		
			
				|  |  |  |  |       || !this.defender.isEntite([ENTITE_INCARNE]) | 
		
	
	
		
			
				
					
					|  |  |  |   |