Compare commits

..

No commits in common. "v11" and "12.0.27" have entirely different histories.
v11 ... 12.0.27

67 changed files with 501 additions and 395 deletions

View File

@ -1,19 +1,4 @@
# 12.0 # 12.0
## 12.0.31 - le mausolée d'Astrobazzarh
- Correction: les automatisation de combat jouer-MJ fonctionnentde nouveau
## 12.0.30 - le cauchemar d'Astrobazzarh
- calcul automatique du niveau des entités selon leur rêve
- la description des créatures venimeuses contient un lien vers leur venin
- Correction: les messages de combats ne marchaient plus (Changement combiné Foundry + rêve de Dragon)
## 12.0.29 - L'indexation d'Astrobazzarh
- les liens dans la descriptions des sorts pointent vers les sorts du compendium
- la description du chrasme contient le lien vers son venin plutôt qu'un tableau
## 12.0.28 - Les réserves d'Astrobazzarh
- possibilité de mettre en réserve depuis un sort connu
## 12.0.27 - Les vêtements d'Astrobazzarh ## 12.0.27 - Les vêtements d'Astrobazzarh
- Ajout de la liste des armures dans l'onglet caractéristiques - Ajout de la liste des armures dans l'onglet caractéristiques
- Ajout d'une option pour choisir une carte des TMR alternatives - Ajout d'une option pour choisir une carte des TMR alternatives
@ -130,9 +115,11 @@
- encodage de l'export en windows-1252 - encodage de l'export en windows-1252
- export de l'esquive avec armure et sans armure - export de l'esquive avec armure et sans armure
## 12.0.9 - 12.0.10 - Le scriptorium d'Astrobazzarh ## 12.0.10 - Le scriptorium d'Astrobazzarh
- corrections de l'export scriptarium - corrections de l'export scriptarium
- ajout d'une fonction avancée pour un exporter "scriptarium" des personnages
## 12.0.9 - Le scriptorium d'Astrobazzarh
- ajout d'une fonction avancée pour exporter les personnages dans un format csv
## 12.0.8 - La quincaillerie d'Astrobazzarh ## 12.0.8 - La quincaillerie d'Astrobazzarh
- le propriétaire est indiqué dans les feuilles d'équipements/compétences/... - le propriétaire est indiqué dans les feuilles d'équipements/compétences/...

View File

@ -183,7 +183,7 @@ export class RdDActorSheet extends RdDBaseActorSangSheet {
// Equip Inventory Item // Equip Inventory Item
this.html.find('.item-equip').click(async event => this.actor.equiperObjet(RdDSheetUtility.getItemId(event))) this.html.find('.item-equip').click(async event => this.actor.equiperObjet(RdDSheetUtility.getItemId(event)))
this.html.find('.roll-chance-actuelle').click(async event => this.actor.rollCarac('chance-actuelle')) this.html.find('.chance-actuelle').click(async event => this.actor.rollCarac('chance-actuelle'))
this.html.find('.button-appel-chance').click(async event => this.actor.rollAppelChance()) this.html.find('.button-appel-chance').click(async event => this.actor.rollAppelChance())
@ -214,7 +214,7 @@ export class RdDActorSheet extends RdDBaseActorSangSheet {
// Boutons spéciaux MJs // Boutons spéciaux MJs
this.html.find('.forcer-tmr-aleatoire').click(async event => this.actor.reinsertionAleatoire("Action MJ")) this.html.find('.forcer-tmr-aleatoire').click(async event => this.actor.reinsertionAleatoire("Action MJ"))
this.html.find('.don-de-haut-reve').click(async event => this.actor.addDonDeHautReve()) this.html.find('.don-de-haut-reve').click(async event => this.actor.addDonDeHautReve())
this.html.find('.sortreserve-add').click(async event => this.actor.addSortReserve(RdDSheetUtility.getItemId(event))) this.html.find('.nouveau-sort-reserve').click(async event => this.actor.addSortReserve())
this.html.find('.afficher-tmr').click(async event => this.actor.changeTMRVisible()) this.html.find('.afficher-tmr').click(async event => this.actor.changeTMRVisible())
} }
@ -284,8 +284,6 @@ export class RdDActorSheet extends RdDBaseActorSangSheet {
this.html.find('.ptreve-actuel-plus').click(async event => this.actor.reveActuelIncDec(1)) this.html.find('.ptreve-actuel-plus').click(async event => this.actor.reveActuelIncDec(1))
this.html.find('.ptreve-actuel-moins').click(async event => this.actor.reveActuelIncDec(-1)) this.html.find('.ptreve-actuel-moins').click(async event => this.actor.reveActuelIncDec(-1))
this.html.find('.chance-actuelle-plus').click(async event => this.actor.chanceActuelleIncDec(1))
this.html.find('.chance-actuelle-moins').click(async event => this.actor.chanceActuelleIncDec(-1))
this.html.find('.fatigue-plus').click(async event => this.actor.santeIncDec("fatigue", 1)) this.html.find('.fatigue-plus').click(async event => this.actor.santeIncDec("fatigue", 1))
this.html.find('.fatigue-moins').click(async event => this.actor.santeIncDec("fatigue", -1)) this.html.find('.fatigue-moins').click(async event => this.actor.santeIncDec("fatigue", -1))
} }

View File

@ -95,14 +95,11 @@ export class RdDActor extends RdDBaseActorSang {
isHautRevant() { return this.system.attributs.hautrevant.value != "" } isHautRevant() { return this.system.attributs.hautrevant.value != "" }
/* -------------------------------------------- */ /* -------------------------------------------- */
getAgilite() { return Misc.toInt(this.system.carac.agilite?.value ?? 0) } getAgilite() { return this.system.carac.agilite?.value ?? 0 }
getChance() { return Misc.toInt(this.system.carac.chance?.value ?? 0) } getChance() { return this.system.carac.chance?.value ?? 0 }
getReveActuel() { return Misc.toInt(this.system.reve?.reve?.value) ?? this.carac.reve.value ?? 0 } getReveActuel() { return this.system.reve?.reve?.value ?? this.carac.reve.value ?? 0 }
getChanceActuel() { getChanceActuel() { return this.system.compteurs.chance?.value ?? 10 }
return Number.isNumeric(this.system.compteurs.chance.value) ?
Misc.toInt(this.system.compteurs.chance.value) : this.getChance()
}
getMoralTotal() { return this.system.compteurs.moral?.value ?? 0 } getMoralTotal() { return this.system.compteurs.moral?.value ?? 0 }
getEnduranceMax() { return Math.max(1, Math.max(this.getTaille() + this.getConstitution(), this.getVieMax() + this.getVolonte())) } getEnduranceMax() { return Math.max(1, Math.max(this.getTaille() + this.getConstitution(), this.getVieMax() + this.getVolonte())) }
@ -994,23 +991,13 @@ export class RdDActor extends RdDBaseActorSang {
} }
} }
async addSortReserve(itemId) { async addSortReserve() {
if (itemId) {
const item = this.items.get(itemId)
if (item.type == ITEM_TYPES.sort && !item.system.isrituel) {
this.$createSortReserve(item)
return
}
}
const selectSortReserve = { const selectSortReserve = {
title: "Créer un sort en réserve", title: "Créer un sort en réserve",
label: "Choisir un sort", label: "Choisir un sort",
list: this.itemTypes[ITEM_TYPES.sort].filter(it => !it.system.isrituel) list: this.itemTypes[ITEM_TYPES.sort].filter(it => !it.system.isrituel)
} }
DialogSelect.select(selectSortReserve, sort => this.$createSortReserve(sort)) DialogSelect.select(selectSortReserve, sort =>
}
$createSortReserve(sort) {
this.createEmbeddedDocuments("Item", this.createEmbeddedDocuments("Item",
[{ [{
type: ITEM_TYPES.sortreserve, type: ITEM_TYPES.sortreserve,
@ -1018,7 +1005,7 @@ export class RdDActor extends RdDBaseActorSang {
img: sort.img, img: sort.img,
system: { sortid: sort.id, draconic: sort.system.draconic, ptreve: Number(sort.system.ptreve.match(/\d+/)), coord: 'A1', heurecible: 'Vaisseau' } system: { sortid: sort.id, draconic: sort.system.draconic, ptreve: Number(sort.system.ptreve.match(/\d+/)), coord: 'A1', heurecible: 'Vaisseau' }
}], }],
{ renderSheet: true }) { renderSheet: true }))
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
async reinsertionAleatoire(raison, accessible = tmr => true) { async reinsertionAleatoire(raison, accessible = tmr => true) {
@ -1083,11 +1070,6 @@ export class RdDActor extends RdDBaseActorSang {
await this.update({ "system.reve.reve.value": reve }); await this.update({ "system.reve.reve.value": reve });
} }
async chanceActuelleIncDec(value) {
const chance = Math.min(this.getChance(), Math.max(this.getChanceActuel() + value, 0));
await this.update({ "system.compteurs.chance.value": chance });
}
/* -------------------------------------------- */ /* -------------------------------------------- */
async regainPointDeSeuil() { async regainPointDeSeuil() {
const seuil = Misc.toInt(this.system.reve.seuil.value); const seuil = Misc.toInt(this.system.reve.seuil.value);
@ -2272,6 +2254,12 @@ export class RdDActor extends RdDBaseActorSang {
} }
} }
/* -------------------------------------------- */
async chanceActuelleIncDec(value) {
const chance = Math.min(this.getChance(), Math.max(this.getChanceActuel() + value, 0));
await this.updateCompteurValue("chance", chance);
}
/* -------------------------------------------- */ /* -------------------------------------------- */
async appelDestinee(onSuccess = () => { }, onEchec = () => { }) { async appelDestinee(onSuccess = () => { }, onEchec = () => { }) {
let destinee = this.system.compteurs.destinee?.value ?? 0; let destinee = this.system.compteurs.destinee?.value ?? 0;

View File

@ -48,19 +48,6 @@ export class RdDBaseActorReveSheet extends RdDBaseActorSheet {
}], { renderSheet: true }) }], { renderSheet: true })
) )
if (this.options.vueDetaillee) {
// On carac change
this.html.find('.carac-value').change(async event => {
let caracName = event.currentTarget.name.replace(".value", "").replace("system.carac.", "");
this.actor.updateCarac(caracName, parseInt(event.target.value));
});
// On competence change
this.html.find('.competence-value').change(async event => {
let compName = event.currentTarget.attributes.compname.value;
//console.log("Competence changed :", compName);
this.actor.updateCompetence(compName, parseInt(event.target.value));
});
}
} }
} }

View File

@ -37,15 +37,6 @@ export class RdDBaseActorReve extends RdDBaseActor {
this.system.sante.endurance.value = Math.min(this.system.sante.endurance.value, this.system.sante.endurance.max) this.system.sante.endurance.value = Math.min(this.system.sante.endurance.value, this.system.sante.endurance.max)
} }
getCarac() {
return foundry.utils.mergeObject(this.system.carac,
{
'reve-actuel': this.getCaracReveActuel(),
'chance-actuelle': this.getCaracChanceActuelle()
},
{ inplace: false })
}
getCaracChanceActuelle() { getCaracChanceActuelle() {
return { return {
label: 'Chance actuelle', label: 'Chance actuelle',
@ -62,6 +53,7 @@ export class RdDBaseActorReve extends RdDBaseActor {
}; };
} }
getTaille() { return Misc.toInt(this.system.carac.taille?.value) } getTaille() { return Misc.toInt(this.system.carac.taille?.value) }
getConstitution() { return this.getReve() } getConstitution() { return this.getReve() }
getForce() { return this.getReve() } getForce() { return this.getReve() }
@ -314,6 +306,16 @@ export class RdDBaseActorReve extends RdDBaseActor {
}); });
} }
getCarac() {
// TODO: le niveau d'une entité de cauchemar devrait être exclu...
return foundry.utils.mergeObject(this.system.carac,
{
'reve-actuel': this.getCaracReveActuel(),
'chance-actuelle': this.getCaracChanceActuelle()
},
{ inplace: false })
}
/* -------------------------------------------- */ /* -------------------------------------------- */
async rollCarac(caracName, jetResistance = undefined) { async rollCarac(caracName, jetResistance = undefined) {
if (Grammar.equalsInsensitive(caracName, 'taille')) { if (Grammar.equalsInsensitive(caracName, 'taille')) {
@ -497,7 +499,7 @@ export class RdDBaseActorReve extends RdDBaseActor {
|| entite.isEntiteAccordee(this)) { || entite.isEntiteAccordee(this)) {
return true; return true;
} }
const rolled = await RdDResolutionTable.roll(this.getReveActuel(), - Number(entite.getNiveau())); const rolled = await RdDResolutionTable.roll(this.getReveActuel(), - Number(entite.system.carac.niveau.value));
const rollData = { const rollData = {
alias: this.getAlias(), alias: this.getAlias(),
rolled: rolled, rolled: rolled,

View File

@ -177,6 +177,21 @@ export class RdDBaseActorSheet extends ActorSheet {
this.options.vueDetaillee = !this.options.vueDetaillee; this.options.vueDetaillee = !this.options.vueDetaillee;
this.render(true); this.render(true);
}); });
if (this.options.vueDetaillee) {
// On carac change
this.html.find('.carac-value').change(async event => {
let caracName = event.currentTarget.name.replace(".value", "").replace("system.carac.", "");
this.actor.updateCarac(caracName, parseInt(event.target.value));
});
// On competence change
this.html.find('.competence-value').change(async event => {
let compName = event.currentTarget.attributes.compname.value;
//console.log("Competence changed :", compName);
this.actor.updateCompetence(compName, parseInt(event.target.value));
});
}
} }
_rechercherKeyup(event) { _rechercherKeyup(event) {

View File

@ -15,8 +15,6 @@ export class RdDActorEntiteSheet extends RdDBaseActorReveSheet {
async getData() { async getData() {
let formData = await super.getData(); let formData = await super.getData();
formData.niveau = this.actor.getNiveau()
delete formData.system.carac.niveau
formData.resonances = this.actor.system.sante.resonnance.actors.map(actorId => game.actors.get(actorId)) formData.resonances = this.actor.system.sante.resonnance.actors.map(actorId => game.actors.get(actorId))
.map(actor => { return { id: actor.id, name: actor.name, img: actor.img } }) .map(actor => { return { id: actor.id, name: actor.name, img: actor.img } })
return formData return formData
@ -35,6 +33,10 @@ export class RdDActorEntiteSheet extends RdDBaseActorReveSheet {
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));
}); });
this.html.find('.creature-niveau').change(async event => {
let compName = event.currentTarget.attributes.compname.value;
this.actor.updateCreatureCompetence(compName, "niveau", parseInt(event.target.value));
})
this.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));

View File

@ -1,7 +1,6 @@
import { ENTITE_INCARNE, ENTITE_NONINCARNE } from "../constants.js"; import { ENTITE_INCARNE, ENTITE_NONINCARNE } from "../constants.js";
import { ITEM_TYPES } from "../item.js"; import { ITEM_TYPES } from "../item.js";
import { Misc } from "../misc.js"; import { Misc } from "../misc.js";
import { RdDCarac } from "../rdd-carac.js";
import { RdDEncaisser } from "../rdd-roll-encaisser.js"; import { RdDEncaisser } from "../rdd-roll-encaisser.js";
import { STATUSES } from "../settings/status-effects.js"; import { STATUSES } from "../settings/status-effects.js";
import { RdDBaseActorReve } from "./base-actor-reve.js"; import { RdDBaseActorReve } from "./base-actor-reve.js";
@ -19,23 +18,12 @@ export class RdDEntite extends RdDBaseActorReve {
isEntite(typeentite = []) { isEntite(typeentite = []) {
return (typeentite.length == 0 || typeentite.includes(this.system.definition.typeentite)); return (typeentite.length == 0 || typeentite.includes(this.system.definition.typeentite));
} }
isNonIncarnee() { return this.isEntite([ENTITE_NONINCARNE]) } isNonIncarnee() { return this.isEntite([ENTITE_NONINCARNE]) }
getReveActuel() { getReveActuel() {
return Misc.toInt(this.system.carac.reve?.value) return Misc.toInt(this.system.carac.reve?.value)
} }
getCarac() {
const carac = super.getCarac()
delete carac.niveau
return carac
}
getNiveau() {
const reve = this.getReve()
return RdDCarac.getCaracDerivee(reve).niveau
}
getForce() { return this.getReve() } getForce() { return this.getReve() }
getAgilite() { return this.getReve() } getAgilite() { return this.getReve() }
getChance() { return this.getReve() } getChance() { return this.getReve() }
@ -76,7 +64,6 @@ export class RdDEntite extends RdDBaseActorReve {
} }
return {} return {}
} }
async encaisser() { async encaisser() {
if (this.isNonIncarnee()) { if (this.isNonIncarnee()) {
return return

View File

@ -83,7 +83,6 @@ const MAPPING_BASE = [
{ column: "protectionarmure", colName: 'Protection', getter: (actor, context) => Mapping.getProtectionArmure(actor, context) }, { column: "protectionarmure", colName: 'Protection', getter: (actor, context) => Mapping.getProtectionArmure(actor, context) },
{ column: "malus_armure", getter: (actor, context) => Mapping.getMalusArmure(actor, context) }, { column: "malus_armure", getter: (actor, context) => Mapping.getMalusArmure(actor, context) },
{ column: "reve_actuel", rollClass: 'roll-reve-actuel', colName: 'Rêve actuel', getter: (actor, context) => actor.system.reve.reve.value }, { column: "reve_actuel", rollClass: 'roll-reve-actuel', colName: 'Rêve actuel', getter: (actor, context) => actor.system.reve.reve.value },
{ column: "chance_actuel", rollClass: 'roll-chance-actuelle', colName: 'Chance actuelle', getter: (actor, context) => actor.system.compteurs.chance.value },
{ column: "vie_actuel", rollClass: 'jet-vie', getter: (actor, context) => actor.system.sante.vie.value }, { column: "vie_actuel", rollClass: 'jet-vie', getter: (actor, context) => actor.system.sante.vie.value },
{ column: "endurance_actuel", rollClass: 'jet-endurance', getter: (actor, context) => actor.system.sante.endurance.value }, { column: "endurance_actuel", rollClass: 'jet-endurance', getter: (actor, context) => actor.system.sante.endurance.value },
{ column: "esquive", getter: (actor, context) => Mapping.getEsquive(context) }, { column: "esquive", getter: (actor, context) => Mapping.getEsquive(context) },
@ -279,7 +278,7 @@ export class Mapping {
const race = ['', 'humain'].includes(Grammar.toLowerCaseNoAccent(actor.system.race)) ? '' : (actor.system.race + ' ') const race = ['', 'humain'].includes(Grammar.toLowerCaseNoAccent(actor.system.race)) ? '' : (actor.system.race + ' ')
const heure = actor.system.heure const heure = actor.system.heure
const hn = `${sexeFeminin} à l'heure ${RdDTimestamp.definition(heure).avecArticle}` const hn = `${sexeFeminin} à l'heure ${RdDTimestamp.definition(heure).avecArticle}`
const age = (actor.system.age && actor.system.age >0) ? `${actor.system.age} ans` : undefined const age = actor.system.age ? `${actor.system.age} ans` : undefined
const taille = actor.system.taille const taille = actor.system.taille
const poids = actor.system.poids const poids = actor.system.poids
const cheveux = actor.system.cheveux ? `cheveux ${actor.system.cheveux}` : undefined const cheveux = actor.system.cheveux ? `cheveux ${actor.system.cheveux}` : undefined

View File

@ -6,7 +6,6 @@ import { Grammar } from "../grammar.js";
import { Misc } from "../misc.js"; import { Misc } from "../misc.js";
import { ENTITE_INCARNE, ENTITE_NONINCARNE } from "../constants.js"; import { ENTITE_INCARNE, ENTITE_NONINCARNE } from "../constants.js";
import { RdDItemTete } from "../item/tete.js"; import { RdDItemTete } from "../item/tete.js";
import { ITEM_TYPES } from "../item.js";
const WHITESPACES = "\\s+" const WHITESPACES = "\\s+"
const NUMERIC = "[\\+\\-]?\\d+" const NUMERIC = "[\\+\\-]?\\d+"
@ -27,7 +26,7 @@ const MANIEMENTS = {
'de lancer': (weapon) => { return { name: weapon.system.lancer, categorie: 'lancer' } }, 'de lancer': (weapon) => { return { name: weapon.system.lancer, categorie: 'lancer' } },
'de jet': (weapon) => { return { name: weapon.system.lancer, categorie: 'lancer' } }, 'de jet': (weapon) => { return { name: weapon.system.lancer, categorie: 'lancer' } },
'à une main': (weapon) => { return { name: weapon.system.competence, categorie: 'melee' } }, 'à une main': (weapon) => { return { name: weapon.system.competence, categorie: 'melee' } },
'à deux mains': (weapon) => { return { name: weapon.system.competence.replace("à 1 main", "à 2 mains"), categorie: 'melee' } }, 'à deux main': (weapon) => { return { name: weapon.system.competence.replace("à 1 main", "à 2 main"), categorie: 'melee' } },
'mêlée': (weapon) => { return { name: weapon.system.competence, categorie: 'melee' } }, 'mêlée': (weapon) => { return { name: weapon.system.competence, categorie: 'melee' } },
} }
const XREGEXP_WEAPON_MANIEMENT = "(?<maniement>(" + Misc.join(Object.keys(MANIEMENTS), '|') + "))" const XREGEXP_WEAPON_MANIEMENT = "(?<maniement>(" + Misc.join(Object.keys(MANIEMENTS), '|') + "))"
@ -194,7 +193,6 @@ export class RdDStatBlockParser {
let newActor = await RdDBaseActorReve.create({ name, type, system: actorData, items }); let newActor = await RdDBaseActorReve.create({ name, type, system: actorData, items });
await newActor.remiseANeuf() await newActor.remiseANeuf()
await RdDStatBlockParser.adjustAttacks(newActor)
await RdDStatBlockParser.setValeursActuelles(newActor, statString) await RdDStatBlockParser.setValeursActuelles(newActor, statString)
await newActor?.sheet.render(true) await newActor?.sheet.render(true)
} }
@ -269,7 +267,7 @@ export class RdDStatBlockParser {
} }
let weapMatch = XRegExp.exec(statString, XRegExp(weapon.name let weapMatch = XRegExp.exec(statString, XRegExp(weapon.name
+ "(\\s*" + XREGEXP_WEAPON_MANIEMENT + ")?" + "(\\s*" + XREGEXP_WEAPON_MANIEMENT + ")?"
+ "\\s+(?<value>[\\+\\-]?\\d+)", 'giu')); + "\\s+(?<value>\\+\\d+)", 'giu'));
if (weapMatch) { if (weapMatch) {
weapon = weapon.toObject(); weapon = weapon.toObject();
weapon.system.equipe = 'true'; weapon.system.equipe = 'true';
@ -298,21 +296,6 @@ export class RdDStatBlockParser {
} }
} }
static async adjustAttacks(newActor) {
if (["creature", "entite"].includes(newActor.type)) {
const bonusDommages = newActor.getBonusDegat()
const ajustementAttaques = newActor.itemTypes[ITEM_TYPES.competencecreature].filter(it => it.system.iscombat)
.map(it => {
return {
_id: it.id,
'system.categorie': 'melee',
'system.dommages': it.system.dommages - bonusDommages
}
})
await newActor.updateEmbeddedDocuments('Item', ajustementAttaques)
}
}
static async setValeursActuelles(newActor, statString) { static async setValeursActuelles(newActor, statString) {
const updates = { const updates = {
} }
@ -429,9 +412,9 @@ export class RdDStatBlockParser {
actorData.taille = taille.value; actorData.taille = taille.value;
} }
// Get weight // Get weight
const poids = XRegExp.exec(statString, XRegExp(",\\s+(?<value>\\d+)\\s+kg", 'giu')); const poids = XRegExp.exec(statString, XRegExp("(?<value>\\d+ kg)", 'giu'));
if (poids?.value) { if (poids?.value) {
actorData.poids = poids.value + ' kg'; actorData.poids = poids.value;
} }
// Get cheveux // Get cheveux
const cheveux = XRegExp.exec(statString, XRegExp("kg,\\s+(?<value>[A-Za-zÀ-ÖØ-öø-ÿ\\s\\-]+),\\s+yeux", 'giu')); const cheveux = XRegExp.exec(statString, XRegExp("kg,\\s+(?<value>[A-Za-zÀ-ÖØ-öø-ÿ\\s\\-]+),\\s+yeux", 'giu'));
@ -452,7 +435,7 @@ export class RdDStatBlockParser {
} }
static parseCreature(statString, actorData) { static parseCreature(statString, actorData) {
let protection = XRegExp.exec(statString, XRegExp("protection(\\s+naturelle)?\\s+(?<value>[\\-]?\\d+)", 'giu')); let protection = XRegExp.exec(statString, XRegExp("protection\\s+(?<value>[\\-]?\\d+)", 'giu'));
if (protection?.value) { if (protection?.value) {
actorData.attributs.protection.value = Number(protection.value); actorData.attributs.protection.value = Number(protection.value);
} }
@ -478,40 +461,33 @@ export class RdDStatBlockParser {
} }
static parseActorType(statString) { static parseActorType(statString) {
let force = XRegExp.exec(statString, XRegExp("Force\\s+(?<value>[\\+\\-]?\\d+)", 'giu')) let niveau = XRegExp.exec(statString, XRegExp("Niveau\\s+(?<value>[\\+\\-]?\\d+)", 'giu'))
let vue = XRegExp.exec(statString, XRegExp("Vue\\s+(?<value>[\\+\\-]?\\d+)", 'giu'))
let perception = XRegExp.exec(statString, XRegExp("perception\\s+(?<value>\\d+)", 'giu')) let perception = XRegExp.exec(statString, XRegExp("perception\\s+(?<value>\\d+)", 'giu'))
if (!force) { if (perception?.value) {
return "entite"
}
if (!vue || perception) {
return "creature" return "creature"
} }
if (niveau?.value) {
return "entite"
}
return "personnage" return "personnage"
} }
static extractName(actorType, statString) { static extractName(actorType, statString) {
if (actorType == "personnage") { switch (actorType) {
case "personnage":
// Check if ',né le' is present // Check if ',né le' is present
let namePersonnage = "Importé" let namePersonnage = "Importé"
if (statString.includes(", né")) { if (statString.includes(", né")) {
// Name is all string before first comma ',' // Name is all string before first comma ','
namePersonnage = XRegExp.exec(statString, XRegExp("(?<value>[\\p{Letter}\'\\-\\s\\d]+),", 'giu')); namePersonnage = XRegExp.exec(statString, XRegExp("(?<value>[\\p{Letter}\\s\\d]+),", 'giu'));
} else { } else {
namePersonnage = XRegExp.exec(statString, XRegExp("(?<value>[\\p{Letter}\'\\-\\s\\d]+)\\s+TAILLE", 'giu')); namePersonnage = XRegExp.exec(statString, XRegExp("(?<value>[\\p{Letter}\\s\\d]+)\\s+TAILLE", 'giu'));
} }
if (namePersonnage?.value) { if (namePersonnage?.value) {
return Misc.upperFirst(namePersonnage?.value.toLowerCase()); return Misc.upperFirst(namePersonnage?.value);
} }
} }
const name = XRegExp.exec(statString, XRegExp("(?<value>.+)\\s+taille", 'giu')); const name = XRegExp.exec(statString, XRegExp("(?<value>.+)\\s+taille", 'giu'));
if (actorType == "entite") {
if (!(name?.value)) {
const nameEntiteReve = XRegExp.exec(statString, XRegExp("(?<value>.+)\\s+rêve", 'giu'));
return Misc.upperFirst(nameEntiteReve?.value || "Importé");
}
}
return Misc.upperFirst(name?.value || "Importé"); return Misc.upperFirst(name?.value || "Importé");
} }

View File

@ -3,38 +3,38 @@ import { Misc } from "./misc.js";
const TABLE_CARACTERISTIQUES_DERIVEES = { const TABLE_CARACTERISTIQUES_DERIVEES = {
// xp: coût pour passer du niveau inférieur à ce niveau // xp: coût pour passer du niveau inférieur à ce niveau
1: { xp: 3, niveau: -5, poids: "moins de 1kg", poidsMin: 0, poidsMax: 1, plusdom: -5, sconst: 0.5, sust: 0.1 }, 1: { xp: 3, poids: "moins de 1kg", poidsMin: 0, poidsMax: 1, plusdom: -5, sconst: 0.5, sust: 0.1 },
2: { xp: 3, niveau: -4, poids: "1-5", poidsMin: 1, poidsMax: 5, plusdom: -4, sconst: 0.5, sust: 0.3 }, 2: { xp: 3, poids: "1-5", poidsMin: 1, poidsMax: 5, plusdom: -4, sconst: 0.5, sust: 0.3 },
3: { xp: 4, niveau: -3, poids: "6-10", poidsMin: 6, poidsMax: 10, plusdom: -3, sconst: 1, sust: 0.5, beaute: 'hideux' }, 3: { xp: 4, poids: "6-10", poidsMin: 6, poidsMax: 10, plusdom: -3, sconst: 1, sust: 0.5, beaute: 'hideux' },
4: { xp: 4, niveau: -2, poids: "11-20", poidsMin: 11, poidsMax: 20, plusdom: -3, sconst: 1, sust: 1, beaute: 'repoussant' }, 4: { xp: 4, poids: "11-20", poidsMin: 11, poidsMax: 20, plusdom: -3, sconst: 1, sust: 1, beaute: 'repoussant' },
5: { xp: 5, niveau: -1, poids: "21-30", poidsMin: 21, poidsMax: 30, plusdom: -2, sconst: 1, sust: 1, beaute: 'franchement très laid' }, 5: { xp: 5, poids: "21-30", poidsMin: 21, poidsMax: 30, plusdom: -2, sconst: 1, sust: 1, beaute: 'franchement très laid' },
6: { xp: 5, niveau: 0, poids: "31-40", poidsMin: 31, poidsMax: 40, plusdom: -1, sconst: 2, sust: 2, beaute: 'laid' }, 6: { xp: 5, poids: "31-40", poidsMin: 31, poidsMax: 40, plusdom: -1, sconst: 2, sust: 2, beaute: 'laid' },
7: { xp: 6, niveau: 0, poids: "41-50", poidsMin: 41, poidsMax: 50, plusdom: -1, sconst: 2, sust: 2, beaute: 'très désavantagé' }, 7: { xp: 6, poids: "41-50", poidsMin: 41, poidsMax: 50, plusdom: -1, sconst: 2, sust: 2, beaute: 'très désavantagé' },
8: { xp: 6, niveau: 0, poids: "51-60", poidsMin: 51, poidsMax: 60, plusdom: 0, sconst: 2, sust: 2, beaute: 'désavantagé' }, 8: { xp: 6, poids: "51-60", poidsMin: 51, poidsMax: 60, plusdom: 0, sconst: 2, sust: 2, beaute: 'désavantagé' },
9: { xp: 7, niveau: 0, poids: "61-65", poidsMin: 61, poidsMax: 65, plusdom: 0, sconst: 3, sust: 2, beaute: 'pas terrible' }, 9: { xp: 7, poids: "61-65", poidsMin: 61, poidsMax: 65, plusdom: 0, sconst: 3, sust: 2, beaute: 'pas terrible' },
10: { xp: 7, niveau: 0, poids: "66-70", poidsMin: 66, poidsMax: 70, plusdom: 0, sconst: 3, sust: 3, beaute: 'commun' }, 10: { xp: 7, poids: "66-70", poidsMin: 66, poidsMax: 70, plusdom: 0, sconst: 3, sust: 3, beaute: 'commun' },
11: { xp: 8, niveau: 1, poids: "71-75", poidsMin: 71, poidsMax: 75, plusdom: 0, sconst: 3, sust: 3, beaute: 'pas mal' }, 11: { xp: 8, poids: "71-75", poidsMin: 71, poidsMax: 75, plusdom: 0, sconst: 3, sust: 3, beaute: 'pas mal' },
12: { xp: 8, niveau: 1, poids: "76-80", poidsMin: 76, poidsMax: 80, plusdom: +1, sconst: 4, sust: 3, beaute: 'avantagé' }, 12: { xp: 8, poids: "76-80", poidsMin: 76, poidsMax: 80, plusdom: +1, sconst: 4, sust: 3, beaute: 'avantagé' },
13: { xp: 9, niveau: 2, poids: "81-90", poidsMin: 81, poidsMax: 90, plusdom: +1, sconst: 4, sust: 3, beaute: 'mignon' }, 13: { xp: 9, poids: "81-90", poidsMin: 81, poidsMax: 90, plusdom: +1, sconst: 4, sust: 3, beaute: 'mignon' },
14: { xp: 9, niveau: 2, poids: "91-100", poidsMin: 91, poidsMax: 100, plusdom: +2, sconst: 4, sust: 4, beaute: 'beau' }, 14: { xp: 9, poids: "91-100", poidsMin: 91, poidsMax: 100, plusdom: +2, sconst: 4, sust: 4, beaute: 'beau' },
15: { xp: 10, niveau: 3, poids: "101-110", poidsMin: 101, poidsMax: 110, plusdom: +2, sconst: 5, sust: 4, beaute: 'très beau' }, 15: { xp: 10, poids: "101-110", poidsMin: 101, poidsMax: 110, plusdom: +2, sconst: 5, sust: 4, beaute: 'très beau' },
16: { xp: 20, niveau: 3, poids: "111-120", poidsMin: 111, poidsMax: 120, plusdom: +3, sconst: 5, sust: 4, beaute: 'éblouissant' }, 16: { xp: 20, poids: "111-120", poidsMin: 111, poidsMax: 120, plusdom: +3, sconst: 5, sust: 4, beaute: 'éblouissant' },
17: { xp: 30, niveau: 4, poids: "121-131", poidsMin: 121, poidsMax: 131, plusdom: +3, sconst: 5, sust: 5 }, 17: { xp: 30, poids: "121-131", poidsMin: 121, poidsMax: 131, plusdom: +3, sconst: 5, sust: 5 },
18: { xp: 40, niveau: 4, poids: "131-141", poidsMin: 131, poidsMax: 141, plusdom: +4, sconst: 6, sust: 5 }, 18: { xp: 40, poids: "131-141", poidsMin: 131, poidsMax: 141, plusdom: +4, sconst: 6, sust: 5 },
19: { xp: 50, niveau: 5, poids: "141-150", poidsMin: 141, poidsMax: 150, plusdom: +4, sconst: 6, sust: 5 }, 19: { xp: 50, poids: "141-150", poidsMin: 141, poidsMax: 150, plusdom: +4, sconst: 6, sust: 5 },
20: { xp: 60, niveau: 5, poids: "151-160", poidsMin: 151, poidsMax: 160, plusdom: +4, sconst: 6, sust: 6 }, 20: { xp: 60, poids: "151-160", poidsMin: 151, poidsMax: 160, plusdom: +4, sconst: 6, sust: 6 },
21: { xp: 70, niveau: 6, poids: "161-180", poidsMin: 161, poidsMax: 180, plusdom: +5, sconst: 7, sust: 6 }, 21: { xp: 70, poids: "161-180", poidsMin: 161, poidsMax: 180, plusdom: +5, sconst: 7, sust: 6 },
22: { xp: 80, niveau: 6, poids: "181-200", poidsMin: 181, poidsMax: 200, plusdom: +5, sconst: 7, sust: 7 }, 22: { xp: 80, poids: "181-200", poidsMin: 181, poidsMax: 200, plusdom: +5, sconst: 7, sust: 7 },
23: { xp: 90, niveau: 7, poids: "201-300", poidsMin: 201, poidsMax: 300, plusdom: +6, sconst: 7, sust: 8 }, 23: { xp: 90, poids: "201-300", poidsMin: 201, poidsMax: 300, plusdom: +6, sconst: 7, sust: 8 },
24: { xp: 100, niveau: 7, poids: "301-400", poidsMin: 301, poidsMax: 400, plusdom: +6, sconst: 8, sust: 9 }, 24: { xp: 100, poids: "301-400", poidsMin: 301, poidsMax: 400, plusdom: +6, sconst: 8, sust: 9 },
25: { xp: 110, niveau: 8, poids: "401-500", poidsMin: 401, poidsMax: 500, plusdom: +7, sconst: 8, sust: 10 }, 25: { xp: 110, poids: "401-500", poidsMin: 401, poidsMax: 500, plusdom: +7, sconst: 8, sust: 10 },
26: { xp: 120, niveau: 8, poids: "501-600", poidsMin: 501, poidsMax: 600, plusdom: +7, sconst: 8, sust: 11 }, 26: { xp: 120, poids: "501-600", poidsMin: 501, poidsMax: 600, plusdom: +7, sconst: 8, sust: 11 },
27: { xp: 130, niveau: 9, poids: "601-700", poidsMin: 601, poidsMax: 700, plusdom: +8, sconst: 9, sust: 12 }, 27: { xp: 130, poids: "601-700", poidsMin: 601, poidsMax: 700, plusdom: +8, sconst: 9, sust: 12 },
28: { xp: 140, niveau: 9, poids: "701-800", poidsMin: 701, poidsMax: 800, plusdom: +8, sconst: 9, sust: 13 }, 28: { xp: 140, poids: "701-800", poidsMin: 701, poidsMax: 800, plusdom: +8, sconst: 9, sust: 13 },
29: { xp: 150, niveau: 10, poids: "801-900", poidsMin: 801, poidsMax: 900, plusdom: +9, sconst: 9, sust: 14 }, 29: { xp: 150, poids: "801-900", poidsMin: 801, poidsMax: 900, plusdom: +9, sconst: 9, sust: 14 },
30: { xp: 160, niveau: 10, poids: "901-1000", poidsMin: 901, poidsMax: 1000, plusdom: +9, sconst: 10, sust: 15 }, 30: { xp: 160, poids: "901-1000", poidsMin: 901, poidsMax: 1000, plusdom: +9, sconst: 10, sust: 15 },
31: { xp: 170, niveau: 11, poids: "1001-1500", poidsMin: 1001, poidsMax: 1500, plusdom: +10, sconst: 10, sust: 16 }, 31: { xp: 170, poids: "1001-1500", poidsMin: 1001, poidsMax: 1500, plusdom: +10, sconst: 10, sust: 16 },
32: { xp: 180, niveau: 11, poids: "1501-2000", poidsMin: 1501, poidsMax: 2000, plusdom: +11, sconst: 10, sust: 17 } 32: { xp: 180, poids: "1501-2000", poidsMin: 1501, poidsMax: 2000, plusdom: +11, sconst: 10, sust: 17 }
}; };
export class RdDCarac { export class RdDCarac {

View File

@ -752,6 +752,7 @@ export class RdDCombat {
dialog.render(true); dialog.render(true);
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
_prepareAttaque(competence, arme) { _prepareAttaque(competence, arme) {
let rollData = { let rollData = {

View File

@ -262,24 +262,7 @@ 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'
]; ];
// foundry et options
Handlebars.registerHelper('RDD_CONFIG', path => RDD_CONFIG[path])
Handlebars.registerHelper('linkCompendium', (pack, id, name) => RdDUtility.linkCompendium(pack, id, name));
Handlebars.registerHelper('regle-optionnelle', (option) => ReglesOptionnelles.isUsing(option));
Handlebars.registerHelper('plusMoins', diff => (diff > 0 ? '+' : '') + Math.round(diff))
// Handle v12 removal of this helper
Handlebars.registerHelper('select', function (selected, options) {
const escapedValue = RegExp.escape(Handlebars.escapeExpression(selected));
const rgx = new RegExp(' value=[\"\']' + escapedValue + '[\"\']');
const html = options.fn(this);
return html.replace(rgx, "$& selected");
})
// logic
Handlebars.registerHelper('either', (a, b) => a ?? b); Handlebars.registerHelper('either', (a, b) => a ?? b);
// string manipulation
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('uppercase', str => str?.toUpperCase() ?? ''); Handlebars.registerHelper('uppercase', str => str?.toUpperCase() ?? '');
@ -289,52 +272,47 @@ export class RdDUtility {
Handlebars.registerHelper('grammar-un', str => Grammar.articleIndetermine(str)); Handlebars.registerHelper('grammar-un', str => Grammar.articleIndetermine(str));
Handlebars.registerHelper('grammar-accord', (genre, ...args) => Grammar.accord(genre, args)); Handlebars.registerHelper('grammar-accord', (genre, ...args) => Grammar.accord(genre, args));
// math Handlebars.registerHelper('RDD_CONFIG', path => RDD_CONFIG[path])
Handlebars.registerHelper('min', (...args) => Math.min(...args.slice(0, -1)));
Handlebars.registerHelper('repeat', function(n, block) {
let accum = '';
for(let i = 0; i < n; ++i){
accum += block.fn(i)
}
return accum
})
// tableaux, listes
Handlebars.registerHelper('array-includes', (array, value) => array.includes(value));
Handlebars.registerHelper('isLastIndex', (index, list) => index + 1 >= list.length);
Handlebars.registerHelper('trier', list => list.sort((a, b) => a.name.localeCompare(b.name)));
// table de résolution
Handlebars.registerHelper('computeResolutionScore', (row, col) => RdDResolutionTable.computePercentage(row, col)); Handlebars.registerHelper('computeResolutionScore', (row, col) => RdDResolutionTable.computePercentage(row, col));
Handlebars.registerHelper('computeResolutionChances', (row, col) => RdDResolutionTable.computeChances(row, col)); Handlebars.registerHelper('computeResolutionChances', (row, col) => RdDResolutionTable.computeChances(row, col));
Handlebars.registerHelper('buildLigneInventaire', (item, options) => { return new Handlebars.SafeString(RdDUtility.buildLigneInventaire(item, options)); });
Handlebars.registerHelper('buildInventaireConteneur', (actorId, itemId, options) => { return new Handlebars.SafeString(RdDUtility.buildInventaireConteneur(actorId, itemId, options)); });
Handlebars.registerHelper('buildContenuConteneur', (item, options) => { return new Handlebars.SafeString(RdDUtility.buildContenuConteneur(item, options)); });
Handlebars.registerHelper('calculerPrixCommercant', item => item.calculerPrixCommercant());
Handlebars.registerHelper('caseTmr-label', coord => TMRUtility.getTMRLabel(coord));
Handlebars.registerHelper('caseTmr-type', coord => TMRUtility.getTMRType(coord));
Handlebars.registerHelper('typeTmr-name', type => TMRUtility.typeTmrName(type));
Handlebars.registerHelper('effetRencontre-name', coord => TMRUtility.typeTmrName(coord));
// gestion des dates et heures
Handlebars.registerHelper('timestamp-imgSigneHeure', (heure) => { return new Handlebars.SafeString(RdDTimestamp.imgSigneHeure(heure)) }); Handlebars.registerHelper('timestamp-imgSigneHeure', (heure) => { return new Handlebars.SafeString(RdDTimestamp.imgSigneHeure(heure)) });
Handlebars.registerHelper('timestamp-imgSigne', (heure) => { return new Handlebars.SafeString(RdDTimestamp.imgSigne(heure)) }); Handlebars.registerHelper('timestamp-imgSigne', (heure) => { return new Handlebars.SafeString(RdDTimestamp.imgSigne(heure)) });
Handlebars.registerHelper('timestamp-extract', timestamp => new RdDTimestamp(timestamp).toCalendrier()); Handlebars.registerHelper('timestamp-extract', timestamp => new RdDTimestamp(timestamp).toCalendrier());
Handlebars.registerHelper('timestamp-formulesDuree', () => RdDTimestamp.formulesDuree()); Handlebars.registerHelper('timestamp-formulesDuree', () => RdDTimestamp.formulesDuree());
Handlebars.registerHelper('timestamp-formulesPeriode', () => RdDTimestamp.formulesPeriode()); Handlebars.registerHelper('timestamp-formulesPeriode', () => RdDTimestamp.formulesPeriode());
// informations sur les acteurs
Handlebars.registerHelper('actor-default', (actorType, ...path) => RdDBaseActor.getDefaultValue(actorType, path.slice(0, -1))); Handlebars.registerHelper('actor-default', (actorType, ...path) => RdDBaseActor.getDefaultValue(actorType, path.slice(0, -1)));
Handlebars.registerHelper('filtreTriCompetences', competences => RdDItemCompetence.triVisible(competences));
Handlebars.registerHelper('experienceLog-topic', topic => ExperienceLog.labelTopic(topic));
// inventaire et marchands Handlebars.registerHelper('array-includes', (array, value) => array.includes(value));
Handlebars.registerHelper('buildLigneInventaire', (item, options) => { return new Handlebars.SafeString(RdDUtility.buildLigneInventaire(item, options)); }); Handlebars.registerHelper('min', (...args) => Math.min(...args.slice(0, -1)));
Handlebars.registerHelper('buildInventaireConteneur', (actorId, itemId, options) => { return new Handlebars.SafeString(RdDUtility.buildInventaireConteneur(actorId, itemId, options)); }); Handlebars.registerHelper('isLastIndex', (index, list) => index + 1 >= list.length);
Handlebars.registerHelper('buildContenuConteneur', (item, options) => { return new Handlebars.SafeString(RdDUtility.buildContenuConteneur(item, options)); }); Handlebars.registerHelper('regle-optionnelle', (option) => ReglesOptionnelles.isUsing(option));
Handlebars.registerHelper('calculerPrixCommercant', item => item.calculerPrixCommercant()); Handlebars.registerHelper('trier', list => list.sort((a, b) => a.name.localeCompare(b.name)));
Handlebars.registerHelper('filtreTriCompetences', competences => RdDItemCompetence.triVisible(competences));
Handlebars.registerHelper('linkCompendium', (pack, id, name) => RdDUtility.linkCompendium(pack, id, name));
Handlebars.registerHelper('uniteQuantite', (itemId, actorId) => RdDUtility.getItem(itemId, actorId)?.getUniteQuantite()); Handlebars.registerHelper('uniteQuantite', (itemId, actorId) => RdDUtility.getItem(itemId, actorId)?.getUniteQuantite());
Handlebars.registerHelper('isFieldInventaireModifiable', (type, field) => RdDItem.isFieldInventaireModifiable(type, field)); Handlebars.registerHelper('isFieldInventaireModifiable', (type, field) => RdDItem.isFieldInventaireModifiable(type, field));
// Items
Handlebars.registerHelper('rarete-getChamp', (rarete, field) => RdDRaretes.getChamp(rarete, field)); Handlebars.registerHelper('rarete-getChamp', (rarete, field) => RdDRaretes.getChamp(rarete, field));
// TMRs Handlebars.registerHelper('plusMoins', diff => (diff > 0 ? '+' : '') + Math.round(diff))
Handlebars.registerHelper('caseTmr-label', coord => TMRUtility.getTMRLabel(coord)); Handlebars.registerHelper('experienceLog-topic', topic => ExperienceLog.labelTopic(topic));
Handlebars.registerHelper('caseTmr-type', coord => TMRUtility.getTMRType(coord));
Handlebars.registerHelper('typeTmr-name', type => TMRUtility.typeTmrName(type)); // Handle v12 removal of this helper
Handlebars.registerHelper('effetRencontre-name', coord => TMRUtility.typeTmrName(coord)); Handlebars.registerHelper('select', function (selected, options) {
const escapedValue = RegExp.escape(Handlebars.escapeExpression(selected));
const rgx = new RegExp(' value=[\"\']' + escapedValue + '[\"\']');
const html = options.fn(this);
return html.replace(rgx, "$& selected");
});
return loadTemplates(templatePaths); return loadTemplates(templatePaths);
} }

View File

@ -14,14 +14,13 @@ export class Targets {
return { return {
id: target?.id, id: target?.id,
name: target?.document.name, name: target?.document.name,
img: target?.document.texture.src ?? target?.actor.img ?? 'icons/svg/mystery-man.svg' img: target?.document.texture.src ?? target?.actor.img ?? 'icons/svg/mystery-man.svg',
target
};
} }
}
static buildActorTokenData(tokenId, actor) { static buildActorTokenData(tokenId, actor) {
return { id: tokenId, name: actor.name, img: actor.img ?? 'icons/svg/mystery-man.svg' }; return { id: tokenId, name: actor.name, img: actor.img ?? 'icons/svg/mystery-man.svg' };
} }
static isTargetEntite(target) { static isTargetEntite(target) {
return target?.actor.type == 'entite' && target?.actor.system.definition.typeentite == ENTITE_NONINCARNE; return target?.actor.type == 'entite' && target?.actor.system.definition.typeentite == ENTITE_NONINCARNE;
} }

View File

@ -257,8 +257,47 @@ system:
d&eacute;vore.</p> d&eacute;vore.</p>
<h1>Venin</h1> <h1>Venin</h1>
<p>@UUID[Compendium.foundryvtt-reve-de-dragon.maladies-et-poisons.Item.v7yZidE9mObKO566]{Venin d'Araflate}</p>
<p></p> <table style="width: 65.039%; height: 65px;" border="1">
<tbody>
<tr style="height: 16px;">
<td style="width: 30.8567%; height: 16px;">Malignit&eacute;</td>
<td style="width: 68.3263%; height: 16px;">6</td>
</tr>
<tr style="height: 16px;">
<td style="width: 30.8567%; height: 16px;">P&eacute;riodicit&eacute;</td>
<td style="width: 68.3263%; height: 16px;">1 round</td>
</tr>
<tr style="height: 16px;">
<td style="width: 30.8567%; height: 16px;">Dommages</td>
<td style="width: 68.3263%; height: 16px;">-1d6 points d'endurance</td>
</tr>
<tr style="height: 17px;">
<td style="width: 30.8567%; height: 17px;">Antidotes</td>
<td style="width: 68.3263%; height: 17px;">-3 \ Liqueur de Bagdol +12, Lait
de lune +6</td>
</tr>
</tbody>
</table>
race: '' race: ''
notesmj: '' notesmj: ''
ownership: ownership:

View File

@ -227,8 +227,47 @@ system:
que vous nous faites un peu peur ?</p> que vous nous faites un peu peur ?</p>
<h1>Venin</h1> <h1>Venin</h1>
<p>@UUID[Compendium.foundryvtt-reve-de-dragon.maladies-et-poisons.Item.cFMUtU6LZG0mKeDl]{Venin de chrasme}</p>
<p></p> <table style="width: 399px; height: 65px;" border="1">
<tbody>
<tr style="height: 16px;">
<td style="width: 121px; height: 16px;">Malignit&eacute;</td>
<td style="width: 274px; height: 16px;">3</td>
</tr>
<tr style="height: 16px;">
<td style="width: 121px; height: 16px;">P&eacute;riodicit&eacute;</td>
<td style="width: 274px; height: 16px;">1 miute</td>
</tr>
<tr style="height: 16px;">
<td style="width: 121px; height: 16px;">Dommages</td>
<td style="width: 274px; height: 16px;">-1 point de vie</td>
</tr>
<tr style="height: 17px;">
<td style="width: 121px; height: 17px;">Antidotes</td>
<td style="width: 274px; height: 17px;">-2 \ Liqueur de Bagdol +16, Teinture
d'Erozonne +10</td>
</tr>
</tbody>
</table>
race: '' race: ''
notesmj: '' notesmj: ''
ownership: ownership:

View File

@ -257,7 +257,56 @@ system:
<h1 style="box-sizing: border-box; user-select: text; color: #191813; <h1 style="box-sizing: border-box; user-select: text; color: #191813;
font-family: GoudyAcc, sans-serif;">Venin</h1> font-family: GoudyAcc, sans-serif;">Venin</h1>
<p>@UUID[Compendium.foundryvtt-reve-de-dragon.maladies-et-poisons.Item.IF19EUvrY1HL87lr]{Venin paralysant de goule}</p>
<table style="box-sizing: border-box; user-select: text; width: 395px;
color: #191813; font-family: GoudyAcc, sans-serif; height: 65px;"
border="1">
<tbody style="box-sizing: border-box; user-select: text;">
<tr style="box-sizing: border-box; user-select: text; height: 16px;">
<td style="box-sizing: border-box; user-select: text; width: 122px; height:
16px;">Malignit&eacute;</td>
<td style="box-sizing: border-box; user-select: text; width: 272px; height:
16px;">6</td>
</tr>
<tr style="box-sizing: border-box; user-select: text; height: 16px;">
<td style="box-sizing: border-box; user-select: text; width: 122px; height:
16px;">P&eacute;riodicit&eacute;</td>
<td style="box-sizing: border-box; user-select: text; width: 272px; height:
16px;">1 round</td>
</tr>
<tr style="box-sizing: border-box; user-select: text; height: 16px;">
<td style="box-sizing: border-box; user-select: text; width: 122px; height:
16px;">Dommages</td>
<td style="box-sizing: border-box; user-select: text; width: 272px; height:
16px;">1 ligne de fatigue</td>
</tr>
<tr style="box-sizing: border-box; user-select: text; height: 17px;">
<td style="box-sizing: border-box; user-select: text; width: 122px; height:
17px;">Antidotes</td>
<td style="box-sizing: border-box; user-select: text; width: 272px; height:
17px;">-4 \ Floume-dhu +16</td>
</tr>
</tbody>
</table>
<p>La paralysie intervient quand toutes les lignes de fatigue sont pleines <p>La paralysie intervient quand toutes les lignes de fatigue sont pleines
et dure 6 heures.</p> et dure 6 heures.</p>

View File

@ -219,8 +219,50 @@ system:
attaque d&egrave;s qu&rsquo;il est surpris ou se croit en danger.</p> attaque d&egrave;s qu&rsquo;il est surpris ou se croit en danger.</p>
<h1>Venin</h1> <h1>Venin</h1>
<p>@UUID[Compendium.foundryvtt-reve-de-dragon.maladies-et-poisons.Item.iwlN0bNJ5XNNfjgj]{Venin de scologriffe}</p>
<p></p> <p>Sensation aigu&euml; de d&eacute;s&eacute;quilibre. Jouer VOLONT&Eacute;
&agrave; -3. En cas d&rsquo;&eacute;chec, on chute sans parvenir &agrave; se
relever.</p>
<table style="width: 59.506%;" border="1">
<tbody>
<tr>
<td style="width: 21.6667%;">Malignit&eacute;</td>
<td style="width: 77.5%;">3</td>
</tr>
<tr>
<td style="width: 21.6667%;">P&eacute;riodicit&eacute;</td>
<td style="width: 77.5%;">1 minute</td>
</tr>
<tr>
<td style="width: 21.6667%;">Dommages</td>
<td style="width: 77.5%;">-1 point de vie</td>
</tr>
<tr>
<td style="width: 21.6667%;">Antidotes</td>
<td style="width: 77.5%;">-3 \ Liqueur de Bagdol +16, Topazo&iuml;ne +8</td>
</tr>
</tbody>
</table>
race: '' race: ''
notesmj: '' notesmj: ''
ownership: ownership:

View File

@ -215,8 +215,47 @@ system:
est mortel.</p> est mortel.</p>
<h1>Venin</h1> <h1>Venin</h1>
<p>@UUID[Compendium.foundryvtt-reve-de-dragon.maladies-et-poisons.Item.lUeNPc0ECKqHglbG]{Venin de vipère jaune}</p>
<p></p> <table style="width: 61.5572%;" border="1">
<tbody>
<tr>
<td style="width: 21.1221%;">Malignit&eacute;</td>
<td style="width: 78.0528%;">2</td>
</tr>
<tr>
<td style="width: 21.1221%;">P&eacute;riodicit&eacute;</td>
<td style="width: 78.0528%;">6 rounds</td>
</tr>
<tr>
<td style="width: 21.1221%;">Dommages</td>
<td style="width: 78.0528%;">-1 point de vie</td>
</tr>
<tr>
<td style="width: 21.1221%;">Antidotes</td>
<td style="width: 78.0528%;">-3 \ Liqueur de Bagdol +14, Topazo&iuml;ne
+10</td>
</tr>
</tbody>
</table>
race: '' race: ''
notesmj: '' notesmj: ''
ownership: ownership:

View File

@ -6,7 +6,7 @@ _id: v7yZidE9mObKO566
system: system:
description: >- description: >-
<p>Venin de l'araflate. Sa morsure inflige un venin anesth&eacute;siant, <p>Venin de l'araflate. Sa morsure inflige un venin anesth&eacute;siant,
inocul&eacute; sur toute blessure sauf contusion/&eacute;raflure.</p> inocul&eacute; sur toute blessure sauf contusion\ &eacute;raflure.</p>
<p>Chaque perte d&rsquo;endurance s&rsquo;accompagne de la fatigue <p>Chaque perte d&rsquo;endurance s&rsquo;accompagne de la fatigue
&eacute;quivalente. &Agrave; z&eacute;ro d&rsquo;endurance, la victime est &eacute;quivalente. &Agrave; z&eacute;ro d&rsquo;endurance, la victime est

View File

@ -4,7 +4,7 @@ img: systems/foundryvtt-reve-de-dragon/icons/maladies_venins/venin.webp
effects: [] effects: []
_id: cFMUtU6LZG0mKeDl _id: cFMUtU6LZG0mKeDl
system: system:
description: '' description: <p>Venin du chrasme.&nbsp;</p>
descriptionmj: '' descriptionmj: ''
temporel: temporel:
debut: debut:

View File

@ -5,8 +5,10 @@ effects: []
_id: iwlN0bNJ5XNNfjgj _id: iwlN0bNJ5XNNfjgj
system: system:
description: >- description: >-
<p>Sensation aigu&euml; de d&eacute;s&eacute;quilibre. <p>Venin du scologriffe. Il provoque une sensation aigu&euml; de
Jouer VOLONT&Eacute; &agrave; -3. En cas d&rsquo;&eacute;chec, on chute d&eacute;s&eacute;quilibre.</p>
<p>Jouer VOLONT&Eacute; &agrave; -3. En cas d&rsquo;&eacute;chec, on chute
sans parvenir &agrave; se relever.</p> sans parvenir &agrave; se relever.</p>
descriptionmj: '' descriptionmj: ''
temporel: temporel:
@ -24,7 +26,7 @@ system:
nombre: 1 nombre: 1
remedesconnus: false remedesconnus: false
remedes: '-3 \ Liqueur de Bagdol +16 Topazoïne +8' remedes: '-3 \ Liqueur de Bagdol +16 Topazoïne +8'
dommages: 1 pt de Vie, sensation de déséquilibre dommages: 1 pt de Vie
periodicite: 1 minute periodicite: 1 minute
ownership: ownership:
default: 0 default: 0

View File

@ -4,7 +4,7 @@ img: systems/foundryvtt-reve-de-dragon/icons/maladies_venins/venin.webp
effects: [] effects: []
_id: lUeNPc0ECKqHglbG _id: lUeNPc0ECKqHglbG
system: system:
description: '' description: <p>Venin de la vip&egrave;re jaune. Il provoque des spasmes musculaires.</p>
descriptionmj: '' descriptionmj: ''
temporel: temporel:
debut: debut:
@ -21,7 +21,7 @@ system:
nombre: 6 nombre: 6
remedesconnus: false remedesconnus: false
remedes: '-3\ Liqueur de Bagdol +14, Topazoïne +10' remedes: '-3\ Liqueur de Bagdol +14, Topazoïne +10'
dommages: 1 pt de Vie, spasmes musculaires dommages: 1 pt de Vie
periodicite: 6 rounds periodicite: 6 rounds
ownership: ownership:
default: 0 default: 0

View File

@ -6,8 +6,9 @@ effects: []
system: system:
description: >- description: >-
<p>Ce sort ne peut être recherché/synthétisé quen ayant compris le <p>Ce sort ne peut être recherché/synthétisé quen ayant compris le
@UUID[Compendium.foundryvtt-reve-de-dragon.meditations-et-ecrits.Item.aFTL3ynBabEUHdP3]{Le Paradoxe de lImmobilité Rapide} @Item[u2izNaMF2bnwHAwj]{Le Paradoxe de lImmobilité Rapide} tel quénoncé
tel quénoncé par Wanister de Bravo.</p> par Wanister de Bravo.</p>
<p>Ce sort permet de monter en TMR et dy demeurer tout en nétant quà demi <p>Ce sort permet de monter en TMR et dy demeurer tout en nétant quà demi
libre de ses mouvements : à cheval, secoué dans une voiture, en bateau, etc. libre de ses mouvements : à cheval, secoué dans une voiture, en bateau, etc.
Il est également possible, sous leffet de Concentration, de monter en TMR Il est également possible, sous leffet de Concentration, de monter en TMR

View File

@ -6,7 +6,7 @@ effects: []
system: system:
description: >- description: >-
<p>Ce sort ne peut être recherché/synthétisé quen ayant compris le sens <p>Ce sort ne peut être recherché/synthétisé quen ayant compris le sens
caché du @UUID[Compendium.foundryvtt-reve-de-dragon.meditations-et-ecrits.Item.3ya2og0wNFKHZs3Q]{Premier Chant Dérisoire} de Yester caché du @Item[qdyYSktETI8mKY6Z]{Premier Chant Dérisoire} de Yester
lAncien</p> lAncien</p>
<p>Cette illusion visuelle donne à la cible un air comique, drôle, <p>Cette illusion visuelle donne à la cible un air comique, drôle,

View File

@ -18,7 +18,7 @@ system:
<p>Ce rituel permet dentendre à distance. Il doit être ciblé sur un <p>Ce rituel permet dentendre à distance. Il doit être ciblé sur un
instrument sonore (harpe, luth, gong, cloche, etc.) faute de quoi lon instrument sonore (harpe, luth, gong, cloche, etc.) faute de quoi lon
aboutit à un cas de @UUID[Compendium.foundryvtt-reve-de-dragon.rappel-des-regles.JournalEntry.erO7AICiN1LtRyFg]{Magie impossible}. Lors aboutit à un cas de @JournalEntry[eANDHKJXMPmPNJ2F]{Magie impossible}. Lors
du lancer, le rituel doit être paramétré sur une personne précise du lancer, le rituel doit être paramétré sur une personne précise
(humanoïde) ou un lieu architectural précis (salle, couloir, perron, (humanoïde) ou un lieu architectural précis (salle, couloir, perron,
escalier, balcon, etc.). Les éléments naturels du paysage (rochers, arbres, escalier, balcon, etc.). Les éléments naturels du paysage (rochers, arbres,

View File

@ -13,7 +13,7 @@ system:
linformation nest plus transmise au cerveau. Toutefois, dès quun conflit linformation nest plus transmise au cerveau. Toutefois, dès quun conflit
survient avec lun des quatre autres sens, une brume limbaire apparaît à la survient avec lun des quatre autres sens, une brume limbaire apparaît à la
place de la cible, affectant grossièrement la forme de cette dernière (voir place de la cible, affectant grossièrement la forme de cette dernière (voir
@UUID[Compendium.foundryvtt-reve-de-dragon.rappel-des-regles.JournalEntry.ZmMoOtUdgjMd4cNs]{Conflit de sens}). Le sort naffecte @JournalEntry[9bvrfDaudPqvQZPY]{Conflit de sens}). Le sort naffecte
rigoureusement que la cible dans sa catégorie. Lancé sur un humanoïde, il rigoureusement que la cible dans sa catégorie. Lancé sur un humanoïde, il
rend son corps invisible, mais pas son équipement. Pour bénéficier dune rend son corps invisible, mais pas son équipement. Pour bénéficier dune
réelle invisibilité, un humanoïde doit être intégralement nu, ou bien réelle invisibilité, un humanoïde doit être intégralement nu, ou bien

View File

@ -17,11 +17,9 @@ system:
points de rêve sont tout de même dépensés.</p> points de rêve sont tout de même dépensés.</p>
<p>La perfection de ce rituel opère la synthèse de <p>La perfection de ce rituel opère la synthèse de
@UUID[Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.Item.8qdOVBr3S7AhRsJw]{Miroir d'Hypnos}, @Item[Ew5JzQ2lzcpGoF11]{Miroir d'Hypnos}, @Item[M99MFM5GalPJxIdW]{Harpe
@UUID[Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.Item.DvP1kqAtGpr5Kux2]{Harpe d'Hypnos}, d'Hypnos}, @Item[phT9NLxLGFQp5CSI]{Invoquer sa voix}
@UUID[phT9Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.Item.1PskCeKgFa9XiKoS]{Invoquer sa voix} et et@Item[vygR045EwEOsNqJl]{Invoquer son image}. Paramétrage et ciblage
@UUID[Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.Item.cghxHRstw7cXLEm4]{Invoquer son image}.
Paramétrage et ciblage
obéissent aux mêmes conditions et restrictions que Miroir dHypnos, avec obéissent aux mêmes conditions et restrictions que Miroir dHypnos, avec
magie impossible en cas de ciblage ailleurs que sur un miroir. Dès que les magie impossible en cas de ciblage ailleurs que sur un miroir. Dès que les
formes y bougent et que létat hypnotique commence, le haut-rêvant voit la formes y bougent et que létat hypnotique commence, le haut-rêvant voit la

View File

@ -16,9 +16,8 @@ system:
celle-ci est morte ou a changé de rêve, aucun effet ne se produit, mais les celle-ci est morte ou a changé de rêve, aucun effet ne se produit, mais les
points de rêve sont tout de même dépensés.</p> points de rêve sont tout de même dépensés.</p>
<p>Ce rituel est comme le négatif de <p>Ce rituel est comme le négatif de @Item[Ew5JzQ2lzcpGoF11]{Miroir
@UUID[Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.Item.8qdOVBr3S7AhRsJw]{Miroir d'Hypnos}. d'Hypnos}. Les conditions de ciblage et de paramétrage en sont exactement
Les conditions de ciblage et de paramétrage en sont exactement
les mêmes. Lorsquun mouvement apparaît au centre du miroir, provoquant les mêmes. Lorsquun mouvement apparaît au centre du miroir, provoquant
létat hypnotique, le haut-rêvant peut commencer à effectuer des gestes, des létat hypnotique, le haut-rêvant peut commencer à effectuer des gestes, des
mimiques, ou montrer ostensiblement un objet quil tient sur lui, mais sans mimiques, ou montrer ostensiblement un objet quil tient sur lui, mais sans

View File

@ -10,9 +10,8 @@ system:
aliments et aux boissons. Par définition, la catégorie est toujours la même aliments et aux boissons. Par définition, la catégorie est toujours la même
: objet en objet. Lintensité de la saveur est celle de la cible. Comme pour : objet en objet. Lintensité de la saveur est celle de la cible. Comme pour
tous les sorts dillusions sensorielles, la saveur illusoire ne peut être tous les sorts dillusions sensorielles, la saveur illusoire ne peut être
quune saveur connue du haut-rêvant. Couplé à @UUID[Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.Item.nNh8N9nF8m6zLtrt]{Narine quune saveur connue du haut-rêvant. Couplé à @Item[dEs7qg5UsqpQxok6]{Narine
d'Hypnos} et à @UUID[Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.Item.ktFI49xqZ0mGfTzt]{Transfiguration}, d'Hypnos} et à @Item[skPIvFb5tRRPHDGU]{Transfiguration}, ce sort peut
ce sort peut
permettre des ignominies gastronomiques : que pensez- vous de ce vin à la permettre des ignominies gastronomiques : que pensez- vous de ce vin à la
robe de rubis, au savoureux bouquet de framboise, et qui vous roule sur la robe de rubis, au savoureux bouquet de framboise, et qui vous roule sur la
langue comme du velours ?... Illusion de bout en bout, ce nest que de leau langue comme du velours ?... Illusion de bout en bout, ce nest que de leau

View File

@ -18,7 +18,7 @@ system:
<p>Ce rituel permet de voir à distance. Il doit être ciblé sur un miroir ou <p>Ce rituel permet de voir à distance. Il doit être ciblé sur un miroir ou
une surface réfléchissante, comme de leau parfaitement calme, faute de quoi une surface réfléchissante, comme de leau parfaitement calme, faute de quoi
lon aboutit à un cas de @UUID[Compendium.foundryvtt-reve-de-dragon.rappel-des-regles.JournalEntry.erO7AICiN1LtRyFg]{Magie impossible}. lon aboutit à un cas de @JournalEntry[eANDHKJXMPmPNJ2F]{Magie impossible}.
Lors du lancer, le rituel doit être paramétré sur une personne ou un lieu Lors du lancer, le rituel doit être paramétré sur une personne ou un lieu
architectural précis, mêmes restrictions que pour Harpe dHypnos. Puis le architectural précis, mêmes restrictions que pour Harpe dHypnos. Puis le
sort étant ciblé sur le miroir, le haut-rêvant croit voir y évoluer des sort étant ciblé sur le miroir, le haut-rêvant croit voir y évoluer des

View File

@ -6,7 +6,7 @@ effects: []
system: system:
description: >- description: >-
<p>Narine dHypnos est une illusion purement <em>olfactive</em>. Son <p>Narine dHypnos est une illusion purement <em>olfactive</em>. Son
fonctionnement est identique à @UUID[Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.Item.D9eSbTGp3i5gdbc5]{Tympan d'Hypnos}, fonctionnement est identique à @Item[QdtcV9WVi9BdL153]{Tympan d'Hypnos},
sappliquant aux odeurs à la place des sons. Lillusion doit pareillement sappliquant aux odeurs à la place des sons. Lillusion doit pareillement
rester dans la même catégorie que la cible. Peu utilisé sur les humanoïdes rester dans la même catégorie que la cible. Peu utilisé sur les humanoïdes
et les animaux, à moins davoir une raison très précise de vouloir quun et les animaux, à moins davoir une raison très précise de vouloir quun

View File

@ -5,7 +5,7 @@ img: systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp
effects: [] effects: []
system: system:
description: >- description: >-
<p>Comme @UUID[Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.Item.7eeKT1BbsGdyY1GL]{Robe d'Hypnos}, cette illusion visuelle <p>Comme @Item[viSBXe0CnbRI1O2J]{Robe d'Hypnos}, cette illusion visuelle
sapplique à tout ce qui est porté par la cible au moment du ciblage. sapplique à tout ce qui est porté par la cible au moment du ciblage.
Vêtements et équipement deviennent invisibles : le résultat est que la cible Vêtements et équipement deviennent invisibles : le résultat est que la cible
semble nue.</p> semble nue.</p>
@ -17,7 +17,7 @@ system:
<p>La nudité résultante nest elle-même quune illusion. Un corps nu <p>La nudité résultante nest elle-même quune illusion. Un corps nu
apparaît, vraisemblable, mais sans pour autant que ce soit exactement celui apparaît, vraisemblable, mais sans pour autant que ce soit exactement celui
de la cible. Toucher ce corps nu entraîne évidemment un de la cible. Toucher ce corps nu entraîne évidemment un
@UUID[Compendium.foundryvtt-reve-de-dragon.rappel-des-regles.JournalEntry.ZmMoOtUdgjMd4cNs]{Conflit de sens} et une brume limbaire.</p> @JournalEntry[9bvrfDaudPqvQZPY]{Conflit de sens} et une brume limbaire.</p>
<p>Tout vêtement retiré, cessant dêtre en contact avec la cible, redevient <p>Tout vêtement retiré, cessant dêtre en contact avec la cible, redevient
visible quant à lui, mais naltère pas lillusion de nudité. (On ne saurait visible quant à lui, mais naltère pas lillusion de nudité. (On ne saurait

View File

@ -47,7 +47,7 @@ system:
<li>Si lon prévoit quune pièce déquipement va cesser à un moment dêtre <li>Si lon prévoit quune pièce déquipement va cesser à un moment dêtre
en contact avec la cible et que lon désire que son illusion perdure, en contact avec la cible et que lon désire que son illusion perdure,
utiliser conjointement à son sujet le sort standard de utiliser conjointement à son sujet le sort standard de
@UUID[Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.Item.ktFI49xqZ0mGfTzt]{Transfiguration}.</li> @Item[skPIvFb5tRRPHDGU]{Transfiguration}.</li>
</ul> </ul>
descriptionmj: '' descriptionmj: ''

View File

@ -6,7 +6,7 @@ effects: []
system: system:
description: >- description: >-
<p>Cette illusion visuelle ne peut être lancée que sur un humanoïde nu ou <p>Cette illusion visuelle ne peut être lancée que sur un humanoïde nu ou
étant préalablement sous leffet de @UUID[Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.Item.o99y8VPp7x2mGbaU]{Nudité étant préalablement sous leffet de @Item[m2pwvCCImJnbKVcW]{Nudité
d'Hypnos}. Il est alors possible de lui inventer tous les vêtements d'Hypnos}. Il est alors possible de lui inventer tous les vêtements
imaginables, couvrant plus ou moins totalement son corps, y compris une imaginables, couvrant plus ou moins totalement son corps, y compris une
armure. Des pièces déquipement illusoires sont également possibles, armes, armure. Des pièces déquipement illusoires sont également possibles, armes,
@ -16,13 +16,12 @@ system:
sort na aucun effet mais les points de rêve sont dépensés quand même.</p> sort na aucun effet mais les points de rêve sont dépensés quand même.</p>
<p>Si la cible est réellement nue, seul le fait de la toucher peut générer <p>Si la cible est réellement nue, seul le fait de la toucher peut générer
un @UUID[Compendium.foundryvtt-reve-de-dragon.rappel-des-regles.JournalEntry.ZmMoOtUdgjMd4cNs]{Conflit de sens} et une brume limbaire, un @JournalEntry[9bvrfDaudPqvQZPY]{Conflit de sens} et une brume limbaire,
pas son comportement. En revanche, si sa nudité est illusoire, son pas son comportement. En revanche, si sa nudité est illusoire, son
comportement peut générer un conflit de sens sil y a contradiction entre comportement peut générer un conflit de sens sil y a contradiction entre
lutilisation de son équipement réel (rendu invisible par lutilisation de son équipement réel (rendu invisible par
@UUID[Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.Item.o99y8VPp7x2mGbaU]{Nudité @Item[m2pwvCCImJnbKVcW]{Nudité d'Hypnos}) et son équipement illusoire (celui
d'Hypnos}) et son équipement illusoire (celui inventé par Robe inventé par Robe Fantasmagorique).</p>
Fantasmagorique).</p>
descriptionmj: '' descriptionmj: ''
draconic: Voie d'Hypnos draconic: Voie d'Hypnos
duree: HN duree: HN

View File

@ -6,7 +6,7 @@ effects: []
system: system:
description: >- description: >-
<p>Lillusion purement visuelle de Transfiguration fonctionne de la même <p>Lillusion purement visuelle de Transfiguration fonctionne de la même
façon que @UUID[Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.Item.OTtXNS1SnVfWWGKi]{Métamorphose}, sauf que lillusion doit façon que @Item[Z2U35toRL5nSBr1k]{Métamorphose}, sauf que lillusion doit
rester dans la même catégorie que la cible : humanoïde en humanoïde, animal rester dans la même catégorie que la cible : humanoïde en humanoïde, animal
en animal, végétal en végétal, ou objet en objet, exclusivement. Toute en animal, végétal en végétal, ou objet en objet, exclusivement. Toute
disparité de catégorie entre la cible et lillusion entraîne la dissipation disparité de catégorie entre la cible et lillusion entraîne la dissipation

View File

@ -7,7 +7,7 @@ system:
description: >- description: >-
<p>Tympan dHypnos est une illusion purement <em>auditive </em>pouvant <p>Tympan dHypnos est une illusion purement <em>auditive </em>pouvant
sappliquer indifféremment à un humanoïde, un animal ou un objet. Comme pour sappliquer indifféremment à un humanoïde, un animal ou un objet. Comme pour
@UUID[Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.Item.ktFI49xqZ0mGfTzt]{Transfiguration}, lillusion doit toujours @Item[skPIvFb5tRRPHDGU]{Transfiguration}, lillusion doit toujours
appartenir à la même catégorie que la cible. Toute disparité entraîne les appartenir à la même catégorie que la cible. Toute disparité entraîne les
mêmes conséquences. On peut ainsi changer la voix dun humanoïde en une mêmes conséquences. On peut ainsi changer la voix dun humanoïde en une
autre <em>voix </em>dhumanoïde, le cri dun animal en <em>cri </em>dun autre <em>voix </em>dhumanoïde, le cri dun animal en <em>cri </em>dun
@ -15,7 +15,7 @@ system:
Tympan dHypnos sur un objet non sonore naboutit à aucun effet. Ce sort Tympan dHypnos sur un objet non sonore naboutit à aucun effet. Ce sort
permet entre autres denrichir une illusion visuelle en lui apportant son permet entre autres denrichir une illusion visuelle en lui apportant son
complément sonore, diminuant ainsi les risques de complément sonore, diminuant ainsi les risques de
@UUID[Compendium.foundryvtt-reve-de-dragon.rappel-des-regles.JournalEntry.ZmMoOtUdgjMd4cNs]{Conflit de sens}. Le cri illusoire dun @JournalEntry[9bvrfDaudPqvQZPY]{Conflit de sens}. Le cri illusoire dun
animal doit être le cri dun animal connu, et vouloir donner à un humanoïde animal doit être le cri dun animal connu, et vouloir donner à un humanoïde
la même voix que quelquun dautre demande un jet dOUÏE à -8, avec les la même voix que quelquun dautre demande un jet dOUÏE à -8, avec les
mêmes remarques que pour Transfiguration. Noter que seule la voix est mêmes remarques que pour Transfiguration. Noter que seule la voix est

View File

@ -5,7 +5,7 @@ img: systems/foundryvtt-reve-de-dragon/icons/competence_narcos.webp
effects: [] effects: []
system: system:
description: >- description: >-
<p>M&ecirc;me principe que la @UUID[Compendium.foundryvtt-reve-de-dragon.sorts-narcos.Item.lq3jQDJsAflJ2PEy]{Fl&egrave;che de Feu}. <p>M&ecirc;me principe que la @Item[r9onPANmiK5E5Jnw]{Fl&egrave;che de Feu}.
Une dague ainsi modifi&eacute;e a un +dom de +4.</p> Une dague ainsi modifi&eacute;e a un +dom de +4.</p>
<p>La dague de force a une r&eacute;sistance absolue tant que dure <p>La dague de force a une r&eacute;sistance absolue tant que dure

View File

@ -5,8 +5,8 @@ img: systems/foundryvtt-reve-de-dragon/icons/competence_narcos.webp
effects: [] effects: []
system: system:
description: >- description: >-
<p>M&ecirc;me principe que la @UUID[Compendium.foundryvtt-reve-de-dragon.sorts-narcos.Item.lq3jQDJsAflJ2PEy]{Fl&egrave;che de Feu} <p>M&ecirc;me principe que la@Item[r9onPANmiK5E5Jnw]{Fl&egrave;che de Feu}
et la @UUID[Compendium.foundryvtt-reve-de-dragon.sorts-narcos.Item.0N6ILL5RMgmShyM8]{Dague de Force}, y compris la et la @Item[8BJ9kn3AWLFDwvez]{Dague de Force}, y compris la
d&eacute;t&eacute;rioration automatique de 1 point de r&eacute;sistance. Une d&eacute;t&eacute;rioration automatique de 1 point de r&eacute;sistance. Une
&eacute;p&eacute;e dragonne ainsi modifi&eacute;e a un +dom de +6.</p> &eacute;p&eacute;e dragonne ainsi modifi&eacute;e a un +dom de +6.</p>
descriptionmj: '' descriptionmj: ''

View File

@ -9,7 +9,7 @@ system:
description: >- description: >-
<p>Les sorts d&rsquo;Invuln&eacute;rabilit&eacute; Chromatique ne peuvent <p>Les sorts d&rsquo;Invuln&eacute;rabilit&eacute; Chromatique ne peuvent
&ecirc;tre recherch&eacute;s/synth&eacute;tis&eacute;s qu&rsquo;en ayant &ecirc;tre recherch&eacute;s/synth&eacute;tis&eacute;s qu&rsquo;en ayant
compris le @UUID[Compendium.foundryvtt-reve-de-dragon.meditations-et-ecrits.Item.UoEHSr7Mcz4crdSF]{Le Principe Drachromatique} (voir Les compris le @Item[5YK6q2KuKArkvDWy]{Le Principe Drachromatique} (voir Les
grimoires, p218).</p> grimoires, p218).</p>
<p>Cette zone mobile personnelle, ob&eacute;issant &agrave; toutes les <p>Cette zone mobile personnelle, ob&eacute;issant &agrave; toutes les
@ -27,8 +27,8 @@ system:
protection chromatique au rouge r2 conf&egrave;re une protection de +2 ; protection chromatique au rouge r2 conf&egrave;re une protection de +2 ;
celle au bleu r6 une protection de +6.</p> celle au bleu r6 une protection de +6.</p>
<p>Ce sort est incompatible avec le rituel @UUID[Compendium.foundryvtt-reve-de-dragon.sorts-oniros.Item.K9lspVNJAJmCAQHB]{Haubert <p>Ce sort est incompatible avec le rituel @Item[qW1vAyoqrvxG0tDn]{Haubert
d'Oniros}.</p> d'Oniros (rituel)}.</p>
<p>V&ecirc;tements et &eacute;quipement peuvent avoir &eacute;t&eacute; <p>V&ecirc;tements et &eacute;quipement peuvent avoir &eacute;t&eacute;
color&eacute;s dans la teinte voulue par une <em>Transmutation color&eacute;s dans la teinte voulue par une <em>Transmutation

View File

@ -7,7 +7,7 @@ system:
description: >- description: >-
<p>Les sorts d&rsquo;Invuln&eacute;rabilit&eacute; Chromatique ne peuvent <p>Les sorts d&rsquo;Invuln&eacute;rabilit&eacute; Chromatique ne peuvent
&ecirc;tre recherch&eacute;s/synth&eacute;tis&eacute;s qu&rsquo;en ayant &ecirc;tre recherch&eacute;s/synth&eacute;tis&eacute;s qu&rsquo;en ayant
compris le @UUID[Compendium.foundryvtt-reve-de-dragon.meditations-et-ecrits.Item.UoEHSr7Mcz4crdSF]{Le Principe Drachromatique} (voir Les compris le @Item[5YK6q2KuKArkvDWy]{Le Principe Drachromatique} (voir Les
grimoires, p218).</p> grimoires, p218).</p>
<p>Cette zone mobile personnelle, ob&eacute;issant &agrave; toutes les <p>Cette zone mobile personnelle, ob&eacute;issant &agrave; toutes les
@ -25,8 +25,8 @@ system:
protection chromatique au rouge r2 conf&egrave;re une protection de +2 ; protection chromatique au rouge r2 conf&egrave;re une protection de +2 ;
celle au bleu r6 une protection de +6.</p> celle au bleu r6 une protection de +6.</p>
<p>Ce sort est incompatible avec le rituel @UUID[Compendium.foundryvtt-reve-de-dragon.sorts-oniros.Item.K9lspVNJAJmCAQHB]{Haubert <p>Ce sort est incompatible avec le rituel @Item[qW1vAyoqrvxG0tDn]{Haubert
d'Oniros}.</p> d'Oniros (rituel)}.</p>
<p>V&ecirc;tements et &eacute;quipement peuvent avoir &eacute;t&eacute; <p>V&ecirc;tements et &eacute;quipement peuvent avoir &eacute;t&eacute;
color&eacute;s dans la teinte voulue par une <em>Transmutation color&eacute;s dans la teinte voulue par une <em>Transmutation

View File

@ -7,7 +7,7 @@ system:
description: >- description: >-
<p>Les sorts d&rsquo;Invuln&eacute;rabilit&eacute; Chromatique ne peuvent <p>Les sorts d&rsquo;Invuln&eacute;rabilit&eacute; Chromatique ne peuvent
&ecirc;tre recherch&eacute;s/synth&eacute;tis&eacute;s qu&rsquo;en ayant &ecirc;tre recherch&eacute;s/synth&eacute;tis&eacute;s qu&rsquo;en ayant
compris le @UUID[Compendium.foundryvtt-reve-de-dragon.meditations-et-ecrits.Item.UoEHSr7Mcz4crdSF]{Le Principe Drachromatique} (voir Les compris le @Item[5YK6q2KuKArkvDWy]{Le Principe Drachromatique} (voir Les
grimoires, p218).</p> grimoires, p218).</p>
<p>Cette zone mobile personnelle, ob&eacute;issant &agrave; toutes les <p>Cette zone mobile personnelle, ob&eacute;issant &agrave; toutes les
@ -25,8 +25,8 @@ system:
protection chromatique au rouge r2 conf&egrave;re une protection de +2 ; protection chromatique au rouge r2 conf&egrave;re une protection de +2 ;
celle au bleu r6 une protection de +6.</p> celle au bleu r6 une protection de +6.</p>
<p>Ce sort est incompatible avec le rituel @UUID[Compendium.foundryvtt-reve-de-dragon.sorts-oniros.Item.K9lspVNJAJmCAQHB]{Haubert <p>Ce sort est incompatible avec le rituel @Item[qW1vAyoqrvxG0tDn]{Haubert
d'Oniros}.</p> d'Oniros (rituel)}.</p>
<p>V&ecirc;tements et &eacute;quipement peuvent avoir &eacute;t&eacute; <p>V&ecirc;tements et &eacute;quipement peuvent avoir &eacute;t&eacute;
color&eacute;s dans la teinte voulue par une&nbsp;<em>Transmutation color&eacute;s dans la teinte voulue par une&nbsp;<em>Transmutation

View File

@ -7,7 +7,7 @@ system:
description: >- description: >-
<p>Les sorts d&rsquo;Invuln&eacute;rabilit&eacute; Chromatique ne peuvent <p>Les sorts d&rsquo;Invuln&eacute;rabilit&eacute; Chromatique ne peuvent
&ecirc;tre recherch&eacute;s/synth&eacute;tis&eacute;s qu&rsquo;en ayant &ecirc;tre recherch&eacute;s/synth&eacute;tis&eacute;s qu&rsquo;en ayant
compris le @UUID[Compendium.foundryvtt-reve-de-dragon.meditations-et-ecrits.Item.UoEHSr7Mcz4crdSF]{Le Principe Drachromatique} (voir Les compris le @Item[5YK6q2KuKArkvDWy]{Le Principe Drachromatique} (voir Les
grimoires, p218).</p> grimoires, p218).</p>
<p>Cette zone mobile personnelle, ob&eacute;issant &agrave; toutes les <p>Cette zone mobile personnelle, ob&eacute;issant &agrave; toutes les
@ -25,8 +25,8 @@ system:
protection chromatique au rouge r2 conf&egrave;re une protection de +2 ; protection chromatique au rouge r2 conf&egrave;re une protection de +2 ;
celle au bleu r6 une protection de +6.</p> celle au bleu r6 une protection de +6.</p>
<p>Ce sort est incompatible avec le rituel @UUID[Compendium.foundryvtt-reve-de-dragon.sorts-oniros.Item.K9lspVNJAJmCAQHB]{Haubert <p>Ce sort est incompatible avec le rituel @Item[qW1vAyoqrvxG0tDn]{Haubert
d'Oniros}.</p> d'Oniros (rituel)}.</p>
<p>V&ecirc;tements et &eacute;quipement peuvent avoir &eacute;t&eacute; <p>V&ecirc;tements et &eacute;quipement peuvent avoir &eacute;t&eacute;
color&eacute;s dans la teinte voulue par une&nbsp;<em>Transmutation color&eacute;s dans la teinte voulue par une&nbsp;<em>Transmutation

View File

@ -7,7 +7,7 @@ system:
description: >- description: >-
<p>Les sorts d&rsquo;Invuln&eacute;rabilit&eacute; Chromatique ne peuvent <p>Les sorts d&rsquo;Invuln&eacute;rabilit&eacute; Chromatique ne peuvent
&ecirc;tre recherch&eacute;s/synth&eacute;tis&eacute;s qu&rsquo;en ayant &ecirc;tre recherch&eacute;s/synth&eacute;tis&eacute;s qu&rsquo;en ayant
compris le @UUID[Compendium.foundryvtt-reve-de-dragon.meditations-et-ecrits.Item.UoEHSr7Mcz4crdSF]{Le Principe Drachromatique} (voir Les compris le @Item[5YK6q2KuKArkvDWy]{Le Principe Drachromatique} (voir Les
grimoires, p218).</p> grimoires, p218).</p>
<p>Cette zone mobile personnelle, ob&eacute;issant &agrave; toutes les <p>Cette zone mobile personnelle, ob&eacute;issant &agrave; toutes les
@ -25,8 +25,8 @@ system:
protection chromatique au rouge r2 conf&egrave;re une protection de +2 ; protection chromatique au rouge r2 conf&egrave;re une protection de +2 ;
celle au bleu r6 une protection de +6.</p> celle au bleu r6 une protection de +6.</p>
<p>Ce sort est incompatible avec le rituel @UUID[Compendium.foundryvtt-reve-de-dragon.sorts-oniros.Item.K9lspVNJAJmCAQHB]{Haubert <p>Ce sort est incompatible avec le rituel @Item[qW1vAyoqrvxG0tDn]{Haubert
d'Oniros}.</p> d'Oniros (rituel)}.</p>
<p>V&ecirc;tements et &eacute;quipement peuvent avoir &eacute;t&eacute; <p>V&ecirc;tements et &eacute;quipement peuvent avoir &eacute;t&eacute;
color&eacute;s dans la teinte voulue par une <em>Transmutation color&eacute;s dans la teinte voulue par une <em>Transmutation

View File

@ -22,7 +22,7 @@ system:
<li>Visage et torse (+ &eacute;paules/bras/mains) : 4 m</li> <li>Visage et torse (+ &eacute;paules/bras/mains) : 4 m</li>
<li>Nudit&eacute; quasi totale : 8 m, comme une lanterne ou le sort de <li>Nudit&eacute; quasi totale : 8 m, comme une lanterne ou le sort de
@UUID[Compendium.foundryvtt-reve-de-dragon.sorts-oniros.Item.tuVJbePw7bmVs2pO]{Lanterne}.</li> @Item[frNisNWwVXP8N5mn]{Lanterne}.</li>
</ul> </ul>
descriptionmj: '' descriptionmj: ''

View File

@ -6,7 +6,7 @@ effects: []
system: system:
description: >- description: >-
<p>La recherche des zones de Transmutation Chromatique requiert la <p>La recherche des zones de Transmutation Chromatique requiert la
connaissance du @UUID[Compendium.foundryvtt-reve-de-dragon.meditations-et-ecrits.Item.UoEHSr7Mcz4crdSF]{Le Principe Drachromatique} (voir connaissance du @Item[5YK6q2KuKArkvDWy]{Le Principe Drachromatique} (voir
Les grimoires, p218).</p> Les grimoires, p218).</p>
<p>Les zones de Transmutation Chromatique modifient la couleur des objets <p>Les zones de Transmutation Chromatique modifient la couleur des objets

View File

@ -6,7 +6,7 @@ effects: []
system: system:
description: >- description: >-
<p>La recherche des zones de Transmutation Chromatique requiert la <p>La recherche des zones de Transmutation Chromatique requiert la
connaissance du @UUID[Compendium.foundryvtt-reve-de-dragon.meditations-et-ecrits.Item.UoEHSr7Mcz4crdSF]{Le Principe Drachromatique} (voir connaissance du @Item[5YK6q2KuKArkvDWy]{Le Principe Drachromatique} (voir
Les grimoires, p218).</p> Les grimoires, p218).</p>
<p>Les zones de Transmutation Chromatique modifient la couleur des objets <p>Les zones de Transmutation Chromatique modifient la couleur des objets

View File

@ -6,7 +6,7 @@ effects: []
system: system:
description: >- description: >-
<p>La recherche des zones de Transmutation Chromatique requiert la <p>La recherche des zones de Transmutation Chromatique requiert la
connaissance du @UUID[Compendium.foundryvtt-reve-de-dragon.meditations-et-ecrits.Item.UoEHSr7Mcz4crdSF]{Le Principe Drachromatique} (voir connaissance du @Item[5YK6q2KuKArkvDWy]{Le Principe Drachromatique} (voir
Les grimoires, p218).</p> Les grimoires, p218).</p>
<p>Les zones de Transmutation Chromatique modifient la couleur des objets <p>Les zones de Transmutation Chromatique modifient la couleur des objets

View File

@ -6,7 +6,7 @@ effects: []
system: system:
description: >- description: >-
<p>La recherche des zones de Transmutation Chromatique requiert la <p>La recherche des zones de Transmutation Chromatique requiert la
connaissance du @UUID[Compendium.foundryvtt-reve-de-dragon.meditations-et-ecrits.Item.UoEHSr7Mcz4crdSF]{Le Principe Drachromatique} (voir connaissance du @Item[5YK6q2KuKArkvDWy]{Le Principe Drachromatique} (voir
Les grimoires, p218).</p> Les grimoires, p218).</p>
<p>Les zones de Transmutation Chromatique modifient la couleur des objets <p>Les zones de Transmutation Chromatique modifient la couleur des objets

View File

@ -6,7 +6,7 @@ effects: []
system: system:
description: >- description: >-
<p>La recherche des zones de Transmutation Chromatique requiert la <p>La recherche des zones de Transmutation Chromatique requiert la
connaissance du @UUID[Compendium.foundryvtt-reve-de-dragon.meditations-et-ecrits.Item.UoEHSr7Mcz4crdSF]{Le Principe Drachromatique} (voir connaissance du @Item[5YK6q2KuKArkvDWy]{Le Principe Drachromatique} (voir
Les grimoires, p218).</p> Les grimoires, p218).</p>
<p>Les zones de Transmutation Chromatique modifient la couleur des objets <p>Les zones de Transmutation Chromatique modifient la couleur des objets

View File

@ -6,7 +6,7 @@ effects: []
system: system:
description: >- description: >-
<p>La recherche des zones de Transmutation Chromatique requiert la <p>La recherche des zones de Transmutation Chromatique requiert la
connaissance du @UUID[Compendium.foundryvtt-reve-de-dragon.meditations-et-ecrits.Item.UoEHSr7Mcz4crdSF]{Le Principe Drachromatique} (voir connaissance du @Item[5YK6q2KuKArkvDWy]{Le Principe Drachromatique} (voir
Les grimoires, p218).</p> Les grimoires, p218).</p>
<p>Les zones de Transmutation Chromatique modifient la couleur des objets <p>Les zones de Transmutation Chromatique modifient la couleur des objets

View File

@ -2146,8 +2146,8 @@ items:
la même : objet en objet. Lintensité de la saveur est celle de la la même : objet en objet. Lintensité de la saveur est celle de la
cible. Comme pour tous les sorts dillusions sensorielles, la saveur cible. Comme pour tous les sorts dillusions sensorielles, la saveur
illusoire ne peut être quune saveur connue du haut-rêvant. Couplé à illusoire ne peut être quune saveur connue du haut-rêvant. Couplé à
@UUID[Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.Item.nNh8N9nF8m6zLtrt]{Narine d'Hypnos} et à @Item[dEs7qg5UsqpQxok6]{Narine d'Hypnos} et à
@UUID[Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.Item.ktFI49xqZ0mGfTzt]{Transfiguration}, ce sort peut permettre des @Item[skPIvFb5tRRPHDGU]{Transfiguration}, ce sort peut permettre des
ignominies gastronomiques : que pensez- vous de ce vin à la robe de ignominies gastronomiques : que pensez- vous de ce vin à la robe de
rubis, au savoureux bouquet de framboise, et qui vous roule sur la rubis, au savoureux bouquet de framboise, et qui vous roule sur la
langue comme du velours ?... Illusion de bout en bout, ce nest que de langue comme du velours ?... Illusion de bout en bout, ce nest que de
@ -2183,7 +2183,7 @@ items:
system: system:
description: >- description: >-
<p>Narine dHypnos est une illusion purement <em>olfactive</em>. Son <p>Narine dHypnos est une illusion purement <em>olfactive</em>. Son
fonctionnement est identique à @UUID[Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.Item.D9eSbTGp3i5gdbc5]{Tympan d'Hypnos}, fonctionnement est identique à @Item[QdtcV9WVi9BdL153]{Tympan d'Hypnos},
sappliquant aux odeurs à la place des sons. Lillusion doit sappliquant aux odeurs à la place des sons. Lillusion doit
pareillement rester dans la même catégorie que la cible. Peu utilisé sur pareillement rester dans la même catégorie que la cible. Peu utilisé sur
les humanoïdes et les animaux, à moins davoir une raison très précise les humanoïdes et les animaux, à moins davoir une raison très précise

View File

@ -2246,7 +2246,7 @@ items:
description: >- description: >-
<p>Tympan dHypnos est une illusion purement <em>auditive </em>pouvant <p>Tympan dHypnos est une illusion purement <em>auditive </em>pouvant
sappliquer indifféremment à un humanoïde, un animal ou un objet. Comme sappliquer indifféremment à un humanoïde, un animal ou un objet. Comme
pour @UUID[Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.Item.ktFI49xqZ0mGfTzt]{Transfiguration}, lillusion doit toujours pour @Item[skPIvFb5tRRPHDGU]{Transfiguration}, lillusion doit toujours
appartenir à la même catégorie que la cible. Toute disparité entraîne appartenir à la même catégorie que la cible. Toute disparité entraîne
les mêmes conséquences. On peut ainsi changer la voix dun humanoïde en les mêmes conséquences. On peut ainsi changer la voix dun humanoïde en
une autre <em>voix </em>dhumanoïde, le cri dun animal en <em>cri une autre <em>voix </em>dhumanoïde, le cri dun animal en <em>cri
@ -2254,7 +2254,7 @@ items:
objet. Lancer Tympan dHypnos sur un objet non sonore naboutit à aucun objet. Lancer Tympan dHypnos sur un objet non sonore naboutit à aucun
effet. Ce sort permet entre autres denrichir une illusion visuelle en effet. Ce sort permet entre autres denrichir une illusion visuelle en
lui apportant son complément sonore, diminuant ainsi les risques de lui apportant son complément sonore, diminuant ainsi les risques de
@UUID[Compendium.foundryvtt-reve-de-dragon.rappel-des-regles.JournalEntry.ZmMoOtUdgjMd4cNs]{Conflit de sens}. Le cri illusoire dun @JournalEntry[9bvrfDaudPqvQZPY]{Conflit de sens}. Le cri illusoire dun
animal doit être le cri dun animal connu, et vouloir donner à un animal doit être le cri dun animal connu, et vouloir donner à un
humanoïde la même voix que quelquun dautre demande un jet dOUÏE à -8, humanoïde la même voix que quelquun dautre demande un jet dOUÏE à -8,
avec les mêmes remarques que pour Transfiguration. Noter que seule la avec les mêmes remarques que pour Transfiguration. Noter que seule la

View File

@ -2112,7 +2112,7 @@ items:
<p>Ce rituel permet dentendre à distance. Il doit être ciblé sur un <p>Ce rituel permet dentendre à distance. Il doit être ciblé sur un
instrument sonore (harpe, luth, gong, cloche, etc.) faute de quoi lon instrument sonore (harpe, luth, gong, cloche, etc.) faute de quoi lon
aboutit à un cas de @UUID[Compendium.foundryvtt-reve-de-dragon.rappel-des-regles.JournalEntry.erO7AICiN1LtRyFg]{Magie impossible}. aboutit à un cas de @JournalEntry[eANDHKJXMPmPNJ2F]{Magie impossible}.
Lors du lancer, le rituel doit être paramétré sur une personne précise Lors du lancer, le rituel doit être paramétré sur une personne précise
(humanoïde) ou un lieu architectural précis (salle, couloir, perron, (humanoïde) ou un lieu architectural précis (salle, couloir, perron,
escalier, balcon, etc.). Les éléments naturels du paysage (rochers, escalier, balcon, etc.). Les éléments naturels du paysage (rochers,
@ -2168,7 +2168,8 @@ items:
<p>Ce rituel permet de voir à distance. Il doit être ciblé sur un miroir <p>Ce rituel permet de voir à distance. Il doit être ciblé sur un miroir
ou une surface réfléchissante, comme de leau parfaitement calme, faute ou une surface réfléchissante, comme de leau parfaitement calme, faute
de quoi lon aboutit à un cas de @UUID[Compendium.foundryvtt-reve-de-dragon.rappel-des-regles.JournalEntry.erO7AICiN1LtRyFg]{Magie impossible}. Lors du lancer, le rituel doit être paramétré sur une de quoi lon aboutit à un cas de @JournalEntry[eANDHKJXMPmPNJ2F]{Magie
impossible}. Lors du lancer, le rituel doit être paramétré sur une
personne ou un lieu architectural précis, mêmes restrictions que pour personne ou un lieu architectural précis, mêmes restrictions que pour
Harpe dHypnos. Puis le sort étant ciblé sur le miroir, le haut-rêvant Harpe dHypnos. Puis le sort étant ciblé sur le miroir, le haut-rêvant
croit voir y évoluer des formes, qui le plongent aussitôt dans un état croit voir y évoluer des formes, qui le plongent aussitôt dans un état

View File

@ -797,9 +797,6 @@ input:is(.blessure-premiers_soins, .blessure-soins_complets) {
padding: 0; padding: 0;
overflow-y: auto; overflow-y: auto;
} }
.item-list-title{
flex: 0;
}
.foundryvtt-reve-de-dragon .item-list .item-header { .foundryvtt-reve-de-dragon .item-list .item-header {
font-weight: bold; font-weight: bold;
@ -819,12 +816,12 @@ input:is(.blessure-premiers_soins, .blessure-soins_complets) {
.competence-list .item-controls.hidden-controls { .competence-list .item-controls.hidden-controls {
display: none !important; display: none !important;
} }
.item-controls i:is(.fas, .fa, .fa-solid, .fa-regular) { .item-controls i:is(.fas, .fa, .fa-solid) {
font-size: 0.8em; font-size: 0.8em;
color: var(--color-controls); color: var(--color-controls);
} }
.item-controls i:is(.fas, .far, .fa-solid, .fa-regular):hover { .item-controls i:is(.fas, .far, .fa-solid):hover {
opacity: 0.6; opacity: 0.7 ;
} }
.rdd-roll-dialog .description-sort { .rdd-roll-dialog .description-sort {

View File

@ -16,9 +16,9 @@
}, },
"background": { "background": {
"metier": "", "metier": "",
"biographie": "", "biographie": "Histoire personnelle...",
"notes": "", "notes": "Notes",
"notesmj": "", "notesmj": "Notes du MJ",
"race": "Humain", "race": "Humain",
"yeux": "", "yeux": "",
"cheveux": "", "cheveux": "",
@ -191,18 +191,18 @@
"label": "+dom", "label": "+dom",
"derivee": true "derivee": true
}, },
"encombrement": {
"type": "number",
"value": 0,
"label": "Encombrement",
"derivee": true
},
"vitesse": { "vitesse": {
"type": "string", "type": "string",
"value": 0, "value": 0,
"label": "Vitesse", "label": "Vitesse",
"derivee": false "derivee": false
}, },
"encombrement": {
"type": "number",
"value": 0,
"label": "Encombrement",
"derivee": true
},
"protection": { "protection": {
"type": "number", "type": "number",
"value": 0, "value": 0,

View File

@ -47,10 +47,8 @@
</div> </div>
<div class="grid grid-2col"> <div class="grid grid-2col">
<div class="flex-group-left flexcol"> <div class="flex-group-left flexcol">
<ul class="carac-list alterne-list">
{{>"systems/foundryvtt-reve-de-dragon/templates/actor/carac-main.html"}} {{>"systems/foundryvtt-reve-de-dragon/templates/actor/carac-main.html"}}
{{>"systems/foundryvtt-reve-de-dragon/templates/actor/carac-creature.html"}} {{>"systems/foundryvtt-reve-de-dragon/templates/actor/carac-creature.html"}}
</ul>
</div> </div>
<div class="flex-group-left flexcol competence-column"> <div class="flex-group-left flexcol competence-column">
{{>"systems/foundryvtt-reve-de-dragon/templates/actor/comp-creature.html"}} {{>"systems/foundryvtt-reve-de-dragon/templates/actor/comp-creature.html"}}

View File

@ -33,10 +33,8 @@
</div> </div>
<div class="grid grid-2col"> <div class="grid grid-2col">
<div class="flex-group-left flexcol"> <div class="flex-group-left flexcol">
<ul class="carac-list alterne-list">
{{>"systems/foundryvtt-reve-de-dragon/templates/actor/carac-main.html"}} {{>"systems/foundryvtt-reve-de-dragon/templates/actor/carac-main.html"}}
{{>"systems/foundryvtt-reve-de-dragon/templates/actor/carac-entitee.html"}} {{>"systems/foundryvtt-reve-de-dragon/templates/actor/carac-entitee.html"}}
</ul>
</div> </div>
<div class="flex-group-left flexcol"> <div class="flex-group-left flexcol">
<div class="flex-group-left flexcol competence-column"> <div class="flex-group-left flexcol competence-column">

View File

@ -41,10 +41,8 @@
</div> </div>
<div class="grid grid-2col"> <div class="grid grid-2col">
<div class="flex-group-left flexcol"> <div class="flex-group-left flexcol">
<ul class="carac-list alterne-list">
{{>"systems/foundryvtt-reve-de-dragon/templates/actor/carac-main.html"}} {{>"systems/foundryvtt-reve-de-dragon/templates/actor/carac-main.html"}}
{{>"systems/foundryvtt-reve-de-dragon/templates/actor/carac-total.html"}} {{>"systems/foundryvtt-reve-de-dragon/templates/actor/carac-total.html"}}
</ul>
</div> </div>
<div class="flex-group-left flexcol" > <div class="flex-group-left flexcol" >
{{>"systems/foundryvtt-reve-de-dragon/templates/actor/carac-derivee.html"}} {{>"systems/foundryvtt-reve-de-dragon/templates/actor/carac-derivee.html"}}

View File

@ -1,10 +1,11 @@
<ol class="carac-list alterne-list">
{{#each system.attributs as |attr key|}} {{#each system.attributs as |attr key|}}
{{#if (and (eq key 'plusdom') (eq @root.system.definition.typeentite 'nonincarne'))}} {{#if (and (eq key 'plusdom') (eq @root.system.definition.typeentite 'nonincarne'))}}
{{else}} {{else}}
<li class="caracteristique flexrow list-item" data-attribute="{{key}}"> <li class="caracteristique flexrow list-item" data-attribute="{{key}}">
<span class="carac-label" name="system.attributs.{{key}}.label">{{attr.label}}</span> <span class="carac-label" name="system.attributs.{{key}}.label">{{attr.label}}</span>
{{#if (actor-default @root.type 'attributs' key 'derivee')}} {{#if (actor-default @root.type 'attributs' key 'derivee')}}
<input class="carac-value" type="text" name="system.attributs.{{key}}.value" <input class="caracteristique streched" type="text" name="system.attributs.{{key}}.value"
{{#if (eq key 'plusdom')}} {{#if (eq key 'plusdom')}}
value="{{numberFormat attr.value decimals=0 sign=true}}" value="{{numberFormat attr.value decimals=0 sign=true}}"
{{else}} {{else}}
@ -14,7 +15,7 @@
{{else}} {{else}}
<input class="caracteristique streched" type="text" name="system.attributs.{{key}}.value" value="{{attr.value}}" data-dtype="{{attr.type}}" {{#unless @root.options.vueDetaillee}}disabled{{/unless}}/> <input class="caracteristique streched" type="text" name="system.attributs.{{key}}.value" value="{{attr.value}}" data-dtype="{{attr.type}}" {{#unless @root.options.vueDetaillee}}disabled{{/unless}}/>
{{/if}} {{/if}}
<label class="carac-xp"/>
</li> </li>
{{/if}} {{/if}}
{{/each}} {{/each}}
</ol>

View File

@ -37,7 +37,7 @@
<input class="derivee-value" type="number" name="system.compteurs.dissolution.value" value="{{system.compteurs.dissolution.value}}" data-dtype="number"/> <input class="derivee-value" type="number" name="system.compteurs.dissolution.value" value="{{system.compteurs.dissolution.value}}" data-dtype="number"/>
</li> </li>
<li class="caracteristique flexrow list-item"> <li class="caracteristique flexrow list-item">
<label class="derivee-label chance-actuelle" data-tooltip="Jet de chance actuelle"><a class="roll-chance-actuelle">Chance actuelle</a></label> <label class="derivee-label chance-actuelle" data-tooltip="Jet de chance actuelle"><a>Chance actuelle</a></label>
<input class="derivee-value" type="number" name="system.compteurs.chance.value" value="{{system.compteurs.chance.value}}" data-dtype="number"/> <input class="derivee-value" type="number" name="system.compteurs.chance.value" value="{{system.compteurs.chance.value}}" data-dtype="number"/>
</li> </li>
<li class="caracteristique flexrow list-item"> <li class="caracteristique flexrow list-item">

View File

@ -1,21 +1,16 @@
<ol class="carac-list alterne-list">
<li class="caracteristique flexrow list-item"> <li class="caracteristique flexrow list-item">
<span class="carac-label">Niveau</span> <span class="carac-label" name="catEntite">Catégorie : </span>
<label class="carac-value">{{numberFormat niveau decimals=0 sign=true}}
</label>
<label class="carac-xp"/>
</li>
{{>"systems/foundryvtt-reve-de-dragon/templates/actor/carac-creature.html"}}
<li class="caracteristique flexrow list-item">
<span class="carac-label" name="catEntite">Catégorie</span>
<select name="system.definition.categorieentite" value="{{system.definition.categorieentite}}" data-dtype="String" {{#unless @root.options.vueDetaillee}}disabled{{/unless}}> <select name="system.definition.categorieentite" value="{{system.definition.categorieentite}}" data-dtype="String" {{#unless @root.options.vueDetaillee}}disabled{{/unless}}>
{{selectOptions (RDD_CONFIG 'categorieEntite') selected=system.definition.categorieentite}} {{selectOptions (RDD_CONFIG 'categorieEntite') selected=system.definition.categorieentite}}
</select> </select>
<label class="carac-xp"/>
</li> </li>
<li class="caracteristique flexrow list-item"> <li class="caracteristique flexrow list-item">
<span class="carac-label" name="typeEntite">Type d'entité</span> <span class="carac-label" name="typeEntite">Type d'entité : </span>
<select name="system.definition.typeentite" value="{{system.definition.typeentite}}" data-dtype="String" {{#unless @root.options.vueDetaillee}}disabled{{/unless}}> <select name="system.definition.typeentite" value="{{system.definition.typeentite}}" data-dtype="String" {{#unless @root.options.vueDetaillee}}disabled{{/unless}}>
{{selectOptions (RDD_CONFIG 'typeEntite') selected=system.definition.typeentite}} {{selectOptions (RDD_CONFIG 'typeEntite') selected=system.definition.typeentite}}
</select> </select>
<label class="carac-xp"/>
</li> </li>
</ol>
{{> "systems/foundryvtt-reve-de-dragon/templates/actor/carac-creature.html"}}

View File

@ -1,3 +1,4 @@
<ul class="carac-list alterne-list">
{{#each system.carac as |carac key|}} {{#each system.carac as |carac key|}}
{{#if (and (eq key 'taille') (eq @root.system.definition.typeentite 'nonincarne'))}} {{#if (and (eq key 'taille') (eq @root.system.definition.typeentite 'nonincarne'))}}
{{else}} {{else}}
@ -9,7 +10,7 @@
{{else}} {{else}}
{{#if (actor-default @root.type 'carac' key 'derivee')}} {{#if (actor-default @root.type 'carac' key 'derivee')}}
<span class="carac-label" name="system.carac.{{key}}.label"><a class="roll-carac" data-carac-name={{key}}>{{carac.label}}</a></span> <span class="carac-label" name="system.carac.{{key}}.label"><a class="roll-carac" data-carac-name={{key}}>{{carac.label}}</a></span>
<label class="carac-value">{{carac.value}}</label> <label class="competence-value">{{carac.value}}</label>
<label class="carac-xp"/> <label class="carac-xp"/>
{{else}} {{else}}
{{#if carac.isLevelUp}} {{#if carac.isLevelUp}}
@ -35,3 +36,4 @@
</li> </li>
{{/if}} {{/if}}
{{/each}} {{/each}}
</ul>

View File

@ -1,13 +1,14 @@
<h4 class="item-list-title">Compétences{{#if @root.options.vueDetaillee}} <a class="competence-add" data-tooltip="Ajouter une compétence"> <h4>Compétences{{#if @root.options.vueDetaillee}} <a class="competence-add" data-tooltip="Ajouter une compétence">
<i class="fa-solid fa-books-medical"></i> <i class="fa-solid fa-books-medical"></i>
</a>{{/if}}</h4> </a>{{/if}}</h4>
<ul class="item-list alterne-list"> <ol class="item-list alterne-list">
{{#each (trier competences) as |comp key|}} {{#each (trier competences) as |comp key|}}
<li class="item flexrow list-item" data-item-id="{{comp._id}}"> <li class="item flexrow list-item" data-item-id="{{comp._id}}">
<a class="competence-label roll-competence"> <a class="competence-label roll-competence">
<img class="sheet-competence-img" src="{{comp.img}}" data-tooltip="{{comp.name}}"/> <img class="sheet-competence-img" src="{{comp.img}}" data-tooltip="{{comp.name}}"/>
<span>{{comp.name}}</span> <span>{{comp.name}}</span>
</a> </a>
<input class="competence-carac creature-carac" type="text" compname="{{comp.name}}" name="{{comp._id}}.carac" <input class="competence-carac creature-carac" type="text" compname="{{comp.name}}" name="{{comp._id}}.carac"
value="{{comp.system.carac_value}}" data-dtype="number" value="{{comp.system.carac_value}}" data-dtype="number"
{{#unless @root.options.vueDetaillee}}disabled{{/unless}}/> {{#unless @root.options.vueDetaillee}}disabled{{/unless}}/>
@ -31,4 +32,4 @@
{{/if}} {{/if}}
</li> </li>
{{/each}} {{/each}}
</ul> </ol>

View File

@ -54,7 +54,7 @@
{{>"systems/foundryvtt-reve-de-dragon/templates/actor/export-scriptarium/carac.hbs" carac=export.empathie}} {{>"systems/foundryvtt-reve-de-dragon/templates/actor/export-scriptarium/carac.hbs" carac=export.empathie}}
{{>"systems/foundryvtt-reve-de-dragon/templates/actor/export-scriptarium/carac.hbs" carac=export.intellect}} {{>"systems/foundryvtt-reve-de-dragon/templates/actor/export-scriptarium/carac.hbs" carac=export.intellect}}
{{>"systems/foundryvtt-reve-de-dragon/templates/actor/export-scriptarium/carac-compteur.hbs" carac=export.reve actuel=export.reve_actuel button-name='ptreve-actuel'}} {{>"systems/foundryvtt-reve-de-dragon/templates/actor/export-scriptarium/carac-compteur.hbs" carac=export.reve actuel=export.reve_actuel button-name='ptreve-actuel'}}
{{>"systems/foundryvtt-reve-de-dragon/templates/actor/export-scriptarium/carac-compteur.hbs" carac=export.chance actuel=export.chance_actuel button-name='chance-actuelle'}} {{>"systems/foundryvtt-reve-de-dragon/templates/actor/export-scriptarium/carac.hbs" carac=export.chance}}
</div> </div>
<div class="flexcol flex-group-top"> <div class="flexcol flex-group-top">
{{>"systems/foundryvtt-reve-de-dragon/templates/actor/export-scriptarium/carac-derivee.hbs" carac=export.melee}} {{>"systems/foundryvtt-reve-de-dragon/templates/actor/export-scriptarium/carac-derivee.hbs" carac=export.melee}}

View File

@ -1,6 +1,5 @@
{{#if sortsReserve.length}} {{#if sortsReserve.length}}
<h3>Sorts en Réserve{{#if options.isGM}} <a class="sortreserve-add"> <h3>Sorts en Réserve{{#if options.isGM}} <a class="nouveau-sort-reserve"><i class="fa-solid fa-sparkles"></i>
<i class="fa-solid fa-sparkles"></i>
</a>{{/if}} </a>{{/if}}
</h3> </h3>
<ul class="item-list alterne-list"> <ul class="item-list alterne-list">

View File

@ -5,12 +5,8 @@
<li class="item list-item flexrow" data-item-id="{{sort._id}}" data-attribute="{{key}}" data-tooltip="{{#if sort.system.isrituel}}Rituel{{else}}Sort{{/if}}: {{sort.name}}"> <li class="item list-item flexrow" data-item-id="{{sort._id}}" data-attribute="{{key}}" data-tooltip="{{#if sort.system.isrituel}}Rituel{{else}}Sort{{/if}}: {{sort.name}}">
<img class="sheet-competence-img" src="{{sort.img}}"/> <img class="sheet-competence-img" src="{{sort.img}}"/>
<span class="flex-shrink">{{itemSort-shortDraconic sort.system.draconic}}</span> <span class="flex-shrink">{{itemSort-shortDraconic sort.system.draconic}}</span>
<span class="item-edit flex-grow-3">{{sort.name}} <span class="item-edit flex-grow-3">{{sort.name}}{{#if sort.system.isrituel}}
{{#if sort.system.isrituel}}<i class="fa-solid fa-book-sparkles"></i>{{/if}} <i class="fa-regular fa-book-sparkles"></i>{{/if}}</span>
{{#if sort.system.coutseuil}}
{{#repeat sort.system.coutseuil}}<i class="fa-solid fa-star-sharp" data-tooltip="coût de seuil: {{sort.system.coutseuil}}"></i>{{/repeat}}
{{/if}}
</span>
<span class="flex-grow-2"> <span class="flex-grow-2">
{{#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}}
</span> </span>
@ -19,11 +15,6 @@
<a class="item-edit" data-tooltip="Modifier"><i class="fas fa-edit"></i></a> <a class="item-edit" data-tooltip="Modifier"><i class="fas fa-edit"></i></a>
<a class="item-delete" data-tooltip="Supprimer"><i class="fas fa-trash"></i></a> <a class="item-delete" data-tooltip="Supprimer"><i class="fas fa-trash"></i></a>
<a class="item-montrer" data-tooltip="Montrer"><i class="fas fa-comment"></i></a> <a class="item-montrer" data-tooltip="Montrer"><i class="fas fa-comment"></i></a>
{{#if (and @root.options.isGM (not sort.system.isrituel))}}
<a class="sortreserve-add" data-tooltip="Ajouter ce sort en réserve">
<i class="fa-solid fa-sparkles"></i>
</a>
{{/if}}
</div> </div>
</li> </li>
{{/each}} {{/each}}