Compare commits
36 Commits
foundryvtt
...
foundryvtt
| Author | SHA1 | Date | |
|---|---|---|---|
| f5431b58fb | |||
|
|
bd32e1039a | ||
|
|
6b8f0ed51e | ||
|
|
10681b3f61 | ||
|
|
bbde3b73fe | ||
| 57d52c1966 | |||
| e3a29cdab5 | |||
|
|
10e4f14eb2 | ||
| 04273dfcf1 | |||
| 8c5c01114e | |||
|
|
19e6124330 | ||
|
|
1c908b50cb | ||
|
|
969cedfc3d | ||
|
|
830e66749d | ||
|
|
df26e654ae | ||
|
|
153bfe2e75 | ||
|
|
f6d42875ae | ||
|
|
450cb8e899 | ||
| 0202938910 | |||
| 512a056e59 | |||
|
|
214377c66d | ||
| 752e534350 | |||
| c85a544cc9 | |||
| 3a90c693d9 | |||
| c04b179176 | |||
|
|
63770790b9 | ||
|
|
aefc7a434b | ||
|
|
f02959adee | ||
|
|
e652027b02 | ||
|
|
2122a54db7 | ||
| f027e3318b | |||
|
|
31b4d1cfcc | ||
|
|
5056c35038 | ||
|
|
7b58407634 | ||
|
|
7efa7be1c0 | ||
|
|
717bb6fc6e |
BIN
icons/faune/Escargot.webp
Normal file
|
After Width: | Height: | Size: 8.2 KiB |
BIN
icons/faune/andurak.webp
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
icons/faune/barbon.webp
Normal file
|
After Width: | Height: | Size: 7.0 KiB |
BIN
icons/faune/brocart.webp
Normal file
|
After Width: | Height: | Size: 8.8 KiB |
BIN
icons/faune/cancre.webp
Normal file
|
After Width: | Height: | Size: 9.6 KiB |
BIN
icons/faune/cancrelas.webp
Normal file
|
After Width: | Height: | Size: 8.5 KiB |
BIN
icons/faune/chamois.webp
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
icons/faune/colimace.webp
Normal file
|
After Width: | Height: | Size: 5.7 KiB |
BIN
icons/faune/coquillage-pointe.webp
Normal file
|
After Width: | Height: | Size: 5.8 KiB |
BIN
icons/faune/coquille.webp
Normal file
|
After Width: | Height: | Size: 7.3 KiB |
BIN
icons/faune/fretin.webp
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
icons/faune/ours.webp
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
icons/faune/padongre.webp
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
icons/faune/sanglier.webp
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
icons/faune/soldieze.webp
Normal file
|
After Width: | Height: | Size: 8.8 KiB |
BIN
icons/faune/ver.webp
Normal file
|
After Width: | Height: | Size: 5.9 KiB |
BIN
icons/faune/wolf-head.webp
Normal file
|
After Width: | Height: | Size: 16 KiB |
@@ -27,15 +27,15 @@ export class RdDActorCreatureSheet extends RdDActorSheet {
|
|||||||
if (!this.options.editable) return;
|
if (!this.options.editable) return;
|
||||||
|
|
||||||
// On competence change
|
// On competence change
|
||||||
html.find('.creature-carac').change(async event => {
|
this.html.find('.creature-carac').change(async event => {
|
||||||
let compName = event.currentTarget.attributes.compname.value;
|
let compName = event.currentTarget.attributes.compname.value;
|
||||||
this.actor.updateCreatureCompetence(compName, "carac_value", parseInt(event.target.value));
|
this.actor.updateCreatureCompetence(compName, "carac_value", parseInt(event.target.value));
|
||||||
});
|
});
|
||||||
html.find('.creature-niveau').change(async event => {
|
this.html.find('.creature-niveau').change(async event => {
|
||||||
let compName = event.currentTarget.attributes.compname.value;
|
let compName = event.currentTarget.attributes.compname.value;
|
||||||
this.actor.updateCreatureCompetence(compName, "niveau", parseInt(event.target.value));
|
this.actor.updateCreatureCompetence(compName, "niveau", parseInt(event.target.value));
|
||||||
});
|
});
|
||||||
html.find('.creature-dommages').change(async event => {
|
this.html.find('.creature-dommages').change(async event => {
|
||||||
let compName = event.currentTarget.attributes.compname.value;
|
let compName = event.currentTarget.attributes.compname.value;
|
||||||
this.actor.updateCreatureCompetence(compName, "dommages", parseInt(event.target.value));
|
this.actor.updateCreatureCompetence(compName, "dommages", parseInt(event.target.value));
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -23,15 +23,15 @@ export class RdDActorEntiteSheet extends RdDActorSheet {
|
|||||||
if (!this.options.editable) return;
|
if (!this.options.editable) return;
|
||||||
|
|
||||||
// On competence change
|
// On competence change
|
||||||
html.find('.creature-carac').change(async event => {
|
this.html.find('.creature-carac').change(async event => {
|
||||||
let compName = event.currentTarget.attributes.compname.value;
|
let compName = event.currentTarget.attributes.compname.value;
|
||||||
this.actor.updateCreatureCompetence( compName, "carac_value", parseInt(event.target.value) );
|
this.actor.updateCreatureCompetence( compName, "carac_value", parseInt(event.target.value) );
|
||||||
} );
|
} );
|
||||||
html.find('.creature-niveau').change(async event => {
|
this.html.find('.creature-niveau').change(async event => {
|
||||||
let compName = event.currentTarget.attributes.compname.value;
|
let compName = event.currentTarget.attributes.compname.value;
|
||||||
this.actor.updateCreatureCompetence( compName, "niveau", parseInt(event.target.value) );
|
this.actor.updateCreatureCompetence( compName, "niveau", parseInt(event.target.value) );
|
||||||
} );
|
} );
|
||||||
html.find('.creature-dommages').change(async event => {
|
this.html.find('.creature-dommages').change(async event => {
|
||||||
let compName = event.currentTarget.attributes.compname.value;
|
let compName = event.currentTarget.attributes.compname.value;
|
||||||
this.actor.updateCreatureCompetence( compName, "dommages", parseInt(event.target.value) );
|
this.actor.updateCreatureCompetence( compName, "dommages", parseInt(event.target.value) );
|
||||||
} );
|
} );
|
||||||
|
|||||||
@@ -118,78 +118,26 @@ export class RdDActorSheet extends ActorSheet {
|
|||||||
return formData;
|
return formData;
|
||||||
}
|
}
|
||||||
|
|
||||||
isCompetenceAffichable(competence) {
|
|
||||||
return !this.options.showCompNiveauBase || !RdDItemCompetence.isNiveauBase(competence);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
|
||||||
async _onDropActor(event, dragData) {
|
|
||||||
const dropActor = fromUuidSync(dragData.uuid);
|
|
||||||
this.actor.addSubActeur(dropActor);
|
|
||||||
super._onDropActor(event, dragData);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
|
||||||
async _onDropItem(event, dragData) {
|
|
||||||
const destItemId = $(event.target)?.closest('.item').attr('data-item-id')
|
|
||||||
const dropParams = RdDSheetUtility.prepareItemDropParameters(destItemId, this.actor, dragData, this.objetVersConteneur)
|
|
||||||
if (dropParams){
|
|
||||||
const callSuper = await this.actor.processDropItem(dropParams)
|
|
||||||
if (callSuper) {
|
|
||||||
await super._onDropItem(event, dragData)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
|
||||||
async createItem(name, type) {
|
|
||||||
await this.actor.createEmbeddedDocuments('Item', [{ name: name, type: type }], { renderSheet: true });
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
|
||||||
async createEmptyTache() {
|
|
||||||
await this.createItem('Nouvelle tache', 'tache');
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -------------------------------------------- */ /** @override */
|
/* -------------------------------------------- */ /** @override */
|
||||||
activateListeners(html) {
|
activateListeners(html) {
|
||||||
super.activateListeners(html);
|
super.activateListeners(html);
|
||||||
|
this.html = html;
|
||||||
|
|
||||||
HtmlUtility._showControlWhen($(".appliquerFatigue"), ReglesOptionelles.isUsing("appliquer-fatigue"));
|
HtmlUtility._showControlWhen(this.html.find(".appliquerFatigue"), ReglesOptionelles.isUsing("appliquer-fatigue"));
|
||||||
|
|
||||||
// Everything below here is only needed if the sheet is editable
|
// Everything below here is only needed if the sheet is editable
|
||||||
if (!this.options.editable) return;
|
if (!this.options.editable) return;
|
||||||
|
|
||||||
html.find('.item-split').click(async event => {
|
this.html.find('.item-split').click(async event => {
|
||||||
const item = RdDSheetUtility.getItem(event, this.actor);
|
const item = RdDSheetUtility.getItem(event, this.actor);
|
||||||
RdDSheetUtility.splitItem(item, this.actor);
|
RdDSheetUtility.splitItem(item, this.actor);
|
||||||
});
|
});
|
||||||
html.find('.item-edit').click(async event => {
|
this.html.find('.item-edit').click(async event => RdDSheetUtility.getItem(event, this.actor)?.sheet.render(true))
|
||||||
const item = RdDSheetUtility.getItem(event, this.actor)
|
this.html.find('.item-delete').click(async event => RdDUtility.confirmerSuppressionItem(this, RdDSheetUtility.getItem(event, this.actor)));
|
||||||
item.sheet.render(true)
|
this.html.find('.item-vendre').click(async event => RdDSheetUtility.getItem(event, this.actor)?.proposerVente());
|
||||||
})
|
this.html.find('.item-montrer').click(async event => RdDSheetUtility.getItem(event, this.actor)?.postItem());
|
||||||
html.find('.display-label a').click(async event => {
|
this.html.find('.item-action').click(async event => RdDSheetUtility.getItem(event, this.actor)?.actionPrincipale(this.actor));
|
||||||
const item = RdDSheetUtility.getItem(event, this.actor);
|
this.html.find('.subacteur-delete').click(async event => {
|
||||||
item.sheet.render(true);
|
|
||||||
});
|
|
||||||
html.find('.item-delete').click(async event => {
|
|
||||||
const li = RdDSheetUtility.getEventElement(event);
|
|
||||||
const item = this.actor.getObjet(li.data("item-id"));
|
|
||||||
RdDUtility.confirmerSuppressionItem(this, item, li);
|
|
||||||
});
|
|
||||||
html.find('.item-vendre').click(async event => {
|
|
||||||
const item = RdDSheetUtility.getItem(event, this.actor);
|
|
||||||
item?.proposerVente();
|
|
||||||
});
|
|
||||||
html.find('.item-montrer').click(async event => {
|
|
||||||
const item = RdDSheetUtility.getItem(event, this.actor);
|
|
||||||
item?.postItem();
|
|
||||||
});
|
|
||||||
html.find('.item-action').click(async event => {
|
|
||||||
const item = RdDSheetUtility.getItem(event, this.actor)
|
|
||||||
this.actor.actionItem(item);
|
|
||||||
});
|
|
||||||
html.find('.subacteur-delete').click(async event => {
|
|
||||||
const li = RdDSheetUtility.getEventElement(event);
|
const li = RdDSheetUtility.getEventElement(event);
|
||||||
const actorId = li.data("actor-id");
|
const actorId = li.data("actor-id");
|
||||||
if (actorId) {
|
if (actorId) {
|
||||||
@@ -197,54 +145,54 @@ export class RdDActorSheet extends ActorSheet {
|
|||||||
RdDUtility.confirmerSuppressionSubacteur(this, subActor, li);
|
RdDUtility.confirmerSuppressionSubacteur(this, subActor, li);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
html.find('.experiencelog-delete').click(async event => {
|
this.html.find('.experiencelog-delete').click(async event => {
|
||||||
const li = $(event.currentTarget)?.parents(".experiencelog");
|
const li = this.html.find(event.currentTarget)?.parents(".experiencelog");
|
||||||
const key = Number(li.data("key") ?? -1);
|
const key = Number(li.data("key") ?? -1);
|
||||||
await this.actor.deleteExperienceLog(key, 1);
|
await this.actor.deleteExperienceLog(key, 1);
|
||||||
});
|
});
|
||||||
html.find('.experiencelog-delete-previous').click(async event => {
|
this.html.find('.experiencelog-delete-previous').click(async event => {
|
||||||
const li = $(event.currentTarget)?.parents(".experiencelog");
|
const li = this.html.find(event.currentTarget)?.parents(".experiencelog");
|
||||||
const key = Number(li.data("key") ?? -1);
|
const key = Number(li.data("key") ?? -1);
|
||||||
await this.actor.deleteExperienceLog(0, key + 1);
|
await this.actor.deleteExperienceLog(0, key + 1);
|
||||||
});
|
});
|
||||||
html.find('.encaisser-direct').click(async event => {
|
this.html.find('.encaisser-direct').click(async event => {
|
||||||
this.actor.encaisser();
|
this.actor.encaisser();
|
||||||
})
|
})
|
||||||
html.find('.sheet-possession-attack').click(async event => {
|
this.html.find('.sheet-possession-attack').click(async event => {
|
||||||
const poss = RdDSheetUtility.getItem(event, this.actor)
|
const poss = RdDSheetUtility.getItem(event, this.actor)
|
||||||
this.actor.conjurerPossession(poss)
|
this.actor.conjurerPossession(poss)
|
||||||
})
|
})
|
||||||
html.find('.remise-a-neuf').click(async event => {
|
this.html.find('.remise-a-neuf').click(async event => {
|
||||||
if (game.user.isGM) {
|
if (game.user.isGM) {
|
||||||
this.actor.remiseANeuf();
|
this.actor.remiseANeuf();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
html.find('.creer-tache').click(async event => {
|
this.html.find('.creer-tache').click(async event => {
|
||||||
this.createEmptyTache();
|
this.createEmptyTache();
|
||||||
});
|
});
|
||||||
html.find('.creer-un-objet').click(async event => {
|
this.html.find('.creer-un-objet').click(async event => {
|
||||||
RdDUtility.selectObjetType(this);
|
RdDUtility.selectObjetType(this);
|
||||||
});
|
});
|
||||||
html.find('.creer-une-oeuvre').click(async event => {
|
this.html.find('.creer-une-oeuvre').click(async event => {
|
||||||
RdDUtility.selectTypeOeuvre(this);
|
RdDUtility.selectTypeOeuvre(this);
|
||||||
});
|
});
|
||||||
html.find('.nettoyer-conteneurs').click(async event => {
|
this.html.find('.nettoyer-conteneurs').click(async event => {
|
||||||
this.actor.nettoyerConteneurs();
|
this.actor.nettoyerConteneurs();
|
||||||
});
|
});
|
||||||
|
|
||||||
// Blessure control
|
// Blessure control
|
||||||
html.find('.blessure-control').click(async event => {
|
this.html.find('.blessure-control').click(async event => {
|
||||||
const tr = $(event.currentTarget).parents(".item");
|
const tr = this.html.find(event.currentTarget).parents(".item");
|
||||||
let btype = tr.data("blessure-type");
|
let btype = tr.data("blessure-type");
|
||||||
let index = tr.data('blessure-index');
|
let index = tr.data('blessure-index');
|
||||||
let active = $(event.currentTarget).data('blessure-active');
|
let active = this.html.find(event.currentTarget).data('blessure-active');
|
||||||
//console.log(btype, index, active);
|
//console.log(btype, index, active);
|
||||||
await this.actor.manageBlessureFromSheet(btype, index, active);
|
await this.actor.manageBlessureFromSheet(btype, index, active);
|
||||||
});
|
});
|
||||||
|
|
||||||
// Blessure data
|
// Blessure data
|
||||||
html.find('.blessure-soins').change(async event => {
|
this.html.find('.blessure-soins').change(async event => {
|
||||||
const tr = $(event.currentTarget).parents(".item");
|
const tr = this.html.find(event.currentTarget).parents(".item");
|
||||||
let btype = tr.data('blessure-type');
|
let btype = tr.data('blessure-type');
|
||||||
let index = tr.data('blessure-index');
|
let index = tr.data('blessure-index');
|
||||||
let psoins = tr.find('.blessure-premiers_soins').val();
|
let psoins = tr.find('.blessure-premiers_soins').val();
|
||||||
@@ -258,57 +206,57 @@ export class RdDActorSheet extends ActorSheet {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Equip Inventory Item
|
// Equip Inventory Item
|
||||||
html.find('.item-equip').click(async event => {
|
this.html.find('.item-equip').click(async event => {
|
||||||
this.actor.equiperObjet(RdDSheetUtility.getItemId(event));
|
this.actor.equiperObjet(RdDSheetUtility.getItemId(event));
|
||||||
});
|
});
|
||||||
|
|
||||||
// Roll Carac
|
// Roll Carac
|
||||||
html.find('.carac-label a').click(async event => {
|
this.html.find('.carac-label a').click(async event => {
|
||||||
let caracName = event.currentTarget.attributes.name.value;
|
let caracName = event.currentTarget.attributes.name.value;
|
||||||
this.actor.rollCarac(caracName.toLowerCase());
|
this.actor.rollCarac(caracName.toLowerCase());
|
||||||
});
|
});
|
||||||
|
|
||||||
html.find('.chance-actuelle').click(async event => {
|
this.html.find('.chance-actuelle').click(async event => {
|
||||||
this.actor.rollCarac('chance-actuelle');
|
this.actor.rollCarac('chance-actuelle');
|
||||||
});
|
});
|
||||||
|
|
||||||
html.find('.chance-appel').click(async event => {
|
this.html.find('.chance-appel').click(async event => {
|
||||||
this.actor.rollAppelChance();
|
this.actor.rollAppelChance();
|
||||||
});
|
});
|
||||||
|
|
||||||
html.find('#jet-astrologie').click(async event => {
|
this.html.find('[name="jet-astrologie"]').click(async event => {
|
||||||
this.actor.astrologieNombresAstraux();
|
this.actor.astrologieNombresAstraux();
|
||||||
});
|
});
|
||||||
|
|
||||||
// Roll Skill
|
// Roll Skill
|
||||||
html.find('a.competence-label').click(async event => {
|
this.html.find('a.competence-label').click(async event => {
|
||||||
this.actor.rollCompetence(RdDSheetUtility.getItemId(event));
|
this.actor.rollCompetence(RdDSheetUtility.getItemId(event));
|
||||||
});
|
});
|
||||||
html.find('.tache-label a').click(async event => {
|
this.html.find('.tache-label a').click(async event => {
|
||||||
this.actor.rollTache(RdDSheetUtility.getItemId(event));
|
this.actor.rollTache(RdDSheetUtility.getItemId(event));
|
||||||
});
|
});
|
||||||
html.find('.meditation-label a').click(async event => {
|
this.html.find('.meditation-label a').click(async event => {
|
||||||
this.actor.rollMeditation(RdDSheetUtility.getItemId(event));
|
this.actor.rollMeditation(RdDSheetUtility.getItemId(event));
|
||||||
});
|
});
|
||||||
html.find('.chant-label a').click(async event => {
|
this.html.find('.chant-label a').click(async event => {
|
||||||
this.actor.rollChant(RdDSheetUtility.getItemId(event));
|
this.actor.rollChant(RdDSheetUtility.getItemId(event));
|
||||||
});
|
});
|
||||||
html.find('.danse-label a').click(async event => {
|
this.html.find('.danse-label a').click(async event => {
|
||||||
this.actor.rollDanse(RdDSheetUtility.getItemId(event));
|
this.actor.rollDanse(RdDSheetUtility.getItemId(event));
|
||||||
});
|
});
|
||||||
html.find('.musique-label a').click(async event => {
|
this.html.find('.musique-label a').click(async event => {
|
||||||
this.actor.rollMusique(RdDSheetUtility.getItemId(event));
|
this.actor.rollMusique(RdDSheetUtility.getItemId(event));
|
||||||
});
|
});
|
||||||
html.find('.oeuvre-label a').click(async event => {
|
this.html.find('.oeuvre-label a').click(async event => {
|
||||||
this.actor.rollOeuvre(RdDSheetUtility.getItemId(event));
|
this.actor.rollOeuvre(RdDSheetUtility.getItemId(event));
|
||||||
});
|
});
|
||||||
html.find('.jeu-label a').click(async event => {
|
this.html.find('.jeu-label a').click(async event => {
|
||||||
this.actor.rollJeu(RdDSheetUtility.getItemId(event));
|
this.actor.rollJeu(RdDSheetUtility.getItemId(event));
|
||||||
});
|
});
|
||||||
html.find('.recettecuisine-label a').click(async event => {
|
this.html.find('.recettecuisine-label a').click(async event => {
|
||||||
this.actor.rollRecetteCuisine(RdDSheetUtility.getItemId(event));
|
this.actor.rollRecetteCuisine(RdDSheetUtility.getItemId(event));
|
||||||
});
|
});
|
||||||
html.find('.subacteur-label a').click(async event => {
|
this.html.find('.subacteur-label a').click(async event => {
|
||||||
let actorId = RdDSheetUtility.getEventItemData(event, 'actor-id');
|
let actorId = RdDSheetUtility.getEventItemData(event, 'actor-id');
|
||||||
let actor = game.actors.get(actorId);
|
let actor = game.actors.get(actorId);
|
||||||
if (actor) {
|
if (actor) {
|
||||||
@@ -317,25 +265,25 @@ export class RdDActorSheet extends ActorSheet {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Boutons spéciaux MJs
|
// Boutons spéciaux MJs
|
||||||
html.find('.forcer-tmr-aleatoire').click(async event => {
|
this.html.find('.forcer-tmr-aleatoire').click(async event => {
|
||||||
this.actor.reinsertionAleatoire("Action MJ");
|
this.actor.reinsertionAleatoire("Action MJ");
|
||||||
});
|
});
|
||||||
html.find('.afficher-tmr').click(async event => {
|
this.html.find('.afficher-tmr').click(async event => {
|
||||||
this.actor.changeTMRVisible();
|
this.actor.changeTMRVisible();
|
||||||
});
|
});
|
||||||
|
|
||||||
// Points de reve actuel
|
// Points de reve actuel
|
||||||
html.find('.ptreve-actuel a').click(async event => {
|
this.html.find('.ptreve-actuel a').click(async event => {
|
||||||
this.actor.rollCarac('reve-actuel');
|
this.actor.rollCarac('reve-actuel');
|
||||||
});
|
});
|
||||||
|
|
||||||
// Roll Weapon1
|
// Roll Weapon1
|
||||||
html.find('.arme-label a').click(async event => {
|
this.html.find('.arme-label a').click(async event => {
|
||||||
let arme = this._getEventArmeCombat(event);
|
let arme = this._getEventArmeCombat(event);
|
||||||
this.actor.rollArme(duplicate(arme));
|
this.actor.rollArme(duplicate(arme));
|
||||||
});
|
});
|
||||||
// Initiative pour l'arme
|
// Initiative pour l'arme
|
||||||
html.find('.arme-initiative a').click(async event => {
|
this.html.find('.arme-initiative a').click(async event => {
|
||||||
let combatant = game.combat.combatants.find(c => c.actor.id == this.actor.id);
|
let combatant = game.combat.combatants.find(c => c.actor.id == this.actor.id);
|
||||||
if (combatant) {
|
if (combatant) {
|
||||||
let action = this._getEventArmeCombat(event);
|
let action = this._getEventArmeCombat(event);
|
||||||
@@ -345,88 +293,88 @@ export class RdDActorSheet extends ActorSheet {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
// Display TMR, visualisation
|
// Display TMR, visualisation
|
||||||
html.find('.visu-tmr').click(async event => {
|
this.html.find('.visu-tmr').click(async event => {
|
||||||
this.actor.displayTMR("visu");
|
this.actor.displayTMR("visu");
|
||||||
});
|
});
|
||||||
|
|
||||||
// Display TMR, normal
|
// Display TMR, normal
|
||||||
html.find('.monte-tmr').click(async event => {
|
this.html.find('.monte-tmr').click(async event => {
|
||||||
this.actor.displayTMR("normal");
|
this.actor.displayTMR("normal");
|
||||||
});
|
});
|
||||||
|
|
||||||
// Display TMR, fast
|
// Display TMR, fast
|
||||||
html.find('.monte-tmr-rapide').click(async event => {
|
this.html.find('.monte-tmr-rapide').click(async event => {
|
||||||
this.actor.displayTMR("rapide");
|
this.actor.displayTMR("rapide");
|
||||||
});
|
});
|
||||||
|
|
||||||
html.find('.repos').click(async event => {
|
this.html.find('.repos').click(async event => {
|
||||||
await DialogRepos.create(this.actor);
|
await DialogRepos.create(this.actor);
|
||||||
});
|
});
|
||||||
html.find('.delete-active-effect').click(async event => {
|
this.html.find('.delete-active-effect').click(async event => {
|
||||||
if (game.user.isGM) {
|
if (game.user.isGM) {
|
||||||
let effect = $(event.currentTarget).parents(".active-effect").data('effect');
|
let effect = this.html.find(event.currentTarget).parents(".active-effect").data('effect');
|
||||||
this.actor.removeEffect(effect);
|
this.actor.removeEffect(effect);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
html.find('.enlever-tous-effets').click(async event => {
|
this.html.find('.enlever-tous-effets').click(async event => {
|
||||||
if (game.user.isGM) {
|
if (game.user.isGM) {
|
||||||
await this.actor.removeEffects();
|
await this.actor.removeEffects();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
html.find('.conteneur-name a').click(async event => {
|
this.html.find('.conteneur-name a').click(async event => {
|
||||||
RdDUtility.toggleAfficheContenu(RdDSheetUtility.getItemId(event));
|
RdDUtility.toggleAfficheContenu(RdDSheetUtility.getItemId(event));
|
||||||
this.render(true);
|
this.render(true);
|
||||||
});
|
});
|
||||||
html.find('.carac-xp-augmenter').click(async event => {
|
this.html.find('.carac-xp-augmenter').click(async event => {
|
||||||
let caracName = event.currentTarget.name.replace("augmenter.", "");
|
let caracName = event.currentTarget.name.replace("augmenter.", "");
|
||||||
this.actor.updateCaracXPAuto(caracName);
|
this.actor.updateCaracXPAuto(caracName);
|
||||||
});
|
});
|
||||||
html.find('.competence-xp-augmenter').click(async event => {
|
this.html.find('.competence-xp-augmenter').click(async event => {
|
||||||
this.actor.updateCompetenceXPAuto(RdDSheetUtility.getItemId(event));
|
this.actor.updateCompetenceXPAuto(RdDSheetUtility.getItemId(event));
|
||||||
});
|
});
|
||||||
html.find('.competence-stress-augmenter').click(async event => {
|
this.html.find('.competence-stress-augmenter').click(async event => {
|
||||||
this.actor.updateCompetenceStress(RdDSheetUtility.getItemId(event));
|
this.actor.updateCompetenceStress(RdDSheetUtility.getItemId(event));
|
||||||
});
|
});
|
||||||
|
|
||||||
if (this.options.vueDetaillee) {
|
if (this.options.vueDetaillee) {
|
||||||
// On carac change
|
// On carac change
|
||||||
html.find('.carac-value').change(async event => {
|
this.html.find('.carac-value').change(async event => {
|
||||||
let caracName = event.currentTarget.name.replace(".value", "").replace("system.carac.", "");
|
let caracName = event.currentTarget.name.replace(".value", "").replace("system.carac.", "");
|
||||||
this.actor.updateCarac(caracName, parseInt(event.target.value));
|
this.actor.updateCarac(caracName, parseInt(event.target.value));
|
||||||
});
|
});
|
||||||
html.find('input.carac-xp').change(async event => {
|
this.html.find('input.carac-xp').change(async event => {
|
||||||
let caracName = event.currentTarget.name.replace(".xp", "").replace("system.carac.", "");
|
let caracName = event.currentTarget.name.replace(".xp", "").replace("system.carac.", "");
|
||||||
this.actor.updateCaracXP(caracName, parseInt(event.target.value));
|
this.actor.updateCaracXP(caracName, parseInt(event.target.value));
|
||||||
});
|
});
|
||||||
// On competence change
|
// On competence change
|
||||||
html.find('.competence-value').change(async event => {
|
this.html.find('.competence-value').change(async event => {
|
||||||
let compName = event.currentTarget.attributes.compname.value;
|
let compName = event.currentTarget.attributes.compname.value;
|
||||||
//console.log("Competence changed :", compName);
|
//console.log("Competence changed :", compName);
|
||||||
this.actor.updateCompetence(compName, parseInt(event.target.value));
|
this.actor.updateCompetence(compName, parseInt(event.target.value));
|
||||||
});
|
});
|
||||||
// On competence xp change
|
// On competence xp change
|
||||||
html.find('input.competence-xp').change(async event => {
|
this.html.find('input.competence-xp').change(async event => {
|
||||||
let compName = event.currentTarget.attributes.compname.value;
|
let compName = event.currentTarget.attributes.compname.value;
|
||||||
this.actor.updateCompetenceXP(compName, parseInt(event.target.value));
|
this.actor.updateCompetenceXP(compName, parseInt(event.target.value));
|
||||||
});
|
});
|
||||||
// On competence xp change
|
// On competence xp change
|
||||||
html.find('input.competence-xp-sort').change(async event => {
|
this.html.find('input.competence-xp-sort').change(async event => {
|
||||||
let compName = event.currentTarget.attributes.compname.value;
|
let compName = event.currentTarget.attributes.compname.value;
|
||||||
this.actor.updateCompetenceXPSort(compName, parseInt(event.target.value));
|
this.actor.updateCompetenceXPSort(compName, parseInt(event.target.value));
|
||||||
});
|
});
|
||||||
// On competence archetype change
|
// On competence archetype change
|
||||||
html.find('.competence-archetype').change(async event => {
|
this.html.find('.competence-archetype').change(async event => {
|
||||||
let compName = event.currentTarget.attributes.compname.value;
|
let compName = event.currentTarget.attributes.compname.value;
|
||||||
this.actor.updateCompetenceArchetype(compName, parseInt(event.target.value));
|
this.actor.updateCompetenceArchetype(compName, parseInt(event.target.value));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
html.find('.show-hide-competences').click(async event => {
|
this.html.find('.show-hide-competences').click(async event => {
|
||||||
this.options.showCompNiveauBase = !this.options.showCompNiveauBase;
|
this.options.showCompNiveauBase = !this.options.showCompNiveauBase;
|
||||||
this.render(true);
|
this.render(true);
|
||||||
});
|
});
|
||||||
|
|
||||||
html.find('.recherche')
|
this.html.find('.recherche')
|
||||||
.each((index, field) => {
|
.each((index, field) => {
|
||||||
if (this.options.recherche) {
|
if (this.options.recherche) {
|
||||||
field.focus();
|
field.focus();
|
||||||
@@ -449,92 +397,125 @@ export class RdDActorSheet extends ActorSheet {
|
|||||||
.change(async event =>
|
.change(async event =>
|
||||||
this.options.recherche = this._optionRecherche(event.currentTarget)
|
this.options.recherche = this._optionRecherche(event.currentTarget)
|
||||||
);
|
);
|
||||||
html.find('.vue-detaillee').click(async event => {
|
this.html.find('.vue-detaillee').click(async event => {
|
||||||
this.options.vueDetaillee = !this.options.vueDetaillee;
|
this.options.vueDetaillee = !this.options.vueDetaillee;
|
||||||
this.render(true);
|
this.render(true);
|
||||||
});
|
});
|
||||||
|
|
||||||
// On pts de reve change
|
// On pts de reve change
|
||||||
html.find('.pointsreve-value').change(async event => {
|
this.html.find('.pointsreve-value').change(async event => {
|
||||||
let reveValue = event.currentTarget.value;
|
let reveValue = event.currentTarget.value;
|
||||||
this.actor.update({ "system.reve.reve.value": reveValue });
|
this.actor.update({ "system.reve.reve.value": reveValue });
|
||||||
});
|
});
|
||||||
|
|
||||||
// On seuil de reve change
|
// On seuil de reve change
|
||||||
html.find('.seuil-reve-value').change(async event => {
|
this.html.find('.seuil-reve-value').change(async event => {
|
||||||
console.log("seuil-reve-value", event.currentTarget)
|
console.log("seuil-reve-value", event.currentTarget)
|
||||||
this.actor.setPointsDeSeuil(event.currentTarget.value);
|
this.actor.setPointsDeSeuil(event.currentTarget.value);
|
||||||
});
|
});
|
||||||
|
|
||||||
html.find('#attribut-protection-edit').change(async event => {
|
this.html.find('#attribut-protection-edit').change(async event => {
|
||||||
this.actor.updateAttributeValue(event.currentTarget.attributes.name.value, parseInt(event.target.value));
|
this.actor.updateAttributeValue(event.currentTarget.attributes.name.value, parseInt(event.target.value));
|
||||||
});
|
});
|
||||||
|
|
||||||
// On stress change
|
// On stress change
|
||||||
html.find('.compteur-edit').change(async event => {
|
this.html.find('.compteur-edit').change(async event => {
|
||||||
let fieldName = event.currentTarget.attributes.name.value;
|
let fieldName = event.currentTarget.attributes.name.value;
|
||||||
this.actor.updateCompteurValue(fieldName, parseInt(event.target.value));
|
this.actor.updateCompteurValue(fieldName, parseInt(event.target.value));
|
||||||
});
|
});
|
||||||
|
|
||||||
html.find('#ethylisme').change(async event => {
|
this.html.find('#ethylisme').change(async event => {
|
||||||
this.actor.setEthylisme(parseInt(event.target.value));
|
this.actor.setEthylisme(parseInt(event.target.value));
|
||||||
});
|
});
|
||||||
html.find('.stress-test').click(async event => {
|
this.html.find('.stress-test').click(async event => {
|
||||||
this.actor.transformerStress();
|
this.actor.transformerStress();
|
||||||
});
|
});
|
||||||
html.find('.moral-malheureux').click(async event => {
|
this.html.find('.moral-malheureux').click(async event => {
|
||||||
this.actor.jetDeMoral('malheureuse');
|
this.actor.jetDeMoral('malheureuse');
|
||||||
});
|
});
|
||||||
html.find('.moral-neutre').click(async event => {
|
this.html.find('.moral-neutre').click(async event => {
|
||||||
this.actor.jetDeMoral('neutre');
|
this.actor.jetDeMoral('neutre');
|
||||||
});
|
});
|
||||||
html.find('.moral-heureux').click(async event => {
|
this.html.find('.moral-heureux').click(async event => {
|
||||||
this.actor.jetDeMoral('heureuse');
|
this.actor.jetDeMoral('heureuse');
|
||||||
});
|
});
|
||||||
html.find('.ethylisme-test').click(async event => {
|
this.html.find('.ethylisme-test').click(async event => {
|
||||||
this.actor.jetEthylisme();
|
this.actor.jetEthylisme();
|
||||||
});
|
});
|
||||||
|
|
||||||
html.find('.jet-vie').click(async event => {
|
this.html.find('.jet-vie').click(async event => {
|
||||||
this.actor.jetVie();
|
this.actor.jetVie();
|
||||||
});
|
});
|
||||||
html.find('.jet-endurance').click(async event => {
|
this.html.find('.jet-endurance').click(async event => {
|
||||||
this.actor.jetEndurance();
|
this.actor.jetEndurance();
|
||||||
});
|
});
|
||||||
|
|
||||||
html.find('.monnaie-plus').click(async event => {
|
this.html.find('.monnaie-plus').click(async event => {
|
||||||
this.actor.monnaieIncDec(RdDSheetUtility.getItemId(event), 1);
|
this.actor.monnaieIncDec(RdDSheetUtility.getItemId(event), 1);
|
||||||
});
|
});
|
||||||
html.find('.monnaie-moins').click(async event => {
|
this.html.find('.monnaie-moins').click(async event => {
|
||||||
this.actor.monnaieIncDec(RdDSheetUtility.getItemId(event), -1);
|
this.actor.monnaieIncDec(RdDSheetUtility.getItemId(event), -1);
|
||||||
});
|
});
|
||||||
|
|
||||||
html.find('.vie-plus').click(async event => {
|
this.html.find('.vie-plus').click(async event => {
|
||||||
this.actor.santeIncDec("vie", 1);
|
this.actor.santeIncDec("vie", 1);
|
||||||
});
|
});
|
||||||
html.find('.vie-moins').click(async event => {
|
this.html.find('.vie-moins').click(async event => {
|
||||||
this.actor.santeIncDec("vie", -1);
|
this.actor.santeIncDec("vie", -1);
|
||||||
});
|
});
|
||||||
html.find('.endurance-plus').click(async event => {
|
this.html.find('.endurance-plus').click(async event => {
|
||||||
this.actor.santeIncDec("endurance", 1);
|
this.actor.santeIncDec("endurance", 1);
|
||||||
});
|
});
|
||||||
html.find('.endurance-moins').click(async event => {
|
this.html.find('.endurance-moins').click(async event => {
|
||||||
this.actor.santeIncDec("endurance", -1);
|
this.actor.santeIncDec("endurance", -1);
|
||||||
});
|
});
|
||||||
html.find('.ptreve-actuel-plus').click(async event => {
|
this.html.find('.ptreve-actuel-plus').click(async event => {
|
||||||
this.actor.reveActuelIncDec(1);
|
this.actor.reveActuelIncDec(1);
|
||||||
});
|
});
|
||||||
html.find('.ptreve-actuel-moins').click(async event => {
|
this.html.find('.ptreve-actuel-moins').click(async event => {
|
||||||
this.actor.reveActuelIncDec(-1);
|
this.actor.reveActuelIncDec(-1);
|
||||||
});
|
});
|
||||||
html.find('.fatigue-plus').click(async event => {
|
this.html.find('.fatigue-plus').click(async event => {
|
||||||
this.actor.santeIncDec("fatigue", 1);
|
this.actor.santeIncDec("fatigue", 1);
|
||||||
});
|
});
|
||||||
html.find('.fatigue-moins').click(async event => {
|
this.html.find('.fatigue-moins').click(async event => {
|
||||||
this.actor.santeIncDec("fatigue", -1);
|
this.actor.santeIncDec("fatigue", -1);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
isCompetenceAffichable(competence) {
|
||||||
|
return !this.options.showCompNiveauBase || !RdDItemCompetence.isNiveauBase(competence);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
async _onDropActor(event, dragData) {
|
||||||
|
const dropActor = fromUuidSync(dragData.uuid);
|
||||||
|
this.actor.addSubActeur(dropActor);
|
||||||
|
super._onDropActor(event, dragData);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
async _onDropItem(event, dragData) {
|
||||||
|
const destItemId = this.html.find(event.target)?.closest('.item').attr('data-item-id')
|
||||||
|
const dropParams = RdDSheetUtility.prepareItemDropParameters(destItemId, this.actor, dragData, this.objetVersConteneur)
|
||||||
|
if (dropParams) {
|
||||||
|
const callSuper = await this.actor.processDropItem(dropParams)
|
||||||
|
if (callSuper) {
|
||||||
|
await super._onDropItem(event, dragData)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
async createItem(name, type) {
|
||||||
|
await this.actor.createEmbeddedDocuments('Item', [{ name: name, type: type }], { renderSheet: true });
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
async createEmptyTache() {
|
||||||
|
await this.createItem('Nouvelle tache', 'tache');
|
||||||
|
}
|
||||||
|
|
||||||
_optionRecherche(target) {
|
_optionRecherche(target) {
|
||||||
if (!target.value?.length){
|
if (!target.value?.length){
|
||||||
return undefined;
|
return undefined;
|
||||||
@@ -547,7 +528,7 @@ export class RdDActorSheet extends ActorSheet {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_getEventArmeCombat(event) {
|
_getEventArmeCombat(event) {
|
||||||
const li = $(event.currentTarget)?.parents(".item");
|
const li = this.html.find(event.currentTarget)?.parents(".item");
|
||||||
let armeName = li.data("arme-name");
|
let armeName = li.data("arme-name");
|
||||||
let compName = li.data('competence-name');
|
let compName = li.data('competence-name');
|
||||||
const arme = this.armesList.find(a => a.name == armeName && a.system.competence == compName);
|
const arme = this.armesList.find(a => a.name == armeName && a.system.competence == compName);
|
||||||
|
|||||||
@@ -22,16 +22,16 @@ export class RdDActorVehiculeSheet extends RdDActorSheet {
|
|||||||
super.activateListeners(html);
|
super.activateListeners(html);
|
||||||
if (!this.options.editable) return;
|
if (!this.options.editable) return;
|
||||||
|
|
||||||
html.find('.resistance-moins').click(async event => {
|
this.html.find('.resistance-moins').click(async event => {
|
||||||
this.actor.vehicleIncDec("resistance", -1);
|
this.actor.vehicleIncDec("resistance", -1);
|
||||||
});
|
});
|
||||||
html.find('.resistance-plus').click(async event => {
|
this.html.find('.resistance-plus').click(async event => {
|
||||||
this.actor.vehicleIncDec("resistance", 1);
|
this.actor.vehicleIncDec("resistance", 1);
|
||||||
});
|
});
|
||||||
html.find('.structure-moins').click(async event => {
|
this.html.find('.structure-moins').click(async event => {
|
||||||
this.actor.vehicleIncDec("structure", -1);
|
this.actor.vehicleIncDec("structure", -1);
|
||||||
});
|
});
|
||||||
html.find('.structure-plus').click(async event => {
|
this.html.find('.structure-plus').click(async event => {
|
||||||
this.actor.vehicleIncDec("structure", 1);
|
this.actor.vehicleIncDec("structure", 1);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
370
module/actor.js
@@ -150,17 +150,6 @@ export class RdDActor extends Actor {
|
|||||||
this.computeEtatGeneral();
|
this.computeEtatGeneral();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
|
||||||
setRollWindowsOpened(flag) {
|
|
||||||
// TODO: résoudre le souci lié aux ids dans les fenêtres roll
|
|
||||||
this.rollWindowsOpened = flag;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
|
||||||
isRollWindowsOpened() {
|
|
||||||
return this.rollWindowsOpened;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
_prepareCreatureData(actorData) {
|
_prepareCreatureData(actorData) {
|
||||||
this.computeEncombrementTotalEtMalusArmure();
|
this.computeEncombrementTotalEtMalusArmure();
|
||||||
@@ -250,7 +239,7 @@ export class RdDActor extends Actor {
|
|||||||
}
|
}
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
getReveActuel() {
|
getReveActuel() {
|
||||||
switch(this.type) {
|
switch (this.type) {
|
||||||
case 'personnage':
|
case 'personnage':
|
||||||
return Misc.toInt(this.system.reve?.reve?.value ?? this.carac.reve.value);
|
return Misc.toInt(this.system.reve?.reve?.value ?? this.carac.reve.value);
|
||||||
case 'creature':
|
case 'creature':
|
||||||
@@ -258,7 +247,7 @@ export class RdDActor extends Actor {
|
|||||||
return Misc.toInt(this.system.carac.reve?.value)
|
return Misc.toInt(this.system.carac.reve?.value)
|
||||||
case 'vehicule':
|
case 'vehicule':
|
||||||
default:
|
default:
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -400,8 +389,8 @@ export class RdDActor extends Actor {
|
|||||||
return duplicate(possessions[0]);
|
return duplicate(possessions[0]);
|
||||||
}
|
}
|
||||||
const draconics = [...this.getDraconicList().filter(it => it.system.niveau >= 0),
|
const draconics = [...this.getDraconicList().filter(it => it.system.niveau >= 0),
|
||||||
POSSESSION_SANS_DRACONIC]
|
POSSESSION_SANS_DRACONIC]
|
||||||
.sort(Misc.descending(it => it.system.niveau));
|
.sort(Misc.descending(it => it.system.niveau));
|
||||||
return duplicate(draconics[0]);
|
return duplicate(draconics[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -601,11 +590,14 @@ export class RdDActor extends Actor {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async _jetRecuperationConstitution(bonusSoins, message = undefined) {
|
async _jetRecuperationConstitution(bonusSoins, message = undefined) {
|
||||||
const tData = this.system;
|
let difficulte = Misc.toInt(bonusSoins) + Math.min(0, this.system.sante.vie.value - this.system.sante.vie.max);
|
||||||
let difficulte = Misc.toInt(bonusSoins) + Math.min(0, tData.sante.vie.value - tData.sante.vie.max);
|
let rolled = await RdDResolutionTable.roll(this.system.carac.constitution.value, difficulte);
|
||||||
let rolled = await RdDResolutionTable.roll(tData.carac.constitution.value, difficulte);
|
|
||||||
if (message) {
|
if (message) {
|
||||||
message.content += RdDResolutionTable.explain(rolled).replace(/Jet :/, "Constitution :");
|
message.content = await renderTemplate("systems/foundryvtt-reve-de-dragon/templates/roll/explain.hbs", {
|
||||||
|
actor: this,
|
||||||
|
carac: this.system.carac.constitution,
|
||||||
|
rolled
|
||||||
|
})
|
||||||
}
|
}
|
||||||
return rolled;
|
return rolled;
|
||||||
}
|
}
|
||||||
@@ -620,18 +612,18 @@ export class RdDActor extends Actor {
|
|||||||
content: 'Remise à neuf de ' + this.name
|
content: 'Remise à neuf de ' + this.name
|
||||||
});
|
});
|
||||||
const updates = {
|
const updates = {
|
||||||
'system.sante.endurance.value' : this.system.sante.endurance.max
|
'system.sante.endurance.value': this.system.sante.endurance.max
|
||||||
};
|
};
|
||||||
if (!this.isEntite([ENTITE_INCARNE, ENTITE_BLURETTE])) {
|
if (!this.isEntite([ENTITE_INCARNE, ENTITE_BLURETTE])) {
|
||||||
if (this.system.blessures) {
|
if (this.system.blessures) {
|
||||||
updates['system.blessures.legeres.liste'] = [PAS_DE_BLESSURE, PAS_DE_BLESSURE, PAS_DE_BLESSURE, PAS_DE_BLESSURE, PAS_DE_BLESSURE];
|
updates['system.blessures.legeres.liste'] = [PAS_DE_BLESSURE, PAS_DE_BLESSURE, PAS_DE_BLESSURE, PAS_DE_BLESSURE, PAS_DE_BLESSURE];
|
||||||
updates['system.blessures.graves.liste'] = [PAS_DE_BLESSURE, PAS_DE_BLESSURE];
|
updates['system.blessures.graves.liste'] = [PAS_DE_BLESSURE, PAS_DE_BLESSURE];
|
||||||
updates['system.blessures.critiques.liste'] = [PAS_DE_BLESSURE];
|
updates['system.blessures.critiques.liste'] = [PAS_DE_BLESSURE];
|
||||||
}
|
}
|
||||||
updates['system.sante.vie.value'] = this.system.sante.vie.max;
|
updates['system.sante.vie.value'] = this.system.sante.vie.max;
|
||||||
updates['system.sante.fatigue.value'] = 0;
|
updates['system.sante.fatigue.value'] = 0;
|
||||||
if (this.isPersonnage()) {
|
if (this.isPersonnage()) {
|
||||||
updates['system.compteurs.ethylisme'] = { value:1, nb_doses: 0, jet_moral: false};
|
updates['system.compteurs.ethylisme'] = { value: 1, nb_doses: 0, jet_moral: false };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
await this.update(updates);
|
await this.update(updates);
|
||||||
@@ -809,8 +801,7 @@ export class RdDActor extends Actor {
|
|||||||
name: 'maitrise',
|
name: 'maitrise',
|
||||||
label: 'Maîtriser le Rêve de Dragon',
|
label: 'Maîtriser le Rêve de Dragon',
|
||||||
callbacks: [
|
callbacks: [
|
||||||
{ action: async r =>
|
{ action: async r => this.resultCombatReveDeDragon(r) }
|
||||||
this.resultCombatReveDeDragon(r) }
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
@@ -829,11 +820,12 @@ export class RdDActor extends Actor {
|
|||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async sortMisEnReserve(sort, draconic, coord, ptreve) {
|
async sortMisEnReserve(sort, draconic, coord, ptreve) {
|
||||||
await this.createEmbeddedDocuments("Item", [{
|
await this.createEmbeddedDocuments("Item", [{
|
||||||
type: 'sortreserve',
|
type: 'sortreserve',
|
||||||
name: sort.name,
|
name: sort.name,
|
||||||
img: sort.img,
|
img: sort.img,
|
||||||
system: { sortid: sort._id, draconic: (draconic?.name ?? sort.system.draconic), ptreve: ptreve, coord: coord, heurecible: 'Vaisseau' } }],
|
system: { sortid: sort._id, draconic: (draconic?.name ?? sort.system.draconic), ptreve: ptreve, coord: coord, heurecible: 'Vaisseau' }
|
||||||
{ renderSheet: false});
|
}],
|
||||||
|
{ renderSheet: false });
|
||||||
this.currentTMR.updateTokens();
|
this.currentTMR.updateTokens();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -923,7 +915,7 @@ export class RdDActor extends Actor {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const xpUtilise = Math.max(0, Math.min(stress, xpRequis));
|
const xpUtilise = Math.max(0, Math.min(stress, xpRequis));
|
||||||
const gainNiveau = (xpUtilise >= xpRequis || xpRequis <=0) ? 1 : 0;
|
const gainNiveau = (xpUtilise >= xpRequis || xpRequis <= 0) ? 1 : 0;
|
||||||
const nouveauNiveau = niveau + gainNiveau;
|
const nouveauNiveau = niveau + gainNiveau;
|
||||||
const nouveauXp = gainNiveau > 0 ? Math.max(competence.system.xp - xpSuivant, 0) : (competence.system.xp + xpUtilise);
|
const nouveauXp = gainNiveau > 0 ? Math.max(competence.system.xp - xpSuivant, 0) : (competence.system.xp + xpUtilise);
|
||||||
await competence.update({
|
await competence.update({
|
||||||
@@ -1158,7 +1150,7 @@ export class RdDActor extends Actor {
|
|||||||
await this.updateEmbeddedDocuments('Item', [{
|
await this.updateEmbeddedDocuments('Item', [{
|
||||||
_id: conteneur.id,
|
_id: conteneur.id,
|
||||||
'system.contenu': [...conteneur.system.contenu, item.id]
|
'system.contenu': [...conteneur.system.contenu, item.id]
|
||||||
}]);
|
}]);
|
||||||
onAjouterDansConteneur(item.id, conteneur.id);
|
onAjouterDansConteneur(item.id, conteneur.id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1209,7 +1201,7 @@ export class RdDActor extends Actor {
|
|||||||
const cible = this.getContenantOrParent(dest);
|
const cible = this.getContenantOrParent(dest);
|
||||||
const [empilable, message] = item.isInventaireEmpilable(dest);
|
const [empilable, message] = item.isInventaireEmpilable(dest);
|
||||||
if (empilable) {
|
if (empilable) {
|
||||||
await this.regrouperEquipementsSimilaires(item, dest);
|
await dest.empiler(item)
|
||||||
result = false;
|
result = false;
|
||||||
}
|
}
|
||||||
// changer de conteneur
|
// changer de conteneur
|
||||||
@@ -1309,11 +1301,6 @@ export class RdDActor extends Actor {
|
|||||||
return itemMap;
|
return itemMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
async regrouperEquipementsSimilaires(item, dest) {
|
|
||||||
await dest.quantiteIncDec(item.system.quantite);
|
|
||||||
await item.delete();
|
|
||||||
}
|
|
||||||
|
|
||||||
isSurenc() {
|
isSurenc() {
|
||||||
return this.isPersonnage() ? (this.computeMalusSurEncombrement() < 0) : false
|
return this.isPersonnage() ? (this.computeMalusSurEncombrement() < 0) : false
|
||||||
}
|
}
|
||||||
@@ -1374,8 +1361,8 @@ export class RdDActor extends Actor {
|
|||||||
async computeMalusArmure() {
|
async computeMalusArmure() {
|
||||||
if (this.isPersonnage()) {
|
if (this.isPersonnage()) {
|
||||||
const malusArmure = this.filterItems(it => it.type == 'armure' && it.system.equipe)
|
const malusArmure = this.filterItems(it => it.type == 'armure' && it.system.equipe)
|
||||||
.map(it => it.system.malus ?? 0)
|
.map(it => it.system.malus ?? 0)
|
||||||
.reduce(Misc.sum(), 0);
|
.reduce(Misc.sum(), 0);
|
||||||
// Mise à jour éventuelle du malus armure
|
// Mise à jour éventuelle du malus armure
|
||||||
if (this.system.attributs?.malusarmure?.value != malusArmure) {
|
if (this.system.attributs?.malusarmure?.value != malusArmure) {
|
||||||
await this.updateAttributeValue("malusarmure", malusArmure);
|
await this.updateAttributeValue("malusarmure", malusArmure);
|
||||||
@@ -1568,7 +1555,7 @@ export class RdDActor extends Actor {
|
|||||||
async deleteTMRRencontreAtPosition() {
|
async deleteTMRRencontreAtPosition() {
|
||||||
const demiReve = this.getDemiReve()
|
const demiReve = this.getDemiReve()
|
||||||
let rencontreIds = this.items.filter(it => it.type == 'rencontre' && it.system.coord == demiReve).map(it => it.id);
|
let rencontreIds = this.items.filter(it => it.type == 'rencontre' && it.system.coord == demiReve).map(it => it.id);
|
||||||
if (rencontreIds.length>0) {
|
if (rencontreIds.length > 0) {
|
||||||
await this.deleteEmbeddedDocuments('Item', rencontreIds);
|
await this.deleteEmbeddedDocuments('Item', rencontreIds);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1576,7 +1563,7 @@ export class RdDActor extends Actor {
|
|||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async addTMRRencontre(currentRencontre) {
|
async addTMRRencontre(currentRencontre) {
|
||||||
const toCreate = currentRencontre.toObject();
|
const toCreate = currentRencontre.toObject();
|
||||||
console.log('actor.addTMRRencontre(', toCreate,')');
|
console.log('actor.addTMRRencontre(', toCreate, ')');
|
||||||
this.createEmbeddedDocuments('Item', [toCreate]);
|
this.createEmbeddedDocuments('Item', [toCreate]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1813,7 +1800,7 @@ export class RdDActor extends Actor {
|
|||||||
const value = this.system.etat[name].value;
|
const value = this.system.etat[name].value;
|
||||||
const max = this.system.etat[name].max;
|
const max = this.system.etat[name].max;
|
||||||
const newValue = value + inc;
|
const newValue = value + inc;
|
||||||
if (0 <= newValue && newValue <=max) {
|
if (0 <= newValue && newValue <= max) {
|
||||||
await this.update({ [`system.etat.${name}.value`]: newValue })
|
await this.update({ [`system.etat.${name}.value`]: newValue })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1949,25 +1936,33 @@ export class RdDActor extends Actor {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async actionItem(item, onActionItem = async () => { }) {
|
async actionItem(item, onActionItem = async () => { }) {
|
||||||
if (!item.getActionPrincipale()) return;
|
item.actionPrincipale(this, onActionItem);
|
||||||
switch (item.type) {
|
|
||||||
case 'nourritureboisson': return await this.actionNourritureboisson(item, onActionItem);
|
|
||||||
case 'potion': return await this.consommerPotion(item, onActionItem);
|
|
||||||
case 'livre': return await this.actionLire(item);
|
|
||||||
case 'conteneur': return await item.sheet.render(true);
|
|
||||||
case 'herbe': {
|
|
||||||
if (item.isHerbeAPotion()) {
|
|
||||||
return this.dialogFabriquerPotion(item);
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
case 'queue': case 'ombre': return await this.actionRefoulement(item);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async actionNourritureboisson(item, onActionItem) {
|
async actionNourritureboisson(item, onActionItem) {
|
||||||
const dialog = await DialogConsommer.create(this, item, onActionItem);
|
switch (item.isComestible()) {
|
||||||
dialog.render(true);
|
case 'brut': {
|
||||||
|
let d = new Dialog({
|
||||||
|
title: "Nourriture brute",
|
||||||
|
content: `Que faire de votre ${item.name}`,
|
||||||
|
buttons: {
|
||||||
|
'cuisiner': { icon: '<i class="fas fa-check"></i>', label: 'Cuisiner', callback: async () => await this.preparerNourriture(item) },
|
||||||
|
'manger': { icon: '<i class="fas fa-check"></i>', label: 'Manger cru', callback: async () => await this.mangerNourriture(item, onActionItem) }
|
||||||
|
}
|
||||||
|
});
|
||||||
|
d.render(true);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
case 'pret':
|
||||||
|
await this.mangerNourriture(item, onActionItem);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
async mangerNourriture(item, onActionItem) {
|
||||||
|
return (await DialogConsommer.create(this, item, onActionItem)).render(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
async actionLire(item) {
|
async actionLire(item) {
|
||||||
@@ -1976,11 +1971,18 @@ export class RdDActor extends Actor {
|
|||||||
await this.rollTache(tache.id);
|
await this.rollTache(tache.id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
async actionHerbe(item) {
|
||||||
|
if (item.isHerbeAPotion()) {
|
||||||
|
return this.dialogFabriquerPotion(item);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async consommer(item, choix) {
|
async consommer(item, choix) {
|
||||||
switch (item.type) {
|
switch (item.type) {
|
||||||
case 'nourritureboisson':
|
case 'nourritureboisson':
|
||||||
|
case 'herbe': case 'faune':
|
||||||
return await this.consommerNourritureboisson(item.id, choix);
|
return await this.consommerNourritureboisson(item.id, choix);
|
||||||
case 'potion':
|
case 'potion':
|
||||||
return await this.consommerPotion(item)
|
return await this.consommerPotion(item)
|
||||||
@@ -1988,18 +1990,18 @@ export class RdDActor extends Actor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async consommerNourritureboisson(itemId, choix = { doses: 1, seForcer: false, supprimerSiZero: false}, userId = undefined) {
|
async consommerNourritureboisson(itemId, choix = { doses: 1, seForcer: false, supprimerSiZero: false }, userId = undefined) {
|
||||||
if (userId != undefined && userId != game.user.id) {
|
if (userId != undefined && userId != game.user.id) {
|
||||||
RdDActor.remoteActorCall({
|
RdDActor.remoteActorCall({
|
||||||
actorId: this.id,
|
actorId: this.id,
|
||||||
method: 'consommerNourritureboisson',
|
method: 'consommerNourritureboisson',
|
||||||
args: [itemId, choix, userId]
|
args: [itemId, choix, userId]
|
||||||
},
|
},
|
||||||
userId)
|
userId)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const item = this.getObjet(itemId)
|
const item = this.getObjet(itemId)
|
||||||
if (item.type != 'nourritureboisson') {
|
if (!item.isComestible()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (choix.doses > item.system.quantite) {
|
if (choix.doses > item.system.quantite) {
|
||||||
@@ -2297,9 +2299,9 @@ export class RdDActor extends Actor {
|
|||||||
if (xpData) {
|
if (xpData) {
|
||||||
const content = await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-actor-gain-xp.html`, xpData);
|
const content = await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-actor-gain-xp.html`, xpData);
|
||||||
if (hideChatMessage) {
|
if (hideChatMessage) {
|
||||||
ChatUtility.blindMessageToGM({ content: content});
|
ChatUtility.blindMessageToGM({ content: content });
|
||||||
}
|
}
|
||||||
else{
|
else {
|
||||||
ChatMessage.create({
|
ChatMessage.create({
|
||||||
whisper: ChatUtility.getWhisperRecipientsAndGMs(this.name),
|
whisper: ChatUtility.getWhisperRecipientsAndGMs(this.name),
|
||||||
content: content
|
content: content
|
||||||
@@ -2583,7 +2585,7 @@ export class RdDActor extends Actor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async rollCompetence(idOrName, options = {tryTarget: true}) {
|
async rollCompetence(idOrName, options = { tryTarget: true }) {
|
||||||
let rollData = {
|
let rollData = {
|
||||||
carac: this.system.carac,
|
carac: this.system.carac,
|
||||||
competence: this.getCompetence(idOrName)
|
competence: this.getCompetence(idOrName)
|
||||||
@@ -2591,14 +2593,14 @@ export class RdDActor extends Actor {
|
|||||||
if (rollData.competence.type == 'competencecreature') {
|
if (rollData.competence.type == 'competencecreature') {
|
||||||
if (rollData.competence.system.iscombat && options.tryTarget && Targets.hasTargets()) {
|
if (rollData.competence.system.iscombat && options.tryTarget && Targets.hasTargets()) {
|
||||||
Targets.selectOneToken(target => {
|
Targets.selectOneToken(target => {
|
||||||
if (rollData.competence.system.ispossession) {
|
if (rollData.competence.system.ispossession) {
|
||||||
RdDPossession.onAttaquePossession(target, this, rollData.competence)
|
RdDPossession.onAttaquePossession(target, this, rollData.competence)
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
const arme = RdDItemCompetenceCreature.armeNaturelle(rollData.competence)
|
const arme = RdDItemCompetenceCreature.armeNaturelle(rollData.competence)
|
||||||
RdDCombat.rddCombatTarget(target, this).attaque(competence, arme)
|
RdDCombat.rddCombatTarget(target, this).attaque(competence, arme)
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// Transformer la competence de créature
|
// Transformer la competence de créature
|
||||||
@@ -2705,14 +2707,15 @@ export class RdDActor extends Actor {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async _rollArt(artData, selected, oeuvre, callBackResult = r => this._resultArt(r)) {
|
async _rollArt(artData, selected, oeuvre, callBackResult = r => this._resultArt(r)) {
|
||||||
|
oeuvre.system.niveau = oeuvre.system.niveau ?? 0;
|
||||||
mergeObject(artData,
|
mergeObject(artData,
|
||||||
{
|
{
|
||||||
oeuvre: oeuvre,
|
oeuvre: oeuvre,
|
||||||
art: oeuvre.type,
|
art: oeuvre.type,
|
||||||
competence: duplicate(this.getCompetence(artData.compName ?? oeuvre.system.competence ?? artData.art)),
|
competence: duplicate(this.getCompetence(artData.compName ?? oeuvre.system.competence ?? artData.art)),
|
||||||
diffLibre: - (oeuvre.system.niveau ?? 0),
|
diffLibre: - oeuvre.system.niveau,
|
||||||
diffConditions: 0,
|
diffConditions: 0,
|
||||||
use: { libre: false, conditions: true },
|
use: { libre: false, conditions: true, surenc: false },
|
||||||
selectedCarac: duplicate(this.system.carac[selected])
|
selectedCarac: duplicate(this.system.carac[selected])
|
||||||
},
|
},
|
||||||
{ overwrite: false });
|
{ overwrite: false });
|
||||||
@@ -2721,8 +2724,6 @@ export class RdDActor extends Actor {
|
|||||||
artData.forceCarac = {};
|
artData.forceCarac = {};
|
||||||
artData.forceCarac[selected] = duplicate(this.system.carac[selected]);
|
artData.forceCarac[selected] = duplicate(this.system.carac[selected]);
|
||||||
}
|
}
|
||||||
console.log("rollArt !!!", artData);
|
|
||||||
|
|
||||||
const dialog = await RdDRoll.create(this, artData,
|
const dialog = await RdDRoll.create(this, artData,
|
||||||
{ html: `systems/foundryvtt-reve-de-dragon/templates/dialog-roll-${oeuvre.type}.html` },
|
{ html: `systems/foundryvtt-reve-de-dragon/templates/dialog-roll-${oeuvre.type}.html` },
|
||||||
{
|
{
|
||||||
@@ -2739,8 +2740,9 @@ export class RdDActor extends Actor {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async _resultArt(artData) {
|
async _resultArt(artData) {
|
||||||
const baseQualite = (artData.rolled.isSuccess ? artData.oeuvre.system.niveau : artData.competence.system.niveau);
|
const niveau = artData.oeuvre.system.niveau ?? 0;
|
||||||
artData.qualiteFinale = Math.min(baseQualite, artData.oeuvre.system.niveau) + artData.rolled.ptQualite;
|
const baseQualite = (artData.rolled.isSuccess ? niveau : artData.competence.system.niveau);
|
||||||
|
artData.qualiteFinale = Math.min(baseQualite, niveau) + artData.rolled.ptQualite;
|
||||||
|
|
||||||
await RdDResolutionTable.displayRollData(artData, this.name, `chat-resultat-${artData.art}.html`);
|
await RdDResolutionTable.displayRollData(artData, this.name, `chat-resultat-${artData.art}.html`);
|
||||||
}
|
}
|
||||||
@@ -2794,32 +2796,64 @@ export class RdDActor extends Actor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async _resultRecetteCuisine(artData) {
|
async _resultRecetteCuisine(cuisine) {
|
||||||
const baseQualite = (artData.rolled.isSuccess ? artData.oeuvre.system.niveau : artData.competence.system.niveau);
|
const niveauRecette = cuisine.oeuvre.system.niveau ?? 0;
|
||||||
const sust = artData.oeuvre.system.sust * artData.proportions;
|
const baseQualite = (cuisine.rolled.isSuccess ? niveauRecette : cuisine.competence.system.niveau);
|
||||||
artData.qualiteFinale = Math.min(baseQualite, artData.oeuvre.system.niveau) + artData.rolled.ptQualite;
|
cuisine.qualiteFinale = Math.min(baseQualite, niveauRecette) + cuisine.rolled.ptQualite;
|
||||||
artData.exotismeFinal = Math.min(Math.min(artData.qualiteFinale, artData.oeuvre.system.exotisme ?? 0), 0);
|
cuisine.exotismeFinal = Math.min(Math.min(cuisine.qualiteFinale, cuisine.oeuvre.system.exotisme ?? 0), 0);
|
||||||
//console.log("OEUVRE", artData.art, artData)
|
cuisine.sust = cuisine.oeuvre.system.sust * Math.min(cuisine.proportions, cuisine.proportionsMax ?? cuisine.proportions)
|
||||||
const platCuisine = {
|
const platCuisine = {
|
||||||
name: artData.oeuvre.name,
|
name: cuisine.oeuvre.name,
|
||||||
type: 'nourritureboisson',
|
type: 'nourritureboisson',
|
||||||
img: 'systems/foundryvtt-reve-de-dragon/icons/objets/provision_cuite.webp',
|
img: 'systems/foundryvtt-reve-de-dragon/icons/objets/provision_cuite.webp',
|
||||||
system: {
|
system: {
|
||||||
"description": artData.oeuvre.system.description,
|
"description": cuisine.oeuvre.system.description,
|
||||||
"sust": Math.min(sust, 1),
|
"sust": 1,
|
||||||
"qualite": artData.qualiteFinale,
|
"qualite": cuisine.qualiteFinale,
|
||||||
"exotisme": artData.exotismeFinal,
|
"exotisme": cuisine.exotismeFinal,
|
||||||
"encombrement": 0.1,
|
"encombrement": 0.1,
|
||||||
"quantite": Math.max(1, Math.floor(sust)),
|
"quantite": Math.max(1, Math.floor(cuisine.sust)),
|
||||||
"cout": Math.max(artData.qualiteFinale) * 0.01
|
"cout": Math.max(cuisine.qualiteFinale) * 0.01
|
||||||
}
|
}
|
||||||
};
|
}
|
||||||
if (artData.ajouterEquipement) {
|
if (cuisine.ajouterEquipement) {
|
||||||
await this.createEmbeddedDocuments('Item', [platCuisine]);
|
await this.createEmbeddedDocuments('Item', [platCuisine]);
|
||||||
ui.notifications.info(`${platCuisine.system.quantite} rations de ${platCuisine.name} ont été ajoutés à votre équipement`);
|
ui.notifications.info(`${platCuisine.system.quantite} rations de ${platCuisine.name} ont été ajoutés à votre équipement`);
|
||||||
}
|
}
|
||||||
artData.platCuisine = platCuisine;
|
cuisine.platCuisine = platCuisine;
|
||||||
await RdDResolutionTable.displayRollData(artData, this.name, `chat-resultat-${artData.art}.html`);
|
await RdDResolutionTable.displayRollData(cuisine, this.name, `chat-resultat-${cuisine.art}.html`);
|
||||||
|
}
|
||||||
|
|
||||||
|
async preparerNourriture(item) {
|
||||||
|
if (item.isComestible() == 'brut') {
|
||||||
|
const nourriture = {
|
||||||
|
name: 'Plat de ' + item.name,
|
||||||
|
type: 'recettecuisine',
|
||||||
|
img: item.img,
|
||||||
|
system: {
|
||||||
|
sust: 1,
|
||||||
|
exotisme: item.system.exotisme,
|
||||||
|
ingredients: item.name
|
||||||
|
}
|
||||||
|
};
|
||||||
|
const artData = {
|
||||||
|
verbe: 'Préparer',
|
||||||
|
compName: 'cuisine',
|
||||||
|
proportions: 1,
|
||||||
|
proportionsMax: Math.min(50, item.system.sust),
|
||||||
|
ajouterEquipement: true
|
||||||
|
};
|
||||||
|
await this._rollArt(artData, 'odoratgout', nourriture, async (cuisine) => {
|
||||||
|
await this._resultRecetteCuisine(cuisine);
|
||||||
|
const remaining = Math.max(item.system.quantite - cuisine.proportions, 0);
|
||||||
|
if (remaining > 0) {
|
||||||
|
await item.update({ 'system.quantite': remaining })
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
await this.deleteEmbeddedDocuments('Item', [item.id]);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
@@ -3171,7 +3205,7 @@ export class RdDActor extends Actor {
|
|||||||
|
|
||||||
const caracList = Object.entries(carac);
|
const caracList = Object.entries(carac);
|
||||||
let entry = Misc.findFirstLike(name, caracList, { mapper: it => it[0], description: 'caractéristique' });
|
let entry = Misc.findFirstLike(name, caracList, { mapper: it => it[0], description: 'caractéristique' });
|
||||||
if (!entry || entry.length ==0) {
|
if (!entry || entry.length == 0) {
|
||||||
entry = Misc.findFirstLike(name, caracList, { mapper: it => it[1].label, description: 'caractéristique' });
|
entry = Misc.findFirstLike(name, caracList, { mapper: it => it[1].label, description: 'caractéristique' });
|
||||||
}
|
}
|
||||||
return entry && entry.length > 0 ? carac[entry[0]] : undefined;
|
return entry && entry.length > 0 ? carac[entry[0]] : undefined;
|
||||||
@@ -3207,7 +3241,7 @@ export class RdDActor extends Actor {
|
|||||||
ui.notifications.warn("Vous êtes déja dans les TMR....");
|
ui.notifications.warn("Vous êtes déja dans les TMR....");
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if (mode != 'visu' && this.getEffect(STATUSES.StatusDemiReve)) {
|
if (mode != 'visu' && this.getEffect(STATUSES.StatusDemiReve)) {
|
||||||
ui.notifications.warn("Le joueur ou le MJ est déja dans les Terres Médianes avec ce personnage ! Visualisation uniquement");
|
ui.notifications.warn("Le joueur ou le MJ est déja dans les Terres Médianes avec ce personnage ! Visualisation uniquement");
|
||||||
mode = "visu"; // bascule le mode en visu automatiquement
|
mode = "visu"; // bascule le mode en visu automatiquement
|
||||||
}
|
}
|
||||||
@@ -3265,13 +3299,13 @@ export class RdDActor extends Actor {
|
|||||||
title: 'Ne pas utiliser les automatisation de combat',
|
title: 'Ne pas utiliser les automatisation de combat',
|
||||||
buttonLabel: "Pas d'automatisation",
|
buttonLabel: "Pas d'automatisation",
|
||||||
onAction: async () => {
|
onAction: async () => {
|
||||||
this.rollCompetence(arme.system.competence, {tryTarget: false})
|
this.rollCompetence(arme.system.competence, { tryTarget: false })
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Targets.selectOneToken(target => {
|
Targets.selectOneToken(target => {
|
||||||
if (Targets.isTargetEntite(target)){
|
if (Targets.isTargetEntite(target)) {
|
||||||
ui.notifications.warn(`Vous ne pouvez pas attaquer une entité non incarnée avec votre ${arme.name}!!!!`);
|
ui.notifications.warn(`Vous ne pouvez pas attaquer une entité non incarnée avec votre ${arme.name}!!!!`);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -3380,9 +3414,7 @@ export class RdDActor extends Actor {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async encaisser() {
|
async encaisser() {
|
||||||
let dialogData = { ajustementsEncaissement: RdDUtility.getAjustementsEncaissement() };
|
await RdDEncaisser.encaisser(this);
|
||||||
let html = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/dialog-roll-encaisser.html', dialogData);
|
|
||||||
new RdDEncaisser(html, this).render(true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
@@ -3395,12 +3427,12 @@ export class RdDActor extends Actor {
|
|||||||
|
|
||||||
async validerEncaissement(rollData, show) {
|
async validerEncaissement(rollData, show) {
|
||||||
if (ReglesOptionelles.isUsing('validation-encaissement-gr') && !game.user.isGM) {
|
if (ReglesOptionelles.isUsing('validation-encaissement-gr') && !game.user.isGM) {
|
||||||
RdDActor.remoteActorCall({
|
RdDActor.remoteActorCall({
|
||||||
actorId: this.id,
|
actorId: this.id,
|
||||||
method: 'validerEncaissement',
|
method: 'validerEncaissement',
|
||||||
args: [rollData, show]
|
args: [rollData, show]
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const armure = await this.computeArmure(rollData);
|
const armure = await this.computeArmure(rollData);
|
||||||
if (ReglesOptionelles.isUsing('validation-encaissement-gr')) {
|
if (ReglesOptionelles.isUsing('validation-encaissement-gr')) {
|
||||||
@@ -3558,17 +3590,17 @@ export class RdDActor extends Actor {
|
|||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async accorder(entite, when = 'avant-encaissement') {
|
async accorder(entite, when = 'avant-encaissement') {
|
||||||
if (when != game.settings.get(SYSTEM_RDD, "accorder-entite-cauchemar")
|
if (when != game.settings.get(SYSTEM_RDD, "accorder-entite-cauchemar")
|
||||||
|
|| entite == undefined
|
||||||
|| !entite.isEntite([ENTITE_INCARNE])
|
|| !entite.isEntite([ENTITE_INCARNE])
|
||||||
|| entite.isEntiteAccordee(this)) {
|
|| entite.isEntiteAccordee(this)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
const tplData = this.system;
|
const rolled = await RdDResolutionTable.roll(this.getReveActuel(), - Number(entite.system.carac.niveau.value));
|
||||||
let rolled = await RdDResolutionTable.roll(this.getReveActuel(), - Number(entite.system.carac.niveau.value));
|
|
||||||
const rollData = {
|
const rollData = {
|
||||||
alias: this.name,
|
alias: this.name,
|
||||||
rolled: rolled,
|
rolled: rolled,
|
||||||
entite: entite.name,
|
entite: entite.name,
|
||||||
selectedCarac: tplData.carac.reve
|
selectedCarac: this.system.carac.reve
|
||||||
};
|
};
|
||||||
|
|
||||||
if (rolled.isSuccess) {
|
if (rolled.isSuccess) {
|
||||||
@@ -3610,20 +3642,13 @@ export class RdDActor extends Actor {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
|
||||||
getFortune() {
|
|
||||||
return this.itemTypes['monnaie']
|
|
||||||
.map(m => Number(m.system.cout) * Number(m.system.quantite))
|
|
||||||
.reduce(Misc.sum(), 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async payerSols(depense) {
|
async payerSols(depense) {
|
||||||
depense = Number(depense);
|
depense = Number(depense);
|
||||||
if (depense == 0) {
|
if (depense == 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
let fortune = this.getFortune();
|
let fortune = Monnaie.getFortune(this);
|
||||||
console.log("payer", game.user.character, depense, fortune);
|
console.log("payer", game.user.character, depense, fortune);
|
||||||
let msg = "";
|
let msg = "";
|
||||||
if (fortune >= depense) {
|
if (fortune >= depense) {
|
||||||
@@ -3642,7 +3667,7 @@ export class RdDActor extends Actor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async depenserSols(sols) {
|
async depenserSols(sols) {
|
||||||
let reste = this.getFortune() - Number(sols);
|
let reste = Monnaie.getFortune(this) - Number(sols);
|
||||||
if (reste >= 0) {
|
if (reste >= 0) {
|
||||||
await Monnaie.optimiserFortune(this, reste);
|
await Monnaie.optimiserFortune(this, reste);
|
||||||
}
|
}
|
||||||
@@ -3667,7 +3692,7 @@ export class RdDActor extends Actor {
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
const fromActor = game.actors.get(fromActorId)
|
const fromActor = game.actors.get(fromActorId)
|
||||||
await Monnaie.optimiserFortune(this, sols + this.getFortune());
|
await Monnaie.optimiserFortune(this, sols + Monnaie.getFortune(this));
|
||||||
|
|
||||||
RdDAudio.PlayContextAudio("argent"); // Petit son
|
RdDAudio.PlayContextAudio("argent"); // Petit son
|
||||||
ChatMessage.create({
|
ChatMessage.create({
|
||||||
@@ -3700,50 +3725,31 @@ export class RdDActor extends Actor {
|
|||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const acheteur = achat.acheteurId ? game.actors.get(achat.acheteurId) : undefined;
|
|
||||||
const vendeur = achat.vendeurId ? game.actors.get(achat.vendeurId) : undefined;
|
|
||||||
const vente = achat.vente;
|
|
||||||
const itemId = vente.item._id;
|
|
||||||
const isItemEmpilable = "quantite" in vente.item.system;
|
|
||||||
|
|
||||||
const cout = Number(achat.prixTotal ?? 0);
|
const cout = Number(achat.prixTotal ?? 0);
|
||||||
|
const vente = achat.vente;
|
||||||
|
const acheteur = achat.acheteurId ? game.actors.get(achat.acheteurId) : undefined;
|
||||||
|
const vendeur = achat.vendeurId ? game.actors.get(achat.vendeurId) : undefined;
|
||||||
|
let itemVendu = vendeur?.getObjet(vente.item._id);
|
||||||
|
|
||||||
|
if (vendeur && (itemVendu?.getQuantite() ?? 0) < achat.quantiteTotal) {
|
||||||
|
ChatUtility.notifyUser(achat.userId, 'warn', `Le vendeur n'a plus assez de ${vente.item.name} !`);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (Monnaie.getFortune(acheteur) < Number(cout)) {
|
||||||
|
ChatUtility.notifyUser(achat.userId, 'warn', `Vous n'avez pas assez d'argent pour payer ${Math.ceil(cout / 100)} sols !`);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
achat.quantiteTotal = (achat.choix.nombreLots ?? 1) * (vente.tailleLot);
|
achat.quantiteTotal = (achat.choix.nombreLots ?? 1) * (vente.tailleLot);
|
||||||
if (acheteur) {
|
if (vendeur) {
|
||||||
let resteAcheteur = await acheteur.depenserSols(cout);
|
await vendeur.ajouterSols(cout);
|
||||||
if (resteAcheteur < 0) {
|
await vendeur.decrementerQuantiteItem(itemVendu, achat.quantiteTotal,);
|
||||||
ChatUtility.notifyUser(achat.userId, 'warn', `Vous n'avez pas assez d'argent pour payer ${Math.ceil(cout / 100)} sols !`);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
const itemVendu = vendeur?.getObjet(itemId);
|
|
||||||
if (itemVendu) {
|
|
||||||
if (isItemEmpilable ? (itemVendu.system.quantite < achat.quantiteTotal) : (achat.choix.nombreLots != 1)) {
|
|
||||||
await acheteur?.ajouterSols(cout);
|
|
||||||
ChatUtility.notifyUser(achat.userId, 'warn', `Le vendeur n'a plus assez de ${vente.item.name} !`);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
vendeur.ajouterSols(cout);
|
|
||||||
let resteQuantite = (itemVendu.system.quantite ?? 1) - achat.quantiteTotal;
|
|
||||||
if (resteQuantite == 0) {
|
|
||||||
vendeur.deleteEmbeddedDocuments("Item", [itemId])
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
vendeur.updateEmbeddedDocuments("Item", [{ _id: itemId, 'system.quantite': resteQuantite }]);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (acheteur) {
|
if (acheteur) {
|
||||||
const achatData = {
|
await acheteur.depenserSols(cout);
|
||||||
type: vente.item.type,
|
let createdItemId = await acheteur.creerQuantiteItem(vente.item, achat.quantiteTotal);
|
||||||
img: vente.item.img,
|
await acheteur.consommerNourritureAchetee(achat, vente, createdItemId);
|
||||||
name: vente.item.name,
|
|
||||||
system: mergeObject(vente.item.system, { quantite: isItemEmpilable ? achat.quantiteTotal : undefined }),
|
|
||||||
}
|
|
||||||
let listeAchat = isItemEmpilable ? [achatData] : Array.from({ length: achat.quantiteTotal }, (_, i) => achatData)
|
|
||||||
let items = await acheteur.createEmbeddedDocuments("Item", listeAchat);
|
|
||||||
if (achat.choix.consommer && vente.item.type == 'nourritureboisson') {
|
|
||||||
achat.choix.doses = achat.choix.nombreLots;
|
|
||||||
await acheteur.consommerNourritureboisson(items[0].id, achat.choix, vente.actingUserId);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (cout > 0) {
|
if (cout > 0) {
|
||||||
RdDAudio.PlayContextAudio("argent");
|
RdDAudio.PlayContextAudio("argent");
|
||||||
@@ -3772,6 +3778,42 @@ export class RdDActor extends Actor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async consommerNourritureAchetee(achat, vente, createdItemId) {
|
||||||
|
if (achat.choix.consommer && vente.item.type == 'nourritureboisson' && createdItemId != undefined) {
|
||||||
|
achat.choix.doses = achat.choix.nombreLots;
|
||||||
|
await this.consommerNourritureboisson(createdItemId, achat.choix, vente.actingUserId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async decrementerQuantiteItem(item, quantite) {
|
||||||
|
let resteQuantite = (item.system.quantite ?? 1) - quantite;
|
||||||
|
if (resteQuantite <= 0) {
|
||||||
|
await this.deleteEmbeddedDocuments("Item", [item.id]);
|
||||||
|
if (resteQuantite < 0) {
|
||||||
|
ui.notifications.warn(`La quantité de ${item.name} était insuffisante, l'objet a donc été supprimé`)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (resteQuantite > 0) {
|
||||||
|
await this.updateEmbeddedDocuments("Item", [{ _id: item.id, 'system.quantite': resteQuantite }]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async creerQuantiteItem(item, quantite) {
|
||||||
|
const items = await this.createEmbeddedDocuments("Item", RdDActor.$prepareListeAchat(item, quantite));
|
||||||
|
return items.length > 0 ? items[0].id : undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
static $prepareListeAchat(item, quantite) {
|
||||||
|
const isItemEmpilable = "quantite" in item.system;
|
||||||
|
const achatData = {
|
||||||
|
type: item.type,
|
||||||
|
img: item.img,
|
||||||
|
name: item.name,
|
||||||
|
system: mergeObject(item.system, { quantite: isItemEmpilable ? quantite : undefined }),
|
||||||
|
};
|
||||||
|
return isItemEmpilable ? [achatData] : Array.from({ length: quantite }, (_, i) => achatData);
|
||||||
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async effectuerTacheAlchimie(recetteId, tacheAlchimie, texteTache) {
|
async effectuerTacheAlchimie(recetteId, tacheAlchimie, texteTache) {
|
||||||
let recetteData = this.getItemOfType(recetteId, 'recettealchimique');
|
let recetteData = this.getItemOfType(recetteId, 'recettealchimique');
|
||||||
@@ -3880,7 +3922,7 @@ export class RdDActor extends Actor {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
addSubActeur(subActor) {
|
addSubActeur(subActor) {
|
||||||
if(subActor?.id == this.id){
|
if (subActor?.id == this.id) {
|
||||||
ui.notifications.warn("Vous ne pouvez pas attacher un acteur à lui même")
|
ui.notifications.warn("Vous ne pouvez pas attacher un acteur à lui même")
|
||||||
}
|
}
|
||||||
else if (!subActor?.isOwner) {
|
else if (!subActor?.isOwner) {
|
||||||
@@ -4107,10 +4149,10 @@ export class RdDActor extends Actor {
|
|||||||
}
|
}
|
||||||
console.log("setEffect", statusId, status)
|
console.log("setEffect", statusId, status)
|
||||||
const effect = this.getEffect(statusId);
|
const effect = this.getEffect(statusId);
|
||||||
if (!status && effect){
|
if (!status && effect) {
|
||||||
await this.deleteEmbeddedDocuments('ActiveEffect', [effect.id]);
|
await this.deleteEmbeddedDocuments('ActiveEffect', [effect.id]);
|
||||||
}
|
}
|
||||||
if (status && !effect ) {
|
if (status && !effect) {
|
||||||
await this.createEmbeddedDocuments("ActiveEffect", [StatusEffects.status(statusId)]);
|
await this.createEmbeddedDocuments("ActiveEffect", [StatusEffects.status(statusId)]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -4136,7 +4178,6 @@ export class RdDActor extends Actor {
|
|||||||
await this.checkCompetenceXP(item.name, item.system.xp);
|
await this.checkCompetenceXP(item.name, item.system.xp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async onCreateItem(item, options, id) {
|
async onCreateItem(item, options, id) {
|
||||||
switch (item.type) {
|
switch (item.type) {
|
||||||
@@ -4147,6 +4188,7 @@ export class RdDActor extends Actor {
|
|||||||
await this.onCreateOwnedDraconique(item, options, id);
|
await this.onCreateOwnedDraconique(item, options, id);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
await item.onCreateDecoupeComestible(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
async onDeleteItem(item, options, id) {
|
async onDeleteItem(item, options, id) {
|
||||||
|
|||||||
@@ -62,6 +62,7 @@ export class DialogChronologie extends Dialog {
|
|||||||
|
|
||||||
activateListeners(html) {
|
activateListeners(html) {
|
||||||
super.activateListeners(html);
|
super.activateListeners(html);
|
||||||
|
this.html = html;
|
||||||
}
|
}
|
||||||
|
|
||||||
async ajouter() {
|
async ajouter() {
|
||||||
@@ -74,11 +75,11 @@ export class DialogChronologie extends Dialog {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async forceValidation() {
|
async forceValidation() {
|
||||||
await $("form.rdddialogchrono :input").change();
|
await this.html.find("form.rdddialogchrono :input").change();
|
||||||
}
|
}
|
||||||
|
|
||||||
findJournal() {
|
findJournal() {
|
||||||
const journalId = $("form.rdddialogchrono :input[name='journalId']").val();
|
const journalId = this.html.find("form.rdddialogchrono :input[name='journalId']").val();
|
||||||
const journalEntry = game.journal.get(journalId);
|
const journalEntry = game.journal.get(journalId);
|
||||||
return { journalId, journalEntry };
|
return { journalId, journalEntry };
|
||||||
}
|
}
|
||||||
@@ -89,15 +90,15 @@ export class DialogChronologie extends Dialog {
|
|||||||
|
|
||||||
extractJournalParameters() {
|
extractJournalParameters() {
|
||||||
return {
|
return {
|
||||||
auteur: $("form.rdddialogchrono :input[name='auteur']").val(),
|
auteur: this.html.find("form.rdddialogchrono :input[name='auteur']").val(),
|
||||||
information: $("form.rdddialogchrono :input[name='information']").val(),
|
information: this.html.find("form.rdddialogchrono :input[name='information']").val(),
|
||||||
dateRdD: {
|
dateRdD: {
|
||||||
jour: $("form.rdddialogchrono :input[name='jourRdD']").val(),
|
jour: this.html.find("form.rdddialogchrono :input[name='jourRdD']").val(),
|
||||||
moisRdD: $("form.rdddialogchrono :input[name='dateRdD.moisRdD.key']").val(),
|
moisRdD: this.html.find("form.rdddialogchrono :input[name='dateRdD.moisRdD.key']").val(),
|
||||||
annee: $("form.rdddialogchrono :input[name='dateRdD.annee']").val()
|
annee: this.html.find("form.rdddialogchrono :input[name='dateRdD.annee']").val()
|
||||||
},
|
},
|
||||||
heureRdD: $("form.rdddialogchrono :input[name='heureRdD']").val(),
|
heureRdD: this.html.find("form.rdddialogchrono :input[name='heureRdD']").val(),
|
||||||
dateReel: $("form.rdddialogchrono :input[name='dateReel']").val().replace('T', ' ')
|
dateReel: this.html.find("form.rdddialogchrono :input[name='dateReel']").val().replace('T', ' ')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -37,12 +37,12 @@ export class DialogCreateSigneDraconique extends Dialog {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async _onCreerSigneActeurs() {
|
async _onCreerSigneActeurs() {
|
||||||
await $("[name='signe.system.ephemere']").change();
|
await this.html.find("[name='signe.system.ephemere']").change();
|
||||||
await $(".signe-xp-sort").change();
|
await this.html.find(".signe-xp-sort").change();
|
||||||
this.validerSigne();
|
this.validerSigne();
|
||||||
this.dialogData.actors.filter(it => it.selected)
|
this.dialogData.actors.filter(it => it.selected)
|
||||||
.map(it => game.actors.get(it.id))
|
.map(it => game.actors.get(it.id))
|
||||||
.forEach(actor => this._createSigneForActor(actor, this.dialogData.signe));
|
.forEach(actor => this._createSigneForActor(actor, this.dialogData.signe));
|
||||||
}
|
}
|
||||||
|
|
||||||
async _createSigneForActor(actor, signe) {
|
async _createSigneForActor(actor, signe) {
|
||||||
@@ -57,19 +57,20 @@ export class DialogCreateSigneDraconique extends Dialog {
|
|||||||
}
|
}
|
||||||
|
|
||||||
validerSigne() {
|
validerSigne() {
|
||||||
this.dialogData.signe.name = $("[name='signe.name']").val();
|
this.dialogData.signe.name = this.html.find("[name='signe.name']").val();
|
||||||
this.dialogData.signe.system.valeur.norm = $("[name='signe.system.valeur.norm']").val();
|
this.dialogData.signe.system.valeur.norm = this.html.find("[name='signe.system.valeur.norm']").val();
|
||||||
this.dialogData.signe.system.valeur.sign = $("[name='signe.system.valeur.sign']").val();
|
this.dialogData.signe.system.valeur.sign = this.html.find("[name='signe.system.valeur.sign']").val();
|
||||||
this.dialogData.signe.system.valeur.part = $("[name='signe.system.valeur.part']").val();
|
this.dialogData.signe.system.valeur.part = this.html.find("[name='signe.system.valeur.part']").val();
|
||||||
this.dialogData.signe.system.difficulte = $("[name='signe.system.difficulte']").val();
|
this.dialogData.signe.system.difficulte = this.html.find("[name='signe.system.difficulte']").val();
|
||||||
this.dialogData.signe.system.ephemere = $("[name='signe.system.ephemere']").prop("checked");
|
this.dialogData.signe.system.ephemere = this.html.find("[name='signe.system.ephemere']").prop("checked");
|
||||||
this.dialogData.signe.system.duree = $("[name='signe.system.duree']").val();
|
this.dialogData.signe.system.duree = this.html.find("[name='signe.system.duree']").val();
|
||||||
this.dialogData.signe.system.typesTMR = TMRUtility.buildListTypesTMRSelection(this.dialogData.tmrs);
|
this.dialogData.signe.system.typesTMR = TMRUtility.buildListTypesTMRSelection(this.dialogData.tmrs);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
activateListeners(html) {
|
activateListeners(html) {
|
||||||
super.activateListeners(html);
|
super.activateListeners(html);
|
||||||
|
this.html = html;
|
||||||
this.setEphemere(this.dialogData.signe.system.ephemere);
|
this.setEphemere(this.dialogData.signe.system.ephemere);
|
||||||
html.find(".signe-aleatoire").click(event => this.setSigneAleatoire());
|
html.find(".signe-aleatoire").click(event => this.setSigneAleatoire());
|
||||||
html.find("[name='signe.system.ephemere']").change((event) => this.setEphemere(event.currentTarget.checked));
|
html.find("[name='signe.system.ephemere']").change((event) => this.setEphemere(event.currentTarget.checked));
|
||||||
@@ -81,27 +82,27 @@ export class DialogCreateSigneDraconique extends Dialog {
|
|||||||
async setSigneAleatoire() {
|
async setSigneAleatoire() {
|
||||||
const newSigne = await RdDItemSigneDraconique.randomSigneDraconique({ephemere: true});
|
const newSigne = await RdDItemSigneDraconique.randomSigneDraconique({ephemere: true});
|
||||||
|
|
||||||
$("[name='signe.name']").val(newSigne.name);
|
this.html.find("[name='signe.name']").val(newSigne.name);
|
||||||
$("[name='signe.system.valeur.norm']").val(newSigne.system.valeur.norm);
|
this.html.find("[name='signe.system.valeur.norm']").val(newSigne.system.valeur.norm);
|
||||||
$("[name='signe.system.valeur.sign']").val(newSigne.system.valeur.sign);
|
this.html.find("[name='signe.system.valeur.sign']").val(newSigne.system.valeur.sign);
|
||||||
$("[name='signe.system.valeur.part']").val(newSigne.system.valeur.part);
|
this.html.find("[name='signe.system.valeur.part']").val(newSigne.system.valeur.part);
|
||||||
$("[name='signe.system.difficulte']").val(newSigne.system.difficulte);
|
this.html.find("[name='signe.system.difficulte']").val(newSigne.system.difficulte);
|
||||||
$("[name='signe.system.duree']").val(newSigne.system.duree);
|
this.html.find("[name='signe.system.duree']").val(newSigne.system.duree);
|
||||||
$("[name='signe.system.ephemere']").prop("checked", newSigne.system.ephemere);
|
this.html.find("[name='signe.system.ephemere']").prop("checked", newSigne.system.ephemere);
|
||||||
this.dialogData.tmrs = TMRUtility.buildSelectionTypesTMR(newSigne.system.typesTMR);
|
this.dialogData.tmrs = TMRUtility.buildSelectionTypesTMR(newSigne.system.typesTMR);
|
||||||
this.dialogData.tmrs.forEach(t => {
|
this.dialogData.tmrs.forEach(t => {
|
||||||
$(`[data-tmr-name='${t.name}']`).prop( "checked", t.selected);
|
this.html.find(`[data-tmr-name='${t.name}']`).prop( "checked", t.selected);
|
||||||
})
|
})
|
||||||
this.setEphemere(newSigne.system.ephemere);
|
this.setEphemere(newSigne.system.ephemere);
|
||||||
}
|
}
|
||||||
|
|
||||||
async setEphemere(ephemere) {
|
async setEphemere(ephemere) {
|
||||||
this.dialogData.signe.system.ephemere = ephemere;
|
this.dialogData.signe.system.ephemere = ephemere;
|
||||||
HtmlUtility._showControlWhen($(".signe-system-duree"), ephemere);
|
HtmlUtility._showControlWhen(this.html.find(".signe-system-duree"), ephemere);
|
||||||
}
|
}
|
||||||
|
|
||||||
async onSelectActor(event) {
|
async onSelectActor(event) {
|
||||||
const actorId = $(event.currentTarget)?.data("actor-id");
|
const actorId = this.html.find(event.currentTarget)?.data("actor-id");
|
||||||
const actor = this.dialogData.actors.find(it => it.id == actorId);
|
const actor = this.dialogData.actors.find(it => it.id == actorId);
|
||||||
if (actor) {
|
if (actor) {
|
||||||
actor.selected = event.currentTarget.checked;
|
actor.selected = event.currentTarget.checked;
|
||||||
@@ -109,7 +110,7 @@ export class DialogCreateSigneDraconique extends Dialog {
|
|||||||
}
|
}
|
||||||
|
|
||||||
onSelectTmr(event) {
|
onSelectTmr(event) {
|
||||||
const tmrName = $(event.currentTarget)?.data("tmr-name");
|
const tmrName = this.html.find(event.currentTarget)?.data("tmr-name");
|
||||||
const onTmr = this.tmrs.find(it => it.name == tmrName);
|
const onTmr = this.tmrs.find(it => it.name == tmrName);
|
||||||
if (onTmr){
|
if (onTmr){
|
||||||
onTmr.selected = event.currentTarget.checked;
|
onTmr.selected = event.currentTarget.checked;
|
||||||
|
|||||||
@@ -13,18 +13,12 @@ export class DialogFabriquerPotion extends Dialog {
|
|||||||
}
|
}
|
||||||
let potionData = DialogFabriquerPotion.prepareData(actor, item);
|
let potionData = DialogFabriquerPotion.prepareData(actor, item);
|
||||||
|
|
||||||
let conf = {
|
const html = await renderTemplate(dialogConfig.html, potionData);
|
||||||
title: `Fabriquer une potion de ${potionData.system.categorie}`,
|
|
||||||
content: await renderTemplate(dialogConfig.html, potionData),
|
|
||||||
default: potionData.buttonName,
|
|
||||||
};
|
|
||||||
|
|
||||||
let options = { classes: ["dialogfabriquerpotion"], width: 600, height: 160, 'z-index': 99999 };
|
let options = { classes: ["dialogfabriquerpotion"], width: 600, height: 160, 'z-index': 99999 };
|
||||||
mergeObject(options, dialogConfig.options ?? {}, { overwrite: true })
|
mergeObject(options, dialogConfig.options ?? {}, { overwrite: true })
|
||||||
|
|
||||||
const dialog = new DialogFabriquerPotion(actor, potionData, conf, options);
|
new DialogFabriquerPotion(actor, potionData, html, options).render(true);
|
||||||
dialog.render(true);
|
|
||||||
return dialog;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
@@ -40,10 +34,15 @@ export class DialogFabriquerPotion extends Dialog {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
constructor(actor, potionData, conf, options) {
|
constructor(actor, potionData, html, options) {
|
||||||
conf.buttons = {
|
const conf = {
|
||||||
[potionData.buttonName]: {
|
title: `Fabriquer une potion de ${potionData.system.categorie}`,
|
||||||
label: potionData.buttonName, callback: it => this.onFabriquer(it)
|
content: html,
|
||||||
|
default: 'fabriquer',
|
||||||
|
buttons: {
|
||||||
|
'fabriquer': {
|
||||||
|
label: potionData.buttonName, callback: it => this.onFabriquer(html)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -53,6 +52,24 @@ export class DialogFabriquerPotion extends Dialog {
|
|||||||
this.potionData = potionData;
|
this.potionData = potionData;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
activateListeners(html) {
|
||||||
|
super.activateListeners(html);
|
||||||
|
this.html = html;
|
||||||
|
this.html.find("[name='nbBrins']").change(event => {
|
||||||
|
this.potionData.nbBrins = Misc.toInt(event.currentTarget.value);
|
||||||
|
const brinsManquants = Math.max(0, DialogFabriquerPotion.nombreBrinsOptimal(this.potionData) - this.potionData.nbBrins);
|
||||||
|
this.potionData.herbebonus = Math.max(0, this.potionData.system.niveau - brinsManquants)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
async onFabriquer(html) {
|
||||||
|
await this.html.find("[name='nbBrins']").change();
|
||||||
|
this.actor.fabriquerPotion(this.potionData);
|
||||||
|
this.close();
|
||||||
|
}
|
||||||
|
|
||||||
static nombreBrinsMinimum(herbeData) {
|
static nombreBrinsMinimum(herbeData) {
|
||||||
switch (herbeData.system.categorie ?? '') {
|
switch (herbeData.system.categorie ?? '') {
|
||||||
case "Soin": return 1 + Math.max(0, 12 - 2 * herbeData.system.niveau);
|
case "Soin": return 1 + Math.max(0, 12 - 2 * herbeData.system.niveau);
|
||||||
@@ -68,22 +85,4 @@ export class DialogFabriquerPotion extends Dialog {
|
|||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
|
||||||
activateListeners(html) {
|
|
||||||
super.activateListeners(html);
|
|
||||||
|
|
||||||
html.find("#nbBrins").change(event => {
|
|
||||||
this.potionData.nbBrins = Misc.toInt(event.currentTarget.value);
|
|
||||||
const brinsManquants = Math.max(0, DialogFabriquerPotion.nombreBrinsOptimal(this.potionData) - this.potionData.nbBrins);
|
|
||||||
this.potionData.herbebonus = Math.max(0, this.potionData.system.niveau - brinsManquants)
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
|
||||||
async onFabriquer(it) {
|
|
||||||
await $("#nbBrins").change();
|
|
||||||
this.actor.fabriquerPotion(this.potionData);
|
|
||||||
this.close();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@@ -42,8 +42,7 @@ export class DialogItemAchat extends Dialog {
|
|||||||
|
|
||||||
static async onAcheter(venteData) {
|
static async onAcheter(venteData) {
|
||||||
const html = await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/dialog-item-achat.html`, venteData);
|
const html = await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/dialog-item-achat.html`, venteData);
|
||||||
const dialog = new DialogItemAchat(html, venteData);
|
new DialogItemAchat(html, venteData).render(true);
|
||||||
dialog.render(true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
constructor(html, venteData) {
|
constructor(html, venteData) {
|
||||||
@@ -65,12 +64,11 @@ export class DialogItemAchat extends Dialog {
|
|||||||
};
|
};
|
||||||
|
|
||||||
super(conf, options);
|
super(conf, options);
|
||||||
|
|
||||||
this.venteData = venteData;
|
this.venteData = venteData;
|
||||||
}
|
}
|
||||||
|
|
||||||
async onAchat() {
|
async onAchat() {
|
||||||
await $(".nombreLots").change();
|
await this.html.find(".nombreLots").change();
|
||||||
(this.venteData.vendeur ?? this.venteData.acheteur).achatVente({
|
(this.venteData.vendeur ?? this.venteData.acheteur).achatVente({
|
||||||
userId: game.user.id,
|
userId: game.user.id,
|
||||||
vendeurId: this.venteData.vendeur?.id,
|
vendeurId: this.venteData.vendeur?.id,
|
||||||
@@ -90,9 +88,9 @@ export class DialogItemAchat extends Dialog {
|
|||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
activateListeners(html) {
|
activateListeners(html) {
|
||||||
super.activateListeners(html);
|
super.activateListeners(html);
|
||||||
|
this.html = html;
|
||||||
html.find(".nombreLots").change(event => this.setNombreLots(Number(event.currentTarget.value)));
|
this.html.find(".nombreLots").change(event => this.setNombreLots(Number(event.currentTarget.value)));
|
||||||
html.find(".se-forcer").change(event => this.setSeForcer(event));
|
this.html.find(".se-forcer").change(event => this.setSeForcer(event));
|
||||||
}
|
}
|
||||||
|
|
||||||
setSeForcer(event) {
|
setSeForcer(event) {
|
||||||
@@ -105,8 +103,8 @@ export class DialogItemAchat extends Dialog {
|
|||||||
}
|
}
|
||||||
this.venteData.choix.nombreLots = Math.min(nombreLots, this.venteData.quantiteNbLots);
|
this.venteData.choix.nombreLots = Math.min(nombreLots, this.venteData.quantiteNbLots);
|
||||||
this.venteData.prixTotal = (nombreLots * this.venteData.prixLot).toFixed(2);
|
this.venteData.prixTotal = (nombreLots * this.venteData.prixLot).toFixed(2);
|
||||||
$(".nombreLots").val(this.venteData.choix.nombreLots);
|
this.html.find(".nombreLots").val(this.venteData.choix.nombreLots);
|
||||||
$(".prixTotal").text(this.venteData.prixTotal);
|
this.html.find(".prixTotal").text(this.venteData.prixTotal);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -2,13 +2,13 @@ import { Misc } from "./misc.js";
|
|||||||
|
|
||||||
export class DialogConsommer extends Dialog {
|
export class DialogConsommer extends Dialog {
|
||||||
|
|
||||||
static async create(actor, item, onActionItem = async ()=>{}) {
|
static async create(actor, item, onActionItem = async () => { }) {
|
||||||
const consommerData = DialogConsommer.prepareData(actor, item);
|
const consommerData = DialogConsommer.prepareData(actor, item);
|
||||||
const html = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/dialog-item-consommer.html', consommerData);
|
const html = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/dialog-item-consommer.html', consommerData);
|
||||||
return new DialogConsommer(actor, item, consommerData, html, onActionItem)
|
return new DialogConsommer(actor, item, consommerData, html, onActionItem)
|
||||||
}
|
}
|
||||||
|
|
||||||
constructor(actor, item, consommerData, html, onActionItem = async ()=>{}) {
|
constructor(actor, item, consommerData, html, onActionItem = async () => { }) {
|
||||||
const options = { classes: ["dialogconsommer"], width: 350, height: 'fit-content', 'z-index': 99999 };
|
const options = { classes: ["dialogconsommer"], width: 350, height: 'fit-content', 'z-index': 99999 };
|
||||||
let conf = {
|
let conf = {
|
||||||
title: consommerData.title,
|
title: consommerData.title,
|
||||||
@@ -17,8 +17,9 @@ export class DialogConsommer extends Dialog {
|
|||||||
buttons: {
|
buttons: {
|
||||||
[consommerData.buttonName]: {
|
[consommerData.buttonName]: {
|
||||||
label: consommerData.buttonName, callback: async it => {
|
label: consommerData.buttonName, callback: async it => {
|
||||||
await this.onConsommer(it);
|
await this.onConsommer();
|
||||||
await onActionItem();}
|
await onActionItem();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -30,17 +31,23 @@ export class DialogConsommer extends Dialog {
|
|||||||
this.consommerData = consommerData;
|
this.consommerData = consommerData;
|
||||||
}
|
}
|
||||||
|
|
||||||
async onConsommer(event) {
|
activateListeners(html) {
|
||||||
await $(".se-forcer").change();
|
super.activateListeners(html);
|
||||||
await $(".consommer-doses").change();
|
this.html = html;
|
||||||
|
this.html.find(".se-forcer").change(event => this.setSeForcer(event));
|
||||||
|
this.html.find(".consommer-doses").change(event => this.selectDoses(event));
|
||||||
|
}
|
||||||
|
|
||||||
|
async onConsommer() {
|
||||||
|
await this.html.find(".se-forcer").change();
|
||||||
|
await this.html.find(".consommer-doses").change();
|
||||||
await this.actor.consommer(this.item, this.consommerData.choix);
|
await this.actor.consommer(this.item, this.consommerData.choix);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static prepareData(actor, item) {
|
static prepareData(actor, item) {
|
||||||
item = duplicate(item);
|
|
||||||
let consommerData = {
|
let consommerData = {
|
||||||
item: item,
|
item: duplicate(item),
|
||||||
cuisine: actor.getCompetence('cuisine'),
|
cuisine: actor.getCompetence('cuisine'),
|
||||||
choix: {
|
choix: {
|
||||||
doses: 1,
|
doses: 1,
|
||||||
@@ -48,33 +55,47 @@ export class DialogConsommer extends Dialog {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
switch (item.type) {
|
switch (item.type) {
|
||||||
|
case 'herbe': case 'faune':
|
||||||
|
consommerData.title = 'Manger une portion crue: ';
|
||||||
|
consommerData.buttonName = "Manger";
|
||||||
|
break;
|
||||||
case 'nourritureboisson':
|
case 'nourritureboisson':
|
||||||
consommerData.title = item.system.boisson ? `${item.name}: boire une dose` : `${item.name}: manger une portion`;
|
consommerData.title = item.system.boisson ? 'Boire une dose: ' : 'Manger une portion: ';
|
||||||
consommerData.buttonName = item.system.boisson ? "Boire" : "Manger";
|
consommerData.buttonName = item.system.boisson ? "Boire" : "Manger";
|
||||||
break;
|
break;
|
||||||
case 'potion':
|
case 'potion':
|
||||||
consommerData.title = `${item.name}: boire la potion`;
|
consommerData.title = 'Boire la potion: ';
|
||||||
consommerData.buttonName = "Boire";
|
consommerData.buttonName = "Boire";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
DialogConsommer.calculDoses(consommerData, consommerData.choix.doses)
|
consommerData.title += item.name;
|
||||||
|
DialogConsommer.calculDoses(consommerData, item)
|
||||||
return consommerData;
|
return consommerData;
|
||||||
}
|
}
|
||||||
|
|
||||||
static calculDoses(consommer) {
|
static calculDoses(consommer, item) {
|
||||||
const doses = consommer.choix.doses;
|
const doses = consommer.choix.doses;
|
||||||
consommer.totalSust = Misc.keepDecimals(doses * (consommer.item.system.sust ?? 0), 2);
|
switch (item.type) {
|
||||||
consommer.totalDesaltere = consommer.item.system.boisson
|
case 'herbe': case 'faune':
|
||||||
? Misc.keepDecimals(doses * (consommer.item.system.desaltere ?? 0), 2)
|
consommer.totalSust = doses;
|
||||||
: 0;
|
consommer.totalDesaltere = 0;
|
||||||
}
|
consommer.choix.sust = 1;
|
||||||
|
consommer.choix.quantite = 0;
|
||||||
|
consommer.choix.encombrement = Misc.keepDecimals(consommer.item.system.encombrement / item.system.sust, 2);
|
||||||
/* -------------------------------------------- */
|
return;
|
||||||
activateListeners(html) {
|
case 'nourritureboisson':
|
||||||
super.activateListeners(html);
|
consommer.choix.sust = consommer.item.system.sust;
|
||||||
html.find(".se-forcer").change(event => this.setSeForcer(event));
|
consommer.choix.quantite = doses;
|
||||||
html.find(".consommer-doses").change(event => this.selectDoses(event));
|
consommer.choix.encombrement = 0
|
||||||
|
consommer.totalSust = Misc.keepDecimals(doses * (consommer.item.system.sust ?? 0), 2);
|
||||||
|
consommer.totalDesaltere = consommer.item.system.boisson
|
||||||
|
? Misc.keepDecimals(doses * (consommer.item.system.desaltere ?? 0), 2)
|
||||||
|
: 0;
|
||||||
|
break;
|
||||||
|
case 'potion':
|
||||||
|
consommer.totalSust = 0
|
||||||
|
consommer.totalDesaltere = 0
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -84,8 +105,8 @@ export class DialogConsommer extends Dialog {
|
|||||||
|
|
||||||
selectDoses(event) {
|
selectDoses(event) {
|
||||||
this.consommerData.choix.doses = Number(event.currentTarget.value);
|
this.consommerData.choix.doses = Number(event.currentTarget.value);
|
||||||
DialogConsommer.calculDoses(this.consommerData);
|
DialogConsommer.calculDoses(this.consommerData, this.item);
|
||||||
$(".total-sust").text(this.consommerData.totalSust);
|
this.html.find(".total-sust").text(this.consommerData.totalSust);
|
||||||
$(".total-desaltere").text(this.consommerData.totalDesaltere);
|
this.html.find(".total-desaltere").text(this.consommerData.totalDesaltere);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -37,26 +37,26 @@ export class DialogItemVente extends Dialog {
|
|||||||
this.venteData = venteData;
|
this.venteData = venteData;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
activateListeners(html) {
|
||||||
|
super.activateListeners(html);
|
||||||
|
this.html = html;
|
||||||
|
HtmlUtility._showControlWhen(this.html.find(".quantiteNbLots"), !this.venteData.quantiteIllimite)
|
||||||
|
|
||||||
|
this.html.find(".tailleLot").change(event => this.setTailleLot(Number(event.currentTarget.value)));
|
||||||
|
this.html.find(".quantiteNbLots").change(event => this.setNbLots(Number(event.currentTarget.value)));
|
||||||
|
this.html.find(".quantiteIllimite").change(event => this.setQuantiteIllimite(event.currentTarget.checked));
|
||||||
|
this.html.find(".prixLot").change(event => this.setPrixLot(Number(event.currentTarget.value)));
|
||||||
|
}
|
||||||
|
|
||||||
async onProposer(it) {
|
async onProposer(it) {
|
||||||
await $(".tailleLot").change();
|
await this.html.find(".tailleLot").change();
|
||||||
await $(".quantiteNbLots").change();
|
await this.html.find(".quantiteNbLots").change();
|
||||||
await $(".quantiteIllimite").change();
|
await this.html.find(".quantiteIllimite").change();
|
||||||
await $(".prixLot").change();
|
await this.html.find(".prixLot").change();
|
||||||
this.callback(this.venteData);
|
this.callback(this.venteData);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
activateListeners(html) {
|
|
||||||
super.activateListeners(html);
|
|
||||||
|
|
||||||
HtmlUtility._showControlWhen($(".quantiteNbLots"), !this.venteData.quantiteIllimite)
|
|
||||||
|
|
||||||
html.find(".tailleLot").change(event => this.setTailleLot(Number(event.currentTarget.value)));
|
|
||||||
html.find(".quantiteNbLots").change(event => this.setNbLots(Number(event.currentTarget.value)));
|
|
||||||
html.find(".quantiteIllimite").change(event => this.setQuantiteIllimite(event.currentTarget.checked));
|
|
||||||
html.find(".prixLot").change(event => this.setPrixLot(Number(event.currentTarget.value)));
|
|
||||||
}
|
|
||||||
|
|
||||||
setPrixLot(prixLot) {
|
setPrixLot(prixLot) {
|
||||||
this.venteData.prixLot = prixLot;
|
this.venteData.prixLot = prixLot;
|
||||||
}
|
}
|
||||||
@@ -65,15 +65,15 @@ export class DialogItemVente extends Dialog {
|
|||||||
// recalculer le prix du lot
|
// recalculer le prix du lot
|
||||||
if (tailleLot != this.venteData.tailleLot) {
|
if (tailleLot != this.venteData.tailleLot) {
|
||||||
this.venteData.prixLot = (tailleLot * this.venteData.prixOrigine).toFixed(2);
|
this.venteData.prixLot = (tailleLot * this.venteData.prixOrigine).toFixed(2);
|
||||||
$(".prixLot").val(this.venteData.prixLot);
|
this.html.find(".prixLot").val(this.venteData.prixLot);
|
||||||
}
|
}
|
||||||
this.venteData.tailleLot = tailleLot;
|
this.venteData.tailleLot = tailleLot;
|
||||||
if (this.venteData.isOwned) {
|
if (this.venteData.isOwned) {
|
||||||
// recalculer le nombre de lots max
|
// recalculer le nombre de lots max
|
||||||
this.venteData.quantiteMaxLots = Math.floor(this.venteData.quantiteMax / tailleLot);
|
this.venteData.quantiteMaxLots = Math.floor(this.venteData.quantiteMax / tailleLot);
|
||||||
this.venteData.quantiteNbLots = Math.min(this.venteData.quantiteMaxLots, this.venteData.quantiteNbLots);
|
this.venteData.quantiteNbLots = Math.min(this.venteData.quantiteMaxLots, this.venteData.quantiteNbLots);
|
||||||
$(".quantiteNbLots").val(this.venteData.quantiteNbLots);
|
this.html.find(".quantiteNbLots").val(this.venteData.quantiteNbLots);
|
||||||
$(".quantiteNbLots").attr("max", this.venteData.quantiteMaxLots)
|
this.html.find(".quantiteNbLots").attr("max", this.venteData.quantiteMaxLots)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -82,12 +82,12 @@ export class DialogItemVente extends Dialog {
|
|||||||
nbLots = Math.max(0, Math.min(nbLots, this.venteData.quantiteMaxLots));
|
nbLots = Math.max(0, Math.min(nbLots, this.venteData.quantiteMaxLots));
|
||||||
}
|
}
|
||||||
this.venteData.quantiteNbLots = nbLots;
|
this.venteData.quantiteNbLots = nbLots;
|
||||||
$(".quantiteNbLots").val(this.venteData.quantiteNbLots);
|
this.html.find(".quantiteNbLots").val(this.venteData.quantiteNbLots);
|
||||||
}
|
}
|
||||||
|
|
||||||
setQuantiteIllimite(checked) {
|
setQuantiteIllimite(checked) {
|
||||||
this.venteData.quantiteIllimite = checked;
|
this.venteData.quantiteIllimite = checked;
|
||||||
$(".label-quantiteIllimite").text(this.venteData.quantiteIllimite ? "Illimités" : "disponibles");
|
this.html.find(".label-quantiteIllimite").text(this.venteData.quantiteIllimite ? "Illimités" : "disponibles");
|
||||||
HtmlUtility._showControlWhen($(".quantiteNbLots"), !this.venteData.quantiteIllimite)
|
HtmlUtility._showControlWhen(this.html.find(".quantiteNbLots"), !this.venteData.quantiteIllimite)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -9,7 +9,7 @@ export class DialogRepos extends Dialog {
|
|||||||
}
|
}
|
||||||
|
|
||||||
constructor(html, actor) {
|
constructor(html, actor) {
|
||||||
let options = { classes: ["DialogCreateSigneDraconiqueActorsActors"], width: 500, height: 400, 'z-index': 99999 };
|
let options = { classes: ["DialogCreateSigneDraconiqueActorsActors"], width: 400, height: 'fit-content', 'z-index': 99999 };
|
||||||
let conf = {
|
let conf = {
|
||||||
title: "Se reposer",
|
title: "Se reposer",
|
||||||
content: html,
|
content: html,
|
||||||
@@ -21,13 +21,18 @@ export class DialogRepos extends Dialog {
|
|||||||
super(conf, options);
|
super(conf, options);
|
||||||
this.actor = actor;
|
this.actor = actor;
|
||||||
}
|
}
|
||||||
|
activateListeners(html) {
|
||||||
|
super.activateListeners(html);
|
||||||
|
this.html = html;
|
||||||
|
}
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
|
||||||
async repos() {
|
async repos() {
|
||||||
await $("[name='nb-heures']").change();
|
await this.html.find("[name='nb-heures']").change();
|
||||||
await $("[name='nb-jours']").change();
|
await this.html.find("[name='nb-jours']").change();
|
||||||
const selection = await $("[name='repos']:checked").val();
|
const selection = await this.html.find("[name='repos']:checked").val();
|
||||||
const nbHeures = Number.parseInt(await $("[name='nb-heures']").val());
|
const nbHeures = Number.parseInt(await this.html.find("[name='nb-heures']").val());
|
||||||
const nbJours = Number.parseInt(await $("[name='nb-jours']").val());
|
const nbJours = Number.parseInt(await this.html.find("[name='nb-jours']").val());
|
||||||
switch (selection) {
|
switch (selection) {
|
||||||
case "sieste": {
|
case "sieste": {
|
||||||
await this.actor.dormir(nbHeures);
|
await this.actor.dormir(nbHeures);
|
||||||
@@ -35,7 +40,7 @@ export class DialogRepos extends Dialog {
|
|||||||
}
|
}
|
||||||
case "nuit": {
|
case "nuit": {
|
||||||
let heuresDormies = await this.actor.dormir(nbHeures);
|
let heuresDormies = await this.actor.dormir(nbHeures);
|
||||||
if (heuresDormies == nbHeures){
|
if (heuresDormies == nbHeures) {
|
||||||
await this.actor.dormirChateauDormant();
|
await this.actor.dormirChateauDormant();
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
@@ -49,8 +54,4 @@ export class DialogRepos extends Dialog {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* -------------------------------------------- */
|
|
||||||
activateListeners(html) {
|
|
||||||
super.activateListeners(html);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@@ -20,8 +20,9 @@ export class DialogSelectTarget extends Dialog {
|
|||||||
|
|
||||||
activateListeners(html) {
|
activateListeners(html) {
|
||||||
super.activateListeners(html);
|
super.activateListeners(html);
|
||||||
html.find("li.select-target").click((event) => {
|
this.html = html;
|
||||||
this.targetSelected($(event.currentTarget)?.data("token-id"));
|
this.html.find("li.select-target").click((event) => {
|
||||||
|
this.targetSelected(this.html.find(event.currentTarget)?.data("token-id"));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -12,21 +12,15 @@ export class DialogSplitItem extends Dialog {
|
|||||||
}
|
}
|
||||||
|
|
||||||
constructor(item, splitData, html, callback) {
|
constructor(item, splitData, html, callback) {
|
||||||
let options = { classes: ["dialogsplit"], width: 300, height: 160, 'z-index': 99999 };
|
let options = { classes: ["dialogsplit"], width: 300, height: 'fit-content', 'z-index': 99999 };
|
||||||
|
|
||||||
let conf = {
|
let conf = {
|
||||||
title: "Séparer en deux",
|
title: "Séparer en deux",
|
||||||
content: html,
|
content: html,
|
||||||
default: "separer",
|
default: "separer",
|
||||||
buttons: {
|
buttons: {
|
||||||
"separer": {
|
"separer": { label: "Séparer", callback: it => this.onSplit() }
|
||||||
label: "Séparer", callback: it => {
|
|
||||||
this.onSplit();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
super(conf, options);
|
super(conf, options);
|
||||||
|
|
||||||
this.callback = callback;
|
this.callback = callback;
|
||||||
@@ -34,18 +28,18 @@ export class DialogSplitItem extends Dialog {
|
|||||||
this.splitData = splitData;
|
this.splitData = splitData;
|
||||||
}
|
}
|
||||||
|
|
||||||
async onSplit(){
|
|
||||||
await $(".choix-quantite").change();
|
|
||||||
this.callback(this.item, this.splitData.choix.quantite);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
|
||||||
activateListeners(html) {
|
activateListeners(html) {
|
||||||
super.activateListeners(html);
|
super.activateListeners(html);
|
||||||
|
this.html = html;
|
||||||
html.find(".choix-quantite").change(event => {
|
this.html.find(".choix-quantite").change(event => {
|
||||||
this.splitData.choix.quantite = Number(event.currentTarget.value);
|
this.splitData.choix.quantite = Number(event.currentTarget.value);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
async onSplit() {
|
||||||
|
await this.html.find(".choix-quantite").change();
|
||||||
|
this.callback(this.item, this.splitData.choix.quantite);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -37,24 +37,24 @@ export class DialogStress extends Dialog {
|
|||||||
this.dialogData = dialogData;
|
this.dialogData = dialogData;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
activateListeners(html) {
|
||||||
|
super.activateListeners(html);
|
||||||
|
this.html = html;
|
||||||
|
this.html.find("input.select-actor").change((event) => this.onSelectActor(event));
|
||||||
|
}
|
||||||
|
|
||||||
async onStress() {
|
async onStress() {
|
||||||
const motif = $("form.rdddialogstress input[name='motif']").val();
|
const motif = this.html.find("form.rdddialogstress input[name='motif']").val();
|
||||||
const stress = Number($("form.rdddialogstress input[name='stress']").val());
|
const stress = Number(this.html.find("form.rdddialogstress input[name='stress']").val());
|
||||||
const compteur = ($("form.rdddialogstress input[name='immediat']").prop("checked")) ? 'experience' : 'stress';
|
const compteur = (this.html.find("form.rdddialogstress input[name='immediat']").prop("checked")) ? 'experience' : 'stress';
|
||||||
|
|
||||||
this.dialogData.actors.filter(it => it.selected)
|
this.dialogData.actors.filter(it => it.selected)
|
||||||
.map(it => game.actors.get(it.id))
|
.map(it => game.actors.get(it.id))
|
||||||
.forEach(actor => actor.distribuerStress(compteur, stress, motif));
|
.forEach(actor => actor.distribuerStress(compteur, stress, motif));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
|
||||||
activateListeners(html) {
|
|
||||||
super.activateListeners(html);
|
|
||||||
html.find("input.select-actor").change((event) => this.onSelectActor(event));
|
|
||||||
}
|
|
||||||
|
|
||||||
async onSelectActor(event) {
|
async onSelectActor(event) {
|
||||||
const actorId = $(event.currentTarget)?.data("actor-id");
|
const actorId = this.html.find(event.currentTarget)?.data("actor-id");
|
||||||
const actor = this.dialogData.actors.find(it => it.id == actorId);
|
const actor = this.dialogData.actors.find(it => it.id == actorId);
|
||||||
if (actor) {
|
if (actor) {
|
||||||
actor.selected = event.currentTarget.checked;
|
actor.selected = event.currentTarget.checked;
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ export class DialogValidationEncaissement extends Dialog {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let dialogOptions = {
|
let dialogOptions = {
|
||||||
classes: ["rdddialog"],
|
classes: ["rdd-roll-dialog"],
|
||||||
width: 350,
|
width: 350,
|
||||||
height: 290
|
height: 290
|
||||||
}
|
}
|
||||||
@@ -55,11 +55,12 @@ export class DialogValidationEncaissement extends Dialog {
|
|||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
activateListeners(html) {
|
activateListeners(html) {
|
||||||
super.activateListeners(html);
|
super.activateListeners(html);
|
||||||
html.find('input.encaissement-roll-result').keyup(async event => {
|
this.html = html;
|
||||||
|
this.html.find('input.encaissement-roll-result').keyup(async event => {
|
||||||
this.forceDiceResult.total = event.currentTarget.value;
|
this.forceDiceResult.total = event.currentTarget.value;
|
||||||
this.encaissement = await RdDUtility.jetEncaissement(this.rollData, this.armure, { showDice: HIDE_DICE, forceDiceResult: this.forceDiceResult});
|
this.encaissement = await RdDUtility.jetEncaissement(this.rollData, this.armure, { showDice: HIDE_DICE, forceDiceResult: this.forceDiceResult});
|
||||||
$('label.encaissement-total').text(this.encaissement.total);
|
this.html.find('label.encaissement-total').text(this.encaissement.total);
|
||||||
$('label.encaissement-blessure').text(this.encaissement.blessures)
|
this.html.find('label.encaissement-blessure').text(this.encaissement.blessures)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -147,29 +147,29 @@ export class EnvironmentSheetHelper {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
static activateListeners(sheet, html) {
|
static activateListeners(sheet) {
|
||||||
if (!sheet.options.editable) return;
|
if (!sheet.options.editable) return;
|
||||||
|
|
||||||
html.find("input.input-selection-milieu").keypress(event => {
|
sheet.html.find("input.input-selection-milieu").keypress(event => {
|
||||||
if (event.keyCode == '13') {
|
if (event.keyCode == '13') {
|
||||||
EnvironmentSheetHelper.onAddMilieu(html, sheet, event);
|
EnvironmentSheetHelper.onAddMilieu(sheet, event);
|
||||||
}
|
}
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
})
|
})
|
||||||
html.find("a.milieu-add").click(event => EnvironmentSheetHelper.onAddMilieu(html, sheet, event));
|
sheet.html.find("a.milieu-add").click(event => EnvironmentSheetHelper.onAddMilieu(sheet, event));
|
||||||
html.find("div.environnement-milieu a.milieu-delete").click(event => EnvironmentSheetHelper.onDeleteMilieu(sheet, event));
|
sheet.html.find("div.environnement-milieu a.milieu-delete").click(event => EnvironmentSheetHelper.onDeleteMilieu(sheet, event));
|
||||||
html.find("div.environnement-milieu select.environnement-rarete").change(event => EnvironmentSheetHelper.onChange(sheet, event,
|
sheet.html.find("div.environnement-milieu select.environnement-rarete").change(event => EnvironmentSheetHelper.onChange(sheet, event,
|
||||||
updated => EnvironmentSheetHelper.$changeRarete(event, updated)));
|
updated => EnvironmentSheetHelper.$changeRarete(sheet, event, updated)));
|
||||||
html.find("div.environnement-milieu input[name='environnement-frequence']").change(event => EnvironmentSheetHelper.onChange(sheet, event,
|
sheet.html.find("div.environnement-milieu input[name='environnement-frequence']").change(event => EnvironmentSheetHelper.onChange(sheet, event,
|
||||||
updated => EnvironmentSheetHelper.$changeFrequence(updated, event)));
|
updated => EnvironmentSheetHelper.$changeFrequence(sheet, event, updated)));
|
||||||
}
|
}
|
||||||
|
|
||||||
static $changeFrequence(updated, event) {
|
static $changeFrequence(sheet, event, updated) {
|
||||||
updated.frequence = Number($(event.currentTarget).val());
|
updated.frequence = Number(sheet.html.find(event.currentTarget).val());
|
||||||
}
|
}
|
||||||
|
|
||||||
static $changeRarete(event, updated) {
|
static $changeRarete(sheet, event, updated) {
|
||||||
const name = $(event.currentTarget).val();
|
const name = sheet.html.find(event.currentTarget).val();
|
||||||
const rarete = Environnement.getRarete(name);
|
const rarete = Environnement.getRarete(name);
|
||||||
updated.rarete = rarete.name;
|
updated.rarete = rarete.name;
|
||||||
updated.frequence = rarete.frequence;
|
updated.frequence = rarete.frequence;
|
||||||
@@ -178,8 +178,8 @@ export class EnvironmentSheetHelper {
|
|||||||
// rarete.max);
|
// rarete.max);
|
||||||
}
|
}
|
||||||
|
|
||||||
static async onAddMilieu(html, sheet, event) {
|
static async onAddMilieu(sheet, event) {
|
||||||
const milieu = html.find('input.input-selection-milieu').val();
|
const milieu = sheet.html.find('input.input-selection-milieu').val();
|
||||||
if (!milieu) {
|
if (!milieu) {
|
||||||
ui.notifications.warn(`Choisissez le milieu dans lequel se trouve le/la ${sheet.item.name}`);
|
ui.notifications.warn(`Choisissez le milieu dans lequel se trouve le/la ${sheet.item.name}`);
|
||||||
return
|
return
|
||||||
@@ -196,7 +196,7 @@ export class EnvironmentSheetHelper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static async onDeleteMilieu(sheet, event) {
|
static async onDeleteMilieu(sheet, event) {
|
||||||
const milieu = EnvironmentSheetHelper.$getEventMilieu(event);
|
const milieu = EnvironmentSheetHelper.$getEventMilieu(sheet, event);
|
||||||
if (milieu != undefined) {
|
if (milieu != undefined) {
|
||||||
const newList = sheet.item.system.environnement.filter(it => it.milieu != milieu)
|
const newList = sheet.item.system.environnement.filter(it => it.milieu != milieu)
|
||||||
.sort(Misc.ascending(it => it.milieu));
|
.sort(Misc.ascending(it => it.milieu));
|
||||||
@@ -206,7 +206,7 @@ export class EnvironmentSheetHelper {
|
|||||||
|
|
||||||
static async onChange(sheet, event, doMutation) {
|
static async onChange(sheet, event, doMutation) {
|
||||||
const list = sheet.item.system.environnement;
|
const list = sheet.item.system.environnement;
|
||||||
const milieu = EnvironmentSheetHelper.$getEventMilieu(event);
|
const milieu = EnvironmentSheetHelper.$getEventMilieu(sheet, event);
|
||||||
const updated = list.find(it => it.milieu == milieu);
|
const updated = list.find(it => it.milieu == milieu);
|
||||||
if (updated) {
|
if (updated) {
|
||||||
doMutation(updated);
|
doMutation(updated);
|
||||||
@@ -216,8 +216,8 @@ export class EnvironmentSheetHelper {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static $getEventMilieu(event) {
|
static $getEventMilieu(sheet, event) {
|
||||||
return $(event.currentTarget)?.parents("div.environnement-milieu").data("milieu");
|
return sheet.html.find(event.currentTarget)?.parents("div.environnement-milieu").data("milieu");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -1,10 +1,10 @@
|
|||||||
export class HtmlUtility{
|
export class HtmlUtility{
|
||||||
static _showControlWhen(control, condition) {
|
static _showControlWhen(jQuerySelector, condition) {
|
||||||
if (condition) {
|
if (condition) {
|
||||||
control.show();
|
jQuerySelector.show();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
control.hide();
|
jQuerySelector.hide();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -8,18 +8,18 @@ const xp_par_niveau = [5, 5, 5, 10, 10, 10, 10, 15, 15, 15, 15, 20, 20, 20, 20,
|
|||||||
const niveau_max = xp_par_niveau.length - 10;
|
const niveau_max = xp_par_niveau.length - 10;
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
const limitesArchetypes = [
|
const limitesArchetypes = [
|
||||||
{ "niveau": 0, "nombreMax": 100, "nombre": 0 },
|
{ "niveau": 0, "nombreMax": 100, "reste": 100 },
|
||||||
{ "niveau": 1, "nombreMax": 10, "nombre": 0 },
|
{ "niveau": 1, "nombreMax": 10, "reste": 10 },
|
||||||
{ "niveau": 2, "nombreMax": 9, "nombre": 0 },
|
{ "niveau": 2, "nombreMax": 9, "reste": 9 },
|
||||||
{ "niveau": 3, "nombreMax": 8, "nombre": 0 },
|
{ "niveau": 3, "nombreMax": 8, "reste": 8 },
|
||||||
{ "niveau": 4, "nombreMax": 7, "nombre": 0 },
|
{ "niveau": 4, "nombreMax": 7, "reste": 7 },
|
||||||
{ "niveau": 5, "nombreMax": 6, "nombre": 0 },
|
{ "niveau": 5, "nombreMax": 6, "reste": 6 },
|
||||||
{ "niveau": 6, "nombreMax": 5, "nombre": 0 },
|
{ "niveau": 6, "nombreMax": 5, "reste": 5 },
|
||||||
{ "niveau": 7, "nombreMax": 4, "nombre": 0 },
|
{ "niveau": 7, "nombreMax": 4, "reste": 4 },
|
||||||
{ "niveau": 8, "nombreMax": 3, "nombre": 0 },
|
{ "niveau": 8, "nombreMax": 3, "reste": 3 },
|
||||||
{ "niveau": 9, "nombreMax": 2, "nombre": 0 },
|
{ "niveau": 9, "nombreMax": 2, "reste": 2 },
|
||||||
{ "niveau": 10, "nombreMax": 1, "nombre": 0 },
|
{ "niveau": 10, "nombreMax": 1, "reste": 1 },
|
||||||
{ "niveau": 11, "nombreMax": 1, "nombre": 0 }
|
{ "niveau": 11, "nombreMax": 1, "reste": 1 }
|
||||||
];
|
];
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
@@ -267,18 +267,47 @@ export class RdDItemCompetence extends Item {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static computeResumeArchetype(competences) {
|
static computeResumeArchetype(competences) {
|
||||||
const archetype = RdDItemCompetence.getLimitesArchetypes();
|
const computed = duplicate(limitesArchetypes);
|
||||||
competences.map(it => Math.max(0, it.system.niveau_archetype))
|
competences.map(it => Math.max(0, it.system.niveau_archetype))
|
||||||
.forEach(niveau => {
|
.filter(n => n > 0)
|
||||||
archetype[niveau] = archetype[niveau] ?? { "niveau": niveau, "nombreMax": 0, "nombre": 0 };
|
.forEach(n => {
|
||||||
archetype[niveau].nombre = (archetype[niveau]?.nombre ?? 0) + 1;
|
computed[n] = computed[n] ?? { niveau: n, nombreMax: 0, reste: 0 };
|
||||||
|
computed[n].reste = computed[n].reste - 1;
|
||||||
});
|
});
|
||||||
return archetype;
|
return computed.filter(it => it.reste > 0 && it.niveau > 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static getLimitesArchetypes() {
|
static triVisible(competences) {
|
||||||
return duplicate(limitesArchetypes);
|
return competences.filter(it => it.system.isVisible)
|
||||||
|
.sort((a, b) => RdDItemCompetence.compare(a, b))
|
||||||
|
}
|
||||||
|
|
||||||
|
static $positionTri(comp) {
|
||||||
|
if (comp.name.startsWith("Survie")) {
|
||||||
|
if (comp.name.includes("Cité")) return 0;
|
||||||
|
if (comp.name.includes("Extérieur")) return 1;
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
if (comp.system.categorie.startsWith("melee")) {
|
||||||
|
if (comp.name.includes("Corps")) return 0;
|
||||||
|
if (comp.name.includes("Dague")) return 1;
|
||||||
|
if (comp.name.includes("Esquive")) return 2;
|
||||||
|
return 3;
|
||||||
|
}
|
||||||
|
if (comp.system.categorie.startsWith("draconic")) {
|
||||||
|
if (comp.name.includes("Oniros")) return 0;
|
||||||
|
if (comp.name.includes("Hypnos")) return 1;
|
||||||
|
if (comp.name.includes("Narcos")) return 2;
|
||||||
|
if (comp.name.includes("Thanatos")) return 3;
|
||||||
|
return 4;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static compare(a, b) {
|
||||||
|
const diff = RdDItemCompetence.$positionTri(a) - RdDItemCompetence.$positionTri(b);
|
||||||
|
return diff ? diff : a.name.localeCompare(b.name);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -11,13 +11,15 @@ export class RdDConteneurItemSheet extends RdDItemSheet {
|
|||||||
if (this.actor) {
|
if (this.actor) {
|
||||||
this.prepareConteneurData(formData);
|
this.prepareConteneurData(formData);
|
||||||
}
|
}
|
||||||
|
return formData;
|
||||||
}
|
}
|
||||||
|
|
||||||
activateListeners(html) {
|
activateListeners(html) {
|
||||||
super.activateListeners(html);
|
super.activateListeners(html);
|
||||||
|
|
||||||
if (!this.options.editable) return;
|
if (!this.options.editable) return;
|
||||||
|
|
||||||
html.find('.conteneur-name a').click(async event => {
|
this.html.find('.conteneur-name a').click(async event => {
|
||||||
RdDUtility.toggleAfficheContenu(RdDSheetUtility.getItemId(event));
|
RdDUtility.toggleAfficheContenu(RdDSheetUtility.getItemId(event));
|
||||||
this.render(true);
|
this.render(true);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -23,24 +23,25 @@ export class RdDFauneItemSheet extends RdDItemSheet {
|
|||||||
super.activateListeners(html);
|
super.activateListeners(html);
|
||||||
if (!this.options.editable) return;
|
if (!this.options.editable) return;
|
||||||
|
|
||||||
EnvironmentSheetHelper.activateListeners(this, html);
|
EnvironmentSheetHelper.activateListeners(this);
|
||||||
|
|
||||||
html.find("a.linked-actor-delete").click(event => this.onDeleteLinkedActor());
|
html.find("a.linked-actor-delete").click(event => this.onDeleteLinkedActor());
|
||||||
|
html.find("a.preparer-nourriture").click(event => this.preparerNourriture(event));
|
||||||
|
html.find("a.manger-nourriture").click(event => this.mangerNourriture(event));
|
||||||
}
|
}
|
||||||
|
|
||||||
async _onDropActor(event, dragData) {
|
async _onDropActor(event, dragData) {
|
||||||
console.log('faune:dropActor', event, dragData)
|
console.log('faune:dropActor', event, dragData)
|
||||||
const actor = fromUuidSync(dragData.uuid);
|
const linkedActor = fromUuidSync(dragData.uuid);
|
||||||
if (actor?.pack) {
|
if (linkedActor?.pack) {
|
||||||
this.item.update({
|
this.item.update({
|
||||||
'system.actor.pack': actor.pack,
|
'system.actor.pack': linkedActor.pack,
|
||||||
'system.actor.id': actor._id,
|
'system.actor.id': linkedActor._id,
|
||||||
'system.actor.name': actor.name
|
'system.actor.name': linkedActor.name
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
ui.notifications.warn(`${actor.name} ne provient pas d'eun compendium.
|
ui.notifications.warn(`${linkedActor.name} ne provient pas d'un compendium.
|
||||||
<br>Choisissez une créature du compendium pour représenter un élément de faune générique`)
|
<br>Choisissez une créature du compendium pour représenter un élément de faune générique`)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -51,4 +52,16 @@ export class RdDFauneItemSheet extends RdDItemSheet {
|
|||||||
'system.actor.name': ''
|
'system.actor.name': ''
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async preparerNourriture(event) {
|
||||||
|
if (this.actor) {
|
||||||
|
await this.actor.preparerNourriture(this.item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
async mangerNourriture(event) {
|
||||||
|
if (this.actor) {
|
||||||
|
await this.actor.mangerNourriture(this.item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,6 +20,6 @@ export class RdDHerbeItemSheet extends RdDItemSheet {
|
|||||||
|
|
||||||
activateListeners(html) {
|
activateListeners(html) {
|
||||||
super.activateListeners(html);
|
super.activateListeners(html);
|
||||||
EnvironmentSheetHelper.activateListeners(this, html);
|
EnvironmentSheetHelper.activateListeners(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,6 +20,6 @@ export class RdDIngredientItemSheet extends RdDItemSheet {
|
|||||||
|
|
||||||
activateListeners(html) {
|
activateListeners(html) {
|
||||||
super.activateListeners(html);
|
super.activateListeners(html);
|
||||||
EnvironmentSheetHelper.activateListeners(this, html);
|
EnvironmentSheetHelper.activateListeners(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ const MONNAIE_OR = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const MONNAIES_STANDARD = [MONNAIE_ETAIN, MONNAIE_BRONZE, MONNAIE_ARGENT, MONNAIE_OR];
|
const MONNAIES_STANDARD = [MONNAIE_ETAIN, MONNAIE_BRONZE, MONNAIE_ARGENT, MONNAIE_OR];
|
||||||
|
const VALEUR_DENIERS = sols => Math.max(Math.floor((sols ?? 0) * 100), 0);
|
||||||
|
|
||||||
export class Monnaie {
|
export class Monnaie {
|
||||||
|
|
||||||
@@ -40,15 +41,11 @@ export class Monnaie {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static deValeur(monnaie, valeur) {
|
static deValeur(monnaie, valeur) {
|
||||||
return Monnaie.valEntiere(valeur) == Monnaie.valEntiere(monnaie.system.cout)
|
return VALEUR_DENIERS(valeur) == VALEUR_DENIERS(monnaie.system.cout)
|
||||||
}
|
|
||||||
|
|
||||||
static valEntiere(sols) {
|
|
||||||
return Math.max(Math.floor((sols??0)*100), 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static triValeurEntiere() {
|
static triValeurEntiere() {
|
||||||
return Misc.ascending(item => Monnaie.valEntiere(item.system.cout))
|
return Misc.ascending(item => VALEUR_DENIERS(item.system.cout))
|
||||||
}
|
}
|
||||||
|
|
||||||
static async creerMonnaiesStandard(actor) {
|
static async creerMonnaiesStandard(actor) {
|
||||||
@@ -65,29 +62,49 @@ export class Monnaie {
|
|||||||
return deniers;
|
return deniers;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static getFortune(actor) {
|
||||||
|
if (actor) {
|
||||||
|
Monnaie.validerMonnaies(actor);
|
||||||
|
return actor.itemTypes['monnaie']
|
||||||
|
.map(m => Number(m.system.cout) * Number(m.system.quantite))
|
||||||
|
.reduce(Misc.sum(), 0);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static async optimiserFortune(actor, fortune) {
|
static async optimiserFortune(actor, fortune) {
|
||||||
let resteEnDeniers = Math.round(fortune*100);
|
let resteEnDeniers = Math.round(fortune * 100);
|
||||||
let monnaies = actor.itemTypes['monnaie'];
|
let monnaies = actor.itemTypes['monnaie'];
|
||||||
let updates = [];
|
let updates = [];
|
||||||
let parValeur = Misc.classifyFirst(monnaies, it => Monnaie.valEntiere(it.system.cout));
|
Monnaie.validerMonnaies(actor);
|
||||||
for (let valeurDeniers of [1000, 100, 10, 1]) {
|
|
||||||
|
let parValeur = Misc.classifyFirst(monnaies, it => VALEUR_DENIERS(it.system.cout));
|
||||||
|
for (let valeurDeniers of [1000, 100, 10, 1]) {
|
||||||
const itemPiece = parValeur[valeurDeniers];
|
const itemPiece = parValeur[valeurDeniers];
|
||||||
if (itemPiece) {
|
if (itemPiece) {
|
||||||
const quantite = Math.floor(resteEnDeniers / valeurDeniers);
|
const quantite = Math.floor(resteEnDeniers / valeurDeniers);
|
||||||
if (quantite != itemPiece.system.quantite) {
|
if (quantite != itemPiece.system.quantite) {
|
||||||
updates.push({ _id: parValeur[valeurDeniers].id, 'system.quantite': quantite });
|
updates.push({ _id: parValeur[valeurDeniers].id, 'system.quantite': quantite });
|
||||||
}
|
}
|
||||||
resteEnDeniers -= quantite*valeurDeniers;
|
resteEnDeniers -= quantite * valeurDeniers;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
console.log('Monnaie.optimiserFortune', actor.name, 'total', fortune, 'parValeur', parValeur, 'updates', updates, 'reste', resteEnDeniers);
|
console.log('Monnaie.optimiserFortune', actor.name, 'total', fortune, 'parValeur', parValeur, 'updates', updates, 'reste', resteEnDeniers);
|
||||||
if (updates.length > 0) {
|
if (updates.length > 0) {
|
||||||
await actor.updateEmbeddedDocuments('Item', updates);
|
await actor.updateEmbeddedDocuments('Item', updates);
|
||||||
}
|
}
|
||||||
if (resteEnDeniers > 0){
|
if (resteEnDeniers > 0) {
|
||||||
// créer le reste en deniers fortune en deniers
|
// créer le reste en deniers fortune en deniers
|
||||||
await Monnaie.creerMonnaiesDeniers(actor, resteEnDeniers);
|
await Monnaie.creerMonnaiesDeniers(actor, resteEnDeniers);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static validerMonnaies(actor) {
|
||||||
|
actor.itemTypes['monnaie'].filter(it => VALEUR_DENIERS(it.system.cout) == 0)
|
||||||
|
.map(it => `La monnaie ${it.name} de l'acteur ${actor.name} a une valeur de 0!`)
|
||||||
|
.forEach(message => {
|
||||||
|
ui.notifications.warn(message);
|
||||||
|
console.warn(message);
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -51,15 +51,15 @@ export class RdDRencontreItemSheet extends RdDItemSheet {
|
|||||||
activateListeners(html) {
|
activateListeners(html) {
|
||||||
super.activateListeners(html);
|
super.activateListeners(html);
|
||||||
if (!this.options.editable) return;
|
if (!this.options.editable) return;
|
||||||
html.find("a.effet-add").click(event => this.onAddEffet(event));
|
this.html.find("a.effet-add").click(event => this.onAddEffet(event));
|
||||||
html.find("a.effet-delete").click(event => this.onDeleteEffet(event));
|
this.html.find("a.effet-delete").click(event => this.onDeleteEffet(event));
|
||||||
}
|
}
|
||||||
|
|
||||||
async onAddEffet(event) {
|
async onAddEffet(event) {
|
||||||
const resultat = $(event.currentTarget)?.data("effet-resultat");
|
const resultat = this.html.find(event.currentTarget)?.data("effet-resultat");
|
||||||
const keyEffets = `system.${resultat}.effets`;
|
const keyEffets = `system.${resultat}.effets`;
|
||||||
|
|
||||||
const code = $(event.currentTarget)?.data("effet-code");
|
const code = this.html.find(event.currentTarget)?.data("effet-code");
|
||||||
const liste = RdDRencontre.getListeEffets(this.item, resultat);
|
const liste = RdDRencontre.getListeEffets(this.item, resultat);
|
||||||
liste.push(code);
|
liste.push(code);
|
||||||
|
|
||||||
@@ -67,10 +67,10 @@ export class RdDRencontreItemSheet extends RdDItemSheet {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async onDeleteEffet(event) {
|
async onDeleteEffet(event) {
|
||||||
const resultat = $(event.currentTarget)?.data("effet-resultat");
|
const resultat = this.html.find(event.currentTarget)?.data("effet-resultat");
|
||||||
const keyEffets = `system.${resultat}.effets`;
|
const keyEffets = `system.${resultat}.effets`;
|
||||||
|
|
||||||
const pos = $(event.currentTarget)?.data("effet-pos");
|
const pos = this.html.find(event.currentTarget)?.data("effet-pos");
|
||||||
const liste = RdDRencontre.getListeEffets(this.item, resultat);
|
const liste = RdDRencontre.getListeEffets(this.item, resultat);
|
||||||
liste.splice(pos, 1);
|
liste.splice(pos, 1);
|
||||||
|
|
||||||
|
|||||||
@@ -99,7 +99,8 @@ export class RdDItemSheet extends ItemSheet {
|
|||||||
cssClass: this.isEditable ? "editable" : "locked",
|
cssClass: this.isEditable ? "editable" : "locked",
|
||||||
isSoins: false,
|
isSoins: false,
|
||||||
description: await TextEditor.enrichHTML(this.item.system.description, { async: true }),
|
description: await TextEditor.enrichHTML(this.item.system.description, { async: true }),
|
||||||
descriptionmj: await TextEditor.enrichHTML(this.item.system.descriptionmj, { async: true })
|
descriptionmj: await TextEditor.enrichHTML(this.item.system.descriptionmj, { async: true }),
|
||||||
|
isComestible: this.item.isComestible()
|
||||||
}
|
}
|
||||||
|
|
||||||
const competences = await SystemCompendiums.getCompetences(this.actor?.type);
|
const competences = await SystemCompendiums.getCompetences(this.actor?.type);
|
||||||
@@ -156,86 +157,68 @@ export class RdDItemSheet extends ItemSheet {
|
|||||||
/** @override */
|
/** @override */
|
||||||
activateListeners(html) {
|
activateListeners(html) {
|
||||||
super.activateListeners(html);
|
super.activateListeners(html);
|
||||||
let itemSheetDialog = this;
|
this.html = html;
|
||||||
|
|
||||||
HtmlUtility._showControlWhen($(".item-cout"), ReglesOptionelles.isUsing('afficher-prix-joueurs') || game.user.isGM || !this.item.isOwned);
|
HtmlUtility._showControlWhen(this.html.find(".item-cout"), ReglesOptionelles.isUsing('afficher-prix-joueurs') || game.user.isGM || !this.item.isOwned);
|
||||||
HtmlUtility._showControlWhen($(".item-magique"), this.item.isMagique());
|
HtmlUtility._showControlWhen(this.html.find(".item-magique"), this.item.isMagique());
|
||||||
|
|
||||||
// Everything below here is only needed if the sheet is editable
|
// Everything below here is only needed if the sheet is editable
|
||||||
if (!this.options.editable) return;
|
if (!this.options.editable) return;
|
||||||
|
|
||||||
this.form.ondragstart = (event) => this._onDragStart(event);
|
this.form.ondragstart = (event) => this._onDragStart(event);
|
||||||
this.form.ondrop = (event) => this._onDrop(event);
|
this.form.ondrop = (event) => this._onDrop(event);
|
||||||
|
|
||||||
|
|
||||||
// Select competence categorie
|
// Select competence categorie
|
||||||
html.find(".categorie").change(event => this._onSelectCategorie(event));
|
this.html.find(".categorie").change(event => this._onSelectCategorie(event));
|
||||||
|
|
||||||
html.find('.sheet-competence-xp').change((event) => {
|
this.html.find('.sheet-competence-xp').change((event) => {
|
||||||
if (this.item.isCompetencePersonnage()) {
|
if (this.item.isCompetencePersonnage()) {
|
||||||
RdDUtility.checkThanatosXP(this.item.name);
|
RdDUtility.checkThanatosXP(this.item.name);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
this.html.find(".item-cout input[name='system.cout']").change(event => {
|
||||||
|
if (this.item.isMonnaie()) {
|
||||||
|
const value = event.currentTarget.value;
|
||||||
|
if (Number(value) == 0) {
|
||||||
|
ui.notifications.error(`${this.actor?.name ?? 'Monnaie'}: La monnaie ${this.item.name} a maintenant une valeur de 0, et ne peut plus être utilisée pour payer!`)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
html.find('.enchanteDate').change((event) => {
|
this.html.find('.enchanteDate').change((event) => {
|
||||||
let jour = Number($('#jourMois').val());
|
let jour = Number(this.html.find('[name="splitDate.day"]').val());
|
||||||
let mois = $('#nomMois').val();
|
let mois = this.html.find('[name="splitDate.month"]').val();
|
||||||
this.dateUpdated = game.system.rdd.calendrier.getIndexFromDate(jour, mois);
|
this.dateUpdated = game.system.rdd.calendrier.getIndexFromDate(jour, mois);
|
||||||
});
|
});
|
||||||
|
|
||||||
html.find('.creer-tache-livre').click((event) => {
|
this.html.find('.creer-tache-livre').click((event) => this._getEventActor(event).creerTacheDepuisLivre(this.item));
|
||||||
let actorId = event.currentTarget.attributes['data-actor-id'].value;
|
this.html.find('.consommer-potion').click((event) => this._getEventActor(event).consommerPotion(this.item));
|
||||||
let actor = game.actors.get(actorId);
|
this.html.find('.creer-potion-base').click((event) => this._getEventActor(event).dialogFabriquerPotion(this.item));
|
||||||
actor.creerTacheDepuisLivre(this.item);
|
|
||||||
});
|
|
||||||
html.find('.consommer-potion').click((event) => {
|
|
||||||
let actorId = event.currentTarget.attributes['data-actor-id'].value;
|
|
||||||
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) => {
|
this.html.find('.alchimie-tache a').click((event) => {
|
||||||
let actorId = event.currentTarget.attributes['data-actor-id'].value;
|
let actor = this._getEventActor(event);
|
||||||
let recetteId = event.currentTarget.attributes['data-recette-id'].value;
|
|
||||||
let tacheName = event.currentTarget.attributes['data-alchimie-tache'].value;
|
|
||||||
let tacheData = event.currentTarget.attributes['data-alchimie-data'].value;
|
|
||||||
let actor = game.actors.get(actorId);
|
|
||||||
if (actor) {
|
if (actor) {
|
||||||
|
let recetteId = event.currentTarget.attributes['data-recette-id'].value;
|
||||||
|
let tacheName = event.currentTarget.attributes['data-alchimie-tache'].value;
|
||||||
|
let tacheData = event.currentTarget.attributes['data-alchimie-data'].value;
|
||||||
actor.effectuerTacheAlchimie(recetteId, tacheName, tacheData);
|
actor.effectuerTacheAlchimie(recetteId, tacheName, tacheData);
|
||||||
} else {
|
} else {
|
||||||
ui.notifications.info("Impossible trouver un acteur pour réaliser cette tache Alchimique.");
|
ui.notifications.info("Impossible trouver un acteur pour réaliser cette tache Alchimique.");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
html.find('.item-split').click(async event => {
|
this.html.find('.item-split').click(async event => RdDSheetUtility.splitItem(RdDSheetUtility.getItem(event, this.actor), this.actor, async () => this.render(true)));
|
||||||
const item = RdDSheetUtility.getItem(event, this.actor);
|
this.html.find('.item-edit').click(async event => RdDSheetUtility.getItem(event, this.actor)?.sheet.render(true));
|
||||||
await RdDSheetUtility.splitItem(item, this.actor, async () => itemSheetDialog.render(true));
|
this.html.find('.item-delete').click(async event => RdDUtility.confirmerSuppressionItem(this, RdDSheetUtility.getItem(event, this.actor)));
|
||||||
});
|
this.html.find('.item-vendre').click(async event => RdDSheetUtility.getItem(event, this.actor)?.proposerVente());
|
||||||
html.find('.item-edit').click(async event => {
|
this.html.find('.item-montrer').click(async event => RdDSheetUtility.getItem(event, this.actor)?.postItem());
|
||||||
const item = RdDSheetUtility.getItem(event, this.actor);
|
this.html.find('.item-action').click(async event => RdDSheetUtility.getItem(event, this.actor)?.actionPrincipale(this.actor, async () => this.render(true)));
|
||||||
item.sheet.render(true);
|
}
|
||||||
});
|
|
||||||
html.find('.item-delete').click(async event => {
|
_getEventActor(event) {
|
||||||
const li = RdDSheetUtility.getEventElement(event);
|
let actorId = event.currentTarget.attributes['data-actor-id'].value;
|
||||||
const item = this.actor.getObjet(li.data("item-id"));
|
let actor = game.actors.get(actorId);
|
||||||
RdDUtility.confirmerSuppressionItem(this, item, li);
|
return actor;
|
||||||
});
|
|
||||||
html.find('.item-vendre').click(async event => {
|
|
||||||
const item = RdDSheetUtility.getItem(event, this.actor);
|
|
||||||
item?.proposerVente();
|
|
||||||
});
|
|
||||||
html.find('.item-montrer').click(async event => {
|
|
||||||
const item = RdDSheetUtility.getItem(event, this.actor);
|
|
||||||
item?.postItem();
|
|
||||||
});
|
|
||||||
html.find('.item-action').click(async event => {
|
|
||||||
const item = RdDSheetUtility.getItem(event, this.actor);
|
|
||||||
this.actor.actionItem(item, async () => itemSheetDialog.render(true));
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
@@ -245,7 +228,7 @@ export class RdDItemSheet extends ItemSheet {
|
|||||||
if (this.item.isCompetence()) {
|
if (this.item.isCompetence()) {
|
||||||
let level = RdDItemCompetence.getNiveauBase(event.currentTarget.value);
|
let level = RdDItemCompetence.getNiveauBase(event.currentTarget.value);
|
||||||
this.item.system.base = level;
|
this.item.system.base = level;
|
||||||
$("#base").val(level);
|
this.html.find('[name="system.base"]').val(level);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
129
module/item.js
@@ -1,5 +1,6 @@
|
|||||||
import { DialogItemVente } from "./dialog-item-vente.js";
|
import { DialogItemVente } from "./dialog-item-vente.js";
|
||||||
import { Grammar } from "./grammar.js";
|
import { Grammar } from "./grammar.js";
|
||||||
|
import { Misc } from "./misc.js";
|
||||||
import { RdDHerbes } from "./rdd-herbes.js";
|
import { RdDHerbes } from "./rdd-herbes.js";
|
||||||
import { RdDUtility } from "./rdd-utility.js";
|
import { RdDUtility } from "./rdd-utility.js";
|
||||||
|
|
||||||
@@ -91,10 +92,16 @@ export class RdDItem extends Item {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static getUniteQuantite(type) {
|
getUniteQuantite() {
|
||||||
switch (type) {
|
switch (this.type) {
|
||||||
case "monnaie": return "(Pièces)"
|
case "monnaie": return "(Pièces)"
|
||||||
case "herbe": return "(Brins)"
|
case "herbe":
|
||||||
|
switch (this.system.categorie) {
|
||||||
|
case 'Alchimie': case 'Repos': case 'Soin':
|
||||||
|
return "(Brins)"
|
||||||
|
case 'Cuisine': return '';
|
||||||
|
}
|
||||||
|
return '';
|
||||||
case "ingredient": return "(Pépins ou Brins)"
|
case "ingredient": return "(Pépins ou Brins)"
|
||||||
}
|
}
|
||||||
return '';
|
return '';
|
||||||
@@ -142,6 +149,9 @@ export class RdDItem extends Item {
|
|||||||
isConteneur() {
|
isConteneur() {
|
||||||
return this.type == 'conteneur';
|
return this.type == 'conteneur';
|
||||||
}
|
}
|
||||||
|
isMonnaie() {
|
||||||
|
return this.type == 'monnaie';
|
||||||
|
}
|
||||||
|
|
||||||
getItemGroup() {
|
getItemGroup() {
|
||||||
if (this.isInventaire()) return "equipement";
|
if (this.isInventaire()) return "equipement";
|
||||||
@@ -165,9 +175,25 @@ export class RdDItem extends Item {
|
|||||||
return !this.isConteneur() || (this.system.contenu?.length ?? 0) == 0;
|
return !this.isConteneur() || (this.system.contenu?.length ?? 0) == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
isAlcool() {
|
isNourritureBoisson() {
|
||||||
return this.type == 'nourritureboisson' && this.system.boisson && this.system.alcoolise;
|
return this.type == 'nourritureboisson';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
isComestible() {
|
||||||
|
switch (this.type) {
|
||||||
|
case 'nourritureboisson': return 'pret';
|
||||||
|
case 'herbe':
|
||||||
|
return this.system.categorie == 'Cuisine' && this.system.sust > 0 ? 'brut' : '';
|
||||||
|
case 'faune':
|
||||||
|
return this.system.sust > 0 ? 'brut' : '';
|
||||||
|
}
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
isAlcool() {
|
||||||
|
return this.isNourritureBoisson() && this.system.boisson && this.system.alcoolise;
|
||||||
|
}
|
||||||
|
|
||||||
isHerbeAPotion() {
|
isHerbeAPotion() {
|
||||||
return this.type == 'herbe' && (this.system.categorie == 'Soin' || this.system.categorie == 'Repos');
|
return this.type == 'herbe' && (this.system.categorie == 'Soin' || this.system.categorie == 'Repos');
|
||||||
}
|
}
|
||||||
@@ -193,13 +219,22 @@ export class RdDItem extends Item {
|
|||||||
getEnc() {
|
getEnc() {
|
||||||
switch (this.type) {
|
switch (this.type) {
|
||||||
case 'herbe':
|
case 'herbe':
|
||||||
return encBrin;
|
return this.getEncHerbe();
|
||||||
case 'gemme':
|
case 'gemme':
|
||||||
return encPepin * this.system.taille;
|
return encPepin * this.system.taille;
|
||||||
}
|
}
|
||||||
return Math.max(this.system.encombrement ?? 0, 0);
|
return Math.max(this.system.encombrement ?? 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getEncHerbe() {
|
||||||
|
switch (this.system.categorie) {
|
||||||
|
case 'Repos': case 'Soin': case 'Alchimie':
|
||||||
|
return encBrin;
|
||||||
|
}
|
||||||
|
return this.system.encombrement;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
valeurTotale() {
|
valeurTotale() {
|
||||||
return this.getQuantite() * this.valeur()
|
return this.getQuantite() * this.valeur()
|
||||||
}
|
}
|
||||||
@@ -231,18 +266,42 @@ export class RdDItem extends Item {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getActionPrincipale(options = { warnIfNot: true }) {
|
getActionPrincipale(options = { warnIfNot: true }) {
|
||||||
const warn = options.warnIfNot;
|
|
||||||
switch (this.type) {
|
switch (this.type) {
|
||||||
case 'nourritureboisson': return this._actionOrWarnQuantiteZero(this.system.boisson ? 'Boire' : 'Manger', warn);
|
|
||||||
case 'potion': return this._actionOrWarnQuantiteZero('Boire', warn);
|
|
||||||
case 'livre': return this._actionOrWarnQuantiteZero('Lire', warn);
|
|
||||||
case 'conteneur': return 'Ouvrir';
|
case 'conteneur': return 'Ouvrir';
|
||||||
case 'herbe': return this.isHerbeAPotion() ? this._actionOrWarnQuantiteZero('Décoction', warn) : undefined;
|
}
|
||||||
case 'queue': case 'ombre': return this.system.refoulement > 0 ? 'Refouler' : undefined;
|
if (this.actor?.isPersonnage()) {
|
||||||
|
const warn = options.warnIfNot;
|
||||||
|
if (this.isComestible() == 'brut') {
|
||||||
|
return 'Utiliser';
|
||||||
|
}
|
||||||
|
switch (this.type) {
|
||||||
|
case 'nourritureboisson': return this._actionOrWarnQuantiteZero(this.system.boisson ? 'Boire' : 'Manger', warn);
|
||||||
|
case 'potion': return this._actionOrWarnQuantiteZero('Boire', warn);
|
||||||
|
case 'livre': return this._actionOrWarnQuantiteZero('Lire', warn);
|
||||||
|
case 'herbe': return this.isHerbeAPotion() ? this._actionOrWarnQuantiteZero('Décoction', warn) : undefined;
|
||||||
|
case 'queue': case 'ombre': return this.system.refoulement > 0 ? 'Refouler' : undefined;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
async actionPrincipale(actor, onActionItem = async () => { }) {
|
||||||
|
if (!this.getActionPrincipale()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (await actor.actionNourritureboisson(this, onActionItem)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
switch (this.type) {
|
||||||
|
case 'potion': return await actor.consommerPotion(this, onActionItem);
|
||||||
|
case 'livre': return await actor.actionLire(this);
|
||||||
|
case 'conteneur': return await this.sheet.render(true);
|
||||||
|
case 'herbe': return await actor.actionHerbe(this);
|
||||||
|
case 'queue': case 'ombre': return await actor.actionRefoulement(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
_actionOrWarnQuantiteZero(actionName, warn) {
|
_actionOrWarnQuantiteZero(actionName, warn) {
|
||||||
if ((this.system.quantite ?? 0) <= 0) {
|
if ((this.system.quantite ?? 0) <= 0) {
|
||||||
if (warn) {
|
if (warn) {
|
||||||
@@ -260,6 +319,42 @@ export class RdDItem extends Item {
|
|||||||
await this.quantiteIncDec(-nombre, options);
|
await this.quantiteIncDec(-nombre, options);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async onCreateDecoupeComestible(actor) {
|
||||||
|
if (actor && this.isComestible() == 'brut' && this.system.sust != 1) {
|
||||||
|
if (this.system.sust < 1) {
|
||||||
|
await actor.updateEmbeddedDocuments('Item', [{
|
||||||
|
_id: this.id,
|
||||||
|
'system.sust': 0
|
||||||
|
}])
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
const sust = Math.floor(this.system.sust);
|
||||||
|
await actor.updateEmbeddedDocuments('Item', [{
|
||||||
|
_id: this.id,
|
||||||
|
'system.quantite': this.system.quantite * sust,
|
||||||
|
'system.encombrement': Misc.keepDecimals(this.system.encombrement / sust, 2),
|
||||||
|
'system.cout': Misc.keepDecimals(this.system.cout / sust, 2),
|
||||||
|
'system.sust': 1
|
||||||
|
}])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async empiler(item) {
|
||||||
|
if (this.isComestible() == 'brut') {
|
||||||
|
const sust = this.system.sust + item.system.sust;
|
||||||
|
const encombrement = this.system.encombrement + item.system.encombrement;
|
||||||
|
await this.update({
|
||||||
|
"system.sust": sust,
|
||||||
|
"system.encombrement": encombrement
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
await this.quantiteIncDec(item.system.quantite);
|
||||||
|
}
|
||||||
|
await item.delete();
|
||||||
|
}
|
||||||
|
|
||||||
async quantiteIncDec(nombre, options = { diminuerQuantite: true, supprimerSiZero: false }) {
|
async quantiteIncDec(nombre, options = { diminuerQuantite: true, supprimerSiZero: false }) {
|
||||||
const quantite = Number(this.system.quantite ?? -1);
|
const quantite = Number(this.system.quantite ?? -1);
|
||||||
if (quantite >= 0) {
|
if (quantite >= 0) {
|
||||||
@@ -287,7 +382,6 @@ export class RdDItem extends Item {
|
|||||||
if (!other || !this.isInventaire()) {
|
if (!other || !this.isInventaire()) {
|
||||||
return [false, undefined];
|
return [false, undefined];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.system.quantite == undefined) {
|
if (this.system.quantite == undefined) {
|
||||||
return [false, `Impossible de regrouper des ${this.type}, ils ne sont pas empilables`];
|
return [false, `Impossible de regrouper des ${this.type}, ils ne sont pas empilables`];
|
||||||
}
|
}
|
||||||
@@ -298,8 +392,13 @@ export class RdDItem extends Item {
|
|||||||
return [false, `Impossible de regrouper ${this.name} avec ${other.name}`];
|
return [false, `Impossible de regrouper ${this.name} avec ${other.name}`];
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
const differences = Object.entries(this.system)
|
const excludedProperties = ['quantite', 'cout', 'encTotal'];
|
||||||
.filter(([key, value]) => !['quantite', 'cout', 'encTotal'].includes(key) && value != other.system[key]);
|
if (this.isComestible()) {
|
||||||
|
excludedProperties.push('sust', 'encombrement');
|
||||||
|
}
|
||||||
|
let differences = Object.entries(this.system)
|
||||||
|
.filter(([key, value]) => !excludedProperties.includes(key))
|
||||||
|
.filter(([key, value]) => value != other.system[key])
|
||||||
if (differences.length > 0) {
|
if (differences.length > 0) {
|
||||||
let message = `Impossible de regrouper les ${this.type} ${this.name}: `;
|
let message = `Impossible de regrouper les ${this.type} ${this.name}: `;
|
||||||
for (const [key, value] of differences) {
|
for (const [key, value] of differences) {
|
||||||
|
|||||||
@@ -15,13 +15,19 @@
|
|||||||
|
|
||||||
// Common conf
|
// Common conf
|
||||||
let dialogConf = { content: html, title: "Editeur d'Astrologie", buttons: myButtons, default: "saveButton" };
|
let dialogConf = { content: html, title: "Editeur d'Astrologie", buttons: myButtons, default: "saveButton" };
|
||||||
let dialogOptions = { classes: ["rdddialog"], width: 600, height: 300, 'z-index': 99999 }
|
let dialogOptions = { classes: ["rdd-roll-dialog"], width: 600, height: 300, 'z-index': 99999 }
|
||||||
super(dialogConf, dialogOptions)
|
super(dialogConf, dialogOptions)
|
||||||
|
|
||||||
this.calendrier = calendrier;
|
this.calendrier = calendrier;
|
||||||
this.updateData( calendrierData );
|
this.updateData( calendrierData );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
activateListeners(html) {
|
||||||
|
super.activateListeners(html);
|
||||||
|
this.html = html;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async resetNombreAstraux() {
|
async resetNombreAstraux() {
|
||||||
game.system.rdd.calendrier.resetNombreAstral();
|
game.system.rdd.calendrier.resetNombreAstral();
|
||||||
@@ -39,15 +45,4 @@
|
|||||||
this.calendrierData = duplicate(calendrierData);
|
this.calendrierData = duplicate(calendrierData);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
|
||||||
activateListeners(html) {
|
|
||||||
super.activateListeners(html);
|
|
||||||
|
|
||||||
let astrologieData = this.astrologieData;
|
|
||||||
|
|
||||||
$(function () {
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ export class RdDAstrologieJoueur extends Dialog {
|
|||||||
astrologie: RdDItemCompetence.findCompetence(actor.items, 'Astrologie')
|
astrologie: RdDItemCompetence.findCompetence(actor.items, 'Astrologie')
|
||||||
}
|
}
|
||||||
const html = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/dialog-astrologie-joueur.html', dialogData);
|
const html = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/dialog-astrologie-joueur.html', dialogData);
|
||||||
let options = { classes: ["rdddialog"], width: 600, height: 500, 'z-index': 99999 };
|
let options = { classes: ["rdd-roll-dialog"], width: 600, height: 500, 'z-index': 99999 };
|
||||||
if (dialogConfig.options) {
|
if (dialogConfig.options) {
|
||||||
mergeObject(options, dialogConfig.options, { overwrite: true });
|
mergeObject(options, dialogConfig.options, { overwrite: true });
|
||||||
}
|
}
|
||||||
@@ -29,21 +29,35 @@ export class RdDAstrologieJoueur extends Dialog {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
constructor(html, actor, dialogData) {
|
constructor(html, actor, dialogData) {
|
||||||
|
const dialogConf = {
|
||||||
let myButtons = {
|
title: "Nombres Astraux",
|
||||||
saveButton: { label: "Fermer", callback: html => this.quitDialog() }
|
content: html,
|
||||||
|
default: "saveButton",
|
||||||
|
buttons: {
|
||||||
|
saveButton: { label: "Fermer", callback: html => this.quitDialog() }
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
const dialogOptions = { classes: ["rdd-roll-dialog"], width: 600, height: 300, 'z-index': 99999 };
|
||||||
// Get all n
|
|
||||||
// Common conf
|
|
||||||
let dialogConf = { content: html, title: "Nombres Astraux", buttons: myButtons, default: "saveButton" };
|
|
||||||
let dialogOptions = { classes: ["rdddialog"], width: 600, height: 300, 'z-index': 99999 };
|
|
||||||
super(dialogConf, dialogOptions);
|
super(dialogConf, dialogOptions);
|
||||||
|
|
||||||
this.actor = actor;
|
this.actor = actor;
|
||||||
this.dataNombreAstral = duplicate(dialogData);
|
this.dataNombreAstral = duplicate(dialogData);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
activateListeners(html) {
|
||||||
|
super.activateListeners(html);
|
||||||
|
this.html = html;
|
||||||
|
|
||||||
|
this.html.find(function () {
|
||||||
|
this.html.find("[name='diffConditions']").val(0);
|
||||||
|
});
|
||||||
|
|
||||||
|
this.html.find('[name="jet-astrologie"]').click((event) => {
|
||||||
|
this.requestJetAstrologie();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static organizeNombres(actor) {
|
static organizeNombres(actor) {
|
||||||
let itemNombres = actor.listItemsData('nombreastral');
|
let itemNombres = actor.listItemsData('nombreastral');
|
||||||
@@ -68,8 +82,8 @@ export class RdDAstrologieJoueur extends Dialog {
|
|||||||
carac_vue: this.actor.system.carac['vue'].value,
|
carac_vue: this.actor.system.carac['vue'].value,
|
||||||
etat: this.dataNombreAstral.etat,
|
etat: this.dataNombreAstral.etat,
|
||||||
astrologie: this.dataNombreAstral.astrologie,
|
astrologie: this.dataNombreAstral.astrologie,
|
||||||
conditions: $("#diffConditions").val(),
|
conditions: this.html.find('[name="diffConditions"]').val(),
|
||||||
date: $("#joursAstrologie").val(),
|
date: this.html.find('[name="joursAstrologie"]').val(),
|
||||||
userId: game.user.id
|
userId: game.user.id
|
||||||
}
|
}
|
||||||
if (Misc.isUniqueConnectedGM()) {
|
if (Misc.isUniqueConnectedGM()) {
|
||||||
@@ -87,17 +101,4 @@ export class RdDAstrologieJoueur extends Dialog {
|
|||||||
quitDialog() {
|
quitDialog() {
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
|
||||||
activateListeners(html) {
|
|
||||||
super.activateListeners(html);
|
|
||||||
|
|
||||||
$(function () {
|
|
||||||
$("#diffConditions").val(0);
|
|
||||||
});
|
|
||||||
|
|
||||||
html.find('#jet-astrologie').click((event) => {
|
|
||||||
this.requestJetAstrologie();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,15 +23,24 @@ export class RdDCalendrierEditeur extends Dialog {
|
|||||||
this.calendrierData = calendrierData;
|
this.calendrierData = calendrierData;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
activateListeners(html) {
|
||||||
|
super.activateListeners(html);
|
||||||
|
this.html = html;
|
||||||
|
this.html.find("input[name='nomMois']").val(this.calendrierData.moisKey);
|
||||||
|
this.html.find("select[name='nomHeure']").val(this.calendrierData.heureKey);
|
||||||
|
this.html.find("select[name='jourMois']").val(this.calendrierData.jourMois);
|
||||||
|
this.html.find("select[name='minutesRelative']").val(calendrierData.minutesRelative);
|
||||||
|
this.html.find("select[name='annee']").val(this.calendrierData.annee);
|
||||||
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
fillData() {
|
fillData() {
|
||||||
this.calendrierData.annee = $("input[name='annee']").val();
|
this.calendrierData.annee = this.html.find("input[name='annee']").val();
|
||||||
this.calendrierData.moisKey = $("select[name='nomMois']").val();
|
this.calendrierData.moisKey = this.html.find("select[name='nomMois']").val();
|
||||||
this.calendrierData.heureKey = $("select[name='nomHeure']").val();
|
this.calendrierData.heureKey = this.html.find("select[name='nomHeure']").val();
|
||||||
this.calendrierData.jourMois = $("select[name='jourMois']").val();
|
this.calendrierData.jourMois = this.html.find("select[name='jourMois']").val();
|
||||||
this.calendrierData.minutesRelative = $("select[name='minutesRelative']").val();
|
this.calendrierData.minutesRelative = this.html.find("select[name='minutesRelative']").val();
|
||||||
|
|
||||||
console.log("UPDATE ", this.calendrierData);
|
|
||||||
this.calendrier.saveEditeur(this.calendrierData)
|
this.calendrier.saveEditeur(this.calendrierData)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -40,21 +49,4 @@ export class RdDCalendrierEditeur extends Dialog {
|
|||||||
this.calendrierData = duplicate(calendrierData);
|
this.calendrierData = duplicate(calendrierData);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
|
||||||
activateListeners(html) {
|
|
||||||
super.activateListeners(html);
|
|
||||||
|
|
||||||
let calendrierData = this.calendrierData;
|
|
||||||
|
|
||||||
$(function () {
|
|
||||||
console.log(calendrierData);
|
|
||||||
$("input[name='nomMois']").val(calendrierData.moisKey);
|
|
||||||
$("select[name='nomHeure']").val(calendrierData.heureKey);
|
|
||||||
$("select[name='jourMois']").val(calendrierData.jourMois);
|
|
||||||
$("select[name='minutesRelative']").val(calendrierData.minutesRelative);
|
|
||||||
$("select[name='annee']").val(calendrierData.annee);
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -43,6 +43,14 @@ const MAX_NOMBRE_ASTRAL = 12;
|
|||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
export class RdDCalendrier extends Application {
|
export class RdDCalendrier extends Application {
|
||||||
|
|
||||||
|
static get defaultOptions() {
|
||||||
|
return mergeObject(super.defaultOptions, {
|
||||||
|
template: "systems/foundryvtt-reve-de-dragon/templates/calendar-template.html",
|
||||||
|
popOut: false,
|
||||||
|
resizable: false
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
static createCalendrierPos() {
|
static createCalendrierPos() {
|
||||||
return { top: 200, left: 200 };
|
return { top: 200, left: 200 };
|
||||||
}
|
}
|
||||||
@@ -121,20 +129,103 @@ export class RdDCalendrier extends Application {
|
|||||||
console.log('RdDCalendrier.constructor()', this.calendrier, this.calendrierPos, this.listeNombreAstral);
|
console.log('RdDCalendrier.constructor()', this.calendrier, this.calendrierPos, this.listeNombreAstral);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
/** @override */
|
||||||
|
async activateListeners(html) {
|
||||||
|
super.activateListeners(html);
|
||||||
|
this.html = html;
|
||||||
|
|
||||||
|
this.updateDisplay();
|
||||||
|
|
||||||
|
this.html.find('.ajout-chronologie').click(ev => DialogChronologie.create());
|
||||||
|
|
||||||
|
this.html.find('.calendar-btn').click(ev => this.onCalendarButton(ev));
|
||||||
|
|
||||||
|
this.html.find('.calendar-btn-edit').click(ev => {
|
||||||
|
ev.preventDefault();
|
||||||
|
this.showCalendarEditor();
|
||||||
|
});
|
||||||
|
|
||||||
|
this.html.find('.astrologie-btn-edit').click(ev => {
|
||||||
|
ev.preventDefault();
|
||||||
|
this.showAstrologieEditor();
|
||||||
|
});
|
||||||
|
|
||||||
|
this.html.find('#calendar-move-handle').mousedown(ev => {
|
||||||
|
ev.preventDefault();
|
||||||
|
ev = ev || window.event;
|
||||||
|
let isRightMB = false;
|
||||||
|
if ("which" in ev) { // Gecko (Firefox), WebKit (Safari/Chrome) & Opera
|
||||||
|
isRightMB = ev.which == 3;
|
||||||
|
} else if ("button" in ev) { // IE, Opera
|
||||||
|
isRightMB = ev.button == 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!isRightMB) {
|
||||||
|
dragElement(document.getElementById("calendar-time-container"));
|
||||||
|
let pos1 = 0, pos2 = 0, pos3 = 0, pos4 = 0;
|
||||||
|
|
||||||
|
function dragElement(elmnt) {
|
||||||
|
elmnt.onmousedown = dragMouseDown;
|
||||||
|
function dragMouseDown(e) {
|
||||||
|
e = e || window.event;
|
||||||
|
e.preventDefault();
|
||||||
|
pos3 = e.clientX;
|
||||||
|
pos4 = e.clientY;
|
||||||
|
|
||||||
|
document.onmouseup = closeDragElement;
|
||||||
|
document.onmousemove = elementDrag;
|
||||||
|
}
|
||||||
|
|
||||||
|
function elementDrag(e) {
|
||||||
|
e = e || window.event;
|
||||||
|
e.preventDefault();
|
||||||
|
// calculate the new cursor position:
|
||||||
|
pos1 = pos3 - e.clientX;
|
||||||
|
pos2 = pos4 - e.clientY;
|
||||||
|
pos3 = e.clientX;
|
||||||
|
pos4 = e.clientY;
|
||||||
|
// set the element's new position:
|
||||||
|
elmnt.style.bottom = undefined
|
||||||
|
elmnt.style.top = (elmnt.offsetTop - pos2) + "px";
|
||||||
|
elmnt.style.left = (elmnt.offsetLeft - pos1) + "px";
|
||||||
|
}
|
||||||
|
|
||||||
|
function closeDragElement() {
|
||||||
|
// stop moving when mouse button is released:
|
||||||
|
elmnt.onmousedown = undefined;
|
||||||
|
document.onmouseup = undefined;
|
||||||
|
document.onmousemove = undefined;
|
||||||
|
let xPos = (elmnt.offsetLeft - pos1) > window.innerWidth ? window.innerWidth - 200 : (elmnt.offsetLeft - pos1);
|
||||||
|
let yPos = (elmnt.offsetTop - pos2) > window.innerHeight - 20 ? window.innerHeight - 100 : (elmnt.offsetTop - pos2)
|
||||||
|
xPos = xPos < 0 ? 0 : xPos;
|
||||||
|
yPos = yPos < 0 ? 0 : yPos;
|
||||||
|
if (xPos != (elmnt.offsetLeft - pos1) || yPos != (elmnt.offsetTop - pos2)) {
|
||||||
|
elmnt.style.top = (yPos) + "px";
|
||||||
|
elmnt.style.left = (xPos) + "px";
|
||||||
|
}
|
||||||
|
game.system.rdd.calendrier.calendrierPos.top = yPos;
|
||||||
|
game.system.rdd.calendrier.calendrierPos.left = xPos;
|
||||||
|
if (game.user.isGM) {
|
||||||
|
game.settings.set(SYSTEM_RDD, "calendrier-pos", duplicate(game.system.rdd.calendrier.calendrierPos));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (isRightMB) {
|
||||||
|
game.system.rdd.calendrier.calendrierPos.top = 200;
|
||||||
|
game.system.rdd.calendrier.calendrierPos.left = 200;
|
||||||
|
if (game.user.isGM) {
|
||||||
|
game.settings.set(SYSTEM_RDD, "calendrier-pos", duplicate(game.system.rdd.calendrier.calendrierPos));
|
||||||
|
}
|
||||||
|
this.setPos(game.system.rdd.calendrier.calendrierPos);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
getListeNombreAstral() {
|
getListeNombreAstral() {
|
||||||
return game.settings.get(SYSTEM_RDD, "liste-nombre-astral") ?? [];
|
return game.settings.get(SYSTEM_RDD, "liste-nombre-astral") ?? [];
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
|
||||||
static get defaultOptions() {
|
|
||||||
return mergeObject(super.defaultOptions, {
|
|
||||||
template: "systems/foundryvtt-reve-de-dragon/templates/calendar-template.html",
|
|
||||||
popOut: false,
|
|
||||||
resizable: false
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
getDateFromIndex(index) {
|
getDateFromIndex(index) {
|
||||||
const dateRdD = this.getCalendrier(index);
|
const dateRdD = this.getCalendrier(index);
|
||||||
@@ -555,97 +646,4 @@ export class RdDCalendrier extends Application {
|
|||||||
astrologieEditeur.updateData(calendrierData);
|
astrologieEditeur.updateData(calendrierData);
|
||||||
astrologieEditeur.render(true);
|
astrologieEditeur.render(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
|
||||||
/** @override */
|
|
||||||
async activateListeners(html) {
|
|
||||||
super.activateListeners(html);
|
|
||||||
|
|
||||||
this.updateDisplay();
|
|
||||||
|
|
||||||
html.find('.ajout-chronologie').click(ev => DialogChronologie.create());
|
|
||||||
|
|
||||||
html.find('.calendar-btn').click(ev => this.onCalendarButton(ev));
|
|
||||||
|
|
||||||
html.find('.calendar-btn-edit').click(ev => {
|
|
||||||
ev.preventDefault();
|
|
||||||
this.showCalendarEditor();
|
|
||||||
});
|
|
||||||
|
|
||||||
html.find('.astrologie-btn-edit').click(ev => {
|
|
||||||
ev.preventDefault();
|
|
||||||
this.showAstrologieEditor();
|
|
||||||
});
|
|
||||||
|
|
||||||
html.find('#calendar-move-handle').mousedown(ev => {
|
|
||||||
ev.preventDefault();
|
|
||||||
ev = ev || window.event;
|
|
||||||
let isRightMB = false;
|
|
||||||
if ("which" in ev) { // Gecko (Firefox), WebKit (Safari/Chrome) & Opera
|
|
||||||
isRightMB = ev.which == 3;
|
|
||||||
} else if ("button" in ev) { // IE, Opera
|
|
||||||
isRightMB = ev.button == 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!isRightMB) {
|
|
||||||
dragElement(document.getElementById("calendar-time-container"));
|
|
||||||
let pos1 = 0, pos2 = 0, pos3 = 0, pos4 = 0;
|
|
||||||
|
|
||||||
function dragElement(elmnt) {
|
|
||||||
elmnt.onmousedown = dragMouseDown;
|
|
||||||
function dragMouseDown(e) {
|
|
||||||
e = e || window.event;
|
|
||||||
e.preventDefault();
|
|
||||||
pos3 = e.clientX;
|
|
||||||
pos4 = e.clientY;
|
|
||||||
|
|
||||||
document.onmouseup = closeDragElement;
|
|
||||||
document.onmousemove = elementDrag;
|
|
||||||
}
|
|
||||||
|
|
||||||
function elementDrag(e) {
|
|
||||||
e = e || window.event;
|
|
||||||
e.preventDefault();
|
|
||||||
// calculate the new cursor position:
|
|
||||||
pos1 = pos3 - e.clientX;
|
|
||||||
pos2 = pos4 - e.clientY;
|
|
||||||
pos3 = e.clientX;
|
|
||||||
pos4 = e.clientY;
|
|
||||||
// set the element's new position:
|
|
||||||
elmnt.style.bottom = undefined
|
|
||||||
elmnt.style.top = (elmnt.offsetTop - pos2) + "px";
|
|
||||||
elmnt.style.left = (elmnt.offsetLeft - pos1) + "px";
|
|
||||||
}
|
|
||||||
|
|
||||||
function closeDragElement() {
|
|
||||||
// stop moving when mouse button is released:
|
|
||||||
elmnt.onmousedown = undefined;
|
|
||||||
document.onmouseup = undefined;
|
|
||||||
document.onmousemove = undefined;
|
|
||||||
let xPos = (elmnt.offsetLeft - pos1) > window.innerWidth ? window.innerWidth - 200 : (elmnt.offsetLeft - pos1);
|
|
||||||
let yPos = (elmnt.offsetTop - pos2) > window.innerHeight - 20 ? window.innerHeight - 100 : (elmnt.offsetTop - pos2)
|
|
||||||
xPos = xPos < 0 ? 0 : xPos;
|
|
||||||
yPos = yPos < 0 ? 0 : yPos;
|
|
||||||
if (xPos != (elmnt.offsetLeft - pos1) || yPos != (elmnt.offsetTop - pos2)) {
|
|
||||||
elmnt.style.top = (yPos) + "px";
|
|
||||||
elmnt.style.left = (xPos) + "px";
|
|
||||||
}
|
|
||||||
game.system.rdd.calendrier.calendrierPos.top = yPos;
|
|
||||||
game.system.rdd.calendrier.calendrierPos.left = xPos;
|
|
||||||
if (game.user.isGM) {
|
|
||||||
game.settings.set(SYSTEM_RDD, "calendrier-pos", duplicate(game.system.rdd.calendrier.calendrierPos));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if (isRightMB) {
|
|
||||||
game.system.rdd.calendrier.calendrierPos.top = 200;
|
|
||||||
game.system.rdd.calendrier.calendrierPos.left = 200;
|
|
||||||
if (game.user.isGM) {
|
|
||||||
game.settings.set(SYSTEM_RDD, "calendrier-pos", duplicate(game.system.rdd.calendrier.calendrierPos));
|
|
||||||
}
|
|
||||||
this.setPos(game.system.rdd.calendrier.calendrierPos);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -767,7 +767,7 @@ export class RdDCombat {
|
|||||||
// whisper: ChatMessage.getWhisperRecipients("GM")})
|
// whisper: ChatMessage.getWhisperRecipients("GM")})
|
||||||
// }
|
// }
|
||||||
|
|
||||||
if (!await this.accorderEntite('avant-attaque')) {
|
if (!await this.attacker.accorder(this.defender, 'avant-attaque')) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (arme.system.cac == 'empoignade' && this.attacker.isCombatTouche()) {
|
if (arme.system.cac == 'empoignade' && this.attacker.isCombatTouche()) {
|
||||||
@@ -886,7 +886,7 @@ export class RdDCombat {
|
|||||||
}
|
}
|
||||||
await RdDResolutionTable.displayRollData(attackerRoll, this.attacker, 'chat-resultat-attaque.html');
|
await RdDResolutionTable.displayRollData(attackerRoll, this.attacker, 'chat-resultat-attaque.html');
|
||||||
|
|
||||||
if (!await this.accorderEntite('avant-defense')) {
|
if (!await this.attacker.accorder(this.defender, 'avant-defense')) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1319,35 +1319,6 @@ export class RdDCombat {
|
|||||||
this.removeChatMessageActionsPasseArme(attackerRoll.passeArme);
|
this.removeChatMessageActionsPasseArme(attackerRoll.passeArme);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
|
||||||
/* retourne true si on peut continuer, false si on ne peut pas continuer */
|
|
||||||
async accorderEntite(when = 'avant-encaissement') {
|
|
||||||
if (when != game.settings.get(SYSTEM_RDD, "accorder-entite-cauchemar")
|
|
||||||
|| this.defender == undefined
|
|
||||||
|| !this.defender.isEntite([ENTITE_INCARNE])
|
|
||||||
|| this.defender.isEntiteAccordee(this.attacker)) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
let rolled = await RdDResolutionTable.roll(this.attacker.getReveActuel(), - Number(this.defender.system.carac.niveau.value));
|
|
||||||
|
|
||||||
let message = {
|
|
||||||
content: "Jet de points actuels de rêve à " + rolled.finalLevel + RdDResolutionTable.explain(rolled) + "<br>",
|
|
||||||
whisper: ChatMessage.getWhisperRecipients(this.attacker.name)
|
|
||||||
};
|
|
||||||
|
|
||||||
if (rolled.isSuccess) {
|
|
||||||
await this.defender.setEntiteReveAccordee(this.attacker);
|
|
||||||
message.content += this.attacker.name + " s'est accordé avec " + this.defender.name;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
message.content += this.attacker.name + " n'est pas accordé avec " + this.defender.name;
|
|
||||||
}
|
|
||||||
|
|
||||||
ChatMessage.create(message);
|
|
||||||
return rolled.isSuccess;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static async displayActorCombatStatus(combat, actor) {
|
static async displayActorCombatStatus(combat, actor) {
|
||||||
let formData = {
|
let formData = {
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ const levelDown = [
|
|||||||
{ level: -15, score: 1, norm: 1, sign: 0, part: 0, epart: 2, etotal: 10 },
|
{ level: -15, score: 1, norm: 1, sign: 0, part: 0, epart: 2, etotal: 10 },
|
||||||
{ level: -16, score: 1, norm: 1, sign: 0, part: 0, epart: 0, etotal: 2 }
|
{ level: -16, score: 1, norm: 1, sign: 0, part: 0, epart: 0, etotal: 2 }
|
||||||
];
|
];
|
||||||
const levelImpossible = { score: 0, norm:0, sign: 0, part: 0, epart: 0, etotal: 1 };
|
const levelImpossible = { score: 0, norm: 0, sign: 0, part: 0, epart: 0, etotal: 1 };
|
||||||
|
|
||||||
const reussites = [
|
const reussites = [
|
||||||
{ code: "etotal", isPart: false, isSign: false, isSuccess: false, isEchec: true, isEPart: true, isETotal: true, ptTache: -4, ptQualite: -6, quality: "Echec total", condition: (target, roll) => roll >= target.etotal && roll <= 100 },
|
{ code: "etotal", isPart: false, isSign: false, isSuccess: false, isEchec: true, isEPart: true, isETotal: true, ptTache: -4, ptQualite: -6, quality: "Echec total", condition: (target, roll) => roll >= target.etotal && roll <= 100 },
|
||||||
@@ -42,6 +42,44 @@ export class RdDResolutionTable {
|
|||||||
return table;
|
return table;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
static computeChances(carac, level) {
|
||||||
|
if (level < -16) {
|
||||||
|
return levelImpossible;
|
||||||
|
}
|
||||||
|
if (level < -10) {
|
||||||
|
return levelDown.find(it => it.level == level);
|
||||||
|
}
|
||||||
|
const percentage = RdDResolutionTable.computePercentage(carac, level);
|
||||||
|
return this._computeCell(level, percentage);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
static _computeRow(caracValue) {
|
||||||
|
let dataRow = [
|
||||||
|
this._computeCell(-10, Math.max(Math.floor(caracValue / 4), 1)),
|
||||||
|
this._computeCell(-9, Math.max(Math.floor(caracValue / 2), 1))
|
||||||
|
]
|
||||||
|
for (var diff = -8; diff <= 22; diff++) {
|
||||||
|
dataRow[diff + 10] = this._computeCell(diff, RdDResolutionTable.computePercentage(caracValue, diff));
|
||||||
|
}
|
||||||
|
return dataRow;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
static _computeCell(niveau, percentage) {
|
||||||
|
return {
|
||||||
|
niveau: niveau,
|
||||||
|
score: percentage,
|
||||||
|
norm: Math.min(99, percentage),
|
||||||
|
sign: this._reussiteSignificative(percentage),
|
||||||
|
part: this._reussitePart(percentage),
|
||||||
|
epart: this._echecParticulier(percentage),
|
||||||
|
etotal: this._echecTotal(percentage)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static getResultat(code) {
|
static getResultat(code) {
|
||||||
let resultat = reussites.find(r => code == r.code);
|
let resultat = reussites.find(r => code == r.code);
|
||||||
@@ -51,17 +89,6 @@ export class RdDResolutionTable {
|
|||||||
return resultat;
|
return resultat;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
|
||||||
static explain(rolled) {
|
|
||||||
let message = "<br>Jet : <strong>" + rolled.roll + "</strong> sur " + rolled.score + "% ";
|
|
||||||
if (rolled.caracValue != undefined && rolled.finalLevel != undefined) {
|
|
||||||
message += (rolled.diviseurSignificative > 1 ? `(1/${rolled.diviseurSignificative} de ` : "(")
|
|
||||||
+ rolled.caracValue + " à " + Misc.toSignedString(rolled.finalLevel) + ") ";
|
|
||||||
}
|
|
||||||
message += '<strong>' + rolled.quality + '</strong>'
|
|
||||||
return message;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static async displayRollData(rollData, actor = undefined, template = 'chat-resultat-general.html') {
|
static async displayRollData(rollData, actor = undefined, template = 'chat-resultat-general.html') {
|
||||||
return await ChatUtility.createChatWithRollMode(actor?.userName ?? game.user.name, {
|
return await ChatUtility.createChatWithRollMode(actor?.userName ?? game.user.name, {
|
||||||
@@ -82,8 +109,8 @@ export class RdDResolutionTable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static async roll(caracValue, finalLevel, rollData = {}){
|
static async roll(caracValue, finalLevel, rollData = {}) {
|
||||||
let chances = this.computeChances(caracValue, finalLevel);
|
let chances = duplicate(this.computeChances(caracValue, finalLevel));
|
||||||
this._updateChancesWithBonus(chances, rollData.bonus, finalLevel);
|
this._updateChancesWithBonus(chances, rollData.bonus, finalLevel);
|
||||||
this._updateChancesFactor(chances, rollData.diviseurSignificative);
|
this._updateChancesFactor(chances, rollData.diviseurSignificative);
|
||||||
chances.showDice = rollData.showDice;
|
chances.showDice = rollData.showDice;
|
||||||
@@ -95,7 +122,7 @@ export class RdDResolutionTable {
|
|||||||
rolled.bonus = rollData.bonus;
|
rolled.bonus = rollData.bonus;
|
||||||
rolled.factorHtml = Misc.getFractionHtml(rollData.diviseurSignificative);
|
rolled.factorHtml = Misc.getFractionHtml(rollData.diviseurSignificative);
|
||||||
|
|
||||||
if (ReglesOptionelles.isUsing("afficher-colonnes-reussite")){
|
if (ReglesOptionelles.isUsing("afficher-colonnes-reussite")) {
|
||||||
rolled.niveauNecessaire = this.findNiveauNecessaire(caracValue, rolled.roll);
|
rolled.niveauNecessaire = this.findNiveauNecessaire(caracValue, rolled.roll);
|
||||||
rolled.ajustementNecessaire = rolled.niveauNecessaire - finalLevel;
|
rolled.ajustementNecessaire = rolled.niveauNecessaire - finalLevel;
|
||||||
}
|
}
|
||||||
@@ -103,13 +130,24 @@ export class RdDResolutionTable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static findNiveauNecessaire(caracValue, rollValue) {
|
static findNiveauNecessaire(carac, rolled) {
|
||||||
for (let cell of this.resolutionTable[caracValue]) {
|
if (carac == 0) {
|
||||||
if ( rollValue <= cell.norm) {
|
return NaN;
|
||||||
return cell.niveau;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return 16; // Dummy default
|
if (rolled >= carac){
|
||||||
|
const upper = Math.ceil(rolled/carac);
|
||||||
|
return 2*upper -10
|
||||||
|
}
|
||||||
|
if (rolled > Math.floor(carac/2)) {
|
||||||
|
return -8
|
||||||
|
}
|
||||||
|
if (rolled > Math.floor(carac/4)) {
|
||||||
|
return -9
|
||||||
|
}
|
||||||
|
if (rolled > 1) {
|
||||||
|
return -10
|
||||||
|
}
|
||||||
|
return -11;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
@@ -122,7 +160,7 @@ export class RdDResolutionTable {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static _updateChancesWithBonus(chances, bonus, finalLevel) {
|
static _updateChancesWithBonus(chances, bonus, finalLevel) {
|
||||||
if (bonus && finalLevel>-11) {
|
if (bonus && finalLevel > -11) {
|
||||||
let newScore = Number(chances.score) + bonus;
|
let newScore = Number(chances.score) + bonus;
|
||||||
mergeObject(chances, this._computeCell(undefined, newScore), { overwrite: true });
|
mergeObject(chances, this._computeCell(undefined, newScore), { overwrite: true });
|
||||||
}
|
}
|
||||||
@@ -142,21 +180,19 @@ export class RdDResolutionTable {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static async rollChances(chances, diviseur, forceDiceResult = -1) {
|
static async rollChances(chances, diviseur, forceDiceResult = -1) {
|
||||||
chances.forceDiceResult = forceDiceResult <= 0 || forceDiceResult > 100 ? undefined : {total: forceDiceResult};
|
chances.forceDiceResult = forceDiceResult <= 0 || forceDiceResult > 100 ? undefined : { total: forceDiceResult };
|
||||||
chances.roll = await RdDDice.rollTotal( "1d100", chances);
|
chances.roll = await RdDDice.rollTotal("1d100", chances);
|
||||||
mergeObject(chances, this.computeReussite(chances, chances.roll, diviseur), { overwrite: true });
|
mergeObject(chances, this.computeReussite(chances, chances.roll, diviseur), { overwrite: true });
|
||||||
return chances;
|
return chances;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static computeChances(caracValue, difficulte) {
|
static computePercentage(carac, diff) {
|
||||||
if (difficulte < -16) {
|
if (diff < -16) return 0
|
||||||
return duplicate(levelImpossible);
|
if (diff < -10) return 1
|
||||||
}
|
if (diff == -10) return Math.max(Math.floor(carac / 4), 1)
|
||||||
if (difficulte < -10) {
|
if (diff == -9) return Math.max(Math.floor(carac / 2), 1)
|
||||||
return duplicate(levelDown.find(levelData => levelData.level == difficulte));
|
return Math.max(Math.floor(carac * (diff + 10) / 2), 1);
|
||||||
}
|
|
||||||
return duplicate(RdDResolutionTable.resolutionTable[caracValue][difficulte + 10]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
@@ -213,31 +249,6 @@ export class RdDResolutionTable {
|
|||||||
return reussite;
|
return reussite;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
|
||||||
static _computeRow(caracValue) {
|
|
||||||
let dataRow = [
|
|
||||||
this._computeCell(-10, Math.max(Math.floor(caracValue / 4), 1)),
|
|
||||||
this._computeCell(-9, Math.max(Math.floor(caracValue / 2), 1))
|
|
||||||
]
|
|
||||||
for (var diff = -8; diff <= 22; diff++) {
|
|
||||||
dataRow[diff + 10] = this._computeCell(diff, Math.max(Math.floor(caracValue * (diff + 10) / 2), 1));
|
|
||||||
}
|
|
||||||
return dataRow;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
|
||||||
static _computeCell(niveau, percentage) {
|
|
||||||
return {
|
|
||||||
niveau: niveau,
|
|
||||||
score: percentage,
|
|
||||||
norm: Math.min(99, percentage),
|
|
||||||
sign: this._reussiteSignificative(percentage),
|
|
||||||
part: this._reussitePart(percentage),
|
|
||||||
epart: this._echecParticulier(percentage),
|
|
||||||
etotal: this._echecTotal(percentage)
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static _reussiteSignificative(percentage) {
|
static _reussiteSignificative(percentage) {
|
||||||
return Math.floor(percentage / 2);
|
return Math.floor(percentage / 2);
|
||||||
@@ -261,92 +272,34 @@ export class RdDResolutionTable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static buildHTMLResults(caracValue, levelValue) {
|
static subTable(carac, level, delta = { carac: 2, level: 5}) {
|
||||||
if (caracValue == undefined || isNaN(caracValue)) caracValue = 10;
|
return {
|
||||||
if (levelValue == undefined || isNaN(levelValue)) levelValue = 0;
|
carac,
|
||||||
|
level,
|
||||||
let cell = this.computeChances(caracValue, levelValue);
|
minCarac: carac - (delta?.carac ?? 2),
|
||||||
cell.epart = cell.epart > 99 ? 'N/A' : cell.epart;
|
maxCarac: carac + (delta?.carac ?? 2),
|
||||||
cell.etotal = cell.etotal > 100 ? 'N/A' : cell.etotal;
|
minLevel: level - (delta?.level ?? 5),
|
||||||
cell.score = Math.min(cell.score, 99);
|
maxLevel: level + (delta?.level ?? 5)
|
||||||
|
};
|
||||||
return `
|
|
||||||
<span class="table-proba-reussite competence-label">
|
|
||||||
Particulière: <span class="rdd-roll-part">${cell.part}</span>
|
|
||||||
- Significative: <span class="rdd-roll-sign">${cell.sign}</span>
|
|
||||||
- Réussite: <span class="rdd-roll-norm">${cell.score}</span>
|
|
||||||
- Echec Particulier: <span class="rdd-roll-epart">${cell.epart}</span>
|
|
||||||
- Echec Total: <span class="rdd-roll-etotal">${cell.etotal}</span>
|
|
||||||
</span>
|
|
||||||
`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static buildHTMLTableExtract(caracValue, levelValue) {
|
static async buildHTMLTable({ carac: carac, level: level, minCarac = 1, maxCarac = 21, minLevel = -10, maxLevel = 11 }) {
|
||||||
return this.buildHTMLTable(caracValue, levelValue, caracValue - 2, caracValue + 2, levelValue - 5, levelValue + 5)
|
let colonnes = maxLevel - minLevel;
|
||||||
}
|
|
||||||
|
|
||||||
static buildHTMLTable(caracValue, levelValue, minCarac = 1, maxCarac = 21, minLevel = -10, maxLevel = 11) {
|
|
||||||
return this._buildHTMLTable(caracValue, levelValue, minCarac, maxCarac, minLevel, maxLevel)
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
|
||||||
static _buildHTMLTable(caracValue, levelValue, minCarac, maxCarac, minLevel, maxLevel) {
|
|
||||||
let countColonnes = maxLevel - minLevel;
|
|
||||||
minCarac = Math.max(minCarac, 1);
|
minCarac = Math.max(minCarac, 1);
|
||||||
maxCarac = Math.min(maxCarac, caracMaximumResolution);
|
maxCarac = Math.min(maxCarac, minCarac + 20);
|
||||||
minLevel = Math.max(minLevel, -10);
|
minLevel = Math.max(minLevel, -10);
|
||||||
maxLevel = Math.max(Math.min(maxLevel, 22), minLevel + countColonnes);
|
maxLevel = Math.max(Math.min(maxLevel, 30), minLevel + colonnes);
|
||||||
|
return await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/resolution-table.html', {
|
||||||
let table = $("<table class='table-resolution'/>")
|
carac: carac,
|
||||||
.append(this._buildHTMLHeader(RdDResolutionTable.resolutionTable[0], minLevel, maxLevel));
|
difficulte: level,
|
||||||
|
min: minLevel,
|
||||||
for (var rowIndex = minCarac; rowIndex <= maxCarac; rowIndex++) {
|
rows: RdDResolutionTable.incrementalArray(minCarac, maxCarac),
|
||||||
table.append(this._buildHTMLRow(RdDResolutionTable.resolutionTable[rowIndex], rowIndex, caracValue, levelValue, minLevel, maxLevel));
|
cols: RdDResolutionTable.incrementalArray(minLevel, maxLevel)
|
||||||
}
|
});
|
||||||
table.append("</table>");
|
|
||||||
return table;
|
|
||||||
}
|
}
|
||||||
|
static incrementalArray(min, max) {
|
||||||
/* -------------------------------------------- */
|
return Array.from(Array(max-min+1).keys()).map(i=>i+min)
|
||||||
static _buildHTMLHeader(dataRow, minLevel, maxLevel) {
|
|
||||||
let tr = $("<tr/>");
|
|
||||||
|
|
||||||
if (minLevel > -8) {
|
|
||||||
tr.append($("<th class='table-resolution-level'/>").text("-8"))
|
|
||||||
}
|
|
||||||
if (minLevel > -7) {
|
|
||||||
tr.append($("<th class='table-resolution-level'/>").text("..."));
|
|
||||||
}
|
|
||||||
for (let difficulte = minLevel; difficulte <= maxLevel; difficulte++) {
|
|
||||||
tr.append($("<th class='table-resolution-level'/>").text(Misc.toSignedString(difficulte)));
|
|
||||||
}
|
|
||||||
return tr;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
|
||||||
static _buildHTMLRow(dataRow, rowIndex, caracValue, levelValue, minLevel, maxLevel) {
|
|
||||||
let tr = $("<tr/>");
|
|
||||||
let max = maxLevel;
|
|
||||||
|
|
||||||
if (minLevel > -8) {
|
|
||||||
let score = dataRow[-8 + 10].score;
|
|
||||||
tr.append($("<td class='table-resolution-carac'/>").text(score))
|
|
||||||
}
|
|
||||||
if (minLevel > -7) {
|
|
||||||
tr.append($("<td/>"))
|
|
||||||
}
|
|
||||||
for (let difficulte = minLevel; difficulte <= max; difficulte++) {
|
|
||||||
let td = $("<td/>");
|
|
||||||
let score = dataRow[difficulte + 10].score;
|
|
||||||
if (rowIndex == caracValue && levelValue == difficulte) {
|
|
||||||
td.addClass('table-resolution-target');
|
|
||||||
} else if (difficulte == -8) {
|
|
||||||
td.addClass('table-resolution-carac');
|
|
||||||
}
|
|
||||||
tr.append(td.text(score));
|
|
||||||
}
|
|
||||||
return tr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
import { ENTITE_BLURETTE, ENTITE_INCARNE} from "./constants.js";
|
import { ENTITE_BLURETTE, ENTITE_INCARNE } from "./constants.js";
|
||||||
|
import { RdDUtility } from "./rdd-utility.js";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Extend the base Dialog entity by defining a custom window to perform roll.
|
* Extend the base Dialog entity by defining a custom window to perform roll.
|
||||||
@@ -6,32 +7,37 @@ import { ENTITE_BLURETTE, ENTITE_INCARNE} from "./constants.js";
|
|||||||
*/
|
*/
|
||||||
export class RdDEncaisser extends Dialog {
|
export class RdDEncaisser extends Dialog {
|
||||||
|
|
||||||
|
static async encaisser(actor) {
|
||||||
|
let html = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/dialog-roll-encaisser.html',
|
||||||
|
{ ajustementsEncaissement: RdDUtility.getAjustementsEncaissement() }
|
||||||
|
);
|
||||||
|
new RdDEncaisser(html, actor).render(true);
|
||||||
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
constructor(html, actor) {
|
constructor(html, actor) {
|
||||||
// Common conf
|
let dialogConf = {
|
||||||
let buttons = {};
|
title: "Jet d'Encaissement",
|
||||||
if (!actor.isEntite()){
|
content: html,
|
||||||
buttons = {
|
}
|
||||||
|
|
||||||
|
if (!actor.isEntite()) {
|
||||||
|
dialogConf.default = "mortel";
|
||||||
|
dialogConf.buttons = {
|
||||||
"mortel": { label: "Mortel", callback: html => this.performEncaisser("mortel") },
|
"mortel": { label: "Mortel", callback: html => this.performEncaisser("mortel") },
|
||||||
"non-mortel": { label: "Non-mortel", callback: html => this.performEncaisser("non-mortel") },
|
"non-mortel": { label: "Non-mortel", callback: html => this.performEncaisser("non-mortel") },
|
||||||
"sonne": { label: "Sonné", callback: html => this.actor.setSonne() },
|
"sonne": { label: "Sonné", callback: html => this.actor.setSonne() },
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
else if (actor.isEntite([ENTITE_BLURETTE, ENTITE_INCARNE])){
|
else if (actor.isEntite([ENTITE_BLURETTE, ENTITE_INCARNE])) {
|
||||||
buttons = {
|
dialogConf.default = "cauchemar"
|
||||||
"cauchemar": { label: "cauchemar", callback: html => this.performEncaisser("cauchemar") }
|
dialogConf.buttons = {
|
||||||
|
"cauchemar": { label: "Cauchemar", callback: html => this.performEncaisser("cauchemar") }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let dialogConf = {
|
|
||||||
title: "Jet d'Encaissement",
|
|
||||||
content: html,
|
|
||||||
buttons: buttons,
|
|
||||||
default: "mortel"
|
|
||||||
}
|
|
||||||
|
|
||||||
let dialogOptions = {
|
let dialogOptions = {
|
||||||
classes: ["rdddialog"],
|
classes: ["rdd-roll-dialog"],
|
||||||
width: 320,
|
width: 320,
|
||||||
height: 'fit-content'
|
height: 'fit-content'
|
||||||
}
|
}
|
||||||
@@ -44,7 +50,18 @@ export class RdDEncaisser extends Dialog {
|
|||||||
this.encaisserSpecial = "aucun";
|
this.encaisserSpecial = "aucun";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
activateListeners(html) {
|
||||||
|
super.activateListeners(html);
|
||||||
|
this.html = html;
|
||||||
|
|
||||||
|
this.html.find('[name="modificateurDegats"]').val("0");
|
||||||
|
this.html.find('[name="modificateurDegats"]').change((event) => {
|
||||||
|
this.modifier = event.currentTarget.value; // Update the selected bonus/malus
|
||||||
|
});
|
||||||
|
this.html.find('[name="encaisserSpecial"]').change((event) => {
|
||||||
|
this.encaisserSpecial = event.currentTarget.value; // Update the selected bonus/malus
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
performEncaisser(mortalite) {
|
performEncaisser(mortalite) {
|
||||||
@@ -58,22 +75,4 @@ export class RdDEncaisser extends Dialog {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
|
||||||
activateListeners(html) {
|
|
||||||
super.activateListeners(html);
|
|
||||||
|
|
||||||
// Setup everything onload
|
|
||||||
$(function () {
|
|
||||||
$("#modificateurDegats").val("0");
|
|
||||||
});
|
|
||||||
|
|
||||||
html.find('#modificateurDegats').change((event) => {
|
|
||||||
this.modifier = event.currentTarget.value; // Update the selected bonus/malus
|
|
||||||
});
|
|
||||||
html.find('#encaisserSpecial').change((event) => {
|
|
||||||
this.encaisserSpecial = event.currentTarget.value; // Update the selected bonus/malus
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,47 +13,33 @@ export class RdDRollDialogEthylisme extends Dialog {
|
|||||||
title: "Test d'éthylisme",
|
title: "Test d'éthylisme",
|
||||||
content: html,
|
content: html,
|
||||||
default: "rollButton",
|
default: "rollButton",
|
||||||
buttons: { "rollButton": { label: "Test d'éthylisme", callback: html => this.onButton(html) } }
|
buttons: { "rollButton": { label: "Test d'éthylisme", callback: html => onRoll(this.rollData) } }
|
||||||
};
|
};
|
||||||
let dialogOptions = { classes: ["rdddialog"], width: 400, height: 'fit-content', 'z-index': 99999 }
|
let dialogOptions = { classes: ["rdd-roll-dialog"], width: 400, height: 'fit-content', 'z-index': 99999 }
|
||||||
super(dialogConf, dialogOptions)
|
super(dialogConf, dialogOptions)
|
||||||
|
|
||||||
//console.log("ETH", rollData);
|
|
||||||
this.onRoll = onRoll;
|
|
||||||
this.rollData = rollData;
|
this.rollData = rollData;
|
||||||
this.actor = actor;
|
this.actor = actor;
|
||||||
}
|
}
|
||||||
|
|
||||||
async onButton(html) {
|
activateListeners(html) {
|
||||||
this.onRoll(this.rollData);
|
super.activateListeners(html);
|
||||||
|
this.html = html;
|
||||||
|
this.bringToTop();
|
||||||
|
|
||||||
|
this.html.find(".force-alcool").change((event) => {
|
||||||
|
this.rollData.forceAlcool = Misc.toInt(event.currentTarget.value);
|
||||||
|
this.updateRollResult();
|
||||||
|
});
|
||||||
|
|
||||||
|
this.html.find(".force-alcool").val(Misc.toInt(this.rollData.forceAlcool));
|
||||||
|
this.updateRollResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
activateListeners(html) {
|
|
||||||
super.activateListeners(html);
|
|
||||||
|
|
||||||
this.bringToTop(); // Ensure top level
|
|
||||||
// Get the rollData stuff
|
|
||||||
var rollData = this.rollData;
|
|
||||||
var dialog = this;
|
|
||||||
|
|
||||||
// Setup everything onload
|
|
||||||
$(function () {
|
|
||||||
$("#forceAlcool").val(Misc.toInt(rollData.forceAlcool));
|
|
||||||
dialog.updateRollResult();
|
|
||||||
});
|
|
||||||
|
|
||||||
// Update !
|
|
||||||
html.find('#forceAlcool').change((event) => {
|
|
||||||
rollData.forceAlcool = Misc.toInt(event.currentTarget.value); // Update the selected bonus/malus
|
|
||||||
dialog.updateRollResult();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
async updateRollResult() {
|
async updateRollResult() {
|
||||||
|
this.html.find(".roll-ethylisme").text(this.rollData.vie + " / " + Misc.toSignedString(Number(this.rollData.etat) + Number(this.rollData.forceAlcool) + this.rollData.diffNbDoses));
|
||||||
// Mise à jour valeurs
|
this.html.find(".table-resolution").remove();
|
||||||
$("#roll-param").text(this.rollData.vie + " / " + Misc.toSignedString(Number(this.rollData.etat) + Number(this.rollData.forceAlcool) + this.rollData.diffNbDoses));
|
|
||||||
$(".table-resolution").remove();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,12 +9,19 @@ const titleTableDeResolution = 'Table de résolution';
|
|||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
export class RdDRollResolutionTable extends Dialog {
|
export class RdDRollResolutionTable extends Dialog {
|
||||||
|
|
||||||
|
static resolutionTable = undefined;
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static async open(rollData = {}) {
|
static async open() {
|
||||||
RdDRollResolutionTable._setDefaultOptions(rollData);
|
if (RdDRollResolutionTable.resolutionTable == undefined) {
|
||||||
let html = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/dialog-roll-resolution.html', rollData);
|
const rollData = {}
|
||||||
const dialog = new RdDRollResolutionTable(rollData, html);
|
RdDRollResolutionTable._setDefaultOptions(rollData);
|
||||||
dialog.render(true);
|
let html = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/dialog-roll-resolution.html', rollData);
|
||||||
|
RdDRollResolutionTable.resolutionTable = new RdDRollResolutionTable(rollData, html);
|
||||||
|
RdDRollResolutionTable.resolutionTable.render(true);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
RdDRollResolutionTable.resolutionTable.bringToTop();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
@@ -53,11 +60,40 @@ export class RdDRollResolutionTable extends Dialog {
|
|||||||
'lancer-fermer': { label: 'Lancer les dés et fermer', callback: html => this.onLancerFermer() }
|
'lancer-fermer': { label: 'Lancer les dés et fermer', callback: html => this.onLancerFermer() }
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
super(conf, { classes: ["rdddialog"], width: 800, height: 'fit-content', 'z-index': 99999 });
|
super(conf, { classes: ["rdd-roll-dialog"], top: 50, width: 'fit-content', height: 'fit-content', 'z-index': 99999 });
|
||||||
|
|
||||||
this.rollData = rollData;
|
this.rollData = rollData;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
activateListeners(html) {
|
||||||
|
super.activateListeners(html);
|
||||||
|
this.html = html;
|
||||||
|
this.bringToTop();
|
||||||
|
|
||||||
|
|
||||||
|
this.html.find("[name='diffLibre']").val(Misc.toInt(this.rollData.diffLibre));
|
||||||
|
this.html.find("[name='diffConditions']").val(Misc.toInt(this.rollData.diffConditions));
|
||||||
|
this.updateRollResult();
|
||||||
|
|
||||||
|
this.html.find('.lancer-table-resolution').click((event) => {
|
||||||
|
this.onLancer();
|
||||||
|
});
|
||||||
|
// Update !
|
||||||
|
this.html.find("[name='diffLibre']").change((event) => {
|
||||||
|
this.rollData.diffLibre = Misc.toInt(event.currentTarget.value);
|
||||||
|
this.updateRollResult();
|
||||||
|
});
|
||||||
|
this.html.find("[name='diffConditions']").change((event) => {
|
||||||
|
this.rollData.diffConditions = Misc.toInt(event.currentTarget.value);
|
||||||
|
this.updateRollResult();
|
||||||
|
});
|
||||||
|
this.html.find("[name='carac']").change((event) => {
|
||||||
|
let caracKey = event.currentTarget.value;
|
||||||
|
this.rollData.selectedCarac = this.rollData.carac[caracKey];
|
||||||
|
this.updateRollResult();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async onLancer() {
|
async onLancer() {
|
||||||
await RdDResolutionTable.rollData(this.rollData);
|
await RdDResolutionTable.rollData(this.rollData);
|
||||||
@@ -72,65 +108,36 @@ export class RdDRollResolutionTable extends Dialog {
|
|||||||
await RdDResolutionTable.displayRollData(this.rollData);
|
await RdDResolutionTable.displayRollData(this.rollData);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
|
||||||
activateListeners(html) {
|
|
||||||
super.activateListeners(html);
|
|
||||||
|
|
||||||
this.bringToTop();
|
|
||||||
|
|
||||||
var dialog = this;
|
|
||||||
|
|
||||||
// Setup everything onload
|
|
||||||
function onLoad(){
|
|
||||||
$("#diffLibre").val(Misc.toInt(dialog.rollData.diffLibre));
|
|
||||||
$("#diffConditions").val(Misc.toInt(dialog.rollData.diffConditions));
|
|
||||||
dialog.updateRollResult();
|
|
||||||
}
|
|
||||||
$(function () { onLoad();});
|
|
||||||
html.find('#lancer').click((event) => {
|
|
||||||
this.onLancer();
|
|
||||||
});
|
|
||||||
// Update !
|
|
||||||
html.find('#diffLibre').change((event) => {
|
|
||||||
this.rollData.diffLibre = Misc.toInt(event.currentTarget.value);
|
|
||||||
this.updateRollResult();
|
|
||||||
});
|
|
||||||
html.find('#diffConditions').change((event) => {
|
|
||||||
this.rollData.diffConditions = Misc.toInt(event.currentTarget.value);
|
|
||||||
this.updateRollResult();
|
|
||||||
});
|
|
||||||
html.find('#carac').change((event) => {
|
|
||||||
let caracKey = event.currentTarget.value;
|
|
||||||
this.rollData.selectedCarac = this.rollData.carac[caracKey];
|
|
||||||
this.updateRollResult();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async updateRollResult() {
|
async updateRollResult() {
|
||||||
let rollData = this.rollData;
|
let rollData = this.rollData;
|
||||||
rollData.caracValue = parseInt(rollData.selectedCarac.value)
|
rollData.caracValue = parseInt(rollData.selectedCarac.value)
|
||||||
rollData.finalLevel = this._computeFinalLevel(rollData);
|
rollData.finalLevel = this._computeFinalLevel(rollData);
|
||||||
|
|
||||||
|
const htmlTable = await RdDResolutionTable.buildHTMLTable({
|
||||||
|
carac: rollData.caracValue,
|
||||||
|
level: rollData.finalLevel,
|
||||||
|
maxCarac: 20,
|
||||||
|
maxLevel: 10
|
||||||
|
});
|
||||||
|
|
||||||
// Mise à jour valeurs
|
// Mise à jour valeurs
|
||||||
$("#carac").val(rollData.caracValue);
|
this.html.find("[name='carac']").val(rollData.caracValue);
|
||||||
$("#roll-param").text(rollData.selectedCarac.value + " / " + Misc.toSignedString(rollData.finalLevel));
|
this.html.find(".roll-param-resolution").text(rollData.selectedCarac.value + " / " + Misc.toSignedString(rollData.finalLevel));
|
||||||
$(".table-resolution").remove();
|
this.html.find("div.placeholder-resolution").empty().append(htmlTable)
|
||||||
$(".table-proba-reussite").remove();
|
|
||||||
$("#tableResolution").append(RdDResolutionTable.buildHTMLTable(rollData.caracValue, rollData.finalLevel));
|
|
||||||
$("#tableProbaReussite").append(RdDResolutionTable.buildHTMLResults(rollData.caracValue, rollData.finalLevel));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
_computeFinalLevel(rollData) {
|
_computeFinalLevel(rollData) {
|
||||||
const diffConditions = Misc.toInt(rollData.diffConditions);
|
const diffConditions = Misc.toInt(rollData.diffConditions);
|
||||||
const diffLibre = this._computeDiffLibre(rollData);
|
const diffLibre = Misc.toInt(rollData.diffLibre);
|
||||||
|
|
||||||
return diffLibre + diffConditions;
|
return diffLibre + diffConditions;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
async close() {
|
||||||
_computeDiffLibre(rollData) {
|
await super.close();
|
||||||
return Misc.toInt(rollData.diffLibre);
|
RdDRollResolutionTable.resolutionTable = undefined;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,24 +16,17 @@ import { ReglesOptionelles } from "./settings/regles-optionelles.js";
|
|||||||
export class RdDRoll extends Dialog {
|
export class RdDRoll extends Dialog {
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static async create(actor, rollData, dialogConfig, ...actions) {
|
static async create(actor, rollData, dialogConfig, action) {
|
||||||
|
RdDRoll._ensureCorrectAction(action);
|
||||||
if (actor.isRollWindowsOpened()) {
|
|
||||||
ui.notifications.warn("Vous avez déja une fenêtre de Test ouverte, il faut la fermer avant d'en ouvrir une autre.")
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
actor.setRollWindowsOpened(true);
|
|
||||||
|
|
||||||
RdDRoll._ensureCorrectActions(actions);
|
|
||||||
RdDRoll._setDefaultOptions(actor, rollData);
|
RdDRoll._setDefaultOptions(actor, rollData);
|
||||||
|
|
||||||
const html = await renderTemplate(dialogConfig.html, rollData);
|
const html = await renderTemplate(dialogConfig.html, rollData);
|
||||||
|
|
||||||
let options = { classes: ["rdddialog"], width: 600, height: 'fit-content', 'z-index': 99999 };
|
let options = { classes: ["rdd-roll-dialog"], width: 600, height: 'fit-content', 'z-index': 99999, close: html => {} };
|
||||||
if (dialogConfig.options) {
|
if (dialogConfig.close) {
|
||||||
mergeObject(options, dialogConfig.options, { overwrite: true })
|
options.close = dialogConfig.close;
|
||||||
}
|
}
|
||||||
return new RdDRoll(actor, rollData, html, options, actions, dialogConfig.close);
|
return new RdDRoll(actor, rollData, html, options, action);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
@@ -67,7 +60,7 @@ export class RdDRoll extends Dialog {
|
|||||||
forceDiceResult: -1
|
forceDiceResult: -1
|
||||||
}
|
}
|
||||||
// Mini patch :Ajout du rêve actuel
|
// Mini patch :Ajout du rêve actuel
|
||||||
if ( actor.system.type == "personnage") {
|
if (actor.system.type == "personnage") {
|
||||||
defaultRollData.carac["reve-actuel"] = actor.system.reve.reve
|
defaultRollData.carac["reve-actuel"] = actor.system.reve.reve
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -79,6 +72,7 @@ export class RdDRoll extends Dialog {
|
|||||||
|
|
||||||
RollDataAjustements.calcul(rollData, actor);
|
RollDataAjustements.calcul(rollData, actor);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static getDiviseurSignificative(rollData) {
|
static getDiviseurSignificative(rollData) {
|
||||||
let facteurSign = 1;
|
let facteurSign = 1;
|
||||||
@@ -97,171 +91,132 @@ export class RdDRoll extends Dialog {
|
|||||||
return facteurSign;
|
return facteurSign;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static _ensureCorrectActions(actions) {
|
static _ensureCorrectAction(action) {
|
||||||
if (actions.length == 0) {
|
if (action.callbacks == undefined) {
|
||||||
throw 'No action defined';
|
console.warn('No callback defined for ', action.name);
|
||||||
|
action.callbacks = [{ action: r => console.warn(action.name, r) }];
|
||||||
}
|
}
|
||||||
actions.forEach(action => {
|
|
||||||
if (action.callbacks == undefined) {
|
|
||||||
action.callbacks = [{ action: r => console.log(action.name, r) }];
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
constructor(actor, rollData, html, options, actions, close = undefined) {
|
constructor(actor, rollData, html, options, action) {
|
||||||
let conf = {
|
let conf = {
|
||||||
title: actions[0].label,
|
title: action.label,
|
||||||
content: html,
|
content: html,
|
||||||
buttons: {},
|
buttons: {
|
||||||
default: actions[0].name,
|
"onAction": {
|
||||||
close: close
|
label: action.label, callback: html => {
|
||||||
};
|
this.rollData.canClose = true;
|
||||||
for (let action of actions) {
|
this.onAction(action)
|
||||||
conf.buttons[action.name] = {
|
}
|
||||||
label: action.label, callback: html => {
|
|
||||||
this.rollData.canClose = true;
|
|
||||||
this.onAction(action, html)
|
|
||||||
}
|
}
|
||||||
};
|
},
|
||||||
}
|
default: "onAction",
|
||||||
|
close: options.close
|
||||||
|
};
|
||||||
super(conf, options);
|
super(conf, options);
|
||||||
|
|
||||||
this.actor = actor;
|
this.actor = actor;
|
||||||
this.rollData = rollData;
|
this.rollData = rollData;
|
||||||
}
|
}
|
||||||
|
|
||||||
close() {
|
|
||||||
if (this.rollData.canClose) {
|
|
||||||
this.actor.setRollWindowsOpened(false);
|
|
||||||
return super.close();
|
|
||||||
}
|
|
||||||
ui.notifications.info("Vous devez faire ce jet de dés!");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
|
||||||
async onAction(action, html) {
|
|
||||||
this.rollData.forceDiceResult = Number.parseInt($('#force-dice-result').val()) ?? -1;
|
|
||||||
await RdDResolutionTable.rollData(this.rollData);
|
|
||||||
console.log("RdDRoll -=>", this.rollData, this.rollData.rolled);
|
|
||||||
this.actor.setRollWindowsOpened(false);
|
|
||||||
if (action.callbacks)
|
|
||||||
for (let callback of action.callbacks) {
|
|
||||||
if (callback.condition == undefined || callback.condition(this.rollData)) {
|
|
||||||
await callback.action(this.rollData);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
|
||||||
activateListeners(html) {
|
activateListeners(html) {
|
||||||
super.activateListeners(html);
|
super.activateListeners(html);
|
||||||
|
this.html = html;
|
||||||
this.bringToTop();
|
this.bringToTop();
|
||||||
|
|
||||||
var dialog = this;
|
console.log('RdDRoll.activateListeners', this.rollData);
|
||||||
|
|
||||||
function onLoad() {
|
// Update html, according to rollData
|
||||||
let rollData = dialog.rollData;
|
if (this.rollData.competence) {
|
||||||
console.log('Ouverture RdDRoll', rollData);
|
const defaut_carac = this.rollData.competence.system.defaut_carac
|
||||||
// Update html, according to rollData
|
// Set the default carac from the competence item
|
||||||
if (rollData.competence) {
|
this.rollData.selectedCarac = this.rollData.carac[defaut_carac];
|
||||||
const defaut_carac = rollData.competence.system.defaut_carac
|
this.html.find("[name='carac']").val(defaut_carac);
|
||||||
// Set the default carac from the competence item
|
|
||||||
rollData.selectedCarac = rollData.carac[defaut_carac];
|
|
||||||
$("#carac").val(defaut_carac);
|
|
||||||
}
|
|
||||||
if (rollData.selectedSort) {
|
|
||||||
dialog.setSelectedSort(rollData.selectedSort);
|
|
||||||
$(".draconic").val(rollData.selectedSort.system.listIndex); // Uniquement a la selection du sort, pour permettre de changer
|
|
||||||
}
|
|
||||||
RdDItemSort.setCoutReveReel(rollData.selectedSort);
|
|
||||||
$("#diffLibre").val(Misc.toInt(rollData.diffLibre));
|
|
||||||
$("#diffConditions").val(Misc.toInt(rollData.diffConditions));
|
|
||||||
dialog.updateRollResult();
|
|
||||||
}
|
}
|
||||||
|
if (this.rollData.selectedSort) {
|
||||||
|
this.setSelectedSort(this.rollData.selectedSort);
|
||||||
|
this.html.find(".draconic").val(this.rollData.selectedSort.system.listIndex); // Uniquement a la selection du sort, pour permettre de changer
|
||||||
|
}
|
||||||
|
RdDItemSort.setCoutReveReel(this.rollData.selectedSort);
|
||||||
|
this.html.find("[name='diffLibre']").val(Misc.toInt(this.rollData.diffLibre));
|
||||||
|
this.html.find("[name='diffConditions']").val(Misc.toInt(this.rollData.diffConditions));
|
||||||
|
this.updateRollResult(html);
|
||||||
|
|
||||||
// Setup everything onload
|
this.html.find("[name='diffLibre']").change((event) => {
|
||||||
$(function () { onLoad(); });
|
|
||||||
|
|
||||||
// Update !
|
|
||||||
html.find('#diffLibre').change((event) => {
|
|
||||||
this.rollData.diffLibre = Misc.toInt(event.currentTarget.value); // Update the selected bonus/malus
|
this.rollData.diffLibre = Misc.toInt(event.currentTarget.value); // Update the selected bonus/malus
|
||||||
this.updateRollResult();
|
this.updateRollResult(html);
|
||||||
});
|
});
|
||||||
html.find('#diffConditions').change((event) => {
|
this.html.find("[name='diffConditions']").change((event) => {
|
||||||
this.rollData.diffConditions = Misc.toInt(event.currentTarget.value); // Update the selected bonus/malus
|
this.rollData.diffConditions = Misc.toInt(event.currentTarget.value); // Update the selected bonus/malus
|
||||||
this.updateRollResult();
|
this.updateRollResult(html);
|
||||||
});
|
});
|
||||||
html.find('#force-dice-result').change((event) => {
|
this.html.find("[name='force-dice-result']").change((event) => {
|
||||||
this.rollData.forceDiceResult = Misc.toInt(event.currentTarget.value);
|
this.rollData.forceDiceResult = Misc.toInt(event.currentTarget.value);
|
||||||
});
|
});
|
||||||
html.find('#carac').change((event) => {
|
this.html.find("[name='carac']").change((event) => {
|
||||||
let caracKey = event.currentTarget.value;
|
let caracKey = event.currentTarget.value;
|
||||||
this.rollData.selectedCarac = this.rollData.carac[caracKey]; // Update the selectedCarac
|
this.rollData.selectedCarac = this.rollData.carac[caracKey]; // Update the selectedCarac
|
||||||
this.updateRollResult();
|
this.updateRollResult(html);
|
||||||
});
|
});
|
||||||
html.find('.roll-draconic').change((event) => {
|
this.html.find('.roll-draconic').change((event) => {
|
||||||
let draconicKey = Misc.toInt(event.currentTarget.value);
|
let draconicKey = Misc.toInt(event.currentTarget.value);
|
||||||
this.rollData.competence = this.rollData.draconicList[draconicKey]; // Update the selectedCarac
|
this.rollData.competence = this.rollData.draconicList[draconicKey]; // Update the selectedCarac
|
||||||
this.updateRollResult();
|
this.updateRollResult(html);
|
||||||
});
|
});
|
||||||
html.find('.roll-sort').change((event) => {
|
this.html.find('.roll-sort').change((event) => {
|
||||||
let sortKey = Misc.toInt(event.currentTarget.value);
|
let sortKey = Misc.toInt(event.currentTarget.value);
|
||||||
this.setSelectedSort(this.rollData.sortList[sortKey]);
|
this.setSelectedSort(this.rollData.sortList[sortKey]);
|
||||||
this.updateRollResult();
|
this.updateRollResult(html);
|
||||||
$("#diffLibre").val(this.rollData.diffLibre);
|
this.html.find("[name='diffLibre']").val(this.rollData.diffLibre);
|
||||||
});
|
});
|
||||||
html.find('.roll-carac-competence').change((event) => {
|
this.html.find('.roll-carac-competence').change((event) => {
|
||||||
const competence = event.currentTarget.value;
|
const competence = event.currentTarget.value;
|
||||||
this.rollData.competence = this.rollData.competences.find(it => it.name == competence);
|
this.rollData.competence = this.rollData.competences.find(it => it.name == competence);
|
||||||
this.updateRollResult();
|
this.updateRollResult(html);
|
||||||
});
|
});
|
||||||
html.find('.roll-signedraconique').change((event) => {
|
this.html.find('.roll-signedraconique').change((event) => {
|
||||||
let sortKey = Misc.toInt(event.currentTarget.value);
|
let sortKey = Misc.toInt(event.currentTarget.value);
|
||||||
this.setSelectedSigneDraconique(this.rollData.signes[sortKey]);
|
this.setSelectedSigneDraconique(this.rollData.signes[sortKey]);
|
||||||
this.updateRollResult();
|
this.updateRollResult(html);
|
||||||
});
|
});
|
||||||
html.find('#ptreve-variable').change((event) => {
|
this.html.find("[name='ptreve-variable']").change((event) => {
|
||||||
let ptreve = Misc.toInt(event.currentTarget.value);
|
let ptreve = Misc.toInt(event.currentTarget.value);
|
||||||
this.rollData.selectedSort.system.ptreve_reel = ptreve;
|
this.rollData.selectedSort.system.ptreve_reel = ptreve;
|
||||||
console.log("RdDRollSelectDialog - Cout reve", ptreve);
|
console.log("RdDRollSelectDialog - Cout reve", ptreve);
|
||||||
this.updateRollResult();
|
this.updateRollResult(html);
|
||||||
});
|
});
|
||||||
html.find("[name='coupsNonMortels']").change((event) => {
|
this.html.find("[name='coupsNonMortels']").change((event) => {
|
||||||
this.rollData.dmg.mortalite = event.currentTarget.checked ? "non-mortel" : "mortel";
|
this.rollData.dmg.mortalite = event.currentTarget.checked ? "non-mortel" : "mortel";
|
||||||
this.updateRollResult();
|
this.updateRollResult(html);
|
||||||
});
|
});
|
||||||
html.find('.cuisine-proportions').change((event) => {
|
this.html.find('.cuisine-proportions').change((event) => {
|
||||||
this.rollData.proportions = Number(event.currentTarget.value);
|
this.rollData.proportions = Number(event.currentTarget.value);
|
||||||
this.updateRollResult();
|
this.updateRollResult(html);
|
||||||
});
|
});
|
||||||
html.find('.select-by-name').change((event) => {
|
this.html.find('.select-by-name').change((event) => {
|
||||||
const attribute = event.currentTarget.attributes['name'].value;
|
const attribute = event.currentTarget.attributes['name'].value;
|
||||||
this.rollData[attribute] = event.currentTarget.value;
|
this.rollData[attribute] = event.currentTarget.value;
|
||||||
this.updateRollResult();
|
this.updateRollResult(html);
|
||||||
});
|
});
|
||||||
html.find('.checkbox-by-name').change((event) => {
|
this.html.find('.checkbox-by-name').change((event) => {
|
||||||
const attribute = event.currentTarget.attributes['name'].value;
|
const attribute = event.currentTarget.attributes['name'].value;
|
||||||
this.rollData[attribute] = event.currentTarget.checked;
|
this.rollData[attribute] = event.currentTarget.checked;
|
||||||
this.updateRollResult();
|
this.updateRollResult(html);
|
||||||
});
|
});
|
||||||
html.find('input.use-encTotal').change((event) => {
|
this.html.find('input.use-encTotal').change((event) => {
|
||||||
this.rollData.use.encTotal = event.currentTarget.checked;
|
this.rollData.use.encTotal = event.currentTarget.checked;
|
||||||
this.updateRollResult();
|
this.updateRollResult(html);
|
||||||
});
|
});
|
||||||
html.find('input.use-surenc').change((event) => {
|
this.html.find('input.use-surenc').change((event) => {
|
||||||
this.rollData.use.surenc = event.currentTarget.checked;
|
this.rollData.use.surenc = event.currentTarget.checked;
|
||||||
this.updateRollResult();
|
this.updateRollResult(html);
|
||||||
});
|
});
|
||||||
html.find('.appel-moral').click((event) => { /* l'appel au moral, qui donne un bonus de +1 */
|
this.html.find('.appel-moral').click((event) => { /* l'appel au moral, qui donne un bonus de +1 */
|
||||||
this.rollData.use.moral = !this.rollData.use.moral;
|
this.rollData.use.moral = !this.rollData.use.moral;
|
||||||
const appelMoral = html.find('.icon-appel-moral')[0];
|
const appelMoral = this.html.find('.icon-appel-moral')[0];
|
||||||
const tooltip = html.find('.tooltipAppelAuMoralText')[0];
|
const tooltip = this.html.find('.tooltipAppelAuMoralText')[0];
|
||||||
if (this.rollData.use.moral) {
|
if (this.rollData.use.moral) {
|
||||||
if (this.rollData.moral > 0) {
|
if (this.rollData.moral > 0) {
|
||||||
tooltip.innerHTML = "Appel au moral";
|
tooltip.innerHTML = "Appel au moral";
|
||||||
@@ -274,16 +229,36 @@ export class RdDRoll extends Dialog {
|
|||||||
tooltip.innerHTML = "Sans appel au moral";
|
tooltip.innerHTML = "Sans appel au moral";
|
||||||
appelMoral.src = "/systems/foundryvtt-reve-de-dragon/icons/moral-neutre.svg";
|
appelMoral.src = "/systems/foundryvtt-reve-de-dragon/icons/moral-neutre.svg";
|
||||||
}
|
}
|
||||||
this.updateRollResult();
|
this.updateRollResult(html);
|
||||||
});
|
});
|
||||||
// Section Méditation
|
// Section Méditation
|
||||||
html.find('.conditionMeditation').change((event) => {
|
this.html.find('.conditionMeditation').change((event) => {
|
||||||
let condition = event.currentTarget.attributes['id'].value;
|
let condition = event.currentTarget.attributes['name'].value;
|
||||||
this.rollData.conditionMeditation[condition] = event.currentTarget.checked;
|
this.rollData.conditionMeditation[condition] = event.currentTarget.checked;
|
||||||
this.updateRollResult();
|
this.updateRollResult(html);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
close() {
|
||||||
|
if (this.rollData.canClose) {
|
||||||
|
return super.close();
|
||||||
|
}
|
||||||
|
ui.notifications.info("Vous devez faire ce jet de dés!");
|
||||||
|
}
|
||||||
|
|
||||||
|
async onAction(action) {
|
||||||
|
this.rollData.forceDiceResult = Number.parseInt(this.html.find("[name='force-dice-result']").val()) ?? -1;
|
||||||
|
await RdDResolutionTable.rollData(this.rollData);
|
||||||
|
console.log("RdDRoll -=>", this.rollData, this.rollData.rolled);
|
||||||
|
if (action.callbacks)
|
||||||
|
for (let callback of action.callbacks) {
|
||||||
|
if (callback.condition == undefined || callback.condition(this.rollData)) {
|
||||||
|
await callback.action(this.rollData);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
async setSelectedSort(sort) {
|
async setSelectedSort(sort) {
|
||||||
this.rollData.selectedSort = sort; // Update the selectedCarac
|
this.rollData.selectedSort = sort; // Update the selectedCarac
|
||||||
this.rollData.competence = RdDItemCompetence.getVoieDraconic(this.rollData.draconicList, sort.system.draconic);
|
this.rollData.competence = RdDItemCompetence.getVoieDraconic(this.rollData.draconicList, sort.system.draconic);
|
||||||
@@ -291,31 +266,31 @@ export class RdDRoll extends Dialog {
|
|||||||
this.rollData.diffLibre = RdDItemSort.getDifficulte(sort, -7);
|
this.rollData.diffLibre = RdDItemSort.getDifficulte(sort, -7);
|
||||||
RdDItemSort.setCoutReveReel(sort);
|
RdDItemSort.setCoutReveReel(sort);
|
||||||
const htmlSortDescription = await renderTemplate("systems/foundryvtt-reve-de-dragon/templates/partial-description-sort.html", { sort: sort });
|
const htmlSortDescription = await renderTemplate("systems/foundryvtt-reve-de-dragon/templates/partial-description-sort.html", { sort: sort });
|
||||||
$(".sort-ou-rituel").text(sort.system.isrituel ? "rituel" : "sort");
|
this.html.find(".sort-ou-rituel").text(sort.system.isrituel ? "rituel" : "sort");
|
||||||
$(".bonus-case").text(`${this.rollData.bonus}%`);
|
this.html.find(".bonus-case").text(`${this.rollData.bonus}%`);
|
||||||
$(".details-sort").remove();
|
this.html.find(".placeholder-description-sort").children().remove();
|
||||||
$(".description-sort").append(htmlSortDescription);
|
this.html.find(".placeholder-description-sort").append(htmlSortDescription);
|
||||||
$(".roll-draconic").val(sort.system.listIndex);
|
this.html.find(".roll-draconic").val(sort.system.listIndex);
|
||||||
$(".div-sort-difficulte-fixe").text(Misc.toSignedString(sort.system.difficulte));
|
this.html.find(".div-sort-difficulte-fixe").text(Misc.toSignedString(sort.system.difficulte));
|
||||||
$(".div-sort-ptreve-fixe").text(sort.system.ptreve);
|
this.html.find(".div-sort-ptreve-fixe").text(sort.system.ptreve);
|
||||||
const diffVariable = RdDItemSort.isDifficulteVariable(sort);
|
const diffVariable = RdDItemSort.isDifficulteVariable(sort);
|
||||||
const coutVariable = RdDItemSort.isCoutVariable(sort);
|
const coutVariable = RdDItemSort.isCoutVariable(sort);
|
||||||
|
|
||||||
HtmlUtility._showControlWhen($(".div-sort-non-rituel"), !sort.system.isrituel);
|
HtmlUtility._showControlWhen(this.html.find(".div-sort-non-rituel"), !sort.system.isrituel);
|
||||||
HtmlUtility._showControlWhen($(".div-sort-difficulte-var"), diffVariable);
|
HtmlUtility._showControlWhen(this.html.find(".div-sort-difficulte-var"), diffVariable);
|
||||||
HtmlUtility._showControlWhen($(".div-sort-difficulte-fixe"), !diffVariable);
|
HtmlUtility._showControlWhen(this.html.find(".div-sort-difficulte-fixe"), !diffVariable);
|
||||||
HtmlUtility._showControlWhen($(".div-sort-ptreve-var"), coutVariable);
|
HtmlUtility._showControlWhen(this.html.find(".div-sort-ptreve-var"), coutVariable);
|
||||||
HtmlUtility._showControlWhen($(".div-sort-ptreve-fixe"), !coutVariable);
|
HtmlUtility._showControlWhen(this.html.find(".div-sort-ptreve-fixe"), !coutVariable);
|
||||||
}
|
}
|
||||||
|
|
||||||
async setSelectedSigneDraconique(signe){
|
async setSelectedSigneDraconique(signe) {
|
||||||
this.rollData.signe = signe;
|
this.rollData.signe = signe;
|
||||||
this.rollData.diffLibre = signe.system.difficulte,
|
this.rollData.diffLibre = signe.system.difficulte,
|
||||||
$(".signe-difficulte").text(Misc.toSignedString(this.rollData.diffLibre));
|
$(".signe-difficulte").text(Misc.toSignedString(this.rollData.diffLibre));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async updateRollResult() {
|
async updateRollResult(html) {
|
||||||
let rollData = this.rollData;
|
let rollData = this.rollData;
|
||||||
|
|
||||||
rollData.dmg = rollData.attackerRoll?.dmg ?? RdDBonus.dmg(rollData, this.actor.getBonusDegat())
|
rollData.dmg = rollData.attackerRoll?.dmg ?? RdDBonus.dmg(rollData, this.actor.getBonusDegat())
|
||||||
@@ -325,39 +300,35 @@ export class RdDRoll extends Dialog {
|
|||||||
rollData.use.appelAuMoral = this.actor.isPersonnage() && RdDCarac.isActionPhysique(rollData.selectedCarac);
|
rollData.use.appelAuMoral = this.actor.isPersonnage() && RdDCarac.isActionPhysique(rollData.selectedCarac);
|
||||||
let dmgText = Misc.toSignedString(rollData.dmg.total);
|
let dmgText = Misc.toSignedString(rollData.dmg.total);
|
||||||
|
|
||||||
switch (rollData.mortalite){
|
switch (rollData.mortalite) {
|
||||||
case 'non-mortel': dmgText = `(${dmgText}) non-mortel`; break;
|
case 'non-mortel': dmgText = `(${dmgText}) non-mortel`; break;
|
||||||
case 'empoignade': dmgText = `empoignade`; break;
|
case 'empoignade': dmgText = `empoignade`; break;
|
||||||
}
|
}
|
||||||
|
|
||||||
RollDataAjustements.calcul(rollData, this.actor);
|
RollDataAjustements.calcul(rollData, this.actor);
|
||||||
rollData.finalLevel = this._computeFinalLevel(rollData);
|
rollData.finalLevel = this._computeFinalLevel(rollData);
|
||||||
|
|
||||||
HtmlUtility._showControlWhen($(".use-encTotal"), rollData.ajustements.encTotal.visible && RdDCarac.isAgiliteOuDerivee(rollData.selectedCarac));
|
const resolutionTable = await RdDResolutionTable.buildHTMLTable(RdDResolutionTable.subTable(rollData.caracValue, rollData.finalLevel))
|
||||||
HtmlUtility._showControlWhen($(".use-surenc"), rollData.ajustements.surenc.visible && RdDCarac.isActionPhysique(rollData.selectedCarac));
|
const adjustements = await this.buildAjustements(rollData);
|
||||||
HtmlUtility._showControlWhen($(".utilisation-moral"), rollData.use.appelAuMoral);
|
|
||||||
HtmlUtility._showControlWhen($(".diffMoral"), rollData.ajustements.moralTotal.used);
|
HtmlUtility._showControlWhen(this.html.find(".use-encTotal"), rollData.ajustements.encTotal.visible && RdDCarac.isAgiliteOuDerivee(rollData.selectedCarac));
|
||||||
HtmlUtility._showControlWhen($(".divAppelAuMoral"), rollData.use.appelAuMoral);
|
HtmlUtility._showControlWhen(this.html.find(".use-surenc"), rollData.ajustements.surenc.visible && RdDCarac.isActionPhysique(rollData.selectedCarac));
|
||||||
HtmlUtility._showControlWhen($("#etat-general"), !RdDCarac.isIgnoreEtatGeneral(rollData));
|
HtmlUtility._showControlWhen(this.html.find(".utilisation-moral"), rollData.use.appelAuMoral);
|
||||||
HtmlUtility._showControlWhen($("#ajust-astrologique"), RdDResolutionTable.isAjustementAstrologique(rollData));
|
HtmlUtility._showControlWhen(this.html.find(".diffMoral"), rollData.ajustements.moralTotal.used);
|
||||||
|
HtmlUtility._showControlWhen(this.html.find(".divAppelAuMoral"), rollData.use.appelAuMoral);
|
||||||
|
|
||||||
// Mise à jour valeurs
|
// Mise à jour valeurs
|
||||||
$(".dialog-roll-title").text(this._getTitle(rollData));
|
this.html.find(".dialog-roll-title").text(this._getTitle(rollData));
|
||||||
$("[name='coupsNonMortels']").prop('checked', rollData.mortalite == 'non-mortel');
|
this.html.find("[name='coupsNonMortels']").prop('checked', rollData.mortalite == 'non-mortel');
|
||||||
$(".dmg-arme-actor").text(dmgText);
|
this.html.find(".dmg-arme-actor").text(dmgText);
|
||||||
$('.table-ajustement').remove();
|
this.html.find("div.placeholder-ajustements").empty().append(adjustements);
|
||||||
$(".table-resolution").remove();
|
this.html.find("div.placeholder-resolution").empty().append(resolutionTable)
|
||||||
$(".table-proba-reussite").remove();
|
|
||||||
$("#tableAjustements").append(await this.buildAjustements(rollData));
|
|
||||||
$("#tableResolution").append(RdDResolutionTable.buildHTMLTableExtract(rollData.caracValue, rollData.finalLevel));
|
|
||||||
$("#tableProbaReussite").append(RdDResolutionTable.buildHTMLResults(rollData.caracValue, rollData.finalLevel));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async buildAjustements(rollData) {
|
async buildAjustements(rollData) {
|
||||||
const html = await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/partial-roll-ajustements.html`, rollData);
|
return await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/partial-roll-ajustements.html`, rollData);
|
||||||
return html;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
@@ -375,23 +346,11 @@ export class RdDRoll extends Dialog {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
|
||||||
_computeDiffLibre(rollData) {
|
|
||||||
let diffLibre = Misc.toInt(rollData.diffLibre);
|
|
||||||
if (rollData.draconicList && rollData.selectedSort) {
|
|
||||||
return RdDItemSort.getDifficulte(rollData.selectedSort, diffLibre);
|
|
||||||
}
|
|
||||||
return diffLibre;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
_computeMalusArmure(rollData) {
|
_computeMalusArmure(rollData) {
|
||||||
let malusArmureValue = 0;
|
let malusArmureValue = 0;
|
||||||
if (rollData.malusArmureValue && (rollData.selectedCarac.label == "Agilité" || rollData.selectedCarac.label == "Dérobée")) {
|
if (rollData.malusArmureValue && (rollData.selectedCarac.label == "Agilité" || rollData.selectedCarac.label == "Dérobée")) {
|
||||||
$("#addon-message").text("Malus armure appliqué : " + rollData.malusArmureValue);
|
|
||||||
malusArmureValue = rollData.malusArmureValue;
|
malusArmureValue = rollData.malusArmureValue;
|
||||||
} else {
|
|
||||||
$("#addon-message").text("");
|
|
||||||
}
|
}
|
||||||
return malusArmureValue;
|
return malusArmureValue;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ import { TMRUtility } from "./tmr-utility.js";
|
|||||||
import { tmrConstants } from "./tmr-constants.js";
|
import { tmrConstants } from "./tmr-constants.js";
|
||||||
import { RdDResolutionTable } from "./rdd-resolution-table.js";
|
import { RdDResolutionTable } from "./rdd-resolution-table.js";
|
||||||
import { RdDTMRRencontreDialog } from "./rdd-tmr-rencontre-dialog.js";
|
import { RdDTMRRencontreDialog } from "./rdd-tmr-rencontre-dialog.js";
|
||||||
import { TMRRencontres } from "./tmr-rencontres.js";
|
|
||||||
import { ChatUtility } from "./chat-utility.js";
|
import { ChatUtility } from "./chat-utility.js";
|
||||||
import { RdDRoll } from "./rdd-roll.js";
|
import { RdDRoll } from "./rdd-roll.js";
|
||||||
import { Poetique } from "./poetique.js";
|
import { Poetique } from "./poetique.js";
|
||||||
@@ -198,32 +197,33 @@ export class RdDTMRDialog extends Dialog {
|
|||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async activateListeners(html) {
|
async activateListeners(html) {
|
||||||
super.activateListeners(html);
|
super.activateListeners(html);
|
||||||
|
this.html = html;
|
||||||
|
|
||||||
document.getElementById("tmrrow1").insertCell(0).append(this.pixiApp.view);
|
document.getElementById("tmrrow1").insertCell(0).append(this.pixiApp.view);
|
||||||
|
|
||||||
if (this.viewOnly) {
|
if (this.viewOnly) {
|
||||||
html.find('.lancer-sort').remove();
|
this.html.find('.lancer-sort').remove();
|
||||||
html.find('.lire-signe-draconique').remove();
|
this.html.find('.lire-signe-draconique').remove();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
HtmlUtility._showControlWhen($(".appliquerFatigue"), ReglesOptionelles.isUsing("appliquer-fatigue"));
|
HtmlUtility._showControlWhen(this.html.find(".appliquerFatigue"), ReglesOptionelles.isUsing("appliquer-fatigue"));
|
||||||
HtmlUtility._showControlWhen($(".lire-signe-draconique"), this.actor.isResonanceSigneDraconique(this._getActorCoord()));
|
HtmlUtility._showControlWhen(this.html.find(".lire-signe-draconique"), this.actor.isResonanceSigneDraconique(this._getActorCoord()));
|
||||||
|
|
||||||
// Roll Sort
|
// Roll Sort
|
||||||
html.find('.lancer-sort').click((event) => {
|
this.html.find('.lancer-sort').click((event) => {
|
||||||
this.actor.rollUnSort(this._getActorCoord());
|
this.actor.rollUnSort(this._getActorCoord());
|
||||||
});
|
});
|
||||||
html.find('.lire-signe-draconique').click((event) => {
|
this.html.find('.lire-signe-draconique').click((event) => {
|
||||||
this.actor.rollLireSigneDraconique(this._getActorCoord());
|
this.actor.rollLireSigneDraconique(this._getActorCoord());
|
||||||
});
|
});
|
||||||
|
|
||||||
html.find('#dir-top').click((event) => this.moveFromKey("top"));
|
this.html.find('#dir-top').click((event) => this.moveFromKey("top"));
|
||||||
html.find('#dir-top-left').click((event) => this.moveFromKey("top-left"));
|
this.html.find('#dir-top-left').click((event) => this.moveFromKey("top-left"));
|
||||||
html.find('#dir-top-right').click((event) => this.moveFromKey("top-right"));
|
this.html.find('#dir-top-right').click((event) => this.moveFromKey("top-right"));
|
||||||
html.find('#dir-bottom-left').click((event) => this.moveFromKey("bottom-left"));
|
this.html.find('#dir-bottom-left').click((event) => this.moveFromKey("bottom-left"));
|
||||||
html.find('#dir-bottom-right').click((event) => this.moveFromKey("bottom-right"));
|
this.html.find('#dir-bottom-right').click((event) => this.moveFromKey("bottom-right"));
|
||||||
html.find('#dir-bottom').click((event) => this.moveFromKey("bottom"));
|
this.html.find('#dir-bottom').click((event) => this.moveFromKey("bottom"));
|
||||||
|
|
||||||
// Gestion du cout de montée en points de rêve
|
// Gestion du cout de montée en points de rêve
|
||||||
let reveCout = ((this.tmrdata.isRapide && !EffetsDraconiques.isDeplacementAccelere(this.actor)) ? -2 : -1) - this.actor.countMonteeLaborieuse();
|
let reveCout = ((this.tmrdata.isRapide && !EffetsDraconiques.isDeplacementAccelere(this.actor)) ? -2 : -1) - this.actor.countMonteeLaborieuse();
|
||||||
@@ -245,7 +245,7 @@ export class RdDTMRDialog extends Dialog {
|
|||||||
}
|
}
|
||||||
const coord = this._getActorCoord();
|
const coord = this._getActorCoord();
|
||||||
|
|
||||||
HtmlUtility._showControlWhen($(".lire-signe-draconique"), this.actor.isResonanceSigneDraconique(coord));
|
HtmlUtility._showControlWhen(this.html.find(".lire-signe-draconique"), this.actor.isResonanceSigneDraconique(coord));
|
||||||
|
|
||||||
let ptsreve = document.getElementById("tmr-pointsreve-value");
|
let ptsreve = document.getElementById("tmr-pointsreve-value");
|
||||||
ptsreve.innerHTML = this.actor.system.reve.reve.value;
|
ptsreve.innerHTML = this.actor.system.reve.reve.value;
|
||||||
@@ -280,7 +280,7 @@ export class RdDTMRDialog extends Dialog {
|
|||||||
}
|
}
|
||||||
await this.actor.santeIncDec("fatigue", this.cumulFatigue)
|
await this.actor.santeIncDec("fatigue", this.cumulFatigue)
|
||||||
}
|
}
|
||||||
await super.close(); // moving 1 cell costs 1 fatigue
|
await super.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
|
|||||||
@@ -14,6 +14,8 @@ import { RdDNameGen } from "./rdd-namegen.js";
|
|||||||
import { RdDConfirm } from "./rdd-confirm.js";
|
import { RdDConfirm } from "./rdd-confirm.js";
|
||||||
import { RdDCalendrier } from "./rdd-calendrier.js";
|
import { RdDCalendrier } from "./rdd-calendrier.js";
|
||||||
import { Environnement } from "./environnement.js";
|
import { Environnement } from "./environnement.js";
|
||||||
|
import { RdDItemCompetence } from "./item-competence.js";
|
||||||
|
import { RdDResolutionTable } from "./rdd-resolution-table.js";
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
// This table starts at 0 -> niveau -10
|
// This table starts at 0 -> niveau -10
|
||||||
@@ -170,6 +172,7 @@ export class RdDUtility {
|
|||||||
//Items
|
//Items
|
||||||
'systems/foundryvtt-reve-de-dragon/templates/scripts/autocomplete-script.hbs',
|
'systems/foundryvtt-reve-de-dragon/templates/scripts/autocomplete-script.hbs',
|
||||||
'systems/foundryvtt-reve-de-dragon/templates/scripts/autocomplete.hbs',
|
'systems/foundryvtt-reve-de-dragon/templates/scripts/autocomplete.hbs',
|
||||||
|
'systems/foundryvtt-reve-de-dragon/templates/item/boutons-comestible.html',
|
||||||
'systems/foundryvtt-reve-de-dragon/templates/item/partial-inventaire.html',
|
'systems/foundryvtt-reve-de-dragon/templates/item/partial-inventaire.html',
|
||||||
'systems/foundryvtt-reve-de-dragon/templates/item/partial-environnement.html',
|
'systems/foundryvtt-reve-de-dragon/templates/item/partial-environnement.html',
|
||||||
'systems/foundryvtt-reve-de-dragon/templates/item/partial-tab-environnement.html',
|
'systems/foundryvtt-reve-de-dragon/templates/item/partial-tab-environnement.html',
|
||||||
@@ -235,6 +238,8 @@ export class RdDUtility {
|
|||||||
'systems/foundryvtt-reve-de-dragon/templates/partial-item-hautrevant.html',
|
'systems/foundryvtt-reve-de-dragon/templates/partial-item-hautrevant.html',
|
||||||
'systems/foundryvtt-reve-de-dragon/templates/partial-item-frequence.html',
|
'systems/foundryvtt-reve-de-dragon/templates/partial-item-frequence.html',
|
||||||
'systems/foundryvtt-reve-de-dragon/templates/partial-item-description.html',
|
'systems/foundryvtt-reve-de-dragon/templates/partial-item-description.html',
|
||||||
|
'systems/foundryvtt-reve-de-dragon/templates/roll/explain.hbs',
|
||||||
|
'systems/foundryvtt-reve-de-dragon/templates/resolution-table.html',
|
||||||
// Dialogs
|
// Dialogs
|
||||||
'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-resolution.html',
|
'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-resolution.html',
|
||||||
'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-competence.html',
|
'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-competence.html',
|
||||||
@@ -279,6 +284,9 @@ export class RdDUtility {
|
|||||||
'systems/foundryvtt-reve-de-dragon/templates/chat-signe-draconique-actor.html'
|
'systems/foundryvtt-reve-de-dragon/templates/chat-signe-draconique-actor.html'
|
||||||
];
|
];
|
||||||
|
|
||||||
|
Handlebars.registerHelper('either', (a, b) => a ?? b);
|
||||||
|
Handlebars.registerHelper('computeResolutionScore', (row, col) => RdDResolutionTable.computePercentage(row, col));
|
||||||
|
Handlebars.registerHelper('computeResolutionChances', (row, col) => RdDResolutionTable.computeChances(row, col));
|
||||||
Handlebars.registerHelper('upperFirst', str => Misc.upperFirst(str ?? 'Null'));
|
Handlebars.registerHelper('upperFirst', str => Misc.upperFirst(str ?? 'Null'));
|
||||||
Handlebars.registerHelper('lowerFirst', str => Misc.lowerFirst(str ?? 'Null'));
|
Handlebars.registerHelper('lowerFirst', str => Misc.lowerFirst(str ?? 'Null'));
|
||||||
Handlebars.registerHelper('upper', str => str?.toUpperCase() ?? 'NULL');
|
Handlebars.registerHelper('upper', str => str?.toUpperCase() ?? 'NULL');
|
||||||
@@ -296,46 +304,18 @@ export class RdDUtility {
|
|||||||
Handlebars.registerHelper('min', (...args) => Math.min(...args.slice(0, -1)));
|
Handlebars.registerHelper('min', (...args) => Math.min(...args.slice(0, -1)));
|
||||||
Handlebars.registerHelper('regle-optionnelle', (option) => ReglesOptionelles.isUsing(option));
|
Handlebars.registerHelper('regle-optionnelle', (option) => ReglesOptionelles.isUsing(option));
|
||||||
Handlebars.registerHelper('trier', list => list.sort((a, b) => a.name.localeCompare(b.name)));
|
Handlebars.registerHelper('trier', list => list.sort((a, b) => a.name.localeCompare(b.name)));
|
||||||
Handlebars.registerHelper('filtreTriCompetences', competences => competences.filter(it => it.system.isVisible)
|
Handlebars.registerHelper('filtreTriCompetences', competences => RdDItemCompetence.triVisible(competences));
|
||||||
.sort((a, b) => {
|
Handlebars.registerHelper('linkCompendium', (pack, id, name) => RdDUtility.linkCompendium(pack, id, name));
|
||||||
if (a.name.startsWith("Survie") && b.name.startsWith("Survie")) {
|
Handlebars.registerHelper('uniteQuantite', (itemId, actorId) => RdDUtility.getItem(itemId, actorId)?.getUniteQuantite());
|
||||||
if (a.name.includes("Cité")) return -1;
|
|
||||||
if (b.name.includes("Cité")) return 1;
|
|
||||||
if (a.name.includes("Extérieur")) return -1;
|
|
||||||
if (b.name.includes("Extérieur")) return 1;
|
|
||||||
return a.name.localeCompare(b.name);
|
|
||||||
}
|
|
||||||
if (a.system.categorie.startsWith("melee") && b.system.categorie.startsWith("melee")) {
|
|
||||||
if (a.name.includes("Corps")) return -1;
|
|
||||||
if (b.name.includes("Corps")) return 1;
|
|
||||||
if (a.name.includes("Dague")) return -1;
|
|
||||||
if (b.name.includes("Dague")) return 1;
|
|
||||||
if (a.name.includes("Esquive")) return -1;
|
|
||||||
if (b.name.includes("Esquive")) return 1;
|
|
||||||
return a.name.localeCompare(b.name);
|
|
||||||
}
|
|
||||||
if (a.name.startsWith("Voie") && b.name.startsWith("Voie")) {
|
|
||||||
if (a.name.includes("Oniros")) return -1;
|
|
||||||
if (b.name.includes("Oniros")) return 1;
|
|
||||||
if (a.name.includes("Hypnos")) return -1;
|
|
||||||
if (b.name.includes("Hypnos")) return 1;
|
|
||||||
if (a.name.includes("Narcos")) return -1;
|
|
||||||
if (b.name.includes("Narcos")) return 1;
|
|
||||||
if (a.name.includes("Thanatos")) return -1;
|
|
||||||
if (b.name.includes("Thanatos")) return 1;
|
|
||||||
return a.name.localeCompare(b.name);
|
|
||||||
}
|
|
||||||
return a.name.localeCompare(b.name);
|
|
||||||
})
|
|
||||||
);
|
|
||||||
Handlebars.registerHelper('linkCompendium', (pack, id, name)=> RdDUtility.linkCompendium(pack, id, name));
|
|
||||||
Handlebars.registerHelper('uniteQuantite', (type) => RdDItem.getUniteQuantite(type));
|
|
||||||
Handlebars.registerHelper('isFieldInventaireModifiable', (type, field) => RdDItem.isFieldInventaireModifiable(type, field));
|
Handlebars.registerHelper('isFieldInventaireModifiable', (type, field) => RdDItem.isFieldInventaireModifiable(type, field));
|
||||||
Handlebars.registerHelper('getFrequenceRarete', (rarete, field) => Environnement.getFrequenceRarete(rarete, field));
|
Handlebars.registerHelper('getFrequenceRarete', (rarete, field) => Environnement.getFrequenceRarete(rarete, field));
|
||||||
Handlebars.registerHelper('either', (a, b) => a ?? b);
|
|
||||||
return loadTemplates(templatePaths);
|
return loadTemplates(templatePaths);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static getItem(itemId, actorId = undefined) {
|
||||||
|
return actorId ? game.actors.get(actorId)?.getObjet(itemId) : game.items.get(itemId);
|
||||||
|
}
|
||||||
|
|
||||||
static linkCompendium(pack, id, name) {
|
static linkCompendium(pack, id, name) {
|
||||||
return `@Compendium[${pack}.${id}]{${name}}`;
|
return `@Compendium[${pack}.${id}]{${name}}`;
|
||||||
}
|
}
|
||||||
@@ -1001,7 +981,7 @@ export class RdDUtility {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static slideOnDelete(sheet, htmlToDelete) {
|
static slideOnDelete(sheet, htmlToDelete) {
|
||||||
return htmlToDelete.slideUp(200, () => sheet.render(false));
|
return htmlToDelete?.slideUp(200, () => sheet.render(false));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ export const referenceAjustements = {
|
|||||||
},
|
},
|
||||||
encTotal: {
|
encTotal: {
|
||||||
isVisible: (rollData, actor) => RdDCarac.isAgiliteOuDerivee(rollData.selectedCarac) && RdDItemCompetence.isMalusEncombrementTotal(rollData.competence),
|
isVisible: (rollData, actor) => RdDCarac.isAgiliteOuDerivee(rollData.selectedCarac) && RdDItemCompetence.isMalusEncombrementTotal(rollData.competence),
|
||||||
isUsed: (rollData, actor) => RdDCarac.isAgiliteOuDerivee(rollData.selectedCarac) && RdDItemCompetence.isMalusEncombrementTotal(rollData.competence) && rollData.use.encTotal,
|
isUsed: (rollData, actor) => !rollData.oeuvre && RdDCarac.isAgiliteOuDerivee(rollData.selectedCarac) && RdDItemCompetence.isMalusEncombrementTotal(rollData.competence) && rollData.use.encTotal,
|
||||||
getLabel: (rollData, actor) => 'Encombrement total',
|
getLabel: (rollData, actor) => 'Encombrement total',
|
||||||
getValue: (rollData, actor) => -actor.getEncTotal()
|
getValue: (rollData, actor) => -actor.getEncTotal()
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import { Grammar } from "./grammar.js";
|
import { Grammar } from "./grammar.js";
|
||||||
import { Misc } from "./misc.js";
|
import { Misc } from "./misc.js";
|
||||||
import { RdDDice } from "./rdd-dice.js";
|
import { RdDDice } from "./rdd-dice.js";
|
||||||
|
import { RdDUtility } from "./rdd-utility.js";
|
||||||
import { SystemCompendiums, CompendiumTable, CompendiumTableHelpers } from "./settings/system-compendiums.js";
|
import { SystemCompendiums, CompendiumTable, CompendiumTableHelpers } from "./settings/system-compendiums.js";
|
||||||
import { TMRUtility } from "./tmr-utility.js";
|
import { TMRUtility } from "./tmr-utility.js";
|
||||||
|
|
||||||
@@ -100,19 +101,21 @@ export class TMRRencontres {
|
|||||||
|
|
||||||
const row = await this.table.getRandom(frequence, filtreMauvaise);
|
const row = await this.table.getRandom(frequence, filtreMauvaise);
|
||||||
if (row) {
|
if (row) {
|
||||||
row.document = this.createRencontre(row.document, tmr);
|
const rencontre = await this.createRencontre(row.document, tmr);
|
||||||
await this.$chatRolledRencontre(row, tmr);
|
await this.$chatRolledRencontre(row, rencontre, tmr);
|
||||||
|
return rencontre;
|
||||||
}
|
}
|
||||||
return row?.document;
|
return undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async $chatRolledRencontre(row, tmr) {
|
async $chatRolledRencontre(row, rencontre,tmr) {
|
||||||
const flavorContent = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-compendium-table-roll-rencontre.html',
|
const flavorContent = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-compendium-table-roll-rencontre.html',
|
||||||
{
|
{
|
||||||
roll: row.roll,
|
roll: row.roll,
|
||||||
rencontre: row?.document,
|
rencontre,
|
||||||
|
row,
|
||||||
percentages: (row.total == 100) ? '%' : '',
|
percentages: (row.total == 100) ? '%' : '',
|
||||||
tmr,
|
tmr,
|
||||||
isGM: game.user.isGM,
|
isGM: game.user.isGM,
|
||||||
|
|||||||
@@ -1,68 +1,119 @@
|
|||||||
{"name":"Floume","type":"ingredient","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.0EA5It28VyLzQE6n"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Floume.webp","effects":[],"_id":"0EA5It28VyLzQE6n","system":{"description":"<p>Fruit du floumier, sorte de poirier pleureur vivant dans les lieux très humides, au bord des rivières ou dans les marais. La floume a l’aspect d’une poire jaune pâle à la chair ferme, grumeleuse et rose. Son goût est âcre et amer, et son pouvoir nutritif encore plus faible que celui des clopinettes. Il existe heureusement une larve parasite, appelée <em>ver du floumier</em> ou plus simplement <em>floumette</em>. Ce ver ronge la floume de l’intérieur et la dévore entièrement, ne laissant à la place de la chair qu’un excrément brunâtre, sorte de gelée poisseuse. Cette pommade est en revanche hautement nutritive, bien que son goût soit parmi les plus ignobles. Jouer VOLONTÉ à -3, et en cas d’échec, recracher tellement c’est mauvais. Une floume bien floumée, c’est à-dire bien véreuse, vaut en moyenne 3 points de sustentation.</p>\n<p>Fréquente.</p>","descriptionmj":"","encombrement":0.05,"quantite":1,"qualite":0,"cout":0,"milieu":"Lieux humides","environnement":[{"milieu":"Cours d'eau","rarete":"Frequente","frequence":18},{"milieu":"Marais","rarete":"Frequente","frequence":18}],"niveau":0,"base":0,"categorie":"Cuisine","rarete":"Frequente"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.3","coreVersion":"10.290","createdTime":1669734708516,"modifiedTime":1670025575828,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"name":"Floume","type":"ingredient","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.0EA5It28VyLzQE6n"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Floume.webp","effects":[],"_id":"0EA5It28VyLzQE6n","system":{"description":"<p>Fruit du floumier, sorte de poirier pleureur vivant dans les lieux très humides, au bord des rivières ou dans les marais. La floume a l’aspect d’une poire jaune pâle à la chair ferme, grumeleuse et rose. Son goût est âcre et amer, et son pouvoir nutritif encore plus faible que celui des clopinettes. Il existe heureusement une larve parasite, appelée <em>ver du floumier</em> ou plus simplement <em>floumette</em>. Ce ver ronge la floume de l’intérieur et la dévore entièrement, ne laissant à la place de la chair qu’un excrément brunâtre, sorte de gelée poisseuse. Cette pommade est en revanche hautement nutritive, bien que son goût soit parmi les plus ignobles. Jouer VOLONTÉ à -3, et en cas d’échec, recracher tellement c’est mauvais. Une floume bien floumée, c’est à-dire bien véreuse, vaut en moyenne 3 points de sustentation.</p>\n<p>Fréquente.</p>","descriptionmj":"","encombrement":0.05,"quantite":1,"qualite":0,"cout":0,"milieu":"Lieux humides","environnement":[{"milieu":"Cours d'eau","rarete":"Frequente","frequence":18},{"milieu":"Marais","rarete":"Frequente","frequence":18}],"sust":0,"exotisme":0,"niveau":0,"base":0,"categorie":"Cuisine","rarete":"Frequente"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1669734708516,"modifiedTime":1670621588439,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
||||||
{"name":"Salsimir à points jaunes","type":"ingredient","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.2IHZslApFfV72VMw"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Salsimir%20%C3%A0%20points%20jaunes.webp","effects":[],"_id":"2IHZslApFfV72VMw","system":{"description":"<p>Sorte de bolet doté d’un pied blanc et mince, au chapeau arrondi brun à pois jaunes.</p>\n<p>Commun.</p>","descriptionmj":"","encombrement":0.1,"quantite":1,"qualite":0,"cout":0,"milieu":"Lieux sombres et humides","environnement":[{"milieu":"Forêts","rarete":"Commune","frequence":54},{"milieu":"Sous-sols","rarete":"Frequente","frequence":18}],"niveau":1,"base":0,"categorie":"Cuisine","rarete":"Commune"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.3","coreVersion":"10.290","createdTime":1669734708516,"modifiedTime":1670025575828,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"name":"Salsimir à points jaunes","type":"ingredient","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.2IHZslApFfV72VMw"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Salsimir%20%C3%A0%20points%20jaunes.webp","effects":[],"_id":"2IHZslApFfV72VMw","system":{"description":"<p>Sorte de bolet doté d’un pied blanc et mince, au chapeau arrondi brun à pois jaunes.</p>\n<p>Commun.</p>","descriptionmj":"","encombrement":0.1,"quantite":1,"qualite":0,"cout":0,"milieu":"Lieux sombres et humides","environnement":[{"milieu":"Forêts","rarete":"Commune","frequence":54},{"milieu":"Sous-sols","rarete":"Frequente","frequence":18}],"sust":0,"exotisme":0,"niveau":1,"base":0,"categorie":"Cuisine","rarete":"Commune"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1669734708516,"modifiedTime":1670621588442,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
||||||
{"name":"Tanemiel d'argent","type":"herbe","flags":{"core":{"sheetClass":"foundryvtt-reve-de-dragon.RdDItemSheet","sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.3Idia6bqLgdtiswS"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Tanemiel%20argent%C3%A9.webp","effects":[],"_id":"3Idia6bqLgdtiswS","system":{"description":"<p><em style=\"box-sizing: border-box; user-select: text;\">Herbe de repos.</em></p>\n<p>Variété de tanemiel aux reflets argentés, poussant comme ses frères en forêts humides et chaudes, et dont l'existence est presque aussi mythique. </p>\n<p>Rarissime.</p>","descriptionmj":"","encombrement":0,"quantite":1,"qualite":0,"cout":0.5,"milieu":"Forêts chaudes et humides","environnement":[{"milieu":"Forêts","rarete":"Rarissime","frequence":4}],"niveau":5,"base":0,"categorie":"Repos","rarete":"Rarissime"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.3","coreVersion":"10.290","createdTime":1669734708516,"modifiedTime":1670025575828,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"name":"Sourise","type":"faune","img":"systems/foundryvtt-reve-de-dragon/icons/faune/rongeur.webp","system":{"description":"<p>Sourise. Forêt, plaine, 500 g, 1 sust. La sourise est un petit rongeur gris, à têted’écureuil et à queue de souris.</p>","descriptionmj":"","encombrement":0.5,"quantite":1,"qualite":0,"cout":0,"milieu":"Forêt, plaine","environnement":[{"milieu":"Forêts","rarete":"Commune","frequence":54},{"milieu":"Plaines","rarete":"Commune","frequence":54}],"sust":1,"exotisme":0,"categorie":"","actor":{"id":"VsEw24DEekBbU69Z","pack":"foundryvtt-reve-de-dragon.animaux","name":"Cornicochon"}},"effects":[],"flags":{"core":{"sourceId":"Item.LU5eutNQqwm52oOG"}},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1670580597921,"modifiedTime":1670621588443,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"_id":"2e7pAKJsW9SuSZXy","folder":null,"sort":0,"ownership":{"default":0,"jtRmvSuwkwMmIMf0":3}}
|
||||||
{"name":"Cheleuse","type":"herbe","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.3PzaM8d7jLjdzdkt"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Cheleuse.webp","effects":[],"_id":"3PzaM8d7jLjdzdkt","system":{"description":"<p>Fausse menthe à feuilles urticantes.</p>\n<p>M1 \\ P 5 minutes \\ D1 \\ -3 \\ Liqueur de Bagdol +16, Mirobolant +14.</p>\n<p>Fréquente.</p>","descriptionmj":"","encombrement":0,"quantite":1,"qualite":0,"cout":0,"milieu":"Lieux humides","environnement":[{"milieu":"Cours d'eau","rarete":"Frequente","frequence":18},{"milieu":"Marais","rarete":"Frequente","frequence":18},{"milieu":"Sous-sols","rarete":"Frequente","frequence":18}],"niveau":0,"base":0,"categorie":"","rarete":"Frequente"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.3","coreVersion":"10.290","createdTime":1669734708517,"modifiedTime":1670025575828,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"name":"Cancrelas","type":"faune","img":"systems/foundryvtt-reve-de-dragon/icons/faune/cancrelas.webp","system":{"description":"<p>Petit crabe noir à la démarche lente, comme s’il était sous le coup d’une intense fatigue.</p>","descriptionmj":"","encombrement":0.2,"quantite":1,"qualite":0,"cout":0,"milieu":"","environnement":[{"milieu":"Maritimes","rarete":"Frequente","frequence":18}],"sust":1,"exotisme":0,"categorie":"","actor":{"id":"","pack":"","name":""}},"effects":[],"flags":{},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1670616441674,"modifiedTime":1670621588398,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"folder":null,"sort":0,"ownership":{"default":0,"Hp9ImM4o9YRTSdfu":3},"_id":"2zVusTyy2k6PDxiW"}
|
||||||
{"name":"Champirigolo","type":"ingredient","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.45vMHMwrCFeLZyH8"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Champirigolo.webp","effects":[],"_id":"45vMHMwrCFeLZyH8","system":{"description":"<p>Le champirigolo est un champignon de bordure de sous-bois, ressemblant à un petit bonhomme caché sous un chapeau conique aplati. Le « visage » du bonhomme, de couleur chair, tavelé, donne souvent l’impression de tirer la langue à qui le regarde. <br />Comestible, il possède toutefois des vertus hallucinogènes, provoquant des crises de fou rire, et, d’une manière générale, faisant trouver de la drôlerie dans tout. <br />En termes de jeu, il augmente l’EMPATHIE au détriment de l’INTELLECT.</p>\n<p>Fréquent.</p>\n<p><em>Cf : p.139</em></p>","descriptionmj":"","encombrement":0.1,"quantite":1,"qualite":0,"cout":0,"milieu":"Lieux sombres et humides","environnement":[{"milieu":"Forêts","rarete":"Frequente","frequence":18},{"milieu":"Sous-sols","rarete":"Rare","frequence":6}],"niveau":null,"base":0,"categorie":"Cuisine","rarete":"Frequente"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.3","coreVersion":"10.290","createdTime":1669734708517,"modifiedTime":1670025575828,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"name":"Rabier","type":"faune","img":"systems/foundryvtt-reve-de-dragon/icons/faune/lapin.webp","system":{"description":"<p>Rabier. Forêt, plaine, 2 kg, 4 sust. Petit lapinà fourrure très recherchée pour ses nuances roses ou bleues. La plupart des enfants de riches familles jouent avec des rabiers naturalisés, rebaptisés pluches.</p>","descriptionmj":"","encombrement":2,"quantite":1,"qualite":0,"cout":0,"milieu":"Forêt, plaine","environnement":[{"milieu":"Forêts","rarete":"Rare","frequence":6},{"milieu":"Plaines","rarete":"Rare","frequence":6}],"sust":4,"exotisme":0,"categorie":"","actor":{"id":"","pack":"","name":""}},"effects":[],"flags":{"core":{"sourceId":"Item.LU5eutNQqwm52oOG"}},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1670580597921,"modifiedTime":1670621588442,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"_id":"33hA6dMd5FO9BO0f","folder":null,"sort":0,"ownership":{"default":0,"jtRmvSuwkwMmIMf0":3}}
|
||||||
{"name":"Nanar","type":"ingredient","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.4ROad7HKzxuRKXNK"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Nanar.webp","effects":[],"_id":"4ROad7HKzxuRKXNK","system":{"description":"<p>Champignon assez amusant, avec un pied minuscule et un joli petit chapeau rose.</p>\n<p>M2 \\ P 2 minutes \\ D1 \\ -3 \\ Teinture d’Érozonne +16, Lait de lune +12.</p>\n<p>Commun.</p>","descriptionmj":"","encombrement":0,"quantite":1,"qualite":0,"cout":0,"milieu":"Lieux sombres et humides","environnement":[{"milieu":"Forêts","rarete":"Commune","frequence":54},{"milieu":"Sous-sols","rarete":"Frequente","frequence":18}],"niveau":0,"base":0,"categorie":"","rarete":"Commune"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.3","coreVersion":"10.290","createdTime":1669734708517,"modifiedTime":1670025575828,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"name":"Tanemiel d'argent","type":"herbe","flags":{"core":{"sheetClass":"foundryvtt-reve-de-dragon.RdDItemSheet","sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.3Idia6bqLgdtiswS"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Tanemiel%20argent%C3%A9.webp","effects":[],"_id":"3Idia6bqLgdtiswS","system":{"description":"<p><em style=\"box-sizing: border-box; user-select: text;\">Herbe de repos.</em></p>\n<p>Variété de tanemiel aux reflets argentés, poussant comme ses frères en forêts humides et chaudes, et dont l'existence est presque aussi mythique. </p>\n<p>Rarissime.</p>","descriptionmj":"","encombrement":0,"quantite":1,"qualite":0,"cout":0.5,"milieu":"Forêts chaudes et humides","environnement":[{"milieu":"Forêts","rarete":"Rarissime","frequence":4}],"niveau":5,"base":0,"categorie":"Repos","rarete":"Rarissime"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1669734708516,"modifiedTime":1670621588444,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
||||||
{"name":"Fausse suppure","type":"herbe","flags":{"core":{"sheetClass":"foundryvtt-reve-de-dragon.RdDItemSheet","sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.57FoMF6mBK2ogX53"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Fausse%20suppure.webp","effects":[],"_id":"57FoMF6mBK2ogX53","system":{"description":"<p><em>Herbe de soin.</em></p>\n<p>Mousse semblable à la suppure, mais plus sèche, et poussant en tous milieux.</p>\n<p>Commune.</p>\n<p> </p>\n<p><em>Voir Les herbes de soin, p100.</em></p>","descriptionmj":"","encombrement":0,"quantite":1,"qualite":0,"cout":0.02,"milieu":"Tous","environnement":[{"milieu":"Collines","rarete":"Commune","frequence":54},{"milieu":"Cours d'eau","rarete":"Commune","frequence":54},{"milieu":"Déserts","rarete":"Commune","frequence":54},{"milieu":"Forêts","rarete":"Commune","frequence":54},{"milieu":"Marais","rarete":"Commune","frequence":54},{"milieu":"Montagnes","rarete":"Commune","frequence":54},{"milieu":"Plaines","rarete":"Commune","frequence":54}],"niveau":1,"base":0,"categorie":"Soin","rarete":"Commune"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.3","coreVersion":"10.290","createdTime":1669734708517,"modifiedTime":1670025575829,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"name":"Cheleuse","type":"herbe","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.3PzaM8d7jLjdzdkt"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Cheleuse.webp","effects":[],"_id":"3PzaM8d7jLjdzdkt","system":{"description":"<p>Fausse menthe à feuilles urticantes.</p>\n<p>M1 \\ P 5 minutes \\ D1 \\ -3 \\ Liqueur de Bagdol +16, Mirobolant +14.</p>\n<p>Fréquente.</p>","descriptionmj":"","encombrement":0,"quantite":1,"qualite":0,"cout":0,"milieu":"Lieux humides","environnement":[{"milieu":"Cours d'eau","rarete":"Frequente","frequence":18},{"milieu":"Marais","rarete":"Frequente","frequence":18},{"milieu":"Sous-sols","rarete":"Frequente","frequence":18}],"niveau":0,"base":0,"categorie":"","rarete":"Frequente"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1669734708517,"modifiedTime":1670621588437,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
||||||
{"name":"Salsimir ventru","type":"ingredient","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.66Rzf8phcEQRIShv"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Salsimir%20ventru.webp","effects":[],"_id":"66Rzf8phcEQRIShv","system":{"description":"<p>À points jaunes ou à points rouges, le salsimir ventru se distingue par un pied large et renflé.</p>\n<p>Rare.</p>","descriptionmj":"","encombrement":0.1,"quantite":1,"qualite":0,"cout":0,"milieu":"Lieux sombres et humides","environnement":[{"milieu":"Forêts","rarete":"Rare","frequence":9},{"milieu":"Sous-sols","rarete":"Rarissime","frequence":3}],"niveau":4,"base":0,"categorie":"Cuisine","rarete":"Rare"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.3","coreVersion":"10.290","createdTime":1669734708517,"modifiedTime":1670025575829,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"name":"Champirigolo","type":"ingredient","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.45vMHMwrCFeLZyH8"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Champirigolo.webp","effects":[],"_id":"45vMHMwrCFeLZyH8","system":{"description":"<p>Le champirigolo est un champignon de bordure de sous-bois, ressemblant à un petit bonhomme caché sous un chapeau conique aplati. Le « visage » du bonhomme, de couleur chair, tavelé, donne souvent l’impression de tirer la langue à qui le regarde. <br />Comestible, il possède toutefois des vertus hallucinogènes, provoquant des crises de fou rire, et, d’une manière générale, faisant trouver de la drôlerie dans tout. <br />En termes de jeu, il augmente l’EMPATHIE au détriment de l’INTELLECT.</p>\n<p>Fréquent.</p>\n<p><em>Cf : p.139</em></p>","descriptionmj":"","encombrement":0.1,"quantite":1,"qualite":0,"cout":0,"milieu":"Lieux sombres et humides","environnement":[{"milieu":"Forêts","rarete":"Frequente","frequence":18},{"milieu":"Sous-sols","rarete":"Rare","frequence":6}],"sust":0,"exotisme":0,"niveau":null,"base":0,"categorie":"Cuisine","rarete":"Frequente"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1669734708517,"modifiedTime":1670621588437,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
||||||
{"name":"Tricolet","type":"ingredient","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.6gb2cjdPXI44ym8D"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Tricollet.webp","effects":[],"_id":"6gb2cjdPXI44ym8D","system":{"description":"<p>Champignon à pied blanc, triple volve, et large chapeau vert à points bleus.</p>\n<p>Rare.</p>","descriptionmj":"","encombrement":0.1,"quantite":1,"qualite":0,"cout":0,"milieu":"Lieux sombres et humides","environnement":[{"milieu":"Forêts","rarete":"Rare","frequence":6},{"milieu":"Sous-sols","rarete":"Rarissime","frequence":3}],"niveau":4,"base":0,"categorie":"Cuisine","rarete":"Rare"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.3","coreVersion":"10.290","createdTime":1669734708518,"modifiedTime":1670025575829,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"name":"Nanar","type":"ingredient","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.4ROad7HKzxuRKXNK"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Nanar.webp","effects":[],"_id":"4ROad7HKzxuRKXNK","system":{"description":"<p>Champignon assez amusant, avec un pied minuscule et un joli petit chapeau rose.</p>\n<p>M2 \\ P 2 minutes \\ D1 \\ -3 \\ Teinture d’Érozonne +16, Lait de lune +12.</p>\n<p>Commun.</p>","descriptionmj":"","encombrement":0,"quantite":1,"qualite":0,"cout":0,"milieu":"Lieux sombres et humides","environnement":[{"milieu":"Forêts","rarete":"Commune","frequence":54},{"milieu":"Sous-sols","rarete":"Frequente","frequence":18}],"sust":0,"exotisme":0,"niveau":0,"base":0,"categorie":"","rarete":"Commune"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1669734708517,"modifiedTime":1670621588440,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
||||||
{"name":"Salsimir à points verts","type":"ingredient","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.7IV2V4ZotDEP2sLs"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Salsimir%20%C3%A0%20points%20verts.webp","effects":[],"_id":"7IV2V4ZotDEP2sLs","system":{"description":"<p>Champignon semblable aux autres variétés de salsimir, hormis la couleur de ses points.</p>\n<p>M1 \\ P 5 minutes \\ D1 \\ -5 \\ Lait de lune +14, Gelée royale +12.</p>\n<p>Rare.</p>","descriptionmj":"","encombrement":0.1,"quantite":1,"qualite":0,"cout":0,"milieu":"Lieux sombres et humides","environnement":[{"milieu":"Forêts","rarete":"Rare","frequence":9},{"milieu":"Sous-sols","rarete":"Rarissime","frequence":3}],"niveau":null,"base":0,"categorie":"","rarete":"Rare"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.3","coreVersion":"10.290","createdTime":1669734708518,"modifiedTime":1670025575829,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"name":"Fausse suppure","type":"herbe","flags":{"core":{"sheetClass":"foundryvtt-reve-de-dragon.RdDItemSheet","sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.57FoMF6mBK2ogX53"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Fausse%20suppure.webp","effects":[],"_id":"57FoMF6mBK2ogX53","system":{"description":"<p><em>Herbe de soin.</em></p>\n<p>Mousse semblable à la suppure, mais plus sèche, et poussant en tous milieux.</p>\n<p>Commune.</p>\n<p> </p>\n<p><em>Voir Les herbes de soin, p100.</em></p>","descriptionmj":"","encombrement":0,"quantite":1,"qualite":0,"cout":0.02,"milieu":"Tous","environnement":[{"milieu":"Collines","rarete":"Commune","frequence":54},{"milieu":"Cours d'eau","rarete":"Commune","frequence":54},{"milieu":"Déserts","rarete":"Commune","frequence":54},{"milieu":"Forêts","rarete":"Commune","frequence":54},{"milieu":"Marais","rarete":"Commune","frequence":54},{"milieu":"Montagnes","rarete":"Commune","frequence":54},{"milieu":"Plaines","rarete":"Commune","frequence":54}],"niveau":1,"base":0,"categorie":"Soin","rarete":"Commune"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1669734708517,"modifiedTime":1670621588438,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
||||||
{"name":"Tanemiel doré","type":"herbe","flags":{"core":{"sheetClass":"foundryvtt-reve-de-dragon.RdDItemSheet","sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.7RgTRB47YPH74BwF"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Tanemiel%20dor%C3%A9.webp","effects":[],"_id":"7RgTRB47YPH74BwF","system":{"description":"<p><em>Herbe de soin.</em></p>\n<p>Variété de tanemiel aux feuilles luisantes de couleur ambrée.</p>\n<p>Rarissime.</p>\n<p> </p>\n<p><em>Voir Les herbes de soin, p100.</em></p>","descriptionmj":"","encombrement":0,"quantite":1,"qualite":0,"cout":2,"milieu":"Forêts chaudes et humides","environnement":[{"milieu":"Forêts","rarete":"Rarissime","frequence":2}],"niveau":10,"base":0,"categorie":"Soin","rarete":"Rarissime"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.3","coreVersion":"10.290","createdTime":1669734708518,"modifiedTime":1670025575829,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"name":"Grand Coq de Bruyère","type":"faune","img":"systems/foundryvtt-reve-de-dragon/icons/faune/oiseau.webp","system":{"description":"<p>Grand coq de bruyère. Montagne, 4 kg, 12 sust.</p>","descriptionmj":"","encombrement":2,"quantite":1,"qualite":0,"cout":0,"milieu":"Montagnes","environnement":[{"milieu":"Montagnes","rarete":"Rare","frequence":6}],"sust":12,"exotisme":0,"categorie":"","actor":{"id":"","pack":"","name":""}},"effects":[],"flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.5bNkhPn0SUfTmKZh"}},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1670580597921,"modifiedTime":1670621588445,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"_id":"5bNkhPn0SUfTmKZh","folder":null,"sort":0,"ownership":{"default":0,"jtRmvSuwkwMmIMf0":3}}
|
||||||
{"name":"Bousille","type":"ingredient","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.84i33KtUxLwCK2Uu"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Bousille.webp","effects":[],"_id":"84i33KtUxLwCK2Uu","system":{"description":"<p>Appétissant champignon brun beige très semblable à la morille.</p>\n<p>M5 \\ P 6 rounds \\ D3 \\ -4 \\ Teinture d’Érozonne +10, Topazoïne +6.</p>\n<p>Fréquente.</p>","descriptionmj":"","encombrement":0,"quantite":1,"qualite":0,"cout":0,"milieu":"Lieux sombres et humides","environnement":[{"milieu":"Forêts","rarete":"Frequente","frequence":18},{"milieu":"Sous-sols","rarete":"Rare","frequence":6}],"niveau":0,"base":0,"categorie":"","rarete":"Frequente"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.3","coreVersion":"10.290","createdTime":1669734708519,"modifiedTime":1670025575829,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"name":"Lièvre","type":"faune","img":"systems/foundryvtt-reve-de-dragon/icons/faune/lapin.webp","system":{"description":"<p>Lièvre. Plaine, 4 kg, 8 sust.</p>","descriptionmj":"","encombrement":2,"quantite":1,"qualite":0,"cout":0,"milieu":"Plaines","environnement":[{"milieu":"Plaines","rarete":"Frequente","frequence":18}],"sust":8,"exotisme":0,"categorie":"","actor":{"id":"","pack":"","name":""}},"effects":[],"flags":{"core":{"sourceId":"Item.LU5eutNQqwm52oOG"}},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1670580597921,"modifiedTime":1670621588440,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"_id":"5rGi4IeFyxQwyOOq","folder":null,"sort":0,"ownership":{"default":0,"jtRmvSuwkwMmIMf0":3}}
|
||||||
{"name":"Veloute","type":"ingredient","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.8MO2HBua7RUdGN3D"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Veloute.webp","effects":[],"_id":"8MO2HBua7RUdGN3D","system":{"description":"<p>Fruit du veloutier, petit arbre pleureur au tronc recouvert d’un lichen duveteux gris rose, poussant usuellement au bord de l’eau, la veloute est une petite pêche très velue, juteuse et douce, au goût panaché de litchi et de fraise des bois.</p>\n<p>Fréquente.</p>","descriptionmj":"","encombrement":0.05,"quantite":1,"qualite":0,"cout":0,"milieu":"Lieux humides","environnement":[{"milieu":"Cours d'eau","rarete":"Frequente","frequence":18},{"milieu":"Marais","rarete":"Frequente","frequence":18}],"niveau":0,"base":0,"categorie":"Cuisine","rarete":"Rare"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.3","coreVersion":"10.290","createdTime":1669734708519,"modifiedTime":1670025575829,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"name":"Salsimir ventru","type":"ingredient","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.66Rzf8phcEQRIShv"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Salsimir%20ventru.webp","effects":[],"_id":"66Rzf8phcEQRIShv","system":{"description":"<p>À points jaunes ou à points rouges, le salsimir ventru se distingue par un pied large et renflé.</p>\n<p>Rare.</p>","descriptionmj":"","encombrement":0.1,"quantite":1,"qualite":0,"cout":0,"milieu":"Lieux sombres et humides","environnement":[{"milieu":"Forêts","rarete":"Rare","frequence":9},{"milieu":"Sous-sols","rarete":"Rarissime","frequence":3}],"sust":0,"exotisme":0,"niveau":4,"base":0,"categorie":"Cuisine","rarete":"Rare"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1669734708517,"modifiedTime":1670621588442,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
||||||
{"name":"Enervure","type":"herbe","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.8QFBVNJMEsANaYaq"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/%C3%89nervure.webp","effects":[],"_id":"8QFBVNJMEsANaYaq","system":{"description":"<p>Fausse fougère aux feuilles tranchantes comme des rasoirs, distillant un venin mortel.</p>\n<p>M3 \\ P 1 minute \\ D2 \\ -3 \\ Tournegraisse +14, Mirobolant +10.</p>\n<p>Fréquente.</p>","descriptionmj":"","encombrement":0,"quantite":1,"qualite":0,"cout":0,"milieu":"Forêts","environnement":[{"milieu":"Forêts","rarete":"Frequente","frequence":18}],"niveau":0,"base":0,"categorie":"","rarete":"Frequente"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.3","coreVersion":"10.290","createdTime":1669734708519,"modifiedTime":1670025575829,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"name":"Sautille","type":"faune","img":"systems/foundryvtt-reve-de-dragon/icons/faune/oiseau.webp","system":{"description":"<p>Sautille. Rivage, 1 kg, 2 sust. Petit échassier voisin de la grue qui, au lieu de marcher tranquillement, passe son temps àsautiller sur ses longues pattes.</p>","descriptionmj":"","encombrement":0.5,"quantite":1,"qualite":0,"cout":0,"milieu":"Rivage","environnement":[{"milieu":"Cours d'eau","rarete":"Frequente","frequence":18}],"sust":2,"exotisme":0,"categorie":"","actor":{"id":"","pack":"","name":""}},"effects":[],"flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.6bvChVkjsy5tsa4d"}},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1670580597921,"modifiedTime":1670621588445,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"_id":"6bvChVkjsy5tsa4d","folder":null,"sort":0,"ownership":{"default":0,"jtRmvSuwkwMmIMf0":3}}
|
||||||
{"name":"Lulube","type":"ingredient","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.8a2EJVdhdU7CXFCn"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Lulube.webp","effects":[],"_id":"8a2EJVdhdU7CXFCn","system":{"description":"<p>Fruit du lulubier, arbre de la taille d’un cerisier, la lulube est un petit fruit rouge dont le goût est un panaché de cerise et de citron.</p>\n<p>Fréquente.</p>","descriptionmj":"","encombrement":0.05,"quantite":1,"qualite":0,"cout":0,"milieu":"Tous","environnement":[{"milieu":"Collines","rarete":"Frequente","frequence":18},{"milieu":"Cours d'eau","rarete":"Frequente","frequence":18},{"milieu":"Déserts","rarete":"Frequente","frequence":18},{"milieu":"Forêts","rarete":"Frequente","frequence":18},{"milieu":"Marais","rarete":"Frequente","frequence":18},{"milieu":"Montagnes","rarete":"Frequente","frequence":18},{"milieu":"Plaines","rarete":"Frequente","frequence":18}],"niveau":0,"base":0,"categorie":"Cuisine","rarete":"Frequente"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.3","coreVersion":"10.290","createdTime":1669734708519,"modifiedTime":1670025575829,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"name":"Tricolet","type":"ingredient","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.6gb2cjdPXI44ym8D"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Tricollet.webp","effects":[],"_id":"6gb2cjdPXI44ym8D","system":{"description":"<p>Champignon à pied blanc, triple volve, et large chapeau vert à points bleus.</p>\n<p>Rare.</p>","descriptionmj":"","encombrement":0.1,"quantite":1,"qualite":0,"cout":0,"milieu":"Lieux sombres et humides","environnement":[{"milieu":"Forêts","rarete":"Rare","frequence":6},{"milieu":"Sous-sols","rarete":"Rarissime","frequence":3}],"sust":0,"exotisme":0,"niveau":4,"base":0,"categorie":"Cuisine","rarete":"Rare"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1669734708518,"modifiedTime":1670621588445,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
||||||
{"name":"Suppure","type":"herbe","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.9XJEICURxX1qVud6"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Suppure.webp","effects":[],"_id":"9XJEICURxX1qVud6","system":{"description":"<p><em>Herbe de soin.</em></p>\n<p>Sorte de mousse d’aspect maladif, s’accrochant aux vieux troncs et aux rochers des forêts, d’où elle semble <em>suppurer</em>.</p>\n<p>Commune.</p>\n<p> </p>\n<p><em>Voir Les herbes de soin, p100.</em></p>","descriptionmj":"","encombrement":0,"quantite":1,"qualite":0,"cout":0.03,"milieu":"Forêts","environnement":[{"milieu":"Forêts","rarete":"Commune","frequence":54}],"niveau":2,"base":0,"categorie":"Soin","rarete":"Commune"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.3","coreVersion":"10.290","createdTime":1669734708519,"modifiedTime":1670025575829,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"name":"Lapin","type":"faune","img":"systems/foundryvtt-reve-de-dragon/icons/faune/lapin.webp","system":{"description":"<p>Lapin. Forêt, plaine, 2 kg, 5 sust.</p>","descriptionmj":"","encombrement":1,"quantite":1,"qualite":0,"cout":0,"milieu":"Forets, Plaines","environnement":[{"milieu":"Forêts","rarete":"Commune","frequence":54},{"milieu":"Plaines","rarete":"Commune","frequence":54}],"sust":5,"exotisme":0,"categorie":"","actor":{"id":"","pack":"","name":""}},"effects":[],"flags":{"core":{"sourceId":"Item.LU5eutNQqwm52oOG"}},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1670580597921,"modifiedTime":1670621588440,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"_id":"6pDi7Pew5FZ3Ca1I","folder":null,"sort":0,"ownership":{"default":0,"jtRmvSuwkwMmIMf0":3}}
|
||||||
{"name":"Salsimir à points rouges","type":"ingredient","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.9pTMw1dFbVaN2iiF"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Salsimir%20%C3%A0%20points%20rouges.webp","effects":[],"_id":"9pTMw1dFbVaN2iiF","system":{"description":"<p>Autre variété de salsimir, au teint plus clair et tacheté de points rouges. Fréquent.</p>","descriptionmj":"","encombrement":0.1,"quantite":1,"qualite":0,"cout":0,"milieu":"Lieux sombres et humides","environnement":[{"milieu":"Forêts","rarete":"Frequente","frequence":18},{"milieu":"Sous-sols","rarete":"Rare","frequence":6}],"niveau":2,"base":0,"categorie":"Cuisine","rarete":"Frequente"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.3","coreVersion":"10.290","createdTime":1669734708520,"modifiedTime":1670025575829,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"name":"Salsimir à points verts","type":"ingredient","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.7IV2V4ZotDEP2sLs"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Salsimir%20%C3%A0%20points%20verts.webp","effects":[],"_id":"7IV2V4ZotDEP2sLs","system":{"description":"<p>Champignon semblable aux autres variétés de salsimir, hormis la couleur de ses points.</p>\n<p>M1 \\ P 5 minutes \\ D1 \\ -5 \\ Lait de lune +14, Gelée royale +12.</p>\n<p>Rare.</p>","descriptionmj":"","encombrement":0.1,"quantite":1,"qualite":0,"cout":0,"milieu":"Lieux sombres et humides","environnement":[{"milieu":"Forêts","rarete":"Rare","frequence":9},{"milieu":"Sous-sols","rarete":"Rarissime","frequence":3}],"sust":0,"exotisme":0,"niveau":null,"base":0,"categorie":"","rarete":"Rare"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1669734708518,"modifiedTime":1670621588442,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
||||||
{"name":"Hécatombe","type":"ingredient","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.9tG4XPzyvjrSAj3o"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/H%C3%A9catombe.webp","effects":[],"_id":"9tG4XPzyvjrSAj3o","system":{"description":"<p>Petite poire rouge à peau lustrée, au goût acidulé et pas désagréable.</p>\n<p>M4 \\ P 1 minute \\ D2 \\ -5 \\ Bitume de Camphre +12, Mirobolant +6.</p>\n<p>Rare.</p>","descriptionmj":"","encombrement":0.05,"quantite":1,"qualite":0,"cout":0,"milieu":"Tous","environnement":[{"milieu":"Collines","rarete":"Rare","frequence":6},{"milieu":"Cours d'eau","rarete":"Rare","frequence":6},{"milieu":"Déserts","rarete":"Frequente","frequence":18},{"milieu":"Forêts","rarete":"Rare","frequence":6},{"milieu":"Marais","rarete":"Rare","frequence":6},{"milieu":"Montagnes","rarete":"Frequente","frequence":18},{"milieu":"Plaines","rarete":"Rare","frequence":6}],"niveau":null,"base":0,"categorie":"","rarete":"Rare"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.3","coreVersion":"10.290","createdTime":1669734708520,"modifiedTime":1670025575829,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"name":"Tanemiel doré","type":"herbe","flags":{"core":{"sheetClass":"foundryvtt-reve-de-dragon.RdDItemSheet","sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.7RgTRB47YPH74BwF"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Tanemiel%20dor%C3%A9.webp","effects":[],"_id":"7RgTRB47YPH74BwF","system":{"description":"<p><em>Herbe de soin.</em></p>\n<p>Variété de tanemiel aux feuilles luisantes de couleur ambrée.</p>\n<p>Rarissime.</p>\n<p> </p>\n<p><em>Voir Les herbes de soin, p100.</em></p>","descriptionmj":"","encombrement":0,"quantite":1,"qualite":0,"cout":2,"milieu":"Forêts chaudes et humides","environnement":[{"milieu":"Forêts","rarete":"Rarissime","frequence":2}],"niveau":10,"base":0,"categorie":"Soin","rarete":"Rarissime"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1669734708518,"modifiedTime":1670621588444,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
||||||
{"name":"Fesse de groin","type":"ingredient","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.ALwHAF15KYWUQfQc"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Fesse%20de%20groin.webp","effects":[],"_id":"ALwHAF15KYWUQfQc","system":{"description":"<p>Poussant à même le sol, sans quasiment de pied, c’est un champignon fendu verticalement, évoquant un gros derrière pustuleux. Quand on le bouscule, il émet un bruit incongru, accompagné d’une odeur pénible.</p>\n<p>M3 \\ P 1 minute \\ D1 \\ -3 \\ Bitume de Camphre +16, Élixir des Gnomes +12.</p>\n<p>Commune.</p>","descriptionmj":"","encombrement":0,"quantite":1,"qualite":0,"cout":0,"milieu":"Lieux sombres et humides","environnement":[{"milieu":"Forêts","rarete":"Frequente","frequence":18},{"milieu":"Sous-sols","rarete":"Rare","frequence":6}],"niveau":0,"base":0,"categorie":"","rarete":"Commune"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.3","coreVersion":"10.290","createdTime":1669734708520,"modifiedTime":1670025575829,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"name":"Bousille","type":"ingredient","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.84i33KtUxLwCK2Uu"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Bousille.webp","effects":[],"_id":"84i33KtUxLwCK2Uu","system":{"description":"<p>Appétissant champignon brun beige très semblable à la morille.</p>\n<p>M5 \\ P 6 rounds \\ D3 \\ -4 \\ Teinture d’Érozonne +10, Topazoïne +6.</p>\n<p>Fréquente.</p>","descriptionmj":"","encombrement":0,"quantite":1,"qualite":0,"cout":0,"milieu":"Lieux sombres et humides","environnement":[{"milieu":"Forêts","rarete":"Frequente","frequence":18},{"milieu":"Sous-sols","rarete":"Rare","frequence":6}],"sust":0,"exotisme":0,"niveau":0,"base":0,"categorie":"","rarete":"Frequente"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1669734708519,"modifiedTime":1670621588437,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
||||||
{"name":"Asper violet","type":"ingredient","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.EYy9B0xJ0IGWYEuh"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Asper%20violet.webp","effects":[],"_id":"EYy9B0xJ0IGWYEuh","system":{"description":"<p>Champignon violet à pied filiforme et chapeau pointu très éfilé.</p>\n<p>Fréquent.</p>","descriptionmj":"","encombrement":0.1,"quantite":1,"qualite":0,"cout":0,"milieu":"Lieux sombres et humides","environnement":[{"milieu":"Forêts","rarete":"Frequente","frequence":18},{"milieu":"Sous-sols","rarete":"Rare","frequence":6}],"niveau":2,"base":0,"categorie":"Cuisine","rarete":"Frequente"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.3","coreVersion":"10.290","createdTime":1669734708520,"modifiedTime":1670025575829,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"name":"Plumard","type":"faune","img":"systems/foundryvtt-reve-de-dragon/icons/faune/oie.webp","system":{"description":"<p>Plumard. Plaine, forêt, 3 kg, 7 sust. Le plumard est un gros oiseau voisin du faisan, au plumage multicolore et rutilant comme celui d’un perroquet. Sa chair est particulièrement savoureuse et ses plumes fort recherchées pour orner les chapeaux.</p>","descriptionmj":"","encombrement":1.5,"quantite":1,"qualite":0,"cout":0,"milieu":"Plaine, Foret","environnement":[{"milieu":"Forêts","rarete":"Frequente","frequence":23},{"milieu":"Plaines","rarete":"Frequente","frequence":24}],"sust":7,"exotisme":0,"categorie":"","actor":{"id":"","pack":"","name":""}},"effects":[],"flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.8BVcgy3mLXirlPpm"}},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1670580597921,"modifiedTime":1670621588445,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"_id":"8BVcgy3mLXirlPpm","folder":null,"sort":0,"ownership":{"default":0,"jtRmvSuwkwMmIMf0":3}}
|
||||||
{"name":"Candique","type":"ingredient","img":"systems/foundryvtt-reve-de-dragon/icons/objets/candique.webp","effects":[],"flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.equipement.bxDITKRhXiyvLhMz"}},"system":{"description":"<p>Poudre blanche apparaissant sous l’écorce de nombreux arbres,</p>\n<p>VUE/Alchimie à 0.</p>","descriptionmj":"","encombrement":0.001,"quantite":1,"qualite":0,"cout":0.02,"milieu":"Forêts","environnement":[{"milieu":"Forêts","rarete":"","frequence":54}],"niveau":0,"base":0,"categorie":"Alchimie","rarete":""},"ownership":{"default":0,"rYShh2P1DNavdoBD":3,"Hp9ImM4o9YRTSdfu":3},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.3","coreVersion":"10.290","createdTime":1668808206109,"modifiedTime":1670025575830,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"folder":null,"sort":0,"_id":"FjfZ789LlkzUUSMU"}
|
{"name":"Veloute","type":"ingredient","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.8MO2HBua7RUdGN3D"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Veloute.webp","effects":[],"_id":"8MO2HBua7RUdGN3D","system":{"description":"<p>Fruit du veloutier, petit arbre pleureur au tronc recouvert d’un lichen duveteux gris rose, poussant usuellement au bord de l’eau, la veloute est une petite pêche très velue, juteuse et douce, au goût panaché de litchi et de fraise des bois.</p>\n<p>Fréquente.</p>","descriptionmj":"","encombrement":0.05,"quantite":1,"qualite":0,"cout":0,"milieu":"Lieux humides","environnement":[{"milieu":"Cours d'eau","rarete":"Frequente","frequence":18},{"milieu":"Marais","rarete":"Frequente","frequence":18}],"sust":0,"exotisme":0,"niveau":0,"base":0,"categorie":"Cuisine","rarete":"Rare"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1669734708519,"modifiedTime":1670621588445,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
||||||
{"name":"Ortilise","type":"herbe","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.GrzjjbOUWlOUgzEQ"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Ortilise.webp","effects":[],"_id":"GrzjjbOUWlOUgzEQ","system":{"description":"<p>Redoutable variété d’ortie, poussant dans les lieux humides, le voisinage des marais.</p>\n<p>M3 \\ P 1 minute \\ D2 \\ -3 \\ Topazoïne +12, Lait de lune +8.</p>\n<p>Fréquente.</p>","descriptionmj":"","encombrement":0,"quantite":1,"qualite":0,"cout":0,"milieu":"Lieux humides","environnement":[{"milieu":"Cours d'eau","rarete":"Frequente","frequence":18},{"milieu":"Marais","rarete":"Frequente","frequence":18}],"niveau":0,"base":0,"categorie":"","rarete":"Frequente"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.3","coreVersion":"10.290","createdTime":1669734708520,"modifiedTime":1670025575830,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"name":"Enervure","type":"herbe","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.8QFBVNJMEsANaYaq"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/%C3%89nervure.webp","effects":[],"_id":"8QFBVNJMEsANaYaq","system":{"description":"<p>Fausse fougère aux feuilles tranchantes comme des rasoirs, distillant un venin mortel.</p>\n<p>M3 \\ P 1 minute \\ D2 \\ -3 \\ Tournegraisse +14, Mirobolant +10.</p>\n<p>Fréquente.</p>","descriptionmj":"","encombrement":0,"quantite":1,"qualite":0,"cout":0,"milieu":"Forêts","environnement":[{"milieu":"Forêts","rarete":"Frequente","frequence":18}],"niveau":0,"base":0,"categorie":"","rarete":"Frequente"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1669734708519,"modifiedTime":1670621588438,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
||||||
{"name":"Tshaï","type":"herbe","flags":{"core":{"sheetClass":"foundryvtt-reve-de-dragon.RdDItemSheet","sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.H0eZczDzhj1fUUxZ"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Tsha%C3%AF.webp","effects":[],"_id":"H0eZczDzhj1fUUxZ","system":{"description":"<p>Petit arbuste à fleurs blanches et feuilles persistantes, poussant au versant des collines ensoleillées. Une fois séchées, ses feuilles sont consommées en infusion, donnant une boisson parfumée et tonique. Par extension, tshaï est aussi le nom donné à la boisson en question.</p>\n<p>Fréquent.</p>","descriptionmj":"","encombrement":0,"quantite":1,"qualite":0,"cout":null,"milieu":"Collines","environnement":[{"milieu":"Collines","rarete":"Frequente","frequence":18}],"niveau":null,"base":0,"categorie":"Cuisine","rarete":"Frequente"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.3","coreVersion":"10.290","createdTime":1669734708520,"modifiedTime":1670025575830,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"name":"Lulube","type":"ingredient","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.8a2EJVdhdU7CXFCn"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Lulube.webp","effects":[],"_id":"8a2EJVdhdU7CXFCn","system":{"description":"<p>Fruit du lulubier, arbre de la taille d’un cerisier, la lulube est un petit fruit rouge dont le goût est un panaché de cerise et de citron.</p>\n<p>Fréquente.</p>","descriptionmj":"","encombrement":0.05,"quantite":1,"qualite":0,"cout":0,"milieu":"Tous","environnement":[{"milieu":"Collines","rarete":"Frequente","frequence":18},{"milieu":"Cours d'eau","rarete":"Frequente","frequence":18},{"milieu":"Déserts","rarete":"Frequente","frequence":18},{"milieu":"Forêts","rarete":"Frequente","frequence":18},{"milieu":"Marais","rarete":"Frequente","frequence":18},{"milieu":"Montagnes","rarete":"Frequente","frequence":18},{"milieu":"Plaines","rarete":"Frequente","frequence":18}],"sust":0,"exotisme":0,"niveau":0,"base":0,"categorie":"Cuisine","rarete":"Frequente"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1669734708519,"modifiedTime":1670621588440,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
||||||
{"name":"Obyssum vert","type":"ingredient","img":"systems/foundryvtt-reve-de-dragon/icons/objets/l_obyssum_vert.webp","effects":[],"flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.equipement.D5Z3FaUv91B8eCOP"}},"system":{"description":"<p>Poudre verdâtre apparaissant sur les tiges de certains roseaux.</p>\n<p>VUE/Alchimie à -2</p>","descriptionmj":"","encombrement":0.001,"quantite":1,"qualite":0,"cout":0.05,"milieu":"Lieux humides","environnement":[{"milieu":"Cours d'eau","rarete":"Commune","frequence":54},{"milieu":"Marais","rarete":"Commune","frequence":54}],"niveau":0,"base":0,"categorie":"Alchimie","rarete":""},"ownership":{"default":0,"rYShh2P1DNavdoBD":3,"Hp9ImM4o9YRTSdfu":3},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.3","coreVersion":"10.290","createdTime":1668808206019,"modifiedTime":1670025575830,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"folder":null,"sort":0,"_id":"HTtgzxpvUvMHilqx"}
|
{"name":"Suppure","type":"herbe","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.9XJEICURxX1qVud6"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Suppure.webp","effects":[],"_id":"9XJEICURxX1qVud6","system":{"description":"<p><em>Herbe de soin.</em></p>\n<p>Sorte de mousse d’aspect maladif, s’accrochant aux vieux troncs et aux rochers des forêts, d’où elle semble <em>suppurer</em>.</p>\n<p>Commune.</p>\n<p> </p>\n<p><em>Voir Les herbes de soin, p100.</em></p>","descriptionmj":"","encombrement":0,"quantite":1,"qualite":0,"cout":0.03,"milieu":"Forêts","environnement":[{"milieu":"Forêts","rarete":"Commune","frequence":54}],"niveau":2,"base":0,"categorie":"Soin","rarete":"Commune"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1669734708519,"modifiedTime":1670621588443,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
||||||
{"name":"Calamine","type":"ingredient","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.HlUFBr3yInurp96Z"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Calamine.webp","effects":[],"_id":"HlUFBr3yInurp96Z","system":{"description":"<p>Fruit du calaminier, sorte de figuier rampant doté de lianes et de vrilles. La calamine pousse en petites grappes de fruits à goût mi-figue, mi-raisin.</p>\n<p>Fréquente.</p>","descriptionmj":"","encombrement":0.01,"quantite":1,"qualite":0,"cout":0,"milieu":"Tous","environnement":[{"milieu":"Collines","rarete":"Frequente","frequence":18},{"milieu":"Cours d'eau","rarete":"Frequente","frequence":18},{"milieu":"Déserts","rarete":"Frequente","frequence":18},{"milieu":"Forêts","rarete":"Frequente","frequence":18},{"milieu":"Marais","rarete":"Frequente","frequence":18},{"milieu":"Montagnes","rarete":"Frequente","frequence":18},{"milieu":"Plaines","rarete":"Frequente","frequence":18}],"niveau":0,"base":0,"categorie":"Cuisine","rarete":"Frequente"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.3","coreVersion":"10.290","createdTime":1669734708520,"modifiedTime":1670025575830,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"name":"Salsimir à points rouges","type":"ingredient","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.9pTMw1dFbVaN2iiF"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Salsimir%20%C3%A0%20points%20rouges.webp","effects":[],"_id":"9pTMw1dFbVaN2iiF","system":{"description":"<p>Autre variété de salsimir, au teint plus clair et tacheté de points rouges. Fréquent.</p>","descriptionmj":"","encombrement":0.1,"quantite":1,"qualite":0,"cout":0,"milieu":"Lieux sombres et humides","environnement":[{"milieu":"Forêts","rarete":"Frequente","frequence":18},{"milieu":"Sous-sols","rarete":"Rare","frequence":6}],"sust":0,"exotisme":0,"niveau":2,"base":0,"categorie":"Cuisine","rarete":"Frequente"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1669734708520,"modifiedTime":1670621588442,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
||||||
{"name":"Primelune","type":"ingredient","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.Kg13pgjU0u421Kcm"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Primelune.webp","effects":[],"_id":"Kg13pgjU0u421Kcm","system":{"description":"<p>Apparaissant le plus souvent à la nouvelle lune, c’est un petit champignon à pied blanc et chapeau plat vert tendre.</p>\n<p>Commune.</p>","descriptionmj":"","encombrement":0.1,"quantite":1,"qualite":0,"cout":0,"milieu":"Lieux sombres et humides","environnement":[{"milieu":"Forêts","rarete":"Commune","frequence":54},{"milieu":"Sous-sols","rarete":"Frequente","frequence":18}],"niveau":1,"base":0,"categorie":"Cuisine","rarete":"Commune"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.3","coreVersion":"10.290","createdTime":1669734708521,"modifiedTime":1670025575831,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"name":"Hécatombe","type":"ingredient","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.9tG4XPzyvjrSAj3o"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/H%C3%A9catombe.webp","effects":[],"_id":"9tG4XPzyvjrSAj3o","system":{"description":"<p>Petite poire rouge à peau lustrée, au goût acidulé et pas désagréable.</p>\n<p>M4 \\ P 1 minute \\ D2 \\ -5 \\ Bitume de Camphre +12, Mirobolant +6.</p>\n<p>Rare.</p>","descriptionmj":"","encombrement":0.05,"quantite":1,"qualite":0,"cout":0,"milieu":"Tous","environnement":[{"milieu":"Collines","rarete":"Rare","frequence":6},{"milieu":"Cours d'eau","rarete":"Rare","frequence":6},{"milieu":"Déserts","rarete":"Frequente","frequence":18},{"milieu":"Forêts","rarete":"Rare","frequence":6},{"milieu":"Marais","rarete":"Rare","frequence":6},{"milieu":"Montagnes","rarete":"Frequente","frequence":18},{"milieu":"Plaines","rarete":"Rare","frequence":6}],"sust":0,"exotisme":0,"niveau":null,"base":0,"categorie":"","rarete":"Rare"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1669734708520,"modifiedTime":1670621588439,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
||||||
{"name":"Fumebol","type":"ingredient","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.LJdoBQBE3KNDLXKq"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Fumebol.webp","effects":[],"_id":"LJdoBQBE3KNDLXKq","system":{"description":"<p>Champignon brun ressemblant grossièrement au cèpe bolet.</p>\n<p>M5 \\ P 8 rounds \\ D2 \\ -5 \\ Sable-Poudre +12, Huile de Sélikanthe +8.</p>\n<p>Rare.</p>","descriptionmj":"","encombrement":0,"quantite":1,"qualite":0,"cout":0,"milieu":"Lieux sombres et humides","environnement":[{"milieu":"Forêts","rarete":"Rare","frequence":6},{"milieu":"Sous-sols","rarete":"Rare","frequence":6}],"niveau":0,"base":0,"categorie":"","rarete":"Rare"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.3","coreVersion":"10.290","createdTime":1669734708521,"modifiedTime":1670025575831,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"name":"Colimace","type":"faune","img":"systems/foundryvtt-reve-de-dragon/icons/faune/colimace.webp","system":{"description":"<p><span class=\"fontstyle0\">Bel escargot des jardins et autres lieux arrosés. La colimace vit généralement en couple, à deux individus dans la même coquille. Faire dégorger longuement dans la salnise avant de consommer, en soupe, omelette ou fricassée. </span></p>","descriptionmj":"","encombrement":0.01,"quantite":1,"qualite":0,"cout":0,"milieu":"Jardins et lieux arrosés","environnement":[{"milieu":"Forêts","rarete":"Commune","frequence":54},{"milieu":"Marais","rarete":"Frequente","frequence":18},{"milieu":"Plaines","rarete":"Commune","frequence":54}],"sust":0.1,"exotisme":0,"categorie":"","actor":{"id":"","pack":"","name":""}},"effects":[],"flags":{},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1670616816817,"modifiedTime":1670621588398,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"folder":null,"sort":0,"ownership":{"default":0,"Hp9ImM4o9YRTSdfu":3},"_id":"AK1LrrCkcJr2sP4g"}
|
||||||
{"name":"Chramaelium","type":"ingredient","img":"systems/foundryvtt-reve-de-dragon/icons/objets/chramaelium.webp","effects":[],"flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.equipement.ncpONCxPPNZ9YbBr"}},"system":{"description":"<p>Poudre rouge obtenue par disruption alchimique de la <em>chramaele</em>, minerai ayant l’apparence de la glaise.</p>\n<p>VUE/Alchimie à -4</p>","descriptionmj":"","encombrement":0.001,"quantite":1,"qualite":0,"cout":0.5,"milieu":"Obtenu à partir de glaise","environnement":[{"milieu":"Cours d'eau","rarete":"Rare","frequence":12},{"milieu":"Forêts","rarete":"Rare","frequence":12},{"milieu":"Marais","rarete":"Rare","frequence":12},{"milieu":"Plaines","rarete":"Rare","frequence":12}],"niveau":0,"base":0,"categorie":"Alchimie","rarete":""},"ownership":{"default":0,"rYShh2P1DNavdoBD":3,"Hp9ImM4o9YRTSdfu":3},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.3","coreVersion":"10.290","createdTime":1668808206114,"modifiedTime":1670025575831,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"folder":null,"sort":0,"_id":"NNTl6CAdRZcylrU1"}
|
{"name":"Fesse de groin","type":"ingredient","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.ALwHAF15KYWUQfQc"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Fesse%20de%20groin.webp","effects":[],"_id":"ALwHAF15KYWUQfQc","system":{"description":"<p>Poussant à même le sol, sans quasiment de pied, c’est un champignon fendu verticalement, évoquant un gros derrière pustuleux. Quand on le bouscule, il émet un bruit incongru, accompagné d’une odeur pénible.</p>\n<p>M3 \\ P 1 minute \\ D1 \\ -3 \\ Bitume de Camphre +16, Élixir des Gnomes +12.</p>\n<p>Commune.</p>","descriptionmj":"","encombrement":0,"quantite":1,"qualite":0,"cout":0,"milieu":"Lieux sombres et humides","environnement":[{"milieu":"Forêts","rarete":"Frequente","frequence":18},{"milieu":"Sous-sols","rarete":"Rare","frequence":6}],"sust":0,"exotisme":0,"niveau":0,"base":0,"categorie":"","rarete":"Commune"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1669734708520,"modifiedTime":1670621588438,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
||||||
{"name":"Gironcle","type":"ingredient","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.NhJm0FRVOi8L3xqv"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Gironcle.webp","effects":[],"_id":"NhJm0FRVOi8L3xqv","system":{"description":"<p>Sorte de girolle à pied violet et corolle brun doré.</p>\n<p>Rare.</p>","descriptionmj":"","encombrement":0.1,"quantite":1,"qualite":0,"cout":0,"milieu":"Lieux sombres et humides","environnement":[{"milieu":"Forêts","rarete":"Rare","frequence":6},{"milieu":"Sous-sols","rarete":"Rarissime","frequence":2}],"niveau":4,"base":0,"categorie":"Cuisine","rarete":"Rare"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.3","coreVersion":"10.290","createdTime":1669734708521,"modifiedTime":1670025575831,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"name":"Perdrix","type":"faune","img":"systems/foundryvtt-reve-de-dragon/icons/faune/oiseau.webp","system":{"description":"<p>Perdrix. Plaine, 500 g, 1 sust.</p>","descriptionmj":"","encombrement":0.2,"quantite":1,"qualite":0,"cout":0,"milieu":"Plaines","environnement":[{"milieu":"Plaines","rarete":"Frequente","frequence":18}],"sust":1,"exotisme":0,"categorie":"","actor":{"id":"","pack":"","name":""}},"effects":[],"flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.AfqIPuLffHuyNpLc"}},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1670580597921,"modifiedTime":1670621588445,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"_id":"AfqIPuLffHuyNpLc","folder":null,"sort":0,"ownership":{"default":0,"jtRmvSuwkwMmIMf0":3}}
|
||||||
{"name":"Amandelle","type":"ingredient","img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Amandelle.webp","effects":[],"flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.w7jEFHGFrcrKAesQ"}},"_id":"QN2KLZLNL1JUh2bF","system":{"description":"<p>Fruit de l’amandelier, un petit arbuste à feuilles très découpées de couleur mauve pâle à violet foncé. L’amandelle est une noix plate et allongée au goût d’amande allié au parfum de violette.</p>\n<p>Fréquente.</p>","descriptionmj":"","encombrement":0.01,"quantite":1,"qualite":0,"cout":0,"milieu":"Tous","environnement":[{"milieu":"Collines","rarete":"Frequente","frequence":18},{"milieu":"Cours d'eau","rarete":"Frequente","frequence":18},{"milieu":"Déserts","rarete":"Frequente","frequence":18},{"milieu":"Forêts","rarete":"Frequente","frequence":18},{"milieu":"Marais","rarete":"Frequente","frequence":18},{"milieu":"Montagnes","rarete":"Frequente","frequence":18},{"milieu":"Plaines","rarete":"Frequente","frequence":18}],"niveau":0,"base":0,"categorie":"Cuisine","rarete":"Frequente"},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.3","coreVersion":"10.290","createdTime":1669734708521,"modifiedTime":1670025575831,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"folder":null,"sort":0,"ownership":{"default":0,"Hp9ImM4o9YRTSdfu":3}}
|
{"name":"Pougne","type":"faune","img":"systems/foundryvtt-reve-de-dragon/icons/faune/oie.webp","system":{"description":"<p>Pougne. Rivage, 2 kg, 5 sust. Grosse poule d’eau à pattes palmées, de couleur blanche. Imaginez un cygne avec un cou et une tête de poulet.</p>","descriptionmj":"","encombrement":1,"quantite":1,"qualite":0,"cout":0,"milieu":"Rivages","environnement":[{"milieu":"Cours d'eau","rarete":"Frequente","frequence":18}],"sust":5,"exotisme":0,"categorie":"","actor":{"id":"","pack":"","name":""}},"effects":[],"flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.BW5QK5kQPJxKdteQ"}},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1670580597921,"modifiedTime":1670621588445,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"_id":"BW5QK5kQPJxKdteQ","folder":null,"sort":0,"ownership":{"default":0,"jtRmvSuwkwMmIMf0":3}}
|
||||||
{"name":"Ortironce","type":"herbe","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.RpUC6z3xhwnmv3sp"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Ortironce.webp","effects":[],"_id":"RpUC6z3xhwnmv3sp","system":{"description":"<p>Ronce venimeuse infestant de nombreux fourrés.</p>\n<p>M4 \\ P 1 minute \\ D2 \\ -3 \\ Bitume de Camphre +12, Teinture d’Érozonne +8.</p>\n<p>Commune.</p>","descriptionmj":"","encombrement":0,"quantite":1,"qualite":0,"cout":0,"milieu":"Forêts","environnement":[{"milieu":"Collines","rarete":"Commune","frequence":54},{"milieu":"Cours d'eau","rarete":"Commune","frequence":54},{"milieu":"Forêts","rarete":"Commune","frequence":54},{"milieu":"Plaines","rarete":"Commune","frequence":54}],"niveau":0,"base":0,"categorie":"","rarete":"Commune"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.3","coreVersion":"10.290","createdTime":1669734708522,"modifiedTime":1670025575831,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"name":"Padongre","type":"faune","img":"systems/foundryvtt-reve-de-dragon/icons/faune/padongre.webp","system":{"description":"<p>Padongre. Forêt clairsemée, 150 kg, 350 sust. Petit éléphant de la taille d’un sanglier(voir Cuisine, p343).</p>","descriptionmj":"","encombrement":75,"quantite":1,"qualite":0,"cout":0,"milieu":"Forêt clairsemée","environnement":[{"milieu":"Forêts","rarete":"Rare","frequence":6}],"sust":350,"exotisme":0,"categorie":"","actor":{"id":"","pack":"","name":""}},"effects":[],"flags":{"core":{"sourceId":"Item.LU5eutNQqwm52oOG"}},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1670580597921,"modifiedTime":1670621588442,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"_id":"Dgy1oyD2ykWF56N5","folder":null,"sort":0,"ownership":{"default":0,"jtRmvSuwkwMmIMf0":3}}
|
||||||
{"name":"Nartha","type":"ingredient","img":"systems/foundryvtt-reve-de-dragon/icons/objets/nartha.webp","effects":[],"flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.equipement.3mHSocNVPyWkmGBR"}},"system":{"description":"<p>Poudre noire obtenue par disruption alchimique du minerai appelé <em>narthalide</em>, sorte de marne.</p>\n<p>VUE/Alchimie à -3</p>","descriptionmj":"","encombrement":0.001,"quantite":1,"qualite":0,"cout":0.4,"milieu":"Obtenu à partir de marne","environnement":[{"milieu":"Cours d'eau","rarete":"Frequente","frequence":30},{"milieu":"Marais","rarete":"Frequente","frequence":30},{"milieu":"Plaines","rarete":"Frequente","frequence":30}],"niveau":0,"base":0,"categorie":"Alchimie","rarete":""},"ownership":{"default":0,"rYShh2P1DNavdoBD":3,"Hp9ImM4o9YRTSdfu":3},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.3","coreVersion":"10.290","createdTime":1668808206015,"modifiedTime":1670025575831,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"folder":null,"sort":0,"_id":"SiFtJoydPawJaMKA"}
|
{"name":"Chevreuil","type":"faune","img":"systems/foundryvtt-reve-de-dragon/icons/faune/chamois.webp","system":{"description":"<p>Chevreuil. Forêt, 25 kg, 60 sust.</p>","descriptionmj":"","encombrement":12,"quantite":1,"qualite":0,"cout":0,"milieu":"Colline, Montagne","environnement":[{"milieu":"Collines","rarete":"Frequente","frequence":18},{"milieu":"Montagnes","rarete":"Frequente","frequence":18}],"sust":60,"exotisme":0,"categorie":"","actor":{"id":"","pack":"","name":""}},"effects":[],"flags":{"core":{"sourceId":"Item.LU5eutNQqwm52oOG"}},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1670580597921,"modifiedTime":1670621588437,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"_id":"DgzFoqASP4ALDEqJ","folder":null,"sort":0,"ownership":{"default":0,"jtRmvSuwkwMmIMf0":3}}
|
||||||
{"name":"Crétamère","type":"ingredient","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.Tfl4cElQxPQEXnPY"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Cr%C3%A9tam%C3%A8re.webp","effects":[],"_id":"Tfl4cElQxPQEXnPY","system":{"description":"<p>Petite fraise des bois en forme de crête dentelée. Son goût est très amer et devrait suffire à dissuader les gourmands.</p>\n<p>M3 \\ P 3 minutes \\ D2 \\ -3 \\ Lait de lune +12, Gelée royale +8.</p>\n<p>Fréquente.</p>","descriptionmj":"","encombrement":0.02,"quantite":1,"qualite":0,"cout":0,"milieu":"Tous","environnement":[{"milieu":"Collines","rarete":"Frequente","frequence":18},{"milieu":"Cours d'eau","rarete":"Frequente","frequence":18},{"milieu":"Déserts","rarete":"Frequente","frequence":18},{"milieu":"Forêts","rarete":"Frequente","frequence":18},{"milieu":"Marais","rarete":"Frequente","frequence":18},{"milieu":"Montagnes","rarete":"Frequente","frequence":18},{"milieu":"Plaines","rarete":"Frequente","frequence":18}],"niveau":null,"base":0,"categorie":"","rarete":"Frequente"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.3","coreVersion":"10.290","createdTime":1669734708522,"modifiedTime":1670025575831,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"name":"Ours","type":"faune","img":"systems/foundryvtt-reve-de-dragon/icons/faune/ours.webp","system":{"description":"<p>Ours. Forêt, montagne, 300 kg, 600 sust.Surtout recherché pour sa peau (voir legrizzal, p405).</p>","descriptionmj":"","encombrement":150,"quantite":1,"qualite":0,"cout":0,"milieu":"Forêt, montagne","environnement":[{"milieu":"Forêts","rarete":"Rare","frequence":6},{"milieu":"Montagnes","rarete":"Rare","frequence":6}],"sust":600,"exotisme":0,"categorie":"","actor":{"id":"OWuf2ryyCtipWnpE","pack":"foundryvtt-reve-de-dragon.animaux","name":"Grizzal"}},"effects":[],"flags":{"core":{"sourceId":"Item.LU5eutNQqwm52oOG"}},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1670580597921,"modifiedTime":1670621588442,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"_id":"E59KBe57YIoAc8qV","folder":null,"sort":0,"ownership":{"default":0,"jtRmvSuwkwMmIMf0":3}}
|
||||||
{"name":"Mignote","type":"ingredient","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.UfzdMXpTcSgIpAEp"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Mignote.webp","effects":[],"_id":"UfzdMXpTcSgIpAEp","system":{"description":"<p>Cône du mignotier, arbre voisin du mélèze, poussant en contreforts montagneux. Les mignotes doivent être grillées puis moulues. La farine obtenue a un goût chocolaté qui accompagne agréablement le lait chaud du petit déjeuner.</p>\n<p>Fréquente.</p>","descriptionmj":"","encombrement":0.05,"quantite":1,"qualite":0,"cout":0,"milieu":"Contreforts montagneux","environnement":[{"milieu":"Forêts","rarete":"Frequente","frequence":18},{"milieu":"Montagnes","rarete":"Frequente","frequence":18}],"niveau":0,"base":0,"categorie":"Cuisine","rarete":"Frequente"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.3","coreVersion":"10.290","createdTime":1669734708522,"modifiedTime":1670025575831,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"name":"Asper violet","type":"ingredient","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.EYy9B0xJ0IGWYEuh"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Asper%20violet.webp","effects":[],"_id":"EYy9B0xJ0IGWYEuh","system":{"description":"<p>Champignon violet à pied filiforme et chapeau pointu très éfilé.</p>\n<p>Fréquent.</p>","descriptionmj":"","encombrement":0.1,"quantite":1,"qualite":0,"cout":0,"milieu":"Lieux sombres et humides","environnement":[{"milieu":"Forêts","rarete":"Frequente","frequence":18},{"milieu":"Sous-sols","rarete":"Rare","frequence":6}],"sust":0,"exotisme":0,"niveau":2,"base":0,"categorie":"Cuisine","rarete":"Frequente"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1669734708520,"modifiedTime":1670621588436,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
||||||
{"name":"Endebrume","type":"herbe","flags":{"core":{"sheetClass":"foundryvtt-reve-de-dragon.RdDItemSheet","sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.VGId76yXwx2k0Cli"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Endebrume.webp","effects":[],"_id":"VGId76yXwx2k0Cli","system":{"description":"<p><em>Herbe de repos.</em></p>\n<p>Petite plante ramifiée aux tiges fines comme des cheveux, poussant dans les lieux frais et humides : marais ombragés, certaines forêts, et parfois vallées de montagne. Un peu moins rare est la fausse endebrume, qui lui ressemble physiquement, mais n'a aucune vertu. <br /><em>VUE/Botanique à -1 pour savoir à quelle espèce on a affaire (jet obligatoire à chaque cueillette).</em></p>\n<p>Rare</p>","descriptionmj":"","encombrement":0,"quantite":1,"qualite":0,"cout":0.2,"milieu":"Lieux frais et humides","environnement":[{"milieu":"Cours d'eau","rarete":"Frequente","frequence":18},{"milieu":"Forêts","rarete":"Rare","frequence":9},{"milieu":"Marais","rarete":"Rare","frequence":6},{"milieu":"Sous-sols","rarete":"Rare","frequence":4}],"niveau":4,"base":0,"categorie":"Repos","rarete":"Rare"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.3","coreVersion":"10.290","createdTime":1669734708522,"modifiedTime":1670025575831,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"name":"Noisot","type":"faune","img":"systems/foundryvtt-reve-de-dragon/icons/faune/oiseau.webp","system":{"description":"<p>Noisot. Plaine, forêt, rivage, 3 kg, 7 sust.<br>Le noisot est un assez gros volatile, voiside la poule d’eau, au plumage gris et noir,<br>ne voletant que par bonds. Les noisots vivent toujours en couple et supportent très<br>mal la solitude. Quand cela arrive, celui qui se retrouve seul se met à crier et à sautiller sans raison apparente, abandonnant tout instinct de survie. On dit alors qu’il cherche noise. Son vacarme attire généralement un prédateur, à commencer par un chasseur, et la solitude du pauvre animal est bien vite achevée. En couple, par contre, il reste silencieux et discret. C’est la raison pour laquelle on peut dire : « j’entends un noisot », mais rarement : « j’entends deux noisots ».</p>","descriptionmj":"","encombrement":1.5,"quantite":1,"qualite":0,"cout":0,"milieu":"Forêt, Plaine, Rivage","environnement":[{"milieu":"Cours d'eau","rarete":"Frequente","frequence":18},{"milieu":"Forêts","rarete":"Frequente","frequence":18},{"milieu":"Plaines","rarete":"Frequente","frequence":18}],"sust":7,"exotisme":0,"categorie":"","actor":{"id":"","pack":"","name":""}},"effects":[],"flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.FQ8vGdPYYcBggw5g"}},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1670580597921,"modifiedTime":1670621588445,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"_id":"FQ8vGdPYYcBggw5g","folder":null,"sort":0,"ownership":{"default":0,"jtRmvSuwkwMmIMf0":3}}
|
||||||
{"name":"Mélikasse","type":"ingredient","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.WbNKazgQZ4CeHtRo"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/M%C3%A9likasse.webp","effects":[],"_id":"WbNKazgQZ4CeHtRo","system":{"description":"<p>Fruit du mélikassier, arbuste buissonneux voisin du sureau. La mélikasse pousse en grappes de petites baies noires. Insolite, son goût est un mélange de cassis et de savon.</p>\n<p>Fréquente.</p>","descriptionmj":"","encombrement":0.02,"quantite":1,"qualite":0,"cout":0,"milieu":"Tous","environnement":[{"milieu":"Collines","rarete":"Frequente","frequence":18},{"milieu":"Cours d'eau","rarete":"Frequente","frequence":18},{"milieu":"Déserts","rarete":"Frequente","frequence":18},{"milieu":"Forêts","rarete":"Frequente","frequence":18},{"milieu":"Marais","rarete":"Frequente","frequence":18},{"milieu":"Montagnes","rarete":"Frequente","frequence":18},{"milieu":"Plaines","rarete":"Frequente","frequence":18}],"niveau":0,"base":0,"categorie":"Cuisine","rarete":"Frequente"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.3","coreVersion":"10.290","createdTime":1669734708522,"modifiedTime":1670025575831,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"name":"Candique","type":"ingredient","img":"systems/foundryvtt-reve-de-dragon/icons/objets/candique.webp","effects":[],"flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.equipement.bxDITKRhXiyvLhMz"}},"system":{"description":"<p>Poudre blanche apparaissant sous l’écorce de nombreux arbres,</p>\n<p>VUE/Alchimie à 0.</p>","descriptionmj":"","encombrement":0.001,"quantite":1,"qualite":0,"cout":0.02,"milieu":"Forêts","environnement":[{"milieu":"Forêts","rarete":"","frequence":54}],"sust":0,"exotisme":0,"niveau":0,"base":0,"categorie":"Alchimie","rarete":""},"ownership":{"default":0,"rYShh2P1DNavdoBD":3,"Hp9ImM4o9YRTSdfu":3},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1668808206109,"modifiedTime":1670621588437,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"folder":null,"sort":0,"_id":"FjfZ789LlkzUUSMU"}
|
||||||
{"name":"Aigronce","type":"herbe","flags":{"core":{"sheetClass":"foundryvtt-reve-de-dragon.RdDItemSheet","sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.XVfDwjgzbRvotbP8"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Aigronce.webp","effects":[],"_id":"XVfDwjgzbRvotbP8","system":{"description":"<p><em>Herbe de repos.</em></p>\n<p>Variété de klampine à l'odeur aigre et piquante. Pousse en lieux boisés des climats tempérés, parfois en lisière.</p>\n<p>Fréquente.</p>","descriptionmj":"","encombrement":0,"quantite":1,"qualite":0,"cout":0.04,"milieu":"Forêts tempérées","environnement":[{"milieu":"Forêts","rarete":"Frequente","frequence":18}],"niveau":2,"base":0,"categorie":"Repos","rarete":"Frequente"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.3","coreVersion":"10.290","createdTime":1669734708522,"modifiedTime":1670025575831,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"name":"Ortilise","type":"herbe","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.GrzjjbOUWlOUgzEQ"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Ortilise.webp","effects":[],"_id":"GrzjjbOUWlOUgzEQ","system":{"description":"<p>Redoutable variété d’ortie, poussant dans les lieux humides, le voisinage des marais.</p>\n<p>M3 \\ P 1 minute \\ D2 \\ -3 \\ Topazoïne +12, Lait de lune +8.</p>\n<p>Fréquente.</p>","descriptionmj":"","encombrement":0,"quantite":1,"qualite":0,"cout":0,"milieu":"Lieux humides","environnement":[{"milieu":"Cours d'eau","rarete":"Frequente","frequence":18},{"milieu":"Marais","rarete":"Frequente","frequence":18}],"niveau":0,"base":0,"categorie":"","rarete":"Frequente"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1669734708520,"modifiedTime":1670621588441,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
||||||
{"name":"Endorlotte","type":"herbe","flags":{"core":{"sheetClass":"foundryvtt-reve-de-dragon.RdDItemSheet","sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.XWpfl6UmaMel1tJn"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Endorlotte.webp","effects":[],"_id":"XWpfl6UmaMel1tJn","system":{"description":"<p>Plante voisine du gui, poussant en parasite dans les branches des arbres de toutes forêts, l’endorlotte est une herbe de soin fonctionnant comme les dix grandes herbes connues, avec un bonus de guérison de +5. Son pouvoir ne s’applique toutefois qu’à la récupération des points de vie, pas à la cicatrisation des blessures. <br /><br />Elle doit être préparée en décoction selon la règle standard, à raison de 12 - 5 = 7 brins pour une décoction, et bue par le convalescent. Puis lors du test de récupération des points de vie\": <br />Part. 4 points de vie regagnés <br />Sign. 3 points de vie regagnés <br />Norm. 2 points de vie regagnés <br />Tout échec. Aucun point, sans autre conséquence. <br /><br />Enchantée, la décoction d’endorlotte fonctionne selon la règle standard avec son bonus de +5, et pratiquement devient équivalente à l’ortigal noir. <br />Rare.</p>","descriptionmj":"","encombrement":0,"quantite":1,"qualite":0,"cout":0.25,"milieu":"Forêts","environnement":[{"milieu":"Forêts","rarete":"Rare","frequence":6}],"niveau":5,"base":0,"categorie":"Soin","rarete":"Rare"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.3","coreVersion":"10.290","createdTime":1669734708522,"modifiedTime":1670025575831,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"name":"Tshaï","type":"herbe","flags":{"core":{"sheetClass":"foundryvtt-reve-de-dragon.RdDItemSheet","sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.H0eZczDzhj1fUUxZ"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Tsha%C3%AF.webp","effects":[],"_id":"H0eZczDzhj1fUUxZ","system":{"description":"<p>Petit arbuste à fleurs blanches et feuilles persistantes, poussant au versant des collines ensoleillées. Une fois séchées, ses feuilles sont consommées en infusion, donnant une boisson parfumée et tonique. Par extension, tshaï est aussi le nom donné à la boisson en question.</p>\n<p>Fréquent.</p>","descriptionmj":"","encombrement":0,"quantite":1,"qualite":0,"cout":null,"milieu":"Collines","environnement":[{"milieu":"Collines","rarete":"Frequente","frequence":18}],"niveau":null,"base":0,"categorie":"Cuisine","rarete":"Frequente"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1669734708520,"modifiedTime":1670621588445,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
||||||
{"name":"Ortigal noir","type":"herbe","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.Z20wqDHmbgFQSyXo"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Ortigal%20noir.webp","effects":[],"_id":"Z20wqDHmbgFQSyXo","system":{"description":"<p><em>Herbe de soin.</em></p>\n<p>Variété d’ortigal aux feuilles d’un vert sombre presque noir.</p>\n<p>Fréquent.</p>\n<p> </p>\n<p><em>Voir Les herbes de soin, p100.</em></p>","descriptionmj":"","encombrement":0,"quantite":1,"qualite":0,"cout":0.2,"milieu":"Marais","environnement":[{"milieu":"Marais","rarete":"Frequente","frequence":18}],"niveau":5,"base":0,"categorie":"Soin","rarete":"Frequente"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.3","coreVersion":"10.290","createdTime":1669734708522,"modifiedTime":1670025575831,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"name":"Obyssum vert","type":"ingredient","img":"systems/foundryvtt-reve-de-dragon/icons/objets/l_obyssum_vert.webp","effects":[],"flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.equipement.D5Z3FaUv91B8eCOP"}},"system":{"description":"<p>Poudre verdâtre apparaissant sur les tiges de certains roseaux.</p>\n<p>VUE/Alchimie à -2</p>","descriptionmj":"","encombrement":0.001,"quantite":1,"qualite":0,"cout":0.05,"milieu":"Lieux humides","environnement":[{"milieu":"Cours d'eau","rarete":"Commune","frequence":54},{"milieu":"Marais","rarete":"Commune","frequence":54}],"sust":0,"exotisme":0,"niveau":0,"base":0,"categorie":"Alchimie","rarete":""},"ownership":{"default":0,"rYShh2P1DNavdoBD":3,"Hp9ImM4o9YRTSdfu":3},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1668808206019,"modifiedTime":1670621588441,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"folder":null,"sort":0,"_id":"HTtgzxpvUvMHilqx"}
|
||||||
{"name":"Satum","type":"herbe","flags":{"core":{"sheetClass":"foundryvtt-reve-de-dragon.RdDItemSheet","sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.bBiHuMCom4B4nXBD"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Satum.webp","effects":[],"_id":"bBiHuMCom4B4nXBD","system":{"description":"<p>Également appelé nez de satin, le satum est une petite plante à feuille unique, douce et moirée comme le satin, poussant en toutes forêts, usuellement à l’orée des clairières. C’est une des herbes de base utilisées en alchimie.</p>\n<p>Commun.</p>\n<p> </p>\n<p><em>Voir Principes d’alchimie, p357.</em></p>","descriptionmj":"","encombrement":0,"quantite":1,"qualite":0,"cout":0.03,"milieu":"Forêts","environnement":[{"milieu":"Forêts","rarete":"Commune","frequence":54}],"niveau":null,"base":0,"categorie":"Alchimie","rarete":"Commune"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.3","coreVersion":"10.290","createdTime":1669734708523,"modifiedTime":1670025575831,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"name":"Calamine","type":"ingredient","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.HlUFBr3yInurp96Z"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Calamine.webp","effects":[],"_id":"HlUFBr3yInurp96Z","system":{"description":"<p>Fruit du calaminier, sorte de figuier rampant doté de lianes et de vrilles. La calamine pousse en petites grappes de fruits à goût mi-figue, mi-raisin.</p>\n<p>Fréquente.</p>","descriptionmj":"","encombrement":0.01,"quantite":1,"qualite":0,"cout":0,"milieu":"Tous","environnement":[{"milieu":"Collines","rarete":"Frequente","frequence":18},{"milieu":"Cours d'eau","rarete":"Frequente","frequence":18},{"milieu":"Déserts","rarete":"Frequente","frequence":18},{"milieu":"Forêts","rarete":"Frequente","frequence":18},{"milieu":"Marais","rarete":"Frequente","frequence":18},{"milieu":"Montagnes","rarete":"Frequente","frequence":18},{"milieu":"Plaines","rarete":"Frequente","frequence":18}],"sust":0,"exotisme":0,"niveau":0,"base":0,"categorie":"Cuisine","rarete":"Frequente"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1669734708520,"modifiedTime":1670621588437,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
||||||
{"name":"Chronophile","type":"herbe","flags":{"core":{"sheetClass":"foundryvtt-reve-de-dragon.RdDItemSheet","sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.c6Gdd4A0QCTEnp6o"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Chronophile.webp","effects":[],"_id":"c6Gdd4A0QCTEnp6o","system":{"description":"","descriptionmj":"","encombrement":0,"quantite":1,"qualite":0,"cout":0.2,"milieu":"Forêts","environnement":[{"milieu":"Forêts","rarete":"Rare","frequence":6}],"niveau":null,"base":0,"categorie":"Alchimie","rarete":"Rare"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.3","coreVersion":"10.290","createdTime":1669734708523,"modifiedTime":1670025575832,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"name":"Poule d'Eau","type":"faune","img":"systems/foundryvtt-reve-de-dragon/icons/faune/oiseau.webp","system":{"description":"<p>Poule d’eau. Rivage, 300 g, 1 sust.</p>","descriptionmj":"","encombrement":0.15,"quantite":1,"qualite":0,"cout":0,"milieu":"Rivages","environnement":[{"milieu":"Cours d'eau","rarete":"Commune","frequence":54}],"sust":1,"exotisme":0,"categorie":"","actor":{"id":"","pack":"","name":""}},"effects":[],"flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.IZ40yicDhxycPtXU"}},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1670580597921,"modifiedTime":1670621588445,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"_id":"IZ40yicDhxycPtXU","folder":null,"sort":0,"ownership":{"default":0,"jtRmvSuwkwMmIMf0":3}}
|
||||||
{"name":"Névropenthe","type":"herbe","flags":{"core":{"sheetClass":"foundryvtt-reve-de-dragon.RdDItemSheet","sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.chm4mCNhQXwJEtNy"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/N%C3%A9vropenthe.webp","effects":[],"_id":"chm4mCNhQXwJEtNy","system":{"description":"<p>Plante foisonnante à grappes de feuilles rondes, dont le vert est souvent piqueté de points rouges. Pousse au coeur de toutes forêts à l’abri des fourrés et des ronciers. C’est une des herbes de base utilisées en alchimie.</p>\n<p>Rare.</p>\n<p> </p>\n<p><em style=\"box-sizing: border-box; user-select: text; color: #191813; font-family: GoudyAcc, sans-serif; text-align: justify;\">Voir Principes d’alchimie, p357.</em></p>","descriptionmj":"","encombrement":0,"quantite":1,"qualite":0,"cout":0.06,"milieu":"Forêts","environnement":[{"milieu":"Forêts","rarete":"Rare","frequence":6}],"niveau":null,"base":0,"categorie":"Alchimie","rarete":"Rare"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.3","coreVersion":"10.290","createdTime":1669734708523,"modifiedTime":1670025575832,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"name":"Cancredoux","type":"faune","img":"systems/foundryvtt-reve-de-dragon/icons/faune/crabe.webp","system":{"description":"<p> Désigne toute variété de crabe que l’on peut trouver en eau douce.</p>","descriptionmj":"","encombrement":0.2,"quantite":1,"qualite":0,"cout":0,"milieu":"Crabe d'eau douce","environnement":[{"milieu":"Cours d'eau","rarete":"Frequente","frequence":18}],"sust":1,"exotisme":0,"categorie":"","actor":{"id":"","pack":"","name":""}},"effects":[],"flags":{},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1670616441674,"modifiedTime":1670621588397,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"folder":null,"sort":0,"ownership":{"default":0,"Hp9ImM4o9YRTSdfu":3},"_id":"JvD4mvZI9an4M23j"}
|
||||||
{"name":"Ortigal","type":"herbe","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.ckBk9H7jhFQC2IRX"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Ortigal.webp","effects":[],"_id":"ckBk9H7jhFQC2IRX","system":{"description":"<p><em>Herbe de soin.</em></p>\n<p>Plante aquatique des marais, aux petites feuilles rondes et luisantes, voisine du nénuphar.</p>\n<p>Fréquent.</p>\n<p> </p>\n<p><em>Voir Les herbes de soin, p100.</em></p>","descriptionmj":"","encombrement":0,"quantite":1,"qualite":0,"cout":0.1,"milieu":"Marais","environnement":[{"milieu":"Marais","rarete":"Frequente","frequence":18}],"niveau":4,"base":0,"categorie":"Soin","rarete":"Frequente"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.3","coreVersion":"10.290","createdTime":1669734708524,"modifiedTime":1670025575832,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"name":"Primelune","type":"ingredient","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.Kg13pgjU0u421Kcm"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Primelune.webp","effects":[],"_id":"Kg13pgjU0u421Kcm","system":{"description":"<p>Apparaissant le plus souvent à la nouvelle lune, c’est un petit champignon à pied blanc et chapeau plat vert tendre.</p>\n<p>Commune.</p>","descriptionmj":"","encombrement":0.1,"quantite":1,"qualite":0,"cout":0,"milieu":"Lieux sombres et humides","environnement":[{"milieu":"Forêts","rarete":"Commune","frequence":54},{"milieu":"Sous-sols","rarete":"Frequente","frequence":18}],"sust":0,"exotisme":0,"niveau":1,"base":0,"categorie":"Cuisine","rarete":"Commune"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1669734708521,"modifiedTime":1670621588442,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
||||||
{"name":"Croupigne","type":"ingredient","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.dr2xZkUKaWa3Gjvr"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Croupigne.webp","effects":[],"_id":"dr2xZkUKaWa3Gjvr","system":{"description":"<p>Sorte de groseille rose pâle, poussant à l’orée des sous-bois et des clairières.</p>\n<p>M2 \\ P 5 minutes \\ D1 \\ -3 \\ Élixir des Gnomes +16, Gelée royale +10.</p>\n<p>Fréquente.</p>","descriptionmj":"","encombrement":0.02,"quantite":1,"qualite":0,"cout":0,"milieu":"Forêts","environnement":[{"milieu":"Forêts","rarete":"Frequente","frequence":18}],"niveau":null,"base":0,"categorie":"","rarete":"Frequente"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.3","coreVersion":"10.290","createdTime":1669734708524,"modifiedTime":1670025575832,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"name":"Oie Sauvage","type":"faune","img":"systems/foundryvtt-reve-de-dragon/icons/faune/oie.webp","system":{"description":"<p>Oie sauvage. Rivage, 5 kg, 14 sust</p>","descriptionmj":"","encombrement":2.5,"quantite":1,"qualite":0,"cout":0,"milieu":"Rivage","environnement":[{"milieu":"Cours d'eau","rarete":"Frequente","frequence":18}],"sust":14,"exotisme":0,"categorie":"","actor":{"id":"","pack":"","name":""}},"effects":[],"flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.LBHzejJLFt4ymqay"}},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1670580597921,"modifiedTime":1670621588445,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"_id":"LBHzejJLFt4ymqay","folder":null,"sort":0,"ownership":{"default":0,"jtRmvSuwkwMmIMf0":3}}
|
||||||
{"name":"Noisemûre","type":"ingredient","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.eB5Nhus3Ao4H8ePT"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Noisem%C3%BBre.webp","effects":[],"_id":"eB5Nhus3Ao4H8ePT","system":{"description":"<p>Fruit du noisemûrier, petit arbuste très ramifié vivant en sous-bois à l’ombre des plus grands arbres. La noisemûre a extérieurement l’apparence d’une grosse noisette à la coquille rougeâtre et granulée. Intérieurement, sa chair est tendre, juteuse et sucrée.</p>\n<p>Fréquente.</p>","descriptionmj":"","encombrement":0.02,"quantite":1,"qualite":0,"cout":0,"milieu":"Forêts","environnement":[{"milieu":"Forêts","rarete":"Frequente","frequence":18}],"niveau":0,"base":0,"categorie":"Cuisine","rarete":"Frequente"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.3","coreVersion":"10.290","createdTime":1669734708525,"modifiedTime":1670025575832,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"name":"Fumebol","type":"ingredient","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.LJdoBQBE3KNDLXKq"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Fumebol.webp","effects":[],"_id":"LJdoBQBE3KNDLXKq","system":{"description":"<p>Champignon brun ressemblant grossièrement au cèpe bolet.</p>\n<p>M5 \\ P 8 rounds \\ D2 \\ -5 \\ Sable-Poudre +12, Huile de Sélikanthe +8.</p>\n<p>Rare.</p>","descriptionmj":"","encombrement":0,"quantite":1,"qualite":0,"cout":0,"milieu":"Lieux sombres et humides","environnement":[{"milieu":"Forêts","rarete":"Rare","frequence":6},{"milieu":"Sous-sols","rarete":"Rare","frequence":6}],"sust":0,"exotisme":0,"niveau":0,"base":0,"categorie":"","rarete":"Rare"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1669734708521,"modifiedTime":1670621588439,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
||||||
{"name":"Fricotille","type":"ingredient","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.eKrtkHj3EbYCZu8Y"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Fricotille.webp","effects":[],"_id":"eKrtkHj3EbYCZu8Y","system":{"description":"<p>Bolet à pied mince et blanc, et large chapeau pointu blanc à pois bleus.</p>\n<p>Fréquente.</p>","descriptionmj":"","encombrement":0.1,"quantite":1,"qualite":0,"cout":0,"milieu":"Lieux sombres et humides","environnement":[{"milieu":"Forêts","rarete":"Frequente","frequence":18},{"milieu":"Sous-sols","rarete":"Frequente","frequence":18}],"niveau":3,"base":0,"categorie":"Cuisine","rarete":"Frequente"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.3","coreVersion":"10.290","createdTime":1669734708525,"modifiedTime":1670025575832,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"name":"Clognotte","type":"faune","img":"systems/foundryvtt-reve-de-dragon/icons/faune/rongeur.webp","system":{"description":"<p>Clognotte. Forêt, 2 kg, 4 sust. La clognot-<br>te, surtout recherchée pour sa peau, est un<br>gros écureuil blanc ou gris, rayé de fauve.</p>","descriptionmj":"","encombrement":1,"quantite":1,"qualite":0,"cout":0,"milieu":"Forêt","environnement":[{"milieu":"Forêts","rarete":"Frequente","frequence":18}],"sust":4,"exotisme":0,"categorie":"","actor":{"id":"","pack":"","name":""}},"effects":[],"flags":{"core":{"sourceId":"Item.LU5eutNQqwm52oOG"}},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1670580597921,"modifiedTime":1670621588438,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"_id":"LOVGrwgIhE2JTxOk","folder":null,"sort":0,"ownership":{"default":0,"jtRmvSuwkwMmIMf0":3}}
|
||||||
{"name":"Solimonce","type":"herbe","flags":{"core":{"sheetClass":"foundryvtt-reve-de-dragon.RdDItemSheet","sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.eqdFj8nT7JkibPvi"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Solimonce.webp","effects":[],"_id":"eqdFj8nT7JkibPvi","system":{"description":"<p>Variété d’ortie non urticante, poussant dans les lieux humides à l’abri de la lumière. Ses décoctions sont réputées souveraines contre les maladies des yeux.</p>\n<p>Rare.</p>\n<p> </p>\n<p><em>Voir Fièvre brune, p350.</em></p>","descriptionmj":"","encombrement":0,"quantite":1,"qualite":0,"cout":null,"milieu":"Lieux humides","environnement":[{"milieu":"Cours d'eau","rarete":"Rare","frequence":4},{"milieu":"Forêts","rarete":"Rare","frequence":8},{"milieu":"Marais","rarete":"Rare","frequence":4},{"milieu":"Sous-sols","rarete":"Rare","frequence":8}],"niveau":null,"base":0,"categorie":"Soin","rarete":"Rare"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.3","coreVersion":"10.290","createdTime":1669734708525,"modifiedTime":1670025575832,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"name":"Andurak","type":"faune","img":"systems/foundryvtt-reve-de-dragon/icons/faune/andurak.webp","system":{"description":"<p>L’andurak est une petite antilope des plai-nes tempérées au pelage gris cendré, vivanten larges troupeaux.</p>","descriptionmj":"","encombrement":15,"quantite":1,"qualite":0,"cout":0,"milieu":"Plaine, Savane","environnement":[{"milieu":"Plaines","rarete":"Frequente","frequence":15}],"sust":70,"exotisme":0,"categorie":"","actor":{"id":"i7pvn7kgTwIdKYtP","pack":"foundryvtt-reve-de-dragon.animaux","name":"Mule"}},"effects":[],"flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.LU5eutNQqwm52oOG"}},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1670580597921,"modifiedTime":1670621588436,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"_id":"LU5eutNQqwm52oOG","folder":null,"sort":0,"ownership":{"default":0,"jtRmvSuwkwMmIMf0":3}}
|
||||||
{"name":"Obbadion","type":"ingredient","img":"systems/foundryvtt-reve-de-dragon/icons/objets/l_obbadion.webp","effects":[],"flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.equipement.69vN8bRlnCrRHQCm"}},"system":{"description":"<p>Poudre bleuâtre obtenue par disruption alchimique du minerai appelé <em>obbadine</em>, sorte de tourbe.</p>\n<p>VUE/Alchimie à -2</p>","descriptionmj":"","encombrement":0.001,"quantite":1,"qualite":0,"cout":0.2,"milieu":"Lieux humides, obtenu à partir d'Obbadine (tourbe)","environnement":[{"milieu":"Cours d'eau","rarete":"Frequente","frequence":18},{"milieu":"Plaines","rarete":"Frequente","frequence":18},{"milieu":"Sous-sols","rarete":"Frequente","frequence":18}],"niveau":0,"base":0,"categorie":"Alchimie","rarete":""},"ownership":{"default":0,"rYShh2P1DNavdoBD":3,"Hp9ImM4o9YRTSdfu":3},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.3","coreVersion":"10.290","createdTime":1668808206016,"modifiedTime":1670025575832,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"folder":null,"sort":0,"_id":"f4TPpX03pJuyBkuX"}
|
{"name":"Chramaelium","type":"ingredient","img":"systems/foundryvtt-reve-de-dragon/icons/objets/chramaelium.webp","effects":[],"flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.equipement.ncpONCxPPNZ9YbBr"}},"system":{"description":"<p>Poudre rouge obtenue par disruption alchimique de la <em>chramaele</em>, minerai ayant l’apparence de la glaise.</p>\n<p>VUE/Alchimie à -4</p>","descriptionmj":"","encombrement":0.001,"quantite":1,"qualite":0,"cout":0.5,"milieu":"Obtenu à partir de glaise","environnement":[{"milieu":"Cours d'eau","rarete":"Rare","frequence":12},{"milieu":"Forêts","rarete":"Rare","frequence":12},{"milieu":"Marais","rarete":"Rare","frequence":12},{"milieu":"Plaines","rarete":"Rare","frequence":12}],"sust":0,"exotisme":0,"niveau":0,"base":0,"categorie":"Alchimie","rarete":""},"ownership":{"default":0,"rYShh2P1DNavdoBD":3,"Hp9ImM4o9YRTSdfu":3},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1668808206114,"modifiedTime":1670621588437,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"folder":null,"sort":0,"_id":"NNTl6CAdRZcylrU1"}
|
||||||
{"name":"Trésure","type":"ingredient","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.jOCPgZmP3aZtMGdi"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Tr%C3%A9sure.webp","effects":[],"_id":"jOCPgZmP3aZtMGdi","system":{"description":"<p>Fruit du trésurier, buisson épineux de la famille des ronces poussant principalement en montagne. La trésure est une grosse framboise de la taille d’une mandarine, rouge foncé avec un jus noir. Non seulement délicieuse, la trésure est nourrissante et énergétique. Chaque fruit vaut 3 points de sustentation et défatigue instantanément comme après une heure de sommeil. En termes de jeu, effacer un segment comme si l’on venait de dormir une heure. Enfin, faire suivre un repas de trésures (qu’il soit composé d’un ou plusieurs fruits) d’un jet de moral en situation heureuse. Une fois cueillies, les trésures ne se conservent pas plus de 12 heures, et même leur jus n’a plus aucune valeur. Véritables plantes miraculeuses, les trésuriers portent des fruits d’un bout de l’année à l’autre, même en hiver sous la neige.</p>\n<p>Rare.</p>","descriptionmj":"","encombrement":0.05,"quantite":1,"qualite":0,"cout":0,"milieu":"Montagnes","environnement":[{"milieu":"Montagnes","rarete":"Rare","frequence":6}],"niveau":0,"base":0,"categorie":"Cuisine","rarete":"Rare"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.3","coreVersion":"10.290","createdTime":1669734708526,"modifiedTime":1670025575832,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"name":"Gironcle","type":"ingredient","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.NhJm0FRVOi8L3xqv"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Gironcle.webp","effects":[],"_id":"NhJm0FRVOi8L3xqv","system":{"description":"<p>Sorte de girolle à pied violet et corolle brun doré.</p>\n<p>Rare.</p>","descriptionmj":"","encombrement":0.1,"quantite":1,"qualite":0,"cout":0,"milieu":"Lieux sombres et humides","environnement":[{"milieu":"Forêts","rarete":"Rare","frequence":6},{"milieu":"Sous-sols","rarete":"Rarissime","frequence":2}],"sust":0,"exotisme":0,"niveau":4,"base":0,"categorie":"Cuisine","rarete":"Rare"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1669734708521,"modifiedTime":1670621588439,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
||||||
{"name":"Genèfle","type":"ingredient","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.jbkZ9j04AAIAVBuG"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Gen%C3%A8fle.webp","effects":[],"_id":"jbkZ9j04AAIAVBuG","system":{"description":"<p>Fruit du genèflier, arbuste buissonneux vivant en plaine. La genèfle est très semblable à la clopinette, mais avec une peau plus nacrée.</p>\n<p>M1 \\ P 10 minutes \\ D1 \\ -3 \\ Teinture d’Érozonne +16, Topazoïne +12.</p>\n<p>Commune.</p>","descriptionmj":"","encombrement":0.02,"quantite":1,"qualite":0,"cout":0,"milieu":"Plaines","environnement":[{"milieu":"Plaines","rarete":"Commune","frequence":54}],"niveau":null,"base":0,"categorie":"","rarete":"Commune"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.3","coreVersion":"10.290","createdTime":1669734708526,"modifiedTime":1670025575832,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"name":"Outarde","type":"faune","img":"systems/foundryvtt-reve-de-dragon/icons/faune/oie.webp","system":{"description":"<p>Outarde. Plaine, 8 kg, 20 sust.</p>","descriptionmj":"","encombrement":4,"quantite":1,"qualite":0,"cout":0,"milieu":"Plaine","environnement":[{"milieu":"Plaines","rarete":"Frequente","frequence":18}],"sust":20,"exotisme":0,"categorie":"","actor":{"id":"","pack":"","name":""}},"effects":[],"flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.NusdRSh3S7kDOmjY"}},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1670580597921,"modifiedTime":1670621588445,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"_id":"NusdRSh3S7kDOmjY","folder":null,"sort":0,"ownership":{"default":0,"jtRmvSuwkwMmIMf0":3}}
|
||||||
{"name":"Murus","type":"herbe","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.jjVl1PTFgTGdIfZf"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Murus.webp","effects":[],"_id":"jjVl1PTFgTGdIfZf","system":{"description":"<p><em>Herbe de soin.</em></p>\n<p>Sorte de minuscule chardon aux feuilles vert violacé, s’accrochant aux rochers escarpés. Son principe actif est contenu dans ses piquants.</p>\n<p>Rare.</p>\n<p> </p>\n<p><em>Voir Les herbes de soin, p100.</em></p>","descriptionmj":"","encombrement":0,"quantite":1,"qualite":0,"cout":0.6,"milieu":"Rochers escarpés","environnement":[{"milieu":"Montagnes","rarete":"Rare","frequence":6}],"niveau":8,"base":0,"categorie":"Soin","rarete":"Rare"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.3","coreVersion":"10.290","createdTime":1669734708526,"modifiedTime":1670025575832,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"name":"Falanquelle","type":"faune","img":"systems/foundryvtt-reve-de-dragon/icons/faune/oiseau.webp","system":{"description":"<p>Falanquelle. Forêt, 0,5 kg, 1 sust. Gros passereau au plumage de couleur unifor<br>me. Noire, elle est semblable au merle ; mais on la trouve également vert amande, rose tyrien ou jaune paille.</p>","descriptionmj":"","encombrement":0.2,"quantite":1,"qualite":0,"cout":0,"milieu":"Forêt","environnement":[{"milieu":"Forêts","rarete":"Frequente","frequence":18}],"sust":1,"exotisme":0,"categorie":"","actor":{"id":"","pack":"","name":""}},"effects":[],"flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.OWeGXfWZdmPn2gVL"}},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1670580597921,"modifiedTime":1670621588445,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"_id":"OWeGXfWZdmPn2gVL","folder":null,"sort":0,"ownership":{"default":0,"jtRmvSuwkwMmIMf0":3}}
|
||||||
{"name":"Tanemiel","type":"herbe","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.jqUrbSHwFr5kPW3q"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Tanemiel.webp","effects":[],"_id":"jqUrbSHwFr5kPW3q","system":{"description":"<p><em>Herbe de soin.</em></p>\n<p>Plante grimpante, dotée de vrilles, voisine du liseron, de couleur vert laiteux presque blanc, s’accrochant aux arbres des forêts chaudes et humides.</p>\n<p>Rare.</p>\n<p> </p>\n<p><em>Voir Les herbes de soin, p100.</em></p>","descriptionmj":"","encombrement":0,"quantite":1,"qualite":0,"cout":0.9,"milieu":"Forêts chaudes et humides","environnement":[{"milieu":"Forêts","rarete":"Rare","frequence":6}],"niveau":9,"base":0,"categorie":"Soin","rarete":"Rare"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.3","coreVersion":"10.290","createdTime":1669734708526,"modifiedTime":1670025575832,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"name":"Chamois","type":"faune","img":"systems/foundryvtt-reve-de-dragon/icons/faune/chamois.webp","system":{"description":"<p>Chamois. Montagne, 35 kg, 80 sust.</p>","descriptionmj":"","encombrement":17,"quantite":1,"qualite":0,"cout":0,"milieu":"Montagne","environnement":[{"milieu":"Montagnes","rarete":"Rare","frequence":6}],"sust":80,"exotisme":0,"categorie":"","actor":{"id":"","pack":"","name":""}},"effects":[],"flags":{"core":{"sourceId":"Item.LU5eutNQqwm52oOG"}},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1670580597921,"modifiedTime":1670621588437,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"_id":"QItDJlTl5xf3AmOR","folder":null,"sort":0,"ownership":{"default":0,"jtRmvSuwkwMmIMf0":3}}
|
||||||
{"name":"Mercurion","type":"herbe","flags":{"core":{"sheetClass":"foundryvtt-reve-de-dragon.RdDItemSheet","sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.k1l253yvSebgc7Xq"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Mercurion.webp","effects":[],"_id":"k1l253yvSebgc7Xq","system":{"description":"<p>Lierre noirâtre s’accrochant aux arbres des forêts, principalement les chênes. C’est une des herbes de base utilisées en alchimie.</p>\n<p>Commun. <br /><br /><em>Voir Principes d’alchimie, p357.</em></p>","descriptionmj":"","encombrement":0,"quantite":1,"qualite":0,"cout":0.02,"milieu":"Forêts de chênes","environnement":[{"milieu":"Forêts","rarete":"Commune","frequence":54}],"niveau":null,"base":0,"categorie":"Alchimie","rarete":"Commune"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.3","coreVersion":"10.290","createdTime":1669734708526,"modifiedTime":1670025575832,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"name":"Amandelle","type":"ingredient","img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Amandelle.webp","effects":[],"flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.w7jEFHGFrcrKAesQ"}},"_id":"QN2KLZLNL1JUh2bF","system":{"description":"<p>Fruit de l’amandelier, un petit arbuste à feuilles très découpées de couleur mauve pâle à violet foncé. L’amandelle est une noix plate et allongée au goût d’amande allié au parfum de violette.</p>\n<p>Fréquente.</p>","descriptionmj":"","encombrement":0.01,"quantite":1,"qualite":0,"cout":0,"milieu":"Tous","environnement":[{"milieu":"Collines","rarete":"Frequente","frequence":18},{"milieu":"Cours d'eau","rarete":"Frequente","frequence":18},{"milieu":"Déserts","rarete":"Frequente","frequence":18},{"milieu":"Forêts","rarete":"Frequente","frequence":18},{"milieu":"Marais","rarete":"Frequente","frequence":18},{"milieu":"Montagnes","rarete":"Frequente","frequence":18},{"milieu":"Plaines","rarete":"Frequente","frequence":18}],"sust":0,"exotisme":0,"niveau":0,"base":0,"categorie":"Cuisine","rarete":"Frequente"},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1669734708521,"modifiedTime":1670621588436,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"folder":null,"sort":0,"ownership":{"default":0,"Hp9ImM4o9YRTSdfu":3}}
|
||||||
{"name":"Boralm","type":"ingredient","img":"systems/foundryvtt-reve-de-dragon/icons/objets/boralm.webp","effects":[],"flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.equipement.0ylGrNMzulUaKFP9"}},"system":{"description":"<p>Poudre brune apparaissant sur les parois des grottes.</p>\n<p>VUE/Alchimie à -1.</p>","descriptionmj":"","encombrement":0.001,"quantite":1,"qualite":0,"cout":0.03,"milieu":"Cavernes","environnement":[{"milieu":"Sous-sols","rarete":"Commune","frequence":54}],"niveau":0,"base":0,"categorie":"Alchimie","rarete":""},"ownership":{"default":0,"rYShh2P1DNavdoBD":3,"Hp9ImM4o9YRTSdfu":3},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.3","coreVersion":"10.290","createdTime":1668808206013,"modifiedTime":1670025575832,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"folder":null,"sort":0,"_id":"kbWKsR0HovidPw6d"}
|
{"name":"Damaskin","type":"faune","img":"systems/foundryvtt-reve-de-dragon/icons/faune/andurak.webp","system":{"description":"<p>Damaskin. Forêt, 50 kg, 100 sust. Variété de petit daim vivant sous des cli<br>mats plus froids et à la fourrure grise et noire tachetée de blanc ou de gris clair.</p>","descriptionmj":"","encombrement":25,"quantite":1,"qualite":0,"cout":0,"milieu":"Forêt","environnement":[{"milieu":"Forêts","rarete":"Frequente","frequence":18}],"sust":100,"exotisme":0,"categorie":"","actor":{"id":"","pack":"","name":""}},"effects":[],"flags":{"core":{"sourceId":"Item.LU5eutNQqwm52oOG"}},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1670580597921,"modifiedTime":1670621588438,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"_id":"QVEkBjXEVxjlrUK9","folder":null,"sort":0,"ownership":{"default":0,"jtRmvSuwkwMmIMf0":3}}
|
||||||
{"name":"Arrache-rêve","type":"ingredient","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.koLhmV2g0Z2tQZiB"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Arrache-r%C3%AAve.webp","effects":[],"_id":"koLhmV2g0Z2tQZiB","system":{"description":"<p>Le plus virulent des champignons vénéneux après l’amanite thanataire, procurant une agonie des plus douloureuses. Ressemble à cette dernière, avec un chapeau en boule au lieu de plat et galbé.</p>\n<p>M6 \\ P 4 rounds \\ D4 \\ -3 \\ Tournegraisse +14, Perle de Bjwal +12.</p>\n<p>Fréquent.</p>","descriptionmj":"","encombrement":0,"quantite":1,"qualite":0,"cout":0,"milieu":"Lieux sombres et humides","environnement":[{"milieu":"Forêts","rarete":"Frequente","frequence":18},{"milieu":"Sous-sols","rarete":"Rare","frequence":6}],"niveau":0,"base":0,"categorie":"","rarete":"Frequente"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.3","coreVersion":"10.290","createdTime":1669734708527,"modifiedTime":1670025575832,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"name":"Loup","type":"faune","img":"systems/foundryvtt-reve-de-dragon/icons/faune/wolf-head.webp","system":{"description":"<p>Loup. Forêt, 55 kg, 100 sust. Plus évitéque recherché (voir le lycan, p406).</p>","descriptionmj":"","encombrement":27,"quantite":1,"qualite":0,"cout":0,"milieu":"Forets","environnement":[{"milieu":"Forêts","rarete":"Frequente","frequence":18}],"sust":100,"exotisme":0,"categorie":"","actor":{"id":"99I06oTwCziLTnnl","pack":"foundryvtt-reve-de-dragon.animaux","name":"Lycan"}},"effects":[],"flags":{"core":{"sourceId":"Item.LU5eutNQqwm52oOG"}},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1670580597921,"modifiedTime":1670621588440,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"_id":"QhdvDcc3DTuoXkBW","folder":null,"sort":0,"ownership":{"default":0,"jtRmvSuwkwMmIMf0":3}}
|
||||||
{"name":"Sajutte","type":"herbe","flags":{"core":{"sheetClass":"foundryvtt-reve-de-dragon.RdDItemSheet","sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.l5G3NrS8USofuBK8"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Sajutte.webp","effects":[],"_id":"l5G3NrS8USofuBK8","system":{"description":"<p><em style=\"box-sizing: border-box; user-select: text;\">Herbe de repos.</em></p>\n<p>Petite herbe à sève blanche, très poisseuse, poussant aussi bien en forêt qu'en plaine, qu'en marais (Plus rare en montagne).</p>\n<p>Commune.</p>","descriptionmj":"","encombrement":0,"quantite":1,"qualite":0,"cout":0.02,"milieu":"Tous (plus rare en montagne)","environnement":[{"milieu":"Collines","rarete":"Commune","frequence":54},{"milieu":"Cours d'eau","rarete":"Commune","frequence":54},{"milieu":"Déserts","rarete":"Commune","frequence":54},{"milieu":"Forêts","rarete":"Commune","frequence":54},{"milieu":"Marais","rarete":"Commune","frequence":54},{"milieu":"Montagnes","rarete":"Frequente","frequence":18},{"milieu":"Plaines","rarete":"Commune","frequence":54}],"niveau":1,"base":0,"categorie":"Repos","rarete":"Commune"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.3","coreVersion":"10.290","createdTime":1669734708527,"modifiedTime":1670025575832,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"name":"Pigeon","type":"faune","img":"systems/foundryvtt-reve-de-dragon/icons/faune/oiseau.webp","system":{"description":"<p>Pigeon. Plaine, 500 g, 1 sust.</p>","descriptionmj":"","encombrement":0.2,"quantite":1,"qualite":0,"cout":0,"milieu":"Plaine","environnement":[{"milieu":"Plaines","rarete":"Commune","frequence":68}],"sust":1,"exotisme":0,"categorie":"","actor":{"id":"","pack":"","name":""}},"effects":[],"flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.QrQM7bMCKWKdfFwA"}},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1670580597921,"modifiedTime":1670621588445,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"_id":"QrQM7bMCKWKdfFwA","folder":null,"sort":0,"ownership":{"default":0,"jtRmvSuwkwMmIMf0":3}}
|
||||||
{"name":"Corne de rêve","type":"ingredient","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.lDZbDKaPQGvqzK1k"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Corne%20de%20r%C3%AAve.webp","effects":[],"_id":"lDZbDKaPQGvqzK1k","system":{"description":"<p>Champignon en forme de conque violet sombre.</p>\n<p>Rarissime.</p>","descriptionmj":"","encombrement":0.1,"quantite":1,"qualite":0,"cout":0,"milieu":"Lieux sombres et humides","environnement":[{"milieu":"Forêts","rarete":"Rarissime","frequence":3},{"milieu":"Sous-sols","rarete":"Rarissime","frequence":2}],"niveau":5,"base":0,"categorie":"Cuisine","rarete":"Rarissime"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.3","coreVersion":"10.290","createdTime":1669734708527,"modifiedTime":1670025575833,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"name":"Liquette","type":"faune","img":"systems/foundryvtt-reve-de-dragon/icons/faune/ver.webp","system":{"description":"<p><span class=\"fontstyle0\">Gastéropode sans coquille, voisin de la limace, de couleur blanchâtre et semblable à de la pâte de guimauve. Excellente grillée sur les braises d’un feu de camp ou devant la cheminée.</span> </p>","descriptionmj":"","encombrement":0.02,"quantite":1,"qualite":0,"cout":0,"milieu":"","environnement":[{"milieu":"Collines","rarete":"Frequente","frequence":27},{"milieu":"Forêts","rarete":"Commune","frequence":54},{"milieu":"Marais","rarete":"Frequente","frequence":18},{"milieu":"Plaines","rarete":"Frequente","frequence":18}],"sust":0.2,"exotisme":0,"categorie":"","actor":{"id":"","pack":"","name":""}},"effects":[],"flags":{},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1670616668493,"modifiedTime":1670621588398,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"folder":null,"sort":0,"ownership":{"default":0,"Hp9ImM4o9YRTSdfu":3},"_id":"QujuNoksfSYVewKQ"}
|
||||||
{"name":"Amanite Thanataire","type":"ingredient","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.m01q5bqTSKOJLSkY"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Amanite%20thanataire.webp","effects":[],"_id":"m01q5bqTSKOJLSkY","system":{"description":"<p>L’un des plus beaux, mais également le plus foudroyant des champignons vénéneux. Pied et volve élégamment proportionnés, chapeau arrondi à peine galbé, le tout paré d’une somptueuse teinte blanc argenté parsemée de points noirs.</p>\n<p>M7 \\ P 3 rounds \\ D4 \\ -3 \\ Tournegraisse +12, Perle de Bjwal +10.</p>\n<p>Fréquente.</p>","descriptionmj":"","encombrement":0,"quantite":1,"qualite":0,"cout":0,"milieu":"Lieux sombres et humides","environnement":[{"milieu":"Forêts","rarete":"Frequente","frequence":18},{"milieu":"Sous-sols","rarete":"Rare","frequence":6}],"niveau":0,"base":0,"categorie":"","rarete":"Frequente"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.3","coreVersion":"10.290","createdTime":1669734708527,"modifiedTime":1670025575833,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"name":"Ortironce","type":"herbe","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.RpUC6z3xhwnmv3sp"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Ortironce.webp","effects":[],"_id":"RpUC6z3xhwnmv3sp","system":{"description":"<p>Ronce venimeuse infestant de nombreux fourrés.</p>\n<p>M4 \\ P 1 minute \\ D2 \\ -3 \\ Bitume de Camphre +12, Teinture d’Érozonne +8.</p>\n<p>Commune.</p>","descriptionmj":"","encombrement":0,"quantite":1,"qualite":0,"cout":0,"milieu":"Forêts","environnement":[{"milieu":"Collines","rarete":"Commune","frequence":54},{"milieu":"Cours d'eau","rarete":"Commune","frequence":54},{"milieu":"Forêts","rarete":"Commune","frequence":54},{"milieu":"Plaines","rarete":"Commune","frequence":54}],"niveau":0,"base":0,"categorie":"","rarete":"Commune"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1669734708522,"modifiedTime":1670621588442,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
||||||
{"name":"Obyssum gris","type":"ingredient","img":"systems/foundryvtt-reve-de-dragon/icons/objets/l_obyssum_gris.webp","effects":[],"flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.equipement.nIOEB0PpMaACqD65"}},"system":{"description":"<p>Plus rare que le vert, poudre grisâtre apparaissant le long de certaines lianes des marais.</p>\n<p>VUE/Alchimie à -4</p>","descriptionmj":"","encombrement":0.001,"quantite":1,"qualite":0,"cout":0.1,"milieu":"Marais","environnement":[{"milieu":"Marais","rarete":"Rare","frequence":12}],"niveau":0,"base":0,"categorie":"Alchimie","rarete":""},"ownership":{"default":0,"rYShh2P1DNavdoBD":3,"Hp9ImM4o9YRTSdfu":3},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.3","coreVersion":"10.290","createdTime":1668808206114,"modifiedTime":1670025575833,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"folder":null,"sort":0,"_id":"m9ONkzH9KwLk3P3i"}
|
{"name":"Cancre","type":"faune","img":"systems/foundryvtt-reve-de-dragon/icons/faune/cancre.webp","system":{"description":"<p><span class=\"fontstyle0\">Crustacé gris-vert, semblable au crabe, qui trompe habilement son monde en se déplaçant ni de travers, ni tout droit, mais à reculons.</span> </p>","descriptionmj":"","encombrement":0.2,"quantite":1,"qualite":0,"cout":0,"milieu":"","environnement":[{"milieu":"Maritimes","rarete":"Frequente","frequence":18}],"sust":1,"exotisme":0,"categorie":"","actor":{"id":"","pack":"","name":""}},"effects":[],"flags":{},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1670616441674,"modifiedTime":1670621588397,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"folder":null,"sort":0,"ownership":{"default":0,"Hp9ImM4o9YRTSdfu":3},"_id":"RvfkIVHt6FzCp4TZ"}
|
||||||
{"name":"Méritoine","type":"herbe","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.nuOClbQwu6SLucJn"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/M%C3%A9ritoine.webp","effects":[],"_id":"nuOClbQwu6SLucJn","system":{"description":"<p><em>Herbe de soin.</em></p>\n<p>Plante rampante et ramifiée, aux minuscules feuilles vert pâle, s’accrochant aux troncs de certains conifères.</p>\n<p>Fréquente.</p>\n<p> </p>\n<p><em>Voir Les herbes de soin, p100.</em></p>","descriptionmj":"","encombrement":0,"quantite":1,"qualite":0,"cout":0.06,"milieu":"Forêts de conifères","environnement":[{"milieu":"Forêts","rarete":"Frequente","frequence":18},{"milieu":"Montagnes","rarete":"Frequente","frequence":18}],"niveau":3,"base":0,"categorie":"Soin","rarete":"Frequente"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.3","coreVersion":"10.290","createdTime":1669734708527,"modifiedTime":1670025575833,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"name":"Nartha","type":"ingredient","img":"systems/foundryvtt-reve-de-dragon/icons/objets/nartha.webp","effects":[],"flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.equipement.3mHSocNVPyWkmGBR"}},"system":{"description":"<p>Poudre noire obtenue par disruption alchimique du minerai appelé <em>narthalide</em>, sorte de marne.</p>\n<p>VUE/Alchimie à -3</p>","descriptionmj":"","encombrement":0.001,"quantite":1,"qualite":0,"cout":0.4,"milieu":"Obtenu à partir de marne","environnement":[{"milieu":"Cours d'eau","rarete":"Frequente","frequence":30},{"milieu":"Marais","rarete":"Frequente","frequence":30},{"milieu":"Plaines","rarete":"Frequente","frequence":30}],"sust":0,"exotisme":0,"niveau":0,"base":0,"categorie":"Alchimie","rarete":""},"ownership":{"default":0,"rYShh2P1DNavdoBD":3,"Hp9ImM4o9YRTSdfu":3},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1668808206015,"modifiedTime":1670621588440,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"folder":null,"sort":0,"_id":"SiFtJoydPawJaMKA"}
|
||||||
{"name":"Ossiphage","type":"herbe","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.pa0yqGaJX9x6kvKa"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Ossiphage.webp","effects":[],"_id":"pa0yqGaJX9x6kvKa","system":{"description":"<p>Également appelée <em>suceuse d’os</em>, c’est une liane rampante à feuilles triangulaires de couleur violacée. Chaque feuille est dotée de trois longs piquants, un à chaque pointe de son triangle. Son venin est si foudroyant que la victime n’a souvent pas le temps d’aller bien loin et meurt empêtrée dans la liane. Il arrive que l’on découvre un squelette entier au coeur d’un bouquet d’ossiphage, chaque os maintenu en place par les vrilles de la plante.</p>\n<p>M6 \\ P 3 rounds \\ D4 \\ -5 \\ Perle de Bjwal +10, Huile de Sélikanthe +6.</p>\n<p>Rare.</p>","descriptionmj":"","encombrement":0,"quantite":1,"qualite":0,"cout":0,"milieu":"Forêts","environnement":[{"milieu":"Forêts","rarete":"Rare","frequence":6}],"niveau":0,"base":0,"categorie":"","rarete":"Rare"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.3","coreVersion":"10.290","createdTime":1669734708527,"modifiedTime":1670025575833,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"name":"Flottard","type":"faune","img":"systems/foundryvtt-reve-de-dragon/icons/faune/raton-laveur.webp","system":{"description":"<p>Flottard. Rivage, 15 kg, 35 sust. Le flottard, surtout recherché pour sa peau, est une sorte de gros castor à forme de saucisse, flottant sur les eaux semblable à une bûche qui dérive. Il se nourrit d’insectes et de larves. </p>","descriptionmj":"","encombrement":7,"quantite":1,"qualite":0,"cout":0,"milieu":"Rivage","environnement":[{"milieu":"Forêts","rarete":"Rare","frequence":6}],"sust":35,"exotisme":0,"categorie":"","actor":{"id":"","pack":"","name":""}},"effects":[],"flags":{"core":{"sourceId":"Item.LU5eutNQqwm52oOG"}},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1670580597921,"modifiedTime":1670621588439,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"_id":"TQqwPEX49058mYQO","folder":null,"sort":0,"ownership":{"default":0,"jtRmvSuwkwMmIMf0":3}}
|
||||||
{"name":"Faux murus","type":"herbe","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.q6DoYNlSp6SEr5hj"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Faux%20murus.webp","effects":[],"_id":"q6DoYNlSp6SEr5hj","system":{"description":"<p><em>Herbe de soin.</em></p>\n<p>Variété de murus poussant en prairie de montagne.</p>\n<p>Rare.</p>\n<p> </p>\n<p><em>Voir Les herbes de soin, p100.</em></p>","descriptionmj":"","encombrement":0,"quantite":1,"qualite":0,"cout":0.4,"milieu":"Prairies de montagnes","environnement":[{"milieu":"Montagnes","rarete":"Rare","frequence":6}],"niveau":7,"base":0,"categorie":"Soin","rarete":"Rare"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.3","coreVersion":"10.290","createdTime":1669734708527,"modifiedTime":1670025575833,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"name":"Crétamère","type":"ingredient","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.Tfl4cElQxPQEXnPY"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Cr%C3%A9tam%C3%A8re.webp","effects":[],"_id":"Tfl4cElQxPQEXnPY","system":{"description":"<p>Petite fraise des bois en forme de crête dentelée. Son goût est très amer et devrait suffire à dissuader les gourmands.</p>\n<p>M3 \\ P 3 minutes \\ D2 \\ -3 \\ Lait de lune +12, Gelée royale +8.</p>\n<p>Fréquente.</p>","descriptionmj":"","encombrement":0.02,"quantite":1,"qualite":0,"cout":0,"milieu":"Tous","environnement":[{"milieu":"Collines","rarete":"Frequente","frequence":18},{"milieu":"Cours d'eau","rarete":"Frequente","frequence":18},{"milieu":"Déserts","rarete":"Frequente","frequence":18},{"milieu":"Forêts","rarete":"Frequente","frequence":18},{"milieu":"Marais","rarete":"Frequente","frequence":18},{"milieu":"Montagnes","rarete":"Frequente","frequence":18},{"milieu":"Plaines","rarete":"Frequente","frequence":18}],"sust":0,"exotisme":0,"niveau":null,"base":0,"categorie":"","rarete":"Frequente"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1669734708522,"modifiedTime":1670621588438,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
||||||
{"name":"Ortigal rose","type":"herbe","flags":{"core":{"sheetClass":"foundryvtt-reve-de-dragon.RdDItemSheet","sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.rXGa2Mx1ttMETTXo"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Ortigal%20rose.webp","effects":[],"_id":"rXGa2Mx1ttMETTXo","system":{"description":"<p><em>Herbe de repos.</em></p>\n<p>Variété d'ortigal dont l'extrémité des feuilles est toute piquetée de points roses. Comme les autres ortigals, ne pousse qu'en lieux très humides, principalement en marais.</p>\n<p>Fréquent.</p>","descriptionmj":"","encombrement":0,"quantite":1,"qualite":0,"cout":0.1,"milieu":"Lieux très humides","environnement":[{"milieu":"Cours d'eau","rarete":"Rare","frequence":9},{"milieu":"Marais","rarete":"Frequente","frequence":18}],"niveau":3,"base":0,"categorie":"Repos","rarete":"Frequente"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.3","coreVersion":"10.290","createdTime":1669734708528,"modifiedTime":1670025575833,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"name":"Klampin","type":"faune","img":"systems/foundryvtt-reve-de-dragon/icons/faune/rongeur.webp","system":{"description":"<p>Klampin. Forêt, plaine, 6 kg, 15 sust. Gros rongeur de couleur gris fauve (voir Cuisine, p343).</p>","descriptionmj":"","encombrement":3,"quantite":1,"qualite":0,"cout":0,"milieu":"Forets, Plaines","environnement":[{"milieu":"Forêts","rarete":"Commune","frequence":54},{"milieu":"Plaines","rarete":"Commune","frequence":54}],"sust":15,"exotisme":0,"categorie":"","actor":{"id":"","pack":"","name":""}},"effects":[],"flags":{"core":{"sourceId":"Item.LU5eutNQqwm52oOG"}},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1670580597921,"modifiedTime":1670621588439,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"_id":"UYlEOi2YZLlhomQ5","folder":null,"sort":0,"ownership":{"default":0,"jtRmvSuwkwMmIMf0":3}}
|
||||||
{"name":"Clopinette","type":"ingredient","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.rkTRMgL8pFygYagr"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Clopinettes.webp","effects":[],"_id":"rkTRMgL8pFygYagr","system":{"description":"<p>Fruit du clopinier, petit arbuste buissonneux semblable au genêt. Les clopinettes poussent en grappes nombreuses de petites baies rondes d’un blanc presque translucide. Peu juteuses, elles sont d’un goût neutre, non sucré, même pas âpre, et sont d’un pouvoir nutritif ridiculement faible (3 livres pour 1 sust). Poussant de préférence en plaine, y compris à l’abord des villages, elles sont ordinairement dédaignées des autochtones, même des animaux sauvages. On les laisse aux voyageurs. Pour cette raison, elles sont parfois appelées baies des voyageurs.</p>\n<p>Commune.</p>","descriptionmj":"","encombrement":0.01,"quantite":1,"qualite":0,"cout":0,"milieu":"Plaines","environnement":[{"milieu":"Cours d'eau","rarete":"Commune","frequence":108},{"milieu":"Plaines","rarete":"Commune","frequence":108}],"niveau":0,"base":0,"categorie":"Cuisine","rarete":"Frequente"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.3","coreVersion":"10.290","createdTime":1669734708528,"modifiedTime":1670025575833,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"name":"Mignote","type":"ingredient","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.UfzdMXpTcSgIpAEp"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Mignote.webp","effects":[],"_id":"UfzdMXpTcSgIpAEp","system":{"description":"<p>Cône du mignotier, arbre voisin du mélèze, poussant en contreforts montagneux. Les mignotes doivent être grillées puis moulues. La farine obtenue a un goût chocolaté qui accompagne agréablement le lait chaud du petit déjeuner.</p>\n<p>Fréquente.</p>","descriptionmj":"","encombrement":0.05,"quantite":1,"qualite":0,"cout":0,"milieu":"Contreforts montagneux","environnement":[{"milieu":"Forêts","rarete":"Frequente","frequence":18},{"milieu":"Montagnes","rarete":"Frequente","frequence":18}],"sust":0,"exotisme":0,"niveau":0,"base":0,"categorie":"Cuisine","rarete":"Frequente"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1669734708522,"modifiedTime":1670621588440,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
||||||
{"name":"Bélidane","type":"herbe","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.vnq7HONrBm90g2gY"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/B%C3%A9lidane.webp","effects":[],"_id":"vnq7HONrBm90g2gY","system":{"description":"<p><em>Herbe de soin.</em></p>\n<p>Herbacée aux feuilles fines et dentelées comme celle de la ciguë. Ne pousse que sur les versants de collines ensoleillées.</p>\n<p>Fréquente.</p>\n<p> </p>\n<p><em>Voir Les herbes de soin, p100.</em></p>","descriptionmj":"","encombrement":0,"quantite":1,"qualite":0,"cout":0.3,"milieu":"Collines ensoleillées","environnement":[{"milieu":"Collines","rarete":"Frequente","frequence":18}],"niveau":6,"base":0,"categorie":"Soin","rarete":"Frequente"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.3","coreVersion":"10.290","createdTime":1669734708528,"modifiedTime":1670025575833,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"name":"Faisan","type":"faune","img":"systems/foundryvtt-reve-de-dragon/icons/faune/oie.webp","system":{"description":"<p>Faisan. Plaine, 1,5 kg, 4 sust.</p>","descriptionmj":"","encombrement":0.7,"quantite":1,"qualite":0,"cout":0,"milieu":"Plaine","environnement":[{"milieu":"Plaines","rarete":"Commune","frequence":46}],"sust":4,"exotisme":0,"categorie":"","actor":{"id":"","pack":"","name":""}},"effects":[],"flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.Uqd3BFlPaq9s8LSN"}},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1670580597921,"modifiedTime":1670621588445,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"_id":"Uqd3BFlPaq9s8LSN","folder":null,"sort":0,"ownership":{"default":0,"jtRmvSuwkwMmIMf0":3}}
|
||||||
{"name":"Blèmissure","type":"ingredient","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.wNBWvJSd9i1zHspR"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Bl%C3%A8missure.webp","effects":[],"_id":"wNBWvJSd9i1zHspR","system":{"description":"<p>Champignon affectant la forme d’une éponge, de couleur gris blême, apparaissant sur les troncs des arbres.</p>\n<p>M4 \\ P 1 minute \\ D2 \\ -4 \\ Élixir des Gnomes +14, Huile de Sélikanthe +10.</p>\n<p>Fréquente.</p>","descriptionmj":"","encombrement":0,"quantite":1,"qualite":0,"cout":0,"milieu":"Forêts sombres et humides","environnement":[{"milieu":"Forêts","rarete":"Frequente","frequence":18}],"niveau":0,"base":0,"categorie":"","rarete":"Frequente"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.3","coreVersion":"10.290","createdTime":1669734708528,"modifiedTime":1670025575833,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"name":"Marmotte","type":"faune","img":"systems/foundryvtt-reve-de-dragon/icons/faune/lapin.webp","system":{"description":"<p>Marmotte. Montagne, 6 kg, 12 sust.Surtout recherchée pour sa peau.</p>","descriptionmj":"","encombrement":3,"quantite":1,"qualite":0,"cout":0,"milieu":"Montagne","environnement":[{"milieu":"Montagnes","rarete":"Frequente","frequence":18}],"sust":12,"exotisme":0,"categorie":"","actor":{"id":"","pack":"","name":""}},"effects":[],"flags":{"core":{"sourceId":"Item.LU5eutNQqwm52oOG"}},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1670580597921,"modifiedTime":1670621588440,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"_id":"V9aS6RvcxyBN5XY9","folder":null,"sort":0,"ownership":{"default":0,"jtRmvSuwkwMmIMf0":3}}
|
||||||
{"name":"Ortigal glauque","type":"herbe","img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Ortigal%20noir.webp","system":{"description":"","descriptionmj":"","encombrement":0,"quantite":1,"qualite":0,"cout":0,"milieu":"Plante aquatique","environnement":[{"milieu":"Cours d'eau","rarete":"Frequente","frequence":27},{"milieu":"Marais","rarete":"Commune","frequence":54}],"niveau":0,"base":0,"categorie":"Alchimie"},"effects":[],"flags":{"core":{"sourceId":"Item.wjvaEK4Bq2TwKCFH"}},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.3","coreVersion":"10.290","createdTime":1670017184070,"modifiedTime":1670025575785,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"_id":"wjvaEK4Bq2TwKCFH","folder":null,"sort":0,"ownership":{"default":0,"Hp9ImM4o9YRTSdfu":3}}
|
{"name":"Endebrume","type":"herbe","flags":{"core":{"sheetClass":"foundryvtt-reve-de-dragon.RdDItemSheet","sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.VGId76yXwx2k0Cli"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Endebrume.webp","effects":[],"_id":"VGId76yXwx2k0Cli","system":{"description":"<p><em>Herbe de repos.</em></p>\n<p>Petite plante ramifiée aux tiges fines comme des cheveux, poussant dans les lieux frais et humides : marais ombragés, certaines forêts, et parfois vallées de montagne. Un peu moins rare est la fausse endebrume, qui lui ressemble physiquement, mais n'a aucune vertu. <br /><em>VUE/Botanique à -1 pour savoir à quelle espèce on a affaire (jet obligatoire à chaque cueillette).</em></p>\n<p>Rare</p>","descriptionmj":"","encombrement":0,"quantite":1,"qualite":0,"cout":0.2,"milieu":"Lieux frais et humides","environnement":[{"milieu":"Cours d'eau","rarete":"Frequente","frequence":18},{"milieu":"Forêts","rarete":"Rare","frequence":9},{"milieu":"Marais","rarete":"Rare","frequence":6},{"milieu":"Sous-sols","rarete":"Rare","frequence":4}],"niveau":4,"base":0,"categorie":"Repos","rarete":"Rare"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1669734708522,"modifiedTime":1670621588438,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
||||||
{"name":"Herbe de lune","type":"herbe","flags":{"core":{"sheetClass":"foundryvtt-reve-de-dragon.RdDItemSheet","sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.x4wGXTdmrzaOn8Sh"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Herbe%20de%20lune.webp","effects":[],"_id":"x4wGXTdmrzaOn8Sh","system":{"description":"<p>Petite herbacée aux feuilles en forme de polygone à 7 côtés, d’un bleu très pâle, presque translucide, ne poussant qu’en haute montagne, à partir de 2000 mètres, et uniquement dans les recoins pouvant être éclairés par la lune. <br /><br />L’herbe de lune possède un fort pouvoir onirique sur celui qui la consomme\"; en termes de jeu, elle permet de gagner des points de rêve. Elle doit être cueillie de nuit et lorsque la lune l’éclaire, faute de quoi son pouvoir est nul. Sa force dépend de la phase lunaire durant laquelle elle est cueillie. <br /><br />Une fois séchée, l’herbe de lune peut être fumée dans une pipe ou préparée en décoction. Dans les deux cas, une dose doit être composée de 7 brins. Dès la dose absorbée (bue ou fumée), le consommateur doit jouer un JR r-force, c’est-à-dire un jet de points de rêve ajusté négativement à la force de l’herbe. Si le JR réussit, aucun effet ne se produit\"; s’il échoue, le consommateur gagne immédiatement un nombre de points de rêve égal à la force de l’herbe, puis en échange, marque un nombre identique de points de fatigue. On peut ainsi gagner des points de rêve même si le seuil de rêve est dépassé, mais se souvenir que dépasser le triple de son seuil provoque l’éclatement. <br /><br />L’herbe de lune est parfois trouvable chez les herboristes, mais n’est pas bon marché. Une dose (7 brins) vaut usuellement un nombre de sols égal à sa force. Une dose de force 6 vaut ainsi 6 sols. <br />Rare.</p>","descriptionmj":"","encombrement":0,"quantite":1,"qualite":0,"cout":null,"milieu":"Hautes montagnes","environnement":[{"milieu":"Montagnes","rarete":"Rare","frequence":6}],"niveau":null,"base":0,"categorie":"","rarete":"Rare"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.3","coreVersion":"10.290","createdTime":1669734708528,"modifiedTime":1670025575833,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"name":"Poilute","type":"faune","img":"systems/foundryvtt-reve-de-dragon/icons/faune/rongeur.webp","system":{"description":"<p>Poilute. Forêt, plaine, 3 kg, 6 sust. Le poi-lute est une sorte de hérisson gris noir à longspoils souples angoras en guise de piquants.</p>","descriptionmj":"","encombrement":1.5,"quantite":1,"qualite":0,"cout":0,"milieu":"Forêt, plaine","environnement":[{"milieu":"Forêts","rarete":"Frequente","frequence":18},{"milieu":"Plaines","rarete":"Frequente","frequence":18}],"sust":6,"exotisme":0,"categorie":"","actor":{"id":"","pack":"","name":""}},"effects":[],"flags":{"core":{"sourceId":"Item.LU5eutNQqwm52oOG"}},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1670580597921,"modifiedTime":1670621588442,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"_id":"VhHFo9GMF9zwNIgp","folder":null,"sort":0,"ownership":{"default":0,"jtRmvSuwkwMmIMf0":3}}
|
||||||
|
{"name":"Mélikasse","type":"ingredient","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.WbNKazgQZ4CeHtRo"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/M%C3%A9likasse.webp","effects":[],"_id":"WbNKazgQZ4CeHtRo","system":{"description":"<p>Fruit du mélikassier, arbuste buissonneux voisin du sureau. La mélikasse pousse en grappes de petites baies noires. Insolite, son goût est un mélange de cassis et de savon.</p>\n<p>Fréquente.</p>","descriptionmj":"","encombrement":0.02,"quantite":1,"qualite":0,"cout":0,"milieu":"Tous","environnement":[{"milieu":"Collines","rarete":"Frequente","frequence":18},{"milieu":"Cours d'eau","rarete":"Frequente","frequence":18},{"milieu":"Déserts","rarete":"Frequente","frequence":18},{"milieu":"Forêts","rarete":"Frequente","frequence":18},{"milieu":"Marais","rarete":"Frequente","frequence":18},{"milieu":"Montagnes","rarete":"Frequente","frequence":18},{"milieu":"Plaines","rarete":"Frequente","frequence":18}],"sust":0,"exotisme":0,"niveau":0,"base":0,"categorie":"Cuisine","rarete":"Frequente"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1669734708522,"modifiedTime":1670621588440,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
||||||
|
{"name":"Aigronce","type":"herbe","flags":{"core":{"sheetClass":"foundryvtt-reve-de-dragon.RdDItemSheet","sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.XVfDwjgzbRvotbP8"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Aigronce.webp","effects":[],"_id":"XVfDwjgzbRvotbP8","system":{"description":"<p><em>Herbe de repos.</em></p>\n<p>Variété de klampine à l'odeur aigre et piquante. Pousse en lieux boisés des climats tempérés, parfois en lisière.</p>\n<p>Fréquente.</p>","descriptionmj":"","encombrement":0,"quantite":1,"qualite":0,"cout":0.04,"milieu":"Forêts tempérées","environnement":[{"milieu":"Forêts","rarete":"Frequente","frequence":18}],"niveau":2,"base":0,"categorie":"Repos","rarete":"Frequente"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1669734708522,"modifiedTime":1670621588436,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
||||||
|
{"name":"Endorlotte","type":"herbe","flags":{"core":{"sheetClass":"foundryvtt-reve-de-dragon.RdDItemSheet","sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.XWpfl6UmaMel1tJn"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Endorlotte.webp","effects":[],"_id":"XWpfl6UmaMel1tJn","system":{"description":"<p>Plante voisine du gui, poussant en parasite dans les branches des arbres de toutes forêts, l’endorlotte est une herbe de soin fonctionnant comme les dix grandes herbes connues, avec un bonus de guérison de +5. Son pouvoir ne s’applique toutefois qu’à la récupération des points de vie, pas à la cicatrisation des blessures. <br /><br />Elle doit être préparée en décoction selon la règle standard, à raison de 12 - 5 = 7 brins pour une décoction, et bue par le convalescent. Puis lors du test de récupération des points de vie\": <br />Part. 4 points de vie regagnés <br />Sign. 3 points de vie regagnés <br />Norm. 2 points de vie regagnés <br />Tout échec. Aucun point, sans autre conséquence. <br /><br />Enchantée, la décoction d’endorlotte fonctionne selon la règle standard avec son bonus de +5, et pratiquement devient équivalente à l’ortigal noir. <br />Rare.</p>","descriptionmj":"","encombrement":0,"quantite":1,"qualite":0,"cout":0.25,"milieu":"Forêts","environnement":[{"milieu":"Forêts","rarete":"Rare","frequence":6}],"niveau":5,"base":0,"categorie":"Soin","rarete":"Rare"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1669734708522,"modifiedTime":1670621588438,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
||||||
|
{"name":"Ortigal noir","type":"herbe","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.Z20wqDHmbgFQSyXo"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Ortigal%20noir.webp","effects":[],"_id":"Z20wqDHmbgFQSyXo","system":{"description":"<p><em>Herbe de soin.</em></p>\n<p>Variété d’ortigal aux feuilles d’un vert sombre presque noir.</p>\n<p>Fréquent.</p>\n<p> </p>\n<p><em>Voir Les herbes de soin, p100.</em></p>","descriptionmj":"","encombrement":0,"quantite":1,"qualite":0,"cout":0.2,"milieu":"Marais","environnement":[{"milieu":"Marais","rarete":"Frequente","frequence":18}],"niveau":5,"base":0,"categorie":"Soin","rarete":"Frequente"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1669734708522,"modifiedTime":1670621588441,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
||||||
|
{"name":"Canard","type":"faune","img":"systems/foundryvtt-reve-de-dragon/icons/faune/oie.webp","system":{"description":"<p>Canard. Rivage, 1,5 kg, 4 sust.</p>","descriptionmj":"","encombrement":0.7,"quantite":1,"qualite":0,"cout":0,"milieu":"Rivage","environnement":[{"milieu":"Cours d'eau","rarete":"Commune","frequence":54}],"sust":4,"exotisme":0,"categorie":"","actor":{"id":"","pack":"","name":""}},"effects":[],"flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.ZEAxjKBryjKzLPOp"}},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1670580597921,"modifiedTime":1670621588446,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"_id":"ZEAxjKBryjKzLPOp","folder":null,"sort":0,"ownership":{"default":0,"jtRmvSuwkwMmIMf0":3}}
|
||||||
|
{"name":"Chèvre","type":"faune","img":"systems/foundryvtt-reve-de-dragon/icons/faune/chamois.webp","system":{"description":"<p>Chèvre. Colline, montagne, 25 kg, 55 sust.</p>","descriptionmj":"","encombrement":12,"quantite":1,"qualite":0,"cout":0,"milieu":"Colline, Montagne","environnement":[{"milieu":"Collines","rarete":"Frequente","frequence":18},{"milieu":"Montagnes","rarete":"Frequente","frequence":18}],"sust":55,"exotisme":0,"categorie":"","actor":{"id":"","pack":"","name":""}},"effects":[],"flags":{"core":{"sourceId":"Item.LU5eutNQqwm52oOG"}},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1670580597921,"modifiedTime":1670621588437,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"_id":"ZoQCVfyFed9tTRiE","folder":null,"sort":0,"ownership":{"default":0,"jtRmvSuwkwMmIMf0":3}}
|
||||||
|
{"name":"Satum","type":"herbe","flags":{"core":{"sheetClass":"foundryvtt-reve-de-dragon.RdDItemSheet","sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.bBiHuMCom4B4nXBD"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Satum.webp","effects":[],"_id":"bBiHuMCom4B4nXBD","system":{"description":"<p>Également appelé nez de satin, le satum est une petite plante à feuille unique, douce et moirée comme le satin, poussant en toutes forêts, usuellement à l’orée des clairières. C’est une des herbes de base utilisées en alchimie.</p>\n<p>Commun.</p>\n<p> </p>\n<p><em>Voir Principes d’alchimie, p357.</em></p>","descriptionmj":"","encombrement":0,"quantite":1,"qualite":0,"cout":0.03,"milieu":"Forêts","environnement":[{"milieu":"Forêts","rarete":"Commune","frequence":54}],"niveau":null,"base":0,"categorie":"Alchimie","rarete":"Commune"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1669734708523,"modifiedTime":1670621588442,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
||||||
|
{"name":"Chronophile","type":"herbe","flags":{"core":{"sheetClass":"foundryvtt-reve-de-dragon.RdDItemSheet","sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.c6Gdd4A0QCTEnp6o"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Chronophile.webp","effects":[],"_id":"c6Gdd4A0QCTEnp6o","system":{"description":"","descriptionmj":"","encombrement":0,"quantite":1,"qualite":0,"cout":0.2,"milieu":"Forêts","environnement":[{"milieu":"Forêts","rarete":"Rare","frequence":6}],"niveau":null,"base":0,"categorie":"Alchimie","rarete":"Rare"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1669734708523,"modifiedTime":1670621588438,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
||||||
|
{"name":"Névropenthe","type":"herbe","flags":{"core":{"sheetClass":"foundryvtt-reve-de-dragon.RdDItemSheet","sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.chm4mCNhQXwJEtNy"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/N%C3%A9vropenthe.webp","effects":[],"_id":"chm4mCNhQXwJEtNy","system":{"description":"<p>Plante foisonnante à grappes de feuilles rondes, dont le vert est souvent piqueté de points rouges. Pousse au coeur de toutes forêts à l’abri des fourrés et des ronciers. C’est une des herbes de base utilisées en alchimie.</p>\n<p>Rare.</p>\n<p> </p>\n<p><em style=\"box-sizing: border-box; user-select: text; color: #191813; font-family: GoudyAcc, sans-serif; text-align: justify;\">Voir Principes d’alchimie, p357.</em></p>","descriptionmj":"","encombrement":0,"quantite":1,"qualite":0,"cout":0.06,"milieu":"Forêts","environnement":[{"milieu":"Forêts","rarete":"Rare","frequence":6}],"niveau":null,"base":0,"categorie":"Alchimie","rarete":"Rare"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1669734708523,"modifiedTime":1670621588441,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
||||||
|
{"name":"Ortigal","type":"herbe","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.ckBk9H7jhFQC2IRX"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Ortigal.webp","effects":[],"_id":"ckBk9H7jhFQC2IRX","system":{"description":"<p><em>Herbe de soin.</em></p>\n<p>Plante aquatique des marais, aux petites feuilles rondes et luisantes, voisine du nénuphar.</p>\n<p>Fréquent.</p>\n<p> </p>\n<p><em>Voir Les herbes de soin, p100.</em></p>","descriptionmj":"","encombrement":0,"quantite":1,"qualite":0,"cout":0.1,"milieu":"Marais","environnement":[{"milieu":"Marais","rarete":"Frequente","frequence":18}],"niveau":4,"base":0,"categorie":"Soin","rarete":"Frequente"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1669734708524,"modifiedTime":1670621588441,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
||||||
|
{"name":"Loutre","type":"faune","img":"systems/foundryvtt-reve-de-dragon/icons/faune/raton-laveur.webp","system":{"description":"<p>Loutre. Rivage, 15 kg, 32 sust. Surtout recherchée pour sa peau.</p>","descriptionmj":"","encombrement":7.5,"quantite":1,"qualite":0,"cout":0,"milieu":"Rivages","environnement":[{"milieu":"Cours d'eau","rarete":"Rare","frequence":6}],"sust":32,"exotisme":0,"categorie":"","actor":{"id":"","pack":"","name":""}},"effects":[],"flags":{"core":{"sourceId":"Item.LU5eutNQqwm52oOG"}},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1670580597921,"modifiedTime":1670621588440,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"_id":"d7n9u9OAELDLtAvJ","folder":null,"sort":0,"ownership":{"default":0,"jtRmvSuwkwMmIMf0":3}}
|
||||||
|
{"name":"Sanglier","type":"faune","img":"systems/foundryvtt-reve-de-dragon/icons/faune/sanglier.webp","system":{"description":"<p>Sanglier. Forêt, 150 kg, 360 sust (voir lecornicochon, p402).</p>","descriptionmj":"","encombrement":75,"quantite":1,"qualite":0,"cout":0,"milieu":"Forêt","environnement":[{"milieu":"Forêts","rarete":"Commune","frequence":54}],"sust":360,"exotisme":0,"categorie":"","actor":{"id":"VsEw24DEekBbU69Z","pack":"foundryvtt-reve-de-dragon.animaux","name":"Cornicochon"}},"effects":[],"flags":{"core":{"sourceId":"Item.LU5eutNQqwm52oOG"}},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1670580597921,"modifiedTime":1670621588442,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"_id":"dp28i9k5Mpjyr9jl","folder":null,"sort":0,"ownership":{"default":0,"jtRmvSuwkwMmIMf0":3}}
|
||||||
|
{"name":"Croupigne","type":"ingredient","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.dr2xZkUKaWa3Gjvr"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Croupigne.webp","effects":[],"_id":"dr2xZkUKaWa3Gjvr","system":{"description":"<p>Sorte de groseille rose pâle, poussant à l’orée des sous-bois et des clairières.</p>\n<p>M2 \\ P 5 minutes \\ D1 \\ -3 \\ Élixir des Gnomes +16, Gelée royale +10.</p>\n<p>Fréquente.</p>","descriptionmj":"","encombrement":0.02,"quantite":1,"qualite":0,"cout":0,"milieu":"Forêts","environnement":[{"milieu":"Forêts","rarete":"Frequente","frequence":18}],"sust":0,"exotisme":0,"niveau":null,"base":0,"categorie":"","rarete":"Frequente"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1669734708524,"modifiedTime":1670621588438,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
||||||
|
{"name":"Noisemûre","type":"ingredient","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.eB5Nhus3Ao4H8ePT"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Noisem%C3%BBre.webp","effects":[],"_id":"eB5Nhus3Ao4H8ePT","system":{"description":"<p>Fruit du noisemûrier, petit arbuste très ramifié vivant en sous-bois à l’ombre des plus grands arbres. La noisemûre a extérieurement l’apparence d’une grosse noisette à la coquille rougeâtre et granulée. Intérieurement, sa chair est tendre, juteuse et sucrée.</p>\n<p>Fréquente.</p>","descriptionmj":"","encombrement":0.02,"quantite":1,"qualite":0,"cout":0,"milieu":"Forêts","environnement":[{"milieu":"Forêts","rarete":"Frequente","frequence":18}],"sust":0,"exotisme":0,"niveau":0,"base":0,"categorie":"Cuisine","rarete":"Frequente"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1669734708525,"modifiedTime":1670621588441,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
||||||
|
{"name":"Fricotille","type":"ingredient","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.eKrtkHj3EbYCZu8Y"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Fricotille.webp","effects":[],"_id":"eKrtkHj3EbYCZu8Y","system":{"description":"<p>Bolet à pied mince et blanc, et large chapeau pointu blanc à pois bleus.</p>\n<p>Fréquente.</p>","descriptionmj":"","encombrement":0.1,"quantite":1,"qualite":0,"cout":0,"milieu":"Lieux sombres et humides","environnement":[{"milieu":"Forêts","rarete":"Frequente","frequence":18},{"milieu":"Sous-sols","rarete":"Frequente","frequence":18}],"sust":0,"exotisme":0,"niveau":3,"base":0,"categorie":"Cuisine","rarete":"Frequente"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1669734708525,"modifiedTime":1670621588439,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
||||||
|
{"name":"Solimonce","type":"herbe","flags":{"core":{"sheetClass":"foundryvtt-reve-de-dragon.RdDItemSheet","sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.eqdFj8nT7JkibPvi"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Solimonce.webp","effects":[],"_id":"eqdFj8nT7JkibPvi","system":{"description":"<p>Variété d’ortie non urticante, poussant dans les lieux humides à l’abri de la lumière. Ses décoctions sont réputées souveraines contre les maladies des yeux.</p>\n<p>Rare.</p>\n<p> </p>\n<p><em>Voir Fièvre brune, p350.</em></p>","descriptionmj":"","encombrement":0,"quantite":1,"qualite":0,"cout":null,"milieu":"Lieux humides","environnement":[{"milieu":"Cours d'eau","rarete":"Rare","frequence":4},{"milieu":"Forêts","rarete":"Rare","frequence":8},{"milieu":"Marais","rarete":"Rare","frequence":4},{"milieu":"Sous-sols","rarete":"Rare","frequence":8}],"niveau":null,"base":0,"categorie":"Soin","rarete":"Rare"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1669734708525,"modifiedTime":1670621588442,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
||||||
|
{"name":"Obbadion","type":"ingredient","img":"systems/foundryvtt-reve-de-dragon/icons/objets/l_obbadion.webp","effects":[],"flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.equipement.69vN8bRlnCrRHQCm"}},"system":{"description":"<p>Poudre bleuâtre obtenue par disruption alchimique du minerai appelé <em>obbadine</em>, sorte de tourbe.</p>\n<p>VUE/Alchimie à -2</p>","descriptionmj":"","encombrement":0.001,"quantite":1,"qualite":0,"cout":0.2,"milieu":"Lieux humides, obtenu à partir d'Obbadine (tourbe)","environnement":[{"milieu":"Cours d'eau","rarete":"Frequente","frequence":18},{"milieu":"Plaines","rarete":"Frequente","frequence":18},{"milieu":"Sous-sols","rarete":"Frequente","frequence":18}],"sust":0,"exotisme":0,"niveau":0,"base":0,"categorie":"Alchimie","rarete":""},"ownership":{"default":0,"rYShh2P1DNavdoBD":3,"Hp9ImM4o9YRTSdfu":3},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1668808206016,"modifiedTime":1670621588441,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"folder":null,"sort":0,"_id":"f4TPpX03pJuyBkuX"}
|
||||||
|
{"name":"Frimart","type":"faune","img":"systems/foundryvtt-reve-de-dragon/icons/faune/oiseau.webp","system":{"description":"<p>Frimart. Plaine, forêt, rivage, 3 kg, 7 sust. Nom parfois donné au noisot mâle quand il est particulièrement énervé (voir ci-dessous).</p>","descriptionmj":"","encombrement":1.5,"quantite":1,"qualite":0,"cout":0,"milieu":"Forêt, Plaine, Rivage","environnement":[{"milieu":"Cours d'eau","rarete":"Frequente","frequence":18},{"milieu":"Forêts","rarete":"Frequente","frequence":18},{"milieu":"Plaines","rarete":"Frequente","frequence":18}],"sust":7,"exotisme":0,"categorie":"","actor":{"id":"","pack":"","name":""}},"effects":[],"flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.hajrJoywOF9iodSL"}},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1670580597921,"modifiedTime":1670621588446,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"_id":"hajrJoywOF9iodSL","folder":null,"sort":0,"ownership":{"default":0,"jtRmvSuwkwMmIMf0":3}}
|
||||||
|
{"name":"Crampe","type":"faune","img":"systems/foundryvtt-reve-de-dragon/icons/faune/oie.webp","system":{"description":"<p>Crampe. Forêt, plaine, 10 kg, 25 sust. Lacrampe est une grosse dinde sauvage vi-vant en lisière de forêt ou en sous-bois peu épais. La crampe passe sa vie à essayer deprendre son envol, ce qu’elle ne réussit querarement et pour quelques mètres. À forcede battre inutilement des ailes, les cram-pes s’écroulent périodiquement, en proie à de terribles douleurs musculaires. C’est évidemment à ce moment qu’elles sont les plus vulnérables – ce que n’ignorent pas les prédateurs patients.</p>","descriptionmj":"","encombrement":5,"quantite":1,"qualite":0,"cout":0,"milieu":"Foret, Plaine","environnement":[{"milieu":"Forêts","rarete":"Commune","frequence":54},{"milieu":"Plaines","rarete":"Commune","frequence":46}],"sust":25,"exotisme":0,"categorie":"","actor":{"id":"","pack":"","name":""}},"effects":[],"flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.i2tLFSbg4nXtcD6q"}},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1670580597921,"modifiedTime":1670621588446,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"_id":"i2tLFSbg4nXtcD6q","folder":null,"sort":0,"ownership":{"default":0,"jtRmvSuwkwMmIMf0":3}}
|
||||||
|
{"name":"Cerf","type":"faune","img":"systems/foundryvtt-reve-de-dragon/icons/faune/cerf.webp","system":{"description":"<p>(voir le bramart, p400).</p>","descriptionmj":"","encombrement":75,"quantite":1,"qualite":0,"cout":0,"milieu":"Forêt","environnement":[{"milieu":"Forêts","rarete":"Rare","frequence":6}],"sust":370,"exotisme":0,"categorie":"","actor":{"id":"zMvyRrp10dkfcS43","pack":"foundryvtt-reve-de-dragon.animaux","name":"Bramart"}},"effects":[],"flags":{"core":{"sourceId":"Item.LU5eutNQqwm52oOG"}},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1670580597921,"modifiedTime":1670621588437,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"_id":"iSVgVsoXJ7Z1kuqX","folder":null,"sort":0,"ownership":{"default":0,"jtRmvSuwkwMmIMf0":3}}
|
||||||
|
{"name":"Trésure","type":"ingredient","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.jOCPgZmP3aZtMGdi"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Tr%C3%A9sure.webp","effects":[],"_id":"jOCPgZmP3aZtMGdi","system":{"description":"<p>Fruit du trésurier, buisson épineux de la famille des ronces poussant principalement en montagne. La trésure est une grosse framboise de la taille d’une mandarine, rouge foncé avec un jus noir. Non seulement délicieuse, la trésure est nourrissante et énergétique. Chaque fruit vaut 3 points de sustentation et défatigue instantanément comme après une heure de sommeil. En termes de jeu, effacer un segment comme si l’on venait de dormir une heure. Enfin, faire suivre un repas de trésures (qu’il soit composé d’un ou plusieurs fruits) d’un jet de moral en situation heureuse. Une fois cueillies, les trésures ne se conservent pas plus de 12 heures, et même leur jus n’a plus aucune valeur. Véritables plantes miraculeuses, les trésuriers portent des fruits d’un bout de l’année à l’autre, même en hiver sous la neige.</p>\n<p>Rare.</p>","descriptionmj":"","encombrement":0.05,"quantite":1,"qualite":0,"cout":0,"milieu":"Montagnes","environnement":[{"milieu":"Montagnes","rarete":"Rare","frequence":6}],"sust":0,"exotisme":0,"niveau":0,"base":0,"categorie":"Cuisine","rarete":"Rare"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1669734708526,"modifiedTime":1670621588444,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
||||||
|
{"name":"Genèfle","type":"ingredient","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.jbkZ9j04AAIAVBuG"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Gen%C3%A8fle.webp","effects":[],"_id":"jbkZ9j04AAIAVBuG","system":{"description":"<p>Fruit du genèflier, arbuste buissonneux vivant en plaine. La genèfle est très semblable à la clopinette, mais avec une peau plus nacrée.</p>\n<p>M1 \\ P 10 minutes \\ D1 \\ -3 \\ Teinture d’Érozonne +16, Topazoïne +12.</p>\n<p>Commune.</p>","descriptionmj":"","encombrement":0.02,"quantite":1,"qualite":0,"cout":0,"milieu":"Plaines","environnement":[{"milieu":"Plaines","rarete":"Commune","frequence":54}],"sust":0,"exotisme":0,"niveau":null,"base":0,"categorie":"","rarete":"Commune"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1669734708526,"modifiedTime":1670621588439,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
||||||
|
{"name":"Murus","type":"herbe","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.jjVl1PTFgTGdIfZf"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Murus.webp","effects":[],"_id":"jjVl1PTFgTGdIfZf","system":{"description":"<p><em>Herbe de soin.</em></p>\n<p>Sorte de minuscule chardon aux feuilles vert violacé, s’accrochant aux rochers escarpés. Son principe actif est contenu dans ses piquants.</p>\n<p>Rare.</p>\n<p> </p>\n<p><em>Voir Les herbes de soin, p100.</em></p>","descriptionmj":"","encombrement":0,"quantite":1,"qualite":0,"cout":0.6,"milieu":"Rochers escarpés","environnement":[{"milieu":"Montagnes","rarete":"Rare","frequence":6}],"niveau":8,"base":0,"categorie":"Soin","rarete":"Rare"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1669734708526,"modifiedTime":1670621588440,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
||||||
|
{"name":"Tanemiel","type":"herbe","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.jqUrbSHwFr5kPW3q"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Tanemiel.webp","effects":[],"_id":"jqUrbSHwFr5kPW3q","system":{"description":"<p><em>Herbe de soin.</em></p>\n<p>Plante grimpante, dotée de vrilles, voisine du liseron, de couleur vert laiteux presque blanc, s’accrochant aux arbres des forêts chaudes et humides.</p>\n<p>Rare.</p>\n<p> </p>\n<p><em>Voir Les herbes de soin, p100.</em></p>","descriptionmj":"","encombrement":0,"quantite":1,"qualite":0,"cout":0.9,"milieu":"Forêts chaudes et humides","environnement":[{"milieu":"Forêts","rarete":"Rare","frequence":6}],"niveau":9,"base":0,"categorie":"Soin","rarete":"Rare"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1669734708526,"modifiedTime":1670621588443,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
||||||
|
{"name":"Mercurion","type":"herbe","flags":{"core":{"sheetClass":"foundryvtt-reve-de-dragon.RdDItemSheet","sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.k1l253yvSebgc7Xq"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Mercurion.webp","effects":[],"_id":"k1l253yvSebgc7Xq","system":{"description":"<p>Lierre noirâtre s’accrochant aux arbres des forêts, principalement les chênes. C’est une des herbes de base utilisées en alchimie.</p>\n<p>Commun. <br /><br /><em>Voir Principes d’alchimie, p357.</em></p>","descriptionmj":"","encombrement":0,"quantite":1,"qualite":0,"cout":0.02,"milieu":"Forêts de chênes","environnement":[{"milieu":"Forêts","rarete":"Commune","frequence":54}],"niveau":null,"base":0,"categorie":"Alchimie","rarete":"Commune"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1669734708526,"modifiedTime":1670621588440,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
||||||
|
{"name":"Mercureuil","type":"faune","img":"systems/foundryvtt-reve-de-dragon/icons/faune/andurak.webp","system":{"description":"<p>Mercureuil. Forêt, 20 kg, 50 sust. Petit cervidé au pelage gris clair à reflets métalliques, cousin du chevreuil. Le mercureuil est d’une rapidité inouïe quand il détale, à tel point que prédateurs et chasseurs necherchent même pas à le rattraper quandils n’ont pas réussi à le surprendre au dé-part. On l’appelle parfois « vif-argent ».</p>","descriptionmj":"","encombrement":10,"quantite":1,"qualite":0,"cout":0,"milieu":"Forêts","environnement":[{"milieu":"Forêts","rarete":"Rare","frequence":6}],"sust":50,"exotisme":0,"categorie":"","actor":{"id":"","pack":"","name":""}},"effects":[],"flags":{"core":{"sourceId":"Item.LU5eutNQqwm52oOG"}},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1670580597921,"modifiedTime":1670621588440,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"_id":"kOeEn53AidfvJmIG","folder":null,"sort":0,"ownership":{"default":0,"jtRmvSuwkwMmIMf0":3}}
|
||||||
|
{"name":"Boralm","type":"ingredient","img":"systems/foundryvtt-reve-de-dragon/icons/objets/boralm.webp","effects":[],"flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.equipement.0ylGrNMzulUaKFP9"}},"system":{"description":"<p>Poudre brune apparaissant sur les parois des grottes.</p>\n<p>VUE/Alchimie à -1.</p>","descriptionmj":"","encombrement":0.001,"quantite":1,"qualite":0,"cout":0.03,"milieu":"Cavernes","environnement":[{"milieu":"Sous-sols","rarete":"Commune","frequence":54}],"sust":0,"exotisme":0,"niveau":0,"base":0,"categorie":"Alchimie","rarete":""},"ownership":{"default":0,"rYShh2P1DNavdoBD":3,"Hp9ImM4o9YRTSdfu":3},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1668808206013,"modifiedTime":1670621588437,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"folder":null,"sort":0,"_id":"kbWKsR0HovidPw6d"}
|
||||||
|
{"name":"Arrache-rêve","type":"ingredient","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.koLhmV2g0Z2tQZiB"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Arrache-r%C3%AAve.webp","effects":[],"_id":"koLhmV2g0Z2tQZiB","system":{"description":"<p>Le plus virulent des champignons vénéneux après l’amanite thanataire, procurant une agonie des plus douloureuses. Ressemble à cette dernière, avec un chapeau en boule au lieu de plat et galbé.</p>\n<p>M6 \\ P 4 rounds \\ D4 \\ -3 \\ Tournegraisse +14, Perle de Bjwal +12.</p>\n<p>Fréquent.</p>","descriptionmj":"","encombrement":0,"quantite":1,"qualite":0,"cout":0,"milieu":"Lieux sombres et humides","environnement":[{"milieu":"Forêts","rarete":"Frequente","frequence":18},{"milieu":"Sous-sols","rarete":"Rare","frequence":6}],"sust":0,"exotisme":0,"niveau":0,"base":0,"categorie":"","rarete":"Frequente"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1669734708527,"modifiedTime":1670621588436,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
||||||
|
{"name":"Sajutte","type":"herbe","flags":{"core":{"sheetClass":"foundryvtt-reve-de-dragon.RdDItemSheet","sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.l5G3NrS8USofuBK8"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Sajutte.webp","effects":[],"_id":"l5G3NrS8USofuBK8","system":{"description":"<p><em style=\"box-sizing: border-box; user-select: text;\">Herbe de repos.</em></p>\n<p>Petite herbe à sève blanche, très poisseuse, poussant aussi bien en forêt qu'en plaine, qu'en marais (Plus rare en montagne).</p>\n<p>Commune.</p>","descriptionmj":"","encombrement":0,"quantite":1,"qualite":0,"cout":0.02,"milieu":"Tous (plus rare en montagne)","environnement":[{"milieu":"Collines","rarete":"Commune","frequence":54},{"milieu":"Cours d'eau","rarete":"Commune","frequence":54},{"milieu":"Déserts","rarete":"Commune","frequence":54},{"milieu":"Forêts","rarete":"Commune","frequence":54},{"milieu":"Marais","rarete":"Commune","frequence":54},{"milieu":"Montagnes","rarete":"Frequente","frequence":18},{"milieu":"Plaines","rarete":"Commune","frequence":54}],"niveau":1,"base":0,"categorie":"Repos","rarete":"Commune"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1669734708527,"modifiedTime":1670621588442,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
||||||
|
{"name":"Corne de rêve","type":"ingredient","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.lDZbDKaPQGvqzK1k"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Corne%20de%20r%C3%AAve.webp","effects":[],"_id":"lDZbDKaPQGvqzK1k","system":{"description":"<p>Champignon en forme de conque violet sombre.</p>\n<p>Rarissime.</p>","descriptionmj":"","encombrement":0.1,"quantite":1,"qualite":0,"cout":0,"milieu":"Lieux sombres et humides","environnement":[{"milieu":"Forêts","rarete":"Rarissime","frequence":3},{"milieu":"Sous-sols","rarete":"Rarissime","frequence":2}],"sust":0,"exotisme":0,"niveau":5,"base":0,"categorie":"Cuisine","rarete":"Rarissime"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1669734708527,"modifiedTime":1670621588438,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
||||||
|
{"name":"Amanite Thanataire","type":"ingredient","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.m01q5bqTSKOJLSkY"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Amanite%20thanataire.webp","effects":[],"_id":"m01q5bqTSKOJLSkY","system":{"description":"<p>L’un des plus beaux, mais également le plus foudroyant des champignons vénéneux. Pied et volve élégamment proportionnés, chapeau arrondi à peine galbé, le tout paré d’une somptueuse teinte blanc argenté parsemée de points noirs.</p>\n<p>M7 \\ P 3 rounds \\ D4 \\ -3 \\ Tournegraisse +12, Perle de Bjwal +10.</p>\n<p>Fréquente.</p>","descriptionmj":"","encombrement":0,"quantite":1,"qualite":0,"cout":0,"milieu":"Lieux sombres et humides","environnement":[{"milieu":"Forêts","rarete":"Frequente","frequence":18},{"milieu":"Sous-sols","rarete":"Rare","frequence":6}],"sust":0,"exotisme":0,"niveau":0,"base":0,"categorie":"","rarete":"Frequente"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1669734708527,"modifiedTime":1670621588436,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
||||||
|
{"name":"Obyssum gris","type":"ingredient","img":"systems/foundryvtt-reve-de-dragon/icons/objets/l_obyssum_gris.webp","effects":[],"flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.equipement.nIOEB0PpMaACqD65"}},"system":{"description":"<p>Plus rare que le vert, poudre grisâtre apparaissant le long de certaines lianes des marais.</p>\n<p>VUE/Alchimie à -4</p>","descriptionmj":"","encombrement":0.001,"quantite":1,"qualite":0,"cout":0.1,"milieu":"Marais","environnement":[{"milieu":"Marais","rarete":"Rare","frequence":12}],"sust":0,"exotisme":0,"niveau":0,"base":0,"categorie":"Alchimie","rarete":""},"ownership":{"default":0,"rYShh2P1DNavdoBD":3,"Hp9ImM4o9YRTSdfu":3},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1668808206114,"modifiedTime":1670621588441,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"folder":null,"sort":0,"_id":"m9ONkzH9KwLk3P3i"}
|
||||||
|
{"name":"Castor","type":"faune","img":"systems/foundryvtt-reve-de-dragon/icons/faune/raton-laveur.webp","system":{"description":"<p>Surtoutrecherché pour sa peau.</p>","descriptionmj":"","encombrement":5,"quantite":1,"qualite":0,"cout":0,"milieu":"Rivages","environnement":[{"milieu":"Cours d'eau","rarete":"Frequente","frequence":18}],"sust":20,"exotisme":0,"categorie":"","actor":{"id":"","pack":"","name":""}},"effects":[],"flags":{"core":{"sourceId":"Item.LU5eutNQqwm52oOG"}},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1670580597921,"modifiedTime":1670621588437,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"_id":"msoR9RkqOQhKVsJa","folder":null,"sort":0,"ownership":{"default":0,"jtRmvSuwkwMmIMf0":3}}
|
||||||
|
{"name":"Héron","type":"faune","img":"systems/foundryvtt-reve-de-dragon/icons/faune/oiseau.webp","system":{"description":"<p>Héron. Rivage, 5 kg, 14 sust.</p>","descriptionmj":"","encombrement":2.5,"quantite":1,"qualite":0,"cout":0,"milieu":"Rivage","environnement":[{"milieu":"Cours d'eau","rarete":"Frequente","frequence":18}],"sust":14,"exotisme":0,"categorie":"","actor":{"id":"","pack":"","name":""}},"effects":[],"flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.muY8ZmwvnfsCrhLi"}},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1670580597921,"modifiedTime":1670621588446,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"_id":"muY8ZmwvnfsCrhLi","folder":null,"sort":0,"ownership":{"default":0,"jtRmvSuwkwMmIMf0":3}}
|
||||||
|
{"name":"Lune de mer","type":"faune","img":"systems/foundryvtt-reve-de-dragon/icons/faune/coquillage-pointe.webp","system":{"description":"<p>Échinoderme de la même famille que l’étoile de mer, mais en forme de croissant de lune. À cuire de préférence dans de l’eau de mer fortement additionnée de vinaigre.</p>","descriptionmj":"","encombrement":0.1,"quantite":1,"qualite":0,"cout":0,"milieu":"","environnement":[{"milieu":"Maritimes","rarete":"Frequente","frequence":18}],"sust":0.1,"exotisme":0,"categorie":"","actor":{"id":"","pack":"","name":""}},"effects":[],"flags":{},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1670616085735,"modifiedTime":1670621588398,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"folder":null,"sort":0,"ownership":{"default":0,"Hp9ImM4o9YRTSdfu":3},"_id":"nWRV7y6qGn9xHzHc"}
|
||||||
|
{"name":"Méritoine","type":"herbe","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.nuOClbQwu6SLucJn"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/M%C3%A9ritoine.webp","effects":[],"_id":"nuOClbQwu6SLucJn","system":{"description":"<p><em>Herbe de soin.</em></p>\n<p>Plante rampante et ramifiée, aux minuscules feuilles vert pâle, s’accrochant aux troncs de certains conifères.</p>\n<p>Fréquente.</p>\n<p> </p>\n<p><em>Voir Les herbes de soin, p100.</em></p>","descriptionmj":"","encombrement":0,"quantite":1,"qualite":0,"cout":0.06,"milieu":"Forêts de conifères","environnement":[{"milieu":"Forêts","rarete":"Frequente","frequence":18},{"milieu":"Montagnes","rarete":"Frequente","frequence":18}],"niveau":3,"base":0,"categorie":"Soin","rarete":"Frequente"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1669734708527,"modifiedTime":1670621588440,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
||||||
|
{"name":"Grognuche","type":"faune","img":"systems/foundryvtt-reve-de-dragon/icons/faune/raton-laveur.webp","system":{"description":"<p>Grognuche. Rivage, 8 kg, 18 sust. La grognuche doit son nom à ses perpétuels<br>grognements d’insatisfaction. C’est un gros raton-laveur à nez de tapir. Surtout<br>recherchée pour sa peau.</p>","descriptionmj":"","encombrement":4,"quantite":1,"qualite":0,"cout":0,"milieu":"Rivage","environnement":[{"milieu":"Forêts","rarete":"Rare","frequence":6}],"sust":18,"exotisme":0,"categorie":"","actor":{"id":"","pack":"","name":""}},"effects":[],"flags":{"core":{"sourceId":"Item.LU5eutNQqwm52oOG"}},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1670580597921,"modifiedTime":1670621588439,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"_id":"oT0Oryp8kUzBIXZN","folder":null,"sort":0,"ownership":{"default":0,"jtRmvSuwkwMmIMf0":3}}
|
||||||
|
{"name":"Daim","type":"faune","img":"systems/foundryvtt-reve-de-dragon/icons/faune/andurak.webp","system":{"description":"<p>Daim. Forêt, 60 kg, 140 sust.</p>","descriptionmj":"","encombrement":30,"quantite":1,"qualite":0,"cout":0,"milieu":"Forêt","environnement":[{"milieu":"Forêts","rarete":"Frequente","frequence":18}],"sust":140,"exotisme":0,"categorie":"","actor":{"id":"","pack":"","name":""}},"effects":[],"flags":{"core":{"sourceId":"Item.LU5eutNQqwm52oOG"}},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1670580597921,"modifiedTime":1670621588438,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"_id":"p8Au8fNL2Lt4DJtb","folder":null,"sort":0,"ownership":{"default":0,"jtRmvSuwkwMmIMf0":3}}
|
||||||
|
{"name":"Hérisson","type":"faune","img":"systems/foundryvtt-reve-de-dragon/icons/faune/rongeur.webp","system":{"description":"<p>Hérisson. Forêt, plaine, 1 kg, 2 sust. Attention, ça pique.</p>","descriptionmj":"","encombrement":0.5,"quantite":1,"qualite":0,"cout":0,"milieu":"Forets","environnement":[{"milieu":"Forêts","rarete":"Commune","frequence":54}],"sust":2,"exotisme":0,"categorie":"","actor":{"id":"","pack":"","name":""}},"effects":[],"flags":{"core":{"sourceId":"Item.LU5eutNQqwm52oOG"}},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1670580597921,"modifiedTime":1670621588439,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"_id":"pMYcfBjUVEv3wP7M","folder":null,"sort":0,"ownership":{"default":0,"jtRmvSuwkwMmIMf0":3}}
|
||||||
|
{"name":"Ossiphage","type":"herbe","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.pa0yqGaJX9x6kvKa"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Ossiphage.webp","effects":[],"_id":"pa0yqGaJX9x6kvKa","system":{"description":"<p>Également appelée <em>suceuse d’os</em>, c’est une liane rampante à feuilles triangulaires de couleur violacée. Chaque feuille est dotée de trois longs piquants, un à chaque pointe de son triangle. Son venin est si foudroyant que la victime n’a souvent pas le temps d’aller bien loin et meurt empêtrée dans la liane. Il arrive que l’on découvre un squelette entier au coeur d’un bouquet d’ossiphage, chaque os maintenu en place par les vrilles de la plante.</p>\n<p>M6 \\ P 3 rounds \\ D4 \\ -5 \\ Perle de Bjwal +10, Huile de Sélikanthe +6.</p>\n<p>Rare.</p>","descriptionmj":"","encombrement":0,"quantite":1,"qualite":0,"cout":0,"milieu":"Forêts","environnement":[{"milieu":"Forêts","rarete":"Rare","frequence":6}],"niveau":0,"base":0,"categorie":"","rarete":"Rare"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1669734708527,"modifiedTime":1670621588442,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
||||||
|
{"name":"Faux murus","type":"herbe","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.q6DoYNlSp6SEr5hj"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Faux%20murus.webp","effects":[],"_id":"q6DoYNlSp6SEr5hj","system":{"description":"<p><em>Herbe de soin.</em></p>\n<p>Variété de murus poussant en prairie de montagne.</p>\n<p>Rare.</p>\n<p> </p>\n<p><em>Voir Les herbes de soin, p100.</em></p>","descriptionmj":"","encombrement":0,"quantite":1,"qualite":0,"cout":0.4,"milieu":"Prairies de montagnes","environnement":[{"milieu":"Montagnes","rarete":"Rare","frequence":6}],"niveau":7,"base":0,"categorie":"Soin","rarete":"Rare"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1669734708527,"modifiedTime":1670621588438,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
||||||
|
{"name":"Ortigal rose","type":"herbe","flags":{"core":{"sheetClass":"foundryvtt-reve-de-dragon.RdDItemSheet","sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.rXGa2Mx1ttMETTXo"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Ortigal%20rose.webp","effects":[],"_id":"rXGa2Mx1ttMETTXo","system":{"description":"<p><em>Herbe de repos.</em></p>\n<p>Variété d'ortigal dont l'extrémité des feuilles est toute piquetée de points roses. Comme les autres ortigals, ne pousse qu'en lieux très humides, principalement en marais.</p>\n<p>Fréquent.</p>","descriptionmj":"","encombrement":0,"quantite":1,"qualite":0,"cout":0.1,"milieu":"Lieux très humides","environnement":[{"milieu":"Cours d'eau","rarete":"Rare","frequence":9},{"milieu":"Marais","rarete":"Frequente","frequence":18}],"niveau":3,"base":0,"categorie":"Repos","rarete":"Frequente"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1669734708528,"modifiedTime":1670621588441,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
||||||
|
{"name":"Clopinette","type":"ingredient","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.rkTRMgL8pFygYagr"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Clopinettes.webp","effects":[],"_id":"rkTRMgL8pFygYagr","system":{"description":"<p>Fruit du clopinier, petit arbuste buissonneux semblable au genêt. Les clopinettes poussent en grappes nombreuses de petites baies rondes d’un blanc presque translucide. Peu juteuses, elles sont d’un goût neutre, non sucré, même pas âpre, et sont d’un pouvoir nutritif ridiculement faible (3 livres pour 1 sust). Poussant de préférence en plaine, y compris à l’abord des villages, elles sont ordinairement dédaignées des autochtones, même des animaux sauvages. On les laisse aux voyageurs. Pour cette raison, elles sont parfois appelées baies des voyageurs.</p>\n<p>Commune.</p>","descriptionmj":"","encombrement":0.01,"quantite":1,"qualite":0,"cout":0,"milieu":"Plaines","environnement":[{"milieu":"Cours d'eau","rarete":"Commune","frequence":108},{"milieu":"Plaines","rarete":"Commune","frequence":108}],"sust":0,"exotisme":0,"niveau":0,"base":0,"categorie":"Cuisine","rarete":"Frequente"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1669734708528,"modifiedTime":1670621588438,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
||||||
|
{"name":"Lièvre de Mars","type":"faune","img":"systems/foundryvtt-reve-de-dragon/icons/faune/lapin.webp","system":{"description":"<p>Lièvre de Mars. Forêt, plaine, 10 kg, 20 sust. Variété de klampin de très grande<br>taille, cet animal adopte un comportement bizarre quand il se sent en danger, notamment en présence de chasseurs. Il peut se dresser sur ses pattes postérieures<br>et tenter de s’éloigner subrepticement à reculons, faire le poirier pour feindre<br>précisément qu’il est un arbre, ou émettre des borborygmes dans lesquels cer-<br>tains ont cru entendre : « Quoi de neuf, docteur ? » L’origine de son nom est un<br>mystère attendu que ce n’est même pas un lièvre pour commencer.</p>","descriptionmj":"","encombrement":5,"quantite":1,"qualite":0,"cout":0,"milieu":"Plaines, Forrets","environnement":[{"milieu":"Forêts","rarete":"Rare","frequence":6},{"milieu":"Plaines","rarete":"Rare","frequence":6}],"sust":20,"exotisme":0,"categorie":"","actor":{"id":"","pack":"","name":""}},"effects":[],"flags":{"core":{"sourceId":"Item.LU5eutNQqwm52oOG"}},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1670580597921,"modifiedTime":1670621588440,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"_id":"tBObmayQYLiSGzYF","folder":null,"sort":0,"ownership":{"default":0,"jtRmvSuwkwMmIMf0":3}}
|
||||||
|
{"name":"Sarcelle","type":"faune","img":"systems/foundryvtt-reve-de-dragon/icons/faune/oiseau.webp","system":{"description":"<p>Sarcelle. Plaine, 300 g, 1 sust.</p>","descriptionmj":"","encombrement":0.15,"quantite":1,"qualite":0,"cout":0,"milieu":"Plaine","environnement":[{"milieu":"Plaines","rarete":"Commune","frequence":71}],"sust":1,"exotisme":0,"categorie":"","actor":{"id":"","pack":"","name":""}},"effects":[],"flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.tYGOEogHcLqNkS4c"}},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1670580597921,"modifiedTime":1670621588446,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"_id":"tYGOEogHcLqNkS4c","folder":null,"sort":0,"ownership":{"default":0,"jtRmvSuwkwMmIMf0":3}}
|
||||||
|
{"name":"Bélidane","type":"herbe","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.vnq7HONrBm90g2gY"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/B%C3%A9lidane.webp","effects":[],"_id":"vnq7HONrBm90g2gY","system":{"description":"<p><em>Herbe de soin.</em></p>\n<p>Herbacée aux feuilles fines et dentelées comme celle de la ciguë. Ne pousse que sur les versants de collines ensoleillées.</p>\n<p>Fréquente.</p>\n<p> </p>\n<p><em>Voir Les herbes de soin, p100.</em></p>","descriptionmj":"","encombrement":0,"quantite":1,"qualite":0,"cout":0.3,"milieu":"Collines ensoleillées","environnement":[{"milieu":"Collines","rarete":"Frequente","frequence":18}],"niveau":6,"base":0,"categorie":"Soin","rarete":"Frequente"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1669734708528,"modifiedTime":1670621588436,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
||||||
|
{"name":"Blèmissure","type":"ingredient","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.wNBWvJSd9i1zHspR"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Bl%C3%A8missure.webp","effects":[],"_id":"wNBWvJSd9i1zHspR","system":{"description":"<p>Champignon affectant la forme d’une éponge, de couleur gris blême, apparaissant sur les troncs des arbres.</p>\n<p>M4 \\ P 1 minute \\ D2 \\ -4 \\ Élixir des Gnomes +14, Huile de Sélikanthe +10.</p>\n<p>Fréquente.</p>","descriptionmj":"","encombrement":0,"quantite":1,"qualite":0,"cout":0,"milieu":"Forêts sombres et humides","environnement":[{"milieu":"Forêts","rarete":"Frequente","frequence":18}],"sust":0,"exotisme":0,"niveau":0,"base":0,"categorie":"","rarete":"Frequente"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1669734708528,"modifiedTime":1670621588437,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
||||||
|
{"name":"Bécasse","type":"faune","img":"systems/foundryvtt-reve-de-dragon/icons/faune/oie.webp","system":{"description":"<p>Bécasse. Plaine, 400 g, 1 sust.</p>","descriptionmj":"","encombrement":0.2,"quantite":1,"qualite":0,"cout":0,"milieu":"Plaine","environnement":[{"milieu":"Plaines","rarete":"Frequente","frequence":15}],"sust":1,"exotisme":0,"categorie":"","actor":{"id":"","pack":"","name":""}},"effects":[],"flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.wWdH55gh9ErhJGgt"}},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1670580597921,"modifiedTime":1670621588446,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"_id":"wWdH55gh9ErhJGgt","folder":null,"sort":0,"ownership":{"default":0,"jtRmvSuwkwMmIMf0":3}}
|
||||||
|
{"name":"Ortigal glauque","type":"herbe","img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Ortigal%20noir.webp","system":{"description":"","descriptionmj":"","encombrement":0,"quantite":1,"qualite":0,"cout":0,"milieu":"Plante aquatique","environnement":[{"milieu":"Cours d'eau","rarete":"Frequente","frequence":27},{"milieu":"Marais","rarete":"Commune","frequence":54}],"niveau":0,"base":0,"categorie":"Alchimie"},"effects":[],"flags":{"core":{"sourceId":"Item.wjvaEK4Bq2TwKCFH"}},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1670017184070,"modifiedTime":1670621588441,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"_id":"wjvaEK4Bq2TwKCFH","folder":null,"sort":0,"ownership":{"default":0,"Hp9ImM4o9YRTSdfu":3}}
|
||||||
|
{"name":"Herbe de lune","type":"herbe","flags":{"core":{"sheetClass":"foundryvtt-reve-de-dragon.RdDItemSheet","sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.x4wGXTdmrzaOn8Sh"}},"img":"systems/foundryvtt-reve-de-dragon/icons/botanique/Herbe%20de%20lune.webp","effects":[],"_id":"x4wGXTdmrzaOn8Sh","system":{"description":"<p>Petite herbacée aux feuilles en forme de polygone à 7 côtés, d’un bleu très pâle, presque translucide, ne poussant qu’en haute montagne, à partir de 2000 mètres, et uniquement dans les recoins pouvant être éclairés par la lune. <br /><br />L’herbe de lune possède un fort pouvoir onirique sur celui qui la consomme\"; en termes de jeu, elle permet de gagner des points de rêve. Elle doit être cueillie de nuit et lorsque la lune l’éclaire, faute de quoi son pouvoir est nul. Sa force dépend de la phase lunaire durant laquelle elle est cueillie. <br /><br />Une fois séchée, l’herbe de lune peut être fumée dans une pipe ou préparée en décoction. Dans les deux cas, une dose doit être composée de 7 brins. Dès la dose absorbée (bue ou fumée), le consommateur doit jouer un JR r-force, c’est-à-dire un jet de points de rêve ajusté négativement à la force de l’herbe. Si le JR réussit, aucun effet ne se produit\"; s’il échoue, le consommateur gagne immédiatement un nombre de points de rêve égal à la force de l’herbe, puis en échange, marque un nombre identique de points de fatigue. On peut ainsi gagner des points de rêve même si le seuil de rêve est dépassé, mais se souvenir que dépasser le triple de son seuil provoque l’éclatement. <br /><br />L’herbe de lune est parfois trouvable chez les herboristes, mais n’est pas bon marché. Une dose (7 brins) vaut usuellement un nombre de sols égal à sa force. Une dose de force 6 vaut ainsi 6 sols. <br />Rare.</p>","descriptionmj":"","encombrement":0,"quantite":1,"qualite":0,"cout":null,"milieu":"Hautes montagnes","environnement":[{"milieu":"Montagnes","rarete":"Rare","frequence":6}],"niveau":null,"base":0,"categorie":"","rarete":"Rare"},"ownership":{"default":0,"rYShh2P1DNavdoBD":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1669734708528,"modifiedTime":1670621588439,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
||||||
|
{"name":"Corbeau","type":"faune","img":"systems/foundryvtt-reve-de-dragon/icons/faune/oiseau.webp","system":{"description":"<p>Corbeau. Plaine, 4 kg, 8 sust.</p>","descriptionmj":"","encombrement":2,"quantite":1,"qualite":0,"cout":0,"milieu":"Plaine","environnement":[{"milieu":"Plaines","rarete":"Commune","frequence":71}],"sust":8,"exotisme":0,"categorie":"","actor":{"id":"","pack":"","name":""}},"effects":[],"flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.faune-flore-mineraux.ySY57JWhYS7PWBXv"}},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.3.9","coreVersion":"10.291","createdTime":1670580597921,"modifiedTime":1670621588446,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"_id":"ySY57JWhYS7PWBXv","folder":null,"sort":0,"ownership":{"default":0,"jtRmvSuwkwMmIMf0":3}}
|
||||||
|
|||||||
@@ -31,12 +31,12 @@
|
|||||||
:root {
|
:root {
|
||||||
/* =================== 1. ACTOR SHEET FONT STYLES =========== */
|
/* =================== 1. ACTOR SHEET FONT STYLES =========== */
|
||||||
--window-header-title-font-family: CaslonAntique;
|
--window-header-title-font-family: CaslonAntique;
|
||||||
--window-header-title-font-size: 1.5rem;
|
--window-header-title-font-size: 1.6rem;
|
||||||
--window-header-title-font-weight: normal;
|
--window-header-title-font-weight: normal;
|
||||||
--window-header-title-color: #f5f5f5;
|
--window-header-title-color: #f5f5f5;
|
||||||
|
|
||||||
--major-button-font-family: CaslonAntique;
|
--major-button-font-family: CaslonAntique;
|
||||||
--major-button-font-size: 1.25rem;
|
--major-button-font-size: 1.4rem;
|
||||||
--major-button-font-weight: normal;
|
--major-button-font-weight: normal;
|
||||||
--major-button-color: #dadada;
|
--major-button-color: #dadada;
|
||||||
|
|
||||||
@@ -81,6 +81,7 @@
|
|||||||
--background-custom-button: linear-gradient(to bottom, rgba(33, 55, 74, 0.988) 5%, rgba(21, 40, 51, 0.671) 100%);
|
--background-custom-button: linear-gradient(to bottom, rgba(33, 55, 74, 0.988) 5%, rgba(21, 40, 51, 0.671) 100%);
|
||||||
--background-custom-button-hover: linear-gradient(to bottom, rgb(128, 0, 0) 5%, rgb(62, 1, 1) 100%);
|
--background-custom-button-hover: linear-gradient(to bottom, rgb(128, 0, 0) 5%, rgb(62, 1, 1) 100%);
|
||||||
--background-tooltip: rgba(220,220,210,0.95);
|
--background-tooltip: rgba(220,220,210,0.95);
|
||||||
|
--background-error:hsla(16, 100%, 50%, 0.8);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*@import url("https://fonts.googleapis.com/css2?family=Martel:wght@400;800&family=Roboto:wght@300;400;500&display=swap");*/
|
/*@import url("https://fonts.googleapis.com/css2?family=Martel:wght@400;800&family=Roboto:wght@300;400;500&display=swap");*/
|
||||||
@@ -88,7 +89,7 @@
|
|||||||
.window-app {
|
.window-app {
|
||||||
font-family: CaslonAntique;
|
font-family: CaslonAntique;
|
||||||
text-align: justify;
|
text-align: justify;
|
||||||
font-size: 16px;
|
font-size: 1rem;
|
||||||
letter-spacing: 1px;
|
letter-spacing: 1px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -116,7 +117,11 @@ select, button, .item-checkbox, #sidebar, #players, #navigation #nav-toggle {
|
|||||||
padding: 0;
|
padding: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.strong-text{
|
section.window-content div.dialog-buttons {
|
||||||
|
margin-top: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.strong-text {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
i:is(.fas, .far) {
|
i:is(.fas, .far) {
|
||||||
@@ -199,7 +204,7 @@ i:is(.fas, .far) {
|
|||||||
|
|
||||||
/* =================== Navigation ============ */
|
/* =================== Navigation ============ */
|
||||||
.sheet nav.sheet-tabs {
|
.sheet nav.sheet-tabs {
|
||||||
font-size: 0.65rem;
|
font-size: 0.7rem;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
height: 4rem;
|
height: 4rem;
|
||||||
flex: 0 0 4rem;
|
flex: 0 0 4rem;
|
||||||
@@ -360,9 +365,21 @@ table {border: 1px solid #7a7971;}
|
|||||||
justify-content: center;
|
justify-content: center;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
}
|
}
|
||||||
|
.equipement-valeur {
|
||||||
|
margin: 0;
|
||||||
|
flex-grow: 1.5;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
.equipement-detail {
|
.equipement-detail {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
flex: 'flex-shrink' ;
|
flex-grow: 1;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.equipement-button {
|
||||||
|
margin: 0;
|
||||||
|
flex-grow: 0.5;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
@@ -618,13 +635,13 @@ input:is(.blessure-premiers_soins, .blessure-soins_complets) {
|
|||||||
opacity: 0.7 ;
|
opacity: 0.7 ;
|
||||||
}
|
}
|
||||||
|
|
||||||
.rdddialog .dialog-roll-sort {
|
.rdd-roll-dialog .description-sort {
|
||||||
width: 600px;
|
max-width: 550px;
|
||||||
height: 430px;
|
|
||||||
z-index: 9999;
|
|
||||||
display: block;
|
|
||||||
}
|
}
|
||||||
.rdd-roll-part{
|
.rdd-roll-dialog div.dialog-content input {
|
||||||
|
font-size: 1rem;
|
||||||
|
}
|
||||||
|
.rdd-roll-part {
|
||||||
align-items: center;
|
align-items: center;
|
||||||
border-radius: 6px; padding: 3px;
|
border-radius: 6px; padding: 3px;
|
||||||
background: var(--gradient-gold);
|
background: var(--gradient-gold);
|
||||||
@@ -655,10 +672,12 @@ input:is(.blessure-premiers_soins, .blessure-soins_complets) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.rdd-niveau-requis{
|
.rdd-niveau-requis{
|
||||||
font-size: 0.80rem;
|
font-size: 0.8rem;
|
||||||
text-align: right;
|
text-align: right;
|
||||||
}
|
}
|
||||||
|
.placeholder-ajustements {
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
.table-resolution-carac {
|
.table-resolution-carac {
|
||||||
background-color: yellow;
|
background-color: yellow;
|
||||||
}
|
}
|
||||||
@@ -668,17 +687,17 @@ input:is(.blessure-premiers_soins, .blessure-soins_complets) {
|
|||||||
background-color: lightblue;
|
background-color: lightblue;
|
||||||
}
|
}
|
||||||
|
|
||||||
#tableProbaReussite{
|
div.placeholder-resolution span.table-proba-reussite{
|
||||||
font-size: 0.8rem;
|
font-size: 0.8rem;
|
||||||
padding: 5px;
|
padding: 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.poesie-extrait {
|
.poesie-extrait {
|
||||||
font-size: 0.85rem;
|
font-size: 0.9rem;
|
||||||
font-style: italic;
|
font-style: italic;
|
||||||
}
|
}
|
||||||
.poesie-reference{
|
.poesie-reference{
|
||||||
font-size: 0.70rem;
|
font-size: 0.7rem;
|
||||||
text-align: right;
|
text-align: right;
|
||||||
}
|
}
|
||||||
.poesie-overflow {
|
.poesie-overflow {
|
||||||
@@ -694,7 +713,7 @@ input:is(.blessure-premiers_soins, .blessure-soins_complets) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.type-compendium{
|
.type-compendium{
|
||||||
font-size: 0.60rem;
|
font-size: 0.6rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ======================================== */
|
/* ======================================== */
|
||||||
@@ -873,6 +892,11 @@ ul, li {
|
|||||||
background: rgb(160, 130, 100, 0.05);
|
background: rgb(160, 130, 100, 0.05);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
input.attribute-value.field-error ,
|
||||||
|
.list-item span.field-error {
|
||||||
|
background-color: var(--background-error);
|
||||||
|
}
|
||||||
|
|
||||||
ul.chat-list {
|
ul.chat-list {
|
||||||
margin-left: 0.8rem;
|
margin-left: 0.8rem;
|
||||||
list-style: inside;
|
list-style: inside;
|
||||||
@@ -1010,6 +1034,9 @@ ul.list-item-margin6 li {
|
|||||||
flex-grow: 0;
|
flex-grow: 0;
|
||||||
flex-basis: 1;
|
flex-basis: 1;
|
||||||
}
|
}
|
||||||
|
div.competence-column div.categorie-competence{
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
.competence-header {
|
.competence-header {
|
||||||
align-content: flex-start;
|
align-content: flex-start;
|
||||||
justify-content: flex-start;
|
justify-content: flex-start;
|
||||||
@@ -1088,7 +1115,7 @@ ul.list-item-margin6 li {
|
|||||||
/* ======================================== */
|
/* ======================================== */
|
||||||
.table-nombres-astraux {
|
.table-nombres-astraux {
|
||||||
border:1;
|
border:1;
|
||||||
font-size: 0.75rem;
|
font-size: 0.8rem;
|
||||||
}
|
}
|
||||||
.table-nombres-astraux td {
|
.table-nombres-astraux td {
|
||||||
border: 1px solid black;
|
border: 1px solid black;
|
||||||
@@ -1130,7 +1157,7 @@ ul.list-item-margin6 li {
|
|||||||
margin-left: 8px;
|
margin-left: 8px;
|
||||||
}
|
}
|
||||||
.rdd-hud-menu label {
|
.rdd-hud-menu label {
|
||||||
font-size: 0.75rem;
|
font-size: 0.8rem;
|
||||||
}
|
}
|
||||||
#token-hud .status-effects.active{
|
#token-hud .status-effects.active{
|
||||||
z-index: 2;
|
z-index: 2;
|
||||||
@@ -1430,8 +1457,8 @@ ul.list-item-margin6 li {
|
|||||||
font-family: "GoudyAcc";
|
font-family: "GoudyAcc";
|
||||||
color: #CCC;
|
color: #CCC;
|
||||||
opacity: 90;
|
opacity: 90;
|
||||||
font-size: 13px;
|
font-size: 0.9rem;
|
||||||
line-height: 1;
|
line-height: 1px;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
@@ -1597,7 +1624,7 @@ ul.list-item-margin6 li {
|
|||||||
.calendar-time{
|
.calendar-time{
|
||||||
grid-column: 1;
|
grid-column: 1;
|
||||||
grid-row: 2;
|
grid-row: 2;
|
||||||
font-size: 1.10rem;
|
font-size: 1.1rem;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
margin: auto;
|
margin: auto;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
@@ -1606,7 +1633,7 @@ ul.list-item-margin6 li {
|
|||||||
.calendar-nombre-astral{
|
.calendar-nombre-astral{
|
||||||
grid-column: 2;
|
grid-column: 2;
|
||||||
grid-row: 2;
|
grid-row: 2;
|
||||||
font-size: 1.10rem;
|
font-size: 1.1rem;
|
||||||
text-align: right;
|
text-align: right;
|
||||||
margin: auto;
|
margin: auto;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
@@ -1699,7 +1726,7 @@ display: inline-flex;
|
|||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
color: #ffffff;
|
color: #ffffff;
|
||||||
font-family: CaslonPro;
|
font-family: CaslonPro;
|
||||||
font-size: 14px;
|
font-size: 0.9rem;
|
||||||
padding: 4px 12px 0px 12px;
|
padding: 4px 12px 0px 12px;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
text-shadow: 0px 1px 0px #4d3534;
|
text-shadow: 0px 1px 0px #4d3534;
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"id": "foundryvtt-reve-de-dragon",
|
"id": "foundryvtt-reve-de-dragon",
|
||||||
"title": "Rêve de Dragon",
|
"title": "Rêve de Dragon",
|
||||||
"version": "10.3.5",
|
"version": "10.3.13",
|
||||||
"download": "https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/archive/foundryvtt-reve-de-dragon-10.3.5.zip",
|
"download": "https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/archive/foundryvtt-reve-de-dragon-10.3.13.zip",
|
||||||
"manifest": "https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/raw/v10/system.json",
|
"manifest": "https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/raw/v10/system.json",
|
||||||
"compatibility": {
|
"compatibility": {
|
||||||
"minimum": "10",
|
"minimum": "10",
|
||||||
|
|||||||
@@ -595,6 +595,10 @@
|
|||||||
"environnement": {
|
"environnement": {
|
||||||
"milieu": "",
|
"milieu": "",
|
||||||
"environnement": []
|
"environnement": []
|
||||||
|
},
|
||||||
|
"comestible": {
|
||||||
|
"sust": 0,
|
||||||
|
"exotisme": 0
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"competence": {
|
"competence": {
|
||||||
@@ -699,13 +703,12 @@
|
|||||||
"templates": [ "description", "inventaire" ]
|
"templates": [ "description", "inventaire" ]
|
||||||
},
|
},
|
||||||
"nourritureboisson": {
|
"nourritureboisson": {
|
||||||
"templates": [ "description", "inventaire" ],
|
"templates": [ "description", "inventaire", "comestible"],
|
||||||
|
"cuisinier": "",
|
||||||
"boisson": false,
|
"boisson": false,
|
||||||
"desaltere": 0,
|
"desaltere": 0,
|
||||||
"alcoolise": false,
|
"alcoolise": false,
|
||||||
"force": 0,
|
"force": 0
|
||||||
"sust": 0,
|
|
||||||
"exotisme": 0
|
|
||||||
},
|
},
|
||||||
"herbe": {
|
"herbe": {
|
||||||
"templates": [ "description", "inventaire", "environnement"],
|
"templates": [ "description", "inventaire", "environnement"],
|
||||||
@@ -714,17 +717,14 @@
|
|||||||
"categorie": ""
|
"categorie": ""
|
||||||
},
|
},
|
||||||
"ingredient": {
|
"ingredient": {
|
||||||
"templates": [ "description", "inventaire", "environnement" ],
|
"templates": [ "description", "inventaire", "environnement", "comestible"],
|
||||||
"niveau": 0,
|
"niveau": 0,
|
||||||
"base": 0,
|
"base": 0,
|
||||||
"sust": 0,
|
|
||||||
"exotisme": 0,
|
|
||||||
"categorie": ""
|
"categorie": ""
|
||||||
},
|
},
|
||||||
"faune": {
|
"faune": {
|
||||||
"templates": [ "description", "inventaire", "environnement"],
|
"templates": [ "description", "inventaire", "environnement", "comestible"],
|
||||||
"sust": 0,
|
"categorie": "",
|
||||||
"exotisme": 0,
|
|
||||||
"actor": {
|
"actor": {
|
||||||
"id": "",
|
"id": "",
|
||||||
"pack": "",
|
"pack": "",
|
||||||
|
|||||||
@@ -50,29 +50,28 @@
|
|||||||
{{!-- Compétences Tab --}}
|
{{!-- Compétences Tab --}}
|
||||||
<div class="tab competences" data-group="primary" data-tab="competences">
|
<div class="tab competences" data-group="primary" data-tab="competences">
|
||||||
<div class="flexrow">
|
<div class="flexrow">
|
||||||
<span><a class="vue-detaillee">
|
{{>"systems/foundryvtt-reve-de-dragon/templates/actor/vue-detaillee.html"}}
|
||||||
<i class="fas {{#if options.vueDetaillee}}fa-eye-slash{{else}}fa-eye{{/if}}"></i>
|
<span class="flexrow"><a class="show-hide-competences">
|
||||||
{{#if options.vueDetaillee}}Vue simplifiée{{else}}Vue détaillée{{/if}}</a>
|
{{#if options.showCompNiveauBase}}
|
||||||
</span>
|
<i class="fa-regular fa-filter-slash"></i> Montrer tout
|
||||||
<span><a class="show-hide-competences"><img class="small-button-container"
|
{{else}}
|
||||||
src="systems/foundryvtt-reve-de-dragon/icons/{{#if options.showCompNiveauBase}}no-filter.svg{{else}}filter.svg{{/if}}" alt="filter/montrer tout">
|
<i class="fa-regular fa-filter"></i> Filtrer
|
||||||
{{#if options.showCompNiveauBase}}Montrer tout{{else}}Filtrer{{/if}}</a>
|
{{/if}}
|
||||||
</span>
|
</a></span>
|
||||||
<span class="flexrow">
|
<span>
|
||||||
<input class="recherche flex-grow" type="text" value="{{options.recherche.text}}" name="recherche"
|
<input class="recherche flex-grow" type="text" value="{{options.recherche.text}}" name="recherche" size="8" data-dtype="String" placeholder=""/>
|
||||||
size="8" data-dtype="String" placeholder=""/>
|
|
||||||
</span>
|
</span>
|
||||||
<span>
|
<span>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="grid grid-2col">
|
<div class="grid grid-2col">
|
||||||
<div class="flex-group-left flexcol competence-column">
|
<div class="competence-column">
|
||||||
{{> "systems/foundryvtt-reve-de-dragon/templates/actor/competence-categorie.html" competences=(filtreTriCompetences byCateg.generale) categorie="Compétences générales"}}
|
{{> "systems/foundryvtt-reve-de-dragon/templates/actor/competence-categorie.html" competences=(filtreTriCompetences byCateg.generale) categorie="Compétences générales"}}
|
||||||
{{> "systems/foundryvtt-reve-de-dragon/templates/actor/competence-categorie.html" competences=(filtreTriCompetences byCateg.particuliere) categorie="Compétences Particulières"}}
|
{{> "systems/foundryvtt-reve-de-dragon/templates/actor/competence-categorie.html" competences=(filtreTriCompetences byCateg.particuliere) categorie="Compétences Particulières"}}
|
||||||
{{> "systems/foundryvtt-reve-de-dragon/templates/actor/competence-categorie.html" competences=(filtreTriCompetences byCateg.specialisee) categorie="Compétences Spécialisées"}}
|
{{> "systems/foundryvtt-reve-de-dragon/templates/actor/competence-categorie.html" competences=(filtreTriCompetences byCateg.specialisee) categorie="Compétences Spécialisées"}}
|
||||||
</div>
|
</div>
|
||||||
|
<div class="competence-column">
|
||||||
<div class="flex-group-left flexcol competence-column">
|
{{> "systems/foundryvtt-reve-de-dragon/templates/actor/xp-competences.html"}}
|
||||||
{{> "systems/foundryvtt-reve-de-dragon/templates/actor/competence-categorie.html" competences=(filtreTriCompetences byCateg.melee) categorie="Compétences de Mêlée"}}
|
{{> "systems/foundryvtt-reve-de-dragon/templates/actor/competence-categorie.html" competences=(filtreTriCompetences byCateg.melee) categorie="Compétences de Mêlée"}}
|
||||||
{{> "systems/foundryvtt-reve-de-dragon/templates/actor/competence-categorie.html" competences=(filtreTriCompetences byCateg.tir) categorie="Compétences de Tir"}}
|
{{> "systems/foundryvtt-reve-de-dragon/templates/actor/competence-categorie.html" competences=(filtreTriCompetences byCateg.tir) categorie="Compétences de Tir"}}
|
||||||
{{> "systems/foundryvtt-reve-de-dragon/templates/actor/competence-categorie.html" competences=(filtreTriCompetences byCateg.lancer) categorie="Compétences de Lancer"}}
|
{{> "systems/foundryvtt-reve-de-dragon/templates/actor/competence-categorie.html" competences=(filtreTriCompetences byCateg.lancer) categorie="Compétences de Lancer"}}
|
||||||
@@ -80,7 +79,6 @@
|
|||||||
{{#if (or system.attributs.hautrevant.value options.vueDetaillee)}}
|
{{#if (or system.attributs.hautrevant.value options.vueDetaillee)}}
|
||||||
{{> "systems/foundryvtt-reve-de-dragon/templates/actor/competence-categorie.html" competences=(filtreTriCompetences byCateg.draconic) categorie="Draconic"}}
|
{{> "systems/foundryvtt-reve-de-dragon/templates/actor/competence-categorie.html" competences=(filtreTriCompetences byCateg.draconic) categorie="Draconic"}}
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{> "systems/foundryvtt-reve-de-dragon/templates/actor/xp-competences.html"}}
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
<h3>Astrologie</h3>
|
<h3>Astrologie</h3>
|
||||||
<span class="astrologie-label"><a id="jet-astrologie">Astrologie : Nombres Astraux</a></span>
|
<span class="astrologie-label"><a name="jet-astrologie">Astrologie : Nombres Astraux</a></span>
|
||||||
|
|||||||
@@ -1,12 +1,13 @@
|
|||||||
{{#if competences}}
|
{{#if competences}}
|
||||||
<div class="flex-shrink">
|
<div class="flex-shrink categorie-competence">
|
||||||
<header class="competence-header flexrow">
|
|
||||||
<span class="competence-title">{{categorie}}</span>
|
|
||||||
</header>
|
|
||||||
<ul class="item-list alterne-list competence-list">
|
<ul class="item-list alterne-list competence-list">
|
||||||
{{#if @root.options.vueDetaillee}}
|
|
||||||
<li class="item flexrow list-item ">
|
<li class="item flexrow list-item ">
|
||||||
<span class="competence-label"></span>
|
<span>
|
||||||
|
<header class="competence-header flexrow">
|
||||||
|
<span class="competence-title">{{categorie}}</span>
|
||||||
|
</header>
|
||||||
|
</span>
|
||||||
|
{{#if @root.options.vueDetaillee}}
|
||||||
<span class="competence-value" >Niv.</span>
|
<span class="competence-value" >Niv.</span>
|
||||||
<span class="competence-xp">xp</span>
|
<span class="competence-xp">xp</span>
|
||||||
{{#if (eq categorie 'Draconic')}}
|
{{#if (eq categorie 'Draconic')}}
|
||||||
@@ -20,11 +21,12 @@
|
|||||||
<i class="far fa-trash"></i>
|
<i class="far fa-trash"></i>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
</div>
|
</div>
|
||||||
|
{{/if}}
|
||||||
</li>
|
</li>
|
||||||
{{/if}}
|
|
||||||
{{#each competences as |comp key|}}
|
{{#each competences as |comp key|}}
|
||||||
{{> "systems/foundryvtt-reve-de-dragon/templates/actor/competence.html" comp}}
|
{{> "systems/foundryvtt-reve-de-dragon/templates/actor/competence.html" comp}}
|
||||||
{{/each}}
|
{{/each}}
|
||||||
|
<li></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<li class="item flexrow" data-attribute={{key}} data-item-id="{{queue._id}}">
|
<li class="item flexrow" data-attribute={{key}} data-item-id="{{queue._id}}">
|
||||||
<img class="sheet-competence-img" src="{{queue.img}}" />
|
<img class="sheet-competence-img" src="{{queue.img}}" />
|
||||||
<span class="display-label flex-grow">
|
<span class="item-edit flex-grow">
|
||||||
{{#if (eq queue.type 'ombre')}}
|
{{#if (eq queue.type 'ombre')}}
|
||||||
<img class="sheet-competence-img" src="systems/foundryvtt-reve-de-dragon/icons/competence_thanatos.webp" />
|
<img class="sheet-competence-img" src="systems/foundryvtt-reve-de-dragon/icons/competence_thanatos.webp" />
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
{{#each souffles as |souffle key|}}
|
{{#each souffles as |souffle key|}}
|
||||||
<li class="item flexrow" data-attribute={{key}} data-item-id="{{souffle._id}}">
|
<li class="item flexrow" data-attribute={{key}} data-item-id="{{souffle._id}}">
|
||||||
<img class="sheet-competence-img" src="{{souffle.img}}" />
|
<img class="sheet-competence-img" src="{{souffle.img}}" />
|
||||||
<span class="display-label flex-grow"><a>{{souffle.name}}</a></span>
|
<span class="item-edit flex-grow"><a>{{souffle.name}}</a></span>
|
||||||
<div class="item-controls flex-shrink">
|
<div class="item-controls flex-shrink">
|
||||||
<a class="item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
|
<a class="item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
{{#each tetes as |tete key|}}
|
{{#each tetes as |tete key|}}
|
||||||
<li class="item flexrow" data-attribute={{key}} data-item-id="{{tete._id}}">
|
<li class="item flexrow" data-attribute={{key}} data-item-id="{{tete._id}}">
|
||||||
<img class="sheet-competence-img" src="{{tete.img}}" />
|
<img class="sheet-competence-img" src="{{tete.img}}" />
|
||||||
<span class="display-label flex-grow"><a>{{tete.name}}</a></span>
|
<span class="item-edit flex-grow"><a>{{tete.name}}</a></span>
|
||||||
<div class="item-controls flex-shrink">
|
<div class="item-controls flex-shrink">
|
||||||
<a class="item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
|
<a class="item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -23,7 +23,7 @@
|
|||||||
<span class="tooltiptext ttt-fatigue">{{{calc.fatigue.html}}}</span>
|
<span class="tooltiptext ttt-fatigue">{{{calc.fatigue.html}}}</span>
|
||||||
Fatigue
|
Fatigue
|
||||||
<a class="fatigue-moins"><i class="fas fa-minus-square"></i></a>
|
<a class="fatigue-moins"><i class="fas fa-minus-square"></i></a>
|
||||||
<input class="resource-content" id="fatigue-value" type="text" name="system.sante.fatigue.value" value="{{system.sante.fatigue.value}}" data-dtype="Number" />
|
<input class="resource-content" type="text" name="system.sante.fatigue.value" value="{{system.sante.fatigue.value}}" data-dtype="Number" />
|
||||||
<span>/ {{system.sante.fatigue.max}}</span>
|
<span>/ {{system.sante.fatigue.max}}</span>
|
||||||
<a class="fatigue-plus"><i class="fas fa-plus-square"></i></a>
|
<a class="fatigue-plus"><i class="fas fa-plus-square"></i></a>
|
||||||
</label>
|
</label>
|
||||||
@@ -32,7 +32,7 @@
|
|||||||
<label class="compteur">
|
<label class="compteur">
|
||||||
<span class="ptreve-actuel"><a>Rêve</a></span>
|
<span class="ptreve-actuel"><a>Rêve</a></span>
|
||||||
<a class="ptreve-actuel-moins"><i class="fas fa-minus-square"></i></a>
|
<a class="ptreve-actuel-moins"><i class="fas fa-minus-square"></i></a>
|
||||||
<input class="resource-content" id="pointsreve-value" type="text" name="system.reve.reve.value" value="{{system.reve.reve.value}}" data-dtype="Number" />
|
<input class="resource-content" class="pointsreve-value" type="text" name="system.reve.reve.value" value="{{system.reve.reve.value}}" data-dtype="Number" />
|
||||||
<span>/ {{system.reve.seuil.value}}</span>
|
<span>/ {{system.reve.seuil.value}}</span>
|
||||||
<a class="ptreve-actuel-plus"><i class="fas fa-plus-square"></i></a>
|
<a class="ptreve-actuel-plus"><i class="fas fa-plus-square"></i></a>
|
||||||
</label>
|
</label>
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
{{#each casestmr as |casetmr key|}}
|
{{#each casestmr as |casetmr key|}}
|
||||||
<li class="item list-item flexrow" data-item-id="{{casetmr.id}}" data-attribute="{{key}}">
|
<li class="item list-item flexrow" data-item-id="{{casetmr.id}}" data-attribute="{{key}}">
|
||||||
<img class="sheet-competence-img" src="{{casetmr.img}}" />
|
<img class="sheet-competence-img" src="{{casetmr.img}}" />
|
||||||
<span class="display-label"><a>{{casetmr.name}}</a></span>
|
<span class="item-edit"><a>{{casetmr.name}}</a></span>
|
||||||
<span>{{casetmr.system.coord}} - {{caseTmr-label casetmr.system.coord}}</span>
|
<span>{{casetmr.system.coord}} - {{caseTmr-label casetmr.system.coord}}</span>
|
||||||
<div class="item-controls flex-shrink">
|
<div class="item-controls flex-shrink">
|
||||||
<a class="item-delete" title="Supprimer"><i class="fas fa-trash"></i></a>
|
<a class="item-delete" title="Supprimer"><i class="fas fa-trash"></i></a>
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
{{#each rencontres as |rencontre key|}}
|
{{#each rencontres as |rencontre key|}}
|
||||||
<li class="item flexrow" data-item-id="{{rencontre._id}}" data-attribute="{{key}}">
|
<li class="item flexrow" data-item-id="{{rencontre._id}}" data-attribute="{{key}}">
|
||||||
<img class="sheet-competence-img" src="{{rencontre.img}}" />
|
<img class="sheet-competence-img" src="{{rencontre.img}}" />
|
||||||
<span class="display-label flex-grow"><a>
|
<span class="item-edit flex-grow"><a>
|
||||||
{{rencontre.name}} r{{rencontre.system.force}} ({{rencontre.system.coord}} - {{caseTmr-label rencontre.system.coord}})
|
{{rencontre.name}} r{{rencontre.system.force}} ({{rencontre.system.coord}} - {{caseTmr-label rencontre.system.coord}})
|
||||||
</a></span>
|
</a></span>
|
||||||
{{#if rencontre.system.date}}
|
{{#if rencontre.system.date}}
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
{{#each signesdraconiques as |signe key|}}
|
{{#each signesdraconiques as |signe key|}}
|
||||||
<li class="item list-item flexrow" data-item-id="{{signe._id}}" data-attribute="{{key}}">
|
<li class="item list-item flexrow" data-item-id="{{signe._id}}" data-attribute="{{key}}">
|
||||||
<img class="sheet-competence-img" src="{{signe.img}}" />
|
<img class="sheet-competence-img" src="{{signe.img}}" />
|
||||||
<span class="display-label flex-grow"><a>{{signe.name}}</a></span>
|
<span class="item-edit flex-grow"><a>{{signe.name}}</a></span>
|
||||||
<span class="flex-shrink">{{signe.system.difficulte}}</span>
|
<span class="flex-shrink">{{signe.system.difficulte}}</span>
|
||||||
<div class="item-controls flex-shrink">
|
<div class="item-controls flex-shrink">
|
||||||
<a class="item-delete" title="Supprimer"><i class="fas fa-trash"></i></a>
|
<a class="item-delete" title="Supprimer"><i class="fas fa-trash"></i></a>
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
{{#each sortsReserve as |sort key|}}
|
{{#each sortsReserve as |sort key|}}
|
||||||
<li class="item list-item flexrow" data-item-id="{{sort._id}}" data-attribute="{{key}}">
|
<li class="item list-item flexrow" data-item-id="{{sort._id}}" data-attribute="{{key}}">
|
||||||
<img class="sheet-competence-img" src="{{sort.img}}" />
|
<img class="sheet-competence-img" src="{{sort.img}}" />
|
||||||
<span class="display-label"><a>{{#if sort.system.echectotal}}Echec total: {{/if}}{{sort.name}} r{{sort.system.ptreve}}</a></span>
|
<span class="item-edit"><a>{{#if sort.system.echectotal}}Echec total: {{/if}}{{sort.name}} r{{sort.system.ptreve}}</a></span>
|
||||||
<span>{{sort.system.coord}} - {{caseTmr-label sort.system.coord}}</span>
|
<span>{{sort.system.coord}} - {{caseTmr-label sort.system.coord}}</span>
|
||||||
<div class="item-controls flex-shrink">
|
<div class="item-controls flex-shrink">
|
||||||
<a class="item-delete flex-shrink" title="Supprimer"><i class="fas fa-trash"></i></a>
|
<a class="item-delete flex-shrink" title="Supprimer"><i class="fas fa-trash"></i></a>
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
{{#each sorts as |sort key|}}
|
{{#each sorts as |sort key|}}
|
||||||
<li class="item list-item flexrow" data-item-id="{{sort._id}}" data-attribute="{{key}}">
|
<li class="item list-item flexrow" data-item-id="{{sort._id}}" data-attribute="{{key}}">
|
||||||
<img class="sheet-competence-img" src="{{sort.img}}" />
|
<img class="sheet-competence-img" src="{{sort.img}}" />
|
||||||
<span class="display-label flex-grow-2">
|
<span class="item-edit flex-grow-2">
|
||||||
<a data-item-id="{{sort._id}}">{{sort.name}}
|
<a data-item-id="{{sort._id}}">{{sort.name}}
|
||||||
- {{#if sort.system.caseTMRspeciale}}{{sort.system.caseTMRspeciale}}{{else}}{{upperFirst sort.system.caseTMR}}{{/if}}
|
- {{#if sort.system.caseTMRspeciale}}{{sort.system.caseTMRspeciale}}{{else}}{{upperFirst sort.system.caseTMR}}{{/if}}
|
||||||
</a>
|
</a>
|
||||||
|
|||||||
@@ -4,13 +4,16 @@
|
|||||||
<li class="item flexrow list-item" data-item-id="{{piece._id}}">
|
<li class="item flexrow list-item" data-item-id="{{piece._id}}">
|
||||||
<img class="sheet-competence-img" src="{{piece.img}}" title="{{piece.name}}"/>
|
<img class="sheet-competence-img" src="{{piece.img}}" title="{{piece.name}}"/>
|
||||||
<span class="equipement-nom">{{piece.name}}</span>
|
<span class="equipement-nom">{{piece.name}}</span>
|
||||||
<span class="equipement-detail item-controls">
|
<span class="equipement-valeur {{#unless (gt piece.system.cout 0)}}field-error{{/unless}}">
|
||||||
|
({{piece.system.cout}} Sols)
|
||||||
|
</span>
|
||||||
|
<span class="equipement-button item-controls">
|
||||||
<a class="monnaie-moins"><i class="fas fa-minus-square"></i></a>
|
<a class="monnaie-moins"><i class="fas fa-minus-square"></i></a>
|
||||||
</span>
|
</span>
|
||||||
<span class="equipement-detail">
|
<span class="equipement-detail">
|
||||||
<span>{{piece.system.quantite}}</span>
|
<span>{{piece.system.quantite}}</span>
|
||||||
</span>
|
</span>
|
||||||
<span class="equipement-detail item-controls">
|
<span class="equipement-button item-controls">
|
||||||
<a class="monnaie-plus"><i class="fas fa-plus-square"></i></a>
|
<a class="monnaie-plus"><i class="fas fa-plus-square"></i></a>
|
||||||
</span>
|
</span>
|
||||||
<span class="equipement-actions item-controls">
|
<span class="equipement-actions item-controls">
|
||||||
|
|||||||
@@ -1,4 +1,8 @@
|
|||||||
<span><a class="vue-detaillee">
|
<span><a class="vue-detaillee">
|
||||||
<i class="fas {{#if options.vueDetaillee}}fa-eye-slash{{else}}fa-eye{{/if}}"></i>
|
{{#if options.vueDetaillee}}
|
||||||
{{#if options.vueDetaillee}}Vue simplifiée{{else}}Vue détaillée{{/if}}</a>
|
<i class="fas fa-eye-slash"></i> Vue simplifiée
|
||||||
|
{{else}}
|
||||||
|
<i class="fas fa-eye"></i> Vue détaillée
|
||||||
|
{{/if}}
|
||||||
|
</a>
|
||||||
</span>
|
</span>
|
||||||
|
|||||||
@@ -1,23 +1,30 @@
|
|||||||
<div>
|
<div>
|
||||||
<ul class="item-list">
|
<ul class="item-list">
|
||||||
<li class="item flexrow">
|
<li class="item flexrow">
|
||||||
<span class="generic-label">Stress transformé</span>
|
<label class="attribut-label" for="system.compteurs.experience.value">Stress transformé</label>
|
||||||
<input class="compteur-edit" type="text" name="experience" value="{{system.compteurs.experience.value}}" data-dtype="number" size="3"/>
|
{{#if options.vueDetaillee}}
|
||||||
|
<input class="compteur-edit" type="text" name="system.compteurs.experience.value" value="{{system.compteurs.experience.value}}" data-dtype="number" size="3"/>
|
||||||
|
{{else}}
|
||||||
|
<label name="system.compteurs.experience.value">{{system.compteurs.experience.value}}</label>
|
||||||
|
{{/if}}
|
||||||
</li>
|
</li>
|
||||||
|
{{#if options.vueDetaillee}}
|
||||||
<li class="item flexrow">
|
<li class="item flexrow">
|
||||||
<span class="generic-label">Total XP compétences</span>
|
<span class="generic-label">Total XP compétences</span>
|
||||||
<span class="competence-value">{{calc.competenceXPTotal}}</span>
|
<span class="competence-value">{{calc.competenceXPTotal}}</span>
|
||||||
</li>
|
</li>
|
||||||
{{#if options.vueDetaillee}}
|
{{#if calc.comptageArchetype}}
|
||||||
<li>Niveaux d'archétype à répartir</li>
|
<li><hr></li>
|
||||||
{{#each calc.comptageArchetype as |archetype key|}}
|
<li>Niveaux d'archétype à répartir</li>
|
||||||
{{#if (lt archetype.nombre archetype.nombreMax)}}
|
{{#each calc.comptageArchetype as |archetype key|}}
|
||||||
<li class="item flexrow">
|
{{#if (gt archetype.reste 0)}}
|
||||||
<label class="generic-label">Archetype {{archetype.niveau}} : {{archetype.nombre}} / {{archetype.nombreMax}}</label>
|
<li class="item flexrow">
|
||||||
</li>
|
<label class="generic-label">Reste {{archetype.reste}} niveaux {{numberFormat archetype.niveau decimals=0 sign=true}} sur {{archetype.nombreMax}}</label>
|
||||||
{{/if}}
|
</li>
|
||||||
{{/each}}
|
{{/if}}
|
||||||
{{/if}}
|
{{/each}}
|
||||||
|
{{/if}}
|
||||||
|
{{/if}}
|
||||||
|
<li> </li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
<img class="chat-icon" src="{{rencontre.img}}" alt="{{rencontre.name}}" />
|
<img class="chat-icon" src="{{rencontre.img}}" alt="{{rencontre.name}}" />
|
||||||
<h4>{{#if mauvaise}}Mauvaise rencontre{{else}}Rencontre{{/if}} en {{typeTmr-name tmr.type}}</h4>
|
<h4>{{#if mauvaise}}Mauvaise rencontre{{else}}Rencontre{{/if}} en {{typeTmr-name tmr.type}}</h4>
|
||||||
<div>{{rencontre.pack}}</div>
|
<div>{{row.document.pack}}</div>
|
||||||
<div>Jet: {{roll.formula}} : {{roll.total}}{{percentages}}</div>
|
<div>Jet: {{row.roll.formula}} : {{row.roll.total}}{{percentages}}</div>
|
||||||
<hr>
|
<hr>
|
||||||
<div>
|
<div>
|
||||||
<p>{{rencontre.name}} {{rencontre.system.force}} ({{rencontre.system.formule}})</p>
|
<p>{{rencontre.name}} de force {{rencontre.system.force}} ({{rencontre.system.formule}})</p>
|
||||||
<p>{{linkCompendium rencontre.pack rencontre.id rencontre.name}}</p>
|
<p>{{linkCompendium row.document.pack row.document.id row.document.name}}</p>
|
||||||
{{#if rencontre.system.description}}
|
{{#if rencontre.system.description}}
|
||||||
<div class="poesie-extrait">
|
<div class="poesie-extrait">
|
||||||
{{{rencontre.system.description}}}
|
{{{rencontre.system.description}}}
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
</header>
|
</header>
|
||||||
|
|
||||||
<label> Conditions</label>
|
<label> Conditions</label>
|
||||||
<select name="diffConditions" id="diffConditions" data-dtype="Number">
|
<select name="diffConditions" data-dtype="Number">
|
||||||
{{#select diffConditions}}
|
{{#select diffConditions}}
|
||||||
{{#each ajustementsConditions as |key|}}
|
{{#each ajustementsConditions as |key|}}
|
||||||
<option value={{key}}>{{numberFormat key decimals=0 sign=true}}</option>
|
<option value={{key}}>{{numberFormat key decimals=0 sign=true}}</option>
|
||||||
@@ -14,7 +14,7 @@
|
|||||||
{{/select}}
|
{{/select}}
|
||||||
</select>
|
</select>
|
||||||
<label> Jours</label>
|
<label> Jours</label>
|
||||||
<select name="joursAstrologie" id="joursAstrologie" data-dtype="Number">
|
<select name="joursAstrologie" data-dtype="Number">
|
||||||
{{#select joursSuivants}}
|
{{#select joursSuivants}}
|
||||||
{{#each dates as |date key|}}
|
{{#each dates as |date key|}}
|
||||||
<option value={{date.index}}>{{date.label}}</option>
|
<option value={{date.index}}>{{date.label}}</option>
|
||||||
@@ -22,7 +22,7 @@
|
|||||||
{{/select}}
|
{{/select}}
|
||||||
</select>
|
</select>
|
||||||
<label>Etat Général: {{etat}}</label>
|
<label>Etat Général: {{etat}}</label>
|
||||||
<label> <a id='jet-astrologie'>Faire un jet d'Astrologie</a></label>
|
<label> <a name="jet-astrologie">Faire un jet d'Astrologie</a></label>
|
||||||
|
|
||||||
{{!-- Sheet Body --}}
|
{{!-- Sheet Body --}}
|
||||||
<section class="sheet-body">
|
<section class="sheet-body">
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label>Nombre de brins</label>
|
<label>Nombre de brins</label>
|
||||||
<select name="nbBrins" id="nbBrins" data-dtype="number">
|
<select name="nbBrins" data-dtype="number">
|
||||||
{{#select nbBrins}}
|
{{#select nbBrins}}
|
||||||
{{{nbBrinsSelect}}}
|
{{{nbBrinsSelect}}}
|
||||||
{{/select}}
|
{{/select}}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
<form class="rdddialog">
|
<form class="rdd-roll-dialog">
|
||||||
<div>
|
<div>
|
||||||
<div class="flexrow flex-center">
|
<div class="flexrow flex-center">
|
||||||
<div>
|
<div>
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
<form class="rdddialog">
|
<form class="rdd-roll-dialog">
|
||||||
<img class="chat-icon" src="{{item.img}}" title="{{item.name}}" alt="{{item.name}}" />
|
<img class="chat-icon" src="{{item.img}}" title="{{item.name}}" alt="{{item.name}}" />
|
||||||
<h4>{{item.name}}</h4>
|
<h4>{{item.name}}</h4>
|
||||||
<div class="flexrow">
|
<div class="flexrow">
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
<form class="rdddialog">
|
<form class="rdd-roll-dialog">
|
||||||
<img class="chat-icon" src="{{item.img}}" title="{{item.name}}" alt="{{item.name}}" />
|
<img class="chat-icon" src="{{item.img}}" title="{{item.name}}" alt="{{item.name}}" />
|
||||||
<h4>{{item.name}}</h4>
|
<h4>{{item.name}}</h4>
|
||||||
<label>Quantité totale : {{item.system.quantite}}</label>
|
<label>Quantité totale : {{item.system.quantite}}</label>
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
<form class="rdddialog">
|
<form class="rdd-roll-dialog">
|
||||||
<img class="chat-icon" src="{{item.img}}" title="{{item.name}}" alt="{{item.name}}" />
|
<img class="chat-icon" src="{{item.img}}" title="{{item.name}}" alt="{{item.name}}" />
|
||||||
<h4>{{item.name}}</h4>
|
<h4>{{item.name}}</h4>
|
||||||
<div class="flexcol">
|
<div class="flexcol">
|
||||||
|
|||||||
@@ -1,15 +1,14 @@
|
|||||||
<form class="skill-roll-dialog">
|
<form class="dialog-repos">
|
||||||
|
<img class="chat-icon" src="{{img}}" title="{{name}}" alt="{{name}}" />
|
||||||
<div class="flexcol">
|
<div class="flexcol">
|
||||||
<div class="flex-group-left">
|
|
||||||
<div class="flexrow"><span>
|
<div class="flexrow"><span>
|
||||||
<img class="chat-icon" src="{{img}}" title="{{name}}" alt="{{name}}" />
|
<h2>{{name}} se repose</h2>
|
||||||
<h4>{{name}} se repose</h4>
|
|
||||||
</span></div>
|
</span></div>
|
||||||
<div class="flexrow"><span>
|
<div class="flexrow"><span>
|
||||||
<input type="radio" name="repos" id="chateau-dormant" value="chateau-dormant">
|
<input type="radio" name="repos" id="chateau-dormant" value="chateau-dormant">
|
||||||
<label for="chateau-dormant">Château Dormant</label>
|
<label for="chateau-dormant">Château Dormant</label>
|
||||||
</span></div>
|
</span></div>
|
||||||
<hr>
|
<div class="flexrow"><span><hr></span></div>
|
||||||
<div class="flexrow"><span>
|
<div class="flexrow"><span>
|
||||||
<input class type="radio" name="repos" id="sieste" value="sieste">
|
<input class type="radio" name="repos" id="sieste" value="sieste">
|
||||||
<label for="sieste">Sieste de quelques heures</label>
|
<label for="sieste">Sieste de quelques heures</label>
|
||||||
@@ -18,21 +17,18 @@
|
|||||||
<input type="radio" name="repos" id="nuit" value="nuit" checked>
|
<input type="radio" name="repos" id="nuit" value="nuit" checked>
|
||||||
<label for="nuit">Dormir la nuit</label>
|
<label for="nuit">Dormir la nuit</label>
|
||||||
</span></div>
|
</span></div>
|
||||||
<br>
|
|
||||||
<div class="flexrow">
|
<div class="flexrow">
|
||||||
<label for="nb-heures">Nombre d'heures</label>
|
<label for="nb-heures">Nombre d'heures</label>
|
||||||
<input type="number" name="nb-heures" value="4" data-dtype="Number" />
|
<input type="number" name="nb-heures" value="4" data-dtype="Number" />
|
||||||
</div>
|
</div>
|
||||||
<hr>
|
<div class="flexrow"><span><hr></span></div>
|
||||||
<div class="flexrow"><span>
|
<div class="flexrow"><span>
|
||||||
<input type="radio" name="repos" id="gris-reve" value="gris-reve">
|
<input type="radio" name="repos" id="gris-reve" value="gris-reve">
|
||||||
<label for="gris-reve">Gris rêve</label>
|
<label for="gris-reve">Gris rêve</label>
|
||||||
</span></div>
|
</span></div>
|
||||||
<br>
|
|
||||||
<div class="flexrow">
|
<div class="flexrow">
|
||||||
<label for="nb-jours">Nombre de jours</label>
|
<label for="nb-jours">Nombre de jours</label>
|
||||||
<input type="number" name="nb-jours" value="2" data-dtype="Number" />
|
<input type="number" name="nb-jours" value="2" data-dtype="Number" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
</form>
|
</form>
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
<form class="rdddialog">
|
<form class="rdd-roll-dialog">
|
||||||
<h2>Fabrication: {{recette.name}}</h2>
|
<h2>Fabrication: {{recette.name}}</h2>
|
||||||
<div class="grid grid-2col">
|
<div class="grid grid-2col">
|
||||||
<div class="flex-group-left">
|
<div class="flex-group-left">
|
||||||
@@ -20,13 +20,9 @@
|
|||||||
{{/if}}
|
{{/if}}
|
||||||
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-roll-forcer.html"}}
|
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-roll-forcer.html"}}
|
||||||
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-roll-moral.html"}}
|
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-roll-moral.html"}}
|
||||||
<div id="tableAjustements" class="flexrow"></div>
|
<div class="placeholder-ajustements" class="flexrow"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="tableResolution"></div>
|
<div class="placeholder-resolution"></div>
|
||||||
<div id="tableProbaReussite"></div>
|
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
<script>
|
|
||||||
</script>
|
|
||||||
@@ -14,13 +14,8 @@
|
|||||||
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-roll-diffCondition.html"}}
|
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-roll-diffCondition.html"}}
|
||||||
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-roll-forcer.html"}}
|
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-roll-forcer.html"}}
|
||||||
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-roll-moral.html"}}
|
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-roll-moral.html"}}
|
||||||
<div id="tableAjustements" class="flexrow"></div>
|
<div class="placeholder-ajustements" class="flexrow"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="placeholder-resolution"></div>
|
||||||
<div id="tableResolution"></div>
|
|
||||||
<div id="tableProbaReussite"></div>
|
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
<script>
|
|
||||||
</script>
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
<form class="rdddialog">
|
<form class="rdd-roll-dialog">
|
||||||
<h2>Chanter: {{oeuvre.name}}</h2>
|
<h2>Chanter: {{oeuvre.name}}</h2>
|
||||||
|
|
||||||
<div class="grid grid-2col">
|
<div class="grid grid-2col">
|
||||||
@@ -15,13 +15,9 @@
|
|||||||
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-roll-diffCondition.html"}}
|
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-roll-diffCondition.html"}}
|
||||||
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-roll-forcer.html"}}
|
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-roll-forcer.html"}}
|
||||||
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-roll-moral.html"}}
|
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-roll-moral.html"}}
|
||||||
<div id="tableAjustements" class="flexrow"></div>
|
<div class="placeholder-ajustements" class="flexrow"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="tableResolution"></div>
|
<div class="placeholder-resolution"></div>
|
||||||
<div id="tableProbaReussite"></div>
|
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
<script>
|
|
||||||
</script>
|
|
||||||
@@ -41,7 +41,7 @@
|
|||||||
{{/if}}
|
{{/if}}
|
||||||
{{#if ajustements.attaqueDefenseurSurpris.used}}
|
{{#if ajustements.attaqueDefenseurSurpris.used}}
|
||||||
<div class="flexrow">
|
<div class="flexrow">
|
||||||
<label id="defenseur-surprise">{{ajustements.attaqueDefenseurSurpris.label}}</label>
|
<label>{{ajustements.attaqueDefenseurSurpris.label}}</label>
|
||||||
</div>
|
</div>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
||||||
@@ -75,13 +75,9 @@
|
|||||||
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-roll-diffCondition.html"}}
|
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-roll-diffCondition.html"}}
|
||||||
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-roll-forcer.html"}}
|
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-roll-forcer.html"}}
|
||||||
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-roll-moral.html"}}
|
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-roll-moral.html"}}
|
||||||
<div id="tableAjustements" class="flexrow"></div>
|
<div class="placeholder-ajustements" class="flexrow"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="tableResolution"></div>
|
<div class="placeholder-resolution"></div>
|
||||||
<div id="tableProbaReussite"></div>
|
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
<script>
|
|
||||||
</script>
|
|
||||||
|
|||||||
@@ -16,13 +16,9 @@
|
|||||||
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-roll-forcer.html"}}
|
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-roll-forcer.html"}}
|
||||||
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-roll-moral.html"}}
|
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-roll-moral.html"}}
|
||||||
|
|
||||||
<div id="tableAjustements" class="flexrow"></div>
|
<div class="placeholder-ajustements" class="flexrow"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="tableResolution"></div>
|
<div class="placeholder-resolution"></div>
|
||||||
<div id="tableProbaReussite"></div>
|
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
<script>
|
|
||||||
</script>
|
|
||||||
@@ -16,14 +16,9 @@
|
|||||||
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-roll-diffFixe.html"}}
|
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-roll-diffFixe.html"}}
|
||||||
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-roll-diffCondition.html"}}
|
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-roll-diffCondition.html"}}
|
||||||
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-roll-forcer.html"}}
|
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-roll-forcer.html"}}
|
||||||
<div id="tableAjustements" class="flexrow"></div>
|
<div class="placeholder-ajustements" class="flexrow"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="tableResolution"></div>
|
<div class="placeholder-resolution"></div>
|
||||||
<div id="tableProbaReussite"></div>
|
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
<script>
|
|
||||||
</script>
|
|
||||||
|
|
||||||
@@ -1,8 +1,7 @@
|
|||||||
<form class="encaisse-roll-dialog">
|
<form class="encaisse-roll-dialog">
|
||||||
<h2 class="encaisserdialog" id="encaisserTitle"></h2>
|
|
||||||
<div class="flexrow">
|
<div class="flexrow">
|
||||||
<label>Modificateurs aux Dommages:</label>
|
<label>Modificateurs aux Dommages:</label>
|
||||||
<select class="competence-value flex-shrink" name="modificateurDegats" id="modificateurDegats" data-dtype="number">
|
<select class="competence-value flex-shrink" name="modificateurDegats" data-dtype="number">
|
||||||
{{#select modificateurDegats}}
|
{{#select modificateurDegats}}
|
||||||
{{#each ajustementsEncaissement as |key|}}
|
{{#each ajustementsEncaissement as |key|}}
|
||||||
<option value={{key}}>{{numberFormat key decimals=0 sign=true}}</option>
|
<option value={{key}}>{{numberFormat key decimals=0 sign=true}}</option>
|
||||||
@@ -11,11 +10,14 @@
|
|||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
<div class="flexcol">
|
<div class="flexcol">
|
||||||
<label >Cas particuliers:</label>
|
<label>Cas particuliers:</label>
|
||||||
<select name="encaisserSpecial" id="encaisserSpecial" data-dtype="String">
|
<select name="encaisserSpecial" data-dtype="String">
|
||||||
<option value="aucun">Aucun</option>
|
<option value="aucun">Aucun</option>
|
||||||
<option value="noarmure">Ne pas compter les Armures</option>
|
<option value="noarmure">Ne pas compter les Armures</option>
|
||||||
<option value="chute">Chute : Limiter les armures à 2 PA</option>
|
<option value="chute">Chute : Limiter les armures à 2 PA</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="flexcol">
|
||||||
|
<label> </label>
|
||||||
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
<form class="rdddialog">
|
<form class="rdd-roll-dialog">
|
||||||
<h2>Boire</h2>
|
<h2>Boire</h2>
|
||||||
<img class="chat-icon" src="systems/foundryvtt-reve-de-dragon/icons/objets/chope_gres.webp" alt="Chope d'alcool"/>
|
<img class="chat-icon" src="systems/foundryvtt-reve-de-dragon/icons/objets/chope_gres.webp" alt="Chope d'alcool"/>
|
||||||
<div class="grid grid-2col">
|
<div class="grid grid-2col">
|
||||||
@@ -6,14 +6,14 @@
|
|||||||
<label>Etat général</label><label class="flexrow">{{etat}}</label>
|
<label>Etat général</label><label class="flexrow">{{etat}}</label>
|
||||||
<label>Déjà bu</label><label class="flexrow">{{diffNbDoses}}</label>
|
<label>Déjà bu</label><label class="flexrow">{{diffNbDoses}}</label>
|
||||||
<label>Force du breuvage</label>
|
<label>Force du breuvage</label>
|
||||||
<select name="forceAlcool" id="forceAlcool" data-dtype="number">
|
<select class="force-alcool" data-dtype="number">
|
||||||
{{#select forceAlcool}}
|
{{#select forceAlcool}}
|
||||||
{{#each ajustementsForce as |key|}}
|
{{#each ajustementsForce as |key|}}
|
||||||
<option value={{key}}>{{key}}</option>
|
<option value={{key}}>{{key}}</option>
|
||||||
{{/each}}
|
{{/each}}
|
||||||
{{/select}}
|
{{/select}}
|
||||||
</select>
|
</select>
|
||||||
<label>Ajustement final</label><label id="roll-param">10 / 0</label>
|
<label>Ajustement final</label><label class="roll-ethylisme">10 / 0</label>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
<form class="rdddialog">
|
<form class="rdd-roll-dialog">
|
||||||
<h2>Jouer à : {{oeuvre.name}}</h2>
|
<h2>Jouer à : {{oeuvre.name}}</h2>
|
||||||
|
|
||||||
<div class="grid grid-2col">
|
<div class="grid grid-2col">
|
||||||
@@ -16,14 +16,10 @@
|
|||||||
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-roll-diffCondition.html"}}
|
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-roll-diffCondition.html"}}
|
||||||
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-roll-forcer.html"}}
|
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-roll-forcer.html"}}
|
||||||
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-roll-moral.html"}}
|
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-roll-moral.html"}}
|
||||||
<div id="tableAjustements" class="flexrow"></div>
|
<div class="placeholder-ajustements" class="flexrow"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{{> "systems/foundryvtt-reve-de-dragon/templates/partial-description-overflow.html" oeuvre.system}}
|
{{> "systems/foundryvtt-reve-de-dragon/templates/partial-description-overflow.html" oeuvre.system}}
|
||||||
|
|
||||||
<div id="tableResolution"></div>
|
<div class="placeholder-resolution"></div>
|
||||||
<div id="tableProbaReussite"></div>
|
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
<script>
|
|
||||||
</script>
|
|
||||||
@@ -17,13 +17,9 @@
|
|||||||
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-roll-diffFixe.html"}}
|
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-roll-diffFixe.html"}}
|
||||||
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-roll-diffCondition.html"}}
|
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-roll-diffCondition.html"}}
|
||||||
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-roll-forcer.html"}}
|
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-roll-forcer.html"}}
|
||||||
<div id="tableAjustements" class="flexrow"></div>
|
<div class="placeholder-ajustements" class="flexrow"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="tableResolution"></div>
|
<div class="placeholder-resolution"></div>
|
||||||
<div id="tableProbaReussite"></div>
|
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
<script>
|
|
||||||
</script>
|
|
||||||
@@ -20,30 +20,26 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="flexrow">
|
<div class="flexrow">
|
||||||
<label>Comportement antérieur : {{upperFirst meditation.system.comportement}}</label>
|
<label>Comportement antérieur : {{upperFirst meditation.system.comportement}}</label>
|
||||||
<input class="attribute-value conditionMeditation" type="checkbox" id="isComportement" {{#if conditionMeditation.isComportement}}checked{{/if}} />
|
<input class="attribute-value conditionMeditation" type="checkbox" name="isComportement" {{#if conditionMeditation.isComportement}}checked{{/if}} />
|
||||||
</div>
|
</div>
|
||||||
<div class="flexrow">
|
<div class="flexrow">
|
||||||
<label>Heure : {{upperFirst meditation.system.heure}}</label>
|
<label>Heure : {{upperFirst meditation.system.heure}}</label>
|
||||||
<input class="attribute-value conditionMeditation" type="checkbox" id="isHeure" {{#if conditionMeditation.isHeure}}checked{{/if}} />
|
<input class="attribute-value conditionMeditation" type="checkbox" name="isHeure" {{#if conditionMeditation.isHeure}}checked{{/if}} />
|
||||||
</div>
|
</div>
|
||||||
<div class="flexrow">
|
<div class="flexrow">
|
||||||
<label>Purification : {{upperFirst meditation.system.purification}}</label>
|
<label>Purification : {{upperFirst meditation.system.purification}}</label>
|
||||||
<input class="attribute-value conditionMeditation" type="checkbox" id="isPurification" {{#if conditionMeditation.isPurification}}checked{{/if}} />
|
<input class="attribute-value conditionMeditation" type="checkbox" name="isPurification" {{#if conditionMeditation.isPurification}}checked{{/if}} />
|
||||||
</div>
|
</div>
|
||||||
<div class="flexrow">
|
<div class="flexrow">
|
||||||
<label>Vêture : {{upperFirst meditation.system.veture}}</label>
|
<label>Vêture : {{upperFirst meditation.system.veture}}</label>
|
||||||
<input class="attribute-value conditionMeditation" type="checkbox" id="isVeture" {{#if conditionMeditation.isVeture}}checked{{/if}} />
|
<input class="attribute-value conditionMeditation" type="checkbox" name="isVeture" {{#if conditionMeditation.isVeture}}checked{{/if}} />
|
||||||
</div>
|
</div>
|
||||||
<hr>
|
<hr>
|
||||||
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-roll-diffCondition.html"}}
|
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-roll-diffCondition.html"}}
|
||||||
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-roll-forcer.html"}}
|
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-roll-forcer.html"}}
|
||||||
<div id="tableAjustements"></div>
|
<div class="placeholder-ajustements"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="tableResolution"></div>
|
<div class="placeholder-resolution"></div>
|
||||||
<div id="tableProbaReussite"></div>
|
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
<script>
|
|
||||||
</script>
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
<form class="rdddialog">
|
<form class="rdd-roll-dialog">
|
||||||
<h2>Interpréter la mélodie: {{oeuvre.name}}</h2>
|
<h2>Interpréter la mélodie: {{oeuvre.name}}</h2>
|
||||||
|
|
||||||
<div class="grid grid-2col">
|
<div class="grid grid-2col">
|
||||||
@@ -15,13 +15,9 @@
|
|||||||
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-roll-diffCondition.html"}}
|
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-roll-diffCondition.html"}}
|
||||||
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-roll-forcer.html"}}
|
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-roll-forcer.html"}}
|
||||||
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-roll-moral.html"}}
|
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-roll-moral.html"}}
|
||||||
<div id="tableAjustements" class="flexrow"></div>
|
<div class="placeholder-ajustements" class="flexrow"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="tableResolution"></div>
|
<div class="placeholder-resolution"></div>
|
||||||
<div id="tableProbaReussite"></div>
|
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
<script>
|
|
||||||
</script>
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
<form class="rdddialog">
|
<form class="rdd-roll-dialog">
|
||||||
<h2>Interpréter une Œuvre: {{oeuvre.name}}</h2>
|
<h2>Interpréter une Œuvre: {{oeuvre.name}}</h2>
|
||||||
|
|
||||||
<div class="grid grid-2col">
|
<div class="grid grid-2col">
|
||||||
@@ -16,13 +16,9 @@
|
|||||||
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-roll-diffCondition.html"}}
|
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-roll-diffCondition.html"}}
|
||||||
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-roll-forcer.html"}}
|
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-roll-forcer.html"}}
|
||||||
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-roll-moral.html"}}
|
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-roll-moral.html"}}
|
||||||
<div id="tableAjustements" class="flexrow"></div>
|
<div class="placeholder-ajustements" class="flexrow"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="tableResolution"></div>
|
<div class="placeholder-resolution"></div>
|
||||||
<div id="tableProbaReussite"></div>
|
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
<script>
|
|
||||||
</script>
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
<form class="rdddialog">
|
<form class="rdd-roll-dialog">
|
||||||
<h2>Cuisiner: {{oeuvre.name}}</h2>
|
<h2>Cuisiner: {{oeuvre.name}}</h2>
|
||||||
|
|
||||||
<div class="grid grid-2col">
|
<div class="grid grid-2col">
|
||||||
@@ -29,13 +29,9 @@
|
|||||||
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-roll-diffCondition.html"}}
|
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-roll-diffCondition.html"}}
|
||||||
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-roll-forcer.html"}}
|
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-roll-forcer.html"}}
|
||||||
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-roll-moral.html"}}
|
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-roll-moral.html"}}
|
||||||
<div id="tableAjustements" class="flexrow"></div>
|
<div class="placeholder-ajustements" class="flexrow"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{{> "systems/foundryvtt-reve-de-dragon/templates/partial-description-overflow.html" oeuvre.system}}
|
{{> "systems/foundryvtt-reve-de-dragon/templates/partial-description-overflow.html" oeuvre.system}}
|
||||||
<div id="tableResolution"></div>
|
<div class="placeholder-resolution"></div>
|
||||||
<div id="tableProbaReussite"></div>
|
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
<script>
|
|
||||||
</script>
|
|
||||||
@@ -6,8 +6,7 @@
|
|||||||
</div>
|
</div>
|
||||||
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-roll-diffLibre.html"}}
|
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-roll-diffLibre.html"}}
|
||||||
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-roll-diffCondition.html"}}
|
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-roll-diffCondition.html"}}
|
||||||
<button id="lancer" type="button">Lancer les dés</button>
|
<button class="lancer-table-resolution" type="button">Lancer les dés</button>
|
||||||
</div>
|
</div>
|
||||||
<div id="tableResolution"></div>
|
<div class="placeholder-resolution"></div>
|
||||||
<div id="tableProbaReussite"></div>
|
|
||||||
</form>
|
</form>
|
||||||
|
|||||||