Files
macros_foundry/Taverne Ecarlate/macros/sendMessageMoves.js
2026-05-12 18:43:59 +02:00

81 lines
7.0 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
const toCamelCase = (str) => str
.trim()
.normalize("NFD")
.replace(/[\u0300-\u036f]/g, "")
.replace(/[^a-zA-Z0-9 ]/g, "")
.split(' ')
.filter(word => word.length > 0)
.map((word, i) => i === 0
? word.toLowerCase()
: word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()
)
.join('')
const _name = toCamelCase(name)
const map = new Map([["aider", {
FullSuccess: "Sur une réussite complète : votre aide est précieuse. Choisissez 2 options (vous ne pouvez pas prendre 2 fois la même) : Vous offrez un bonus de 10 ; Vous accélérer laction réalisée ; Le MJ donne une surprise bénéfique en cas de réussite",
PartialSuccess: "Sur une réussite partielle : votre aide est utile. Choisissez 1 option : Vous offrez un bonus de 10 ; Vous accélérer laction réalisée ; Le MJ donne une surprise bénéfique en cas de réussite",
Failure: "Sur un échec : échec. Le MJ ajoutes une surprise négative et tu ne peux plus aider pendant la scène. De plus tu imposes un malus de 5 à la personne aidée."
}],["agirDansLombre", {
FullSuccess: "Sur une réussite complète : vous agissez sans laisser aucune trace. Personne ne vous a vu, entendu ou suspecté.",
PartialSuccess: "Sur une réussite partielle : vous réussissez mais quelque chose accroche. Choisissez 1 option : Vous êtes passé de justesse : quelqu'un a failli vous repérer. Il s'en souvient et reste méfiant ; Vous laissez une trace ou un indice derrière vous que quelqu'un pourrait retrouver plus tard ; Vous réussissez mais perdez du temps : la situation a évolué pendant ce temps ; Vous devez sacrifier quelque chose (un objet, une opportunité) pour rester dans l'ombre ; Vous subissez un malus de 5 sur votre prochaine manœuvre dans la scène",
Failure: "Sur un échec : vous êtes repéré ou votre action est découverte. Le MJ décide des conséquences et de qui l'apprend."
}],["boireDuSang", {
FullSuccess: "Sur une réussite complète : vous buvez librement. Gagnez 2 point de sang et choisissez 2 option bonus (vous pouvez prendre 2 fois la même) : Gagnez 1 point de sang ; Vous soignez 1 blessure ; La cible ne garde aucun souvenir de l'événement ; La cible ne meurt pas ; Tu déplaces la jauge Volonté/Bête de un cran dans la direction souhaité ; Réduire l'éveil de la Bête de 1",
PartialSuccess: "Sur une réussite partielle : vous buvez mais cela a un coût. Gagnez 2 point de sang et choisissez 1 option : Gagnez 1 point de sang ; Vous soignez 1 blessure ; La cible ne garde aucun souvenir de l'événement ; La cible ne meurt pas ; Tu déplaces la jauge Volonté/Bête de un cran dans la direction souhaité ; Réduire l'éveil de la Bête de 1",
Failure: "Sur un échec : vous buvez 1 point de sang mais perdez le contrôle. La jauge Volonté/Bête se déplace d'un cran vers la Bête et le MJ décide des conséquences."
}],["discuter", {
FullSuccess: "Sur une réussite complète : la personne accepte, vous croit ou est intimidée.",
PartialSuccess: "Sur une réussite partielle : la personne accepte, vous croit ou est intimidée mais le MJ choisit 1 option au choix : Il y a des complications ; La cible a des exigences en retour ; La cible gagne un bonus de 5 à sa prochaine manœuvre contre vous ; Elle n'est convaincue que temporairement ; Quelqu'un d'autre remarque votre tentative d'influence",
Failure: "Sur un échec : échec. Le MJ décide de lissue."
}],["faireMarcherLesMuscles", {
FullSuccess: "Sur une réussite complète : vous réussissez haut la main ce que vous entreprenez dans un temps record.",
PartialSuccess: "Sur une réussite partielle : vous réussissez mais choisissez 1 option : Vous subissez une blessure ou un contrecoup physique ; Votre action prends du temps à être réalisée ; La qualité laisse à désirer ; Vous avez besoin de laide de quelquun pour terminer ; Vous obtenez un malus de 5 sur votre prochaine manœuvre dans la scène",
Failure: "Sur un échec : échec. Le MJ décide de lissue."
}],["observerLaScene", {
FullSuccess: "Sur une réussite complète : posez 2 question au MJ. Il vous réponds honnêtement même si la question est hors-sujet.",
PartialSuccess: "Sur une réussite partielle : posez une question au MJ et choisissez une option : Vous attirez l'attention ; Vous apprenez en plus 2 informations dont lune est sans doute fausse ; La réponse manques de précision ; Votre observation prends du temps ; Vous subissez un malus de 5 sur votre prochaine manœuvre dans la scène",
Failure: "Sur un échec : échec. Le MJ décide de lissue."
}],["seControler", {
FullSuccess: "Sur une réussite complète : vous tenez bon complètement. La pulsion est repoussée et vous agissez librement. Choisissez 1 options : La jauge Volonté/Bête peut se déplacer dun cran dans vers la Volonté ; Réduisez l'Eveil de la Bête de 1",
PartialSuccess: "Sur une réussite partielle : vous résistez mais cela vous coûte quelque chose. Choisissez 1 option possible de la reussite et une autre de la liste suivante (certaine ne peuvent etre choisi en fonction de votre premier choix) : La jauge Volonté/Bête se déplace d'un cran vers la Bête ; Augmentez l'Eveil de la Bête de 1 ; Vous cédez partiellement à la pulsion avant de reprendre le contrôle. Le MJ décrit ce qui se passe ; Vous subissez un malus de 10 sur votre prochaine manœuvre, épuisé par l'effort ; Vous avez besoin d'un ancrage extérieur (une personne, un objet, un lieu) pour tenir : sans lui, c'est un échec",
Failure: "Sur un échec : la Bête ou la pulsion prend le dessus. La jauge se déplace d'un cran vers la Bête ou vous prenez un éveil de la Bête et le MJ décrit brièvement comment votre personnage perd le contrôle."
}],])
const labels = {
"FullSuccess": "Réussite complète",
"PartialSuccess": "Réussite partielle",
"Failure": "Échec"
};
const colors = {
"FullSuccess": "#3fb950",
"PartialSuccess": "#d29922",
"Failure": "#f85149"
};
const _type = labels[resultType];
const _couleur = colors[resultType];
const _desc = map.get(_name)?.[resultType] ?? "Description introuvable";
const _threshold = threshold
const _roll = roll
console.log(_couleur)
content = '<div style="border-left:4px solid ' + _couleur + ';background:' + _couleur + '18;border-radius:4px;padding:10px 14px;">'
+ '<div style="font-size:11px;color:#aaa;margin-bottom:4px;text-transform:uppercase;letter-spacing:.05em">' + _type + ' — ' + name + '</div>'
+ '<div style="font-size:15px;font-weight:700;color:' + _couleur + ';margin-bottom:8px">◈ ' + _type + '</div>'
+ '<div style="display:flex;gap:16px;font-size:12px;margin-bottom:8px">'
+ '<span>Seuil : <b>' + threshold + '</b></span>'
+ '<span>Résultat : <b>' + roll + '</b></span>'
+ '</div>'
+ '<div style="font-size:12px;border-top:1px solid ' + _couleur + '44;padding-top:6px;color:' + _couleur + 'cc">' + _desc + '</div>'
+ '</div>'
console.log(content)
await ChatMessage.create({
content: content,
speaker: ChatMessage.getSpeaker(),
whisper: [],
style:CONST.CHAT_MESSAGE_STYLES.OTHER,
})