Les messages dans les TMRs sont envoyés au GM Simplification des messages de tchat liés à un actor: on peut utiliser les Owners (car les GMs sont owner). Au lieu de passer le name de l'Actor (qui peut être incorrect si deux actors ont le même, mais pas les mêmes propriétaires), on passe directement l'actor pour déterminer mles destinataires de messages
		
			
				
	
	
		
			56 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			56 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
import { ChatUtility } from "../chat-utility.js";
 | 
						|
import { Grammar } from "../grammar.js";
 | 
						|
import { Misc } from "../misc.js";
 | 
						|
import { RdDRollTables } from "../rdd-rolltables.js";
 | 
						|
import { TMRUtility } from "../tmr-utility.js";
 | 
						|
import { tmrTokenZIndex } from "../tmr-constants.js";
 | 
						|
import { Draconique } from "./draconique.js";
 | 
						|
import { ITEM_TYPES } from "../item.js";
 | 
						|
import { TMRAnimations } from "./animation.js";
 | 
						|
 | 
						|
export class UrgenceDraconique extends Draconique {
 | 
						|
 | 
						|
  type() { return 'queue' }
 | 
						|
  match(item) { return Draconique.isQueueDragon(item) && Grammar.toLowerCaseNoAccent(item.name).includes('urgence draconique'); }
 | 
						|
  manualMessage() { return false }
 | 
						|
  async onActorCreateOwned(actor, queue) {
 | 
						|
    const coordSortsReserve = actor.itemTypes[ITEM_TYPES.sortreserve].map(it => it.system.coord) ?? [];
 | 
						|
    if (coordSortsReserve.length == 0) {
 | 
						|
      // La queue se transforme en idée fixe
 | 
						|
      const ideeFixe = await RdDRollTables.getIdeeFixe();
 | 
						|
      ChatMessage.create({
 | 
						|
        whisper: ChatUtility.getOwners(actor),
 | 
						|
        content: `En l'absence de sorts en réserve, l'urgence draconique de ${actor.name} se transforme en ${ideeFixe.name}`
 | 
						|
      });
 | 
						|
      await actor.createEmbeddedDocuments('Item', [ideeFixe]);
 | 
						|
      await actor.deleteEmbeddedDocuments('Item', [queue.id]);
 | 
						|
    }
 | 
						|
    else {
 | 
						|
      const demiReve = actor.getDemiReve();
 | 
						|
      coordSortsReserve.sort(Misc.ascending(t => TMRUtility.distanceCoordTMR(t, demiReve)));
 | 
						|
      const tmr = TMRUtility.getTMR(coordSortsReserve[0]);
 | 
						|
      await this.createCaseTmr(actor, 'Urgence draconique', tmr, queue.id);
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  async onActorDeleteCaseTmr(actor, casetmr) {
 | 
						|
    await actor.deleteEmbeddedDocuments('Item', [casetmr.system.sourceid]);
 | 
						|
  }
 | 
						|
 | 
						|
  code() { return 'urgence' }
 | 
						|
  tooltip(linkData) { return `Urgence draconique` }
 | 
						|
  img() { return 'systems/foundryvtt-reve-de-dragon/icons/tmr/urgence.svg' }
 | 
						|
 | 
						|
  createSprite(pixiTMR) {
 | 
						|
    return TMRAnimations.withAnimation(
 | 
						|
      pixiTMR.sprite(this.code(), {
 | 
						|
        zIndex: tmrTokenZIndex.conquete,
 | 
						|
        decallage: pixiTMR.sizes.decallage(0, 0),
 | 
						|
        taille: () => pixiTMR.sizes.half,
 | 
						|
      }),
 | 
						|
      pixiTMR,
 | 
						|
      TMRAnimations.changeZoom()
 | 
						|
    )
 | 
						|
  }
 | 
						|
}
 |