#181 Gestion potions (fabrication)

This commit is contained in:
sladecraven 2021-04-10 21:07:53 +02:00
parent 1cea9753a9
commit 1b3c5f524d
9 changed files with 82 additions and 23 deletions

View File

@ -29,7 +29,7 @@ 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 { RdDItem } from "./item.js";
import { DialogFabriquerPotion } from "./dialog-fabriquer-potion.js";
/* -------------------------------------------- */
@ -3308,6 +3308,47 @@ export class RdDActor extends Actor {
this.bonusRepos = potionData.data.herbeBonus;
}
}
/* -------------------------------------------- */
dialogFabriquerPotion( herbe ) {
DialogFabriquerPotion.create(this, herbe, {
html: 'systems/foundryvtt-reve-de-dragon/templates/dialog-fabriquer-potion-base.html',
}, []);
}
/* -------------------------------------------- */
async fabriquerPotion( potionData ) {
let newPotion = {
name: `Potion de ${potionData.data.categorie} (${potionData.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: "" }
}
await this.createEmbeddedDocuments('Item', [newPotion], { renderSheet: true });
let newQuantite = potionData.data.quantite - potionData.nbBrins;
let messageData = {
alias: this.name,
categorie: potionData.data.categorie,
herbe: potionData.name,
nbBrinsPotion: potionData.nbBrins,
nbBrinsReste: newQuantite
}
if (newQuantite == 0 ) {
await this.deleteEmbeddedDocuments('Item', [ potionData._id ] );
} else {
let update = { _id: potionData._id, 'data.quantite': newQuantite};
const updated = await this.updateEmbeddedDocuments('Item', [update]); // Updates one EmbeddedEntity
}
ChatMessage.create({
whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name),
content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-fabriquer-potion-base.html`, messageData )
});
}
/* -------------------------------------------- */
async consommerPotionGenerique( potionData ) {

View File

@ -63,6 +63,7 @@ export class DialogConsommer extends Dialog {
this.consommerData = consommerData;
}
/* -------------------------------------------- */
activateListeners(html) {
super.activateListeners(html);

View File

@ -65,6 +65,11 @@ export class RdDItemSheet extends ItemSheet {
isSoins: false,
isEnchante: false
}
if ( this.actor ) {
formData.isOwned = true;
formData.actorId = this.actor.id;
}
formData.categorieCompetences = RdDItemCompetence.getCategorieCompetences();
if ( formData.type == 'tache' || formData.type == 'livre' || formData.type == 'meditation' || formData.type == 'oeuvre') {
formData.caracList = duplicate(game.system.model.Actor.personnage.carac);
@ -84,10 +89,8 @@ export class RdDItemSheet extends ItemSheet {
}
RdDHerbes.updatePotionData(formData);
}
if ( this.actor ) {
formData.isOwned = true;
formData.actorId = this.actor.id;
if ( formData.isOwned && formData.type == 'herbe' && (formData.data.categorie == 'Soin' || formData.data.categorie == 'Repos') ) {
formData.isIngredientPotionBase = true;
}
formData.bonusCaseList = RdDItemSort.getBonusCaseList(formData, true);
@ -128,6 +131,11 @@ export class RdDItemSheet extends ItemSheet {
let actor = game.actors.get( actorId );
actor.consommerPotion( this.item );
});
html.find('.creer-potion-base').click((event) => {
let actorId = event.currentTarget.attributes['data-actor-id'].value;
let actor = game.actors.get( actorId );
actor.dialogFabriquerPotion( this.item );
});
html.find('.alchimie-tache a').click((event) => {
let actorId = event.currentTarget.attributes['data-actor-id'].value;

View File

@ -139,6 +139,7 @@ export class RdDUtility {
'systems/foundryvtt-reve-de-dragon/templates/enum-categorie-vehicule.html',
'systems/foundryvtt-reve-de-dragon/templates/enum-competence.html',
'systems/foundryvtt-reve-de-dragon/templates/enum-herbesoin-ingredient.html',
'systems/foundryvtt-reve-de-dragon/templates/enum-categorie-potion.html',
'systems/foundryvtt-reve-de-dragon/templates/enum-initpremierround.html',
'systems/foundryvtt-reve-de-dragon/templates/enum-rarete.html',
'systems/foundryvtt-reve-de-dragon/templates/sort-draconic.html',
@ -188,7 +189,8 @@ export class RdDUtility {
'systems/foundryvtt-reve-de-dragon/templates/chat-actor-turn-summary.html',
'systems/foundryvtt-reve-de-dragon/templates/chat-actor-competence-xp.html',
'systems/foundryvtt-reve-de-dragon/templates/chat-actor-carac-xp.html',
'systems/foundryvtt-reve-de-dragon/templates/chat-potionenchantee-chateaudormant.html'
'systems/foundryvtt-reve-de-dragon/templates/chat-potionenchantee-chateaudormant.html',
'systems/foundryvtt-reve-de-dragon/templates/chat-fabriquer-potion-base.html'
];
Handlebars.registerHelper('upperFirst', str => Misc.upperFirst(str ?? 'Null'));
@ -201,6 +203,14 @@ export class RdDUtility {
return loadTemplates(templatePaths);
}
/* -------------------------------------------- */
static buildListOptions( min, max ) {
let options = ""
for(let i=min; i<= max; i++) {
options += `<option value="${i}">${i}</option>`
}
return options;
}
/* -------------------------------------------- */
static checkNull(items) {
@ -533,9 +543,6 @@ export class RdDUtility {
}
}
/* -------------------------------------------- */
static async chatListeners(html) {
RdDCombat.registerChatCallbacks(html);

View File

@ -58,3 +58,4 @@
{"name":"Amandelle","permission":{"default":0,"rYShh2P1DNavdoBD":3},"type":"ingredient","data":{"description":"<p>Fruit de l&rsquo;amandelier, un petit arbuste &agrave; feuilles tr&egrave;s d&eacute;coup&eacute;es de couleur mauve p&acirc;le &agrave; violet fonc&eacute;. L&rsquo;amandelle est une noix plate et allong&eacute;e au go&ucirc;t d&rsquo;amande alli&eacute; au parfum de violette.</p>\n<p>Fr&eacute;quente.</p>","niveau":0,"encombrement":0.01,"base":0,"quantite":1,"milieu":"Tous","rarete":"Frequente","categorie":"Cuisine","cout":0},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Amandelle.png","effects":[],"_id":"w7jEFHGFrcrKAesQ"}
{"name":"Blèmissure","permission":{"default":0,"rYShh2P1DNavdoBD":3},"type":"ingredient","data":{"description":"<p>Champignon affectant la forme d&rsquo;une &eacute;ponge, de couleur gris bl&ecirc;me, apparaissant sur les troncs des arbres.</p>\n<p>M4 \\ P 1 minute \\ D2 \\ -4 \\ &Eacute;lixir des Gnomes +14, Huile de S&eacute;likanthe +10.</p>\n<p>Fr&eacute;quente.</p>","niveau":0,"encombrement":0,"base":0,"quantite":1,"milieu":"Forêts sombres et humides","rarete":"Frequente","categorie":"","cout":0},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Bl%C3%A8missure.png","effects":[],"_id":"wNBWvJSd9i1zHspR"}
{"name":"Herbe de lune","permission":{"default":0,"rYShh2P1DNavdoBD":3},"type":"herbe","data":{"description":"<p>Petite herbac&eacute;e aux feuilles en forme de polygone &agrave; 7 c&ocirc;t&eacute;s, d&rsquo;un bleu tr&egrave;s p&acirc;le, presque translucide, ne poussant qu&rsquo;en haute montagne, &agrave; partir de 2000 m&egrave;tres, et uniquement dans les recoins pouvant &ecirc;tre &eacute;clair&eacute;s par la lune. <br /><br />L&rsquo;herbe de lune poss&egrave;de un fort pouvoir onirique sur celui qui la consomme\"; en termes de jeu, elle permet de gagner des points de r&ecirc;ve. Elle doit &ecirc;tre cueillie de nuit et lorsque la lune l&rsquo;&eacute;claire, faute de quoi son pouvoir est nul. Sa force d&eacute;pend de la phase lunaire durant laquelle elle est cueillie. <br /><br />Une fois s&eacute;ch&eacute;e, l&rsquo;herbe de lune peut &ecirc;tre fum&eacute;e dans une pipe ou pr&eacute;par&eacute;e en d&eacute;coction. Dans les deux cas, une dose doit &ecirc;tre compos&eacute;e de 7 brins. D&egrave;s la dose absorb&eacute;e (bue ou fum&eacute;e), le consommateur doit jouer un JR r-force, c&rsquo;est-&agrave;-dire un jet de points de r&ecirc;ve ajust&eacute; n&eacute;gativement &agrave; la force de l&rsquo;herbe. Si le JR r&eacute;ussit, aucun effet ne se produit\"; s&rsquo;il &eacute;choue, le consommateur gagne imm&eacute;diatement un nombre de points de r&ecirc;ve &eacute;gal &agrave; la force de l&rsquo;herbe, puis en &eacute;change, marque un nombre identique de points de fatigue. On peut ainsi gagner des points de r&ecirc;ve m&ecirc;me si le seuil de r&ecirc;ve est d&eacute;pass&eacute;, mais se souvenir que d&eacute;passer le triple de son seuil provoque l&rsquo;&eacute;clatement. <br /><br />L&rsquo;herbe de lune est parfois trouvable chez les herboristes, mais n&rsquo;est pas bon march&eacute;. Une dose (7 brins) vaut usuellement un nombre de sols &eacute;gal &agrave; sa force. Une dose de force 6 vaut ainsi 6 sols. <br />Rare.</p>","niveau":null,"base":0,"quantite":1,"milieu":"Hautes montagnes","rarete":"Rare","categorie":"","cout":null},"flags":{"core":{"sheetClass":"foundryvtt-reve-de-dragon.RdDItemSheet"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Herbe%20de%20lune.png","effects":[],"_id":"x4wGXTdmrzaOn8Sh"}
{"name":"Amandelle","type":"ingredient","img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Amandelle.png","data":{"description":"<p>Fruit de l&rsquo;amandelier, un petit arbuste &agrave; feuilles tr&egrave;s d&eacute;coup&eacute;es de couleur mauve p&acirc;le &agrave; violet fonc&eacute;. L&rsquo;amandelle est une noix plate et allong&eacute;e au go&ucirc;t d&rsquo;amande alli&eacute; au parfum de violette.</p>\n<p>Fr&eacute;quente.</p>","niveau":0,"encombrement":0.01,"base":0,"quantite":1,"milieu":"Tous","rarete":"Frequente","categorie":"Cuisine","cout":0},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"jtRmvSuwkwMmIMf0":3},"flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.botanique.w7jEFHGFrcrKAesQ"}},"_id":"QN2KLZLNL1JUh2bF"}

View File

@ -1,10 +1,6 @@
<option value=""></option>
<option value="Alchimie">Potion d'Alchimie</option>
<option value="AlchimieEnchante">Potion d'Alchimie Enchantée</option>
<option value="Cuisine">Potion de Cuisine</option>
<option value="Repos">Potion de Repos</option>
<option value="ReposEnchante">Potion de Repos Enchantée</option>
<option value="Soin">Potion de Soin</option>
<option value="SoinEnchante">Potion de Soin Enchantée</option>
<option value="Autre">Potion Autre</option>
<option value="AutreEnchante">Potion Autre Enchantée</option>
<option value="Alchimie">Alchimie</option>
<option value="Cuisine">Cuisine</option>
<option value="Repos">Repos</option>
<option value="Soin">Soin</option>
<option value="Autre">Autre</option>

View File

@ -3,6 +3,11 @@
<img class="profile-img" src="{{img}}" data-edit="img" title="{{name}}" />
<div class="header-fields">
<h1 class="charname"><input name="name" type="text" value="{{name}}" placeholder="Name" /></h1>
{{#if isIngredientPotionBase}}
<div class="form-group">
<span for="xp"><a class="creer-potion-base chat-card-button" data-actor-id="{{actorId}}">Fabriquer une potion depuis cette plante</a></span>
</div>
{{/if}}
</div>
</header>

View File

@ -14,7 +14,7 @@
<input class="attribute-value" type="text" name="data.niveau" value="{{data.niveau}}" data-dtype="Number" />
</div>
<div class="form-group">
<label>Quantité (Pépins)</label>
<label>Quantité (Pépins ou Brins)</label>
<input class="attribute-value" type="text" name="data.quantite" value="{{data.quantite}}" data-dtype="Number" />
</div>
<div class="form-group">

View File

@ -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="consommer-potion chat-card-button" data-actor-id="{{actorId}}">Consommer cette potion et appliquer ses effets</a></span>
<span for="xp"><a class="fabriquer-potion chat-card-button" data-actor-id="{{actorId}}">Consommer cette potion et appliquer ses effets</a></span>
</div>
{{/if}}
</div>
@ -37,7 +37,7 @@
<label>Catégorie</label>
<select name="data.categorie" class="categoriepotion" data-dtype="String">
{{#select data.categorie}}
{{>"systems/foundryvtt-reve-de-dragon/templates/enum-categorie-ingredient.html"}}
{{>"systems/foundryvtt-reve-de-dragon/templates/enum-categorie-potion.html"}}
{{/select}}
</select>
</div>