Skip to content

Commit

Permalink
Affichage en privé (seulement pour le MJ et le joueur concerné) du ré…
Browse files Browse the repository at this point in the history
…sultat des jets de dés pour les actions avec 'Désavantages'
  • Loading branch information
YanKlInnomme committed Jul 17, 2024
1 parent d633aad commit ba159ac
Show file tree
Hide file tree
Showing 38 changed files with 77 additions and 115 deletions.
10 changes: 10 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,11 @@ Cette adaptation numérique est un contenu non officiel de KULT: Divinity Lost,
* Astarte Horns (https://github.com/astarte-horns) - Versions 1.3 à 1.5
* Roberto Lorite (https://www.comunidadumbria.com/) - Traduction brésilienne

## Version 3.1.1.0
* Correction des modificateurs 'Mod. Continu' et 'Mod. Situation' (affichage dans le chat des valeurs prises en compte lors du lancer + remise à zéro automatique du modificateur 'Mod. Situation' après le jet)
* Affichage en privé (seulement pour le MJ et le joueur concerné) du résultat des jets de dés pour les actions avec 'Désavantages'
* Ajout d'une vignette spécifique pour le système de jeu (thumbnail.webp), l'image lors de la création de monde reste inchangée (background.webp)

## Version 3.1.0.0
* Passage à la version 12 de Foundry VTT

Expand Down Expand Up @@ -201,6 +206,11 @@ This digital adaptation is unofficial content from KULT: Divinity Lost, authoriz
* Astarte Horns (https://github.com/astarte-horns) - Versions 1.3 to 1.5
* Roberto Lorite (https://www.comunidadumbria.com/) - Brazilian translation

## Version 3.1.1.0
* Correction of the 'Ongoing' and 'Forward' modifiers (display in the chat of the values taken into account during the roll + automatic reset of the 'Forward' modifier after the roll)
* Private display (only for the GM and the player concerned) of the dice roll results for actions with 'Disadvantages'
* Addition of a specific thumbnail for the game system (thumbnail.webp), the image when creating a world remains unchanged (background.webp)

## Version 3.1.0.0
* Upgrade to Foundry VTT version 12

Expand Down
82 changes: 17 additions & 65 deletions modules/sheets/k4ltActor.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,24 +2,17 @@ export default class k4ltActor extends Actor {

/** @override */
prepareBaseData() {
// Cette méthode est appelée lors de la préparation des données de base de l'acteur.
// Si le type de l'acteur est "pc" (personnage joueur), appelez la méthode _preparePCData().
if (this.type === "pc") this._preparePCData();
}

_preparePCData() {
// Cette méthode prépare les données spécifiques au personnage joueur.
// Elle récupère les objets (items) de type "disadvantage" et les assigne à this.system.disadvantages.
this.system.disadvantages = this.items.filter(function (item) {
return item.type == "disadvantage";
});
// Elle convertit this.system.disadvantages en un tableau.
this.system.disadvantagearray = Array.from(this.system.disadvantages);
}

get hasUnstabilizedMajorWounds() {
// Cette méthode vérifie si l'acteur a des blessures majeures non stabilisées.
// Si l'une des blessures a l'état "unstabilized", elle retourne true, sinon elle retourne false.
if (this.system.majorwound1.state == "unstabilized") return true;
if (this.system.majorwound2.state == "unstabilized") return true;
if (this.system.majorwound3.state == "unstabilized") return true;
Expand All @@ -28,16 +21,11 @@ export default class k4ltActor extends Actor {
}

get hasUnstabilizedCriticalWound() {
// Cette méthode vérifie si l'acteur a une blessure critique non stabilisée.
// Si la blessure a l'état "unstabilized", elle retourne true.
// Sinon, la méthode ne retourne rien explicitement, ce qui signifie false sera renvoyé par défaut.
if (this.system.criticalwound.state == "unstabilized") return true;
return false;
}

async displayRollResult({ roll, moveName, resultText, moveResultText, optionsText, whisper = [] }) {
// Cette méthode affiche le résultat d'un lancer de dés dans le chat.
// Les informations nécessaires sont passées en tant qu'objet dans le paramètre.
// Les données sont ensuite utilisées pour générer le contenu du message à afficher.
async displayRollResult({ roll, moveName, resultText, moveResultText, optionsText, rollMode }) {
const templateData = {
total: roll.total,
result: roll.result,
Expand All @@ -49,21 +37,17 @@ export default class k4ltActor extends Actor {

const content = await renderTemplate('systems/k4lt/templates/chat/roll-card.hbs', templateData);

const data = {
const chatData = {
speaker: ChatMessage.getSpeaker({ alias: this.name }),
content: content,
whisper: whisper,
rolls: [roll]
}
rolls: [roll],
rollMode: rollMode
};

ChatMessage.applyRollMode(data, "roll");
ChatMessage.create(data);
ChatMessage.create(chatData);
}

async moveroll(moveID) {
// Cette méthode effectue le lancer de dés pour une action spécifique (move) de l'acteur.
// Elle reçoit l'identifiant (moveID) de l'action à effectuer.

kultLogger("Actor Data => ", this);

let move = this.items.get(moveID);
Expand All @@ -74,17 +58,9 @@ export default class k4ltActor extends Actor {
const moveName = move.name;
kultLogger("Move Type => ", moveType);

let whisper = [];
if (moveType == "disadvantage") {
whisper = [game.user.uuid, game.users.find(u => u.isGM).uuid];
}
kultLogger("Whisper => ", whisper);

if (moveSystemType === "passive") {
// Si le type d'action est "passive", affiche un avertissement dans les notifications du jeu.
ui.notifications.warn(game.i18n.localize("k4lt.PassiveAbility"));
} else {
// Sinon, récupère les informations nécessaires pour le lancer de dés.
const attr = move.system.attributemod == "ask" ? await this._attributeAsk() : move.system.attributemod;
const successtext = move.system.completesuccess;
const optionstext = move.system.options;
Expand All @@ -95,14 +71,10 @@ export default class k4ltActor extends Actor {
let harm = 0;

if (specialflag == 3) {
// Si le specialflag est égal à 3, il s'agit de l'action "Endure Injury" qui nécessite une saisie utilisateur.
// Affiche une boîte de dialogue pour demander la valeur de harm.
let boxoutput = await new Promise((resolve) => {
new Dialog({
title: game.i18n.localize("k4lt.EndureInjury"),
content: `<div class="endure-harm-dialog"><label>${game.i18n.localize(
"k4lt.EndureInjuryDialog"
)}</label><input id="harm_value" data-type="number" type="number"></div>`,
content: `<div class="endure-harm-dialog"><label>${game.i18n.localize("k4lt.EndureInjuryDialog")}</label><input id="harm_value" data-type="number" type="number"></div>`,
default: "one",
buttons: {
one: {
Expand All @@ -118,8 +90,6 @@ export default class k4ltActor extends Actor {
}

if (attr != "" && attr != "none") {
// Si attr n'est pas une chaîne vide et n'est pas égal à "none",
// utilise this.system.attributes pour récupérer la valeur de mod correspondante.
mod = this.system.attributes[attr];
}

Expand All @@ -131,23 +101,14 @@ export default class k4ltActor extends Actor {

let situation = 0;

// Réduit la situation modifiée en fonction des blessures majeures non stabilisées.
if (this.hasUnstabilizedMajorWounds) situation -= 1;

// Réduit la situation modifiée en fonction de la blessure critique non stabilisée.
if (this.hasUnstabilizedCriticalWound) situation -= 1;

// Réduit la situation modifiée en fonction de la stabilité pour les actions de type "disadvantage".
if (moveType == "disadvantage" && stability > 0) {
situation -= (stability <= 2) ? 1 : ((stability <= 5) ? 2 : 3);
}

// Réduit la situation modifiée en fonction de la stabilité pour l'action "Stability Keep It Together".
if (specialflag == 1 && stability > 0) {
situation -= (stability <= 2) ? 0 : ((stability <= 5) ? 1 : 2);
}

// Augmente la situation modifiée en fonction de la stabilité pour l'action "Stability See Through the Illusion".
if (specialflag == 2 && stability > 5) {
situation += 1;
}
Expand All @@ -156,48 +117,39 @@ export default class k4ltActor extends Actor {
kultLogger("Stability Mod => ", situation);
kultLogger("Harm => ", harm);

// Effectue le lancer de dés avec les modificateurs et la situation modifiée.
let r = new Roll(`2d10 + ${mod} + ${ongoing} + ${forward} + ${situation} - ${harm}`);
await r.roll({ async: true });

if (r.total) {
// Si le résultat du lancer est supérieur à zéro, met à jour la valeur de forward de l'acteur à zéro.
this.update({ "system.forward": 0 });
kultLogger(`Forward is ` + this.system.forward);
}

let rollMode = game.settings.get("core", "rollMode");
if (moveType == "disadvantage") {
rollMode = "gmroll";
}

if (r.total >= 15) {
// Si le total du lancer est supérieur ou égal à 15, affiche le résultat comme un succès complet.
await this.displayRollResult({ roll: r, moveName, resultText: game.i18n.localize("k4lt.Success"), moveResultText: successtext, optionsText: optionstext });
await this.displayRollResult({ roll: r, moveName, resultText: game.i18n.localize("k4lt.Success"), moveResultText: successtext, optionsText: optionstext, rollMode });
} else if (r.total < 10) {
// Si le total du lancer est inférieur à 10, affiche le résultat comme un échec.
await this.displayRollResult({ roll: r, moveName, resultText: game.i18n.localize("k4lt.Failure"), moveResultText: failuretext, optionsText: optionstext });
await this.displayRollResult({ roll: r, moveName, resultText: game.i18n.localize("k4lt.Failure"), moveResultText: failuretext, optionsText: optionstext, rollMode });
} else {
// Sinon, affiche le résultat comme un succès partiel.
await this.displayRollResult({ roll: r, moveName, resultText: game.i18n.localize("k4lt.PartialSuccess"), moveResultText: partialsuccess, optionsText: optionstext });
await this.displayRollResult({ roll: r, moveName, resultText: game.i18n.localize("k4lt.PartialSuccess"), moveResultText: partialsuccess, optionsText: optionstext, rollMode });
}
}
}

async _attributeAsk() {
// Cette méthode gère la demande de l'attribut à l'utilisateur.
// Elle affiche une boîte de dialogue contenant un sélecteur d'attributs.

// Stocke les noms d'attributs dans un tableau plutôt que de les stocker individuellement.
const attributes = ["None", "Willpower", "Fortitude", "Reflexes", "Reason", "Intuition", "Perception", "Coolness", "Violence", "Charisma", "Soul"];

// Utilise la méthode map() pour générer les options du sélecteur à partir du tableau d'attributs.
const options = attributes
.map((attribute) => {
// Localise chaque nom d'attribut.
const localizedAttribute = game.i18n.localize(`k4lt.${attribute}`);
// Retourne une chaîne HTML pour chaque option.
return `<option value="${attribute.toLowerCase()}">${localizedAttribute}</option>`;
// Utilise la méthode join() pour joindre les options du sélecteur en une seule chaîne.
})
.join("");

// Utilise une promesse pour attendre la sélection de l'utilisateur.
const result = await new Promise((resolve) => {
new Dialog({
title: game.i18n.localize("k4lt.AskAttribute"),
Expand Down
File renamed without changes.
2 changes: 1 addition & 1 deletion packs/abilities/CURRENT
Original file line number Diff line number Diff line change
@@ -1 +1 @@
MANIFEST-000272
MANIFEST-000288
6 changes: 3 additions & 3 deletions packs/abilities/LOG
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
2024/07/17-17:33:26.421 1012c Recovering log #271
2024/07/17-17:33:26.424 1012c Delete type=0 #271
2024/07/17-17:33:26.424 1012c Delete type=3 #270
2024/07/18-01:02:24.483 12ab8 Recovering log #287
2024/07/18-01:02:24.486 12ab8 Delete type=0 #287
2024/07/18-01:02:24.487 12ab8 Delete type=3 #286
6 changes: 3 additions & 3 deletions packs/abilities/LOG.old
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
2024/07/17-17:10:29.598 ff08 Recovering log #269
2024/07/17-17:10:29.600 ff08 Delete type=0 #269
2024/07/17-17:10:29.601 ff08 Delete type=3 #268
2024/07/18-00:40:02.142 129fc Recovering log #285
2024/07/18-00:40:02.144 129fc Delete type=0 #285
2024/07/18-00:40:02.145 129fc Delete type=3 #284
Binary file not shown.
File renamed without changes.
2 changes: 1 addition & 1 deletion packs/advantages/CURRENT
Original file line number Diff line number Diff line change
@@ -1 +1 @@
MANIFEST-000296
MANIFEST-000312
6 changes: 3 additions & 3 deletions packs/advantages/LOG
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
2024/07/17-17:33:26.429 c130 Recovering log #295
2024/07/17-17:33:26.431 c130 Delete type=0 #295
2024/07/17-17:33:26.431 c130 Delete type=3 #294
2024/07/18-01:02:24.491 138e8 Recovering log #311
2024/07/18-01:02:24.493 138e8 Delete type=0 #311
2024/07/18-01:02:24.493 138e8 Delete type=3 #310
6 changes: 3 additions & 3 deletions packs/advantages/LOG.old
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
2024/07/17-17:10:29.605 10704 Recovering log #293
2024/07/17-17:10:29.608 10704 Delete type=0 #293
2024/07/17-17:10:29.608 10704 Delete type=3 #292
2024/07/18-00:40:02.149 14e24 Recovering log #309
2024/07/18-00:40:02.151 14e24 Delete type=0 #309
2024/07/18-00:40:02.152 14e24 Delete type=3 #308
Binary file not shown.
File renamed without changes.
2 changes: 1 addition & 1 deletion packs/character-examples/CURRENT
Original file line number Diff line number Diff line change
@@ -1 +1 @@
MANIFEST-000372
MANIFEST-000388
6 changes: 3 additions & 3 deletions packs/character-examples/LOG
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
2024/07/17-17:33:26.436 d59c Recovering log #371
2024/07/17-17:33:26.438 d59c Delete type=0 #371
2024/07/17-17:33:26.439 d59c Delete type=3 #370
2024/07/18-01:02:24.497 10638 Recovering log #387
2024/07/18-01:02:24.500 10638 Delete type=0 #387
2024/07/18-01:02:24.500 10638 Delete type=3 #386
6 changes: 3 additions & 3 deletions packs/character-examples/LOG.old
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
2024/07/17-17:10:29.612 e288 Recovering log #369
2024/07/17-17:10:29.615 e288 Delete type=0 #369
2024/07/17-17:10:29.615 e288 Delete type=3 #368
2024/07/18-00:40:02.156 15aa0 Recovering log #385
2024/07/18-00:40:02.159 15aa0 Delete type=0 #385
2024/07/18-00:40:02.159 15aa0 Delete type=3 #384
Binary file not shown.
File renamed without changes.
2 changes: 1 addition & 1 deletion packs/dark-secrets/CURRENT
Original file line number Diff line number Diff line change
@@ -1 +1 @@
MANIFEST-000405
MANIFEST-000421
6 changes: 3 additions & 3 deletions packs/dark-secrets/LOG
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
2024/07/17-17:33:26.443 102f0 Recovering log #404
2024/07/17-17:33:26.445 102f0 Delete type=0 #404
2024/07/17-17:33:26.446 102f0 Delete type=3 #403
2024/07/18-01:02:24.504 11e10 Recovering log #420
2024/07/18-01:02:24.507 11e10 Delete type=0 #420
2024/07/18-01:02:24.507 11e10 Delete type=3 #419
6 changes: 3 additions & 3 deletions packs/dark-secrets/LOG.old
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
2024/07/17-17:10:29.621 10140 Recovering log #402
2024/07/17-17:10:29.624 10140 Delete type=0 #402
2024/07/17-17:10:29.624 10140 Delete type=3 #401
2024/07/18-00:40:02.164 12a00 Recovering log #418
2024/07/18-00:40:02.167 12a00 Delete type=0 #418
2024/07/18-00:40:02.167 12a00 Delete type=3 #417
Binary file not shown.
File renamed without changes.
2 changes: 1 addition & 1 deletion packs/disadvantages/CURRENT
Original file line number Diff line number Diff line change
@@ -1 +1 @@
MANIFEST-000220
MANIFEST-000236
6 changes: 3 additions & 3 deletions packs/disadvantages/LOG
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
2024/07/17-17:33:26.449 1012c Recovering log #219
2024/07/17-17:33:26.452 1012c Delete type=0 #219
2024/07/17-17:33:26.452 1012c Delete type=3 #218
2024/07/18-01:02:24.510 12ab8 Recovering log #235
2024/07/18-01:02:24.512 12ab8 Delete type=0 #235
2024/07/18-01:02:24.513 12ab8 Delete type=3 #234
6 changes: 3 additions & 3 deletions packs/disadvantages/LOG.old
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
2024/07/17-17:10:29.628 ff08 Recovering log #217
2024/07/17-17:10:29.631 ff08 Delete type=0 #217
2024/07/17-17:10:29.631 ff08 Delete type=3 #216
2024/07/18-00:40:02.171 129fc Recovering log #233
2024/07/18-00:40:02.174 129fc Delete type=0 #233
2024/07/18-00:40:02.174 129fc Delete type=3 #232
Binary file not shown.
File renamed without changes.
2 changes: 1 addition & 1 deletion packs/limitations/CURRENT
Original file line number Diff line number Diff line change
@@ -1 +1 @@
MANIFEST-000410
MANIFEST-000426
6 changes: 3 additions & 3 deletions packs/limitations/LOG
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
2024/07/17-17:33:26.456 c130 Recovering log #409
2024/07/17-17:33:26.459 c130 Delete type=0 #409
2024/07/17-17:33:26.459 c130 Delete type=3 #408
2024/07/18-01:02:24.517 138e8 Recovering log #425
2024/07/18-01:02:24.520 138e8 Delete type=0 #425
2024/07/18-01:02:24.520 138e8 Delete type=3 #424
6 changes: 3 additions & 3 deletions packs/limitations/LOG.old
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
2024/07/17-17:10:29.636 10704 Recovering log #407
2024/07/17-17:10:29.638 10704 Delete type=0 #407
2024/07/17-17:10:29.639 10704 Delete type=3 #406
2024/07/18-00:40:02.178 14e24 Recovering log #423
2024/07/18-00:40:02.181 14e24 Delete type=0 #423
2024/07/18-00:40:02.181 14e24 Delete type=3 #422
Binary file not shown.
File renamed without changes.
2 changes: 1 addition & 1 deletion packs/moves/CURRENT
Original file line number Diff line number Diff line change
@@ -1 +1 @@
MANIFEST-000336
MANIFEST-000352
6 changes: 3 additions & 3 deletions packs/moves/LOG
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
2024/07/17-17:33:26.464 d59c Recovering log #335
2024/07/17-17:33:26.466 d59c Delete type=0 #335
2024/07/17-17:33:26.466 d59c Delete type=3 #334
2024/07/18-01:02:24.525 10638 Recovering log #351
2024/07/18-01:02:24.527 10638 Delete type=0 #351
2024/07/18-01:02:24.528 10638 Delete type=3 #350
6 changes: 3 additions & 3 deletions packs/moves/LOG.old
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
2024/07/17-17:10:29.643 e288 Recovering log #333
2024/07/17-17:10:29.646 e288 Delete type=0 #333
2024/07/17-17:10:29.646 e288 Delete type=3 #332
2024/07/18-00:40:02.184 15aa0 Recovering log #349
2024/07/18-00:40:02.187 15aa0 Delete type=0 #349
2024/07/18-00:40:02.187 15aa0 Delete type=3 #348
Binary file not shown.
2 changes: 1 addition & 1 deletion system.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"id": "k4lt",
"title": "KULT: Divinity Lost (4th Edition)",
"description": "Kult is a horror role-playing game that focuses on the fears and impulses buried in our subconscious. Players take on the role of characters with dark secrets and can evolve in industrial cities, facing satanic cults, psychopathic killers, corrupt multinationals and more.",
"version": "3.1.0.0",
"version": "3.1.1.0",
"license": "LICENSE",
"compatibility": {
"minimum": "12",
Expand Down

0 comments on commit ba159ac

Please sign in to comment.