Consommer nourriture, suite #168
This commit is contained in:
parent
6b31e81c72
commit
3d8453dc2d
@ -261,7 +261,7 @@ export class RdDActorSheet extends ActorSheet {
|
|||||||
const li = $(ev.currentTarget).parents(".item");
|
const li = $(ev.currentTarget).parents(".item");
|
||||||
const itemId = li.data("item-id");
|
const itemId = li.data("item-id");
|
||||||
const item = this.actor.getObjet(itemId);
|
const item = this.actor.getObjet(itemId);
|
||||||
this.actor.consommer(item);
|
this.actor.consommerDialog(item);
|
||||||
});
|
});
|
||||||
html.find('.subacteur-delete').click(ev => {
|
html.find('.subacteur-delete').click(ev => {
|
||||||
const li = $(ev.currentTarget).parents(".item");
|
const li = $(ev.currentTarget).parents(".item");
|
||||||
|
@ -1610,25 +1610,70 @@ export class RdDActor extends Actor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async consommer(item) {
|
async consommerDialog(item) {
|
||||||
DialogConsommer.create(this, item, {
|
if (!item.isConsommable()) return;
|
||||||
html: 'systems/foundryvtt-reve-de-dragon/templates/dialog-consommer-nourriture.html',
|
const dialog = await DialogConsommer.create(this, item);
|
||||||
}, []);
|
dialog.render(true)
|
||||||
}
|
}
|
||||||
|
|
||||||
async manger(sust) {
|
/* -------------------------------------------- */
|
||||||
|
async consommer(item, choix) {
|
||||||
|
switch (Misc.data(item).type) {
|
||||||
|
case 'nourritureboisson':
|
||||||
|
return await this.consommerNourritureboisson(item, choix);
|
||||||
|
case 'potion':
|
||||||
|
return await this.consommerPotion(item)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
async consommerNourritureboisson(item, choix = { doses: 1, seForcer: false }) {
|
||||||
|
const itemData = Misc.data(item);
|
||||||
|
if (itemData.type != 'nourritureboisson') {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (choix.doses > itemData.data.quantite) {
|
||||||
|
ui.notifications.warn(`Il n'y a pas assez de ${itemData.name} poour manger ${choix.doses}`)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const surmonteExotisme = await this.surmonterExotisme(item, choix);
|
||||||
|
if (!surmonteExotisme) {
|
||||||
|
ui.notifications.warn(`Vous n'arrivez pas à manger de ${itemData.name}`)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
await this.manger(item, choix.doses, { diminuerQuantite: false });
|
||||||
|
await this.boire(item, choix.doses, { diminuerQuantite: false });
|
||||||
|
await item.diminuerQuantite(choix.doses);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
async manger(item, doses, options = { diminuerQuantite: true }) {
|
||||||
|
if (!item.isConsommable()) return;
|
||||||
|
await this.apprecierCuisine(item);
|
||||||
|
const sust = Misc.templateData(item).sust;
|
||||||
if (sust > 0) {
|
if (sust > 0) {
|
||||||
await this.updateCompteurValue('sust', Misc.templateData(this).compteurs.sust.value + sust);
|
await this.updateCompteurValue('sust', Misc.keepDecimals(Misc.templateData(this).compteurs.sust.value + sust * doses, 2));
|
||||||
}
|
}
|
||||||
|
await item.diminuerQuantite(doses, options);
|
||||||
}
|
}
|
||||||
|
|
||||||
async boire(eau) {
|
/* -------------------------------------------- */
|
||||||
if (eau > 0) {
|
async boire(item, doses, options = { diminuerQuantite: true }) {
|
||||||
await this.actor.updateCompteurValue('eau', Misc.templateData(this).eau.value + this.consommerData.data.desaltere);
|
if (!item.isConsommable()) return;
|
||||||
|
const tplData = Misc.templateData(item);
|
||||||
|
const desaltere = tplData.desaltere;
|
||||||
|
if (desaltere > 0) {
|
||||||
|
await this.updateCompteurValue('eau', Misc.keepDecimals(Misc.templateData(this).compteurs.eau.value + desaltere * doses, 2));
|
||||||
}
|
}
|
||||||
|
if (item.isAlcool()) {
|
||||||
|
for (let i = 0; i < doses; i++) {
|
||||||
|
await this.saouler(tplData.force);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
await item.diminuerQuantite(doses, options);
|
||||||
}
|
}
|
||||||
|
|
||||||
async alcool(forceAlcool) {
|
async saouler(forceAlcool) {
|
||||||
const actorTplData = Misc.templateData(this);
|
const actorTplData = Misc.templateData(this);
|
||||||
const etatGeneral = this.getEtatGeneral({ ethylisme: true });
|
const etatGeneral = this.getEtatGeneral({ ethylisme: true });
|
||||||
const nbDoses = -Number(actorTplData.compteurs.ethylisme.nb_doses || 0);
|
const nbDoses = -Number(actorTplData.compteurs.ethylisme.nb_doses || 0);
|
||||||
@ -1643,26 +1688,28 @@ export class RdDActor extends Actor {
|
|||||||
await this.performEthylisme(rollData);
|
await this.performEthylisme(rollData);
|
||||||
}
|
}
|
||||||
|
|
||||||
async apprecierCuisine(consommerData) {
|
async apprecierCuisine(item) {
|
||||||
const cuisine = Misc.data(this.getCompetence('cuisine'));
|
const cuisine = Misc.data(this.getCompetence('cuisine'));
|
||||||
const qualite = consommerData.data.qualite;
|
const itemData = Misc.data(item);
|
||||||
|
const qualite = itemData.data.qualite;
|
||||||
if (cuisine && qualite > 0 && qualite > cuisine.data.niveau) {
|
if (cuisine && qualite > 0 && qualite > cuisine.data.niveau) {
|
||||||
const rolled = await this.rollCaracCompetence('gout', 'cuisine', qualite, { title: consommerData.data.boisson ? "apprécie la boisson" : "apprécie le plat" });
|
const rolled = await this.rollCaracCompetence('gout', 'cuisine', qualite, { title: itemData.data.boisson ? "apprécie la boisson" : "apprécie le plat" });
|
||||||
if (rolled.isSuccess) {
|
if (rolled.isSuccess) {
|
||||||
await this.jetDeMoral('heureux');
|
await this.jetDeMoral('heureux');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async surmonterExotisme(consommerData) {
|
async surmonterExotisme(item, choix = {}) {
|
||||||
const qualite = consommerData.data.qualite;
|
const itemData = Misc.data(item);
|
||||||
|
const qualite = itemData.data.qualite;
|
||||||
if (qualite < 0) {
|
if (qualite < 0) {
|
||||||
const rolled = await this.rollCaracCompetence('volonte', 'cuisine', qualite, { title: "tente de surmonter l'exotisme" });
|
const rolled = await this.rollCaracCompetence('volonte', 'cuisine', qualite, { title: `surmonte l'exotisme de ${itemData.name}` });
|
||||||
if (rolled.isEchec) {
|
if (rolled.isEchec) {
|
||||||
if (!consommerData.data.seForcer) {
|
if (!choix.seForcer) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
await this.actor.jetDeMoral('malheureux');
|
await this.jetDeMoral('malheureux');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@ -2102,7 +2149,7 @@ export class RdDActor extends Actor {
|
|||||||
caracValue: Number(carac.value),
|
caracValue: Number(carac.value),
|
||||||
selectedCarac: carac,
|
selectedCarac: carac,
|
||||||
competence: competence,
|
competence: competence,
|
||||||
finalLevel: (competence?.data.niveau ?? 0) + diff,
|
finalLevel: (Misc.templateData(competence)?.niveau ?? 0) + diff,
|
||||||
diffLibre: diff,
|
diffLibre: diff,
|
||||||
showDice: true,
|
showDice: true,
|
||||||
show: { title: options?.title ?? '' }
|
show: { title: options?.title ?? '' }
|
||||||
|
@ -3,56 +3,24 @@ import { Misc } from "./misc.js";
|
|||||||
|
|
||||||
export class DialogConsommer extends Dialog {
|
export class DialogConsommer extends Dialog {
|
||||||
|
|
||||||
static async create(actor, item, dialogConfig) {
|
static async create(actor, item, template = undefined, options = {}) {
|
||||||
let consommerData = DialogConsommer.prepareData(actor, item);
|
const consommerData = DialogConsommer.prepareData(actor, item, options);
|
||||||
if (!consommerData) {
|
const html = await renderTemplate(template ?? `systems/foundryvtt-reve-de-dragon/templates/consommer/dialog-${Misc.data(item).type}.html`, consommerData);
|
||||||
ui.notifications.warn(`Impossible de consommer un ${consommerData.name}, ce n'est pas de la nourriture, une boisson ou une potion`);
|
return new DialogConsommer(actor, item, consommerData, html, options)
|
||||||
return;
|
}
|
||||||
}
|
|
||||||
|
constructor(actor, item, consommerData, html, options = {}) {
|
||||||
|
mergeObject(options, { classes: ["dialogconsommer"], width: 600, height: 500, 'z-index': 99999 }, { overwrite: false })
|
||||||
|
|
||||||
let conf = {
|
let conf = {
|
||||||
title: consommerData.title,
|
title: consommerData.title,
|
||||||
content: await renderTemplate(dialogConfig.html, consommerData),
|
content: html,
|
||||||
default: consommerData.buttonName,
|
default: consommerData.buttonName,
|
||||||
};
|
buttons: {
|
||||||
|
[consommerData.buttonName]: {
|
||||||
|
label: consommerData.buttonName, callback: it => {
|
||||||
let options = { classes: ["dialogconsommer"], width: 600, height: 500, 'z-index': 99999 };
|
this.actor.consommer(this.item, this.consommerData.choix);
|
||||||
mergeObject(options, dialogConfig.options ?? {}, { overwrite: true })
|
}
|
||||||
|
|
||||||
console.log('consommer', actor, consommerData, conf, options);
|
|
||||||
const dialog = new DialogConsommer(actor, consommerData, conf, options);
|
|
||||||
dialog.render(true);
|
|
||||||
return dialog;
|
|
||||||
}
|
|
||||||
|
|
||||||
static prepareData(actor, item) {
|
|
||||||
let consommerData = duplicate(Misc.data(item));
|
|
||||||
switch (consommerData.type) {
|
|
||||||
default:
|
|
||||||
return undefined;
|
|
||||||
case 'nourritureboisson':
|
|
||||||
consommerData.doses = 1;
|
|
||||||
consommerData.title = consommerData.data.boisson ? `${consommerData.name}: boire une dose` : `${consommerData.name}: manger une portion`;
|
|
||||||
consommerData.buttonName = consommerData.data.boisson ? "Boire" : "Manger";
|
|
||||||
break;
|
|
||||||
case 'potion':
|
|
||||||
buttonName.title = `${consommerData.name}: boire la potion`;
|
|
||||||
consommerData.buttonName = "Boire";
|
|
||||||
consommerData.alchimie = Misc.data(actor.getCompetence('alchimie'));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
consommerData.cuisine = Misc.data(actor.getCompetence('cuisine'));
|
|
||||||
consommerData.seForcer = false;
|
|
||||||
return consommerData;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
constructor(actor, consommerData, conf, options) {
|
|
||||||
conf.buttons = {
|
|
||||||
[consommerData.buttonName]: {
|
|
||||||
label: consommerData.buttonName, callback: it => {
|
|
||||||
this.consommer();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -60,66 +28,55 @@ export class DialogConsommer extends Dialog {
|
|||||||
super(conf, options);
|
super(conf, options);
|
||||||
|
|
||||||
this.actor = actor;
|
this.actor = actor;
|
||||||
|
this.item = item;
|
||||||
this.consommerData = consommerData;
|
this.consommerData = consommerData;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
static prepareData(actor, item, options) {
|
||||||
|
const itemData = duplicate(Misc.data(item));
|
||||||
|
let consommerData = {
|
||||||
|
item: itemData,
|
||||||
|
choix: {
|
||||||
|
doses: options.doses ?? 1,
|
||||||
|
seForcer: options.seForcer ?? false,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
switch (itemData.type) {
|
||||||
|
case 'nourritureboisson':
|
||||||
|
consommerData.title = itemData.data.boisson ? `${itemData.name}: boire une dose` : `${itemData.name}: manger une portion`;
|
||||||
|
consommerData.buttonName = itemData.data.boisson ? "Boire" : "Manger";
|
||||||
|
break;
|
||||||
|
case 'potion':
|
||||||
|
buttonName.title = `${itemData.name}: boire la potion`;
|
||||||
|
consommerData.buttonName = "Boire";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
DialogConsommer.calculDoses(consommerData, consommerData.choix.doses)
|
||||||
|
return consommerData;
|
||||||
|
}
|
||||||
|
|
||||||
|
static calculDoses(consommerData) {
|
||||||
|
const doses = consommerData.choix.doses;
|
||||||
|
consommerData.totalSust = Misc.keepDecimals(doses * (consommerData.item.data.sust ?? 0), 2);
|
||||||
|
consommerData.totalDesaltere = consommerData.item.data.boisson
|
||||||
|
? Misc.keepDecimals(doses * (consommerData.item.data.desaltere ?? 0), 2)
|
||||||
|
: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
activateListeners(html) {
|
activateListeners(html) {
|
||||||
super.activateListeners(html);
|
super.activateListeners(html);
|
||||||
|
html.find(".se-forcer").change(event => {
|
||||||
function updateConsommerData(rollData) {
|
this.consommerData.choix.seForcer = event.currentTarget.checked;
|
||||||
|
});
|
||||||
rollData.finalLevel = Number(rollData.etat) + Number(rollData.forceAlcool) + rollData.diffNbDoses;
|
|
||||||
|
|
||||||
// Mise à jour valeurs
|
|
||||||
$("#roll-param").text(rollData.vieValue + " / " + Misc.toSignedString(rollData.finalLevel));
|
|
||||||
$(".table-resolution").remove();
|
|
||||||
$("#resolutionTable").append(RdDResolutionTable.buildHTMLTableExtract(rollData.vieValue, rollData.finalLevel));
|
|
||||||
}
|
|
||||||
|
|
||||||
html.find(".consommer-doses").change(event => {
|
html.find(".consommer-doses").change(event => {
|
||||||
this.u
|
this.consommerData.choix.doses = Number(event.currentTarget.value);
|
||||||
|
DialogConsommer.calculDoses(this.consommerData);
|
||||||
|
$(".total-sust").text(this.consommerData.totalSust)
|
||||||
|
$(".total-desaltere").text(this.consommerData.totalDesaltere)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
|
||||||
async consommer() {
|
|
||||||
switch (this.consommerData.type) {
|
|
||||||
default:
|
|
||||||
return undefined;
|
|
||||||
case 'nourritureboisson':
|
|
||||||
return await this.consommerNourritureBoisson();
|
|
||||||
case 'potion':
|
|
||||||
return await this.consommerPotion();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
async consommerNourritureBoisson() {
|
|
||||||
const surmonteExotisme = await this.actor.surmonterExotisme(this.consommerData);
|
|
||||||
if (!surmonteExotisme) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
await this.actor.apprecierCuisine(this.consommerData);
|
|
||||||
if (this.isAlcool()) {
|
|
||||||
await this.actor.alcool(this.consommerData.data.force);
|
|
||||||
}
|
|
||||||
await this.actor.manger(this.consommerData.data.sust);
|
|
||||||
await this.actor.boire(this.consommerData.data.desaltere);
|
|
||||||
}
|
|
||||||
|
|
||||||
isAlcool() {
|
|
||||||
return this.consommerData.data.boisson && this.consommerData.data.alcoolise;
|
|
||||||
}
|
|
||||||
|
|
||||||
async apprecierCuisine(qualite) {
|
|
||||||
const jetGoutCuisine = await this.jetGoutCuisine();
|
|
||||||
if (jetGoutCuisine) {
|
|
||||||
await this.actor.jetDeMoral('heureux');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
async consommerPotion() {
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
@ -33,6 +33,31 @@ export class RdDItem extends Item {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
isConsommable(options = { warnIfNot: true }) {
|
||||||
|
const itemData = Misc.data(this);
|
||||||
|
if ((itemData.data.quantite ?? 0) <= 0) {
|
||||||
|
if (options.warnIfNot) {
|
||||||
|
ui.notifications.warn(`Vous n'avez plus de ${itemData.name}.`);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (itemData.type) {
|
||||||
|
case 'nourritureboisson':
|
||||||
|
case 'potion':
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (options.warnIfNot) {
|
||||||
|
ui.notifications.warn(`Impossible de consommer un ${itemData.name}, ce n'est pas commestible.`);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
isAlcool() {
|
||||||
|
const itemData = Misc.data(this);
|
||||||
|
return itemData.type == 'nourritureboisson' && itemData.data.boisson && itemData.data.alcoolise;
|
||||||
|
}
|
||||||
|
|
||||||
async diminuerQuantite(nombre, options = { diminuerQuantite: true }) {
|
async diminuerQuantite(nombre, options = { diminuerQuantite: true }) {
|
||||||
if (!options.diminuerQuantite) return;
|
if (!options.diminuerQuantite) return;
|
||||||
const itemData = Misc.data(this);
|
const itemData = Misc.data(this);
|
||||||
|
@ -47,7 +47,11 @@ export class Misc {
|
|||||||
const parsed = parseInt(value);
|
const parsed = parseInt(value);
|
||||||
return isNaN(parsed) ? 0 : parsed;
|
return isNaN(parsed) ? 0 : parsed;
|
||||||
}
|
}
|
||||||
|
static keepDecimals(num, decimals) {
|
||||||
|
if (decimals<=0 || decimals>6) return num;
|
||||||
|
const decimal = Math.pow(10, parseInt(decimals));
|
||||||
|
return Math.round(num * decimal) / decimal;
|
||||||
|
}
|
||||||
static getFractionHtml(diviseur) {
|
static getFractionHtml(diviseur) {
|
||||||
if (!diviseur || diviseur <= 1) return undefined;
|
if (!diviseur || diviseur <= 1) return undefined;
|
||||||
switch (diviseur || 1) {
|
switch (diviseur || 1) {
|
||||||
|
36
templates/consommer/dialog-nourritureboisson.html
Normal file
36
templates/consommer/dialog-nourritureboisson.html
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
<form class="rdddialog">
|
||||||
|
<div class="flexrow">
|
||||||
|
<label>Quantité de {{item.name}} à {{#if item.data.boisson}}boire{{else}}manger{{/if}}</label>
|
||||||
|
<input class="attribute-value consommer-doses" type="text" name="doses" value="{{choix.doses}}"
|
||||||
|
size="3" min="0" max="{{item.data.quantite}}"
|
||||||
|
data-dtype="Number" />
|
||||||
|
</div>
|
||||||
|
{{#if item.data.sust}}
|
||||||
|
<p>Cette {{#if item.data.boisson}}boisson{{else}}nourriture{{/if}} vous apportera <span
|
||||||
|
class="total-sust">{{totalSust}}</span> de sustantation.</p>
|
||||||
|
{{/if}}
|
||||||
|
{{#if item.data.boisson}}
|
||||||
|
<p>{{#if item.data.alcoolise}}
|
||||||
|
C'est une boisson alcoolisée de force {{item.data.force}}, vous effectuerez un jet d'éthylisme.
|
||||||
|
{{/if}}
|
||||||
|
Cette boisson vous apportera <span class="total-desaltere">{{totalDesaltere}}</span> unités d'eau.
|
||||||
|
</p>
|
||||||
|
{{/if}}
|
||||||
|
{{#if (gt item.data.qualite cuisine.data.niveau)}}
|
||||||
|
<p>La qualité du plat est telle qu'un jet de Goût/Cuisine à {{numberFormat item.data.qualite decimals=0 sign=true}}
|
||||||
|
vous permettra un jet de moral heureux.</p>
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
|
{{#if (lt item.data.qualite 0)}}
|
||||||
|
<p>
|
||||||
|
Pour surmonter l'exotisme, vous devez effectuer un jet de Volonté/Cuisine à
|
||||||
|
{{numberFormat item.data.qualite decimals=0 sign=true}}.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<label>En cas d'échec, voulez-vous vous forcer à manger (et subir un jet de moral en situation
|
||||||
|
malheureuse)?</label>
|
||||||
|
<input class="attribute-value se-forcer" type="checkbox" name="se-forcer" {{#if choix.seForcer}}checked{{/if}} />
|
||||||
|
</p>
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
|
</form>
|
@ -1,39 +0,0 @@
|
|||||||
<form class="rdddialog">
|
|
||||||
<div class="form-group">
|
|
||||||
<label>Quantité de {{name}} à {{#if data.boisson}}boire{{else}}manger{{/if}}</label>
|
|
||||||
<input class="attribute-value consommer-doses" type="text" name="doses" value="{{doses}}" data-dtype="Number" />
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
{{#if data.sust}}
|
|
||||||
<p>
|
|
||||||
Cette {{#if data.boisson}}boisson{{else}}nourriture{{/if}} vous apportera {{data.sust}} de
|
|
||||||
sustantation.
|
|
||||||
</p>
|
|
||||||
{{/if}}
|
|
||||||
{{#if data.boisson}}
|
|
||||||
<p>{{#if data.alcoolise}}
|
|
||||||
C'est une boisson alcoolisée de force {{data.force}}, vous effectuerez un jet d'éthylisme.
|
|
||||||
{{/if}}
|
|
||||||
Cette boisson vous apportera {{data.desaltere}} unités d'eau.
|
|
||||||
</p>
|
|
||||||
{{/if}}
|
|
||||||
{{#if (gt data.qualite cuisine.data.niveau)}}
|
|
||||||
<p>La qualité du plat est telle qu'un jet de Goût/Cuisine à {{numberFormat data.qualite decimals=0 sign=true}}
|
|
||||||
vous permettra un jet de moral heureux.</p>
|
|
||||||
{{/if}}
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{{#if (lt data.qualite 0)}}
|
|
||||||
<div>
|
|
||||||
<p>
|
|
||||||
Pour surmonter l'exotisme, vous devez effectuer un jet de Volonté/Cuisine à {{numberFormat data.qualite decimals=0 sign=true}}.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<label>En cas d'échec, voulez-vous vous forcer à manger (et subir un jet de moral en situation
|
|
||||||
malheureuse)?</label>
|
|
||||||
<input class="attribute-value" type="checkbox" name="se-forcer" />
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
{{/if}}
|
|
||||||
|
|
||||||
</form>
|
|
Loading…
Reference in New Issue
Block a user