Fix des TMRs visibles/cachées
Parfois on peut retrouver son chemin dans les TMR: - Terre d'attache - Connaisance du fleuve - changeur des rêves vaincus On ne peut pas utiliser un messager/passeur quand on est perdu Les messages ne contiennent plus 'undefined' pour le changeur
This commit is contained in:
parent
f54804c071
commit
5efb7d9be0
@ -315,7 +315,7 @@ export class RdDActorSheet extends ActorSheet {
|
|||||||
|
|
||||||
// Boutons spéciaux MJs
|
// Boutons spéciaux MJs
|
||||||
html.find('.forcer-tmr-aleatoire').click(async event => {
|
html.find('.forcer-tmr-aleatoire').click(async event => {
|
||||||
this.actor.cacheTMRetMessage();
|
this.actor.reinsertionAleatoire("Action MJ");
|
||||||
});
|
});
|
||||||
html.find('.afficher-tmr').click(async event => {
|
html.find('.afficher-tmr').click(async event => {
|
||||||
this.actor.afficheTMRetMessage();
|
this.actor.afficheTMRetMessage();
|
||||||
|
@ -1472,10 +1472,8 @@ export class RdDActor extends Actor {
|
|||||||
isTMRCache() {
|
isTMRCache() {
|
||||||
return this.data.data.reve.tmrpos.cache;
|
return this.data.data.reve.tmrpos.cache;
|
||||||
}
|
}
|
||||||
/* -------------------------------------------- */
|
|
||||||
async cacheTMRetMessage() {
|
notifyRefreshTMR() {
|
||||||
await this.reinsertionAleatoire("Action MJ");
|
|
||||||
await this.cacheTMR();
|
|
||||||
game.socket.emit(SYSTEM_SOCKET_ID, {
|
game.socket.emit(SYSTEM_SOCKET_ID, {
|
||||||
msg: "msg_tmr_move", data: {
|
msg: "msg_tmr_move", data: {
|
||||||
actorId: this.data._id,
|
actorId: this.data._id,
|
||||||
@ -1487,27 +1485,27 @@ export class RdDActor extends Actor {
|
|||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async afficheTMRetMessage() {
|
async afficheTMRetMessage() {
|
||||||
await this.montreTMR();
|
await this.montreTMR();
|
||||||
game.socket.emit(SYSTEM_SOCKET_ID, {
|
this.notifyRefreshTMR();
|
||||||
msg: "msg_tmr_move", data: {
|
|
||||||
actorId: this.data._id,
|
|
||||||
tmrPos: this.data.data.reve.tmrpos
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async reinsertionAleatoire(raison) {
|
async reinsertionAleatoire(raison, accessible = tmr => true) {
|
||||||
|
const innaccessible = this.buildTMRInnaccessible();
|
||||||
|
let tmr = await TMRUtility.getTMRAleatoire(tmr => accessible(tmr) && !innaccessible.includes(tmr.coord));
|
||||||
ChatMessage.create({
|
ChatMessage.create({
|
||||||
content: `${raison} : ré-insertion aléatoire.`,
|
content: `${raison} : ré-insertion aléatoire.`,
|
||||||
whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name)
|
whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name)
|
||||||
});
|
});
|
||||||
const innaccessible = this.buildTMRInnaccessible();
|
await this.forcerPositionTMRInconnue(tmr);
|
||||||
let tmr = await TMRUtility.getTMRAleatoire(tmr => !innaccessible.includes(tmr.coord));
|
|
||||||
this.updateCoordTMR(tmr.coord);
|
|
||||||
this.cacheTMR();
|
|
||||||
return tmr;
|
return tmr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async forcerPositionTMRInconnue(tmr) {
|
||||||
|
await this.cacheTMR();
|
||||||
|
await this.updateCoordTMR(tmr.coord);
|
||||||
|
this.notifyRefreshTMR();
|
||||||
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
buildTMRInnaccessible() {
|
buildTMRInnaccessible() {
|
||||||
const tmrInnaccessibles = this.filterItemsData(it => Draconique.isCaseTMR(it) &&
|
const tmrInnaccessibles = this.filterItemsData(it => Draconique.isCaseTMR(it) &&
|
||||||
@ -3153,9 +3151,9 @@ export class RdDActor extends Actor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
refreshTMRView(tmrData) {
|
refreshTMRView() {
|
||||||
if (this.currentTMR) {
|
if (this.currentTMR) {
|
||||||
this.currentTMR.externalRefresh(tmrData)
|
this.currentTMR.externalRefresh();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -95,12 +95,15 @@ export class RdDTMRDialog extends Dialog {
|
|||||||
createPixiSprites() {
|
createPixiSprites() {
|
||||||
EffetsDraconiques.carteTmr.createSprite(this.pixiTMR);
|
EffetsDraconiques.carteTmr.createSprite(this.pixiTMR);
|
||||||
this.updateTokens();
|
this.updateTokens();
|
||||||
this.demiReve = this._tokenDemiReve();
|
this.forceDemiRevePositionView();
|
||||||
this._updateDemiReve();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
_createTokens() {
|
_createTokens() {
|
||||||
|
if (!this.isDemiReveCache()){
|
||||||
|
this.demiReve = this._tokenDemiReve();
|
||||||
|
this._trackToken(this.demiReve);
|
||||||
|
}
|
||||||
let tokens = this._getTokensCasesTmr()
|
let tokens = this._getTokensCasesTmr()
|
||||||
.concat(this._getTokensRencontres())
|
.concat(this._getTokensRencontres())
|
||||||
.concat(this._getTokensSortsReserve());
|
.concat(this._getTokensSortsReserve());
|
||||||
@ -154,9 +157,9 @@ export class RdDTMRDialog extends Dialog {
|
|||||||
return EffetsDraconiques.demiReve.token(this.pixiTMR, actorData, () => actorData.data.reve.tmrpos.coord);
|
return EffetsDraconiques.demiReve.token(this.pixiTMR, actorData, () => actorData.data.reve.tmrpos.coord);
|
||||||
}
|
}
|
||||||
|
|
||||||
_updateDemiReve() {
|
forceDemiRevePositionView() {
|
||||||
this.notifierResonanceSigneDraconique(this._getActorCoord());
|
this.notifierResonanceSigneDraconique(this._getActorCoord());
|
||||||
this._setTokenPosition(this.demiReve);
|
this._trackToken(this.demiReve);
|
||||||
}
|
}
|
||||||
|
|
||||||
_getActorCoord() {
|
_getActorCoord() {
|
||||||
@ -336,6 +339,10 @@ export class RdDTMRDialog extends Dialog {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async choisirCasePortee(coord, portee) {
|
async choisirCasePortee(coord, portee) {
|
||||||
|
if (this.actor.isTMRCache())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
// Récupère la liste des cases à portées
|
// Récupère la liste des cases à portées
|
||||||
let locList = TMRUtility.getTMRPortee(coord, portee);
|
let locList = TMRUtility.getTMRPortee(coord, portee);
|
||||||
this.colorierZoneRencontre(locList);
|
this.colorierZoneRencontre(locList);
|
||||||
@ -874,49 +881,62 @@ export class RdDTMRDialog extends Dialog {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async _onClickTMRPos(clickOddq) {
|
async _onClickTMRPos(clickOddq) {
|
||||||
|
let currentOddq = TMRUtility.coordTMRToOddq(this._getActorCoord());
|
||||||
|
let targetCoord = TMRUtility.oddqToCoordTMR(clickOddq);
|
||||||
|
let currentCoord = TMRUtility.oddqToCoordTMR(currentOddq);
|
||||||
|
// Validation de la case de destination (gestion du cas des rencontres qui peuvent téléporter)
|
||||||
|
let deplacementType = this._calculDeplacement(targetCoord, currentCoord, currentOddq, clickOddq);
|
||||||
|
|
||||||
if (this.isDemiReveCache()) {
|
if (this.isDemiReveCache()) {
|
||||||
|
if (this.isTerreAttache(targetCoord)
|
||||||
|
|| (this.isCaseHumide(currentCoord) && this.isCaseHumide(targetCoord))
|
||||||
|
|| deplacementType == 'changeur')
|
||||||
|
{
|
||||||
|
// déplacement possible
|
||||||
|
await this.actor.montreTMR();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
ui.notifications.error(`Vous ne connaissez plus votre position dans les TMR.
|
ui.notifications.error(`Vous ne connaissez plus votre position dans les TMR.
|
||||||
Vous devez utiliser les boutons de direction pour vous déplacer.
|
Vous devez utiliser les boutons de direction pour vous déplacer.
|
||||||
Une fois que vous aurez retrouvé votre demi-rêve, demandez au gardien de vérifier et rendre les TMR visibles.
|
Une fois que vous aurez retrouvé votre demi-rêve, demandez au gardien de vérifier et rendre les TMR visibles.
|
||||||
`);
|
`);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
let currentOddq = TMRUtility.coordTMRToOddq(this._getActorCoord());
|
switch (deplacementType){
|
||||||
|
case 'normal':
|
||||||
console.log("deplacerDemiReve >>>>", currentOddq, clickOddq);
|
|
||||||
|
|
||||||
let targetCoord = TMRUtility.oddqToCoordTMR(clickOddq);
|
|
||||||
let currentCoord = TMRUtility.oddqToCoordTMR(currentOddq);
|
|
||||||
|
|
||||||
// Validation de la case de destination (gestion du cas des rencontres qui peuvent téléporter)
|
|
||||||
let deplacementType = this._calculDeplacement(targetCoord, currentCoord, currentOddq, clickOddq);
|
|
||||||
|
|
||||||
// Si le deplacement est valide
|
|
||||||
if (deplacementType == 'normal' || deplacementType == 'saut') {
|
|
||||||
await this._deplacerDemiReve(targetCoord, deplacementType);
|
await this._deplacerDemiReve(targetCoord, deplacementType);
|
||||||
} else if (deplacementType == 'messager') { // Dans ce cas, ouverture du lancement de sort sur la case visée
|
break;
|
||||||
|
case 'messager':
|
||||||
await this._messagerDemiReve(targetCoord);
|
await this._messagerDemiReve(targetCoord);
|
||||||
} else {
|
break;
|
||||||
|
case 'changeur':
|
||||||
|
case 'passeur':
|
||||||
|
await this._deplacerDemiReve(targetCoord, deplacementType);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
ui.notifications.error("Vous ne pouvez pas vous déplacer que sur des cases adjacentes à votre position ou valides dans le cas d'une rencontre");
|
ui.notifications.error("Vous ne pouvez pas vous déplacer que sur des cases adjacentes à votre position ou valides dans le cas d'une rencontre");
|
||||||
console.log("STATUS :", this.rencontreState, this.currentRencontre);
|
console.log("STATUS :", this.rencontreState, this.currentRencontre);
|
||||||
}
|
}
|
||||||
|
|
||||||
this.checkQuitterTMR();
|
this.checkQuitterTMR();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
_calculDeplacement(targetCoord, currentCoord, fromOddq, toOddq) {
|
_calculDeplacement(targetCoord, currentCoord, fromOddq, toOddq) {
|
||||||
|
|
||||||
const isInArea = this.rencontreState == 'aucune'
|
const isInArea = this.rencontreState == 'aucune'
|
||||||
? (this.isTerreAttache(targetCoord) || this.isConnaissanceFleuve(currentCoord, targetCoord) || TMRUtility.distanceOddq(fromOddq, toOddq) <= 1)
|
? (this.isTerreAttache(targetCoord) || this.isConnaissanceFleuve(currentCoord, targetCoord) || TMRUtility.distanceOddq(fromOddq, toOddq) <= 1)
|
||||||
: this.currentRencontre?.locList.find(coord => coord == targetCoord) ?? false
|
: this.currentRencontre?.locList.find(coord => coord == targetCoord) ?? false
|
||||||
if (isInArea) {
|
if (isInArea) {
|
||||||
switch (this.rencontreState) {
|
switch (this.rencontreState) {
|
||||||
case 'aucune': return 'normal';
|
case 'aucune': return 'normal';
|
||||||
case 'messager': return 'messager';
|
case 'passeur': case 'changeur': case 'messager': return this.rencontreState;
|
||||||
case 'passeur': case 'changeur': return 'saut';
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 'erreur'
|
return 'erreur';
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
@ -932,9 +952,8 @@ export class RdDTMRDialog extends Dialog {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
externalRefresh(tmrData) {
|
externalRefresh() {
|
||||||
this.createPixiSprites();
|
this.createPixiSprites();
|
||||||
this.forceDemiRevePositionView();
|
|
||||||
this.updateValuesDisplay();
|
this.updateValuesDisplay();
|
||||||
this.updateTokens();
|
this.updateTokens();
|
||||||
console.log("TMR REFRESHED !!!");
|
console.log("TMR REFRESHED !!!");
|
||||||
@ -946,23 +965,17 @@ export class RdDTMRDialog extends Dialog {
|
|||||||
this.nettoyerRencontre();
|
this.nettoyerRencontre();
|
||||||
}
|
}
|
||||||
let tmr = TMRUtility.getTMR(targetCoord);
|
let tmr = TMRUtility.getTMR(targetCoord);
|
||||||
//console.log("deplacerDemiReve", tmr, this);
|
|
||||||
// Gestion cases spéciales type Trou noir, etc
|
// Gestion cases spéciales type Trou noir, etc
|
||||||
tmr = await this.manageTmrInnaccessible(tmr);
|
tmr = await this.manageTmrInnaccessible(tmr);
|
||||||
|
|
||||||
await this.actor.updateCoordTMR(tmr.coord);
|
await this.actor.updateCoordTMR(tmr.coord);
|
||||||
|
|
||||||
this._updateDemiReve();
|
this.forceDemiRevePositionView();
|
||||||
if (ReglesOptionelles.isUsing("appliquer-fatigue")) {
|
if (ReglesOptionelles.isUsing("appliquer-fatigue")) {
|
||||||
this.cumulFatigue += this.fatigueParCase;
|
this.cumulFatigue += this.fatigueParCase;
|
||||||
}
|
}
|
||||||
this.updateValuesDisplay();
|
this.updateValuesDisplay();
|
||||||
game.socket.emit(SYSTEM_SOCKET_ID, {
|
this.actor.notifyRefreshTMR();
|
||||||
msg: "msg_tmr_move", data: {
|
|
||||||
actorId: this.actor.data._id,
|
|
||||||
tmrPos: Misc.data(this.actor).data.reve.tmrpos
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
if (deplacementType == 'normal') { // Pas de rencontres après un saut de type passeur/changeur/...
|
if (deplacementType == 'normal') { // Pas de rencontres après un saut de type passeur/changeur/...
|
||||||
await this.manageRencontre(tmr, () => this.postRencontre(tmr));
|
await this.manageRencontre(tmr, () => this.postRencontre(tmr));
|
||||||
@ -995,14 +1008,9 @@ export class RdDTMRDialog extends Dialog {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async forceDemiRevePositionView() {
|
async positionnerDemiReve(coord) {
|
||||||
this._updateDemiReve();
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
|
||||||
async forceDemiRevePosition(coord) {
|
|
||||||
await this.actor.updateCoordTMR(coord);
|
await this.actor.updateCoordTMR(coord);
|
||||||
this._updateDemiReve();
|
this.forceDemiRevePositionView();
|
||||||
let tmr = TMRUtility.getTMR(coord);
|
let tmr = TMRUtility.getTMR(coord);
|
||||||
await this.postRencontre(tmr);
|
await this.postRencontre(tmr);
|
||||||
return tmr;
|
return tmr;
|
||||||
@ -1025,14 +1033,6 @@ export class RdDTMRDialog extends Dialog {
|
|||||||
return this.pixiTMR.getCaseRectangle(TMRUtility.coordTMRToOddq(coord));
|
return this.pixiTMR.getCaseRectangle(TMRUtility.coordTMRToOddq(coord));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
|
||||||
_setTokenPosition(token) {
|
|
||||||
if (this.isDemiReveCache() && this.demiReve === token ) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
this.pixiTMR.setPosition(token.sprite, TMRUtility.coordTMRToOddq(token.coordTMR()));
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
_removeTokens(filter) {
|
_removeTokens(filter) {
|
||||||
const tokensToRemove = this.allTokens.filter(filter);
|
const tokensToRemove = this.allTokens.filter(filter);
|
||||||
@ -1043,7 +1043,10 @@ export class RdDTMRDialog extends Dialog {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
_trackToken(token) {
|
_trackToken(token) {
|
||||||
|
if (this.demiReve === token && this.isDemiReveCache()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.pixiTMR.setPosition(token.sprite, TMRUtility.coordTMRToOddq(token.coordTMR()));
|
||||||
this.allTokens.push(token);
|
this.allTokens.push(token);
|
||||||
this._setTokenPosition(token);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -668,7 +668,7 @@ export class RdDUtility {
|
|||||||
case "msg_tmr_move":
|
case "msg_tmr_move":
|
||||||
let actor = game.actors.get(sockmsg.data.actorId);
|
let actor = game.actors.get(sockmsg.data.actorId);
|
||||||
if (actor.isOwner || game.user.isGM) {
|
if (actor.isOwner || game.user.isGM) {
|
||||||
actor.refreshTMRView(sockmsg.data.tmrPos);
|
actor.refreshTMRView();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -683,7 +683,7 @@ export class RdDUtility {
|
|||||||
let coord = event.currentTarget.attributes['data-tmr-coord'].value;
|
let coord = event.currentTarget.attributes['data-tmr-coord'].value;
|
||||||
let actorId = event.currentTarget.attributes['data-actor-id'].value;
|
let actorId = event.currentTarget.attributes['data-actor-id'].value;
|
||||||
let actor = game.actors.get(actorId);
|
let actor = game.actors.get(actorId);
|
||||||
actor.tmrApp.forceDemiRevePosition(coord);
|
actor.tmrApp.positionnerDemiReve(coord);
|
||||||
});
|
});
|
||||||
// Gestion spécifique des sorts en réserve multiples (ie têtes)
|
// Gestion spécifique des sorts en réserve multiples (ie têtes)
|
||||||
html.on("click", '#sort-reserve', event => {
|
html.on("click", '#sort-reserve', event => {
|
||||||
|
@ -8,9 +8,14 @@ import { TMRType } from "./tmr-utility.js";
|
|||||||
const typeRencontres = {
|
const typeRencontres = {
|
||||||
|
|
||||||
messager: {
|
messager: {
|
||||||
msgSucces: (rencData) => `Le ${rencData.rencontre.name} vous propose d'emmener le message de votre un sort à ${rencData.rencontre.force} cases ${rencData.tmr.label}.`,
|
msgSucces: async (rencData) => {
|
||||||
msgEchec: (rencData) => `Le ${rencData.rencontre.name} est pressé et continue son chemin d'une traite sans vous accorder un regard.`,
|
if (rencData.actor.isTMRCache()){
|
||||||
postSucces: (tmrDialog, rencData) => {
|
return `Le ${rencData.rencontre.name} vous propose d'emmener le message de votre un sort, mais vous ne savez pas où vous êtes.`;
|
||||||
|
}
|
||||||
|
return `Le ${rencData.rencontre.name} vous propose d'emmener le message de votre un sort à ${rencData.rencontre.force} cases ${rencData.tmr.label}.`;
|
||||||
|
},
|
||||||
|
msgEchec: async (rencData)=> `Le ${rencData.rencontre.name} est pressé et continue son chemin d'une traite sans vous accorder un regard.`,
|
||||||
|
postSucces: async (tmrDialog, rencData) => {
|
||||||
tmrDialog.setStateRencontre(rencData.rencontre.type);
|
tmrDialog.setStateRencontre(rencData.rencontre.type);
|
||||||
tmrDialog.choisirCasePortee(rencData.tmr.coord, rencData.rencontre.force);
|
tmrDialog.choisirCasePortee(rencData.tmr.coord, rencData.rencontre.force);
|
||||||
},
|
},
|
||||||
@ -28,9 +33,14 @@ const typeRencontres = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
passeur: {
|
passeur: {
|
||||||
msgSucces: (rencData) => `Le ${rencData.rencontre.name} vous propose de vous transporter à ${rencData.rencontre.force} cases des ${rencData.tmr.label}.`,
|
msgSucces: async (rencData) => {
|
||||||
msgEchec: (rencData) => `Le prix que demande le ${rencData.rencontre.name} est trop élevé, vous êtes réduit à poursuivre votre chemin par vos propres moyens.`,
|
if (rencData.actor.isTMRCache()){
|
||||||
postSucces: (tmrDialog, rencData) => {
|
return `Le ${rencData.rencontre.name} vous propose de vous transporter, mais vous ne savez pas où vous êtes.`;
|
||||||
|
}
|
||||||
|
return `Le ${rencData.rencontre.name} vous propose de vous transporter à ${rencData.rencontre.force} cases des ${rencData.tmr.label}.`;
|
||||||
|
},
|
||||||
|
msgEchec: async (rencData)=> `Le prix que demande le ${rencData.rencontre.name} est trop élevé, vous êtes réduit à poursuivre votre chemin par vos propres moyens.`,
|
||||||
|
postSucces: async (tmrDialog, rencData) => {
|
||||||
tmrDialog.setStateRencontre(rencData.rencontre.type);
|
tmrDialog.setStateRencontre(rencData.rencontre.type);
|
||||||
tmrDialog.choisirCasePortee(rencData.tmr.coord, rencData.rencontre.force);
|
tmrDialog.choisirCasePortee(rencData.tmr.coord, rencData.rencontre.force);
|
||||||
},
|
},
|
||||||
@ -49,9 +59,9 @@ const typeRencontres = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
fleur: {
|
fleur: {
|
||||||
msgSucces: (rencData) => `Vous cueillez la ${rencData.rencontre.name}, son parfum vous apporte ${rencData.rencontre.force} points de Rêve.`,
|
msgSucces: async (rencData) => `Vous cueillez la ${rencData.rencontre.name}, son parfum vous apporte ${rencData.rencontre.force} points de Rêve.`,
|
||||||
msgEchec: (rencData) => `La ${rencData.rencontre.name} se fâne et disparaît entre vos doigts.`,
|
msgEchec: async (rencData)=> `La ${rencData.rencontre.name} se fâne et disparaît entre vos doigts.`,
|
||||||
postSucces: (tmrDialog, rencData) => tmrDialog.actor.reveActuelIncDec(rencData.rencontre.force),
|
postSucces: async (tmrDialog, rencData) => tmrDialog.actor.reveActuelIncDec(rencData.rencontre.force),
|
||||||
poesieSucces: {
|
poesieSucces: {
|
||||||
reference: "L'Ennemi, Charles Baudelaire",
|
reference: "L'Ennemi, Charles Baudelaire",
|
||||||
extrait: `Et qui sait si les fleurs nouvelles que je rêve
|
extrait: `Et qui sait si les fleurs nouvelles que je rêve
|
||||||
@ -66,9 +76,9 @@ const typeRencontres = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
mangeur: {
|
mangeur: {
|
||||||
msgSucces: (rencData) => `Le ${rencData.rencontre.name} claque de sa machoire dans le vide avant de fuir.`,
|
msgSucces: async (rencData) => `Le ${rencData.rencontre.name} claque de sa machoire dans le vide avant de fuir.`,
|
||||||
msgEchec: (rencData) => `Le ${rencData.rencontre.name} croque votre Rêve ! Il emporte ${rencData.rencontre.force} de vos points de rêve actuels`,
|
msgEchec: async (rencData)=> `Le ${rencData.rencontre.name} croque votre Rêve ! Il emporte ${rencData.rencontre.force} de vos points de rêve actuels`,
|
||||||
postEchec: (tmrDialog, rencData) => tmrDialog.actor.reveActuelIncDec(-rencData.rencontre.force),
|
postEchec: async (tmrDialog, rencData) => tmrDialog.actor.reveActuelIncDec(-rencData.rencontre.force),
|
||||||
poesieSucces: {
|
poesieSucces: {
|
||||||
reference: "Conseil, Victor Hugo",
|
reference: "Conseil, Victor Hugo",
|
||||||
extrait: `Rois ! la bure est souvent jalouse du velours.
|
extrait: `Rois ! la bure est souvent jalouse du velours.
|
||||||
@ -85,16 +95,17 @@ const typeRencontres = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
changeur: {
|
changeur: {
|
||||||
msgSucces: (rencData) => `Le ${rencData.rencontre.name} vaincu accepte de vous déplacer sur une autre ${TMRType[rencData.tmr.type].name} de votre choix en échange de sa liberté.`,
|
msgSucces: async (rencData) => `Le ${rencData.rencontre.name} vaincu accepte de vous déplacer sur une autre ${TMRType[rencData.tmr.type].name} de votre choix en échange de sa liberté.`,
|
||||||
msgEchec: (rencData) => {
|
msgEchec: async (rencData) => `Le ${rencData.rencontre.name} vous embobine avec des promesses, et vous transporte sur une autre ${TMRType[rencData.tmr.type].name} sans attendre votre avis.`,
|
||||||
rencData.newTMR = TMRUtility.getTMRAleatoire(it => it.type = rencData.tmr.type);
|
postSucces: async (tmrDialog, rencData) => {
|
||||||
return `Le ${rencData.rencontre.name} vous embobine avec des promesses, et vous transporte en ${rencData.newTMR.label} sans attendre votre avis.`;
|
|
||||||
},
|
|
||||||
postSucces: (tmrDialog, rencData) => {
|
|
||||||
tmrDialog.setStateRencontre(rencData.rencontre.type);
|
tmrDialog.setStateRencontre(rencData.rencontre.type);
|
||||||
tmrDialog.choisirCaseType(rencData.tmr.type);
|
tmrDialog.choisirCaseType(rencData.tmr.type);
|
||||||
},
|
},
|
||||||
postEchec: (tmrDialog, rencData) => tmrDialog.forceDemiRevePosition(rencData.newTMR.coord),
|
postEchec: async (tmrDialog, rencData) => {
|
||||||
|
const newTMR = await TMRUtility.getTMRAleatoire(it => it.type == rencData.tmr.type && it.coord != rencData.tmr.coord);
|
||||||
|
await tmrDialog.actor.forcerPositionTMRInconnue(newTMR);
|
||||||
|
tmrDialog.positionnerDemiReve(newTMR.coord);
|
||||||
|
},
|
||||||
poesieSucces: {
|
poesieSucces: {
|
||||||
reference: "Caligula - IIIème chant, Gérard de Nerval",
|
reference: "Caligula - IIIème chant, Gérard de Nerval",
|
||||||
extrait: `Allez, que le caprice emporte
|
extrait: `Allez, que le caprice emporte
|
||||||
@ -111,9 +122,9 @@ const typeRencontres = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
briseur: {
|
briseur: {
|
||||||
msgSucces: (rencData) => `Le ${rencData.rencontre.name} tente vainement de vous déconcentrer, avant de fuir sans demander son reste.`,
|
msgSucces: async (rencData) => `Le ${rencData.rencontre.name} tente vainement de vous déconcentrer, avant de fuir sans demander son reste.`,
|
||||||
msgEchec: (rencData) => `Le ${rencData.rencontre.name} vous déconcentre au point de briser votre demi-rêve.`,
|
msgEchec: async (rencData)=> `Le ${rencData.rencontre.name} vous déconcentre au point de briser votre demi-rêve.`,
|
||||||
postEchec: (tmrDialog, rencData) => tmrDialog.close(),
|
postEchec: async (tmrDialog, rencData) => tmrDialog.close(),
|
||||||
poesieSucces: {
|
poesieSucces: {
|
||||||
reference: "Rêve de Dragon, Denis Gerfaud",
|
reference: "Rêve de Dragon, Denis Gerfaud",
|
||||||
extrait: `La légende affirme que ce sont les Gnomes qui furent
|
extrait: `La légende affirme que ce sont les Gnomes qui furent
|
||||||
@ -134,8 +145,8 @@ const typeRencontres = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
reflet: {
|
reflet: {
|
||||||
msgSucces: (rencData) => `Le ${rencData.rencontre.name} s'estompe dans l'oubli.`,
|
msgSucces: async (rencData) => `Le ${rencData.rencontre.name} s'estompe dans l'oubli.`,
|
||||||
msgEchec: (rencData) => `Vous êtes submergé par un ${rencData.rencontre.name}, les souvenirs vous retiennent tant qu'il ne sera pas vaincu!`,
|
msgEchec: async (rencData)=> `Vous êtes submergé par un ${rencData.rencontre.name}, les souvenirs vous retiennent tant qu'il ne sera pas vaincu!`,
|
||||||
poesieSucces: {
|
poesieSucces: {
|
||||||
reference: "Une charogne, Charles Baudelaire",
|
reference: "Une charogne, Charles Baudelaire",
|
||||||
extrait: `Les formes s'effaçaient et n'étaient plus qu'un rêve,
|
extrait: `Les formes s'effaçaient et n'étaient plus qu'un rêve,
|
||||||
@ -152,9 +163,9 @@ const typeRencontres = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
passeurfou: {
|
passeurfou: {
|
||||||
msgSucces: (rencData) => `Le ${rencData.rencontre.name} tente vainement de découvrir où vous avez caché vos réserves. Vous le chassez, et en déroute il part harceler un autre voyageur du rêve.`,
|
msgSucces: async (rencData) => `Le ${rencData.rencontre.name} tente vainement de découvrir où vous avez caché vos réserves. Vous le chassez, et en déroute il part harceler un autre voyageur du rêve.`,
|
||||||
msgEchec: (rencData) => TMRRencontres.msgEchecPasseurFou(rencData),
|
msgEchec: async (rencData)=> TMRRencontres.msgEchecPasseurFou(rencData),
|
||||||
postEchec: (tmrDialog, rencData) => TMRRencontres.postEchecPasseurFou(tmrDialog, rencData),
|
postEchec: async (tmrDialog, rencData) => TMRRencontres.postEchecPasseurFou(tmrDialog, rencData),
|
||||||
poesieSucces: {
|
poesieSucces: {
|
||||||
reference: "Un Fou et un Sage, Jean de La Fontaine",
|
reference: "Un Fou et un Sage, Jean de La Fontaine",
|
||||||
extrait: `Certain Fou poursuivait à coups de pierre un Sage.
|
extrait: `Certain Fou poursuivait à coups de pierre un Sage.
|
||||||
@ -174,9 +185,9 @@ const typeRencontres = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
tbblanc: {
|
tbblanc: {
|
||||||
msgSucces: (rencData) => `Le ${rencData.rencontre.name} souleve une poussière blanche, vous tenez bon, et il tourbillonne en s'éloignant.`,
|
msgSucces: async (rencData) => `Le ${rencData.rencontre.name} souleve une poussière blanche, vous tenez bon, et il tourbillonne en s'éloignant.`,
|
||||||
msgEchec: (rencData) => `Le souffle du ${rencData.rencontre.name} vous déstabilise et vous emmène dans un nuage de poussière.`,
|
msgEchec: async (rencData)=> `Le souffle du ${rencData.rencontre.name} vous déstabilise et vous emmène dans un nuage de poussière.`,
|
||||||
postEchec: (tmrDialog, rencData) => TMRRencontres.onPostEchecTourbillon(tmrDialog, rencData, 1),
|
postEchec: async (tmrDialog, rencData) => TMRRencontres.onPostEchecTourbillon(tmrDialog, rencData, 1),
|
||||||
poesieSucces: {
|
poesieSucces: {
|
||||||
reference: "Rêve de Dragon, Denis Gerfaud",
|
reference: "Rêve de Dragon, Denis Gerfaud",
|
||||||
extrait: `Le Premier Âge fut appelé l'Âge des Dragons. Ce fut le commencement
|
extrait: `Le Premier Âge fut appelé l'Âge des Dragons. Ce fut le commencement
|
||||||
@ -191,9 +202,9 @@ const typeRencontres = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
tbnoir: {
|
tbnoir: {
|
||||||
msgSucces: (rencData) => `Le ${rencData.rencontre.name} orageux vous enveloppe de fureur et d'éclairs, vous tenez bon face à la tempête qui s'éloigne sans vous éloigner de votre chemin.`,
|
msgSucces: async (rencData) => `Le ${rencData.rencontre.name} orageux vous enveloppe de fureur et d'éclairs, vous tenez bon face à la tempête qui s'éloigne sans vous éloigner de votre chemin.`,
|
||||||
msgEchec: (rencData) => `Le ${rencData.rencontre.name} furieux vous secoue tel un fichu de paille malmené par les vents, et vous emporte dans la tourmente.`,
|
msgEchec: async (rencData)=> `Le ${rencData.rencontre.name} furieux vous secoue tel un fichu de paille malmené par les vents, et vous emporte dans la tourmente.`,
|
||||||
postEchec: (tmrDialog, rencData) => TMRRencontres.onPostEchecTourbillon(tmrDialog, rencData, 2),
|
postEchec: async (tmrDialog, rencData) => TMRRencontres.onPostEchecTourbillon(tmrDialog, rencData, 2),
|
||||||
poesieSucces: {
|
poesieSucces: {
|
||||||
reference: "Rêve de Dragon, Denis Gerfaud",
|
reference: "Rêve de Dragon, Denis Gerfaud",
|
||||||
extrait: `Car le Second Âge fut bel et bien celui des Magiciens. Durant cette période, les
|
extrait: `Car le Second Âge fut bel et bien celui des Magiciens. Durant cette période, les
|
||||||
@ -207,9 +218,9 @@ const typeRencontres = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
tbrouge: {
|
tbrouge: {
|
||||||
msgSucces: (rencData) => `Le ${rencData.rencontre.name} s'abat avec violence mais vous êtes plus rapide et parvenez à lui échapper.`,
|
msgSucces: async (rencData) => `Le ${rencData.rencontre.name} s'abat avec violence mais vous êtes plus rapide et parvenez à lui échapper.`,
|
||||||
msgEchec: (rencData) => `Le ${rencData.rencontre.name} vous frappe de milliers de morsure et vous malmène à travers les terres médianes.`,
|
msgEchec: async (rencData)=> `Le ${rencData.rencontre.name} vous frappe de milliers de morsure et vous malmène à travers les terres médianes.`,
|
||||||
postEchec: (tmrDialog, rencData) => TMRRencontres.onPostEchecTourbillonRouge(tmrDialog, rencData),
|
postEchec: async (tmrDialog, rencData) => TMRRencontres.onPostEchecTourbillonRouge(tmrDialog, rencData),
|
||||||
poesieSucces: {
|
poesieSucces: {
|
||||||
reference: "Qu'est-ce de votre vie ? une bouteille molle, Jean-Baptiste Chassignet",
|
reference: "Qu'est-ce de votre vie ? une bouteille molle, Jean-Baptiste Chassignet",
|
||||||
extrait: `Qu'est-ce de votre vie ? un tourbillon rouant
|
extrait: `Qu'est-ce de votre vie ? un tourbillon rouant
|
||||||
@ -228,10 +239,10 @@ const typeRencontres = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
rdd: {
|
rdd: {
|
||||||
msgSucces: (rencData) => `A tout seigneur, tout honneur, vous faites face à un ${rencData.rencontre.name}. Vous le maîtrisez et récupérez ses rêves. Vous gagnez ses ${rencData.rencontre.force} points de rêve`,
|
msgSucces: async (rencData) => `A tout seigneur, tout honneur, vous faites face à un ${rencData.rencontre.name}. Vous le maîtrisez et récupérez ses rêves. Vous gagnez ses ${rencData.rencontre.force} points de rêve`,
|
||||||
msgEchec: (rencData) => `A tout seigneur, tout honneur, vous faites face à un ${rencData.rencontre.name}. La rencontre tourne au cauchemar, dans la lutte épique, vous subissez ${rencData.rolled.isETotal ? 'deux queues' : 'une queue'} de dragon!`,
|
msgEchec: async (rencData)=> `A tout seigneur, tout honneur, vous faites face à un ${rencData.rencontre.name}. La rencontre tourne au cauchemar, dans la lutte épique, vous subissez ${rencData.rolled.isETotal ? 'deux queues' : 'une queue'} de dragon!`,
|
||||||
postSucces: (tmrDialog, rencData) => TMRRencontres.onPostSuccessReveDeDragon(tmrDialog, rencData),
|
postSucces: async (tmrDialog, rencData) => TMRRencontres.onPostSuccessReveDeDragon(tmrDialog, rencData),
|
||||||
postEchec: (tmrDialog, rencData) => TMRRencontres.onPostEchecReveDeDragon(tmrDialog, rencData),
|
postEchec: async (tmrDialog, rencData) => TMRRencontres.onPostEchecReveDeDragon(tmrDialog, rencData),
|
||||||
poesieSucces: {
|
poesieSucces: {
|
||||||
reference: "Rêve de Dragon, Denis Gerfaud",
|
reference: "Rêve de Dragon, Denis Gerfaud",
|
||||||
extrait: `Le monde est Rêve de Dragons, mais nous ne savons
|
extrait: `Le monde est Rêve de Dragons, mais nous ne savons
|
||||||
@ -404,7 +415,7 @@ export class TMRRencontres {
|
|||||||
static async gererRencontre(tmrDialog, rencData) {
|
static async gererRencontre(tmrDialog, rencData) {
|
||||||
let gestion = TMRRencontres.getGestionRencontre(rencData.rencontre.type);
|
let gestion = TMRRencontres.getGestionRencontre(rencData.rencontre.type);
|
||||||
if (rencData.rolled.isSuccess) {
|
if (rencData.rolled.isSuccess) {
|
||||||
rencData.message = gestion.msgSucces(rencData);
|
rencData.message = await gestion.msgSucces(rencData);
|
||||||
if (rencData.nbRounds > 1) {
|
if (rencData.nbRounds > 1) {
|
||||||
rencData.message += ` Au total, vous avez passé ${rencData.nbRounds} rounds à vous battre!`;
|
rencData.message += ` Au total, vous avez passé ${rencData.nbRounds} rounds à vous battre!`;
|
||||||
}
|
}
|
||||||
@ -412,7 +423,7 @@ export class TMRRencontres {
|
|||||||
return gestion.postSucces;
|
return gestion.postSucces;
|
||||||
}
|
}
|
||||||
|
|
||||||
rencData.message = gestion.msgEchec(rencData);
|
rencData.message = await gestion.msgEchec(rencData);
|
||||||
if (rencData.nbRounds > 1) {
|
if (rencData.nbRounds > 1) {
|
||||||
rencData.message += ` Vous avez passé ${rencData.nbRounds} rounds à lutter!`;
|
rencData.message += ` Vous avez passé ${rencData.nbRounds} rounds à lutter!`;
|
||||||
}
|
}
|
||||||
@ -444,7 +455,7 @@ export class TMRRencontres {
|
|||||||
if (tmrData.sortReserve) {
|
if (tmrData.sortReserve) {
|
||||||
await tmrDialog.processSortReserve(tmrData.sortReserve);
|
await tmrDialog.processSortReserve(tmrData.sortReserve);
|
||||||
}
|
}
|
||||||
await tmrDialog.forceDemiRevePosition(tmrData.newTMR.coord);
|
await tmrDialog.positionnerDemiReve(tmrData.newTMR.coord);
|
||||||
if (tmrData.sortReserve) {
|
if (tmrData.sortReserve) {
|
||||||
tmrDialog.close();
|
tmrDialog.close();
|
||||||
}
|
}
|
||||||
@ -469,7 +480,7 @@ export class TMRRencontres {
|
|||||||
for (let i = 0; i < cases; i++) {
|
for (let i = 0; i < cases; i++) {
|
||||||
coord = await TMRUtility.deplaceTMRAleatoire(actor, coord).coord;
|
coord = await TMRUtility.deplaceTMRAleatoire(actor, coord).coord;
|
||||||
}
|
}
|
||||||
await tmrDialog.forceDemiRevePosition(coord)
|
await tmrDialog.positionnerDemiReve(coord)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
|
@ -94,9 +94,8 @@ export class Draconique {
|
|||||||
token[type ?? this.code()] = linkData;
|
token[type ?? this.code()] = linkData;
|
||||||
pixiTMR.addTooltip(token.sprite, this.tooltip(linkData));
|
pixiTMR.addTooltip(token.sprite, this.tooltip(linkData));
|
||||||
return token;
|
return token;
|
||||||
|
|
||||||
return sprite;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* factory d'élément graphique PIXI correpsondant à l'objet draconique
|
* factory d'élément graphique PIXI correpsondant à l'objet draconique
|
||||||
* @param {*} pixiTMR instance de PixiTMR qui gère les tooltips, les méthodes de création de sprite standard, les clicks.
|
* @param {*} pixiTMR instance de PixiTMR qui gère les tooltips, les méthodes de création de sprite standard, les clicks.
|
||||||
|
Loading…
Reference in New Issue
Block a user