Version 12.0.15 #715
@ -1,4 +1,11 @@
|
|||||||
# 12.0
|
# 12.0
|
||||||
|
## 12.0.15 - Le messager d'Astrobazzarh
|
||||||
|
- Correction des faces de dés personalisés dice-so-nice
|
||||||
|
- Les messages de maladies ne sont plus publics
|
||||||
|
- Les messages privés dans les TMR sont aussi envoyés au GM
|
||||||
|
- Les informations de compétences pouvant augmenter s'affichent comme tooltips
|
||||||
|
- Amélioration du rendu des tables de compendiums (commande /table)
|
||||||
|
|
||||||
## 12.0.14 - Les légions d'Astrobazzarh
|
## 12.0.14 - Les légions d'Astrobazzarh
|
||||||
- Feuille de PNJ:
|
- Feuille de PNJ:
|
||||||
- boutons standard (encaissement, ...)
|
- boutons standard (encaissement, ...)
|
||||||
|
@ -159,7 +159,7 @@ export class RdDActor extends RdDBaseActorSang {
|
|||||||
const potionUpdates = await Promise.all(potions.map(async it => {
|
const potionUpdates = await Promise.all(potions.map(async it => {
|
||||||
const nouveauReve = Math.max(it.system.pr - 1, 0)
|
const nouveauReve = Math.max(it.system.pr - 1, 0)
|
||||||
ChatMessage.create({
|
ChatMessage.create({
|
||||||
whisper: ChatUtility.getWhisperRecipientsAndGMs(this.name),
|
whisper: ChatUtility.getOwners(this),
|
||||||
content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-potionenchantee-chateaudormant.html`, {
|
content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-potionenchantee-chateaudormant.html`, {
|
||||||
pr: nouveauReve,
|
pr: nouveauReve,
|
||||||
alias: this.name,
|
alias: this.name,
|
||||||
@ -210,7 +210,7 @@ export class RdDActor extends RdDBaseActorSang {
|
|||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async grisReve(nbJours) {
|
async grisReve(nbJours) {
|
||||||
let message = {
|
let message = {
|
||||||
whisper: ChatUtility.getWhisperRecipientsAndGMs(this.name),
|
whisper: ChatUtility.getOwners(this),
|
||||||
content: `${nbJours} jours de gris rêve sont passés. `
|
content: `${nbJours} jours de gris rêve sont passés. `
|
||||||
};
|
};
|
||||||
for (let i = 0; i < nbJours; i++) {
|
for (let i = 0; i < nbJours; i++) {
|
||||||
@ -264,7 +264,7 @@ export class RdDActor extends RdDBaseActorSang {
|
|||||||
async dormirChateauDormant() {
|
async dormirChateauDormant() {
|
||||||
if (!ReglesOptionnelles.isUsing("chateau-dormant-gardien") || !this.system.sommeil || this.system.sommeil.nouveaujour) {
|
if (!ReglesOptionnelles.isUsing("chateau-dormant-gardien") || !this.system.sommeil || this.system.sommeil.nouveaujour) {
|
||||||
const message = {
|
const message = {
|
||||||
whisper: ChatUtility.getWhisperRecipientsAndGMs(this.name),
|
whisper: ChatUtility.getOwners(this),
|
||||||
content: ""
|
content: ""
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -400,7 +400,7 @@ export class RdDActor extends RdDBaseActorSang {
|
|||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async remiseANeuf() {
|
async remiseANeuf() {
|
||||||
ChatMessage.create({
|
ChatMessage.create({
|
||||||
whisper: ChatUtility.getWhisperRecipientsAndGMs(this.name),
|
whisper: ChatUtility.getOwners(this),
|
||||||
content: 'Remise à neuf de ' + this.name
|
content: 'Remise à neuf de ' + this.name
|
||||||
});
|
});
|
||||||
await this.supprimerBlessures(it => true);
|
await this.supprimerBlessures(it => true);
|
||||||
@ -417,7 +417,7 @@ export class RdDActor extends RdDBaseActorSang {
|
|||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async dormir(heures, options = { grisReve: false, chateauDormant: false }) {
|
async dormir(heures, options = { grisReve: false, chateauDormant: false }) {
|
||||||
const message = {
|
const message = {
|
||||||
whisper: ChatUtility.getWhisperRecipientsAndGMs(this.name),
|
whisper: ChatUtility.getOwners(this),
|
||||||
content: this.name + ': '
|
content: this.name + ': '
|
||||||
};
|
};
|
||||||
const insomnie = this.system.sommeil?.insomnie || heures == 0;
|
const insomnie = this.system.sommeil?.insomnie || heures == 0;
|
||||||
@ -488,7 +488,7 @@ export class RdDActor extends RdDBaseActorSang {
|
|||||||
else {
|
else {
|
||||||
if (!ReglesOptionnelles.isUsing("recuperation-reve")) {
|
if (!ReglesOptionnelles.isUsing("recuperation-reve")) {
|
||||||
ChatMessage.create({
|
ChatMessage.create({
|
||||||
whisper: ChatUtility.getWhisperRecipientsAndGMs(this.name),
|
whisper: ChatUtility.getOwners(this),
|
||||||
content: `Pas de récupération de rêve (${reve} points ignorés)`
|
content: `Pas de récupération de rêve (${reve} points ignorés)`
|
||||||
});
|
});
|
||||||
jetsReve.push(0);
|
jetsReve.push(0);
|
||||||
@ -919,7 +919,7 @@ export class RdDActor extends RdDBaseActorSang {
|
|||||||
await this.createEmbeddedDocuments('Item', [souffle]);
|
await this.createEmbeddedDocuments('Item', [souffle]);
|
||||||
if (options.chat) {
|
if (options.chat) {
|
||||||
ChatMessage.create({
|
ChatMessage.create({
|
||||||
whisper: ChatUtility.getWhisperRecipientsAndGMs(this.name),
|
whisper: ChatUtility.getOwners(this),
|
||||||
content: this.name + " subit un Souffle de Dragon : " + souffle.name
|
content: this.name + " subit un Souffle de Dragon : " + souffle.name
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -939,7 +939,7 @@ export class RdDActor extends RdDBaseActorSang {
|
|||||||
await this.createEmbeddedDocuments('Item', [queue]);
|
await this.createEmbeddedDocuments('Item', [queue]);
|
||||||
if (options.chat) {
|
if (options.chat) {
|
||||||
ChatMessage.create({
|
ChatMessage.create({
|
||||||
whisper: ChatUtility.getWhisperRecipientsAndGMs(this.name),
|
whisper: ChatUtility.getOwners(this),
|
||||||
content: this.name + " subit une Queue de Dragon : " + queue.name
|
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));
|
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(this.name)
|
whisper: ChatUtility.getOwners(this)
|
||||||
});
|
});
|
||||||
await this.forcerPositionTMRInconnue(tmr);
|
await this.forcerPositionTMRInconnue(tmr);
|
||||||
return tmr;
|
return tmr;
|
||||||
@ -1082,7 +1082,7 @@ export class RdDActor extends RdDBaseActorSang {
|
|||||||
const jetMoral = await this._jetDeMoral(situation);
|
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");
|
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({
|
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}).`
|
content: `${finMessage} - jet ${jetMoral.succes ? "réussi" : "manqué"} en situation ${situation} (${jetMoral.jet}/${jetMoral.difficulte}).`
|
||||||
});
|
});
|
||||||
return jetMoral.ajustement;
|
return jetMoral.ajustement;
|
||||||
@ -1419,7 +1419,7 @@ export class RdDActor extends RdDBaseActorSang {
|
|||||||
};
|
};
|
||||||
|
|
||||||
ChatMessage.create({
|
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)
|
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) {
|
if (display) {
|
||||||
ChatMessage.create({
|
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)
|
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) {
|
if (display) {
|
||||||
ChatMessage.create({
|
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)
|
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 {
|
else {
|
||||||
ChatMessage.create({
|
ChatMessage.create({
|
||||||
whisper: ChatUtility.getWhisperRecipientsAndGMs(this.name),
|
whisper: ChatUtility.getOwners(this),
|
||||||
content: content
|
content: content
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -1666,7 +1666,7 @@ export class RdDActor extends RdDBaseActorSang {
|
|||||||
}
|
}
|
||||||
ChatMessage.create({
|
ChatMessage.create({
|
||||||
content: "Vous êtes sous le coup d'une Mauvaise Rencontre en Persective." + addMsg,
|
content: "Vous êtes sous le coup d'une Mauvaise Rencontre en Persective." + addMsg,
|
||||||
whisper: ChatMessage.getWhisperRecipients(this.name)
|
whisper: ChatUtility.getOwners(this)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
return rencSpecial;
|
return rencSpecial;
|
||||||
@ -1678,7 +1678,7 @@ export class RdDActor extends RdDBaseActorSang {
|
|||||||
if (countInertieDraconique > 0) {
|
if (countInertieDraconique > 0) {
|
||||||
ChatMessage.create({
|
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.`,
|
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;
|
return countInertieDraconique + 1;
|
||||||
@ -1690,7 +1690,7 @@ export class RdDActor extends RdDBaseActorSang {
|
|||||||
await this.reveActuelIncDec(-1);
|
await this.reveActuelIncDec(-1);
|
||||||
ChatMessage.create({
|
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).",
|
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
|
// Cas de désir lancinant, pas d'expérience sur particulière
|
||||||
ChatMessage.create({
|
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`,
|
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 []
|
return []
|
||||||
}
|
}
|
||||||
@ -2405,7 +2405,7 @@ export class RdDActor extends RdDBaseActorSang {
|
|||||||
if (countMonteeLaborieuse > 0) {
|
if (countMonteeLaborieuse > 0) {
|
||||||
ChatMessage.create({
|
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.`,
|
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;
|
return countMonteeLaborieuse;
|
||||||
@ -2453,7 +2453,7 @@ export class RdDActor extends RdDBaseActorSang {
|
|||||||
if (this.getReveActuel() < minReveValue) {
|
if (this.getReveActuel() < minReveValue) {
|
||||||
ChatMessage.create({
|
ChatMessage.create({
|
||||||
content: `Vous n'avez les ${minReveValue} Points de Reve nécessaires pour monter dans les Terres Médianes`,
|
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;
|
return;
|
||||||
}
|
}
|
||||||
@ -2850,7 +2850,7 @@ export class RdDActor extends RdDBaseActorSang {
|
|||||||
await this.setBonusPotionSoin(potionData.system.herbebonus);
|
await this.setBonusPotionSoin(potionData.system.herbebonus);
|
||||||
}
|
}
|
||||||
ChatMessage.create({
|
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)
|
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;
|
this.bonusRepos = potionData.system.herbebonus;
|
||||||
}
|
}
|
||||||
ChatMessage.create({
|
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)
|
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);
|
this.diminuerQuantiteObjet(herbeData._id, herbeData.nbBrins);
|
||||||
|
|
||||||
ChatMessage.create({
|
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)
|
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({
|
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)
|
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) {
|
notifyGestionTeteSouffleQueue(item, manualMessage = true) {
|
||||||
ChatMessage.create({
|
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 : ''}`
|
content: `${this.name} a reçu un/une ${item.type}: ${item.name}, qui ${manualMessage ? "n'est pas" : "est"} géré(e) automatiquement. ${manualMessage ? manualMessage : ''}`
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -296,7 +296,7 @@ export class RdDBaseActorReve extends RdDBaseActor {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async rollCarac(caracName, jetResistance = undefined) {
|
async rollCarac(caracName, jetResistance = undefined) {
|
||||||
if (Grammar.equalsInsensitive(caracName, 'taille')){
|
if (Grammar.equalsInsensitive(caracName, 'taille')) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
RdDEmpoignade.checkEmpoignadeEnCours(this)
|
RdDEmpoignade.checkEmpoignadeEnCours(this)
|
||||||
@ -418,7 +418,7 @@ export class RdDBaseActorReve extends RdDBaseActor {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const armure = await this.computeArmure(rollData);
|
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);
|
await this.encaisserDommagesValidationGR(rollData, armure, attacker?.id, show);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -456,16 +456,19 @@ export class RdDBaseActorReve extends RdDBaseActor {
|
|||||||
show: show ?? {}
|
show: show ?? {}
|
||||||
});
|
});
|
||||||
|
|
||||||
await ChatUtility.createChatWithRollMode(this.name, {
|
await ChatUtility.createChatWithRollMode(
|
||||||
roll: encaissement.roll,
|
{
|
||||||
content: await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-resultat-encaissement.html', encaissement)
|
roll: encaissement.roll,
|
||||||
});
|
content: await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-resultat-encaissement.html', encaissement)
|
||||||
|
},
|
||||||
|
this
|
||||||
|
)
|
||||||
|
|
||||||
if (!encaissement.hasPlayerOwner && encaissement.endurance != 0) {
|
if (!encaissement.hasPlayerOwner && encaissement.endurance != 0) {
|
||||||
encaissement = foundry.utils.duplicate(encaissement);
|
encaissement = foundry.utils.duplicate(encaissement)
|
||||||
encaissement.isGM = true;
|
encaissement.isGM = true
|
||||||
ChatMessage.create({
|
ChatMessage.create({
|
||||||
whisper: ChatMessage.getWhisperRecipients("GM"),
|
whisper: ChatUtility.getGMs(),
|
||||||
content: await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-resultat-encaissement.html', encaissement)
|
content: await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-resultat-encaissement.html', encaissement)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -39,8 +39,8 @@ export class RdDBaseActorSangSheet extends RdDBaseActorReveSheet {
|
|||||||
ChatMessage.create({
|
ChatMessage.create({
|
||||||
content: `Jet d'Endurance : ${result.jetEndurance} / ${endurance}
|
content: `Jet d'Endurance : ${result.jetEndurance} / ${endurance}
|
||||||
<br>${this.actor.name} a ${result.sonne ? 'échoué' : 'réussi'} son Jet d'Endurance ${result.sonne ? 'et devient Sonné' : ''}`,
|
<br>${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)
|
||||||
});
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,7 @@ import { ITEM_TYPES } from "../item.js";
|
|||||||
import { RdDBaseActorReve } from "./base-actor-reve.js";
|
import { RdDBaseActorReve } from "./base-actor-reve.js";
|
||||||
import { RdDDice } from "../rdd-dice.js";
|
import { RdDDice } from "../rdd-dice.js";
|
||||||
import { RdDItemBlessure } from "../item/blessure.js";
|
import { RdDItemBlessure } from "../item/blessure.js";
|
||||||
|
import { ChatUtility } from "../chat-utility.js";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Classe de base pour les acteurs qui peuvent subir des blessures
|
* 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 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()) {
|
if (blessure.isCritique()) {
|
||||||
encaissement.endurance = endActuelle;
|
encaissement.endurance = endActuelle;
|
||||||
}
|
}
|
||||||
@ -196,9 +197,9 @@ export class RdDBaseActorSang extends RdDBaseActorReve {
|
|||||||
return blessure;
|
return blessure;
|
||||||
}
|
}
|
||||||
|
|
||||||
async supprimerBlessure({gravite}) {
|
async supprimerBlessure({ gravite }) {
|
||||||
const toDelete = this.itemTypes[ITEM_TYPES.blessure].find(it => it.system.gravite == gravite)?.id
|
const toDelete = this.itemTypes[ITEM_TYPES.blessure].find(it => it.system.gravite == gravite)?.id
|
||||||
if (toDelete){
|
if (toDelete) {
|
||||||
await this.deleteEmbeddedDocuments('Item', [toDelete]);
|
await this.deleteEmbeddedDocuments('Item', [toDelete]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -216,7 +217,10 @@ export class RdDBaseActorSang extends RdDBaseActorReve {
|
|||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async jetDeVie() {
|
async jetDeVie() {
|
||||||
if (this.isDead()) {
|
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
|
return
|
||||||
}
|
}
|
||||||
const jetDeVie = await RdDDice.roll("1d20");
|
const jetDeVie = await RdDDice.roll("1d20");
|
||||||
@ -243,7 +247,10 @@ export class RdDBaseActorSang extends RdDBaseActorReve {
|
|||||||
else if (prochainJet > 0) {
|
else if (prochainJet > 0) {
|
||||||
msgText += `<br>Prochain jet de vie dans ${prochainJet} ${isCritique ? 'round' : 'minute'}${prochainJet > 1 ? 's' : ''} ${isCritique ? '(état critique)' : '(état grave)'}`
|
msgText += `<br>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)
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
|
@ -270,6 +270,7 @@ export class RdDBaseActor extends Actor {
|
|||||||
}
|
}
|
||||||
let fortune = this.getFortune();
|
let fortune = this.getFortune();
|
||||||
console.log("payer", game.user.character, depense, fortune);
|
console.log("payer", game.user.character, depense, fortune);
|
||||||
|
// TODO: passer en handlebars
|
||||||
let msg = "";
|
let msg = "";
|
||||||
if (fortune >= depense) {
|
if (fortune >= depense) {
|
||||||
await Monnaie.optimiserFortune(this, 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 !";
|
msg = "Vous n'avez pas assez d'argent pour payer cette somme !";
|
||||||
}
|
}
|
||||||
|
|
||||||
let message = {
|
ChatMessage.create({
|
||||||
whisper: ChatUtility.getWhisperRecipientsAndGMs(this.name),
|
whisper: ChatUtility.getOwners(this),
|
||||||
content: msg
|
content: msg
|
||||||
};
|
})
|
||||||
ChatMessage.create(message);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async depenserSols(sols) {
|
async depenserSols(sols) {
|
||||||
@ -317,7 +317,7 @@ export class RdDBaseActor extends Actor {
|
|||||||
|
|
||||||
RdDAudio.PlayContextAudio("argent"); // Petit son
|
RdDAudio.PlayContextAudio("argent"); // Petit son
|
||||||
ChatMessage.create({
|
ChatMessage.create({
|
||||||
whisper: ChatUtility.getWhisperRecipientsAndGMs(this.name),
|
whisper: ChatUtility.getOwners(this.name),
|
||||||
content: `Vous avez reçu <strong>${sols} Sols</strong> ${fromActor ? " de " + fromActor.name : ''}, qui ont été ajoutés à votre argent.`
|
content: `Vous avez reçu <strong>${sols} Sols</strong> ${fromActor ? " de " + fromActor.name : ''}, qui ont été ajoutés à votre argent.`
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -371,7 +371,7 @@ export class RdDBaseActor extends Actor {
|
|||||||
ChatMessage.create({
|
ChatMessage.create({
|
||||||
user: achat.userId,
|
user: achat.userId,
|
||||||
speaker: { alias: (acheteur ?? vendeur).name },
|
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)
|
content: await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-achat-item.html', chatAchatItem)
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -8,15 +8,20 @@ import { RdDTimestamp } from "./time/rdd-timestamp.js";
|
|||||||
*/
|
*/
|
||||||
export class ChatUtility {
|
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) {
|
static onSocketMessage(sockmsg) {
|
||||||
switch (sockmsg.msg) {
|
switch (sockmsg.msg) {
|
||||||
case "msg_delete_chat_message": return ChatUtility.onRemoveMessages(sockmsg.data);
|
case "msg_gm_chat_message": return ChatUtility.handleGMChatMessage(sockmsg.data)
|
||||||
case "msg_user_ui_notifications": return ChatUtility.onNotifyUser(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) {
|
static notifyUser(userId, level = 'info', message) {
|
||||||
const socketData = {
|
const socketData = {
|
||||||
@ -78,73 +83,90 @@ export class ChatUtility {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static async createChatWithRollMode(name, chatOptions) {
|
static async createChatWithRollMode(messageData, actor = undefined) {
|
||||||
let rollMode = game.settings.get("core", "rollMode")
|
switch (game.settings.get("core", "rollMode")) {
|
||||||
switch (rollMode) {
|
|
||||||
case "blindroll": // GM only
|
case "blindroll": // GM only
|
||||||
if (!game.user.isGM) {
|
if (!game.user.isGM) {
|
||||||
ChatUtility.blindMessageToGM(chatOptions);
|
ChatUtility.blindMessageToGM(messageData)
|
||||||
|
messageData.whisper = [game.user];
|
||||||
chatOptions.whisper = [game.user.id];
|
messageData.content = "Message envoyé en aveugle au Gardien"
|
||||||
chatOptions.content = "Message envoyé en aveugle au Gardien";
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
chatOptions.whisper = ChatUtility.getUsers(user => user.isGM);
|
messageData.whisper = ChatUtility.getGMs()
|
||||||
}
|
}
|
||||||
break;
|
break
|
||||||
default:
|
case "gmroll":
|
||||||
chatOptions.whisper = ChatUtility.getWhisperRecipients(rollMode, name);
|
messageData.whisper = ChatUtility.getOwners(actor)
|
||||||
break;
|
break
|
||||||
|
case "selfroll":
|
||||||
|
messageData.whisper = [game.user]
|
||||||
|
break
|
||||||
}
|
}
|
||||||
chatOptions.alias = chatOptions.alias || name;
|
messageData.alias = messageData.alias ?? actor?.name ?? game.user.name
|
||||||
return await ChatMessage.create(chatOptions);
|
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) {
|
static getMultipleActorsOwners(...actors) {
|
||||||
return {
|
return Misc.concat(actors.map(it => it == undefined ? [] : ChatUtility.getOwners(it)))
|
||||||
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 getWhisperRecipientsAndGMs(...names) {
|
|
||||||
let recipients = [...ChatMessage.getWhisperRecipients('GM')]
|
|
||||||
names.forEach(name => recipients.push(...ChatMessage.getWhisperRecipients(name)))
|
|
||||||
return recipients
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static getUsers(filter) {
|
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) {
|
static blindMessageToGM(chatOptions) {
|
||||||
let chatGM = foundry.utils.duplicate(chatOptions);
|
const chatGM = foundry.utils.duplicate(chatOptions)
|
||||||
chatGM.whisper = ChatUtility.getUsers(user => user.isGM);
|
chatGM.content = "Message aveugle de " + game.user.name + "<br>" + chatOptions.content
|
||||||
chatGM.content = "Message aveugle de " + game.user.name + "<br>" + chatOptions.content;
|
console.log("blindMessageToGM", chatGM)
|
||||||
console.log("blindMessageToGM", chatGM);
|
game.socket.emit(SYSTEM_SOCKET_ID, { msg: "msg_gm_chat_message", data: chatGM })
|
||||||
game.socket.emit(SYSTEM_SOCKET_ID, { msg: "msg_gm_chat_message", data: chatGM });
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static handleGMChatMessage(socketData) {
|
static handleGMChatMessage(socketData) {
|
||||||
console.log("blindMessageToGM", socketData);
|
console.log("blindMessageToGM", socketData);
|
||||||
if (game.user.isGM) { // message privé pour GM only
|
if (Misc.firstConnectedGM()) {
|
||||||
socketData.user = game.user.id;
|
ChatMessage.create({
|
||||||
ChatMessage.create(socketData);
|
user: game.user.id,
|
||||||
|
whisper: ChatUtility.getGMs(),
|
||||||
|
content: socketData.content
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -30,7 +30,8 @@ export class RdDCoeur {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static extractInfoCoeur(event) {
|
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) {
|
static getInfoCoeur(sourceActorId, targetActorId) {
|
||||||
@ -98,12 +99,11 @@ export class RdDCoeur {
|
|||||||
|
|
||||||
static async startSubActeurTendreMoment(actorId, subActeurId) {
|
static async startSubActeurTendreMoment(actorId, subActeurId) {
|
||||||
const infoCoeur = RdDCoeur.getInfoCoeur(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, ...)
|
// 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({
|
const chatMessage = await ChatMessage.create({
|
||||||
whisper: ChatUtility.getWhisperRecipientsAndGMs(infoCoeur.target?.actor.name),
|
whisper: ChatUtility.getOwners(infoCoeur.target.actor),
|
||||||
content: chatHtml
|
content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/coeur/chat-proposer-tendre-moment.hbs`, infoCoeur)
|
||||||
})
|
})
|
||||||
RdDCoeur.addTagsInfoCoeur(infoCoeur, chatMessage)
|
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 chatHtml = await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/coeur/chat-accepter-tendre-moment.hbs`, infoCoeur)
|
||||||
const chatMessage = await ChatMessage.create({
|
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
|
content: chatHtml
|
||||||
})
|
})
|
||||||
RdDCoeur.addTagsInfoCoeur(infoCoeur, chatMessage)
|
RdDCoeur.addTagsInfoCoeur(infoCoeur, chatMessage)
|
||||||
@ -142,7 +142,7 @@ export class RdDCoeur {
|
|||||||
ChatUtility.removeChatMessageId(infoCoeur.chatMessageId)
|
ChatUtility.removeChatMessageId(infoCoeur.chatMessageId)
|
||||||
const chatHtml = await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/coeur/chat-refuser-tendre-moment.hbs`, infoCoeur)
|
const chatHtml = await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/coeur/chat-refuser-tendre-moment.hbs`, infoCoeur)
|
||||||
await ChatMessage.create({
|
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
|
content: chatHtml
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,7 @@ const LATEST_USED_JOURNAL_ID = "chronologie-dernier-journal";
|
|||||||
|
|
||||||
export class DialogChronologie extends Dialog {
|
export class DialogChronologie extends Dialog {
|
||||||
|
|
||||||
static init() {
|
static initSettings() {
|
||||||
game.settings.register(SYSTEM_RDD, LATEST_USED_JOURNAL_ID, {
|
game.settings.register(SYSTEM_RDD, LATEST_USED_JOURNAL_ID, {
|
||||||
name: "Dernier article de journal utilisé pour enregistrer la chronologie",
|
name: "Dernier article de journal utilisé pour enregistrer la chronologie",
|
||||||
scope: "client",
|
scope: "client",
|
||||||
|
@ -48,7 +48,7 @@ export class DialogCreateSigneDraconique extends Dialog {
|
|||||||
async _createSigneForActor(actor, signe) {
|
async _createSigneForActor(actor, signe) {
|
||||||
actor.createEmbeddedDocuments("Item", [signe]);
|
actor.createEmbeddedDocuments("Item", [signe]);
|
||||||
ChatMessage.create({
|
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", {
|
content: await renderTemplate("systems/foundryvtt-reve-de-dragon/templates/chat-signe-draconique-actor.html", {
|
||||||
signe: signe,
|
signe: signe,
|
||||||
alias: actor.name
|
alias: actor.name
|
||||||
|
@ -7,7 +7,7 @@ import { CompendiumTableHelpers, CompendiumTable, SystemCompendiums } from "./se
|
|||||||
const COMPENDIUMS_RECHERCHE = 'compendiums-recherche';
|
const COMPENDIUMS_RECHERCHE = 'compendiums-recherche';
|
||||||
|
|
||||||
export class Environnement {
|
export class Environnement {
|
||||||
static init() {
|
static initSettings() {
|
||||||
game.settings.register(SYSTEM_RDD, COMPENDIUMS_RECHERCHE, {
|
game.settings.register(SYSTEM_RDD, COMPENDIUMS_RECHERCHE, {
|
||||||
name: COMPENDIUMS_RECHERCHE,
|
name: COMPENDIUMS_RECHERCHE,
|
||||||
default: [
|
default: [
|
||||||
|
@ -62,7 +62,7 @@ export class RdDItemBlessure extends RdDItem {
|
|||||||
content: `Blessure ${definition.label} appliquée à ${actor.name}`+
|
content: `Blessure ${definition.label} appliquée à ${actor.name}`+
|
||||||
`<br>Perte d'endurance : ${lostEndurance}`+
|
`<br>Perte d'endurance : ${lostEndurance}`+
|
||||||
`<br>Perte de Vie : ${lostVie}`,
|
`<br>Perte de Vie : ${lostVie}`,
|
||||||
whisper: ChatUtility.getWhisperRecipientsAndGMs(actor.name)
|
whisper: ChatUtility.getOwners(actor)
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
import { ChatUtility } from "../chat-utility.js";
|
||||||
import { RdDItem } from "../item.js";
|
import { RdDItem } from "../item.js";
|
||||||
import { Misc } from "../misc.js";
|
import { Misc } from "../misc.js";
|
||||||
import { RdDTimestamp } from "../time/rdd-timestamp.js";
|
import { RdDTimestamp } from "../time/rdd-timestamp.js";
|
||||||
@ -21,9 +22,12 @@ export class RdDItemMaladie extends RdDItem {
|
|||||||
const souffrance = mal.system.identifie
|
const souffrance = mal.system.identifie
|
||||||
? `de ${mal.name}`
|
? `de ${mal.name}`
|
||||||
: `d'un mal inconnu`
|
: `d'un mal inconnu`
|
||||||
ChatMessage.create({ content: `${mal.actor.name} souffre ${souffrance} (${Misc.typeName('Item', mal.type)}): vérifiez que les effets ne se sont pas aggravés !` });
|
ChatMessage.create({
|
||||||
mal.postItemToChat('gmroll');
|
whisper: ChatUtility.getOwners(mal.actor),
|
||||||
await RdDItemMaladie.prolongerPeriode(mal,oldTimestamp, newTimestamp);
|
content: `${mal.actor.name} souffre ${souffrance} (${Misc.typeName('Item', mal.type)}): vérifiez que les effets ne se sont pas aggravés !`
|
||||||
|
})
|
||||||
|
mal.postItemToChat('gmroll')
|
||||||
|
await RdDItemMaladie.prolongerPeriode(mal, oldTimestamp, newTimestamp)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -54,10 +54,10 @@ export class RdDCombatManager extends Combat {
|
|||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async onPreDeleteCombat() {
|
async onPreDeleteCombat() {
|
||||||
if (Misc.isUniqueConnectedGM()) {
|
if (Misc.isUniqueConnectedGM()) {
|
||||||
await this.finDeRound({ terminer: true });
|
await this.finDeRound({ terminer: true })
|
||||||
ChatUtility.removeChatMessageContaining(`<div data-combatid="${this.id}" data-combatmessage="actor-turn-summary">`)
|
ChatUtility.removeChatMessageContaining(`<div data-combatid="${this.id}" data-combatmessage="actor-turn-summary">`)
|
||||||
game.messages.filter(m => ChatUtility.getMessageData(m, 'attacker-roll') != undefined && ChatUtility.getMessageData(m, 'defender-roll') != undefined)
|
game.messages.filter(m => ChatUtility.getMessageData(m, 'attacker-roll') != undefined && ChatUtility.getMessageData(m, 'defender-roll') != undefined)
|
||||||
.forEach(it => it.delete());
|
.forEach(it => it.delete())
|
||||||
RdDEmpoignade.deleteAllEmpoignades()
|
RdDEmpoignade.deleteAllEmpoignades()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -698,7 +698,7 @@ export class RdDCombat {
|
|||||||
if (this.defender.isEntite([ENTITE_BLURETTE])) {
|
if (this.defender.isEntite([ENTITE_BLURETTE])) {
|
||||||
ChatMessage.create({
|
ChatMessage.create({
|
||||||
content: `<strong>La cible est une blurette, l'arme à distance sera perdue dans le blurêve`,
|
content: `<strong>La cible est une blurette, l'arme à distance sera perdue dans le blurêve`,
|
||||||
whisper: ChatMessage.getWhisperRecipients("GM")
|
whisper: ChatUtility.getGMs()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -721,7 +721,7 @@ export class RdDCombat {
|
|||||||
activite: activite,
|
activite: activite,
|
||||||
total: total
|
total: total
|
||||||
}),
|
}),
|
||||||
whisper: ChatMessage.getWhisperRecipients("GM")
|
whisper: ChatUtility.getGMs()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -846,7 +846,7 @@ export class RdDCombat {
|
|||||||
|
|
||||||
const choixParticuliere = await ChatMessage.create({
|
const choixParticuliere = await ChatMessage.create({
|
||||||
alias: this.attacker.name,
|
alias: this.attacker.name,
|
||||||
whisper: ChatUtility.getWhisperRecipientsAndGMs(this.attacker.name),
|
whisper: ChatUtility.getOwners(this.attacker),
|
||||||
content: await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-demande-attaque-particuliere.html', {
|
content: await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-demande-attaque-particuliere.html', {
|
||||||
alias: this.attacker.name,
|
alias: this.attacker.name,
|
||||||
attackerId: this.attackerId,
|
attackerId: this.attackerId,
|
||||||
@ -933,7 +933,7 @@ export class RdDCombat {
|
|||||||
// message privé: du défenseur à lui même (et aux GMs)
|
// message privé: du défenseur à lui même (et aux GMs)
|
||||||
speaker: ChatMessage.getSpeaker(this.defender, canvas.tokens.get(this.defenderTokenId)),
|
speaker: ChatMessage.getSpeaker(this.defender, canvas.tokens.get(this.defenderTokenId)),
|
||||||
alias: this.attacker.name,
|
alias: this.attacker.name,
|
||||||
whisper: ChatUtility.getWhisperRecipientsAndGMs(this.defender.name),
|
whisper: ChatUtility.getOwners(this.defender),
|
||||||
content: await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-demande-defense.html', paramDemandeDefense),
|
content: await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-demande-defense.html', paramDemandeDefense),
|
||||||
});
|
});
|
||||||
// flag pour garder les jets d'attaque/defense
|
// flag pour garder les jets d'attaque/defense
|
||||||
@ -976,7 +976,7 @@ export class RdDCombat {
|
|||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async _onAttaqueEchecTotal(attackerRoll) {
|
async _onAttaqueEchecTotal(attackerRoll) {
|
||||||
const choixEchecTotal = await ChatMessage.create({
|
const choixEchecTotal = await ChatMessage.create({
|
||||||
whisper: ChatUtility.getWhisperRecipientsAndGMs(this.attacker.name),
|
whisper: ChatUtility.getOwners(this.attacker),
|
||||||
content: await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-demande-attaque-etotal.html', {
|
content: await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-demande-attaque-etotal.html', {
|
||||||
attackerId: this.attackerId,
|
attackerId: this.attackerId,
|
||||||
attacker: this.attacker,
|
attacker: this.attacker,
|
||||||
@ -994,9 +994,9 @@ export class RdDCombat {
|
|||||||
const arme = rollData.arme;
|
const arme = rollData.arme;
|
||||||
const avecArme = !['', 'sans-armes', 'armes-naturelles'].includes(arme?.system.categorie_parade ?? '');
|
const avecArme = !['', 'sans-armes', 'armes-naturelles'].includes(arme?.system.categorie_parade ?? '');
|
||||||
const action = (rollData.attackerRoll ? (arme ? "la parade" : "l'esquive") : "l'attaque");
|
const action = (rollData.attackerRoll ? (arme ? "la parade" : "l'esquive") : "l'attaque");
|
||||||
ChatUtility.createChatWithRollMode(this.defender.name, {
|
ChatUtility.createChatWithRollMode(
|
||||||
content: `<strong>Maladresse à ${action}!</strong> ` + await RdDRollTables.getMaladresse({ arme: avecArme })
|
{ content: `<strong>Maladresse à ${action}!</strong> ` + await RdDRollTables.getMaladresse({ arme: avecArme }) },
|
||||||
});
|
this.defender)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
@ -1076,9 +1076,9 @@ export class RdDCombat {
|
|||||||
console.log("RdDCombat._onParadeParticuliere >>>", defenderRoll);
|
console.log("RdDCombat._onParadeParticuliere >>>", defenderRoll);
|
||||||
if (!defenderRoll.attackerRoll.isPart) {
|
if (!defenderRoll.attackerRoll.isPart) {
|
||||||
// TODO: attaquant doit jouer résistance et peut être désarmé p132
|
// TODO: attaquant doit jouer résistance et peut être désarmé p132
|
||||||
ChatUtility.createChatWithRollMode(this.defender.name, {
|
ChatUtility.createChatWithRollMode(
|
||||||
content: `(à gérer) L'attaquant doit jouer résistance et peut être désarmé (p132)`
|
{ content: `(à gérer) L'attaquant doit jouer résistance et peut être désarmé (p132)` },
|
||||||
});
|
this.defender)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1152,9 +1152,9 @@ export class RdDCombat {
|
|||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
_onEsquiveParticuliere(rollData) {
|
_onEsquiveParticuliere(rollData) {
|
||||||
console.log("RdDCombat._onEsquiveParticuliere >>>", rollData);
|
console.log("RdDCombat._onEsquiveParticuliere >>>", rollData);
|
||||||
ChatUtility.createChatWithRollMode(this.defender.name, {
|
ChatUtility.createChatWithRollMode(
|
||||||
content: "<strong>Vous pouvez esquiver une deuxième fois!</strong>"
|
{ content: "<strong>Vous pouvez esquiver une deuxième fois!</strong>" },
|
||||||
});
|
this.defender);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
@ -1322,10 +1322,10 @@ export class RdDCombat {
|
|||||||
await ChatMessage.create({
|
await ChatMessage.create({
|
||||||
content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-actor-turn-acteur.hbs`, formData),
|
content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-actor-turn-acteur.hbs`, formData),
|
||||||
alias: actor.name
|
alias: actor.name
|
||||||
});
|
})
|
||||||
await ChatMessage.create({
|
await ChatMessage.create({
|
||||||
content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-actor-turn-sante.hbs`, formData),
|
content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-actor-turn-sante.hbs`, formData),
|
||||||
whisper: ChatUtility.getWhisperRecipientsAndGMs(actor.name),
|
whisper: ChatUtility.getOwners(actor),
|
||||||
alias: actor.name
|
alias: actor.name
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -17,6 +17,7 @@ import { RdDUtility } from "./rdd-utility.js";
|
|||||||
import { FenetreRechercheTirage } from "./tirage/fenetre-recherche-tirage.js";
|
import { FenetreRechercheTirage } from "./tirage/fenetre-recherche-tirage.js";
|
||||||
import { TMRUtility } from "./tmr-utility.js";
|
import { TMRUtility } from "./tmr-utility.js";
|
||||||
import { DialogFatigueVoyage } from "./voyage/dialog-fatigue-voyage.js";
|
import { DialogFatigueVoyage } from "./voyage/dialog-fatigue-voyage.js";
|
||||||
|
import { ChatUtility } from "./chat-utility.js";
|
||||||
|
|
||||||
const rddRollNumeric = /^(\d+)\s*([\+\-]?\d+)?\s*(s)?/;
|
const rddRollNumeric = /^(\d+)\s*([\+\-]?\d+)?\s*(s)?/;
|
||||||
|
|
||||||
@ -206,26 +207,20 @@ export class RdDCommands {
|
|||||||
/* Manage chat commands */
|
/* Manage chat commands */
|
||||||
processChatCommand(commandLine, content = '', msg = {}) {
|
processChatCommand(commandLine, content = '', msg = {}) {
|
||||||
// Setup new message's visibility
|
// Setup new message's visibility
|
||||||
let rollMode = game.settings.get("core", "rollMode");
|
ChatUtility.applyRollMode(msg)
|
||||||
if (["gmroll", "blindroll"].includes(rollMode)) {
|
msg.type = 0;
|
||||||
msg["whisper"] = ChatMessage.getWhisperRecipients("GM");
|
|
||||||
}
|
|
||||||
if (rollMode === "blindroll") {
|
|
||||||
msg["blind"] = true;
|
|
||||||
}
|
|
||||||
msg["type"] = 0;
|
|
||||||
|
|
||||||
if (!this.commandsTable) {
|
if (!this.commandsTable) {
|
||||||
this._registerCommands();
|
this._registerCommands()
|
||||||
}
|
}
|
||||||
|
|
||||||
let command = commandLine[0].toLowerCase();
|
let command = commandLine[0].toLowerCase();
|
||||||
if (this._isCommandHandled(command)) {
|
if (this._isCommandHandled(command)) {
|
||||||
let params = commandLine.slice(1);
|
let params = commandLine.slice(1);
|
||||||
this._processCommand(this.commandsTable, command, params, content, msg);
|
this._processCommand(this.commandsTable, command, params, content, msg)
|
||||||
return true;
|
return true
|
||||||
}
|
}
|
||||||
return false;
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
_isCommandHandled(command) {
|
_isCommandHandled(command) {
|
||||||
|
@ -2,19 +2,14 @@ import { ChatUtility } from "./chat-utility.js";
|
|||||||
import { HIDE_DICE, SHOW_DICE } from "./constants.js";
|
import { HIDE_DICE, SHOW_DICE } from "./constants.js";
|
||||||
import { Misc } from "./misc.js";
|
import { Misc } from "./misc.js";
|
||||||
|
|
||||||
function img(src) {
|
const imgHeures = [1, 2, 3, 4, 5, 6, 7, 9, 9, 10, 11, 12].map(heure => {
|
||||||
return `<img src="${src}" class="dice-img" />`
|
|
||||||
}
|
|
||||||
|
|
||||||
function iconHeure(heure) {
|
|
||||||
if (heure < 10) {
|
if (heure < 10) {
|
||||||
heure = '0' + heure;
|
heure = '0' + heure;
|
||||||
}
|
}
|
||||||
return `systems/foundryvtt-reve-de-dragon/icons/heures/hd${heure}.webp`
|
return `<img src="systems/foundryvtt-reve-de-dragon/icons/heures/hd${heure}.webp" class="dice-img" />`
|
||||||
}
|
})
|
||||||
const imagesHeures = [1, 2, 3, 4, 5, 6, 7, 9, 9, 10, 11, 12].map(it => iconHeure(it));
|
|
||||||
|
|
||||||
const imgSigneDragon = img(imagesHeures[4]);
|
const imgSigneDragon = imgHeures[4]
|
||||||
|
|
||||||
/** De pour les jets de rencontre */
|
/** De pour les jets de rencontre */
|
||||||
export class DeTMR extends Die {
|
export class DeTMR extends Die {
|
||||||
@ -25,7 +20,7 @@ export class DeTMR extends Die {
|
|||||||
return {
|
return {
|
||||||
type: "dt",
|
type: "dt",
|
||||||
font: "HeuresDraconiques",
|
font: "HeuresDraconiques",
|
||||||
fontScale: 0.7,
|
fontScale: 0.8,
|
||||||
labels: ['1', '2', '3', '4', '5', '6', 'd', '0'],
|
labels: ['1', '2', '3', '4', '5', '6', 'd', '0'],
|
||||||
system: system
|
system: system
|
||||||
}
|
}
|
||||||
@ -37,13 +32,13 @@ export class DeTMR extends Die {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async evaluate(options) {
|
async evaluate(options) {
|
||||||
await super.evaluate(options);
|
await super.evaluate(options)
|
||||||
this.explode("x=8");
|
await this.reroll('r=8', { recursive: true })
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
get total() {
|
get total() {
|
||||||
return this.values.filter(it => it != 8).reduce(Misc.sum(), 0);
|
return this.values.map(it => Misc.modulo(it, 8)).reduce(Misc.sum(), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
getResultLabel(diceTerm) {
|
getResultLabel(diceTerm) {
|
||||||
@ -56,13 +51,14 @@ export class DeTMR extends Die {
|
|||||||
|
|
||||||
/** DeDraconique pour le D8 sans limite avec 8=>0 */
|
/** DeDraconique pour le D8 sans limite avec 8=>0 */
|
||||||
export class DeDraconique extends Die {
|
export class DeDraconique extends Die {
|
||||||
|
/** @override */
|
||||||
static DENOMINATION = "r";
|
static DENOMINATION = "r";
|
||||||
|
|
||||||
static diceSoNiceData(system) {
|
static diceSoNiceData(system) {
|
||||||
return {
|
return {
|
||||||
type: "dr",
|
type: "dr",
|
||||||
font: "HeuresDraconiques",
|
font: "HeuresDraconiques",
|
||||||
fontScale: 0.7,
|
fontScale: 0.8,
|
||||||
labels: ['1', '2', '3', '4', '5', '6', 'd', '0'],
|
labels: ['1', '2', '3', '4', '5', '6', 'd', '0'],
|
||||||
system: system
|
system: system
|
||||||
}
|
}
|
||||||
@ -75,7 +71,7 @@ export class DeDraconique extends Die {
|
|||||||
|
|
||||||
async evaluate(options) {
|
async evaluate(options) {
|
||||||
await super.evaluate(options);
|
await super.evaluate(options);
|
||||||
this.explode("x=7");
|
await this.explode("x=7");
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -85,7 +81,7 @@ export class DeDraconique extends Die {
|
|||||||
|
|
||||||
getResultLabel(diceTerm) {
|
getResultLabel(diceTerm) {
|
||||||
switch (diceTerm.result) {
|
switch (diceTerm.result) {
|
||||||
case 7: return imgSigneDragon;
|
case 7: return imgSigneDragon
|
||||||
case 8: return '0';
|
case 8: return '0';
|
||||||
}
|
}
|
||||||
return diceTerm.result.toString();
|
return diceTerm.result.toString();
|
||||||
@ -102,6 +98,7 @@ export class DeHeure extends Die {
|
|||||||
return {
|
return {
|
||||||
type: "dh",
|
type: "dh",
|
||||||
font: "HeuresDraconiques",
|
font: "HeuresDraconiques",
|
||||||
|
fontScale: 1.2,
|
||||||
labels: ['v', 'i', 'f', 'o', 'd', 'e', 'l', 's', 'p', 'a', 'r', 'c'],
|
labels: ['v', 'i', 'f', 'o', 'd', 'e', 'l', 's', 'p', 'a', 'r', 'c'],
|
||||||
system: system
|
system: system
|
||||||
}
|
}
|
||||||
@ -113,15 +110,15 @@ export class DeHeure extends Die {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getResultLabel(diceTerm) {
|
getResultLabel(diceTerm) {
|
||||||
return img(imagesHeures[diceTerm.result - 1]);
|
return imgHeures[diceTerm.result - 1]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export class RdDDice {
|
export class RdDDice {
|
||||||
static init() {
|
static init() {
|
||||||
CONFIG.Dice.terms[DeTMR.DENOMINATION] = DeTMR;
|
CONFIG.Dice.terms[DeTMR.DENOMINATION] = DeTMR
|
||||||
CONFIG.Dice.terms[DeDraconique.DENOMINATION] = DeDraconique;
|
CONFIG.Dice.terms[DeDraconique.DENOMINATION] = DeDraconique
|
||||||
CONFIG.Dice.terms[DeHeure.DENOMINATION] = DeHeure;
|
CONFIG.Dice.terms[DeHeure.DENOMINATION] = DeHeure
|
||||||
}
|
}
|
||||||
|
|
||||||
static onReady() {
|
static onReady() {
|
||||||
@ -132,6 +129,14 @@ export class RdDDice {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static diceSoNiceReady(dice3d) {
|
||||||
|
dice3d.DiceFactory.systems.keys().forEach(system => {
|
||||||
|
dice3d.addDicePreset(DeTMR.diceSoNiceData(system));
|
||||||
|
dice3d.addDicePreset(DeDraconique.diceSoNiceData(system));
|
||||||
|
dice3d.addDicePreset(DeHeure.diceSoNiceData(system));
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
static async rollHeure(options = { showDice: HIDE_DICE }) {
|
static async rollHeure(options = { showDice: HIDE_DICE }) {
|
||||||
return await RdDDice.rollTotal("1dh", options) - 1
|
return await RdDDice.rollTotal("1dh", options) - 1
|
||||||
}
|
}
|
||||||
@ -155,21 +160,13 @@ export class RdDDice {
|
|||||||
return array[roll - 1];
|
return array[roll - 1];
|
||||||
}
|
}
|
||||||
|
|
||||||
static diceSoNiceReady(dice3d) {
|
|
||||||
for (const system of Object.keys(dice3d.DiceFactory.systems)) {
|
|
||||||
dice3d.addDicePreset(DeTMR.diceSoNiceData(system));
|
|
||||||
dice3d.addDicePreset(DeDraconique.diceSoNiceData(system));
|
|
||||||
dice3d.addDicePreset(DeHeure.diceSoNiceData(system));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static async showDiceSoNice(roll, options) {
|
static async showDiceSoNice(roll, options) {
|
||||||
if (options.showDice == HIDE_DICE || !game.modules.get("dice-so-nice")?.active || !game.dice3d) {
|
if (options.showDice == HIDE_DICE || !game.modules.get("dice-so-nice")?.active || !game.dice3d) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
let { whisper, blind } = RdDDice._getWhisperBlind(options);
|
let { whisper, blind } = ChatUtility.applyRollMode({}, options?.rollMode);
|
||||||
if (options.forceDiceResult?.total) {
|
if (options.forceDiceResult?.total) {
|
||||||
let terms = await RdDDice._getForcedTerms(options);
|
let terms = await RdDDice._getForcedTerms(options);
|
||||||
if (terms) {
|
if (terms) {
|
||||||
@ -223,24 +220,4 @@ export class RdDDice {
|
|||||||
await roll.evaluate();
|
await roll.evaluate();
|
||||||
return roll.total;
|
return roll.total;
|
||||||
}
|
}
|
||||||
|
|
||||||
static _getWhisperBlind(options) {
|
|
||||||
let whisper = undefined;
|
|
||||||
let blind = false;
|
|
||||||
let rollMode = options.rollMode ?? game.settings.get("core", "rollMode");
|
|
||||||
switch (rollMode) {
|
|
||||||
case "blindroll": //GM only
|
|
||||||
blind = true;
|
|
||||||
case "gmroll": //GM + rolling player
|
|
||||||
whisper = ChatUtility.getUsers(user => user.isGM);
|
|
||||||
break;
|
|
||||||
case "roll": //everybody
|
|
||||||
whisper = ChatUtility.getUsers(user => user.active);
|
|
||||||
break;
|
|
||||||
case "selfroll":
|
|
||||||
whisper = [game.user.id];
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return { whisper, blind };
|
|
||||||
}
|
|
||||||
}
|
}
|
@ -158,9 +158,12 @@ export class RdDEmpoignade {
|
|||||||
empoignade = empoignade ?? (await RdDEmpoignade.createEmpoignade(attacker, defender))
|
empoignade = empoignade ?? (await RdDEmpoignade.createEmpoignade(attacker, defender))
|
||||||
//console.log("W.", empoignade, defender.hasArmeeMeleeEquipee())
|
//console.log("W.", empoignade, defender.hasArmeeMeleeEquipee())
|
||||||
if ((isNouvelle || empoignade.system.pointsemp == 0) && defender.hasArmeeMeleeEquipee()) {
|
if ((isNouvelle || empoignade.system.pointsemp == 0) && defender.hasArmeeMeleeEquipee()) {
|
||||||
ChatUtility.createChatWithRollMode(attacker.name, {
|
ChatUtility.createChatWithRollMode(
|
||||||
content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-empoignade-valider.html`, { attacker: attacker, defender: defender })
|
{
|
||||||
})
|
content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-empoignade-valider.html`, { attacker: attacker, defender: defender })
|
||||||
|
},
|
||||||
|
attacker
|
||||||
|
)
|
||||||
} else {
|
} else {
|
||||||
await this.onAttaqueEmpoignadeValidee(attacker, defender)
|
await this.onAttaqueEmpoignadeValidee(attacker, defender)
|
||||||
}
|
}
|
||||||
@ -213,7 +216,7 @@ export class RdDEmpoignade {
|
|||||||
competence: attacker.getCompetenceCorpsACorps()
|
competence: attacker.getCompetenceCorpsACorps()
|
||||||
}
|
}
|
||||||
const msg = await ChatMessage.create({
|
const msg = await ChatMessage.create({
|
||||||
whisper: ChatUtility.getWhisperRecipientsAndGMs(attacker.name),
|
whisper: ChatUtility.getOwners(attacker),
|
||||||
content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-empoignade-immobilise.html`, rollData)
|
content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-empoignade-immobilise.html`, rollData)
|
||||||
})
|
})
|
||||||
RdDEmpoignade.$storeRollEmpoignade(msg, rollData);
|
RdDEmpoignade.$storeRollEmpoignade(msg, rollData);
|
||||||
|
@ -79,8 +79,7 @@ export class RdDHotbar {
|
|||||||
* Actor - open actor sheet
|
* Actor - open actor sheet
|
||||||
* Journal - open journal sheet
|
* Journal - open journal sheet
|
||||||
*/
|
*/
|
||||||
static init() {
|
static initHooks() {
|
||||||
|
|
||||||
Hooks.on('hotbarDrop', (bar, documentData, slot) => {
|
Hooks.on('hotbarDrop', (bar, documentData, slot) => {
|
||||||
|
|
||||||
// Create item macro if rollable item - weapon, spell, prayer, trait, or skill
|
// Create item macro if rollable item - weapon, spell, prayer, trait, or skill
|
||||||
|
@ -61,7 +61,7 @@ import { RdDSigneDraconiqueItemSheet } from "./item/sheet-signedraconique.js"
|
|||||||
import { RdDItemInventaireSheet } from "./item/sheet-base-inventaire.js"
|
import { RdDItemInventaireSheet } from "./item/sheet-base-inventaire.js"
|
||||||
import { AppAstrologie } from "./sommeil/app-astrologie.js"
|
import { AppAstrologie } from "./sommeil/app-astrologie.js"
|
||||||
import { RdDItemArmure } from "./item/armure.js"
|
import { RdDItemArmure } from "./item/armure.js"
|
||||||
import { AutoAdjustDarkness as AutoAdjustDarkness } from "./time/auto-adjust-darkness.js"
|
import { AutoAdjustDarkness } from "./time/auto-adjust-darkness.js"
|
||||||
import { RdDCreature } from "./actor/creature.js"
|
import { RdDCreature } from "./actor/creature.js"
|
||||||
import { RdDTMRDialog } from "./rdd-tmr-dialog.js"
|
import { RdDTMRDialog } from "./rdd-tmr-dialog.js"
|
||||||
import { OptionsAvancees } from "./settings/options-avancees.js"
|
import { OptionsAvancees } from "./settings/options-avancees.js"
|
||||||
@ -80,7 +80,7 @@ export class SystemReveDeDragon {
|
|||||||
const system = new SystemReveDeDragon()
|
const system = new SystemReveDeDragon()
|
||||||
Hooks.once('init', async () => await system.onInit())
|
Hooks.once('init', async () => await system.onInit())
|
||||||
Hooks.once('diceSoNiceReady', (dice3d) => RdDDice.diceSoNiceReady(dice3d))
|
Hooks.once('diceSoNiceReady', (dice3d) => RdDDice.diceSoNiceReady(dice3d))
|
||||||
Hooks.once('ready', () => system.onReady())
|
Hooks.once('ready', async () => await system.onReady())
|
||||||
}
|
}
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
@ -115,24 +115,31 @@ export class SystemReveDeDragon {
|
|||||||
game.system.rdd = this
|
game.system.rdd = this
|
||||||
this.AppAstrologie = AppAstrologie
|
this.AppAstrologie = AppAstrologie
|
||||||
|
|
||||||
|
console.log(`Initializing Reve de Dragon System Settings`)
|
||||||
console.log(`Initializing Reve de Dragon System`)
|
|
||||||
|
|
||||||
// preload handlebars templates
|
// preload handlebars templates
|
||||||
RdDUtility.preloadHandlebarsTemplates()
|
RdDUtility.preloadHandlebarsTemplates()
|
||||||
AppPersonnageAleatoire.preloadHandlebars()
|
AppPersonnageAleatoire.preloadHandlebars()
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
this.initSystemSettings()
|
ReglesOptionnelles.initSettings()
|
||||||
|
OptionsAvancees.initSettings()
|
||||||
|
AutoAdjustDarkness.initSettings()
|
||||||
|
RdDTimestamp.initSettings()
|
||||||
|
RdDCalendrier.initSettings()
|
||||||
|
SystemCompendiums.initSettings()
|
||||||
|
DialogChronologie.initSettings()
|
||||||
|
RdDTMRDialog.initSettings()
|
||||||
|
Environnement.initSettings()
|
||||||
|
|
||||||
|
this.initSettings()
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
// Set an initiative formula for the system
|
// Set an initiative formula for the system
|
||||||
CONFIG.Combat.initiative = {
|
CONFIG.Combat.initiative = { formula: "1+(1d6/10)", decimals: 2 }
|
||||||
formula: "1+(1d6/10)",
|
|
||||||
decimals: 2
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
|
console.log(`Initializing Reve de Dragon Socket handlers`)
|
||||||
game.socket.on(SYSTEM_SOCKET_ID, async (sockmsg) => {
|
game.socket.on(SYSTEM_SOCKET_ID, async (sockmsg) => {
|
||||||
console.log(">>>>> MSG RECV", sockmsg)
|
console.log(">>>>> MSG RECV", sockmsg)
|
||||||
try {
|
try {
|
||||||
@ -147,6 +154,7 @@ export class SystemReveDeDragon {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
// Define custom Entity classes
|
// Define custom Entity classes
|
||||||
|
console.log(`Initializing Reve de Dragon Documents`)
|
||||||
CONFIG.Actor.documentClass = RdDBaseActor
|
CONFIG.Actor.documentClass = RdDBaseActor
|
||||||
CONFIG.Item.documentClass = RdDItem
|
CONFIG.Item.documentClass = RdDItem
|
||||||
CONFIG.RDD = {
|
CONFIG.RDD = {
|
||||||
@ -192,17 +200,12 @@ export class SystemReveDeDragon {
|
|||||||
"tarot", "extraitpoetique", "empoignade"
|
"tarot", "extraitpoetique", "empoignade"
|
||||||
], makeDefault: true
|
], makeDefault: true
|
||||||
})
|
})
|
||||||
CONFIG.Combat.documentClass = RdDCombatManager
|
|
||||||
|
|
||||||
// préparation des différents modules
|
// préparation des différents modules
|
||||||
AutoAdjustDarkness.init()
|
console.log(`Initializing Reve de Dragon Hooks and handlers`)
|
||||||
RdDTimestamp.init()
|
CONFIG.Combat.documentClass = RdDCombatManager
|
||||||
RdDCalendrier.init()
|
ChatUtility.init()
|
||||||
SystemCompendiums.init()
|
RdDUtility.initHooks()
|
||||||
DialogChronologie.init()
|
|
||||||
ReglesOptionnelles.init()
|
|
||||||
OptionsAvancees.init()
|
|
||||||
RdDUtility.init()
|
|
||||||
RdDDice.init()
|
RdDDice.init()
|
||||||
RdDCommands.init()
|
RdDCommands.init()
|
||||||
RdDCombatManager.init()
|
RdDCombatManager.init()
|
||||||
@ -211,15 +214,14 @@ export class SystemReveDeDragon {
|
|||||||
RdDCompendiumOrganiser.init()
|
RdDCompendiumOrganiser.init()
|
||||||
EffetsDraconiques.init()
|
EffetsDraconiques.init()
|
||||||
TMRUtility.init()
|
TMRUtility.init()
|
||||||
await RdDTMRDialog.init()
|
RdDHotbar.initHooks()
|
||||||
RdDHotbar.init()
|
|
||||||
RdDPossession.init()
|
RdDPossession.init()
|
||||||
TMRRencontres.init()
|
TMRRencontres.init()
|
||||||
Environnement.init()
|
|
||||||
ExportScriptarium.init()
|
ExportScriptarium.init()
|
||||||
}
|
}
|
||||||
|
|
||||||
initSystemSettings() {
|
initSettings() {
|
||||||
|
// TODO: déplacer vers les modules correspondants
|
||||||
game.settings.register(SYSTEM_RDD, "accorder-entite-cauchemar", {
|
game.settings.register(SYSTEM_RDD, "accorder-entite-cauchemar", {
|
||||||
name: "Accorder le rêve aux entités",
|
name: "Accorder le rêve aux entités",
|
||||||
hint: "A quel moment les personnages doivent accorder leur rêve aux entités de cauchemar",
|
hint: "A quel moment les personnages doivent accorder leur rêve aux entités de cauchemar",
|
||||||
@ -318,4 +320,3 @@ export class SystemReveDeDragon {
|
|||||||
}
|
}
|
||||||
|
|
||||||
SystemReveDeDragon.start()
|
SystemReveDeDragon.start()
|
||||||
|
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
import { ChatUtility } from "./chat-utility.js"
|
||||||
|
|
||||||
const vents = [
|
const vents = [
|
||||||
{ min: 0, max: 0, valeur: 'Calme' },
|
{ min: 0, max: 0, valeur: 'Calme' },
|
||||||
@ -117,7 +118,7 @@ export class RdDMeteo {
|
|||||||
|
|
||||||
ChatMessage.create({
|
ChatMessage.create({
|
||||||
content: await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-resultat-meteo.html', meteo),
|
content: await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-resultat-meteo.html', meteo),
|
||||||
whisper: ChatMessage.getWhisperRecipients('GM')
|
whisper: ChatUtility.getGMs()
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import { RdDBaseActor } from "./actor/base-actor.js";
|
import { RdDBaseActor } from "./actor/base-actor.js";
|
||||||
|
import { ChatUtility } from "./chat-utility.js";
|
||||||
import { Misc } from "./misc.js";
|
import { Misc } from "./misc.js";
|
||||||
import { RdDDice } from "./rdd-dice.js";
|
import { RdDDice } from "./rdd-dice.js";
|
||||||
|
|
||||||
@ -15,7 +16,7 @@ export class RdDNameGen {
|
|||||||
const html = await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-command-nom.html`, {
|
const html = await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-command-nom.html`, {
|
||||||
nom: await RdDNameGen.generate()
|
nom: await RdDNameGen.generate()
|
||||||
});
|
});
|
||||||
ChatMessage.create({ content: html, whisper: ChatMessage.getWhisperRecipients("GM") });
|
ChatMessage.create({ content: html, whisper: ChatUtility.getGMs() });
|
||||||
}
|
}
|
||||||
|
|
||||||
static async generate() {
|
static async generate() {
|
||||||
|
@ -91,13 +91,14 @@ export class RdDResolutionTable {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static async displayRollData(rollData, actor = undefined, template = 'chat-resultat-general.html') {
|
static async displayRollData(rollData, actor = undefined, template = 'chat-resultat-general.html') {
|
||||||
return await ChatUtility.createChatWithRollMode(RdDResolutionTable.actorChatName(actor), {
|
return await ChatUtility.createChatWithRollMode(
|
||||||
content: await RdDResolutionTable.buildRollDataHtml(rollData, template)
|
{ content: await RdDResolutionTable.buildRollDataHtml(rollData, template) },
|
||||||
});
|
actor
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
static actorChatName(actor) {
|
static actorChatName(actor) {
|
||||||
return actor?.name ?? game.user.name;
|
return actor ?? game.user.name;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
@ -138,14 +139,14 @@ export class RdDResolutionTable {
|
|||||||
if (carac == 0) {
|
if (carac == 0) {
|
||||||
return NaN;
|
return NaN;
|
||||||
}
|
}
|
||||||
if (rolled >= carac){
|
if (rolled >= carac) {
|
||||||
const upper = Math.ceil(rolled/carac);
|
const upper = Math.ceil(rolled / carac);
|
||||||
return 2*upper -10
|
return 2 * upper - 10
|
||||||
}
|
}
|
||||||
if (rolled > Math.floor(carac/2)) {
|
if (rolled > Math.floor(carac / 2)) {
|
||||||
return -8
|
return -8
|
||||||
}
|
}
|
||||||
if (rolled > Math.floor(carac/4)) {
|
if (rolled > Math.floor(carac / 4)) {
|
||||||
return -9
|
return -9
|
||||||
}
|
}
|
||||||
if (rolled > 1) {
|
if (rolled > 1) {
|
||||||
@ -265,7 +266,7 @@ export class RdDResolutionTable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static subTable(carac, level, delta = { carac: 2, level: 5}) {
|
static subTable(carac, level, delta = { carac: 2, level: 5 }) {
|
||||||
return {
|
return {
|
||||||
carac,
|
carac,
|
||||||
level,
|
level,
|
||||||
@ -287,8 +288,8 @@ export class RdDResolutionTable {
|
|||||||
carac: carac,
|
carac: carac,
|
||||||
difficulte: level,
|
difficulte: level,
|
||||||
min: minLevel,
|
min: minLevel,
|
||||||
rows: Misc.intArray(minCarac, maxCarac+1),
|
rows: Misc.intArray(minCarac, maxCarac + 1),
|
||||||
cols: Misc.intArray(minLevel, maxLevel+1)
|
cols: Misc.intArray(minLevel, maxLevel + 1)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -34,7 +34,7 @@ const TMR_DISPLAY_SIZE = {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
export class RdDTMRDialog extends Dialog {
|
export class RdDTMRDialog extends Dialog {
|
||||||
static async init() {
|
static initSettings() {
|
||||||
game.settings.register(SYSTEM_RDD, TMR_DISPLAY_SIZE.code, {
|
game.settings.register(SYSTEM_RDD, TMR_DISPLAY_SIZE.code, {
|
||||||
name: 'Taille des cases des TMR',
|
name: 'Taille des cases des TMR',
|
||||||
hint: "Taille en pixel des cases des TMR (réglable directement dans la fenêtre des TMR)",
|
hint: "Taille en pixel des cases des TMR (réglable directement dans la fenêtre des TMR)",
|
||||||
@ -50,7 +50,7 @@ export class RdDTMRDialog extends Dialog {
|
|||||||
await PixiTMR.init()
|
await PixiTMR.init()
|
||||||
let html = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/dialog-tmr.html', tmrData);
|
let html = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/dialog-tmr.html', tmrData);
|
||||||
if (tmrData.mode != 'visu' && !game.user.isGM) {
|
if (tmrData.mode != 'visu' && !game.user.isGM) {
|
||||||
ChatMessage.create({ content: actor.name + " est monté dans les TMR en mode : " + tmrData.mode, whisper: ChatMessage.getWhisperRecipients("GM") });
|
ChatMessage.create({ content: actor.name + " est monté dans les TMR en mode : " + tmrData.mode, whisper: ChatUtility.getGMs() });
|
||||||
}
|
}
|
||||||
return new RdDTMRDialog(html, actor, tmrData)
|
return new RdDTMRDialog(html, actor, tmrData)
|
||||||
}
|
}
|
||||||
@ -82,7 +82,7 @@ export class RdDTMRDialog extends Dialog {
|
|||||||
this.rencontreState = 'aucune';
|
this.rencontreState = 'aucune';
|
||||||
this.subdialog = undefined
|
this.subdialog = undefined
|
||||||
this.displaySize = undefined
|
this.displaySize = undefined
|
||||||
if (!this.viewOnly) {
|
if (!this.viewOnly && !game.user.isGM) {
|
||||||
this._tellToGM(this.actor.name + " monte dans les terres médianes (" + tmrData.mode + ")");
|
this._tellToGM(this.actor.name + " monte dans les terres médianes (" + tmrData.mode + ")");
|
||||||
}
|
}
|
||||||
this.callbacksOnAnimate = [];
|
this.callbacksOnAnimate = [];
|
||||||
@ -496,7 +496,7 @@ export class RdDTMRDialog extends Dialog {
|
|||||||
rencData.message = this.formatMessageRencontre(rencData, result.message);
|
rencData.message = this.formatMessageRencontre(rencData, result.message);
|
||||||
|
|
||||||
ChatMessage.create({
|
ChatMessage.create({
|
||||||
whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name),
|
whisper: ChatUtility.getOwners(this.actor),
|
||||||
content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-rencontre-tmr.html`, rencData)
|
content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-rencontre-tmr.html`, rencData)
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -571,12 +571,20 @@ export class RdDTMRDialog extends Dialog {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
_tellToGM(message) {
|
_tellToGM(message) {
|
||||||
ChatMessage.create({ content: message, user: game.user.id, whisper: ChatMessage.getWhisperRecipients("GM") });
|
ChatMessage.create({
|
||||||
|
user: game.user.id,
|
||||||
|
content: message,
|
||||||
|
whisper: ChatUtility.getGMs()
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
_tellToUserAndGM(message) {
|
_tellToUserAndGM(message) {
|
||||||
ChatMessage.create({ content: message, user: game.user.id, whisper: [game.user.id].concat(ChatMessage.getWhisperRecipients("GM")) });
|
ChatMessage.create({
|
||||||
|
user: game.user.id,
|
||||||
|
content: message,
|
||||||
|
whisper: ChatUtility.getUserAndGMs()
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
@ -715,7 +723,7 @@ export class RdDTMRDialog extends Dialog {
|
|||||||
}
|
}
|
||||||
rollData.poesie = await Poetique.getExtrait();
|
rollData.poesie = await Poetique.getExtrait();
|
||||||
ChatMessage.create({
|
ChatMessage.create({
|
||||||
whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name),
|
whisper: ChatUtility.getOwners(this.actor),
|
||||||
content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-resultat-maitrise-tmr.html`, rollData)
|
content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-resultat-maitrise-tmr.html`, rollData)
|
||||||
});
|
});
|
||||||
if (rollData.rolled.isEchec) {
|
if (rollData.rolled.isEchec) {
|
||||||
@ -739,7 +747,7 @@ export class RdDTMRDialog extends Dialog {
|
|||||||
if (this.isCaseMaitrisee(tmr.coord)) {
|
if (this.isCaseMaitrisee(tmr.coord)) {
|
||||||
ChatMessage.create({
|
ChatMessage.create({
|
||||||
content: tmr.label + ": cette case humide est déja maitrisée grâce à votre Tête <strong>Quête des Eaux</strong>",
|
content: tmr.label + ": cette case humide est déja maitrisée grâce à votre Tête <strong>Quête des Eaux</strong>",
|
||||||
whisper: ChatMessage.getWhisperRecipients(game.user.name)
|
whisper: ChatUtility.getOwners(this.actor)
|
||||||
});
|
});
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -751,14 +759,14 @@ export class RdDTMRDialog extends Dialog {
|
|||||||
if (tmr.type == 'pont' && EffetsDraconiques.isPontImpraticable(this.actor)) {
|
if (tmr.type == 'pont' && EffetsDraconiques.isPontImpraticable(this.actor)) {
|
||||||
ChatMessage.create({
|
ChatMessage.create({
|
||||||
content: tmr.label + ": Vous êtes sous le coup d'une Impraticabilité des Ponts : ce pont doit être maîtrisé comme une case humide.",
|
content: tmr.label + ": Vous êtes sous le coup d'une Impraticabilité des Ponts : ce pont doit être maîtrisé comme une case humide.",
|
||||||
whisper: ChatMessage.getWhisperRecipients(game.user.name)
|
whisper: ChatUtility.getOwners(this.actor)
|
||||||
});
|
});
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (this.isCaseInondee(tmr.coord)) {
|
if (this.isCaseInondee(tmr.coord)) {
|
||||||
ChatMessage.create({
|
ChatMessage.create({
|
||||||
content: tmr.label + ": cette case est inondée, elle doit être maîtrisée comme une case humide.",
|
content: tmr.label + ": cette case est inondée, elle doit être maîtrisée comme une case humide.",
|
||||||
whisper: ChatMessage.getWhisperRecipients(game.user.name)
|
whisper: ChatUtility.getOwners(this.actor)
|
||||||
});
|
});
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -832,7 +840,7 @@ export class RdDTMRDialog extends Dialog {
|
|||||||
}
|
}
|
||||||
rollData.poesie = await Poetique.getExtrait();
|
rollData.poesie = await Poetique.getExtrait();
|
||||||
ChatMessage.create({
|
ChatMessage.create({
|
||||||
whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name),
|
whisper: ChatUtility.getOwners(this.actor),
|
||||||
content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-resultat-maitrise-tmr.html`, rollData)
|
content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-resultat-maitrise-tmr.html`, rollData)
|
||||||
});
|
});
|
||||||
if (rollData.rolled.isEchec) {
|
if (rollData.rolled.isEchec) {
|
||||||
@ -882,17 +890,16 @@ export class RdDTMRDialog extends Dialog {
|
|||||||
const reserveSecurite = EffetsDraconiques.isReserveEnSecurite(this.actor);
|
const reserveSecurite = EffetsDraconiques.isReserveEnSecurite(this.actor);
|
||||||
const reserveExtensible = this.isReserveExtensible(coord);
|
const reserveExtensible = this.isReserveExtensible(coord);
|
||||||
if (!EffetsDraconiques.isUrgenceDraconique(this.actor) && (reserveSecurite || reserveExtensible)) {
|
if (!EffetsDraconiques.isUrgenceDraconique(this.actor) && (reserveSecurite || reserveExtensible)) {
|
||||||
const msg = await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-demande-declencher-sort.hbs`, {
|
|
||||||
actor: this.actor,
|
|
||||||
sorts: sorts,
|
|
||||||
coord: coord,
|
|
||||||
tete: { reserveSecurite: reserveSecurite, reserveExtensible: reserveExtensible }
|
|
||||||
})
|
|
||||||
ChatMessage.create({
|
ChatMessage.create({
|
||||||
content: msg,
|
content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-demande-declencher-sort.hbs`, {
|
||||||
whisper: ChatMessage.getWhisperRecipients(game.user.name)
|
actor: this.actor,
|
||||||
});
|
sorts: sorts,
|
||||||
return;
|
coord: coord,
|
||||||
|
tete: { reserveSecurite: reserveSecurite, reserveExtensible: reserveExtensible }
|
||||||
|
}),
|
||||||
|
whisper: ChatUtility.getOwners(this.actor)
|
||||||
|
})
|
||||||
|
return
|
||||||
}
|
}
|
||||||
await this.processSortReserve(sorts[0]);
|
await this.processSortReserve(sorts[0]);
|
||||||
}
|
}
|
||||||
@ -906,9 +913,8 @@ export class RdDTMRDialog extends Dialog {
|
|||||||
this.processSortReserve(sort);
|
this.processSortReserve(sort);
|
||||||
} else {
|
} else {
|
||||||
ChatMessage.create({
|
ChatMessage.create({
|
||||||
content:
|
content: "Une erreur est survenue : impossible de récupérer le sort en réserve demandé.",
|
||||||
"Une erreur est survenue : impossible de récupérer le sort en réserve demandé.",
|
whisper: ChatUtility.getOwners(this.actor)
|
||||||
whisper: ChatMessage.getWhisperRecipients(game.user.name),
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1091,7 +1097,7 @@ export class RdDTMRDialog extends Dialog {
|
|||||||
async notifierResonanceSigneDraconique(coord) {
|
async notifierResonanceSigneDraconique(coord) {
|
||||||
if (!this.viewOnly && this.actor.isResonanceSigneDraconique(coord)) {
|
if (!this.viewOnly && this.actor.isResonanceSigneDraconique(coord)) {
|
||||||
ChatMessage.create({
|
ChatMessage.create({
|
||||||
whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name),
|
whisper: ChatUtility.getOwners(this.actor),
|
||||||
content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-signe-draconique-resonance.html`, { alias: this.actor.name, typeTMR: TMRUtility.getTMRType(coord) })
|
content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-signe-draconique-resonance.html`, { alias: this.actor.name, typeTMR: TMRUtility.getTMRType(coord) })
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -99,9 +99,7 @@ export class RdDUtility {
|
|||||||
// persistent handling of conteneur show/hide
|
// persistent handling of conteneur show/hide
|
||||||
static afficheContenu = {}
|
static afficheContenu = {}
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static async init() {
|
static async initHooks() {
|
||||||
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))
|
|
||||||
Hooks.on('renderChatLog', (log, html, chatLog) => RdDUtility.chatListeners(html))
|
Hooks.on('renderChatLog', (log, html, chatLog) => RdDUtility.chatListeners(html))
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -292,7 +290,7 @@ export class RdDUtility {
|
|||||||
|
|
||||||
Handlebars.registerHelper('array-includes', (array, value) => array.includes(value));
|
Handlebars.registerHelper('array-includes', (array, value) => array.includes(value));
|
||||||
Handlebars.registerHelper('min', (...args) => Math.min(...args.slice(0, -1)));
|
Handlebars.registerHelper('min', (...args) => Math.min(...args.slice(0, -1)));
|
||||||
Handlebars.registerHelper('isLastIndex', (index, list) => index+1 >= list.length);
|
Handlebars.registerHelper('isLastIndex', (index, list) => index + 1 >= list.length);
|
||||||
Handlebars.registerHelper('regle-optionnelle', (option) => ReglesOptionnelles.isUsing(option));
|
Handlebars.registerHelper('regle-optionnelle', (option) => ReglesOptionnelles.isUsing(option));
|
||||||
Handlebars.registerHelper('trier', list => list.sort((a, b) => a.name.localeCompare(b.name)));
|
Handlebars.registerHelper('trier', list => list.sort((a, b) => a.name.localeCompare(b.name)));
|
||||||
Handlebars.registerHelper('filtreTriCompetences', competences => RdDItemCompetence.triVisible(competences));
|
Handlebars.registerHelper('filtreTriCompetences', competences => RdDItemCompetence.triVisible(competences));
|
||||||
@ -645,18 +643,16 @@ export class RdDUtility {
|
|||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static onSocketMessage(sockmsg) {
|
static onSocketMessage(sockmsg) {
|
||||||
switch (sockmsg.msg) {
|
switch (sockmsg.msg) {
|
||||||
case "msg_gm_chat_message":
|
|
||||||
return ChatUtility.handleGMChatMessage(sockmsg.data);
|
|
||||||
case "msg_app_astrologie_refresh":
|
case "msg_app_astrologie_refresh":
|
||||||
return Hooks.callAll(APP_ASTROLOGIE_REFRESH);
|
return Hooks.callAll(APP_ASTROLOGIE_REFRESH)
|
||||||
case "msg_request_nombre_astral":
|
case "msg_request_nombre_astral":
|
||||||
return game.system.rdd.calendrier.requestNombreAstral(sockmsg.data);
|
return game.system.rdd.calendrier.requestNombreAstral(sockmsg.data)
|
||||||
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();
|
actor.refreshTMRView()
|
||||||
}
|
}
|
||||||
break;
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -808,17 +804,13 @@ export class RdDUtility {
|
|||||||
user: game.user.id,
|
user: game.user.id,
|
||||||
rollMode: modeOverride || game.settings.get("core", "rollMode"),
|
rollMode: modeOverride || game.settings.get("core", "rollMode"),
|
||||||
content: content
|
content: content
|
||||||
};
|
}
|
||||||
|
ChatUtility.applyRollMode(chatData)
|
||||||
if (["gmroll", "blindroll"].includes(chatData.rollMode)) chatData["whisper"] = ChatMessage.getWhisperRecipients("GM").map(u => u.id);
|
|
||||||
if (chatData.rollMode === "blindroll") chatData["blind"] = true;
|
|
||||||
else if (chatData.rollMode === "selfroll") chatData["whisper"] = [game.user];
|
|
||||||
|
|
||||||
if (forceWhisper) { // Final force !
|
if (forceWhisper) { // Final force !
|
||||||
chatData["speaker"] = ChatMessage.getSpeaker();
|
chatData.speaker = ChatMessage.getSpeaker();
|
||||||
chatData["whisper"] = ChatMessage.getWhisperRecipients(forceWhisper);
|
chatData.whisper = ChatMessage.getWhisperRecipients(forceWhisper);
|
||||||
}
|
}
|
||||||
|
|
||||||
return chatData;
|
return chatData;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -881,7 +873,7 @@ export class RdDUtility {
|
|||||||
const current = game.system.rdd.calendrier.heureCourante();
|
const current = game.system.rdd.calendrier.heureCourante();
|
||||||
ChatMessage.create({
|
ChatMessage.create({
|
||||||
content: `A l'heure de <strong>${current.label}</strong>, le modificateur de Chance/Malchance est de <strong>${Misc.toSignedString(ajustement)}</strong> pour l'heure de naissance <strong>${heure.label}</strong>.`,
|
content: `A l'heure de <strong>${current.label}</strong>, le modificateur de Chance/Malchance est de <strong>${Misc.toSignedString(ajustement)}</strong> pour l'heure de naissance <strong>${heure.label}</strong>.`,
|
||||||
whisper: ChatMessage.getWhisperRecipients("GM")
|
whisper: ChatUtility.getGMs()
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
else if (heureNaissance) {
|
else if (heureNaissance) {
|
||||||
@ -900,7 +892,7 @@ export class RdDUtility {
|
|||||||
if (compName.includes('Thanatos')) {
|
if (compName.includes('Thanatos')) {
|
||||||
let message = "Vous avez mis des points d'Expérience dans la Voie de Thanatos !<br>Vous devez réduire manuellement d'un même montant d'XP une autre compétence Draconique.";
|
let message = "Vous avez mis des points d'Expérience dans la Voie de Thanatos !<br>Vous devez réduire manuellement d'un même montant d'XP une autre compétence Draconique.";
|
||||||
ChatMessage.create({
|
ChatMessage.create({
|
||||||
whisper: ChatMessage.getWhisperRecipients(game.user.name),
|
whisper: ChatUtility.getUserAndGMs(),
|
||||||
content: message
|
content: message
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,7 @@ const OPTIONS_AVANCEES = [
|
|||||||
]
|
]
|
||||||
|
|
||||||
export class OptionsAvancees extends FormApplication {
|
export class OptionsAvancees extends FormApplication {
|
||||||
static init() {
|
static initSettings() {
|
||||||
for (const regle of OPTIONS_AVANCEES) {
|
for (const regle of OPTIONS_AVANCEES) {
|
||||||
const name = regle.name
|
const name = regle.name
|
||||||
const id = OptionsAvancees._getId(name)
|
const id = OptionsAvancees._getId(name)
|
||||||
|
@ -46,7 +46,7 @@ const listeReglesOptionnelles = [
|
|||||||
const uniquementJoueur = listeReglesOptionnelles.filter(it => it.uniquementJoueur).map(it=>it.name);
|
const uniquementJoueur = listeReglesOptionnelles.filter(it => it.uniquementJoueur).map(it=>it.name);
|
||||||
|
|
||||||
export class ReglesOptionnelles extends FormApplication {
|
export class ReglesOptionnelles extends FormApplication {
|
||||||
static init() {
|
static initSettings() {
|
||||||
for (const regle of listeReglesOptionnelles) {
|
for (const regle of listeReglesOptionnelles) {
|
||||||
const name = regle.name;
|
const name = regle.name;
|
||||||
const id = ReglesOptionnelles._getIdRegle(name);
|
const id = ReglesOptionnelles._getIdRegle(name);
|
||||||
|
@ -25,7 +25,7 @@ const CONFIGURABLE_COMPENDIUMS = {
|
|||||||
* ======= Gestion des accès aux compendiums systèmes (ou surchargés) =======
|
* ======= Gestion des accès aux compendiums systèmes (ou surchargés) =======
|
||||||
*/
|
*/
|
||||||
export class SystemCompendiums extends FormApplication {
|
export class SystemCompendiums extends FormApplication {
|
||||||
static init() {
|
static initSettings() {
|
||||||
Object.keys(CONFIGURABLE_COMPENDIUMS).forEach(compendium => {
|
Object.keys(CONFIGURABLE_COMPENDIUMS).forEach(compendium => {
|
||||||
const definition = CONFIGURABLE_COMPENDIUMS[compendium];
|
const definition = CONFIGURABLE_COMPENDIUMS[compendium];
|
||||||
foundry.utils.mergeObject(definition, {
|
foundry.utils.mergeObject(definition, {
|
||||||
@ -236,12 +236,12 @@ export class CompendiumTableHelpers {
|
|||||||
let max = 0;
|
let max = 0;
|
||||||
const total = rows.map(it => it.frequence).reduce(Misc.sum(), 0);
|
const total = rows.map(it => it.frequence).reduce(Misc.sum(), 0);
|
||||||
return rows.map(row => {
|
return rows.map(row => {
|
||||||
const frequence = row.frequence;
|
const frequence = row.frequence
|
||||||
row.min = max + 1;
|
row.min = max + 1
|
||||||
row.max = max + frequence;
|
row.max = max + frequence
|
||||||
row.total = total
|
row.total = total
|
||||||
max += frequence;
|
max += frequence
|
||||||
return row;
|
return row
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
static async getRandom(table, type, subTypes = ['objet'], forcedRoll = undefined, localisation = undefined) {
|
static async getRandom(table, type, subTypes = ['objet'], forcedRoll = undefined, localisation = undefined) {
|
||||||
@ -260,8 +260,8 @@ export class CompendiumTableHelpers {
|
|||||||
}
|
}
|
||||||
const total = table[0].total;
|
const total = table[0].total;
|
||||||
const formula = `1d${total}`;
|
const formula = `1d${total}`;
|
||||||
if (forcedRoll == undefined && (forcedRoll > total || forcedRoll <= 0)) {
|
if (forcedRoll != undefined && (forcedRoll > total || forcedRoll <= 0)) {
|
||||||
ui.notifications.warn(`Jet de rencontre ${forcedRoll} en dehors de la table [1..${total}], le jet est relancé`);
|
ui.notifications.warn(`Jet forcé ${forcedRoll} en dehors de la table [1..${total}], le jet est relancé`);
|
||||||
forcedRoll = undefined;
|
forcedRoll = undefined;
|
||||||
}
|
}
|
||||||
const roll = forcedRoll ? { total: forcedRoll, formula } : await RdDDice.roll(formula, { showDice: HIDE_DICE });
|
const roll = forcedRoll ? { total: forcedRoll, formula } : await RdDDice.roll(formula, { showDice: HIDE_DICE });
|
||||||
@ -276,7 +276,7 @@ export class CompendiumTableHelpers {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const percentages = (row.total == 100) ? '%' : ''
|
const percentages = (row.total == 100) ? '%' : ''
|
||||||
const flavorContent = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-compendium-table-roll.html', {
|
const flavorContent = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-compendium-table-roll.hbs', {
|
||||||
roll: row.roll,
|
roll: row.roll,
|
||||||
document: row.document,
|
document: row.document,
|
||||||
percentages,
|
percentages,
|
||||||
@ -291,12 +291,12 @@ export class CompendiumTableHelpers {
|
|||||||
sound: CONFIG.sounds.dice,
|
sound: CONFIG.sounds.dice,
|
||||||
content: flavorContent
|
content: flavorContent
|
||||||
};
|
};
|
||||||
await ChatUtility.createChatWithRollMode(game.user.id, messageData)
|
await ChatUtility.createChatWithRollMode(messageData)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static async tableToChatMessage(table, type, subTypes, typeName = undefined) {
|
static async tableToChatMessage(table, type, subTypes, typeName = undefined) {
|
||||||
const flavorContent = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-compendium-table.html', {
|
const flavorContent = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-compendium-table.hbs', {
|
||||||
img: RdDItem.getDefaultImg(subTypes[0]),
|
img: RdDItem.getDefaultImg(subTypes[0]),
|
||||||
typeName: typeName ?? Misc.typeName(type, subTypes[0]),
|
typeName: typeName ?? Misc.typeName(type, subTypes[0]),
|
||||||
table,
|
table,
|
||||||
@ -304,10 +304,10 @@ export class CompendiumTableHelpers {
|
|||||||
});
|
});
|
||||||
const messageData = {
|
const messageData = {
|
||||||
user: game.user.id,
|
user: game.user.id,
|
||||||
whisper: game.user.id,
|
whisper: [game.user],
|
||||||
content: flavorContent
|
content: flavorContent
|
||||||
};
|
};
|
||||||
await ChatUtility.createChatWithRollMode(game.user.id, messageData)
|
await ChatUtility.createChatWithRollMode(messageData)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -4,7 +4,7 @@ export const AUTO_ADJUST_DARKNESS = "auto-adjust-darkness";
|
|||||||
|
|
||||||
export class AutoAdjustDarkness {
|
export class AutoAdjustDarkness {
|
||||||
|
|
||||||
static init() {
|
static initSettings() {
|
||||||
game.settings.register(SYSTEM_RDD, AUTO_ADJUST_DARKNESS, {
|
game.settings.register(SYSTEM_RDD, AUTO_ADJUST_DARKNESS, {
|
||||||
name: AUTO_ADJUST_DARKNESS,
|
name: AUTO_ADJUST_DARKNESS,
|
||||||
scope: "world",
|
scope: "world",
|
||||||
|
@ -15,7 +15,7 @@ const TEMPLATE_CALENDRIER = "systems/foundryvtt-reve-de-dragon/templates/time/ca
|
|||||||
const INITIAL_CALENDAR_POS = { top: 200, left: 200, horlogeAnalogique: true };
|
const INITIAL_CALENDAR_POS = { top: 200, left: 200, horlogeAnalogique: true };
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
export class RdDCalendrier extends Application {
|
export class RdDCalendrier extends Application {
|
||||||
static init() {
|
static initSettings() {
|
||||||
game.settings.register(SYSTEM_RDD, "liste-nombre-astral", {
|
game.settings.register(SYSTEM_RDD, "liste-nombre-astral", {
|
||||||
name: "liste-nombre-astral",
|
name: "liste-nombre-astral",
|
||||||
scope: "world",
|
scope: "world",
|
||||||
|
@ -49,7 +49,7 @@ const FORMULES_PERIODE = [
|
|||||||
|
|
||||||
export class RdDTimestamp {
|
export class RdDTimestamp {
|
||||||
|
|
||||||
static init() {
|
static initSettings() {
|
||||||
game.settings.register(SYSTEM_RDD, WORLD_TIMESTAMP_SETTING, {
|
game.settings.register(SYSTEM_RDD, WORLD_TIMESTAMP_SETTING, {
|
||||||
name: WORLD_TIMESTAMP_SETTING,
|
name: WORLD_TIMESTAMP_SETTING,
|
||||||
scope: "world",
|
scope: "world",
|
||||||
|
@ -105,7 +105,7 @@ export class TMRRencontres {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async $chatRolledRencontre(row, rencontre, tmr) {
|
async $chatRolledRencontre(row, rencontre, tmr) {
|
||||||
const flavorContent = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-compendium-table-roll-rencontre.html',
|
const flavorContent = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-compendium-table-roll-rencontre.hbs',
|
||||||
{
|
{
|
||||||
roll: row.roll,
|
roll: row.roll,
|
||||||
rencontre,
|
rencontre,
|
||||||
|
@ -30,7 +30,7 @@ export class EffetsRencontre {
|
|||||||
static $reve_plus = async (actor, reve) => {
|
static $reve_plus = async (actor, reve) => {
|
||||||
if (!ReglesOptionnelles.isUsing("recuperation-reve") && reve < 0) {
|
if (!ReglesOptionnelles.isUsing("recuperation-reve") && reve < 0) {
|
||||||
ChatMessage.create({
|
ChatMessage.create({
|
||||||
whisper: ChatUtility.getWhisperRecipientsAndGMs(actor.name),
|
whisper: ChatUtility.getOwners(actor),
|
||||||
content: `Pas de récupération de rêve (${reve} points ignorés)`
|
content: `Pas de récupération de rêve (${reve} points ignorés)`
|
||||||
});
|
});
|
||||||
return
|
return
|
||||||
@ -112,7 +112,7 @@ export class EffetsRencontre {
|
|||||||
poesie: await Poetique.getExtrait()
|
poesie: await Poetique.getExtrait()
|
||||||
})
|
})
|
||||||
ChatMessage.create({
|
ChatMessage.create({
|
||||||
whisper: ChatUtility.getWhisperRecipientsAndGMs(context.actor.name),
|
whisper: ChatUtility.getOwners(context.actor),
|
||||||
content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-resultat-reve-de-dragon.html`, context)
|
content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-resultat-reve-de-dragon.html`, context)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -127,7 +127,7 @@ export class EffetsRencontre {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ChatMessage.create({
|
ChatMessage.create({
|
||||||
whisper: ChatUtility.getWhisperRecipientsAndGMs(this.name),
|
whisper: ChatUtility.getOwners(context.actor),
|
||||||
content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-resultat-reve-de-dragon.html`, context)
|
content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-resultat-reve-de-dragon.html`, context)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -28,7 +28,7 @@ export class PresentCites extends Draconique {
|
|||||||
let existants = actor.items.filter(it => this.isCase(it)).map(it => it.system.coord);
|
let existants = actor.items.filter(it => this.isCase(it)).map(it => it.system.coord);
|
||||||
if (existants.length > 0) {
|
if (existants.length > 0) {
|
||||||
ChatMessage.create({
|
ChatMessage.create({
|
||||||
whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name),
|
whisper: ChatUtility.getOwners(actor),
|
||||||
content: "Vous avez encore des présents dans des cités, vous devrez tirer une autre tête pour remplacer celle ci!"
|
content: "Vous avez encore des présents dans des cités, vous devrez tirer une autre tête pour remplacer celle ci!"
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -19,7 +19,7 @@ export class UrgenceDraconique extends Draconique {
|
|||||||
// La queue se transforme en idée fixe
|
// La queue se transforme en idée fixe
|
||||||
const ideeFixe = await RdDRollTables.getIdeeFixe();
|
const ideeFixe = await RdDRollTables.getIdeeFixe();
|
||||||
ChatMessage.create({
|
ChatMessage.create({
|
||||||
whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name),
|
whisper: ChatUtility.getOwners(actor),
|
||||||
content: `En l'absence de sorts en réserve, l'urgence draconique de ${actor.name} se transforme en ${ideeFixe.name}`
|
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.createEmbeddedDocuments('Item', [ideeFixe]);
|
||||||
|
@ -175,7 +175,7 @@ export class DialogFatigueVoyage extends Dialog {
|
|||||||
.forEach(async it => {
|
.forEach(async it => {
|
||||||
const perteFatigue = fatigueBase + it.ajustement
|
const perteFatigue = fatigueBase + it.ajustement
|
||||||
ChatMessage.create({
|
ChatMessage.create({
|
||||||
whisper: ChatUtility.getWhisperRecipientsAndGMs(it.actor.name),
|
whisper: ChatUtility.getOwners(it.actor),
|
||||||
content: await renderTemplate(
|
content: await renderTemplate(
|
||||||
'systems/foundryvtt-reve-de-dragon/templates/voyage/chat-fatigue_voyage.hbs',
|
'systems/foundryvtt-reve-de-dragon/templates/voyage/chat-fatigue_voyage.hbs',
|
||||||
foundry.utils.mergeObject(it,
|
foundry.utils.mergeObject(it,
|
||||||
|
@ -567,7 +567,11 @@ input:is(.blessure-premiers_soins, .blessure-soins_complets) {
|
|||||||
|
|
||||||
.dice-img {
|
.dice-img {
|
||||||
border-width: 0;
|
border-width: 0;
|
||||||
|
max-width: 1.5rem;
|
||||||
|
max-height: 1.5rem;
|
||||||
|
vertical-align: top;
|
||||||
}
|
}
|
||||||
|
|
||||||
.in-text-img {
|
.in-text-img {
|
||||||
max-width: 1.2em;
|
max-width: 1.2em;
|
||||||
max-height: 1.2em;
|
max-height: 1.2em;
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"id": "foundryvtt-reve-de-dragon",
|
"id": "foundryvtt-reve-de-dragon",
|
||||||
"title": "Rêve de Dragon",
|
"title": "Rêve de Dragon",
|
||||||
"version": "12.0.14",
|
"version": "12.0.15",
|
||||||
"download": "https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/archive/foundryvtt-reve-de-dragon-12.0.14.zip",
|
"download": "https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/archive/foundryvtt-reve-de-dragon-12.0.15.zip",
|
||||||
"manifest": "https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/raw/v11/system.json",
|
"manifest": "https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/raw/v11/system.json",
|
||||||
"changelog": "https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/raw/branch/v11/changelog.md",
|
"changelog": "https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/raw/branch/v11/changelog.md",
|
||||||
"compatibility": {
|
"compatibility": {
|
||||||
|
@ -1,16 +1,18 @@
|
|||||||
{{#unless system.isHidden}}
|
{{#unless system.isHidden}}
|
||||||
<li class="item flexrow list-item {{#if system.isLevelUp}}xp-level-up tooltip{{/if}}" data-item-id="{{_id}}">
|
<li class="item flexrow list-item {{#if system.isLevelUp}}xp-level-up{{/if}}" data-item-id="{{_id}}">
|
||||||
<a class="competence-label roll-competence" name="{{name}}" data-tooltip="Niveau {{plusMoins system.niveau}} en {{name}}">
|
<span class="tooltip">
|
||||||
<img class="sheet-competence-img" src="{{img}}"/>
|
<a class="competence-label roll-competence" name="{{name}}" data-tooltip="Niveau {{plusMoins system.niveau}} en {{name}}">
|
||||||
<span>{{name}}</span>
|
<img class="sheet-competence-img" src="{{img}}"/>
|
||||||
</a>
|
<span>{{name}}</span>
|
||||||
|
</a>
|
||||||
|
|
||||||
{{#if system.isLevelUp}}
|
{{#if system.isLevelUp}}
|
||||||
<span class="tooltiptext ttt-levelup">Vous pouvez dépenser {{system.xpNext}} points d'Experience pour augmenter de 1 votre compétence {{name}}</span>
|
<span class="tooltiptext ttt-levelup">Vous pouvez dépenser {{system.xpNext}} points d'Experience pour augmenter de 1 votre compétence {{name}}</span>
|
||||||
<a class="competence-xp-augmenter" compname="{{name}}">
|
<a class="competence-xp-augmenter" compname="{{name}}">
|
||||||
<i class="fas fa-arrow-alt-circle-up"></i>
|
<i class="fas fa-arrow-alt-circle-up"></i>
|
||||||
</a>
|
</a>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
</span>
|
||||||
|
|
||||||
<input class="competence-value" type="text" compname="{{name}}" name="comp-value-{{name}}"
|
<input class="competence-value" type="text" compname="{{name}}" name="comp-value-{{name}}"
|
||||||
value="{{plusMoins system.niveau}}" data-dtype="number"
|
value="{{plusMoins system.niveau}}" data-dtype="number"
|
||||||
@ -50,7 +52,7 @@
|
|||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
||||||
<a class="item-montrer" data-tooltip="Montrer"><i class="fas fa-comment"></i></a>
|
<a class="item-montrer" data-tooltip="Montrer"><i class="fas fa-comment"></i></a>
|
||||||
</div>
|
</div>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
</li>
|
</li>
|
||||||
{{/unless}}
|
{{/unless}}
|
@ -11,9 +11,10 @@
|
|||||||
<div>
|
<div>
|
||||||
<ul class="flexcol item-list alterne-list">
|
<ul class="flexcol item-list alterne-list">
|
||||||
{{#each table as |row|}}
|
{{#each table as |row|}}
|
||||||
<li class="item list-item" >
|
<li class="item list-item ">
|
||||||
<span>{{row.min}}{{#unless (eq row.min row.max)}}-{{row.max}}{{/unless}} : </span>
|
<span class="flex-group-left">
|
||||||
<span>{{linkCompendium row.document.pack row.document.id row.document.name}}</span>
|
{{row.min}}{{#unless (eq row.min row.max)}}-{{row.max}}{{/unless}} : {{linkCompendium row.document.pack row.document.id row.document.name}}
|
||||||
|
</span>
|
||||||
</li>
|
</li>
|
||||||
{{/each}}
|
{{/each}}
|
||||||
</ul>
|
</ul>
|
Loading…
Reference in New Issue
Block a user