forked from public/foundryvtt-reve-de-dragon
		
	#24 Ajout d'action pour dormir 1h
This commit is contained in:
		@@ -299,6 +299,10 @@ export class RdDActorSheet extends ActorSheet {
 | 
				
			|||||||
      this.actor.displayTMR( "rapide" );
 | 
					      this.actor.displayTMR( "rapide" );
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    html.find('.dormir-une-heure').click((event) => {
 | 
				
			||||||
 | 
					      this.actor.dormir(1);
 | 
				
			||||||
 | 
					    } );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Display info about queue
 | 
					    // Display info about queue
 | 
				
			||||||
    html.find('.queuesouffle-label a').click((event) => {
 | 
					    html.find('.queuesouffle-label a').click((event) => {
 | 
				
			||||||
      let myID = event.currentTarget.attributes['data-item-id'].value;
 | 
					      let myID = event.currentTarget.attributes['data-item-id'].value;
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										125
									
								
								module/actor.js
									
									
									
									
									
								
							
							
						
						
									
										125
									
								
								module/actor.js
									
									
									
									
									
								
							@@ -10,6 +10,8 @@ import { RdDTMRDialog } from "./rdd-tmr-dialog.js";
 | 
				
			|||||||
import { Misc } from "./misc.js";
 | 
					import { Misc } from "./misc.js";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { RdDResolutionTable } from "./rdd-resolution-table.js";
 | 
					import { RdDResolutionTable } from "./rdd-resolution-table.js";
 | 
				
			||||||
 | 
					import { RdDDice } from "./rdd-dice.js";
 | 
				
			||||||
 | 
					import { RdDRollTables } from "./rdd-rolltables.js";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export class RdDActor extends Actor {
 | 
					export class RdDActor extends Actor {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -120,11 +122,10 @@ export class RdDActor extends Actor {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  /* -------------------------------------------- */
 | 
					  /* -------------------------------------------- */
 | 
				
			||||||
  async performRoll(rollData) {
 | 
					  async performRoll(rollData) {
 | 
				
			||||||
 | 
					    let rolled = await RdDResolutionTable.roll(rollData.carac, rollData.finalLevel);
 | 
				
			||||||
    // Perform the roll
 | 
					 | 
				
			||||||
    let rolled = await RdDResolutionTable.rollChances(rollData.rollTarget);
 | 
					 | 
				
			||||||
    //rolled.isPart = true; // Pour tester le particulières
 | 
					    //rolled.isPart = true; // Pour tester le particulières
 | 
				
			||||||
    rollData.rolled = rolled; //  garder le résultat
 | 
					    rollData.rolled = rolled; //  garder le résultat
 | 
				
			||||||
 | 
					    console.log("performRoll", rollData, rolled)
 | 
				
			||||||
    this.currentRollData = rollData;
 | 
					    this.currentRollData = rollData;
 | 
				
			||||||
    if (rolled.isPart && rollData.arme && !rollData.attackerRoll) { // Réussite particulière avec attaque -> choix !
 | 
					    if (rolled.isPart && rollData.arme && !rollData.attackerRoll) { // Réussite particulière avec attaque -> choix !
 | 
				
			||||||
      let message = "<strong>Réussite particulière en attaque</strong>";
 | 
					      let message = "<strong>Réussite particulière en attaque</strong>";
 | 
				
			||||||
@@ -221,7 +222,7 @@ export class RdDActor extends Actor {
 | 
				
			|||||||
    let chatOptions = {
 | 
					    let chatOptions = {
 | 
				
			||||||
      content: "<strong>Test : " + rollData.selectedCarac.label + " / " + resumeCompetence + "</strong>"
 | 
					      content: "<strong>Test : " + rollData.selectedCarac.label + " / " + resumeCompetence + "</strong>"
 | 
				
			||||||
          + "<br>Difficultés <strong>libre : " + rollData.diffLibre + "</strong> / conditions : " + Misc.toSignedString(rollData.diffConditions) +" / état : " + rollData.etat
 | 
					          + "<br>Difficultés <strong>libre : " + rollData.diffLibre + "</strong> / conditions : " + Misc.toSignedString(rollData.diffConditions) +" / état : " + rollData.etat
 | 
				
			||||||
          + "<br>Jet : " + rolled.roll + " sur "+ rolled.score + "% ("  + rollData.selectedCarac.value + " à " +Misc.toSignedString(rollData.finalLevel) + ")"
 | 
					          + RdDResolutionTable.explain(rolled)
 | 
				
			||||||
          + "<br><strong>" + quality + "</strong>"
 | 
					          + "<br><strong>" + quality + "</strong>"
 | 
				
			||||||
          + explications + xpmsg,
 | 
					          + explications + xpmsg,
 | 
				
			||||||
      user: game.user._id,
 | 
					      user: game.user._id,
 | 
				
			||||||
@@ -319,6 +320,76 @@ export class RdDActor extends Actor {
 | 
				
			|||||||
    return explications
 | 
					    return explications
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  async dormir(heures=1)  {
 | 
				
			||||||
 | 
					    for (let i=0; i<heures; i++) {
 | 
				
			||||||
 | 
					      console.log("recuperationReve", this.data.data);
 | 
				
			||||||
 | 
					      /**
 | 
				
			||||||
 | 
					       * TODO: récupérer les segment de fatigue
 | 
				
			||||||
 | 
					       */
 | 
				
			||||||
 | 
					      this.recuperationReve();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  async recuperationReve()  {
 | 
				
			||||||
 | 
					      const seuil = this.data.data.reve.seuil.value;
 | 
				
			||||||
 | 
					      const reve = this.getReveActuel();
 | 
				
			||||||
 | 
					      console.log("recuperationReve", this.data.data);
 | 
				
			||||||
 | 
					      let message = { title : "Récupération" }
 | 
				
			||||||
 | 
					      if (reve > seuil) {
 | 
				
			||||||
 | 
					        message.content = "Vous avez déjà récupéré suffisament (seuil " + seuil + ", rêve actuel "+reve+")";
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      else {
 | 
				
			||||||
 | 
					        let deRecuperation = await RdDDice.deDraconique();
 | 
				
			||||||
 | 
					        console.log("recuperationReve", deRecuperation);
 | 
				
			||||||
 | 
					        if (deRecuperation>=7)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          // Rêve de Dragon !
 | 
				
			||||||
 | 
					          message.content = "Vous faites un <strong>Rêve de Dragon</strong> de " + deRecuperation + " Points de rêve";
 | 
				
			||||||
 | 
					          message.content += await this.combattreReveDeDragon(deRecuperation);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        else{
 | 
				
			||||||
 | 
					          message.content = "Vous récupérez " + deRecuperation + " Points de rêve";
 | 
				
			||||||
 | 
					          await this.updatePointsDeReve(deRecuperation);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      ChatMessage.create( message );
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  async combattreReveDeDragon(force){
 | 
				
			||||||
 | 
					    let draconic = this.getBestDraconic();
 | 
				
			||||||
 | 
					    let niveau = Math.max(0, draconic.data.niveau);
 | 
				
			||||||
 | 
					    let etat = this.data.data.compteurs.etat.value;
 | 
				
			||||||
 | 
					    let difficulte = niveau - etat - force;
 | 
				
			||||||
 | 
					    let reveActuel = this.getReveActuel();
 | 
				
			||||||
 | 
					    let roll = await RdDResolutionTable.roll(reveActuel, difficulte);
 | 
				
			||||||
 | 
					    let message = ""
 | 
				
			||||||
 | 
					    const resultatRdD = await this.appliquerReveDeDragon(roll, force);
 | 
				
			||||||
 | 
					    return resultatRdD;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  async appliquerReveDeDragon(roll, force) {
 | 
				
			||||||
 | 
					    let message = "";
 | 
				
			||||||
 | 
					    if (roll.isSuccess) {
 | 
				
			||||||
 | 
					      message += "<br>Vous gagnez " + force + " points de Rêve";
 | 
				
			||||||
 | 
					      this.updatePointDeSeuil();
 | 
				
			||||||
 | 
					      await this.updatePointsDeReve(force);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if (roll.isPart) {
 | 
				
			||||||
 | 
					      // TODO: Dialog pour choix entre HR opu général?
 | 
				
			||||||
 | 
					      let tete = "à déterminer";
 | 
				
			||||||
 | 
					      message += "<br>Vous gagnez une Tête de dragon: " + tete;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if (roll.isEchec) {
 | 
				
			||||||
 | 
					      message += "<br>Vous subissez une Queue de Dragon";
 | 
				
			||||||
 | 
					      this.ajouterQueue();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if (roll.isETotal) {
 | 
				
			||||||
 | 
					      message += "<br>A cause de votre échec total, vous subissez une deuxième Queue de Dragon !"
 | 
				
			||||||
 | 
					      this.ajouterQueue();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return message;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /* -------------------------------------------- */
 | 
					  /* -------------------------------------------- */
 | 
				
			||||||
  async sortMisEnReserve(rollData, sort) {
 | 
					  async sortMisEnReserve(rollData, sort) {
 | 
				
			||||||
    let reserve = duplicate(this.data.data.reve.reserve);
 | 
					    let reserve = duplicate(this.data.data.reve.reserve);
 | 
				
			||||||
@@ -331,6 +402,11 @@ export class RdDActor extends Actor {
 | 
				
			|||||||
  updateCarac( caracName, caracValue )  
 | 
					  updateCarac( caracName, caracValue )  
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    let caracpath = "data.carac." + caracName + ".value"
 | 
					    let caracpath = "data.carac." + caracName + ".value"
 | 
				
			||||||
 | 
					    if (caracName == reve) {
 | 
				
			||||||
 | 
					      if (caracValue > Misc.toInt(this.data.data.reve.seuil.value)) {
 | 
				
			||||||
 | 
					        this.setPointDeSeuil(caracValue);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
    this.update( { caracpath: caracValue } );
 | 
					    this.update( { caracpath: caracValue } );
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
@@ -499,18 +575,47 @@ export class RdDActor extends Actor {
 | 
				
			|||||||
    let total = new Roll("d20").roll().total;
 | 
					    let total = new Roll("d20").roll().total;
 | 
				
			||||||
    if ( total <= refoulement.value ) {
 | 
					    if ( total <= refoulement.value ) {
 | 
				
			||||||
      refoulement.value = 0;
 | 
					      refoulement.value = 0;
 | 
				
			||||||
      
 | 
					      this.ajouterSouffle();
 | 
				
			||||||
      let souffle = RdDRollTables.getSouffle();
 | 
					 | 
				
			||||||
      ChatMessage.create( { title : "Souffle de Dragon", 
 | 
					 | 
				
			||||||
      content: game.user.name + " subit un Souffle de Dragon  : " + souffle.name } );
 | 
					 | 
				
			||||||
      this.actor.createOwnedItem(souffle);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      ret = "souffle";
 | 
					      ret = "souffle";
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    await this.update( {"data.reve.refoulement": refoulement } );
 | 
					    await this.update( {"data.reve.refoulement": refoulement } );
 | 
				
			||||||
    return ret;      
 | 
					    return ret;      
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  ajouterSouffle() {
 | 
				
			||||||
 | 
					    let souffle = RdDRollTables.getSouffle();
 | 
				
			||||||
 | 
					    // ChatMessage.create({
 | 
				
			||||||
 | 
					    //   title: "Souffle de Dragon",
 | 
				
			||||||
 | 
					    //   content: this.name + " subit un Souffle de Dragon  : " + souffle.name
 | 
				
			||||||
 | 
					    // });
 | 
				
			||||||
 | 
					    // this.actor.createOwnedItem(souffle);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  async ajouterQueue() {
 | 
				
			||||||
 | 
					    // TODO: Déterminer si Thanatos a été utilisé? => laisser le joueur ne pas choisir Thanatos => choisir sa voie?
 | 
				
			||||||
 | 
					    let utiliseThanatos = false;
 | 
				
			||||||
 | 
					    let queue;
 | 
				
			||||||
 | 
					    if (utiliseThanatos) {
 | 
				
			||||||
 | 
					      queue = await RdDRollTables.getOmbre();
 | 
				
			||||||
 | 
					      // mettre à jour: plus d'ombre en vue
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    else {
 | 
				
			||||||
 | 
					      queue = await RdDRollTables.getQueue();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    /*
 | 
				
			||||||
 | 
					    // TODO: convertir la queue obtenue en nouvel item ... 
 | 
				
			||||||
 | 
					    // ou bien l'ajouter à la liste spécifique => this.data.data.reve.queues
 | 
				
			||||||
 | 
					    this.createOwnedItem(queue);
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    ChatMessage.create({
 | 
				
			||||||
 | 
					      title: "Queue de Dragon",
 | 
				
			||||||
 | 
					      content: this.name + " subit un Queue de Dragon  : " + queue.name
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    return queue.name;
 | 
				
			||||||
 | 
					    */
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  /* -------------------------------------------- */  
 | 
					  /* -------------------------------------------- */  
 | 
				
			||||||
  async deleteTMRRencontreAtPosition( ) {
 | 
					  async deleteTMRRencontreAtPosition( ) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -66,7 +66,7 @@ export class RdDRollDialog extends Dialog {
 | 
				
			|||||||
      let rollLevel = RdDRollDialog._computeFinalLevel(rollData);
 | 
					      let rollLevel = RdDRollDialog._computeFinalLevel(rollData);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      rollData.finalLevel = rollLevel;
 | 
					      rollData.finalLevel = rollLevel;
 | 
				
			||||||
      rollData.rollTarget = RdDResolutionTable.computeChances(rollData.selectedCarac.value, rollData.finalLevel);
 | 
					      rollData.carac = rollData.selectedCarac.value
 | 
				
			||||||
      
 | 
					      
 | 
				
			||||||
      // Sort management
 | 
					      // Sort management
 | 
				
			||||||
      if ( rollData.selectedSort ) {
 | 
					      if ( rollData.selectedSort ) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -222,7 +222,7 @@ export class RdDTMRDialog extends Dialog {
 | 
				
			|||||||
        explication += "Vous êtes entré sur une case humide, et vous avez <strong>réussi</strong> votre maîtrise !"
 | 
					        explication += "Vous êtes entré sur une case humide, et vous avez <strong>réussi</strong> votre maîtrise !"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      explication += "<br><strong>Test : Rêve actuel / " + draconic.name + " / " + cellDescr.type + "</strong>"
 | 
					      explication += "<br><strong>Test : Rêve actuel / " + draconic.name + " / " + cellDescr.type + "</strong>"
 | 
				
			||||||
        + "<br>Jet : " + carac + " / " + difficulte + " -> " + rolled.score + "%<br><strong>Résutat : </strong>" + rolled.roll;
 | 
					        + RdDResolutionTable.explain(rolled);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      if (rolled.isETotal) {
 | 
					      if (rolled.isETotal) {
 | 
				
			||||||
        let souffle = RdDRollTables.getSouffle();
 | 
					        let souffle = RdDRollTables.getSouffle();
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -394,6 +394,9 @@
 | 
				
			|||||||
            <div>
 | 
					            <div>
 | 
				
			||||||
              <span class="monte-tmr-rapide"><strong><a>Monter en Accéléré dans les Terres Medianes !</a></strong></span>
 | 
					              <span class="monte-tmr-rapide"><strong><a>Monter en Accéléré dans les Terres Medianes !</a></strong></span>
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
 | 
					            <div>
 | 
				
			||||||
 | 
					              <span class="dormir-une-heure"><strong><a>Dormir une heure</a></strong></span>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
            <div>
 | 
					            <div>
 | 
				
			||||||
              <ol class="item-list">
 | 
					              <ol class="item-list">
 | 
				
			||||||
                <li class="item flexrow">
 | 
					                <li class="item flexrow">
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user