diff --git a/changelog.md b/changelog.md
index acdb92cd..93a4e484 100644
--- a/changelog.md
+++ b/changelog.md
@@ -1,6 +1,8 @@
# 12.0
## 12.0.15 - Le messager d'Astrobazzarh
- Les messages de maladies ne sont plus publics
+- Les messages privés dans les TMR sont aussi envoyés au GM
+
## 12.0.14 - Les légions d'Astrobazzarh
- Feuille de PNJ:
- boutons standard (encaissement, ...)
diff --git a/module/actor.js b/module/actor.js
index ee0569d2..73c21990 100644
--- a/module/actor.js
+++ b/module/actor.js
@@ -159,7 +159,7 @@ export class RdDActor extends RdDBaseActorSang {
const potionUpdates = await Promise.all(potions.map(async it => {
const nouveauReve = Math.max(it.system.pr - 1, 0)
ChatMessage.create({
- whisper: ChatUtility.getWhisperRecipientsAndGMs(this.name),
+ whisper: ChatUtility.getOwners(this),
content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-potionenchantee-chateaudormant.html`, {
pr: nouveauReve,
alias: this.name,
@@ -210,7 +210,7 @@ export class RdDActor extends RdDBaseActorSang {
/* -------------------------------------------- */
async grisReve(nbJours) {
let message = {
- whisper: ChatUtility.getWhisperRecipientsAndGMs(this.name),
+ whisper: ChatUtility.getOwners(this),
content: `${nbJours} jours de gris rêve sont passés. `
};
for (let i = 0; i < nbJours; i++) {
@@ -264,7 +264,7 @@ export class RdDActor extends RdDBaseActorSang {
async dormirChateauDormant() {
if (!ReglesOptionnelles.isUsing("chateau-dormant-gardien") || !this.system.sommeil || this.system.sommeil.nouveaujour) {
const message = {
- whisper: ChatUtility.getWhisperRecipientsAndGMs(this.name),
+ whisper: ChatUtility.getOwners(this),
content: ""
};
@@ -400,7 +400,7 @@ export class RdDActor extends RdDBaseActorSang {
/* -------------------------------------------- */
async remiseANeuf() {
ChatMessage.create({
- whisper: ChatUtility.getWhisperRecipientsAndGMs(this.name),
+ whisper: ChatUtility.getOwners(this),
content: 'Remise à neuf de ' + this.name
});
await this.supprimerBlessures(it => true);
@@ -417,7 +417,7 @@ export class RdDActor extends RdDBaseActorSang {
/* -------------------------------------------- */
async dormir(heures, options = { grisReve: false, chateauDormant: false }) {
const message = {
- whisper: ChatUtility.getWhisperRecipientsAndGMs(this.name),
+ whisper: ChatUtility.getOwners(this),
content: this.name + ': '
};
const insomnie = this.system.sommeil?.insomnie || heures == 0;
@@ -488,7 +488,7 @@ export class RdDActor extends RdDBaseActorSang {
else {
if (!ReglesOptionnelles.isUsing("recuperation-reve")) {
ChatMessage.create({
- whisper: ChatUtility.getWhisperRecipientsAndGMs(this.name),
+ whisper: ChatUtility.getOwners(this),
content: `Pas de récupération de rêve (${reve} points ignorés)`
});
jetsReve.push(0);
@@ -919,7 +919,7 @@ export class RdDActor extends RdDBaseActorSang {
await this.createEmbeddedDocuments('Item', [souffle]);
if (options.chat) {
ChatMessage.create({
- whisper: ChatUtility.getWhisperRecipientsAndGMs(this.name),
+ whisper: ChatUtility.getOwners(this),
content: this.name + " subit un Souffle de Dragon : " + souffle.name
});
}
@@ -939,7 +939,7 @@ export class RdDActor extends RdDBaseActorSang {
await this.createEmbeddedDocuments('Item', [queue]);
if (options.chat) {
ChatMessage.create({
- whisper: ChatUtility.getWhisperRecipientsAndGMs(this.name),
+ whisper: ChatUtility.getOwners(this),
content: this.name + " subit une Queue de Dragon : " + queue.name
});
}
@@ -977,7 +977,7 @@ export class RdDActor extends RdDBaseActorSang {
let tmr = await TMRUtility.getTMRAleatoire(tmr => accessible(tmr) && !innaccessible.includes(tmr.coord));
ChatMessage.create({
content: `${raison} : ré-insertion aléatoire.`,
- whisper: ChatUtility.getWhisperRecipientsAndGMs(this.name)
+ whisper: ChatUtility.getOwners(this)
});
await this.forcerPositionTMRInconnue(tmr);
return tmr;
@@ -1082,7 +1082,7 @@ export class RdDActor extends RdDBaseActorSang {
const jetMoral = await this._jetDeMoral(situation);
const finMessage = (jetMoral.succes ? messageReussi : messageManque) ?? (jetMoral.ajustement == 0 ? "Vous gardez votre moral" : jetMoral.ajustement > 0 ? "Vous gagnez du moral" : "Vous perdez du moral");
ChatMessage.create({
- whisper: ChatUtility.getWhisperRecipientsAndGMs(this.name),
+ whisper: ChatUtility.getOwners(this),
content: `${finMessage} - jet ${jetMoral.succes ? "réussi" : "manqué"} en situation ${situation} (${jetMoral.jet}/${jetMoral.difficulte}).`
});
return jetMoral.ajustement;
@@ -1419,7 +1419,7 @@ export class RdDActor extends RdDBaseActorSang {
};
ChatMessage.create({
- whisper: ChatUtility.getWhisperRecipientsAndGMs(this.name),
+ whisper: ChatUtility.getOwners(this),
content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-resultat-transformer-stress.html`, stressRollData)
});
@@ -1505,7 +1505,7 @@ export class RdDActor extends RdDBaseActorSang {
}
if (display) {
ChatMessage.create({
- whisper: ChatUtility.getWhisperRecipientsAndGMs(this.name),
+ whisper: ChatUtility.getOwners(this),
content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-actor-carac-xp.html`, checkXp)
});
}
@@ -1537,7 +1537,7 @@ export class RdDActor extends RdDBaseActorSang {
}
if (display) {
ChatMessage.create({
- whisper: ChatUtility.getWhisperRecipientsAndGMs(this.name),
+ whisper: ChatUtility.getOwners(this),
content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-actor-competence-xp.html`, checkXp)
});
}
@@ -1563,7 +1563,7 @@ export class RdDActor extends RdDBaseActorSang {
}
else {
ChatMessage.create({
- whisper: ChatUtility.getWhisperRecipientsAndGMs(this.name),
+ whisper: ChatUtility.getOwners(this),
content: content
});
}
@@ -1666,7 +1666,7 @@ export class RdDActor extends RdDBaseActorSang {
}
ChatMessage.create({
content: "Vous êtes sous le coup d'une Mauvaise Rencontre en Persective." + addMsg,
- whisper: ChatMessage.getWhisperRecipients(this.name)
+ whisper: ChatUtility.getOwners(this)
});
}
return rencSpecial;
@@ -1678,7 +1678,7 @@ export class RdDActor extends RdDBaseActorSang {
if (countInertieDraconique > 0) {
ChatMessage.create({
content: `Vous êtes sous le coup d'Inertie Draconique : vous perdrez ${countInertieDraconique + 1} cases de Fatigue par déplacement au lieu d'une.`,
- whisper: ChatMessage.getWhisperRecipients(this.name)
+ whisper: ChatUtility.getOwners(this)
});
}
return countInertieDraconique + 1;
@@ -1690,7 +1690,7 @@ export class RdDActor extends RdDBaseActorSang {
await this.reveActuelIncDec(-1);
ChatMessage.create({
content: "Vous êtes sous le coup d'un Péage : l'entrée sur cette case vous a coûté 1 Point de Rêve (déduit automatiquement).",
- whisper: ChatMessage.getWhisperRecipients(this.name)
+ whisper: ChatUtility.getOwners(this)
});
}
}
@@ -2270,7 +2270,7 @@ export class RdDActor extends RdDBaseActorSang {
// Cas de désir lancinant, pas d'expérience sur particulière
ChatMessage.create({
content: `Vous souffrez au moins d'un Désir Lancinant, vous ne pouvez pas gagner d'expérience sur une Particulière tant que le désir n'est pas assouvi`,
- whisper: ChatMessage.getWhisperRecipients(this.name)
+ whisper: ChatUtility.getOwners(this)
});
return []
}
@@ -2405,7 +2405,7 @@ export class RdDActor extends RdDBaseActorSang {
if (countMonteeLaborieuse > 0) {
ChatMessage.create({
content: `Vous êtes sous le coup d'une Montée Laborieuse : vos montées en TMR coûtent ${countMonteeLaborieuse} Point de Rêve de plus.`,
- whisper: ChatMessage.getWhisperRecipients(this.name)
+ whisper: ChatUtility.getOwners(this)
});
}
return countMonteeLaborieuse;
@@ -2453,7 +2453,7 @@ export class RdDActor extends RdDBaseActorSang {
if (this.getReveActuel() < minReveValue) {
ChatMessage.create({
content: `Vous n'avez les ${minReveValue} Points de Reve nécessaires pour monter dans les Terres Médianes`,
- whisper: ChatMessage.getWhisperRecipients(this.name)
+ whisper: ChatUtility.getOwners(this)
});
return;
}
@@ -2850,7 +2850,7 @@ export class RdDActor extends RdDBaseActorSang {
await this.setBonusPotionSoin(potionData.system.herbebonus);
}
ChatMessage.create({
- whisper: ChatUtility.getWhisperRecipientsAndGMs(this.name),
+ whisper: ChatUtility.getOwners(this),
content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-consommer-potion-soin.html`, potionData)
});
}
@@ -2887,7 +2887,7 @@ export class RdDActor extends RdDBaseActorSang {
this.bonusRepos = potionData.system.herbebonus;
}
ChatMessage.create({
- whisper: ChatUtility.getWhisperRecipientsAndGMs(this.name),
+ whisper: ChatUtility.getOwners(this),
content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-consommer-potion-repos.html`, potionData)
});
}
@@ -2919,7 +2919,7 @@ export class RdDActor extends RdDBaseActorSang {
this.diminuerQuantiteObjet(herbeData._id, herbeData.nbBrins);
ChatMessage.create({
- whisper: ChatUtility.getWhisperRecipientsAndGMs(this.name),
+ whisper: ChatUtility.getOwners(this),
content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-fabriquer-potion-base.html`, messageData)
});
}
@@ -2944,7 +2944,7 @@ export class RdDActor extends RdDBaseActorSang {
}
}
ChatMessage.create({
- whisper: ChatUtility.getWhisperRecipientsAndGMs(this.name),
+ whisper: ChatUtility.getOwners(this),
content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-consommer-potion-generique.html`, potionData)
});
}
@@ -3044,7 +3044,7 @@ export class RdDActor extends RdDBaseActorSang {
/* -------------------------------------------- */
notifyGestionTeteSouffleQueue(item, manualMessage = true) {
ChatMessage.create({
- whisper: ChatUtility.getWhisperRecipientsAndGMs(this.name),
+ whisper: ChatUtility.getOwners(this),
content: `${this.name} a reçu un/une ${item.type}: ${item.name}, qui ${manualMessage ? "n'est pas" : "est"} géré(e) automatiquement. ${manualMessage ? manualMessage : ''}`
});
}
diff --git a/module/actor/base-actor-reve.js b/module/actor/base-actor-reve.js
index 32015d56..06b560f5 100644
--- a/module/actor/base-actor-reve.js
+++ b/module/actor/base-actor-reve.js
@@ -189,7 +189,7 @@ export class RdDBaseActorReve extends RdDBaseActor {
getEffect(effectId) {
return this.getEmbeddedCollection("ActiveEffect").find(it => it.statuses?.has(effectId));
}
-
+
async setEffect(effectId, status) {
if (this.isEffectAllowed(effectId)) {
const effect = this.getEffect(effectId);
@@ -201,7 +201,7 @@ export class RdDBaseActorReve extends RdDBaseActor {
}
}
}
-
+
async removeEffect(id) {
const effect = this.getEmbeddedCollection("ActiveEffect").find(it => it.id == id);
if (effect) {
@@ -296,7 +296,7 @@ export class RdDBaseActorReve extends RdDBaseActor {
/* -------------------------------------------- */
async rollCarac(caracName, jetResistance = undefined) {
- if (Grammar.equalsInsensitive(caracName, 'taille')){
+ if (Grammar.equalsInsensitive(caracName, 'taille')) {
return
}
RdDEmpoignade.checkEmpoignadeEnCours(this)
@@ -418,9 +418,9 @@ export class RdDBaseActorReve extends RdDBaseActor {
return;
}
const armure = await this.computeArmure(rollData);
- if (ReglesOptionnelles.isUsing('validation-encaissement-gr')){
+ if (ReglesOptionnelles.isUsing('validation-encaissement-gr')) {
await this.encaisserDommagesValidationGR(rollData, armure, attacker?.id, show);
- }
+ }
else {
const jet = await RdDUtility.jetEncaissement(rollData, armure, { showDice: SHOW_DICE });
await this.$onEncaissement(jet, show, attacker);
@@ -456,16 +456,19 @@ export class RdDBaseActorReve extends RdDBaseActor {
show: show ?? {}
});
- await ChatUtility.createChatWithRollMode(this.name, {
- roll: encaissement.roll,
- content: await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-resultat-encaissement.html', encaissement)
- });
+ await ChatUtility.createChatWithRollMode(
+ {
+ roll: encaissement.roll,
+ content: await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-resultat-encaissement.html', encaissement)
+ },
+ this
+ )
if (!encaissement.hasPlayerOwner && encaissement.endurance != 0) {
- encaissement = foundry.utils.duplicate(encaissement);
- encaissement.isGM = true;
+ encaissement = foundry.utils.duplicate(encaissement)
+ encaissement.isGM = true
ChatMessage.create({
- whisper: ChatMessage.getWhisperRecipients("GM"),
+ whisper: ChatUtility.getGMs(),
content: await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-resultat-encaissement.html', encaissement)
});
}
diff --git a/module/actor/base-actor-sang-sheet.js b/module/actor/base-actor-sang-sheet.js
index 2d45db03..2dcd511a 100644
--- a/module/actor/base-actor-sang-sheet.js
+++ b/module/actor/base-actor-sang-sheet.js
@@ -39,8 +39,8 @@ export class RdDBaseActorSangSheet extends RdDBaseActorReveSheet {
ChatMessage.create({
content: `Jet d'Endurance : ${result.jetEndurance} / ${endurance}
${this.actor.name} a ${result.sonne ? 'échoué' : 'réussi'} son Jet d'Endurance ${result.sonne ? 'et devient Sonné' : ''}`,
- whisper: ChatUtility.getWhisperRecipientsAndGMs(this.actor.name)
- });
+ whisper: ChatUtility.getOwners(this.actor)
+ })
}
}
diff --git a/module/actor/base-actor-sang.js b/module/actor/base-actor-sang.js
index 6e784920..978c27c2 100644
--- a/module/actor/base-actor-sang.js
+++ b/module/actor/base-actor-sang.js
@@ -5,6 +5,7 @@ import { ITEM_TYPES } from "../item.js";
import { RdDBaseActorReve } from "./base-actor-reve.js";
import { RdDDice } from "../rdd-dice.js";
import { RdDItemBlessure } from "../item/blessure.js";
+import { ChatUtility } from "../chat-utility.js";
/**
* Classe de base pour les acteurs qui peuvent subir des blessures
@@ -180,7 +181,7 @@ export class RdDBaseActorSang extends RdDBaseActorReve {
}
}
const endActuelle = this.getEnduranceActuelle();
- const blessure = await RdDItemBlessure.createBlessure(this, encaissement.gravite, encaissement.dmg?.loc.label ??'', attacker);
+ const blessure = await RdDItemBlessure.createBlessure(this, encaissement.gravite, encaissement.dmg?.loc.label ?? '', attacker);
if (blessure.isCritique()) {
encaissement.endurance = endActuelle;
}
@@ -196,9 +197,9 @@ export class RdDBaseActorSang extends RdDBaseActorReve {
return blessure;
}
- async supprimerBlessure({gravite}) {
+ async supprimerBlessure({ gravite }) {
const toDelete = this.itemTypes[ITEM_TYPES.blessure].find(it => it.system.gravite == gravite)?.id
- if (toDelete){
+ if (toDelete) {
await this.deleteEmbeddedDocuments('Item', [toDelete]);
}
}
@@ -216,7 +217,10 @@ export class RdDBaseActorSang extends RdDBaseActorReve {
/* -------------------------------------------- */
async jetDeVie() {
if (this.isDead()) {
- ChatMessage.create({ content: `Jet de Vie: ${this.name} est déjà mort, ce n'est pas la peine d'en rajouter !!!!!`, whisper: ChatMessage.getWhisperRecipients(this.name) });
+ ChatMessage.create({
+ content: `Jet de Vie: ${this.name} est déjà mort, ce n'est pas la peine d'en rajouter !!!!!`,
+ whisper: ChatUtility.getOwners(this)
+ })
return
}
const jetDeVie = await RdDDice.roll("1d20");
@@ -243,7 +247,10 @@ export class RdDBaseActorSang extends RdDBaseActorReve {
else if (prochainJet > 0) {
msgText += `
Prochain jet de vie dans ${prochainJet} ${isCritique ? 'round' : 'minute'}${prochainJet > 1 ? 's' : ''} ${isCritique ? '(état critique)' : '(état grave)'}`
}
- ChatMessage.create({ content: msgText, whisper: ChatMessage.getWhisperRecipients(this.name) });
+ ChatMessage.create({
+ content: msgText,
+ whisper: ChatUtility.getOwners(this)
+ });
}
/* -------------------------------------------- */
diff --git a/module/actor/base-actor.js b/module/actor/base-actor.js
index 228181ad..57fbcb07 100644
--- a/module/actor/base-actor.js
+++ b/module/actor/base-actor.js
@@ -270,6 +270,7 @@ export class RdDBaseActor extends Actor {
}
let fortune = this.getFortune();
console.log("payer", game.user.character, depense, fortune);
+ // TODO: passer en handlebars
let msg = "";
if (fortune >= depense) {
await Monnaie.optimiserFortune(this, fortune - depense);
@@ -279,11 +280,10 @@ export class RdDBaseActor extends Actor {
msg = "Vous n'avez pas assez d'argent pour payer cette somme !";
}
- let message = {
- whisper: ChatUtility.getWhisperRecipientsAndGMs(this.name),
+ ChatMessage.create({
+ whisper: ChatUtility.getOwners(this),
content: msg
- };
- ChatMessage.create(message);
+ })
}
async depenserSols(sols) {
@@ -317,7 +317,7 @@ export class RdDBaseActor extends Actor {
RdDAudio.PlayContextAudio("argent"); // Petit son
ChatMessage.create({
- whisper: ChatUtility.getWhisperRecipientsAndGMs(this.name),
+ whisper: ChatUtility.getOwners(this.name),
content: `Vous avez reçu ${sols} Sols ${fromActor ? " de " + fromActor.name : ''}, qui ont été ajoutés à votre argent.`
});
}
@@ -371,7 +371,7 @@ export class RdDBaseActor extends Actor {
ChatMessage.create({
user: achat.userId,
speaker: { alias: (acheteur ?? vendeur).name },
- whisper: ChatUtility.getWhisperRecipientsAndGMs(this.name),
+ whisper: ChatUtility.getOwners(this),
content: await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-achat-item.html', chatAchatItem)
});
diff --git a/module/chat-utility.js b/module/chat-utility.js
index c5a56534..76792c86 100644
--- a/module/chat-utility.js
+++ b/module/chat-utility.js
@@ -8,15 +8,20 @@ import { RdDTimestamp } from "./time/rdd-timestamp.js";
*/
export class ChatUtility {
+ static async init() {
+ Hooks.on("renderChatMessage", async (app, html, msg) => await ChatUtility.onRenderChatMessage(app, html, msg))
+ Hooks.on("createChatMessage", async (chatMessage, options, id) => await ChatUtility.onCreateChatMessage(chatMessage, options, id))
+ }
+
/* -------------------------------------------- */
static onSocketMessage(sockmsg) {
switch (sockmsg.msg) {
- case "msg_delete_chat_message": return ChatUtility.onRemoveMessages(sockmsg.data);
- case "msg_user_ui_notifications": return ChatUtility.onNotifyUser(sockmsg.data);
+ case "msg_gm_chat_message": return ChatUtility.handleGMChatMessage(sockmsg.data)
+ case "msg_delete_chat_message": return ChatUtility.onRemoveMessages(sockmsg.data)
+ case "msg_user_ui_notifications": return ChatUtility.onNotifyUser(sockmsg.data)
}
}
-
/* -------------------------------------------- */
static notifyUser(userId, level = 'info', message) {
const socketData = {
@@ -78,77 +83,90 @@ export class ChatUtility {
}
/* -------------------------------------------- */
- static async createChatWithRollMode(name, chatOptions) {
- let rollMode = game.settings.get("core", "rollMode")
- switch (rollMode) {
+ static async createChatWithRollMode(messageData, actor = undefined) {
+ switch (game.settings.get("core", "rollMode")) {
case "blindroll": // GM only
if (!game.user.isGM) {
- ChatUtility.blindMessageToGM(chatOptions);
-
- chatOptions.whisper = [game.user.id];
- chatOptions.content = "Message envoyé en aveugle au Gardien";
+ ChatUtility.blindMessageToGM(messageData)
+ messageData.whisper = [game.user];
+ messageData.content = "Message envoyé en aveugle au Gardien"
}
else {
- chatOptions.whisper = ChatUtility.getUsers(user => user.isGM);
+ messageData.whisper = ChatUtility.getGMs()
}
- break;
- default:
- chatOptions.whisper = ChatUtility.getWhisperRecipients(rollMode, name);
- break;
+ break
+ case "gmroll":
+ messageData.whisper = ChatUtility.getOwners(actor)
+ break
+ case "selfroll":
+ messageData.whisper = [game.user]
+ break
}
- chatOptions.alias = chatOptions.alias || name;
- return await ChatMessage.create(chatOptions);
+ messageData.alias = messageData.alias ?? actor?.name ?? game.user.name
+ return await ChatMessage.create(messageData)
+ }
+
+ static getOwners(document) {
+ return game.users.filter(it => document.getUserLevel(it) == CONST.DOCUMENT_OWNERSHIP_LEVELS.OWNER)
+ }
+
+ static getUserAndGMs() {
+ return [game.user, ...ChatUtility.getGMs()]
}
/* -------------------------------------------- */
- static prepareChatMessage(rollMode, name) {
- return {
- user: game.user.id,
- whisper: ChatUtility.getWhisperRecipients(rollMode, name)
- }
- }
-
- /* -------------------------------------------- */
- static getWhisperRecipients(rollMode, name) {
- switch (rollMode) {
- case "blindroll": return ChatUtility.getUsers(user => user.isGM);
- case "gmroll": return ChatUtility.getWhisperRecipientsAndGMs(name);
- case "selfroll": return [game.user.id];
- }
- return undefined;
- }
-
- static getOwners(actor) {
- return game.users.filter(it => actor.getUserLevel(it) == CONST.DOCUMENT_OWNERSHIP_LEVELS.OWNER)
- }
-
- /* -------------------------------------------- */
- static getWhisperRecipientsAndGMs(...names) {
- let recipients = [...ChatMessage.getWhisperRecipients('GM')]
- names.forEach(name => recipients.push(...ChatMessage.getWhisperRecipients(name)))
- return recipients
+ static getMultipleActorsOwners(...actors) {
+ return Misc.concat(actors.map(it => it == undefined ? [] : ChatUtility.getOwners(it)))
}
/* -------------------------------------------- */
static getUsers(filter) {
- return game.users.filter(filter).map(user => user.id);
+ return game.users.filter(filter)
+ }
+
+ static getGMs() {
+ return game.users.filter(user => user.isGM)
+ }
+
+ static applyRollMode(chatMessageData = {}, rollMode = game.settings.get("core", "rollMode")) {
+ switch (rollMode) {
+ case "blindroll":
+ chatMessageData.blind = true
+ chatMessageData.whisper = ChatUtility.getGMs()
+ break
+ case "gmroll":
+ chatMessageData.whisper = ChatUtility.getGMs()
+ chatMessageData.blind = false
+ break
+ case "roll":
+ chatMessageData.whisper = ChatUtility.getUsers(user => user.active)
+ chatMessageData.blind = false
+ break
+ case "selfroll":
+ chatMessageData.whisper = [game.user]
+ chatMessageData.blind = false
+ break
+ }
+ return chatMessageData
}
/* -------------------------------------------- */
static blindMessageToGM(chatOptions) {
- let chatGM = foundry.utils.duplicate(chatOptions);
- chatGM.whisper = ChatUtility.getUsers(user => user.isGM);
- chatGM.content = "Message aveugle de " + game.user.name + "
" + chatOptions.content;
- console.log("blindMessageToGM", chatGM);
- game.socket.emit(SYSTEM_SOCKET_ID, { msg: "msg_gm_chat_message", data: chatGM });
+ const chatGM = foundry.utils.duplicate(chatOptions)
+ chatGM.content = "Message aveugle de " + game.user.name + "
" + chatOptions.content
+ console.log("blindMessageToGM", chatGM)
+ game.socket.emit(SYSTEM_SOCKET_ID, { msg: "msg_gm_chat_message", data: chatGM })
}
/* -------------------------------------------- */
static handleGMChatMessage(socketData) {
console.log("blindMessageToGM", socketData);
- if (game.user.isGM) { // message privé pour GM only
- socketData.user = game.user.id;
- ChatMessage.create(socketData);
+ if (Misc.firstConnectedGM()) {
+ ChatMessage.create({
+ user: game.user.id,
+ whisper: ChatUtility.getGMs(),
+ content: socketData.content
+ })
}
}
diff --git a/module/coeur/rdd-coeur.js b/module/coeur/rdd-coeur.js
index 4b85988f..f5a4a7f5 100644
--- a/module/coeur/rdd-coeur.js
+++ b/module/coeur/rdd-coeur.js
@@ -30,7 +30,8 @@ export class RdDCoeur {
}
static extractInfoCoeur(event) {
- return ChatUtility.getMessageData(ChatUtility.getChatMessage(event), INFO_COEUR)
+ const chatMesage = ChatUtility.getChatMessage(event);
+ return ChatUtility.getMessageData(chatMesage, INFO_COEUR)
}
static getInfoCoeur(sourceActorId, targetActorId) {
@@ -98,12 +99,11 @@ export class RdDCoeur {
static async startSubActeurTendreMoment(actorId, subActeurId) {
const infoCoeur = RdDCoeur.getInfoCoeur(actorId, subActeurId)
- if (infoCoeur.target?.actor.id) {
+ if (infoCoeur.target?.actor?.id) {
// TODO: passer par une fenêtre pour saisir sa proposition (lieu, heure, ...)
- const chatHtml = await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/coeur/chat-proposer-tendre-moment.hbs`, infoCoeur)
const chatMessage = await ChatMessage.create({
- whisper: ChatUtility.getWhisperRecipientsAndGMs(infoCoeur.target?.actor.name),
- content: chatHtml
+ whisper: ChatUtility.getOwners(infoCoeur.target.actor),
+ content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/coeur/chat-proposer-tendre-moment.hbs`, infoCoeur)
})
RdDCoeur.addTagsInfoCoeur(infoCoeur, chatMessage)
}
@@ -127,7 +127,7 @@ export class RdDCoeur {
}
const chatHtml = await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/coeur/chat-accepter-tendre-moment.hbs`, infoCoeur)
const chatMessage = await ChatMessage.create({
- whisper: ChatUtility.getWhisperRecipientsAndGMs(infoCoeur.source?.actor.name, infoCoeur.target?.actor.name),
+ whisper: ChatUtility.getMultipleActorsOwners(infoCoeur.source?.actor, infoCoeur.target?.actor),
content: chatHtml
})
RdDCoeur.addTagsInfoCoeur(infoCoeur, chatMessage)
@@ -142,7 +142,7 @@ export class RdDCoeur {
ChatUtility.removeChatMessageId(infoCoeur.chatMessageId)
const chatHtml = await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/coeur/chat-refuser-tendre-moment.hbs`, infoCoeur)
await ChatMessage.create({
- whisper: ChatUtility.getWhisperRecipientsAndGMs(infoCoeur.source?.actor.name, infoCoeur.target?.actor.name),
+ whisper: ChatUtility.getMultipleActorsOwners(infoCoeur.source?.actor, infoCoeur.target?.actor),
content: chatHtml
});
}
diff --git a/module/dialog-create-signedraconique.js b/module/dialog-create-signedraconique.js
index 48cc1654..0f50f21c 100644
--- a/module/dialog-create-signedraconique.js
+++ b/module/dialog-create-signedraconique.js
@@ -48,7 +48,7 @@ export class DialogCreateSigneDraconique extends Dialog {
async _createSigneForActor(actor, signe) {
actor.createEmbeddedDocuments("Item", [signe]);
ChatMessage.create({
- whisper: ChatUtility.getWhisperRecipientsAndGMs(actor.name),
+ whisper: ChatUtility.getOwners(actor),
content: await renderTemplate("systems/foundryvtt-reve-de-dragon/templates/chat-signe-draconique-actor.html", {
signe: signe,
alias: actor.name
diff --git a/module/item/blessure.js b/module/item/blessure.js
index 04db4238..14c63724 100644
--- a/module/item/blessure.js
+++ b/module/item/blessure.js
@@ -62,7 +62,7 @@ export class RdDItemBlessure extends RdDItem {
content: `Blessure ${definition.label} appliquée à ${actor.name}`+
`
Perte d'endurance : ${lostEndurance}`+
`
Perte de Vie : ${lostVie}`,
- whisper: ChatUtility.getWhisperRecipientsAndGMs(actor.name)
+ whisper: ChatUtility.getOwners(actor)
});
}
diff --git a/module/rdd-combat.js b/module/rdd-combat.js
index be55bc5a..68947438 100644
--- a/module/rdd-combat.js
+++ b/module/rdd-combat.js
@@ -54,10 +54,10 @@ export class RdDCombatManager extends Combat {
/* -------------------------------------------- */
async onPreDeleteCombat() {
if (Misc.isUniqueConnectedGM()) {
- await this.finDeRound({ terminer: true });
+ await this.finDeRound({ terminer: true })
ChatUtility.removeChatMessageContaining(`