Merge branch 'feature/appelAuMoral' into 'v1.3'
Feature/appel au moral See merge request LeRatierBretonnien/foundryvtt-reve-de-dragon!148
This commit is contained in:
		| @@ -1653,7 +1653,15 @@ export class RdDActor extends Actor { | ||||
|       action: r => this._appliquerAjoutExperience(r, game.settings.get("core", "rollMode") != 'blindroll') | ||||
|     }; | ||||
|   } | ||||
|  | ||||
|   | ||||
|   /* -------------------------------------------- */ | ||||
|   createCallbackAppelAuMoral() { /* Si l'appel au moral est utilisé, on l'affiche dans le chat et on diminue éventuellement le moral */ | ||||
|     return { | ||||
|       condition: r => r.use.appelAuMoral && game.settings.get("core", "rollMode") != 'selfroll', | ||||
|       action: r => { console.log("createCallbackAppelAuMoral"); this.displayAppelAuMoral ; console.log(r.rolled.isEchec); this._appliquerAppelMoral(r, game.settings.get("core", "rollMode") != 'blindroll') } | ||||
|     }; | ||||
|   } | ||||
|    | ||||
|   /* -------------------------------------------- */ | ||||
|   async checkCaracXP(caracName) { | ||||
|     let carac = this.data.data.carac[caracName]; | ||||
| @@ -1723,6 +1731,14 @@ export class RdDActor extends Actor { | ||||
|     if (xpResult && xpResult.xpCarac > 0 && rollData.selectedCarac) { | ||||
|       this.checkCaracXP(rollData.selectedCarac.name); | ||||
|     } | ||||
|   }  | ||||
|    | ||||
|   /* -------------------------------------------- */ | ||||
|   async _appliquerAppelMoral(rollData, display = true) { | ||||
|     if (!this.isPersonnage()) return; | ||||
|     if (!rollData.rolled.isEchec) return; | ||||
|     const waitUpdate = this.moralIncDec(-1); /* L'appel au moral a échoué. Le personnage perd un point de moral */ | ||||
| 	rollData.jetEchouerMoralDiminuer = true; | ||||
|   } | ||||
|  | ||||
|   /* -------------------------------------------- */ | ||||
| @@ -1977,6 +1993,7 @@ export class RdDActor extends Actor { | ||||
|       label: 'Jet ' + Grammar.apostrophe('de', name), | ||||
|       callbacks: [ | ||||
|         this.createCallbackExperience(), | ||||
|         this.createCallbackAppelAuMoral(),  | ||||
|         { action: r => this._competenceResult(r) } | ||||
|       ] | ||||
|     }); | ||||
| @@ -2202,7 +2219,9 @@ export class RdDActor extends Actor { | ||||
|   async _competenceResult(rollData) { | ||||
|     RdDResolutionTable.displayRollData(rollData, this, 'chat-resultat-competence.html') | ||||
|   } | ||||
|  | ||||
|   async _moralDecrease(rollData) { | ||||
|     RdDResolutionTable.displayRollData(rollData, this, 'chat-resultat-competence.html') | ||||
|   } | ||||
|   /* -------------------------------------------- */ | ||||
|   async rollAppelChance(onSuccess = () => { }, onEchec = () => { }) { | ||||
|     let rollData = { selectedCarac: this.getCaracByName('chance-actuelle'), surprise: '' }; | ||||
|   | ||||
| @@ -29,4 +29,4 @@ export class RdDCarac { | ||||
|   static isActionPhysique(selectedCarac) { | ||||
|     return Grammar.toLowerCaseNoAccent(selectedCarac?.label).match(/(apparence|force|agilite|dexterite|vue|ouie|odorat|empathie|melee|tir|lancer|derobee)/); | ||||
|   } | ||||
| } | ||||
| } | ||||
|   | ||||
| @@ -37,16 +37,19 @@ export class RdDRoll extends Dialog { | ||||
|       ajustementsConditions: CONFIG.RDD.ajustementsConditions, | ||||
|       difficultesLibres: CONFIG.RDD.difficultesLibres, | ||||
|       etat: actor.getEtatGeneral(), | ||||
|       moral: actor.getMoralTotal(), | ||||
|       moral: actor.getMoralTotal(), /* La valeur du moral pour les jets de volonté */ | ||||
|       carac: actor.data.data.carac, | ||||
|       finalLevel: 0, | ||||
|       diffConditions: 0, | ||||
|       diffLibre: rollData.competence?.data.default_diffLibre ?? 0, | ||||
|       malusArmureValue: actor.getMalusArmure(), | ||||
|       surencMalusFlag: actor.isPersonnage() ? (actor.data.data.compteurs.surenc.value < 0) : false, | ||||
|       surencMalusFlag: actor.isPersonnage() ? (actor.data.data.compteurs.surenc.value < 0) : false,  | ||||
|       surencMalusValue: actor.getSurenc(), | ||||
|       useMalusSurenc: false, | ||||
|       use: { libre: true, conditions: true, surenc: false, encTotal: false, }, | ||||
|       appelAuMoralPossible : false,    /* Est-ce que l'appel au moral est possible ? Variable utisé pour l'affichage ou non de la ligne concernant le moral */ | ||||
|       appelAuMoralDemander :false,     /* Est-ce que le joueur demande d'utiliser le moral ? Utile si le joueur change plusieurs fois de carac associée. */ | ||||
|       jetEchouerMoralDiminuer : false, /* Pour l'affichage dans le chat */ | ||||
|       use: { libre: true, conditions: true, surenc: false, encTotal: false, appelAuMoral : false  /* Le jet se fait ou non en utilisant l'appel au moral */}, | ||||
|       isMalusEncombrementTotal: RdDItemCompetence.isMalusEncombrementTotal(rollData.competence), | ||||
|       useMalusEncTotal: false, | ||||
|       encTotal: actor.getEncTotal(), | ||||
| @@ -195,6 +198,27 @@ export class RdDRoll extends Dialog { | ||||
|       this.rollData.useMalusEncTotal = event.currentTarget.checked; | ||||
|       this.updateRollResult(); | ||||
|     }); | ||||
|     html.find('#iconeSmile').change((event) => { | ||||
| 	  console.log("iconeSmile"); | ||||
|       console.log(html.find('.iconeSmile')); | ||||
|       this.updateRollResult(); | ||||
|     });      | ||||
|     html.find('#useAppelAuMoralCheckbox').change((event) => { /* l'appel au moral, qui donne un bonus de +1 */ | ||||
| 	  this.rollData.appelAuMoralDemander = event.currentTarget.checked | ||||
|       if ( this.rollData.appelAuMoralDemander ) { | ||||
| 		if ( this.rollData.moral > 0 ) { | ||||
|           html.find('#iconeSmile')[0].src = "/systems/foundryvtt-reve-de-dragon/icons/moral-heureux.svg"; | ||||
| 		  html.find('#textSmile')[0].innerHTML = "Appel au moral"; | ||||
| 	    } else { | ||||
|           html.find('#iconeSmile')[0].src = "/systems/foundryvtt-reve-de-dragon/icons/moral-malheureux.svg"; | ||||
| 		  html.find('#textSmile')[0].innerHTML = "Appel à l'énergie du désespoir"; | ||||
| 	    } | ||||
| 	  } else { | ||||
| 		html.find('#iconeSmile')[0].src = "/systems/foundryvtt-reve-de-dragon/icons/moral-neutre.svg"; | ||||
| 		html.find('#textSmile')[0].innerHTML = "Sans appel au moral"; | ||||
| 	  }  | ||||
|       this.updateRollResult(); | ||||
|     }); | ||||
|     // Section Méditation | ||||
|     html.find('.conditionMeditation').change((event) => { | ||||
|       let condition = event.currentTarget.attributes['id'].value; | ||||
| @@ -206,7 +230,7 @@ export class RdDRoll extends Dialog { | ||||
|   /* -------------------------------------------- */ | ||||
|   async updateRollResult() { | ||||
|     let rollData = this.rollData; | ||||
|  | ||||
|      | ||||
|     rollData.dmg = rollData.attackerRoll?.dmg ?? RdDBonus.dmg(rollData, this.actor.getBonusDegat()); | ||||
|     rollData.caracValue = parseInt(rollData.selectedCarac.value); | ||||
|     rollData.coupsNonMortels = (rollData.attackerRoll?.dmg.mortalite ?? rollData.dmg.mortalite) == 'non-mortel'; | ||||
| @@ -220,11 +244,21 @@ export class RdDRoll extends Dialog { | ||||
|       HtmlUtility._showControlWhen($("#div-sort-difficulte"), RdDItemSort.isDifficulteVariable(rollData.selectedSort)) | ||||
|       HtmlUtility._showControlWhen($("#div-sort-ptreve"), RdDItemSort.isCoutVariable(rollData.selectedSort)) | ||||
|     } | ||||
|      | ||||
|     if ( ! RdDCarac.isActionPhysique(rollData.selectedCarac || ! actor.isPersonnage() ) ) { | ||||
| 	  rollData.appelAuMoralPossible = false; | ||||
| 	  rollData.use.appelAuMoral = false; | ||||
| 	} else { | ||||
| 	  rollData.appelAuMoralPossible = true; | ||||
| 	  rollData.use.appelAuMoral = rollData.appelAuMoralDemander; | ||||
| 	   | ||||
| 	} | ||||
|  | ||||
|     RollDataAjustements.calcul(rollData, this.actor); | ||||
|     rollData.finalLevel = this._computeFinalLevel(rollData); | ||||
|  | ||||
|     HtmlUtility._showControlWhen($(".diffMoral"), rollData.ajustements.moralTotal.used); | ||||
|     HtmlUtility._showControlWhen($("#divAppelAuMoral"),  rollData.appelAuMoralPossible ); | ||||
|     HtmlUtility._showControlWhen($("#etat-general"), !RdDCarac.isIgnoreEtatGeneral(rollData.selectedCarac, rollData.competence)); | ||||
|     HtmlUtility._showControlWhen($("#ajust-astrologique"), RdDResolutionTable.isAjustementAstrologique(rollData)); | ||||
|  | ||||
|   | ||||
| @@ -235,6 +235,7 @@ export class RdDUtility { | ||||
|       'systems/foundryvtt-reve-de-dragon/templates/hud-actor-attaque.html', | ||||
|       // messages tchat | ||||
|       'systems/foundryvtt-reve-de-dragon/templates/chat-infojet.html', | ||||
|       'systems/foundryvtt-reve-de-dragon/templates/chat-info-appel-au-moral.html',       | ||||
|       'systems/foundryvtt-reve-de-dragon/templates/chat-demande-defense.html', | ||||
|       'systems/foundryvtt-reve-de-dragon/templates/chat-demande-attaque-particuliere.html', | ||||
|       'systems/foundryvtt-reve-de-dragon/templates/chat-demande-attaque-etotal.html', | ||||
|   | ||||
| @@ -74,8 +74,8 @@ export const referenceAjustements = { | ||||
|   }, | ||||
|   moral: { | ||||
|     isVisible: (rollData, actor) => RdDCarac.isActionPhysique(rollData.selectedCarac), | ||||
|     isUsed: (rollData, actor) => rollData.use?.moral, | ||||
|     getLabel: (rollData, actor) => 'Moral', | ||||
|     isUsed: (rollData, actor) => rollData.use?.appelAuMoral, | ||||
|     getLabel: (rollData, actor) => 'Appel au moral', | ||||
|     getValue: (rollData, actor) => 1 | ||||
|   }, | ||||
|   moralTotal: { | ||||
|   | ||||
| @@ -812,6 +812,26 @@ ul, li { | ||||
|   left: 0px; | ||||
|   text-align: center; | ||||
| } | ||||
| .diffAppelAuMoral { | ||||
|   display: none !important; | ||||
| } | ||||
| .diffAppelAuMoral-checker { | ||||
|   height: 20px; | ||||
|   background-image: url('../icons/moral-neutre.svg'); | ||||
|   background-size: cover; | ||||
| } | ||||
| .diffAppelAuMoral:checked + .diffAppelAuMoral-checker { | ||||
|   background-image: url('../icons/moral-heureux.svg'); | ||||
| } | ||||
| .iconeSmile	 { | ||||
|   height: 20px; | ||||
|   width: 20px; | ||||
|   border:none; | ||||
|   outline: none; | ||||
|   background-size: cover; | ||||
| } | ||||
| .textSmile { | ||||
| } | ||||
|  | ||||
| /* ======================================== */ | ||||
| /* Fatigue CSS */ | ||||
| @@ -1392,4 +1412,4 @@ display: inline-flex; | ||||
|   content : url(img/logo.png); | ||||
|   width: 80px; | ||||
|   height: 68px; | ||||
| } | ||||
| } | ||||
|   | ||||
							
								
								
									
										4
									
								
								templates/chat-info-appel-au-moral.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								templates/chat-info-appel-au-moral.html
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,4 @@ | ||||
| {{#if use.appelAuMoral}}<div> | ||||
|   {{alias}} fait appel {{#if (gt moral 0)}}au moral{{else}}à l'énergie du déspoir{{/if}} {{#if moralDiminuer}}et échoue, diminuant son moral.{{else}} et réussit.{{/if}} | ||||
|   {{^jetEchouerMoralDiminuer}} Son moral reste inchangé à {{moral}}.{{/jetEchouerMoralDiminuer}} | ||||
| <div>{{/if}} | ||||
| @@ -12,6 +12,7 @@ | ||||
| <div> | ||||
|   <span>{{#if rolled.ptTache}}{{rolled.ptTache}} points de tâche{{/if}}{{#if rolled.ptQualite}}{{#if rolled.ptTache}},{{/if}} ajustement Qualité {{numberFormat rolled.ptQualite decimals=0 sign=true}}{{/if}}</span> | ||||
| </div> | ||||
| {{> "systems/foundryvtt-reve-de-dragon/templates/chat-info-appel-au-moral.html"}} | ||||
| {{~#if show.explications}} | ||||
| <div> | ||||
|   {{show.explications}} | ||||
|   | ||||
| @@ -67,6 +67,12 @@ | ||||
|     {{/if}} | ||||
|   </div> | ||||
| {{/if}} | ||||
| <div class="form-group" id="divAppelAuMoral" > | ||||
|   <input class="diffAppelAuMoral"  id="useAppelAuMoralCheckbox" type="checkbox" name="appelAuMoralDemander" /> | ||||
|   <label for="useAppelAuMoralCheckbox" class="diffAppelAuMoral-checker" id="diffAppelAuMoral-checker"></label> | ||||
|   <label for="useAppelAuMoralCheckbox" class="textSmile" id="textSmile" >Sans appel au moral</label> | ||||
|   <img for="useAppelAuMoralCheckbox" class="iconeSmile"  id="iconeSmile" src="/systems/foundryvtt-reve-de-dragon/icons/moral-neutre.svg"> | ||||
| </div> | ||||
|  | ||||
| {{>"systems/foundryvtt-reve-de-dragon/templates/dialog-roll-surenc.html"}} | ||||
| {{>"systems/foundryvtt-reve-de-dragon/templates/dialog-roll-enctotal.html"}} | ||||
|   | ||||
		Reference in New Issue
	
	Block a user