Gestion des signes draconiques #455
@ -117,7 +117,7 @@ export class RdDActorEntiteSheet extends ActorSheet {
|
||||
this.render(true);
|
||||
});
|
||||
|
||||
html.find('#encaisser-direct').click(ev => {
|
||||
html.find('.encaisser-direct').click(ev => {
|
||||
this.actor.encaisser();
|
||||
});
|
||||
|
||||
|
@ -257,18 +257,18 @@ export class RdDActorSheet extends ActorSheet {
|
||||
const li = $(ev.currentTarget).parents(".item");
|
||||
RdDUtility.confirmerSuppression(this, li);
|
||||
});
|
||||
html.find('.item-consommer').click(ev => {
|
||||
html.find('.item-action').click(ev => {
|
||||
const li = $(ev.currentTarget).parents(".item");
|
||||
const itemId = li.data("item-id");
|
||||
const item = this.actor.getObjet(itemId);
|
||||
this.actor.consommer(item);
|
||||
this.actor.actionItem(item);
|
||||
});
|
||||
html.find('.subacteur-delete').click(ev => {
|
||||
const li = $(ev.currentTarget).parents(".item");
|
||||
RdDUtility.confirmerSuppressionSubacteur(this, li);
|
||||
});
|
||||
|
||||
html.find('#encaisser-direct').click(ev => {
|
||||
html.find('.encaisser-direct').click(ev => {
|
||||
this.actor.encaisser();
|
||||
});
|
||||
|
||||
@ -416,27 +416,27 @@ export class RdDActorSheet extends ActorSheet {
|
||||
}
|
||||
});
|
||||
// Display TMR, visuualisation
|
||||
html.find('#visu-tmr').click((event) => {
|
||||
html.find('.visu-tmr').click((event) => {
|
||||
this.actor.displayTMR("visu");
|
||||
});
|
||||
|
||||
// Display TMR, normal
|
||||
html.find('#monte-tmr').click((event) => {
|
||||
html.find('.monte-tmr').click((event) => {
|
||||
this.actor.displayTMR("normal");
|
||||
});
|
||||
|
||||
// Display TMR, fast
|
||||
html.find('#monte-tmr-rapide').click((event) => {
|
||||
html.find('.monte-tmr-rapide').click((event) => {
|
||||
this.actor.displayTMR("rapide");
|
||||
});
|
||||
|
||||
html.find('#dormir-une-heure').click((event) => {
|
||||
html.find('.dormir-une-heure').click((event) => {
|
||||
this.actor.dormir(1);
|
||||
});
|
||||
html.find('#dormir-chateau-dormant').click((event) => {
|
||||
html.find('.dormir-chateau-dormant').click((event) => {
|
||||
this.actor.dormirChateauDormant();
|
||||
});
|
||||
html.find('#enlever-tous-effets').click((event) => {
|
||||
html.find('.enlever-tous-effets').click((event) => {
|
||||
this.actor.enleverTousLesEffets();
|
||||
});
|
||||
// Display info about queue
|
||||
|
257
module/actor.js
257
module/actor.js
@ -27,7 +27,6 @@ import { EffetsDraconiques } from "./tmr/effets-draconiques.js";
|
||||
import { Draconique } from "./tmr/draconique.js";
|
||||
import { RdDCarac } from "./rdd-carac.js";
|
||||
import { Monnaie } from "./item-monnaie.js";
|
||||
import { RdDHerbes } from "./rdd-herbes.js";
|
||||
import { DialogConsommer } from "./dialog-consommer.js";
|
||||
import { DialogFabriquerPotion } from "./dialog-fabriquer-potion.js";
|
||||
|
||||
@ -313,19 +312,19 @@ export class RdDActor extends Actor {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async verifierPotionsEnchantees() {
|
||||
let potionsEnchantees = this.filterItemsData( it => it.type == 'potion' && it.data.categorie.toLowerCase().includes('enchante'));
|
||||
for ( let potion of potionsEnchantees) {
|
||||
if ( !potion.prpermanent) {
|
||||
let potionsEnchantees = this.filterItemsData(it => it.type == 'potion' && it.data.isEnchante);
|
||||
for (let potion of potionsEnchantees) {
|
||||
if (!potion.prpermanent) {
|
||||
console.log(potion);
|
||||
let newPr = (potion.data.pr > 0) ? potion.data.pr - 1 : 0;
|
||||
let update = { _id: potion._id, 'data.pr': newPr};
|
||||
let update = { _id: potion._id, 'data.pr': newPr };
|
||||
const updated = await this.updateEmbeddedDocuments('Item', [update]); // Updates one EmbeddedEntity
|
||||
|
||||
let messageData = {
|
||||
pr : newPr,
|
||||
alias : this.name,
|
||||
potionName : potion.name,
|
||||
potionImg : potion.img
|
||||
pr: newPr,
|
||||
alias: this.name,
|
||||
potionName: potion.name,
|
||||
potionImg: potion.img
|
||||
}
|
||||
ChatMessage.create({
|
||||
whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name),
|
||||
@ -380,7 +379,7 @@ export class RdDActor extends Actor {
|
||||
await this._recupereChance();
|
||||
await this.transformerStress();
|
||||
await this.retourSeuilDeReve(message);
|
||||
this.bonusRecuperationPotion= 0; // Reset potion
|
||||
this.bonusRecuperationPotion = 0; // Reset potion
|
||||
await this.retourSust(message);
|
||||
await this.verifierPotionsEnchantees();
|
||||
message.content = `A la fin Chateau Dormant, ${message.content}<br>Un nouveau jour se lève`;
|
||||
@ -404,7 +403,7 @@ export class RdDActor extends Actor {
|
||||
let definition = definitions.find(d => d.type == type);
|
||||
for (let blessure of liste) {
|
||||
if (blessure.jours >= definition.facteur) {
|
||||
let rolled = await this._jetRecuperationConstitution(Misc.toInt(blessure.soins_complets)+this.bonusRecuperationPotion, message);
|
||||
let rolled = await this._jetRecuperationConstitution(Misc.toInt(blessure.soins_complets) + this.bonusRecuperationPotion, message);
|
||||
blessure.soins_complets = 0;
|
||||
if (rolled.isSuccess && this._retrograderBlessure(type, blessure, moindres)) {
|
||||
message.content += ` -- une blessure ${type} cicatrise`;
|
||||
@ -743,7 +742,6 @@ export class RdDActor extends Actor {
|
||||
/* -------------------------------------------- */
|
||||
async updateCreatureCompetence(compName, fieldName, compValue) {
|
||||
let comp = this.getCompetence(compName);
|
||||
//console.log(comp);
|
||||
if (comp) {
|
||||
const update = { _id: comp.id }
|
||||
if (fieldName == "niveau")
|
||||
@ -752,7 +750,6 @@ export class RdDActor extends Actor {
|
||||
update['data.dommages'] = compValue;
|
||||
else
|
||||
update['data.carac_value'] = compValue;
|
||||
//console.log(update);
|
||||
const updated = await this.updateEmbeddedDocuments('Item', [update]); // Updates one EmbeddedEntity
|
||||
}
|
||||
}
|
||||
@ -1610,25 +1607,80 @@ export class RdDActor extends Actor {
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async consommer(item) {
|
||||
DialogConsommer.create(this, item, {
|
||||
html: 'systems/foundryvtt-reve-de-dragon/templates/dialog-consommer-nourriture.html',
|
||||
}, []);
|
||||
async actionItem(item) {
|
||||
if (!item.getActionPrincipale()) return;
|
||||
switch (Misc.data(item).type) {
|
||||
case 'nourritureboisson': return await this.actionNourritureboisson(item);
|
||||
case 'potion': return await this.actionPotion(item);
|
||||
}
|
||||
}
|
||||
|
||||
async manger(sust) {
|
||||
async actionNourritureboisson(item) {
|
||||
const dialog = await DialogConsommer.create(this, item);
|
||||
dialog.render(true);
|
||||
}
|
||||
async actionPotion(item) {
|
||||
return await this.consommerPotion(item)
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
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.getActionPrincipale()) return;
|
||||
await this.apprecierCuisine(item);
|
||||
const sust = Misc.templateData(item).sust;
|
||||
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) {
|
||||
await this.actor.updateCompteurValue('eau', Misc.templateData(this).eau.value + this.consommerData.data.desaltere);
|
||||
/* -------------------------------------------- */
|
||||
async boire(item, doses, options = { diminuerQuantite: true }) {
|
||||
if (!item.getActionPrincipale()) 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 etatGeneral = this.getEtatGeneral({ ethylisme: true });
|
||||
const nbDoses = -Number(actorTplData.compteurs.ethylisme.nb_doses || 0);
|
||||
@ -1643,26 +1695,28 @@ export class RdDActor extends Actor {
|
||||
await this.performEthylisme(rollData);
|
||||
}
|
||||
|
||||
async apprecierCuisine(consommerData) {
|
||||
async apprecierCuisine(item) {
|
||||
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) {
|
||||
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) {
|
||||
await this.jetDeMoral('heureux');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async surmonterExotisme(consommerData) {
|
||||
const qualite = consommerData.data.qualite;
|
||||
async surmonterExotisme(item, choix = {}) {
|
||||
const itemData = Misc.data(item);
|
||||
const qualite = itemData.data.qualite;
|
||||
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 (!consommerData.data.seForcer) {
|
||||
if (!choix.seForcer) {
|
||||
return false;
|
||||
}
|
||||
await this.actor.jetDeMoral('malheureux');
|
||||
await this.jetDeMoral('malheureux');
|
||||
}
|
||||
}
|
||||
return true;
|
||||
@ -2102,7 +2156,7 @@ export class RdDActor extends Actor {
|
||||
caracValue: Number(carac.value),
|
||||
selectedCarac: carac,
|
||||
competence: competence,
|
||||
finalLevel: (competence?.data.niveau ?? 0) + diff,
|
||||
finalLevel: (Misc.templateData(competence)?.niveau ?? 0) + diff,
|
||||
diffLibre: diff,
|
||||
showDice: true,
|
||||
show: { title: options?.title ?? '' }
|
||||
@ -2320,7 +2374,7 @@ export class RdDActor extends Actor {
|
||||
"cout": artData.exotismeFinal < 0 ? 0 : artData.qualiteFinale * 0.01
|
||||
}
|
||||
};
|
||||
if (artData.ajouterEquipement){
|
||||
if (artData.ajouterEquipement) {
|
||||
await this.createEmbeddedDocuments('Item', [platCuisine]);
|
||||
ui.notifications.info(`${platCuisine.data.quantite} rations de ${platCuisine.name} ont été ajoutés à votre équipement`);
|
||||
}
|
||||
@ -3187,7 +3241,7 @@ export class RdDActor extends Actor {
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async buildPotionGuerisonList( pointsGuerison) {
|
||||
async buildPotionGuerisonList(pointsGuerison) {
|
||||
let pointsGuerisonInitial = pointsGuerison;
|
||||
let myData = Misc.templateData(this);
|
||||
const blessures = duplicate(myData.blessures);
|
||||
@ -3195,32 +3249,32 @@ export class RdDActor extends Actor {
|
||||
|
||||
console.log(blessures);
|
||||
for (let critique of blessures.critiques.liste) {
|
||||
if (critique.active && pointsGuerison >= 6 ) {
|
||||
if (critique.active && pointsGuerison >= 6) {
|
||||
pointsGuerison -= 6;
|
||||
critique.active = false;
|
||||
guerisonData.list.push( "1 Blessure Critique (6 points)");
|
||||
guerisonData.list.push("1 Blessure Critique (6 points)");
|
||||
}
|
||||
}
|
||||
for (let grave of blessures.graves.liste) {
|
||||
if (grave.active && pointsGuerison >= 4 ) {
|
||||
if (grave.active && pointsGuerison >= 4) {
|
||||
pointsGuerison -= 4;
|
||||
grave.active = false;
|
||||
guerisonData.list.push( "1 Blessure Grave (4 points)");
|
||||
guerisonData.list.push("1 Blessure Grave (4 points)");
|
||||
}
|
||||
}
|
||||
for (let legere of blessures.legeres.liste) {
|
||||
if (legere.active && pointsGuerison >= 2 ) {
|
||||
if (legere.active && pointsGuerison >= 2) {
|
||||
pointsGuerison -= 2;
|
||||
legere.active = false;
|
||||
guerisonData.list.push( "1 Blessure Légère (2 points)");
|
||||
guerisonData.list.push("1 Blessure Légère (2 points)");
|
||||
}
|
||||
}
|
||||
await this.update({ "data.blessures": blessures });
|
||||
|
||||
let pvManquants = myData.sante.vie.max - myData.sante.vie.value;
|
||||
let pvSoignees = Math.min(pvManquants, Math.floor(pointsGuerison / 2 ));
|
||||
pointsGuerison -= pvSoignees*2;
|
||||
guerisonData.list.push( pvSoignees + " Points de Vie soignés");
|
||||
let pvSoignees = Math.min(pvManquants, Math.floor(pointsGuerison / 2));
|
||||
pointsGuerison -= pvSoignees * 2;
|
||||
guerisonData.list.push(pvSoignees + " Points de Vie soignés");
|
||||
await this.santeIncDec('vie', +pvSoignees, false);
|
||||
guerisonData.pointsConsommes = pointsGuerisonInitial - pointsGuerison;
|
||||
|
||||
@ -3230,34 +3284,30 @@ export class RdDActor extends Actor {
|
||||
/* -------------------------------------------- */
|
||||
async consommerPotionSoin(potionData) {
|
||||
potionData.alias = this.name;
|
||||
potionData.supprimer = true;
|
||||
|
||||
if (potionData.data.categorie.includes('Enchante')) {
|
||||
potionData.pointsGuerison = RdDHerbes.calculePointsGuerison( potionData.data);
|
||||
potionData.enchanteTexte = "enchantée";
|
||||
potionData.isEnchante = true;
|
||||
if (potionData.data.isEnchante) {
|
||||
ChatMessage.create({
|
||||
whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name),
|
||||
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)
|
||||
});
|
||||
// Gestion de la résistance:
|
||||
let rolled = await RdDResolutionTable.roll(this.getReveActuel(), -8 );
|
||||
let rolled = await RdDResolutionTable.roll(this.getReveActuel(), -8);
|
||||
potionData.reussiteReve = false;
|
||||
if (!rolled.isSuccess) {
|
||||
await this.reveActuelIncDec(-1);
|
||||
potionData.guerisonData = await this.buildPotionGuerisonList(potionData.pointsGuerison);
|
||||
potionData.guerisonData = await this.buildPotionGuerisonList(potionData.data.puissance);
|
||||
potionData.guerisonMinutes = potionData.guerisonData.pointsConsommes * 5;
|
||||
potionData.reussiteReve = true;
|
||||
}
|
||||
ChatMessage.create({
|
||||
whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name),
|
||||
content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-appliquer-potion-soin.html`, potionData )
|
||||
content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-appliquer-potion-soin.html`, potionData)
|
||||
});
|
||||
} else {
|
||||
potionData.enchanteTexte = "";
|
||||
potionData.isEnchante = false;
|
||||
ChatMessage.create({
|
||||
whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name),
|
||||
content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-appliquer-potion-soin.html`, potionData )
|
||||
content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-appliquer-potion-soin.html`, potionData)
|
||||
});
|
||||
this.bonusRecuperationPotion = potionData.data.herbeBonus;
|
||||
}
|
||||
@ -3266,29 +3316,27 @@ export class RdDActor extends Actor {
|
||||
/* -------------------------------------------- */
|
||||
async consommerPotionRepos(potionData) {
|
||||
potionData.alias = this.name;
|
||||
potionData.supprimer = true;
|
||||
|
||||
if (potionData.data.categorie.includes('Enchante')) {
|
||||
potionData.casesRepos = RdDHerbes.calculePointsRepos( potionData.data);
|
||||
potionData.enchanteTexte = "enchantée";
|
||||
potionData.isEnchante = true;
|
||||
if (potionData.data.isEnchante) {
|
||||
ChatMessage.create({
|
||||
whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name),
|
||||
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)
|
||||
});
|
||||
// Gestion de la résistance:
|
||||
let rolled = await RdDResolutionTable.roll(this.getReveActuel(), -8 );
|
||||
let rolled = await RdDResolutionTable.roll(this.getReveActuel(), -8);
|
||||
potionData.reussiteReve = false;
|
||||
if (!rolled.isSuccess) {
|
||||
await this.reveActuelIncDec(-1);
|
||||
let fatigueActuelle = this.getFatigueActuelle();
|
||||
potionData.caseFatigueReel = (fatigueActuelle >= potionData.casesRepos) ? potionData.casesRepos : fatigueActuelle;
|
||||
potionData.caseFatigueReel = Math.min(fatigueActuelle, potionData.data.puissance);
|
||||
potionData.guerisonDureeUnite = (potionData.data.reposalchimique) ? "rounds" : "minutes";
|
||||
potionData.guerisonDureeValue = (potionData.data.reposalchimique) ? potionData.caseFatigueReel : potionData.caseFatigueReel*5;
|
||||
potionData.guerisonDureeValue = (potionData.data.reposalchimique) ? potionData.caseFatigueReel : potionData.caseFatigueReel * 5;
|
||||
potionData.reussiteReve = true;
|
||||
potionData.aphasiePermanente = false;
|
||||
if ( potionData.data.reposalchimique ) {
|
||||
let chanceAphasie = new Roll("1d100").evaluate({async : false} ).total;
|
||||
if ( chanceAphasie <= potionData.data.pr ) {
|
||||
if (potionData.data.reposalchimique) {
|
||||
let chanceAphasie = new Roll("1d100").evaluate({ async: false }).total;
|
||||
if (chanceAphasie <= potionData.data.pr) {
|
||||
potionData.aphasiePermanente = true;
|
||||
}
|
||||
}
|
||||
@ -3296,89 +3344,85 @@ export class RdDActor extends Actor {
|
||||
}
|
||||
ChatMessage.create({
|
||||
whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name),
|
||||
content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-appliquer-potion-repos.html`, potionData )
|
||||
content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-appliquer-potion-repos.html`, potionData)
|
||||
});
|
||||
} else {
|
||||
potionData.enchanteTexte = "";
|
||||
potionData.isEnchante = false;
|
||||
ChatMessage.create({
|
||||
whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name),
|
||||
content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-appliquer-potion-repos.html`, potionData )
|
||||
content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-appliquer-potion-repos.html`, potionData)
|
||||
});
|
||||
this.bonusRepos = potionData.data.herbeBonus;
|
||||
}
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
dialogFabriquerPotion( herbe ) {
|
||||
dialogFabriquerPotion(herbe) {
|
||||
DialogFabriquerPotion.create(this, herbe, {
|
||||
html: 'systems/foundryvtt-reve-de-dragon/templates/dialog-fabriquer-potion-base.html',
|
||||
}, []);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async fabriquerPotion( potionData ) {
|
||||
async fabriquerPotion(herbeData) {
|
||||
let newPotion = {
|
||||
name: `Potion de ${potionData.data.categorie} (${potionData.name})`, type: 'potion',
|
||||
name: `Potion de ${herbeData.data.categorie} (${herbeData.name})`, type: 'potion',
|
||||
img: "systems/foundryvtt-reve-de-dragon/icons/objets/fiole_verre.webp",
|
||||
data: { quantite: 1, valeur_deniers: 1, encombrement: 0.01,
|
||||
categorie: potionData.data.categorie,
|
||||
herbe: potionData.name,
|
||||
rarete: potionData.data.rarete,
|
||||
herbebrins: potionData.nbBrins,
|
||||
description: "" }
|
||||
data: {
|
||||
quantite: 1, valeur_deniers: 1, encombrement: 0.01,
|
||||
categorie: herbeData.data.categorie,
|
||||
herbe: herbeData.name,
|
||||
rarete: herbeData.data.rarete,
|
||||
herbebrins: herbeData.nbBrins,
|
||||
description: ""
|
||||
}
|
||||
}
|
||||
await this.createEmbeddedDocuments('Item', [newPotion], { renderSheet: true });
|
||||
|
||||
let newQuantite = potionData.data.quantite - potionData.nbBrins;
|
||||
let newQuantite = herbeData.data.quantite - herbeData.nbBrins;
|
||||
let messageData = {
|
||||
alias: this.name,
|
||||
categorie: potionData.data.categorie,
|
||||
herbe: potionData.name,
|
||||
nbBrinsPotion: potionData.nbBrins,
|
||||
categorie: herbeData.data.categorie,
|
||||
herbe: herbeData.name,
|
||||
nbBrinsPotion: herbeData.nbBrins,
|
||||
nbBrinsReste: newQuantite
|
||||
}
|
||||
if (newQuantite == 0 ) {
|
||||
await this.deleteEmbeddedDocuments('Item', [ potionData._id ] );
|
||||
} else {
|
||||
let update = { _id: potionData._id, 'data.quantite': newQuantite};
|
||||
await this.updateEmbeddedDocuments('Item', [update]); // Updates one EmbeddedEntity
|
||||
}
|
||||
this.diminuerQuantiteObjet(herbeData._id, herbeData.nbBrins);
|
||||
|
||||
ChatMessage.create({
|
||||
whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name),
|
||||
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)
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
async diminuerQuantiteObjet(id, nb, options = { supprimerSiZero: false }) {
|
||||
const item = this.getObjet(id);
|
||||
if (item){
|
||||
await item.diminuerQuantite(nb, options);
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async consommerPotionGenerique( potionData ) {
|
||||
async consommerPotionGenerique(potionData) {
|
||||
potionData.alias = this.name;
|
||||
|
||||
if (potionData.data.categorie.includes('Enchante')) {
|
||||
potionData.enchanteTexte = "enchantée";
|
||||
potionData.isEnchante = true;
|
||||
} else {
|
||||
potionData.enchanteTexte = "";
|
||||
potionData.isEnchante = false;
|
||||
}
|
||||
ChatMessage.create({
|
||||
whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name),
|
||||
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)
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async consommerPotion( potion ) {
|
||||
async consommerPotion(potion) {
|
||||
const potionData = Misc.data(potion);
|
||||
|
||||
if ( potionData.data.categorie.includes('Soin')) {
|
||||
this.consommerPotionSoin( potionData);
|
||||
} else if( potionData.data.categorie.includes('Repos')) {
|
||||
if (potionData.data.categorie.includes('Soin')) {
|
||||
this.consommerPotionSoin(potionData);
|
||||
} else if (potionData.data.categorie.includes('Repos')) {
|
||||
this.consommerPotionRepos(potionData);
|
||||
} else {
|
||||
this.consommerPotionGenerique(potionData);
|
||||
}
|
||||
await this.deleteEmbeddedDocuments('Item', [ potion.id ] );
|
||||
this.diminuerQuantiteObjet(potion.id, 1, { supprimerSiZero: potionData.supprimer });
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@ -3453,8 +3497,10 @@ export class RdDActor extends Actor {
|
||||
const ids = Array.from(this.effects?.values())
|
||||
.filter(it => it.data.flags.core?.statusId == id)
|
||||
.map(it => it.id);
|
||||
if (ids.length > 0) {
|
||||
this.deleteEmbeddedDocuments('ActiveEffect', ids);
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
deleteStatusEffect(effect) {
|
||||
@ -3472,8 +3518,9 @@ export class RdDActor extends Actor {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async addStatusEffect(statusEffect) {
|
||||
const effet = duplicate(statusEffect);
|
||||
const effet = Misc.data(statusEffect);
|
||||
this.deleteStatusEffectById(effet.id);
|
||||
effet.flags = effet.flags ?? { core: {} };
|
||||
effet.flags.core.statusId = effet.id;
|
||||
await this.createEmbeddedDocuments('ActiveEffect', [effet]);
|
||||
}
|
||||
|
@ -3,56 +3,24 @@ import { Misc } from "./misc.js";
|
||||
|
||||
export class DialogConsommer extends Dialog {
|
||||
|
||||
static async create(actor, item, dialogConfig) {
|
||||
let consommerData = DialogConsommer.prepareData(actor, item);
|
||||
if (!consommerData) {
|
||||
ui.notifications.warn(`Impossible de consommer un ${consommerData.name}, ce n'est pas de la nourriture, une boisson ou une potion`);
|
||||
return;
|
||||
static async create(actor, item, template = undefined, options = {}) {
|
||||
const consommerData = DialogConsommer.prepareData(actor, item, options);
|
||||
const html = await renderTemplate(template ?? `systems/foundryvtt-reve-de-dragon/templates/consommer/dialog-${Misc.data(item).type}.html`, consommerData);
|
||||
return new DialogConsommer(actor, item, consommerData, html, options)
|
||||
}
|
||||
|
||||
constructor(actor, item, consommerData, html, options = {}) {
|
||||
mergeObject(options, { classes: ["dialogconsommer"], width: 600, height: 500, 'z-index': 99999 }, { overwrite: false })
|
||||
|
||||
let conf = {
|
||||
title: consommerData.title,
|
||||
content: await renderTemplate(dialogConfig.html, consommerData),
|
||||
content: html,
|
||||
default: consommerData.buttonName,
|
||||
};
|
||||
|
||||
|
||||
let options = { classes: ["dialogconsommer"], width: 600, height: 500, 'z-index': 99999 };
|
||||
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 = {
|
||||
buttons: {
|
||||
[consommerData.buttonName]: {
|
||||
label: consommerData.buttonName, callback: it => {
|
||||
this.consommer();
|
||||
this.actor.consommer(this.item, this.consommerData.choix);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
@ -60,66 +28,55 @@ export class DialogConsommer extends Dialog {
|
||||
super(conf, options);
|
||||
|
||||
this.actor = actor;
|
||||
this.item = item;
|
||||
this.consommerData = consommerData;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
activateListeners(html) {
|
||||
super.activateListeners(html);
|
||||
|
||||
function updateConsommerData(rollData) {
|
||||
|
||||
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));
|
||||
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':
|
||||
consommerData.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) {
|
||||
super.activateListeners(html);
|
||||
html.find(".se-forcer").change(event => {
|
||||
this.consommerData.choix.seForcer = event.currentTarget.checked;
|
||||
});
|
||||
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() {
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -32,7 +32,7 @@ export class RdDItemSheet extends ItemSheet {
|
||||
{
|
||||
class: "post",
|
||||
icon: "fas fa-comment",
|
||||
onclick: ev => new RdDItem(Misc.data(this.item)).postItem()
|
||||
onclick: ev => this.item.postItem()
|
||||
})
|
||||
return buttons
|
||||
}
|
||||
|
321
module/item.js
321
module/item.js
@ -1,42 +1,115 @@
|
||||
import { Grammar } from "./grammar.js";
|
||||
import { Misc } from "./misc.js";
|
||||
import { RdDUtility } from "./rdd-utility.js";
|
||||
|
||||
const typesObjetsEquipement = ["objet", "arme", "armure", "conteneur", "herbe", "ingredient", "livre", "potion", "munition", "nourritureboisson", "monnaie"];
|
||||
const typesObjetsOeuvres = ["oeuvre", "recettecuisine", "musique", "chant", "danse", "jeu"];
|
||||
const encBrin = 0.00005;
|
||||
/* -------------------------------------------- */
|
||||
export class RdDItem extends Item {
|
||||
|
||||
static getTypeObjetsEquipement() {
|
||||
return typesObjetsEquipement;
|
||||
}
|
||||
|
||||
static getTypesOeuvres() {
|
||||
return typesObjetsOeuvres;
|
||||
}
|
||||
|
||||
prepareDerivedData() {
|
||||
super.prepareDerivedData();
|
||||
const itemData = this.data;
|
||||
const itemData = Misc.data(this);
|
||||
if (RdDItem.getTypeObjetsEquipement().includes(itemData.type)) {
|
||||
this._calculsEquipement(itemData);
|
||||
this._calculsEquipement();
|
||||
}
|
||||
if (itemData.type == 'potion') {
|
||||
this.prepareDataPotion()
|
||||
}
|
||||
itemData.data.actionPrincipale = this.getActionPrincipale({ warnIfNot: false });
|
||||
|
||||
}
|
||||
|
||||
prepareDataPotion() {
|
||||
const tplData = Misc.templateData(this);
|
||||
const categorie = Grammar.toLowerCaseNoAccent(tplData.categorie);
|
||||
tplData.isEnchante = categorie.includes('enchante');
|
||||
if (tplData.isEnchante) {
|
||||
if (categorie.includes('soin') || categorie.includes('repos')) {
|
||||
tplData.puissance = tplData.herbebonus * tplData.pr;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
_calculsEquipement(itemData) {
|
||||
const tplData = itemData.data;
|
||||
const quantite = itemData.type == 'conteneur' ? 1 : (tplData.quantite ?? 0);
|
||||
if (tplData.encombrement != undefined) {
|
||||
tplData.encTotal = Math.max(tplData.encombrement, 0) * quantite;
|
||||
_calculsEquipement() {
|
||||
const tplData = Misc.templateData(this);
|
||||
const quantite = Misc.data(this).type == 'conteneur' ? 1 : (tplData.quantite ?? 0);
|
||||
const enc = this.getEnc();
|
||||
if (enc != undefined) {
|
||||
tplData.encTotal = Math.max(enc, 0) * quantite;
|
||||
}
|
||||
if (tplData.cout != undefined) {
|
||||
tplData.prixTotal = Math.max(tplData.cout, 0) * quantite;
|
||||
}
|
||||
}
|
||||
|
||||
getEnc() {
|
||||
const itemData = Misc.data(this);
|
||||
switch (itemData.type) {
|
||||
case 'herbe':
|
||||
return encBrin;
|
||||
}
|
||||
return itemData.data.encombrement
|
||||
}
|
||||
|
||||
getActionPrincipale(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 undefined;
|
||||
}
|
||||
switch (itemData.type) {
|
||||
case 'nourritureboisson': return itemData.data.boisson ? 'Boire' : 'Manger';
|
||||
case 'potion': return 'Boire';
|
||||
}
|
||||
if (options.warnIfNot) {
|
||||
ui.notifications.warn(`Impossible d'utilise un ${itemData.name}, aucune action associée définie.`);
|
||||
}
|
||||
|
||||
return undefined;
|
||||
}
|
||||
|
||||
isAlcool() {
|
||||
const itemData = Misc.data(this);
|
||||
return itemData.type == 'nourritureboisson' && itemData.data.boisson && itemData.data.alcoolise;
|
||||
}
|
||||
|
||||
async diminuerQuantite(nombre, options = { diminuerQuantite: true, supprimerSiZero: false }) {
|
||||
if (options.diminuerQuantite == false) return;
|
||||
const itemData = Misc.data(this);
|
||||
const quantite = itemData.data.quantite;
|
||||
if (quantite != undefined) {
|
||||
const reste = Math.max(quantite - nombre, 0);
|
||||
|
||||
if (options.supprimerSiZero && reste == 0) {
|
||||
ui.notifications.notify(`${itemData.name} supprimé de votre équipement`);
|
||||
await this.delete();
|
||||
}
|
||||
else {
|
||||
ui.notifications.notify(`Quantité de ${itemData.name} réduite de ${nombre}.${reste == 0
|
||||
? "Il ne vous en reste plus, vous pouvez le supprimer de votre équipement, ou trouver un moyen de vous en procurer."
|
||||
: ""}`);
|
||||
await this.update({ "data.quantite": reste });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async postItem() {
|
||||
console.log(this);
|
||||
const properties = this[`_${this.data.type}ChatData`]();
|
||||
const itemData = Misc.data(this);
|
||||
let chatData = duplicate(itemData);
|
||||
let chatData = duplicate(Misc.data(this));
|
||||
const properties = this[`_${chatData.type}ChatData`]();
|
||||
chatData["properties"] = properties
|
||||
|
||||
//Check if the posted item should have availability/pay buttons
|
||||
@ -45,8 +118,7 @@ export class RdDItem extends Item {
|
||||
|
||||
let dialogResult = [-1, -1]; // dialogResult[0] = quantité, dialogResult[1] = prix
|
||||
if (chatData.hasPrice) {
|
||||
let sols = chatData.data.cout;
|
||||
chatData.data.cout_deniers = Math.floor(sols * 100);
|
||||
chatData.data.cout_deniers = Math.floor(chatData.data.cout * 100);
|
||||
dialogResult = await new Promise((resolve, reject) => {
|
||||
new Dialog({
|
||||
content:
|
||||
@ -66,7 +138,7 @@ export class RdDItem extends Item {
|
||||
post: {
|
||||
label: "Soumettre",
|
||||
callback: (dlg) => {
|
||||
resolve([dlg.find('[name="quantity"]').val(), dlg.find('[name="price"]').val()])
|
||||
resolve([Number(dlg.find('[name="quantity"]').val()), Number(dlg.find('[name="price"]').val())])
|
||||
}
|
||||
},
|
||||
}
|
||||
@ -74,28 +146,29 @@ export class RdDItem extends Item {
|
||||
})
|
||||
}
|
||||
|
||||
if (dialogResult[0] > 0) {
|
||||
let quantiteEnvoi = Math.min(dialogResult[0], chatData.data.quantite);
|
||||
const prixTotal = dialogResult[1];
|
||||
if (quantiteEnvoi > 0) {
|
||||
if (this.isOwned) {
|
||||
if (itemData.data.quantite == 0)
|
||||
dialogResult[0] = -1
|
||||
else if (itemData.data.quantite < dialogResult[0]) {
|
||||
dialogResult[0] = itemData.data.quantite;
|
||||
ui.notifications.notify(`Impossible de poster plus que ce que vous avez. La quantité à été réduite à ${dialogResult[0]}.`)
|
||||
this.update({ "data.quantite": 0 })
|
||||
if (chatData.data.quantite == 0) {
|
||||
quantiteEnvoi = -1
|
||||
}
|
||||
else {
|
||||
ui.notifications.notify(`Quantité réduite par ${dialogResult[0]}.`)
|
||||
this.update({ "data.quantite": itemData.data.quantite - dialogResult[0] })
|
||||
else if (quantiteEnvoi > chatData.data.quantite) {
|
||||
quantiteEnvoi = chatData.data.quantite;
|
||||
ui.notifications.notify(`Impossible de poster plus que ce que vous avez. La quantité à été réduite à ${quantiteEnvoi}.`)
|
||||
}
|
||||
if (quantiteEnvoi > 0) {
|
||||
this.diminuerQuantite(quantiteEnvoi);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (chatData.hasPrice) {
|
||||
if (dialogResult[0] > 0)
|
||||
chatData.postQuantity = Number(dialogResult[0]);
|
||||
if (dialogResult[1] > 0) {
|
||||
chatData.postPrice = dialogResult[1];
|
||||
chatData.data.cout_deniers = Math.floor(dialogResult[1] * 100); // Mise à jour cout en deniers
|
||||
if (quantiteEnvoi > 0)
|
||||
chatData.postQuantity = Number(quantiteEnvoi);
|
||||
if (prixTotal > 0) {
|
||||
chatData.postPrice = prixTotal;
|
||||
chatData.data.cout_deniers = Math.floor(prixTotal * 100); // Mise à jour cout en deniers
|
||||
}
|
||||
chatData.finalPrice = Number(chatData.postPrice) * Number(chatData.postQuantity);
|
||||
chatData.data.cout_deniers_total = chatData.data.cout_deniers * Number(chatData.postQuantity);
|
||||
@ -110,7 +183,7 @@ export class RdDItem extends Item {
|
||||
chatData.jsondata = JSON.stringify(
|
||||
{
|
||||
compendium: "postedItem",
|
||||
payload: itemData,
|
||||
payload: chatData,
|
||||
});
|
||||
|
||||
renderTemplate('systems/foundryvtt-reve-de-dragon/templates/post-item.html', chatData).then(html => {
|
||||
@ -119,219 +192,237 @@ export class RdDItem extends Item {
|
||||
});
|
||||
}
|
||||
|
||||
static propertyIfDefined(name, val, condition) {
|
||||
return condition ? [`<b>${name}</b>: ${val}`] : [];
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
_objetChatData() {
|
||||
const rddData = Misc.data(this).data;
|
||||
const tplData = Misc.templateData(this);
|
||||
let properties = [
|
||||
`<b>Encombrement</b>: ${rddData.encombrement}`
|
||||
`<b>Encombrement</b>: ${tplData.encombrement}`
|
||||
]
|
||||
return properties;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
_nourritureboissonChatData() {
|
||||
const tplData = Misc.templateData(this);
|
||||
let properties = [].concat(
|
||||
RdDItem.propertyIfDefined('Sustentation', tplData.sust, tplData.sust > 0),
|
||||
RdDItem.propertyIfDefined('Désaltère', tplData.desaltere, tplData.boisson),
|
||||
RdDItem.propertyIfDefined('Force alcool', tplData.force, tplData.boisson && tplData.alcoolise),
|
||||
RdDItem.propertyIfDefined('Exotisme', tplData.qualite, tplData.qualite < 0),
|
||||
RdDItem.propertyIfDefined('Qualité', tplData.qualite, tplData.qualite > 0),
|
||||
[`<b>Encombrement</b>: ${tplData.encombrement}`],
|
||||
);
|
||||
return properties;
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
_armeChatData() {
|
||||
const rddData = Misc.data(this).data;
|
||||
const tplData = Misc.templateData(this);
|
||||
let properties = [
|
||||
`<b>Compétence</b>: ${rddData.competence}`,
|
||||
`<b>Dommages</b>: ${rddData.dommages}`,
|
||||
`<b>Force minimum</b>: ${rddData.force}`,
|
||||
`<b>Resistance</b>: ${rddData.resistance}`,
|
||||
`<b>Encombrement</b>: ${rddData.encombrement}`
|
||||
`<b>Compétence</b>: ${tplData.competence}`,
|
||||
`<b>Dommages</b>: ${tplData.dommages}`,
|
||||
`<b>Force minimum</b>: ${tplData.force}`,
|
||||
`<b>Resistance</b>: ${tplData.resistance}`,
|
||||
`<b>Encombrement</b>: ${tplData.encombrement}`
|
||||
]
|
||||
return properties;
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
_conteneurChatData() {
|
||||
const rddData = Misc.data(this).data;
|
||||
const tplData = Misc.templateData(this);
|
||||
let properties = [
|
||||
`<b>Capacité</b>: ${rddData.capacite} Enc.`,
|
||||
`<b>Encombrement</b>: ${rddData.encombrement}`
|
||||
`<b>Capacité</b>: ${tplData.capacite} Enc.`,
|
||||
`<b>Encombrement</b>: ${tplData.encombrement}`
|
||||
]
|
||||
return properties;
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
_munitionChatData() {
|
||||
const rddData = Misc.data(this).data;
|
||||
const tplData = Misc.templateData(this);
|
||||
let properties = [
|
||||
`<b>Encombrement</b>: ${rddData.encombrement}`
|
||||
`<b>Encombrement</b>: ${tplData.encombrement}`
|
||||
]
|
||||
return properties;
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
_armureChatData() {
|
||||
const rddData = Misc.data(this).data;
|
||||
const tplData = Misc.templateData(this);
|
||||
let properties = [
|
||||
`<b>Protection</b>: ${rddData.protection}`,
|
||||
`<b>Détérioration</b>: ${rddData.deterioration}`,
|
||||
`<b>Malus armure</b>: ${rddData.malus}`,
|
||||
`<b>Encombrement</b>: ${rddData.encombrement}`
|
||||
`<b>Protection</b>: ${tplData.protection}`,
|
||||
`<b>Détérioration</b>: ${tplData.deterioration}`,
|
||||
`<b>Malus armure</b>: ${tplData.malus}`,
|
||||
`<b>Encombrement</b>: ${tplData.encombrement}`
|
||||
]
|
||||
return properties;
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
_competenceChatData() {
|
||||
const rddData = Misc.data(this).data;
|
||||
const tplData = Misc.templateData(this);
|
||||
let properties = [
|
||||
`<b>Catégorie</b>: ${rddData.categorie}`,
|
||||
`<b>Niveau</b>: ${rddData.niveau}`,
|
||||
`<b>Caractéristique par défaut</b>: ${rddData.carac_defaut}`,
|
||||
`<b>XP</b>: ${rddData.xp}`
|
||||
`<b>Catégorie</b>: ${tplData.categorie}`,
|
||||
`<b>Niveau</b>: ${tplData.niveau}`,
|
||||
`<b>Caractéristique par défaut</b>: ${tplData.carac_defaut}`,
|
||||
`<b>XP</b>: ${tplData.xp}`
|
||||
]
|
||||
return properties;
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
_competencecreatureChatData() {
|
||||
const rddData = Misc.data(this).data;
|
||||
const tplData = Misc.templateData(this);
|
||||
let properties = [
|
||||
`<b>Catégorie</b>: ${rddData.categorie}`,
|
||||
`<b>Niveau</b>: ${rddData.niveau}`,
|
||||
`<b>Caractéristique</b>: ${rddData.carac_value}`,
|
||||
`<b>XP</b>: ${rddData.xp}`
|
||||
`<b>Catégorie</b>: ${tplData.categorie}`,
|
||||
`<b>Niveau</b>: ${tplData.niveau}`,
|
||||
`<b>Caractéristique</b>: ${tplData.carac_value}`,
|
||||
`<b>XP</b>: ${tplData.xp}`
|
||||
]
|
||||
return properties;
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
_sortChatData() {
|
||||
const rddData = Misc.data(this).data;
|
||||
const tplData = Misc.templateData(this);
|
||||
let properties = [
|
||||
`<b>Draconic</b>: ${rddData.draconic}`,
|
||||
`<b>Difficulté</b>: ${rddData.difficulte}`,
|
||||
`<b>Case TMR</b>: ${rddData.caseTMR}`,
|
||||
`<b>Points de Rêve</b>: ${rddData.ptreve}`
|
||||
`<b>Draconic</b>: ${tplData.draconic}`,
|
||||
`<b>Difficulté</b>: ${tplData.difficulte}`,
|
||||
`<b>Case TMR</b>: ${tplData.caseTMR}`,
|
||||
`<b>Points de Rêve</b>: ${tplData.ptreve}`
|
||||
]
|
||||
return properties;
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
_herbeChatData() {
|
||||
const rddData = Misc.data(this).data;
|
||||
const tplData = Misc.templateData(this);
|
||||
let properties = [
|
||||
`<b>Milieu</b>: ${rddData.milieu}`,
|
||||
`<b>Rareté</b>: ${rddData.rarete}`,
|
||||
`<b>Catégorie</b>: ${rddData.categorie}`,
|
||||
`<b>Milieu</b>: ${tplData.milieu}`,
|
||||
`<b>Rareté</b>: ${tplData.rarete}`,
|
||||
`<b>Catégorie</b>: ${tplData.categorie}`,
|
||||
]
|
||||
return properties;
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
_ingredientChatData() {
|
||||
const rddData = Misc.data(this).data;
|
||||
const tplData = Misc.templateData(this);
|
||||
let properties = [
|
||||
`<b>Milieu</b>: ${rddData.milieu}`,
|
||||
`<b>Rareté</b>: ${rddData.rarete}`,
|
||||
`<b>Catégorie</b>: ${rddData.categorie}`,
|
||||
`<b>Milieu</b>: ${tplData.milieu}`,
|
||||
`<b>Rareté</b>: ${tplData.rarete}`,
|
||||
`<b>Catégorie</b>: ${tplData.categorie}`,
|
||||
]
|
||||
return properties;
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
_tacheChatData() {
|
||||
const rddData = Misc.data(this).data;
|
||||
const tplData = Misc.templateData(this);
|
||||
let properties = [
|
||||
`<b>Caractéristique</b>: ${rddData.carac}`,
|
||||
`<b>Compétence</b>: ${rddData.competence}`,
|
||||
`<b>Périodicité</b>: ${rddData.periodicite}`,
|
||||
`<b>Fatigue</b>: ${rddData.fatigue}`,
|
||||
`<b>Difficulté</b>: ${rddData.difficulte}`,
|
||||
`<b>Points de Tâche</b>: ${rddData.points_de_tache}`,
|
||||
`<b>Points de Tâche atteints</b>: ${rddData.points_de_tache_courant}`
|
||||
`<b>Caractéristique</b>: ${tplData.carac}`,
|
||||
`<b>Compétence</b>: ${tplData.competence}`,
|
||||
`<b>Périodicité</b>: ${tplData.periodicite}`,
|
||||
`<b>Fatigue</b>: ${tplData.fatigue}`,
|
||||
`<b>Difficulté</b>: ${tplData.difficulte}`,
|
||||
`<b>Points de Tâche</b>: ${tplData.points_de_tache}`,
|
||||
`<b>Points de Tâche atteints</b>: ${tplData.points_de_tache_courant}`
|
||||
]
|
||||
return properties;
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
_livreChatData() {
|
||||
const rddData = Misc.data(this).data;
|
||||
const tplData = Misc.templateData(this);
|
||||
let properties = [
|
||||
`<b>Compétence</b>: ${rddData.competence}`,
|
||||
`<b>Auteur</b>: ${rddData.auteur}`,
|
||||
`<b>Difficulté</b>: ${rddData.difficulte}`,
|
||||
`<b>Points de Tâche</b>: ${rddData.points_de_tache}`,
|
||||
`<b>Encombrement</b>: ${rddData.encombrement}`
|
||||
`<b>Compétence</b>: ${tplData.competence}`,
|
||||
`<b>Auteur</b>: ${tplData.auteur}`,
|
||||
`<b>Difficulté</b>: ${tplData.difficulte}`,
|
||||
`<b>Points de Tâche</b>: ${tplData.points_de_tache}`,
|
||||
`<b>Encombrement</b>: ${tplData.encombrement}`
|
||||
]
|
||||
return properties;
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
_potionChatData() {
|
||||
const rddData = Misc.data(this).data;
|
||||
const tplData = Misc.templateData(this);
|
||||
let properties = [
|
||||
`<b>Rareté</b>: ${rddData.rarete}`,
|
||||
`<b>Catégorie</b>: ${rddData.categorie}`,
|
||||
`<b>Encombrement</b>: ${rddData.encombrement}`,
|
||||
`<b>Rareté</b>: ${tplData.rarete}`,
|
||||
`<b>Catégorie</b>: ${tplData.categorie}`,
|
||||
`<b>Encombrement</b>: ${tplData.encombrement}`,
|
||||
]
|
||||
return properties;
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
_queueChatData() {
|
||||
const rddData = Misc.data(this).data;
|
||||
const tplData = Misc.templateData(this);
|
||||
let properties = [
|
||||
`<b>Refoulement</b>: ${rddData.refoulement}`
|
||||
`<b>Refoulement</b>: ${tplData.refoulement}`
|
||||
]
|
||||
return properties;
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
_ombreChatData() {
|
||||
const rddData = Misc.data(this).data;
|
||||
const tplData = Misc.templateData(this);
|
||||
let properties = [
|
||||
`<b>Refoulement</b>: ${rddData.refoulement}`
|
||||
`<b>Refoulement</b>: ${tplData.refoulement}`
|
||||
]
|
||||
return properties;
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
_souffleChatData() {
|
||||
const rddData = Misc.data(this).data;
|
||||
const tplData = Misc.templateData(this);
|
||||
let properties = [];
|
||||
return properties;
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
_teteChatData() {
|
||||
const rddData = Misc.data(this).data;
|
||||
const tplData = Misc.templateData(this);
|
||||
let properties = [];
|
||||
return properties;
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
_tarotChatData() {
|
||||
const rddData = Misc.data(this).data;
|
||||
const tplData = Misc.templateData(this);
|
||||
let properties = [
|
||||
`<b>Concept</b>: ${rddData.concept}`,
|
||||
`<b>Aspect</b>: ${rddData.aspect}`,
|
||||
`<b>Concept</b>: ${tplData.concept}`,
|
||||
`<b>Aspect</b>: ${tplData.aspect}`,
|
||||
]
|
||||
return properties;
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
_nombreastralChatData() {
|
||||
const rddData = Misc.data(this).data;
|
||||
const tplData = Misc.templateData(this);
|
||||
let properties = [
|
||||
`<b>Valeur</b>: ${rddData.value}`,
|
||||
`<b>Jour</b>: ${rddData.jourlabel}`,
|
||||
`<b>Valeur</b>: ${tplData.value}`,
|
||||
`<b>Jour</b>: ${tplData.jourlabel}`,
|
||||
]
|
||||
return properties;
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
_monnaieChatData() {
|
||||
const rddData = Misc.data(this).data;
|
||||
const tplData = Misc.templateData(this);
|
||||
let properties = [
|
||||
`<b>Valeur en Deniers</b>: ${rddData.valeur_deniers}`,
|
||||
`<b>Encombrement</b>: ${rddData.encombrement}`
|
||||
`<b>Valeur en Deniers</b>: ${tplData.valeur_deniers}`,
|
||||
`<b>Encombrement</b>: ${tplData.encombrement}`
|
||||
]
|
||||
return properties;
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
_meditationChatData() {
|
||||
const rddData = Misc.data(this).data;
|
||||
const tplData = Misc.templateData(this);
|
||||
let properties = [
|
||||
`<b>Thème</b>: ${rddData.theme}`,
|
||||
`<b>Compétence</b>: ${rddData.competence}`,
|
||||
`<b>Support</b>: ${rddData.support}`,
|
||||
`<b>Heure</b>: ${rddData.heure}`,
|
||||
`<b>Purification</b>: ${rddData.purification}`,
|
||||
`<b>Vêture</b>: ${rddData.veture}`,
|
||||
`<b>Comportement</b>: ${rddData.comportement}`,
|
||||
`<b>Case TMR</b>: ${rddData.tmr}`
|
||||
`<b>Thème</b>: ${tplData.theme}`,
|
||||
`<b>Compétence</b>: ${tplData.competence}`,
|
||||
`<b>Support</b>: ${tplData.support}`,
|
||||
`<b>Heure</b>: ${tplData.heure}`,
|
||||
`<b>Purification</b>: ${tplData.purification}`,
|
||||
`<b>Vêture</b>: ${tplData.veture}`,
|
||||
`<b>Comportement</b>: ${tplData.comportement}`,
|
||||
`<b>Case TMR</b>: ${tplData.tmr}`
|
||||
]
|
||||
return properties;
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
_casetmrChatData() {
|
||||
const rddData = Misc.data(this).data;
|
||||
const tplData = Misc.templateData(this);
|
||||
let properties = [
|
||||
`<b>Coordonnée</b>: ${rddData.coord}`,
|
||||
`<b>Spécificité</b>: ${rddData.specific}`
|
||||
`<b>Coordonnée</b>: ${tplData.coord}`,
|
||||
`<b>Spécificité</b>: ${tplData.specific}`
|
||||
]
|
||||
return properties;
|
||||
}
|
||||
|
@ -47,7 +47,11 @@ export class Misc {
|
||||
const parsed = parseInt(value);
|
||||
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) {
|
||||
if (!diviseur || diviseur <= 1) return undefined;
|
||||
switch (diviseur || 1) {
|
||||
|
@ -48,16 +48,6 @@ export class RdDHerbes extends Item {
|
||||
formData.isRepos = true;
|
||||
this.computeHerbeBonus(formData, this.herbesRepos, 7);
|
||||
}
|
||||
|
||||
if (formData.data.categorie.includes('Enchante') ) {
|
||||
formData.isEnchante = true;
|
||||
if ( formData.isHerbe) {
|
||||
formData.pointsGuerison = this.calculePointsGuerison( formData.data );
|
||||
}
|
||||
if ( formData.isRepos) {
|
||||
formData.caseRepos = formData.data.herbebonus * formData.data.pr;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
|
@ -935,7 +935,7 @@ ul, li {
|
||||
background: rgba(220,220,210,0.75);
|
||||
border: 2px solid #545469;
|
||||
}
|
||||
.chat-message .chat-icon {
|
||||
.chat-icon {
|
||||
border: 0;
|
||||
padding: 2px 6px 2px 2px;
|
||||
float: left;
|
||||
|
@ -9,7 +9,7 @@
|
||||
</div>
|
||||
<div class="flexrow flex-group-center flex-actions-bar">
|
||||
<div>
|
||||
<span id="encaisser-direct"><a title="Encaisser des dommages"><img class="button-img" src="icons/svg/bones.svg" alt="Encaisser des dommages"/></a></span>
|
||||
<span class="encaisser-direct"><a title="Encaisser des dommages"><img class="button-img" src="icons/svg/bones.svg" alt="Encaisser des dommages"/></a></span>
|
||||
<span class="gm-only remise-a-neuf"><a title="Remise à neuf"><img class="button-img" src="icons/svg/regen.svg" alt="Remise à neuf"/></a></span>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -9,7 +9,7 @@
|
||||
</div>
|
||||
<div class="flexrow flex-group-center flex-actions-bar">
|
||||
<div>
|
||||
<span id="encaisser-direct"><a title="Encaisser des dommages"><img class="button-img" src="icons/svg/bones.svg" alt="Encaisser des dommages"/></a></span>
|
||||
<span class="encaisser-direct"><a title="Encaisser des dommages"><img class="button-img" src="icons/svg/bones.svg" alt="Encaisser des dommages"/></a></span>
|
||||
<span class="gm-only remise-a-neuf"><a title="Remise à neuf"><img class="button-img" src="icons/svg/regen.svg" alt="Remise à neuf"/></a></span>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -9,10 +9,13 @@
|
||||
<span class="item-quantite">{{item.data.quantite}}</span>
|
||||
<span class="item-quantite">{{numberFormat item.data.encTotal decimals=2}}</span>
|
||||
<div class="item-controls flex-grow">
|
||||
{{#unless item.estContenu}}
|
||||
<a class="item-control item-equip" title="Equiper">{{#if item.data.equipe}}<i class="fas fa-circle"></i>{{else}}<i class="fas fa-genderless"></i>{{/if}}</a>
|
||||
{{/unless}}
|
||||
<a class="item-control item-edit" title="Editer"><i class="fas fa-edit"></i></a>
|
||||
<a class="item-control item-delete" title="Supprimer"><i class="fas fa-trash"></i></a>
|
||||
{{#if (eq item.type 'nourritureboisson')}}
|
||||
<a class="item-name item-consommer">Consommer</a>
|
||||
{{#if item.data.actionPrincipale}}
|
||||
<a class="item-name item-action">{{item.data.actionPrincipale}}</a>
|
||||
{{/if}}
|
||||
</div>
|
||||
</li>
|
||||
|
@ -55,14 +55,14 @@
|
||||
</ul>
|
||||
<div class="flex-group-center flex-actions-bar">
|
||||
<div>
|
||||
<span id="encaisser-direct"><a title="Encaisser des dommages"><img class="button-img" src="icons/svg/bones.svg" alt="Encaisser des dommages"/></a></span>
|
||||
<span class="encaisser-direct"><a title="Encaisser des dommages"><img class="button-img" src="icons/svg/bones.svg" alt="Encaisser des dommages"/></a></span>
|
||||
<span class="gm-only remise-a-neuf"><a title="Remise à neuf"><img class="button-img" src="icons/svg/regen.svg" alt="Remise à neuf"/></a></span>
|
||||
<span id="dormir-une-heure"><a title="Dormir une heure"><img class="button-img" src="icons/svg/sleep.svg" alt="Dormir une heure"/></a></span>
|
||||
<span id="dormir-chateau-dormant"><a title="Chateau Dormant"><img class="button-img" src="systems/foundryvtt-reve-de-dragon/icons/heures/hd12.svg" alt="Chateau Dormant"/></a></span>
|
||||
<span class="dormir-une-heure"><a title="Dormir une heure"><img class="button-img" src="icons/svg/sleep.svg" alt="Dormir une heure"/></a></span>
|
||||
<span class="dormir-chateau-dormant"><a title="Chateau Dormant"><img class="button-img" src="systems/foundryvtt-reve-de-dragon/icons/heures/hd12.svg" alt="Chateau Dormant"/></a></span>
|
||||
{{#if data.attributs.hautrevant.value}}
|
||||
<span id="monte-tmr"><a title="Montée dans les Terres Médianes !"><img class="button-img" src="systems/foundryvtt-reve-de-dragon/styles/img/ui/icon-tmr-normal.svg" alt="Montée dans les Terres Médianes !"/></a></span>
|
||||
<span id="monte-tmr-rapide"><a title="Montée accélérée dans les Terres Médianes !"><img class="button-img" src="systems/foundryvtt-reve-de-dragon/styles/img/ui/icon-tmr-rapide.svg" alt="Montée accélérée dans les Terres Médianes !"/></a></span>
|
||||
<span id="visu-tmr"><a title="Regarder les Terres Médianes"><img class="button-img" src="systems/foundryvtt-reve-de-dragon/styles/img/ui/icon-tmr-view.svg" alt="Regarder les Terres Médianes"/></a></span>
|
||||
<span class="monte-tmr"><a title="Montée dans les Terres Médianes !"><img class="button-img" src="systems/foundryvtt-reve-de-dragon/styles/img/ui/icon-tmr-normal.svg" alt="Montée dans les Terres Médianes !"/></a></span>
|
||||
<span class="monte-tmr-rapide"><a title="Montée accélérée dans les Terres Médianes !"><img class="button-img" src="systems/foundryvtt-reve-de-dragon/styles/img/ui/icon-tmr-rapide.svg" alt="Montée accélérée dans les Terres Médianes !"/></a></span>
|
||||
<span class="visu-tmr"><a title="Regarder les Terres Médianes"><img class="button-img" src="systems/foundryvtt-reve-de-dragon/styles/img/ui/icon-tmr-view.svg" alt="Regarder les Terres Médianes"/></a></span>
|
||||
{{/if}}
|
||||
</div>
|
||||
<div class="flexrow">
|
||||
@ -84,7 +84,7 @@
|
||||
</span>
|
||||
{{/each}}
|
||||
{{#if options.isGM}}
|
||||
<span id="enlever-tous-effets"><a>(enlever tout)</a></span>
|
||||
<span class="enlever-tous-effets"><a>(enlever tout)</a></span>
|
||||
{{/if}}
|
||||
{{else}}
|
||||
Aucun effet actif
|
||||
@ -754,20 +754,7 @@
|
||||
{{#each objets as |item id|}}
|
||||
{{#unless item.estContenu}}
|
||||
{{#if (ne item.type 'conteneur')}}
|
||||
<li class="item flexrow list-item" data-item-id="{{item._id}}">
|
||||
<img class="sheet-competence-img" src="{{item.img}}" title="{{item.name}}"/>
|
||||
<span class="item-name flex-grow">{{item.name}}</span>
|
||||
<span class="item-quantite">{{item.data.quantite}}</span>
|
||||
<span class="item-quantite">{{numberFormat item.data.encTotal decimals=2}}</span>
|
||||
<span class="item-controls flex-grow">
|
||||
<a class="item-control item-equip" title="Equiper">{{#if item.data.equipe}}<i class="fas fa-circle"></i>{{else}}<i class="fas fa-genderless"></i>{{/if}}</a>
|
||||
<a class="item-control item-edit" title="Editer"><i class="fas fa-edit"></i></a>
|
||||
<a class="item-control item-delete" title="Supprimer"><i class="fas fa-trash"></i></a>
|
||||
{{#if (and (eq item.type 'nourritureboisson') item.data.quantite)}}
|
||||
<a class="item-name item-consommer">Consommer</a>
|
||||
{{/if}}
|
||||
</span>
|
||||
</li>
|
||||
{{> "systems/foundryvtt-reve-de-dragon/templates/actor-inventaire-conteneur.html" item=item }}
|
||||
{{/if}}
|
||||
{{/unless}}
|
||||
{{/each}}
|
||||
|
@ -1,9 +1,9 @@
|
||||
<img class="chat-icon" src="systems/foundryvtt-reve-de-dragon/icons/competence_botanique.png" alt="potion de repos" />
|
||||
<h4>
|
||||
{{alias}} consomme sa Potion {{enchanteTexte}} de {{name}}.
|
||||
{{alias}} consomme sa <b>Potion {{#if data.isEnchante}}enchantée{{/if}}</b> de {{name}}.
|
||||
</h4>
|
||||
<hr>
|
||||
<div>
|
||||
Les effets de la potions sont à gérer manuellement, en fonction de sa nature{{#if isEnchante}} et de son enchantement ({{data.pr}} Points de Rêve){{/if}}.
|
||||
Les effets de la potions sont à gérer manuellement, en fonction de sa nature{{#if data.isEnchante}} et de son enchantement ({{data.pr}} Points de Rêve){{/if}}.
|
||||
<br>La potion a été supprimée de l'équipement.
|
||||
</div>
|
||||
|
@ -1,11 +1,11 @@
|
||||
<img class="chat-icon" src="systems/foundryvtt-reve-de-dragon/icons/competence_botanique.png" alt="potion de repos" />
|
||||
<h4>
|
||||
{{alias}} consomme sa Potion de Repos {{enchanteTexte}} de {{name}} ({{data.herbe}}, {{data.herbebrins}} brins).
|
||||
{{alias}} consomme sa <b>Potion de Repos {{#if data.isEnchante}}enchantée{{/if}}</b> de {{name}} ({{data.herbe}}, {{data.herbebrins}} brins).
|
||||
</h4>
|
||||
<hr>
|
||||
<div>
|
||||
{{#if casesRepos}}
|
||||
Elle permet de récupérer jusqu'à {{casesRepos}} cases de repos.
|
||||
{{#if data.isEnchante}}
|
||||
Elle permet de récupérer jusqu'à {{data.puissance}} cases de repos.
|
||||
{{else}}
|
||||
Une fois consommée vers fin Lyre, elle vous octroie un bonus de {{data.herbebonus}} segments de fatigue récupérés en plus à la fin de Chateau Dormant (à gérer manuellement).
|
||||
<br>La potion a également été supprimée de l'équipement.
|
||||
|
@ -1,11 +1,11 @@
|
||||
<img class="chat-icon" src="systems/foundryvtt-reve-de-dragon/icons/competence_botanique.png" alt="potion de soin" />
|
||||
<h4>
|
||||
{{alias}} consomme sa Potion de Soins {{enchanteTexte}} de {{name}} ({{data.herbe}}, {{data.herbebrins}} brins).
|
||||
{{alias}} consomme sa <b>Potion de soins {{#if data.isEnchante}}enchantée{{/if}}</b> de {{name}} ({{data.herbe}}, {{data.herbebrins}} brins).
|
||||
</h4>
|
||||
<hr>
|
||||
<div>
|
||||
{{#if pointsGuerison}}
|
||||
Elle permet de guérir {{pointsGuerison}} Points de Guérison.
|
||||
{{#if data.isEnchante}}
|
||||
Elle permet de guérir {{data.puissance}} Points de Guérison.
|
||||
{{else}}
|
||||
Lors de votre prochain jet de récupération à Chateau Dormant, vous bénéficierez d'un bonus de {{data.herbebonus}} (appliqué automatiquement).
|
||||
<br>La potion a également été supprimée de l'équipement.
|
||||
|
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>
|
@ -5,7 +5,7 @@
|
||||
<h1 class="charname"><input name="name" type="text" value="{{name}}" placeholder="Name" /></h1>
|
||||
{{#if isOwned}}
|
||||
<div class="form-group">
|
||||
<span for="xp"><a class="fabriquer-potion chat-card-button" data-actor-id="{{actorId}}">Consommer cette potion et appliquer ses effets</a></span>
|
||||
<span for="xp"><a class="consommer-potion chat-card-button" data-actor-id="{{actorId}}">Consommer cette potion et appliquer ses effets</a></span>
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
@ -77,7 +77,7 @@
|
||||
<input class="attribute-value" type="checkbox" name="data.reposalchimique" {{#if data.reposalchimique}}checked{{/if}}/>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{#if isEnchante}}
|
||||
{{#if data.isEnchante}}
|
||||
<div class="form-group">
|
||||
<label>Points de rêve</label>
|
||||
<input class="attribute-value" type="text" name="data.pr" value="{{data.pr}}" data-dtype="Number" />
|
||||
|
@ -4,25 +4,27 @@
|
||||
<img src="{{img}}" title="{{name}}" />
|
||||
{{/if}}
|
||||
|
||||
<div class="card-content">{{{data.description}}}</div>
|
||||
|
||||
<p class="card-content">{{{data.description}}}</p>
|
||||
<p>
|
||||
{{#each properties as |property p|}}
|
||||
<span>{{{property}}}</span><br>
|
||||
{{/each}}
|
||||
<div>
|
||||
{{#if postPrice}}
|
||||
<b>Prix: </b> <span class="postPrice">{{postPrice}} Sols</span>
|
||||
{{/if}}
|
||||
{{#if (or postQuantity postPrice)}}
|
||||
<span>
|
||||
{{#if postQuantity}}
|
||||
<b>Quantité: </b> <span class="postQuantity">{{postQuantity}}</span>
|
||||
{{/if}}
|
||||
</div>
|
||||
|
||||
{{#if finalPrice}}
|
||||
<div>
|
||||
<b>Prix Total: </b> <span class="postPrice">{{finalPrice}} Sols</span>
|
||||
</div>
|
||||
{{#if postPrice}}
|
||||
<b>Prix: </b> <span class="postPrice">{{postPrice}} Sols</span><br>
|
||||
{{/if}}
|
||||
</span>
|
||||
{{/if}}
|
||||
{{#if finalPrice}}
|
||||
<span>
|
||||
<b>Prix Total: </b> <span class="postPrice">{{finalPrice}} Sols</span><br>
|
||||
</span>
|
||||
{{/if}}
|
||||
</p>
|
||||
|
||||
{{#if hasPrice}}
|
||||
<span class="chat-card-button-area">
|
||||
|
Loading…
Reference in New Issue
Block a user