Compare commits
24 Commits
12.0.25
...
a996c9e9be
Author | SHA1 | Date | |
---|---|---|---|
a996c9e9be | |||
5357ca89bc | |||
e772bccc87 | |||
a896fdb166 | |||
1ff0de1348 | |||
ab365e9780 | |||
3739519610 | |||
f7fc7fbefb | |||
d5686b81ed | |||
5bf1ecaea3 | |||
81d826ee2e | |||
2a164f6a32 | |||
6479f00642 | |||
3cbd777e6a | |||
b377739481 | |||
d9cdfef688 | |||
d9af32b168 | |||
f13677106e | |||
e98a793506 | |||
57d35a0f9a | |||
417db33752 | |||
bf0eea693a | |||
28ee8607bb | |||
91717a3290 |
@ -1,4 +1,10 @@
|
||||
# 12.0
|
||||
## 12.0.26 - Astrobazzarh le Haut-rêvant
|
||||
- bouton pour le don de haut-rêve en un clic
|
||||
- les compétences de draconic ne sont plus précédées de "Voie de"
|
||||
- migration des compétences & compendiums
|
||||
- Correction feuille simplifiée qui ne s'affichait pas en cas de sort variable
|
||||
|
||||
## 12.0.24 - Les ajustements d'Astrobazzarh
|
||||
- amélioration
|
||||
- meilleure gestion des noms des voies de draconic
|
||||
|
@ -214,6 +214,8 @@ export class RdDActorSheet extends RdDBaseActorSangSheet {
|
||||
});
|
||||
// Boutons spéciaux MJs
|
||||
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('.afficher-tmr').click(async event => this.actor.changeTMRVisible())
|
||||
}
|
||||
|
||||
|
@ -38,6 +38,8 @@ import { RdDCoeur } from "./coeur/rdd-coeur.js";
|
||||
import { DialogChoixXpCarac } from "./dialog-choix-xp-carac.js";
|
||||
import { RdDItemArme } from "./item-arme.js";
|
||||
import { RdDCombatManager } from "./rdd-combat.js";
|
||||
import { RdDItemTete } from "./item/tete.js";
|
||||
import { SystemCompendiums } from "./settings/system-compendiums.js";
|
||||
|
||||
export const MAINS_DIRECTRICES = ['Droitier', 'Gaucher', 'Ambidextre']
|
||||
|
||||
@ -53,41 +55,27 @@ export class RdDActor extends RdDBaseActorSang {
|
||||
* Prepare Character type specific data
|
||||
*/
|
||||
prepareActorData() {
|
||||
this.$computeCaracDerivee()
|
||||
this.$computeIsHautRevant()
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
$computeCaracDerivee() {
|
||||
|
||||
this.system.carac.force.value = Math.min(this.system.carac.force.value, parseInt(this.system.carac.taille.value) + 4);
|
||||
this.system.carac.melee.value = Math.floor((parseInt(this.system.carac.force.value) + parseInt(this.system.carac.agilite.value)) / 2);
|
||||
|
||||
this.system.carac.melee.value = Math.floor((this.getForce() + parseInt(this.system.carac.agilite.value)) / 2);
|
||||
this.system.carac.tir.value = Math.floor((parseInt(this.system.carac.vue.value) + parseInt(this.system.carac.dexterite.value)) / 2);
|
||||
this.system.carac.lancer.value = Math.floor((parseInt(this.system.carac.tir.value) + parseInt(this.system.carac.force.value)) / 2);
|
||||
this.system.carac.derobee.value = Math.floor(parseInt(((21 - this.system.carac.taille.value)) + parseInt(this.system.carac.agilite.value)) / 2);
|
||||
|
||||
let bonusDomKey = Math.floor((parseInt(this.system.carac.force.value) + parseInt(this.system.carac.taille.value)) / 2);
|
||||
let tailleData = RdDCarac.getCaracDerivee(bonusDomKey);
|
||||
this.system.attributs.plusdom.value = tailleData.plusdom;
|
||||
this.system.attributs.encombrement.value = (parseInt(this.system.carac.force.value) + parseInt(this.system.carac.taille.value)) / 2;
|
||||
super.prepareActorData()
|
||||
|
||||
this.system.attributs.sconst.value = RdDCarac.calculSConst(this.system.carac.constitution.value);
|
||||
this.system.attributs.sust.value = RdDCarac.getCaracDerivee(this.system.carac.taille.value).sust;
|
||||
this.system.sante.vie.max = Math.ceil((parseInt(this.system.carac.taille.value) + parseInt(this.system.carac.constitution.value)) / 2);
|
||||
this.system.attributs.sconst.value = RdDCarac.calculSConst(this.getConstitution())
|
||||
this.system.attributs.sust.value = RdDCarac.getCaracDerivee(this.getTaille()).sust
|
||||
|
||||
this.system.sante.vie.value = Math.min(this.system.sante.vie.value, this.system.sante.vie.max)
|
||||
this.system.sante.endurance.max = Math.max(parseInt(this.system.carac.taille.value) + parseInt(this.system.carac.constitution.value), parseInt(this.system.sante.vie.max) + parseInt(this.system.carac.volonte.value));
|
||||
this.system.sante.endurance.value = Math.min(this.system.sante.endurance.value, this.system.sante.endurance.max);
|
||||
this.system.sante.fatigue.max = this.getFatigueMax();
|
||||
this.system.sante.fatigue.max = this.getFatigueMax()
|
||||
this.system.sante.fatigue.value = Math.min(this.system.sante.fatigue.value, this.system.sante.fatigue.max);
|
||||
|
||||
//Compteurs
|
||||
this.system.reve.reve.max = this.system.carac.reve.value;
|
||||
this.system.compteurs.chance.max = this.system.carac.chance.value;
|
||||
}
|
||||
this.system.reve.reve.max = 3 * this.getReve()
|
||||
this.system.compteurs.chance.max = this.getChance()
|
||||
|
||||
$computeIsHautRevant() {
|
||||
this.system.attributs.hautrevant.value = this.itemTypes['tete'].find(it => Grammar.equalsInsensitive(it.name, 'don de haut-reve'))
|
||||
this.system.attributs.hautrevant.value = this.itemTypes[ITEM_TYPES.tete].find(it => RdDItemTete.isDonDeHautReve(it))
|
||||
? "Haut rêvant"
|
||||
: "";
|
||||
}
|
||||
@ -112,6 +100,8 @@ export class RdDActor extends RdDBaseActorSang {
|
||||
getChanceActuel() { return this.system.compteurs.chance?.value ?? 10 }
|
||||
getMoralTotal() { return this.system.compteurs.moral?.value ?? 0 }
|
||||
|
||||
getEnduranceMax() { return Math.max(1, Math.max(this.getTaille() + this.getConstitution(), this.getVieMax() + this.getVolonte())) }
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getEtatGeneral(options = { ethylisme: false }) {
|
||||
const etatGeneral = this.system.compteurs.etat?.value ?? 0
|
||||
@ -989,6 +979,16 @@ export class RdDActor extends RdDBaseActorSang {
|
||||
});
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async addDonDeHautReve() {
|
||||
if (!game.user.isGM || this.isHautRevant()) {
|
||||
return
|
||||
}
|
||||
const donHR = await RdDItemTete.teteDonDeHautReve()
|
||||
if (donHR) {
|
||||
this.createEmbeddedDocuments('Item', [donHR.toObject()])
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async reinsertionAleatoire(raison, accessible = tmr => true) {
|
||||
@ -1083,9 +1083,7 @@ export class RdDActor extends RdDBaseActorSang {
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getSConst() {
|
||||
return RdDCarac.calculSConst(this.system.carac.constitution.value)
|
||||
}
|
||||
getSConst() { return RdDCarac.calculSConst(this.getConstitution()) }
|
||||
|
||||
async ajoutXpConstitution(xp) {
|
||||
await this.update({ "system.carac.constitution.xp": Misc.toInt(this.system.carac.constitution.xp) + xp });
|
||||
@ -1237,16 +1235,14 @@ export class RdDActor extends RdDBaseActorSang {
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async consommerNourritureboisson(itemId, choix = { doses: 1, seForcer: false, supprimerSiZero: false }, userId = undefined) {
|
||||
if (userId != undefined && userId != game.user.id) {
|
||||
async consommerNourritureboisson(itemId, choix = { doses: 1, seForcer: false, supprimerSiZero: false }) {
|
||||
if (!this.isOwner) {
|
||||
RdDBaseActor.remoteActorCall({
|
||||
tokenId: this.token?.id,
|
||||
actorId: this.id,
|
||||
method: 'consommerNourritureboisson',
|
||||
args: [itemId, choix, userId]
|
||||
},
|
||||
userId)
|
||||
return;
|
||||
method: 'consommerNourritureboisson', args: [itemId, choix]
|
||||
})
|
||||
return
|
||||
}
|
||||
const item = this.getItem(itemId)
|
||||
if (!item.getUtilisationCuisine()) {
|
||||
@ -2521,7 +2517,11 @@ export class RdDActor extends RdDBaseActorSang {
|
||||
|
||||
async onRollTachePremiersSoins(blessureId, rollData) {
|
||||
if (!this.isOwner) {
|
||||
return RdDBaseActor.remoteActorCall({ tokenId: this.token?.id, actorId: this.id, method: 'onRollTachePremiersSoins', args: [blessureId, rollData] });
|
||||
return RdDBaseActor.remoteActorCall({
|
||||
tokenId: this.token?.id,
|
||||
actorId: this.id,
|
||||
method: 'onRollTachePremiersSoins', args: [blessureId, rollData]
|
||||
})
|
||||
}
|
||||
const blessure = this.getItem(blessureId, 'blessure')
|
||||
console.log('TODO update blessure', this, blessureId, rollData, rollData.tache);
|
||||
@ -2551,7 +2551,11 @@ export class RdDActor extends RdDBaseActorSang {
|
||||
|
||||
async onRollSoinsComplets(blessureId, rollData) {
|
||||
if (!this.isOwner) {
|
||||
return RdDBaseActor.remoteActorCall({ tokenId: this.token?.id, actorId: this.id, method: 'onRollSoinsComplets', args: [blessureId, rollData] });
|
||||
return RdDBaseActor.remoteActorCall({
|
||||
tokenId: this.token?.id,
|
||||
actorId: this.id,
|
||||
method: 'onRollSoinsComplets', args: [blessureId, rollData]
|
||||
})
|
||||
}
|
||||
const blessure = this.getItem(blessureId, 'blessure')
|
||||
if (blessure && blessure.system.premierssoins.done && !blessure.system.soinscomplets.done) {
|
||||
|
@ -19,6 +19,7 @@ import { RdDCombat, RdDCombatManager } from "../rdd-combat.js";
|
||||
import { RdDConfirm } from "../rdd-confirm.js";
|
||||
import { ENTITE_INCARNE, SHOW_DICE, SYSTEM_RDD } from "../constants.js";
|
||||
import { RdDItemArme } from "../item-arme.js";
|
||||
import { RdDCarac } from "../rdd-carac.js";
|
||||
|
||||
const POSSESSION_SANS_DRACONIC = {
|
||||
img: 'systems/foundryvtt-reve-de-dragon/icons/entites/possession.webp',
|
||||
@ -36,6 +37,13 @@ const POSSESSION_SANS_DRACONIC = {
|
||||
*/
|
||||
export class RdDBaseActorReve extends RdDBaseActor {
|
||||
|
||||
prepareActorData() {
|
||||
super.prepareActorData()
|
||||
this.system.attributs.plusdom.value = this.getBonusDegat()
|
||||
this.system.sante.endurance.max = this.getEnduranceMax()
|
||||
this.system.sante.endurance.value = Math.min(this.system.sante.endurance.value, this.system.sante.endurance.max)
|
||||
}
|
||||
|
||||
getCaracChanceActuelle() {
|
||||
return {
|
||||
label: 'Chance actuelle',
|
||||
@ -52,21 +60,26 @@ export class RdDBaseActorReve extends RdDBaseActor {
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
getTaille() { return Misc.toInt(this.system.carac.taille?.value) }
|
||||
getConstitution() { return this.getReve() }
|
||||
getForce() { return this.getReve() }
|
||||
getAgilite() { return this.getForce() }
|
||||
getReve() { return Misc.toInt(this.system.carac.reve?.value) }
|
||||
getChance() { return this.getReve() }
|
||||
|
||||
getReveActuel() { return this.getReve() }
|
||||
getChanceActuel() { return this.getChance() }
|
||||
|
||||
getReve() { return Number(this.system.carac.reve?.value ?? 0) }
|
||||
getForce() { return this.getReve() }
|
||||
getTaille() { return Number(this.system.carac.taille?.value ?? 0) }
|
||||
getAgilite() { return this.getForce() }
|
||||
getChance() { return this.getReve() }
|
||||
getEnduranceMax() { return Math.max(1, this.getTaille() + this.getConstitution()) }
|
||||
getEncombrementMax() { return (this.getForce() + this.getTaille()) / 2 }
|
||||
getBonusDegat() { return RdDCarac.getCaracDerivee(this.getEncombrementMax()).plusdom }
|
||||
|
||||
getMoralTotal() { return 0 }
|
||||
getBonusDegat() { return Number(this.system.attributs?.plusdom?.value ?? 0) }
|
||||
getProtectionNaturelle() { return Number(this.system.attributs?.protection?.value ?? 0) }
|
||||
getSConst() { return 0 }
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getEncombrementMax() { return 0 }
|
||||
isSurenc() { return false }
|
||||
computeMalusSurEncombrement() { return 0 }
|
||||
|
||||
@ -84,7 +97,7 @@ export class RdDBaseActorReve extends RdDBaseActor {
|
||||
isActorCombat() { return true }
|
||||
|
||||
getCaracInit(competence) {
|
||||
if (!competence){
|
||||
if (!competence) {
|
||||
return 0
|
||||
}
|
||||
if (competence.type == ITEM_TYPES.competencecreature) {
|
||||
@ -445,8 +458,7 @@ export class RdDBaseActorReve extends RdDBaseActor {
|
||||
RdDBaseActor.remoteActorCall({
|
||||
tokenId: this.token?.id,
|
||||
actorId: this.id,
|
||||
method: 'encaisserDommagesValidationGR',
|
||||
args: [rollData, armure, show, attackerToken, defenderToken]
|
||||
method: 'encaisserDommagesValidationGR', args: [rollData, armure, show, attackerToken, defenderToken]
|
||||
})
|
||||
} else {
|
||||
DialogValidationEncaissement.validerEncaissement(this, rollData, armure,
|
||||
|
@ -21,7 +21,7 @@ export class RdDBaseActorSangSheet extends RdDBaseActorReveSheet {
|
||||
this.html.find('.creer-blessure-grave').click(async event => RdDItemBlessure.createBlessure(this.actor, 4));
|
||||
this.html.find('.creer-blessure-critique').click(async event => RdDItemBlessure.createBlessure(this.actor, 6));
|
||||
|
||||
this.html.find('.subir-blessure-contusion').click(async event => RdDItemBlessure.applyFullBlessure(this.actor, 2));
|
||||
this.html.find('.subir-blessure-contusion').click(async event => RdDItemBlessure.applyFullBlessure(this.actor, 0));
|
||||
this.html.find('.subir-blessure-legere').click(async event => RdDItemBlessure.applyFullBlessure(this.actor, 2));
|
||||
this.html.find('.subir-blessure-grave').click(async event => RdDItemBlessure.applyFullBlessure(this.actor, 4));
|
||||
this.html.find('.subir-blessure-critique').click(async event => RdDItemBlessure.applyFullBlessure(this.actor, 6));
|
||||
|
@ -6,6 +6,7 @@ import { RdDBaseActorReve } from "./base-actor-reve.js";
|
||||
import { RdDDice } from "../rdd-dice.js";
|
||||
import { RdDItemBlessure } from "../item/blessure.js";
|
||||
import { ChatUtility } from "../chat-utility.js";
|
||||
import { Misc } from "../misc.js";
|
||||
|
||||
/**
|
||||
* Classe de base pour les acteurs qui peuvent subir des blessures
|
||||
@ -14,25 +15,32 @@ import { ChatUtility } from "../chat-utility.js";
|
||||
*/
|
||||
export class RdDBaseActorSang extends RdDBaseActorReve {
|
||||
|
||||
prepareActorData() {
|
||||
this.system.sante.vie.max = Math.ceil((this.getTaille() + this.getConstitution()) / 2)
|
||||
this.system.sante.vie.value = Math.min(this.system.sante.vie.value, this.system.sante.vie.max)
|
||||
super.prepareActorData()
|
||||
this.system.attributs.encombrement.value = this.getEncombrementMax()
|
||||
}
|
||||
|
||||
getForce() { return Number(this.system.carac.force?.value ?? 0) }
|
||||
getForce() { return Misc.toInt(this.system.carac.force?.value) }
|
||||
getConstitution() { return Misc.toInt(this.system.carac.constitution?.value) }
|
||||
getVolonte() { return Misc.toInt(this.system.carac.volonte?.value) }
|
||||
|
||||
getBonusDegat() { return Number(this.system.attributs?.plusdom?.value ?? 0) }
|
||||
getProtectionNaturelle() { return Number(this.system.attributs?.protection?.value ?? 0) }
|
||||
getSConst() { return 0 }
|
||||
getVieMax() { return Misc.toInt(this.system.sante.vie?.max) }
|
||||
getEnduranceMax() { return Math.max(1, this.getTaille() + this.getConstitution()) }
|
||||
getFatigueMax() { return this.getEnduranceMax() * 2 }
|
||||
|
||||
getEnduranceMax() { return Math.max(1, Math.min(this.system.sante.endurance.max, MAX_ENDURANCE_FATIGUE)) }
|
||||
getProtectionNaturelle() { return Misc.toInt(this.system.attributs?.protection?.value) }
|
||||
|
||||
getFatigueActuelle() {
|
||||
if (ReglesOptionnelles.isUsing("appliquer-fatigue")) {
|
||||
return Math.max(0, Math.min(this.getFatigueMax(), this.system.sante.fatigue?.value ?? 0));
|
||||
return Math.max(0, Math.min(this.getFatigueMax(), Misc.toInt(this.system.sante.fatigue?.value)))
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
getFatigueRestante() { return this.getFatigueMax() - this.getFatigueActuelle() }
|
||||
getFatigueMin() { return this.system.sante.endurance.max - this.system.sante.endurance.value }
|
||||
getFatigueMax() { return this.getEnduranceMax() * 2 }
|
||||
|
||||
malusFatigue() {
|
||||
if (ReglesOptionnelles.isUsing("appliquer-fatigue")) {
|
||||
@ -42,7 +50,6 @@ export class RdDBaseActorSang extends RdDBaseActorReve {
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getEncombrementMax() { return Number(this.system.attributs?.encombrement?.value ?? 0) }
|
||||
isSurenc() { return this.computeMalusSurEncombrement() < 0 }
|
||||
|
||||
computeMalusSurEncombrement() {
|
||||
|
@ -18,6 +18,7 @@ export class RdDBaseActor extends Actor {
|
||||
.map(it => it[0])
|
||||
.find(it => it)
|
||||
}
|
||||
|
||||
static $findCaracByName(carac, name) {
|
||||
const caracList = Object.entries(carac);
|
||||
let entry = Misc.findFirstLike(name, caracList, { mapper: it => it[0], description: 'caractéristique' });
|
||||
@ -26,6 +27,16 @@ export class RdDBaseActor extends Actor {
|
||||
}
|
||||
return entry && entry.length > 0 ? carac[entry[0]] : undefined;
|
||||
}
|
||||
static getDefaultValue(actorType, path) {
|
||||
if (path.includes('.')) {
|
||||
path = path.split('.')
|
||||
}
|
||||
let obj = game.model.Actor[actorType]
|
||||
for (let p of path) {
|
||||
obj = obj ? obj[p] : undefined
|
||||
}
|
||||
return obj
|
||||
}
|
||||
|
||||
static getDefaultImg(itemType) {
|
||||
return game.system.rdd.actorClasses[itemType]?.defaultIcon ?? defaultItemImg[itemType];
|
||||
@ -45,29 +56,32 @@ export class RdDBaseActor extends Actor {
|
||||
}
|
||||
}
|
||||
|
||||
static remoteActorCall(callData, userId = undefined) {
|
||||
userId = userId ?? Misc.firstConnectedGMId();
|
||||
if (userId == game.user.id) {
|
||||
RdDBaseActor.onRemoteActorCall(callData, userId);
|
||||
return false;
|
||||
static remoteActorCall(callData) {
|
||||
if (game.user.isGM) {
|
||||
RdDBaseActor.onRemoteActorCall(callData, game.user.id)
|
||||
return false
|
||||
}
|
||||
else {
|
||||
game.socket.emit(SYSTEM_SOCKET_ID, { msg: "msg_remote_actor_call", data: callData, userId: userId });
|
||||
return true;
|
||||
game.socket.emit(SYSTEM_SOCKET_ID, {
|
||||
msg: "msg_remote_actor_call",
|
||||
data: callData,
|
||||
userId: Misc.firstConnectedGMId()
|
||||
})
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
static onRemoteActorCall(callData, userId) {
|
||||
const actor = RdDBaseActor.getRealActor(callData?.actorId, callData?.tokenId);
|
||||
if (userId == game.user.id) {
|
||||
const actor = RdDBaseActor.getRealActor(callData?.actorId, callData?.tokenId);
|
||||
if (Misc.isOwnerPlayerOrUniqueConnectedGM(actor)) { // Seul le joueur choisi effectue l'appel: le joueur courant si propriétaire de l'actor, ou le MJ sinon
|
||||
const args = callData.args;
|
||||
console.info(`RdDBaseActor.onRemoteActorCall: pour l'Actor ${callData.actorId}, appel de RdDBaseActor.${callData.method}(`, ...args, ')');
|
||||
actor[callData.method](...args);
|
||||
}
|
||||
// Seul le joueur choisi effectue l'appel: le joueur courant si propriétaire de l'actor, ou le MJ sinon
|
||||
const args = callData.args;
|
||||
console.info(`RdDBaseActor.onRemoteActorCall: pour l'Actor ${callData.actorId}, appel de RdDBaseActor.${callData.method}(`, ...args, ')');
|
||||
actor[callData.method](...args);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static getRealActor(actorId, tokenId) {
|
||||
if (tokenId) {
|
||||
let token = canvas.tokens.get(tokenId)
|
||||
@ -178,7 +192,8 @@ export class RdDBaseActor extends Actor {
|
||||
this.computeEncTotal()
|
||||
}
|
||||
|
||||
async prepareActorData() { }
|
||||
prepareActorData() { }
|
||||
|
||||
async computeEtatGeneral() { }
|
||||
/* -------------------------------------------- */
|
||||
findPlayer() {
|
||||
@ -210,6 +225,9 @@ export class RdDBaseActor extends Actor {
|
||||
getMonnaie(id) { return this.findItemLike(id, 'monnaie'); }
|
||||
getEncombrementMax() { return 0 }
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async updateCarac(caracName, to) {
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
async onPreUpdateItem(item, change, options, id) { }
|
||||
async onCreateItem(item, options, id) { }
|
||||
@ -234,21 +252,20 @@ export class RdDBaseActor extends Actor {
|
||||
}
|
||||
|
||||
async creerObjetParMJ(object) {
|
||||
if (!Misc.isFirstConnectedGM()) {
|
||||
RdDBaseActor.remoteActorCall({
|
||||
tokenId: this.token?.id,
|
||||
actorId: this.id,
|
||||
method: 'creerObjetParMJ',
|
||||
args: [object]
|
||||
});
|
||||
return;
|
||||
if (this.isOwner) {
|
||||
await this.createEmbeddedDocuments('Item', [object])
|
||||
return
|
||||
}
|
||||
await this.createEmbeddedDocuments('Item', [object])
|
||||
RdDBaseActor.remoteActorCall({
|
||||
tokenId: this.token?.id,
|
||||
actorId: this.id,
|
||||
method: 'creerObjetParMJ', args: [object]
|
||||
})
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async cleanupConteneurs() {
|
||||
if (Misc.isOwnerPlayerOrUniqueConnectedGM(this)) {
|
||||
if (Misc.isOwnerPlayer(this)) {
|
||||
let updates = this.itemTypes['conteneur']
|
||||
.filter(c => c.system.contenu.filter(id => this.getItem(id) == undefined).length > 0)
|
||||
.map(c => { return { _id: c._id, 'system.contenu': c.system.contenu.filter(id => this.getItem(id) != undefined) } });
|
||||
@ -319,7 +336,7 @@ export class RdDBaseActor extends Actor {
|
||||
ui.notifications.error(`Impossible d'ajouter un gain de ${sols} <0`);
|
||||
return;
|
||||
}
|
||||
if (fromActorId && !game.user.isGM) {
|
||||
if (fromActorId && !this.isOwner) {
|
||||
RdDBaseActor.remoteActorCall({
|
||||
userId: Misc.connectedGMOrUser(),
|
||||
tokenId: this.token?.id,
|
||||
@ -354,10 +371,9 @@ export class RdDBaseActor extends Actor {
|
||||
if (!Misc.isFirstConnectedGM()) {
|
||||
RdDBaseActor.remoteActorCall({
|
||||
actorId: achat.vendeurId ?? achat.acheteurId,
|
||||
method: 'achatVente',
|
||||
args: [achat]
|
||||
method: 'achatVente', args: [achat]
|
||||
});
|
||||
return;
|
||||
return
|
||||
}
|
||||
const cout = Number(achat.prixTotal ?? 0);
|
||||
const vendeur = achat.vendeurId ? game.actors.get(achat.vendeurId) : undefined;
|
||||
|
@ -25,9 +25,6 @@ export class RdDCommerce extends RdDBaseActor {
|
||||
}
|
||||
await super.depenserSols(cout)
|
||||
}
|
||||
async consommerNourritureboisson(itemId, choix, userId) {
|
||||
// ne pas consommer pour un commerce
|
||||
}
|
||||
|
||||
async decrementerQuantiteItem(item, quantite) {
|
||||
if (this.system.illimite) {
|
||||
|
@ -1,6 +1,4 @@
|
||||
import { ENTITE_INCARNE } from "../constants.js";
|
||||
import { ITEM_TYPES } from "../item.js";
|
||||
import { STATUSES } from "../settings/status-effects.js";
|
||||
import { RdDBaseActorSang } from "./base-actor-sang.js";
|
||||
|
||||
export class RdDCreature extends RdDBaseActorSang {
|
||||
@ -9,6 +7,7 @@ export class RdDCreature extends RdDBaseActorSang {
|
||||
return "systems/foundryvtt-reve-de-dragon/icons/creatures/bramart.svg";
|
||||
}
|
||||
|
||||
getEnduranceMax() { return Math.max(1, this.getVieMax() + this.getConstitution()) }
|
||||
isCreature() { return true }
|
||||
|
||||
canReceive(item) {
|
||||
|
@ -27,6 +27,7 @@ export class RdDEntite extends RdDBaseActorReve {
|
||||
getForce() { return this.getReve() }
|
||||
getAgilite() { return this.getReve() }
|
||||
getChance() { return this.getReve() }
|
||||
getEnduranceMax() { return Math.max(1, this.getTaille() + this.getReve()) }
|
||||
|
||||
getDraconicOuPossession() {
|
||||
return this.itemTypes[ITEM_TYPES.competencecreature]
|
||||
|
@ -76,7 +76,7 @@ const MAPPING_BASE = [
|
||||
{ column: "derobee", rollClass: 'roll-carac', colName: 'Dérobée', getter: (actor, context) => actor.system.carac.derobee.value },
|
||||
{ column: "vie", getter: (actor, context) => actor.system.sante.vie.max },
|
||||
{ column: "endurance", getter: (actor, context) => actor.system.sante.endurance.max },
|
||||
{ column: "plusdom", colName: '+dom', getter: (actor, context) => actor.system.attributs.plusdom.value },
|
||||
{ column: "plusdom", colName: '+dom', getter: (actor, context) => actor.getBonusDegat() },
|
||||
{ column: "protectionnaturelle", colName: 'Protection naturelle', getter: (actor, context) => actor.system.attributs.protection.value > 0 ? actor.system.attributs.protection.value : '' },
|
||||
{ column: "description", getter: (actor, context) => Mapping.getDescription(actor) },
|
||||
{ column: "armure", getter: (actor, context) => Mapping.getArmure(actor, context) },
|
||||
@ -169,10 +169,10 @@ export class Mapping {
|
||||
arme: arme
|
||||
}
|
||||
}
|
||||
static dommagesArme(actor, arme, maniement){
|
||||
static dommagesArme(actor, arme, maniement) {
|
||||
const dmgArme = RdDItemArme.dommagesReels(arme, maniement)
|
||||
const dommages = Misc.toSignedString(dmgArme + RdDBonus.bonusDmg(actor, maniement, dmgArme))
|
||||
switch(arme.system.mortalite) {
|
||||
switch (arme.system.mortalite) {
|
||||
case 'non-mortel': return `(${dommages})`
|
||||
case 'empoignade': return '-'
|
||||
}
|
||||
@ -259,6 +259,9 @@ export class Mapping {
|
||||
const diff = 'R' + RdDItemSort.addSpaceToNonNumeric(sort.system.difficulte)
|
||||
return `${sort.name}${ptSeuil} (${caseTMR}) ${diff} ${coutReve}`
|
||||
}
|
||||
static toVar(caseSpeciale) {
|
||||
return Grammar.toLowerCaseNoAccent(caseSpeciale).startsWith('var') ? 'var' : caseSpeciale
|
||||
}
|
||||
|
||||
static bonusCase(sort) {
|
||||
const list = RdDItemSort.stringToBonuscases(sort.system.bonuscase).sort(Misc.descending(it => it.bonus))
|
||||
|
@ -5,28 +5,38 @@ import { RdDBaseActorReve } from "../actor/base-actor-reve.js";
|
||||
import { Grammar } from "../grammar.js";
|
||||
import { Misc } from "../misc.js";
|
||||
import { ENTITE_INCARNE, ENTITE_NONINCARNE } from "../constants.js";
|
||||
import { RdDItemTete } from "../item/tete.js";
|
||||
|
||||
const WHITESPACES = "\\s+"
|
||||
const NUMERIC = "[\\+\\-]?\\d+"
|
||||
const NUMERIC_VALUE = "(?<value>" + NUMERIC + ")"
|
||||
|
||||
const XREGEXP_NAME = "(?<name>[A-Za-zÀ-ÖØ-öø-ÿ\\s\\-]+)"
|
||||
const XREGEXP_COMP_CREATURE = WHITESPACES + "(?<carac>\\d+)"
|
||||
+ WHITESPACES + NUMERIC_VALUE
|
||||
+ "(" + WHITESPACES + "(?<init>\\d+)?\\s+?(?<dommages>[\\+\\-]?\\d+)?" + ")?"
|
||||
|
||||
// Skill parser depending on the type of actor
|
||||
const compParser = {
|
||||
personnage: "(\\D+)*" + WHITESPACES + NUMERIC_VALUE,
|
||||
personnage: "(\\s+\\((?<special>[^\\)]+)\\))?(,\\s*\\p{Letter}+)*(\\s+(?<malus>avec armure))?" + WHITESPACES + NUMERIC_VALUE,
|
||||
creature: XREGEXP_COMP_CREATURE,
|
||||
entite: XREGEXP_COMP_CREATURE
|
||||
}
|
||||
|
||||
const XREGEXP_SORT_VOIE = "[OHNT\\/]+"
|
||||
const XREGEXP_SORT_CASE = "\\((?<case>[A-Za-zÀ-ÖØ-öø-ÿ\\s\\-]+)\\)";
|
||||
const MANIEMENTS = {
|
||||
'de lancer': (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' } },
|
||||
'à 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' } },
|
||||
}
|
||||
const XREGEXP_WEAPON_MANIEMENT = "(?<maniement>(" + Misc.join(Object.keys(MANIEMENTS), '|') + "))"
|
||||
|
||||
const XREGEXP_SORT_VOIE = "(?<voies>[OHNT](\\/[OHNT])*)"
|
||||
const XREGEXP_SORT_NAME = "(?<name>[^\\(]+)"
|
||||
const XREGEXP_SORT_CASE = "\\((?<case>([A-Za-zÀ-ÖØ-öø-ÿ\\s\\-]+|[A-M]\\d{1,2})+)\\)";
|
||||
|
||||
const XREGEXP_SORT = "(" + XREGEXP_SORT_VOIE
|
||||
+ WHITESPACES + XREGEXP_NAME
|
||||
+ WHITESPACES + XREGEXP_SORT_NAME
|
||||
+ WHITESPACES + XREGEXP_SORT_CASE
|
||||
+ WHITESPACES + "R(?<diff>([\\-\\d]+|(\\w|\\s)+))"
|
||||
+ WHITESPACES + "r(?<reve>(\\d+(\\+)?|\\s\\w+))"
|
||||
@ -104,7 +114,13 @@ export class RdDStatBlockParser {
|
||||
return "vaisseau";
|
||||
}
|
||||
|
||||
static async parseStatBlock(statString, type = "npc") {
|
||||
static fixCompName(name) {
|
||||
name = name.replace("Voie d'", "");
|
||||
name = name.replace("Voie de ", "");
|
||||
return name
|
||||
}
|
||||
|
||||
static async parseStatBlock(statString) {
|
||||
|
||||
//statString = statBlock03;
|
||||
if (!statString) {
|
||||
@ -122,10 +138,13 @@ export class RdDStatBlockParser {
|
||||
statString = statString.trim();
|
||||
|
||||
// TODO: check for entite
|
||||
let actorType = RdDStatBlockParser.parseActorType(statString);
|
||||
let type = RdDStatBlockParser.parseActorType(statString);
|
||||
|
||||
// Now start carac
|
||||
let actorData = foundry.utils.deepClone(game.model.Actor[actorType]);
|
||||
let actorData = foundry.utils.deepClone(game.model.Actor[type]);
|
||||
let items = [];
|
||||
|
||||
actorData.flags = { hautRevant: false, malusArmure: 0, type }
|
||||
for (let key in actorData.carac) {
|
||||
let caracDef = actorData.carac[key];
|
||||
// Parse the stat string for each caracteristic
|
||||
@ -136,7 +155,7 @@ export class RdDStatBlockParser {
|
||||
}
|
||||
|
||||
// If creature we need to setup additionnal fields
|
||||
switch (actorType) {
|
||||
switch (type) {
|
||||
case "creature":
|
||||
RdDStatBlockParser.parseCreature(statString, actorData)
|
||||
break
|
||||
@ -144,172 +163,246 @@ export class RdDStatBlockParser {
|
||||
RdDStatBlockParser.parseEntite(statString, actorData)
|
||||
break
|
||||
}
|
||||
if (type == "personnage") {
|
||||
// Now process armors
|
||||
await RdDStatBlockParser.parseArmors(statString, actorData, items);
|
||||
}
|
||||
|
||||
let items = [];
|
||||
// Get skills from compendium
|
||||
const competences = await SystemCompendiums.getCompetences(actorType);
|
||||
await RdDStatBlockParser.parseCompetences(statString, actorData, items);
|
||||
|
||||
|
||||
if (type == "personnage") {
|
||||
// Now process weapons
|
||||
await RdDStatBlockParser.parseWeapons(statString, items);
|
||||
|
||||
await RdDStatBlockParser.parseHautReve(statString, actorData, items);
|
||||
RdDStatBlockParser.parsePersonnage(statString, actorData);
|
||||
}
|
||||
|
||||
const name = RdDStatBlockParser.extractName(type, statString);
|
||||
|
||||
actorData.flags = undefined
|
||||
console.log(actorData);
|
||||
|
||||
let newActor = await RdDBaseActorReve.create({ name, type, system: actorData, items });
|
||||
await newActor.remiseANeuf()
|
||||
await RdDStatBlockParser.setValeursActuelles(newActor, statString)
|
||||
await newActor?.sheet.render(true)
|
||||
}
|
||||
|
||||
static async parseCompetences(statString, actorData, items) {
|
||||
const competences = await SystemCompendiums.getCompetences(actorData.flags.type);
|
||||
//console.log("Competences : ", competences);
|
||||
for (let comp of competences) {
|
||||
let compMatch = XRegExp.exec(statString, XRegExp(comp.name + compParser[actorType], 'giu'));
|
||||
if (compMatch) {
|
||||
comp = comp.toObject()
|
||||
comp.system.niveau = Number(compMatch.value);
|
||||
if (actorType == "creature" || actorType == "entite") {
|
||||
comp.system.carac_value = Number(compMatch.carac);
|
||||
if (compMatch.dommages != undefined) {
|
||||
comp.system.dommages = Number(compMatch.dommages);
|
||||
comp.system.iscombat = true;
|
||||
}
|
||||
}
|
||||
items.push(comp)
|
||||
for (let competence of competences) {
|
||||
let compSourceString = statString
|
||||
let compNameToSearch = RdDStatBlockParser.fixCompName(competence.name)
|
||||
let compMatch = XRegExp.exec(compSourceString, XRegExp("\\s" + compNameToSearch + compParser[actorData.flags.type], 'giu'))
|
||||
while (compMatch) {
|
||||
items.push(RdDStatBlockParser.prepareCompetence(actorData, competence, compMatch))
|
||||
|
||||
// pour gérer les compétences avec spécialisations, si elle est trouvée, chercher si elle apparaît dans la suite
|
||||
compSourceString = compSourceString.substring(compSourceString.indexOf(compNameToSearch) + compNameToSearch.length)
|
||||
compMatch = XRegExp.exec(compSourceString, XRegExp("\\s" + compNameToSearch + compParser[actorData.flags.type], 'giu'))
|
||||
}
|
||||
else if (actorType == "personnage") {
|
||||
comp = comp.toObject()
|
||||
items.push(comp)
|
||||
if (actorData.flags.type == "personnage" && compSourceString.length == statString.length) {
|
||||
// ajout niveau de base
|
||||
items.push(competence.toObject())
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
static prepareCompetence(actorData, competence, compMatch) {
|
||||
const comp = competence.toObject();
|
||||
if (compMatch.special) {
|
||||
comp._id = undefined
|
||||
comp.name = `${comp.name} (${compMatch.special})`
|
||||
}
|
||||
comp.system.niveau = Number(compMatch.value);
|
||||
if (compMatch.malus) {
|
||||
comp.system.niveau = Number(compMatch.value) - actorData.flags.malusArmure
|
||||
}
|
||||
if (comp.system.categorie == 'draconic' && comp.system.niveau > -11) {
|
||||
actorData.flags.hautRevant = true
|
||||
}
|
||||
if (["creature", "entite"].includes(actorData.flags.type)) {
|
||||
comp.system.carac_value = Number(compMatch.carac);
|
||||
if (compMatch.dommages != undefined) {
|
||||
comp.system.dommages = Number(compMatch.dommages)
|
||||
comp.system.iscombat = true
|
||||
}
|
||||
}
|
||||
return comp
|
||||
}
|
||||
|
||||
// Now process weapons
|
||||
const weapons = await SystemCompendiums.getWorldOrCompendiumItems("arme", "equipement")
|
||||
//console.log("Equipement : ", equipment);
|
||||
// TODO: les noms d'armes peuvent avoir un suffixe (à une main, lancée) qui détermine la compétence correspondante
|
||||
// TODO: une arme peut être spécifique ("fourche"), ajouter une compétence dans ces cas là?
|
||||
for (let weapon of weapons) {
|
||||
let weapMatch = XRegExp.exec(statString, XRegExp(weapon.name + "\\s+(?<value>\\+\\d+)", 'giu'));
|
||||
if (weapMatch) {
|
||||
weapon = weapon.toObject()
|
||||
weapon.system.equipe = 'true'
|
||||
items.push(weapon)
|
||||
// now process the skill
|
||||
if (weapon.system?.competence != "") {
|
||||
let wComp = items.find(i => Grammar.equalsInsensitive(i.name, weapon.system.competence))
|
||||
if (wComp) {
|
||||
wComp.system.niveau = Number(weapMatch.value);
|
||||
}
|
||||
}
|
||||
if (weapon.system?.tir != "") {
|
||||
let wComp = items.find(i => Grammar.equalsInsensitive(i.name, weapon.system.tir))
|
||||
if (wComp) {
|
||||
wComp.system.niveau = Number(weapMatch.value);
|
||||
}
|
||||
}
|
||||
if (weapon.system?.lancer != "") {
|
||||
let wComp = items.find(i => Grammar.equalsInsensitive(i.name, weapon.system.lancer))
|
||||
if (wComp) {
|
||||
wComp.system.niveau = Number(weapMatch.value);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Now process armors
|
||||
const armors = await SystemCompendiums.getWorldOrCompendiumItems("armure", "equipement")
|
||||
static async parseArmors(statString, actorData, items) {
|
||||
const armors = await SystemCompendiums.getWorldOrCompendiumItems("armure", "equipement");
|
||||
for (let armor of armors) {
|
||||
let matchArmor = XRegExp.exec(statString, XRegExp(armor.name, 'giu'));
|
||||
if (matchArmor) {
|
||||
armor = armor.toObject()
|
||||
armor.system.equipe = true
|
||||
items.push(armor);
|
||||
actorData.flags.malusArmure = armor.system.malus
|
||||
items.push(armor)
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static async parseWeapons(statString, items) {
|
||||
const weapons = await SystemCompendiums.getWorldOrCompendiumItems("arme", "equipement");
|
||||
//console.log("Equipement : ", equipment);
|
||||
// TODO: les noms d'armes peuvent avoir un suffixe (à une main, lancée) qui détermine la compétence correspondante
|
||||
// TODO: une arme peut être spécifique ("fourche"), ajouter une compétence dans ces cas là?
|
||||
for (let weapon of weapons) {
|
||||
let nomArmeManiement = XRegExp.exec(weapon.name, XRegExp(".*" + XREGEXP_WEAPON_MANIEMENT));
|
||||
if (nomArmeManiement) {
|
||||
continue // ignore les objets 'Dague de jet" ou "dague mêlée"
|
||||
}
|
||||
let weapMatch = XRegExp.exec(statString, XRegExp(weapon.name
|
||||
+ "(\\s*" + XREGEXP_WEAPON_MANIEMENT + ")?"
|
||||
+ "\\s+(?<value>\\+\\d+)", 'giu'));
|
||||
if (weapMatch) {
|
||||
weapon = weapon.toObject();
|
||||
weapon.system.equipe = 'true';
|
||||
items.push(weapon);
|
||||
|
||||
const niveau = Number(weapMatch.value);
|
||||
// now process the skill
|
||||
if (weapMatch?.maniement) {
|
||||
RdDStatBlockParser.setNiveauCompetenceArme(items, MANIEMENTS[weapMatch.maniement](weapon), niveau)
|
||||
}
|
||||
else {
|
||||
RdDStatBlockParser.setNiveauCompetenceArme(items, { name: weapon.system.competence, categorie: 'melee' }, niveau)
|
||||
RdDStatBlockParser.setNiveauCompetenceArme(items, { name: weapon.system.tir, categorie: 'tir' }, niveau)
|
||||
RdDStatBlockParser.setNiveauCompetenceArme(items, { name: weapon.system.lancer, categorie: 'lancer' }, niveau)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static setNiveauCompetenceArme(items, competence, niveau) {
|
||||
if (competence != "") {
|
||||
const item = items.find(i => i.system.categorie == competence.categorie && Grammar.equalsInsensitive(i.name, competence.name))
|
||||
if (item) {
|
||||
item.system.niveau = niveau
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static async setValeursActuelles(newActor, statString) {
|
||||
const updates = {
|
||||
}
|
||||
const endurance = XRegExp.exec(statString, XRegExp("endurance\\s+(?<value>\\d+)\\s+(\\(actuelle\\s*:\\s+(?<actuelle>\\d+)\\))?", 'giu'));
|
||||
if (endurance?.value) {
|
||||
if (newActor.getEnduranceMax() != endurance.value) {
|
||||
ui.notifications.warn(`Vérifier le calcul de l'endurance, calcul: ${newActor.getEnduranceMax()} / import: ${endurance.value}`)
|
||||
}
|
||||
}
|
||||
if (endurance?.actuelle) {
|
||||
updates['system.sante.endurance.value'] = Number(endurance?.actuelle)
|
||||
}
|
||||
|
||||
const vie = XRegExp.exec(statString, XRegExp("vie\\s+(?<value>\\d+)\\s+(\\(actuelle\\s*:\\s+(?<actuelle>\\d+)\\))?", 'giu'));
|
||||
if (vie?.value) {
|
||||
if (newActor.getVieMax() != vie.value) {
|
||||
ui.notifications.warn(`Vérifier le calcul de la vie, calcul: ${newActor.getVieMax()} / import: ${vie.value}`)
|
||||
}
|
||||
}
|
||||
if (vie?.actuelle) {
|
||||
updates['system.sante.vie.value'] = Number(vie?.actuelle)
|
||||
}
|
||||
await newActor.update(updates)
|
||||
}
|
||||
|
||||
static async parseHautReve(statString, actorData, items) {
|
||||
// Attemp to detect spell
|
||||
let hautRevant = false
|
||||
let sorts = await SystemCompendiums.getWorldOrCompendiumItems("sort", "sorts-oniros")
|
||||
sorts = sorts.concat(await SystemCompendiums.getWorldOrCompendiumItems("sort", "sorts-hypnos"))
|
||||
sorts = sorts.concat(await SystemCompendiums.getWorldOrCompendiumItems("sort", "sorts-narcos"))
|
||||
sorts = sorts.concat(await SystemCompendiums.getWorldOrCompendiumItems("sort", "sorts-thanatos"))
|
||||
let sorts = await SystemCompendiums.getWorldOrCompendiumItems("sort", "sorts-oniros");
|
||||
sorts = sorts.concat(await SystemCompendiums.getWorldOrCompendiumItems("sort", "sorts-hypnos"));
|
||||
sorts = sorts.concat(await SystemCompendiums.getWorldOrCompendiumItems("sort", "sorts-narcos"));
|
||||
sorts = sorts.concat(await SystemCompendiums.getWorldOrCompendiumItems("sort", "sorts-thanatos"));
|
||||
|
||||
XRegExp.forEach(statString, XRegExp(XREGEXP_SORT, 'giu'),
|
||||
XRegExp.forEach(statString, XRegExp(XREGEXP_SORT, 'gu' /* keep case sensitive to match the spell draconic skill */),
|
||||
function (matchSort, i) {
|
||||
let sort = sorts.find(s => Grammar.equalsInsensitive(s.name, matchSort.name))
|
||||
const sortName = Grammar.toLowerCaseNoAccent(matchSort.name).trim().replace("’", "'");
|
||||
let sort = sorts.find(s => Grammar.toLowerCaseNoAccent(s.name) == sortName)
|
||||
if (sort) {
|
||||
hautRevant = true
|
||||
actorData.flags.hautRevant = true
|
||||
sort = sort.toObject();
|
||||
if (matchSort.bonus && matchSort.bonuscase) {
|
||||
sort.system.bonuscase = `${matchSort.bonuscase}:${matchSort.bonus}`
|
||||
sort.system.bonuscase = `${matchSort.bonuscase}:${matchSort.bonus}`;
|
||||
}
|
||||
items.push(sort);
|
||||
}
|
||||
else {
|
||||
ui.notifications.warn(`Impossible de trouver le sort ${matchSort.name} / ${sortName}`)
|
||||
}
|
||||
});
|
||||
|
||||
if (hautRevant) {
|
||||
let tetes = await SystemCompendiums.getWorldOrCompendiumItems("tete", "tetes-de-dragon-pour-tous-personnages")
|
||||
let donHR = tetes.find(t => Grammar.equalsInsensitive(t.name, "Don de Haut-Rêve"))
|
||||
if (actorData.flags.hautRevant) {
|
||||
const donHR = await RdDItemTete.teteDonDeHautReve();
|
||||
if (donHR) {
|
||||
items.push(donHR.toObject());
|
||||
}
|
||||
|
||||
const demiReve = XRegExp.exec(statString, XRegExp("Demi-rêve\\s+(?<value>[A-M]\\d{1,2})", 'giu'))
|
||||
actorData.reve.tmrpos.coord = demiReve?.value ?? 'A1'
|
||||
}
|
||||
if (actorType == "personnage") {
|
||||
}
|
||||
|
||||
let feminin = XRegExp.exec(statString, XRegExp("né(?<value>e?) à", 'giu'));
|
||||
actorData.sexe = (feminin?.value == 'e') ? 'féminin' : 'masculin'
|
||||
static parsePersonnage(statString, actorData) {
|
||||
actorData.reve.seuil.value = actorData.carac.reve.value
|
||||
actorData.compteurs.chance.value = actorData.carac.chance.value
|
||||
|
||||
// Get hour name : heure du XXXXX
|
||||
let heure = XRegExp.exec(statString, XRegExp("heure (du|de la|des|de l\')\\s*(?<value>[A-Za-zÀ-ÖØ-öø-ÿ\\s]+),", 'giu'));
|
||||
actorData.heure = this.getHeureKey(heure?.value || "Vaisseau");
|
||||
const reveActuel = XRegExp.exec(statString, XRegExp("Rêve actuel\\s+(?<value>\\d+)", 'giu'))
|
||||
actorData.reve.reve.value = reveActuel?.value ? Number(reveActuel.value) : actorData.reve.seuil.value
|
||||
|
||||
// Get age
|
||||
let age = XRegExp.exec(statString, XRegExp("(?<value>\\d+) ans", 'giu'));
|
||||
if (age?.value) {
|
||||
actorData.age = Number(age.value);
|
||||
}
|
||||
// Get height
|
||||
let taille = XRegExp.exec(statString, XRegExp("(?<value>\\d+m\\d+)", 'giu'));
|
||||
if (taille?.value) {
|
||||
actorData.taille = taille.value;
|
||||
}
|
||||
// Get weight
|
||||
let poids = XRegExp.exec(statString, XRegExp("(?<value>\\d+) kg", 'giu'));
|
||||
if (poids?.value) {
|
||||
actorData.poids = poids.value;
|
||||
}
|
||||
// Get cheveux
|
||||
let cheveux = XRegExp.exec(statString, XRegExp("kg,\\s+(?<value>[A-Za-zÀ-ÖØ-öø-ÿ\\s\\-]+),\\s+yeux", 'giu'));
|
||||
if (cheveux?.value) {
|
||||
actorData.cheveux = cheveux.value;
|
||||
}
|
||||
// Get yeux
|
||||
let yeux = XRegExp.exec(statString, XRegExp("yeux\\s+(?<value>[A-Za-zÀ-ÖØ-öø-ÿ\\s\\-]+), Beau", 'giu'));
|
||||
if (yeux?.value) {
|
||||
actorData.yeux = yeux.value;
|
||||
}
|
||||
const feminin = XRegExp.exec(statString, XRegExp("né(?<value>e?) à", 'giu'));
|
||||
actorData.sexe = (feminin?.value == 'e') ? 'féminin' : 'masculin';
|
||||
|
||||
// Get beauty
|
||||
let beaute = XRegExp.exec(statString, XRegExp("beauté\\s+(?<value>\\d+)", 'giu'));
|
||||
if (beaute?.value) {
|
||||
actorData.beaute = Number(beaute.value);
|
||||
}
|
||||
// Get hour name : heure du XXXXX
|
||||
const heure = XRegExp.exec(statString, XRegExp("heure (du|de la|des|de l\')\\s*(?<value>[A-Za-zÀ-ÖØ-öø-ÿ\\s]+),", 'giu'));
|
||||
actorData.heure = this.getHeureKey(heure?.value || "Vaisseau");
|
||||
|
||||
// Get age
|
||||
const age = XRegExp.exec(statString, XRegExp("(?<value>\\d+) ans", 'giu'));
|
||||
if (age?.value) {
|
||||
actorData.age = Number(age.value);
|
||||
}
|
||||
// Get height
|
||||
const taille = XRegExp.exec(statString, XRegExp("(?<value>\\d+m\\d+)", 'giu'));
|
||||
if (taille?.value) {
|
||||
actorData.taille = taille.value;
|
||||
}
|
||||
// Get weight
|
||||
const poids = XRegExp.exec(statString, XRegExp("(?<value>\\d+ kg)", 'giu'));
|
||||
if (poids?.value) {
|
||||
actorData.poids = poids.value;
|
||||
}
|
||||
// Get cheveux
|
||||
const cheveux = XRegExp.exec(statString, XRegExp("kg,\\s+(?<value>[A-Za-zÀ-ÖØ-öø-ÿ\\s\\-]+),\\s+yeux", 'giu'));
|
||||
if (cheveux?.value) {
|
||||
actorData.cheveux = cheveux.value;
|
||||
}
|
||||
// Get yeux
|
||||
const yeux = XRegExp.exec(statString, XRegExp("yeux\\s+(?<value>[A-Za-zÀ-ÖØ-öø-ÿ\\s\\-]+), Beau", 'giu'));
|
||||
if (yeux?.value) {
|
||||
actorData.yeux = yeux.value;
|
||||
}
|
||||
|
||||
// Name is all string before ', né'
|
||||
let name = RdDStatBlockParser.extractName(actorType, statString);
|
||||
|
||||
let newActor = RdDBaseActorReve.create({ name: name || "Importé", type: actorType, system: actorData, items: items });
|
||||
|
||||
// DUmp....
|
||||
console.log(actorData);
|
||||
// Get beauty
|
||||
const beaute = XRegExp.exec(statString, XRegExp("beauté\\s+(?<value>\\d+)", 'giu'));
|
||||
if (beaute?.value) {
|
||||
actorData.beaute = Number(beaute.value);
|
||||
}
|
||||
}
|
||||
|
||||
static parseCreature(statString, actorData) {
|
||||
let plusDom = XRegExp.exec(statString, XRegExp("\\+dom\\s+(?<value>[\\+\\-]?\\d+)", 'giu'));
|
||||
if (plusDom?.values) {
|
||||
actorData.attributs.plusdom.value = Number(plusDom.value);
|
||||
}
|
||||
let protection = XRegExp.exec(statString, XRegExp("protection\\s+(?<value>[\\-]?\\d+)", 'giu'));
|
||||
if (protection?.value) {
|
||||
actorData.attributs.protection.value = Number(protection.value);
|
||||
}
|
||||
let endurance = XRegExp.exec(statString, XRegExp("endurance\\s+(?<value>\\d+)", 'giu'));
|
||||
if (endurance?.value) {
|
||||
actorData.sante.endurance.value = Number(endurance.value);
|
||||
actorData.sante.endurance.max = Number(endurance.value);
|
||||
}
|
||||
let vie = XRegExp.exec(statString, XRegExp("vie\\s+(?<value>\\d+)", 'giu'));
|
||||
if (vie.value) {
|
||||
actorData.sante.vie.value = Number(vie.value);
|
||||
actorData.sante.vie.max = Number(vie.value);
|
||||
}
|
||||
let vitesse = XRegExp.exec(statString, XRegExp("vitesse\\s+(?<value>[\\d\\/]+)", 'giu'));
|
||||
if (vitesse?.value) {
|
||||
actorData.attributs.vitesse.value = vitesse.value;
|
||||
@ -317,11 +410,6 @@ export class RdDStatBlockParser {
|
||||
}
|
||||
|
||||
static parseEntite(statString, actorData) {
|
||||
let plusDom = XRegExp.exec(statString, XRegExp("\\+dom\\s+(?<value>[\\+\\-]?\\d+)", 'giu'));
|
||||
if (plusDom?.values) {
|
||||
actorData.attributs.plusdom.value = Number(plusDom.value);
|
||||
}
|
||||
|
||||
actorData.definition.categorieentite = 'cauchemar'
|
||||
actorData.definition.typeentite = ENTITE_NONINCARNE
|
||||
let endurance = XRegExp.exec(statString, XRegExp("endurance\\s+(?<value>\\d+)", 'giu'));
|
||||
@ -350,24 +438,27 @@ export class RdDStatBlockParser {
|
||||
|
||||
static extractName(actorType, statString) {
|
||||
switch (actorType) {
|
||||
case "personnage": return RdDStatBlockParser.extractNamePersonnage(statString);
|
||||
case "creature": return RdDStatBlockParser.extractNameCreature(statString);
|
||||
case "personnage":
|
||||
// Check if ',né le' is present
|
||||
let namePersonnage = "Importé"
|
||||
if (statString.includes(", né")) {
|
||||
// Name is all string before first comma ','
|
||||
namePersonnage = XRegExp.exec(statString, XRegExp("(?<value>[\\p{Letter}\\s\\d]+),", 'giu'));
|
||||
} else {
|
||||
namePersonnage = XRegExp.exec(statString, XRegExp("(?<value>[\\p{Letter}\\s\\d]+)\\s+TAILLE", 'giu'));
|
||||
}
|
||||
if (namePersonnage?.value) {
|
||||
return Misc.upperFirst(namePersonnage?.value);
|
||||
}
|
||||
}
|
||||
return RdDStatBlockParser.extractNameCreature(statString);
|
||||
}
|
||||
|
||||
static extractNamePersonnage(statString) {
|
||||
let name = XRegExp.exec(statString, XRegExp("(?<value>[\\p{Letter}\\s\\d]+),", 'giu'));
|
||||
if (!name?.value) {
|
||||
name = XRegExp.exec(statString, XRegExp("(?<value>.+)\\s+taille", 'giu'));
|
||||
}
|
||||
return Misc.upperFirst(name?.value || "Importé");
|
||||
}
|
||||
|
||||
static extractNameCreature(statString) {
|
||||
const name = XRegExp.exec(statString, XRegExp("(?<value>.+)\\s+taille", 'giu'));
|
||||
return Misc.upperFirst(name?.value || "Importé");
|
||||
}
|
||||
|
||||
static warning(message) {
|
||||
ui.notifications.warn(message);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/************************************************************************************/
|
||||
|
@ -48,8 +48,9 @@ export class RdDItemBlessure extends RdDItem {
|
||||
let lostEndurance = 0
|
||||
let lostVie = 0
|
||||
if (definition.endurance) {
|
||||
lostEndurance = await new Roll(definition.endurance).roll().total;
|
||||
actor.santeIncDec("endurance", -Number(lostEndurance));
|
||||
lostEndurance = new Roll(definition.endurance)
|
||||
await lostEndurance.roll();
|
||||
actor.santeIncDec("endurance", -Number(lostEndurance.total));
|
||||
}
|
||||
if (definition.vie) {
|
||||
lostVie = definition.vie
|
||||
|
25
module/item/tete.js
Normal file
25
module/item/tete.js
Normal file
@ -0,0 +1,25 @@
|
||||
import { Grammar } from "../grammar.js"
|
||||
import { ITEM_TYPES, RdDItem } from "../item.js"
|
||||
import { SystemCompendiums } from "../settings/system-compendiums.js"
|
||||
|
||||
const DON_HAUT_REVE = "Don de Haut-Rêve"
|
||||
|
||||
export class RdDItemTete extends RdDItem {
|
||||
|
||||
static get defaultIcon() {
|
||||
return "systems/foundryvtt-reve-de-dragon/icons/tete_dragon.webp"
|
||||
}
|
||||
|
||||
static isDonDeHautReve(tete) {
|
||||
return tete.type == ITEM_TYPES.tete && Grammar.equalsInsensitive(tete.name, DON_HAUT_REVE)
|
||||
}
|
||||
|
||||
static async teteDonDeHautReve() {
|
||||
const tetes = await SystemCompendiums.getItems("tetes-de-dragon-pour-tous-personnages", ITEM_TYPES.tete)
|
||||
const tete = tetes.find(it => RdDItemTete.isDonDeHautReve(it))
|
||||
if (!tete) {
|
||||
ui.notifications.warn(`Impossible de trouver la tête "${DON_HAUT_REVE}", vérifiez le compendium de têtes pour tous personnages`)
|
||||
}
|
||||
return tete
|
||||
}
|
||||
}
|
@ -137,7 +137,7 @@ class _10_0_21_VehiculeStructureResistanceMax extends Migration {
|
||||
}
|
||||
|
||||
class _10_0_33_MigrationNomsDraconic extends Migration {
|
||||
get code() { return "competences-creature-parade"; }
|
||||
get code() { return "competences-nom-draconic"; }
|
||||
get version() { return "10.0.33"; }
|
||||
|
||||
migrationNomDraconic(ancien) {
|
||||
@ -530,15 +530,25 @@ class _11_2_20_MigrationAstrologie extends Migration {
|
||||
}
|
||||
}
|
||||
|
||||
class _12_0_24_MigrationVoieSorts extends Migration {
|
||||
class _12_0_26_MigrationVoieSorts extends Migration {
|
||||
get code() { return "migration-voies-sorts" }
|
||||
get version() { return "12.0.24" }
|
||||
get version() { return "12.0.26" }
|
||||
|
||||
async migrate() {
|
||||
await this.applyItemsUpdates(items => items
|
||||
.filter(it => ITEM_TYPES.sort == it.type)
|
||||
.filter(it => [ITEM_TYPES.sort, ITEM_TYPES.sortreserve].includes(it.type))
|
||||
.map(it => this.migrateSort(it))
|
||||
)
|
||||
await this.applyItemsUpdates(items => items
|
||||
.filter(it => ITEM_TYPES.competence == it.type && it.system.categorie == 'draconic')
|
||||
.map(it => this.migrateDraconic(it))
|
||||
)
|
||||
}
|
||||
migrateDraconic(it) {
|
||||
return {
|
||||
_id: it.id,
|
||||
name: this.convertDraconic(it.name),
|
||||
}
|
||||
}
|
||||
migrateSort(it) {
|
||||
return {
|
||||
@ -575,6 +585,7 @@ export class Migrations {
|
||||
new _10_7_19_CategorieCompetenceCreature(),
|
||||
new _10_7_19_PossessionsEntiteVictime(),
|
||||
new _11_2_20_MigrationAstrologie(),
|
||||
new _12_0_26_MigrationVoieSorts()
|
||||
];
|
||||
}
|
||||
|
||||
|
@ -58,9 +58,6 @@ export class Misc {
|
||||
* @param {*} value value to convert to an integer using parseInt
|
||||
*/
|
||||
static toInt(value) {
|
||||
if (value == undefined) {
|
||||
return 0;
|
||||
}
|
||||
const parsed = parseInt(value);
|
||||
return isNaN(parsed) ? 0 : parsed;
|
||||
}
|
||||
@ -203,11 +200,7 @@ export class Misc {
|
||||
if (!document.testUserPermission){
|
||||
return false
|
||||
}
|
||||
return game.users.filter(u => document.testUserPermission(u, CONST.DOCUMENT_OWNERSHIP_LEVELS.OWNER)) == game.user
|
||||
}
|
||||
|
||||
static isOwnerPlayerOrUniqueConnectedGM(actor) {
|
||||
return Misc.isFirstOwnerPlayer(actor) ?? Misc.isFirstConnectedGM();
|
||||
return game.users.find(u => document.testUserPermission(u, CONST.DOCUMENT_OWNERSHIP_LEVELS.OWNER)) == game.user
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -64,7 +64,7 @@ export class RdDCarac {
|
||||
}
|
||||
|
||||
static getCaracDerivee(value) {
|
||||
return TABLE_CARACTERISTIQUES_DERIVEES[Math.min(Math.max(Number(value), 1), 32)];
|
||||
return TABLE_CARACTERISTIQUES_DERIVEES[Math.min(Math.max(Math.floor(Number(value)), 1), 32)];
|
||||
}
|
||||
|
||||
static computeTotal(carac, beaute = undefined) {
|
||||
|
@ -436,7 +436,7 @@ export class RdDCombat {
|
||||
/* -------------------------------------------- */
|
||||
static onMsgEncaisser(msg) {
|
||||
let defender = canvas.tokens.get(msg.defenderToken.id).actor;
|
||||
if (Misc.isOwnerPlayerOrUniqueConnectedGM(defender)) {
|
||||
if (Misc.isOwnerPlayer(defender)) {
|
||||
let attackerRoll = msg.attackerRoll;
|
||||
let attacker = msg.attackerId ? game.actors.get(msg.attackerId) : undefined;
|
||||
defender.encaisserDommages(attackerRoll, attacker, msg.attackerToken);
|
||||
@ -1251,7 +1251,7 @@ export class RdDCombat {
|
||||
this._onEchecTotal(defenderRoll);
|
||||
}
|
||||
|
||||
if (Misc.isOwnerPlayerOrUniqueConnectedGM(this.defender)) {
|
||||
if (Misc.isOwnerPlayer(this.defender)) {
|
||||
attackerRoll.attackerId = this.attackerId;
|
||||
attackerRoll.defenderTokenId = this.defenderToken.id;
|
||||
|
||||
|
@ -70,6 +70,7 @@ import { AppPersonnageAleatoire } from "./actor/random/app-personnage-aleatoire.
|
||||
import { RdDActorExportSheet } from "./actor/export-scriptarium/actor-encart-sheet.js"
|
||||
import { RdDStatBlockParser } from "./apps/rdd-import-stats.js"
|
||||
import { RdDItemSort } from "./item-sort.js"
|
||||
import { RdDItemTete } from "./item/tete.js"
|
||||
|
||||
/**
|
||||
* RdD system
|
||||
@ -97,6 +98,7 @@ export class SystemReveDeDragon {
|
||||
ombre: RdDItemOmbre,
|
||||
poison: RdDItemPoison,
|
||||
queue: RdDItemQueue,
|
||||
tete: RdDItemTete,
|
||||
rencontre: RdDRencontre,
|
||||
service: RdDItemService,
|
||||
signedraconique: RdDItemSigneDraconique,
|
||||
|
@ -20,6 +20,7 @@ import { ExperienceLog } from "./actor/experience-log.js";
|
||||
import { RdDCoeur } from "./coeur/rdd-coeur.js";
|
||||
import { APP_ASTROLOGIE_REFRESH } from "./sommeil/app-astrologie.js";
|
||||
import { RDD_CONFIG } from "./constants.js";
|
||||
import { RdDBaseActor } from "./actor/base-actor.js";
|
||||
|
||||
/* -------------------------------------------- */
|
||||
// This table starts at 0 -> niveau -10
|
||||
@ -121,6 +122,7 @@ export class RdDUtility {
|
||||
'systems/foundryvtt-reve-de-dragon/templates/actor/header-hautreve.html',
|
||||
'systems/foundryvtt-reve-de-dragon/templates/actor/archetype.hbs',
|
||||
'systems/foundryvtt-reve-de-dragon/templates/actor/vue-detaillee.html',
|
||||
'systems/foundryvtt-reve-de-dragon/templates/actor/armures.hbs',
|
||||
'systems/foundryvtt-reve-de-dragon/templates/actor/carac-main.html',
|
||||
'systems/foundryvtt-reve-de-dragon/templates/actor/carac-derivee.html',
|
||||
'systems/foundryvtt-reve-de-dragon/templates/actor/carac-creature.html',
|
||||
@ -145,8 +147,8 @@ export class RdDUtility {
|
||||
'systems/foundryvtt-reve-de-dragon/templates/actor/alchimie.html',
|
||||
'systems/foundryvtt-reve-de-dragon/templates/actor/astrologie.html',
|
||||
'systems/foundryvtt-reve-de-dragon/templates/actor/chirurgie.html',
|
||||
'systems/foundryvtt-reve-de-dragon/templates/actor/non-haut-revant.html',
|
||||
'systems/foundryvtt-reve-de-dragon/templates/actor/haut-revant.html',
|
||||
'systems/foundryvtt-reve-de-dragon/templates/actor/non-haut-revant.hbs',
|
||||
'systems/foundryvtt-reve-de-dragon/templates/actor/haut-revant.hbs',
|
||||
'systems/foundryvtt-reve-de-dragon/templates/actor/dragon-queues.html',
|
||||
'systems/foundryvtt-reve-de-dragon/templates/actor/dragon-queue.html',
|
||||
'systems/foundryvtt-reve-de-dragon/templates/actor/dragon-souffles.html',
|
||||
@ -263,12 +265,12 @@ export class RdDUtility {
|
||||
Handlebars.registerHelper('either', (a, b) => a ?? b);
|
||||
Handlebars.registerHelper('upperFirst', str => Misc.upperFirst(str ?? 'Null'));
|
||||
Handlebars.registerHelper('lowerFirst', str => Misc.lowerFirst(str ?? 'Null'));
|
||||
Handlebars.registerHelper('upper', str => str?.toUpperCase() ?? '');
|
||||
Handlebars.registerHelper('uppercase', str => str?.toUpperCase() ?? '');
|
||||
Handlebars.registerHelper('lowercase', str => str?.toLowerCase() ?? '');
|
||||
Handlebars.registerHelper('le', str => Grammar.articleDetermine(str));
|
||||
Handlebars.registerHelper('apostrophe', (article, str) => Grammar.apostrophe(article, str));
|
||||
Handlebars.registerHelper('un', str => Grammar.articleIndetermine(str));
|
||||
Handlebars.registerHelper('accord', (genre, ...args) => Grammar.accord(genre, args));
|
||||
Handlebars.registerHelper('grammar-le', str => Grammar.articleDetermine(str));
|
||||
Handlebars.registerHelper('grammar-apostrophe', (article, str) => Grammar.apostrophe(article, str));
|
||||
Handlebars.registerHelper('grammar-un', str => Grammar.articleIndetermine(str));
|
||||
Handlebars.registerHelper('grammar-accord', (genre, ...args) => Grammar.accord(genre, args));
|
||||
|
||||
Handlebars.registerHelper('RDD_CONFIG', path => RDD_CONFIG[path])
|
||||
Handlebars.registerHelper('computeResolutionScore', (row, col) => RdDResolutionTable.computePercentage(row, col));
|
||||
@ -288,6 +290,8 @@ export class RdDUtility {
|
||||
Handlebars.registerHelper('timestamp-formulesDuree', () => RdDTimestamp.formulesDuree());
|
||||
Handlebars.registerHelper('timestamp-formulesPeriode', () => RdDTimestamp.formulesPeriode());
|
||||
|
||||
Handlebars.registerHelper('actor-default', (actorType, ...path) => RdDBaseActor.getDefaultValue(actorType, path.slice(0, -1)));
|
||||
|
||||
Handlebars.registerHelper('array-includes', (array, value) => array.includes(value));
|
||||
Handlebars.registerHelper('min', (...args) => Math.min(...args.slice(0, -1)));
|
||||
Handlebars.registerHelper('isLastIndex', (index, list) => index + 1 >= list.length);
|
||||
|
@ -1,5 +1,6 @@
|
||||
import { ChatUtility } from "../chat-utility.js";
|
||||
import { HIDE_DICE, SYSTEM_RDD } from "../constants.js";
|
||||
import { Grammar } from "../grammar.js";
|
||||
import { RdDItem } from "../item.js";
|
||||
import { Misc } from "../misc.js";
|
||||
import { RdDDice } from "../rdd-dice.js";
|
||||
@ -84,15 +85,14 @@ export class SystemCompendiums extends FormApplication {
|
||||
static async getWorldOrCompendiumItems(itemType, compendium) {
|
||||
let items = game.items.filter(it => it.type == itemType)
|
||||
if (compendium) {
|
||||
const ids = items.map(it => it.id);
|
||||
const names = items.map(it => it.name.toLowerCase());
|
||||
const compendiumItems = await SystemCompendiums.getItems(compendium);
|
||||
items = items.concat(compendiumItems
|
||||
.filter(it => it.type == itemType)
|
||||
const ids = items.map(it => it.id)
|
||||
const names = items.map(it => Grammar.toLowerCaseNoAccent(it.name))
|
||||
const compendiumItems = await SystemCompendiums.getItems(compendium, itemType)
|
||||
return items.concat(compendiumItems
|
||||
.filter(it => !ids.includes(it.id))
|
||||
.filter(it => !names.includes(it.name.toLowerCase())));
|
||||
.filter(it => !names.includes(Grammar.equalsInsensitive(it.name))))
|
||||
}
|
||||
return items;
|
||||
return items
|
||||
}
|
||||
|
||||
static async loadDocument(document) {
|
||||
|
@ -1400,7 +1400,7 @@ items:
|
||||
coreVersion: '12.331'
|
||||
_key: '!actors.items!1Nng9d8r6lrPHCaJ.MxFDPQmm1900bWin'
|
||||
- _id: bNUVmIoLEROEIOIm
|
||||
name: Cuir / Metal
|
||||
name: Cuir / Métal
|
||||
type: armure
|
||||
img: systems/foundryvtt-reve-de-dragon/icons/armes_armures/cuir_metal.webp
|
||||
effects: []
|
||||
|
@ -767,7 +767,7 @@ items:
|
||||
coreVersion: '12.331'
|
||||
_key: '!actors.items!ryUZTa17LzNv25UY.MLIEbxSJHkY1m3No'
|
||||
- _id: F5iQNrZSeJsfyTnV
|
||||
name: Equitation
|
||||
name: Équitation
|
||||
type: competence
|
||||
sort: 2600000
|
||||
flags: {}
|
||||
|
@ -767,7 +767,7 @@ items:
|
||||
coreVersion: '12.331'
|
||||
_key: '!actors.items!ohmz9Jn4jxD88Kll.MLIEbxSJHkY1m3No'
|
||||
- _id: F5iQNrZSeJsfyTnV
|
||||
name: Equitation
|
||||
name: Équitation
|
||||
type: competence
|
||||
sort: 2600000
|
||||
flags: {}
|
||||
|
@ -767,7 +767,7 @@ items:
|
||||
coreVersion: '12.331'
|
||||
_key: '!actors.items!JARnWt2MQWDyRwQt.MLIEbxSJHkY1m3No'
|
||||
- _id: F5iQNrZSeJsfyTnV
|
||||
name: Equitation
|
||||
name: Équitation
|
||||
type: competence
|
||||
sort: 2600000
|
||||
flags: {}
|
||||
|
@ -742,7 +742,7 @@ items:
|
||||
coreVersion: '12.331'
|
||||
_key: '!actors.items!SJb0c8FDcYdd41rB.MLIEbxSJHkY1m3No'
|
||||
- _id: F5iQNrZSeJsfyTnV
|
||||
name: Equitation
|
||||
name: Équitation
|
||||
type: competence
|
||||
sort: 2600000
|
||||
img: systems/foundryvtt-reve-de-dragon/icons/competence_equitation.webp
|
||||
|
@ -767,7 +767,7 @@ items:
|
||||
coreVersion: '12.331'
|
||||
_key: '!actors.items!JQCwAOK64Yijwtch.MLIEbxSJHkY1m3No'
|
||||
- _id: F5iQNrZSeJsfyTnV
|
||||
name: Equitation
|
||||
name: Équitation
|
||||
type: competence
|
||||
sort: 2600000
|
||||
flags: {}
|
||||
@ -2297,7 +2297,7 @@ items:
|
||||
coreVersion: '12.331'
|
||||
_key: '!actors.items!JQCwAOK64Yijwtch.9mOVjXVNdvnf7isr'
|
||||
- _id: ISONFNOaWkW2TaE8
|
||||
name: Cuir / Metal
|
||||
name: Cuir / Métal
|
||||
type: armure
|
||||
sort: 8400000
|
||||
img: systems/foundryvtt-reve-de-dragon/icons/armes_armures/cuir_metal.webp
|
||||
|
@ -767,7 +767,7 @@ items:
|
||||
coreVersion: '12.331'
|
||||
_key: '!actors.items!CRRP8ucJpljX6tq8.MLIEbxSJHkY1m3No'
|
||||
- _id: F5iQNrZSeJsfyTnV
|
||||
name: Equitation
|
||||
name: Équitation
|
||||
type: competence
|
||||
sort: 2600000
|
||||
flags: {}
|
||||
|
@ -767,7 +767,7 @@ items:
|
||||
coreVersion: '12.331'
|
||||
_key: '!actors.items!51vL4MhEE0asjgF2.MLIEbxSJHkY1m3No'
|
||||
- _id: F5iQNrZSeJsfyTnV
|
||||
name: Equitation
|
||||
name: Équitation
|
||||
type: competence
|
||||
sort: 2600000
|
||||
flags: {}
|
||||
|
@ -767,7 +767,7 @@ items:
|
||||
coreVersion: '12.331'
|
||||
_key: '!actors.items!NX1nAqKKIcQlyGua.MLIEbxSJHkY1m3No'
|
||||
- _id: F5iQNrZSeJsfyTnV
|
||||
name: Equitation
|
||||
name: Équitation
|
||||
type: competence
|
||||
sort: 2600000
|
||||
flags: {}
|
||||
|
@ -767,7 +767,7 @@ items:
|
||||
coreVersion: '12.331'
|
||||
_key: '!actors.items!IeKSXignUpfUTU4m.MLIEbxSJHkY1m3No'
|
||||
- _id: F5iQNrZSeJsfyTnV
|
||||
name: Equitation
|
||||
name: Équitation
|
||||
type: competence
|
||||
sort: 2600000
|
||||
flags: {}
|
||||
|
@ -767,7 +767,7 @@ items:
|
||||
coreVersion: '12.331'
|
||||
_key: '!actors.items!2bRaEDuwZezKAyEq.MLIEbxSJHkY1m3No'
|
||||
- _id: F5iQNrZSeJsfyTnV
|
||||
name: Equitation
|
||||
name: Équitation
|
||||
type: competence
|
||||
sort: 2600000
|
||||
flags: {}
|
||||
|
@ -743,7 +743,7 @@ items:
|
||||
coreVersion: '12.331'
|
||||
_key: '!actors.items!pSM0ku0RJNLvHSvF.MLIEbxSJHkY1m3No'
|
||||
- _id: F5iQNrZSeJsfyTnV
|
||||
name: Equitation
|
||||
name: Équitation
|
||||
type: competence
|
||||
sort: 2600000
|
||||
img: systems/foundryvtt-reve-de-dragon/icons/competence_equitation.webp
|
||||
|
@ -743,7 +743,7 @@ items:
|
||||
coreVersion: '12.331'
|
||||
_key: '!actors.items!5xPFHgrY5AIP9Mnb.MLIEbxSJHkY1m3No'
|
||||
- _id: F5iQNrZSeJsfyTnV
|
||||
name: Equitation
|
||||
name: Équitation
|
||||
type: competence
|
||||
sort: 2600000
|
||||
img: systems/foundryvtt-reve-de-dragon/icons/competence_equitation.webp
|
||||
|
@ -767,7 +767,7 @@ items:
|
||||
coreVersion: '12.331'
|
||||
_key: '!actors.items!U9NNcXQBJmsI9Ttk.MLIEbxSJHkY1m3No'
|
||||
- _id: F5iQNrZSeJsfyTnV
|
||||
name: Equitation
|
||||
name: Équitation
|
||||
type: competence
|
||||
sort: 2600000
|
||||
flags: {}
|
||||
|
@ -742,7 +742,7 @@ items:
|
||||
coreVersion: '12.331'
|
||||
_key: '!actors.items!oLDROOdwfctyRusH.MLIEbxSJHkY1m3No'
|
||||
- _id: F5iQNrZSeJsfyTnV
|
||||
name: Equitation
|
||||
name: Équitation
|
||||
type: competence
|
||||
sort: 2600000
|
||||
img: systems/foundryvtt-reve-de-dragon/icons/competence_equitation.webp
|
||||
|
@ -742,7 +742,7 @@ items:
|
||||
coreVersion: '12.331'
|
||||
_key: '!actors.items!2KN3nKGZ36Qkn7Mf.MLIEbxSJHkY1m3No'
|
||||
- _id: F5iQNrZSeJsfyTnV
|
||||
name: Equitation
|
||||
name: Équitation
|
||||
type: competence
|
||||
sort: 2600000
|
||||
img: systems/foundryvtt-reve-de-dragon/icons/competence_equitation.webp
|
||||
|
@ -768,7 +768,7 @@ items:
|
||||
coreVersion: '12.331'
|
||||
_key: '!actors.items!V2WOs8deCYdBT2Jo.MLIEbxSJHkY1m3No'
|
||||
- _id: F5iQNrZSeJsfyTnV
|
||||
name: Equitation
|
||||
name: Équitation
|
||||
type: competence
|
||||
sort: 2600000
|
||||
flags: {}
|
||||
|
@ -768,7 +768,7 @@ items:
|
||||
coreVersion: '12.331'
|
||||
_key: '!actors.items!UNs4RBLYiGbfxd1c.MLIEbxSJHkY1m3No'
|
||||
- _id: F5iQNrZSeJsfyTnV
|
||||
name: Equitation
|
||||
name: Équitation
|
||||
type: competence
|
||||
sort: 1050000
|
||||
flags: {}
|
||||
|
@ -768,7 +768,7 @@ items:
|
||||
coreVersion: '12.331'
|
||||
_key: '!actors.items!jfXs7qaHEWQpIHud.MLIEbxSJHkY1m3No'
|
||||
- _id: F5iQNrZSeJsfyTnV
|
||||
name: Equitation
|
||||
name: Équitation
|
||||
type: competence
|
||||
sort: 1050000
|
||||
flags: {}
|
||||
|
@ -767,7 +767,7 @@ items:
|
||||
coreVersion: '12.331'
|
||||
_key: '!actors.items!awZg7bGbTjEGRMiw.MLIEbxSJHkY1m3No'
|
||||
- _id: F5iQNrZSeJsfyTnV
|
||||
name: Equitation
|
||||
name: Équitation
|
||||
type: competence
|
||||
sort: 2600000
|
||||
flags: {}
|
||||
|
@ -767,7 +767,7 @@ items:
|
||||
coreVersion: '12.331'
|
||||
_key: '!actors.items!dMdBctaRRdGJgced.MLIEbxSJHkY1m3No'
|
||||
- _id: F5iQNrZSeJsfyTnV
|
||||
name: Equitation
|
||||
name: Équitation
|
||||
type: competence
|
||||
sort: 2600000
|
||||
flags: {}
|
||||
|
@ -1,4 +1,4 @@
|
||||
name: Equitation
|
||||
name: Équitation
|
||||
type: competence
|
||||
img: systems/foundryvtt-reve-de-dragon/icons/competence_equitation.webp
|
||||
_id: F5iQNrZSeJsfyTnV
|
||||
|
@ -1,4 +1,4 @@
|
||||
name: Voie d'Hypnos
|
||||
name: Hypnos
|
||||
type: competence
|
||||
img: systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp
|
||||
_id: bt2cR4aE6lIOeg4F
|
@ -1,4 +1,4 @@
|
||||
name: Voie de Narcos
|
||||
name: Narcos
|
||||
type: competence
|
||||
img: systems/foundryvtt-reve-de-dragon/icons/competence_narcos.webp
|
||||
_id: u1Peok1EYkBcVsmN
|
@ -1,4 +1,4 @@
|
||||
name: Voie d'Oniros
|
||||
name: Oniros
|
||||
type: competence
|
||||
img: systems/foundryvtt-reve-de-dragon/icons/competence_oniros.webp
|
||||
_id: nnR2UHelUaF8dxYn
|
@ -1,4 +1,4 @@
|
||||
name: Voie de Thanatos
|
||||
name: Thanatos
|
||||
type: competence
|
||||
img: systems/foundryvtt-reve-de-dragon/icons/competence_thanatos.webp
|
||||
_id: dPlTQzvU3CEg5qKc
|
@ -4,98 +4,6 @@ type: entite
|
||||
sort: 100001
|
||||
img: systems/foundryvtt-reve-de-dragon/icons/entites/squelette.webp
|
||||
items:
|
||||
- _id: QNJH22nturvz1CnL
|
||||
name: Épée à 2 mains
|
||||
type: competence
|
||||
sort: 100000
|
||||
img: systems/foundryvtt-reve-de-dragon/icons/competence_epee_2_mains.webp
|
||||
effects: []
|
||||
system:
|
||||
description: >-
|
||||
<p>Ces compétences permettent l’utilisation des sept types d’épées de
|
||||
Rêve de Dragon pour attaquer ou parer.</p>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p> </p>
|
||||
descriptionmj: ''
|
||||
niveau: -6
|
||||
default_diffLibre: 0
|
||||
base: -6
|
||||
categorie: melee
|
||||
xp: 0
|
||||
defaut_carac: melee
|
||||
niveau_archetype: 0
|
||||
xp_sort: 0
|
||||
folder: null
|
||||
ownership:
|
||||
default: 0
|
||||
_stats:
|
||||
systemId: foundryvtt-reve-de-dragon
|
||||
systemVersion: 12.0.22
|
||||
coreVersion: '12.331'
|
||||
_key: '!actors.items!Fl95F6S0OrCbqQbY.QNJH22nturvz1CnL'
|
||||
- _id: 9rHJziIIEQlwezim
|
||||
name: Épée à 2 mains
|
||||
type: competence
|
||||
sort: 200000
|
||||
img: systems/foundryvtt-reve-de-dragon/icons/competence_epee_2_mains.webp
|
||||
effects: []
|
||||
system:
|
||||
description: >-
|
||||
<p>Ces compétences permettent l’utilisation des sept types d’épées de
|
||||
Rêve de Dragon pour attaquer ou parer.</p>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p> </p>
|
||||
descriptionmj: ''
|
||||
niveau: -6
|
||||
default_diffLibre: 0
|
||||
base: -6
|
||||
categorie: melee
|
||||
xp: 0
|
||||
defaut_carac: melee
|
||||
niveau_archetype: 0
|
||||
xp_sort: 0
|
||||
folder: null
|
||||
ownership:
|
||||
default: 0
|
||||
_stats:
|
||||
systemId: foundryvtt-reve-de-dragon
|
||||
systemVersion: 12.0.22
|
||||
coreVersion: '12.331'
|
||||
_key: '!actors.items!Fl95F6S0OrCbqQbY.9rHJziIIEQlwezim'
|
||||
- _id: ltZQyOyxJdWsIkpK
|
||||
name: Equitation
|
||||
type: competence
|
||||
sort: 300000
|
||||
img: systems/foundryvtt-reve-de-dragon/icons/competence_equitation.webp
|
||||
effects: []
|
||||
system:
|
||||
description: >-
|
||||
<p>Monter à cheval, et, d’une manière générale, connaissance des
|
||||
chevaux. Peut s’appliquer aux autres montures de Rêve de Dragon :
|
||||
aligates, zyglutes, etc.</p>
|
||||
|
||||
<p> </p>
|
||||
descriptionmj: ''
|
||||
niveau: -8
|
||||
default_diffLibre: 0
|
||||
base: -8
|
||||
categorie: particuliere
|
||||
xp: 0
|
||||
defaut_carac: agilite
|
||||
niveau_archetype: 0
|
||||
xp_sort: 0
|
||||
folder: null
|
||||
ownership:
|
||||
default: 0
|
||||
_stats:
|
||||
systemId: foundryvtt-reve-de-dragon
|
||||
systemVersion: 12.0.22
|
||||
coreVersion: '12.331'
|
||||
_key: '!actors.items!Fl95F6S0OrCbqQbY.ltZQyOyxJdWsIkpK'
|
||||
- _id: iwfr7ekbLFzDCayP
|
||||
name: Esquive
|
||||
type: competencecreature
|
||||
|
@ -4,98 +4,6 @@ type: entite
|
||||
sort: 100001
|
||||
img: systems/foundryvtt-reve-de-dragon/icons/entites/vaseux.webp
|
||||
items:
|
||||
- _id: QNJH22nturvz1CnL
|
||||
name: Épée à 2 mains
|
||||
type: competence
|
||||
sort: 100000
|
||||
img: systems/foundryvtt-reve-de-dragon/icons/competence_epee_2_mains.webp
|
||||
effects: []
|
||||
system:
|
||||
description: >-
|
||||
<p>Ces compétences permettent l’utilisation des sept types d’épées de
|
||||
Rêve de Dragon pour attaquer ou parer.</p>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p> </p>
|
||||
descriptionmj: ''
|
||||
niveau: -6
|
||||
default_diffLibre: 0
|
||||
base: -6
|
||||
categorie: melee
|
||||
xp: 0
|
||||
defaut_carac: melee
|
||||
niveau_archetype: 0
|
||||
xp_sort: 0
|
||||
folder: null
|
||||
ownership:
|
||||
default: 0
|
||||
_stats:
|
||||
systemId: foundryvtt-reve-de-dragon
|
||||
systemVersion: 12.0.22
|
||||
coreVersion: '12.331'
|
||||
_key: '!actors.items!cmWQYuyzVsz02NMt.QNJH22nturvz1CnL'
|
||||
- _id: 9rHJziIIEQlwezim
|
||||
name: Épée à 2 mains
|
||||
type: competence
|
||||
sort: 200000
|
||||
img: systems/foundryvtt-reve-de-dragon/icons/competence_epee_2_mains.webp
|
||||
effects: []
|
||||
system:
|
||||
description: >-
|
||||
<p>Ces compétences permettent l’utilisation des sept types d’épées de
|
||||
Rêve de Dragon pour attaquer ou parer.</p>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p> </p>
|
||||
descriptionmj: ''
|
||||
niveau: -6
|
||||
default_diffLibre: 0
|
||||
base: -6
|
||||
categorie: melee
|
||||
xp: 0
|
||||
defaut_carac: melee
|
||||
niveau_archetype: 0
|
||||
xp_sort: 0
|
||||
folder: null
|
||||
ownership:
|
||||
default: 0
|
||||
_stats:
|
||||
systemId: foundryvtt-reve-de-dragon
|
||||
systemVersion: 12.0.22
|
||||
coreVersion: '12.331'
|
||||
_key: '!actors.items!cmWQYuyzVsz02NMt.9rHJziIIEQlwezim'
|
||||
- _id: ltZQyOyxJdWsIkpK
|
||||
name: Equitation
|
||||
type: competence
|
||||
sort: 300000
|
||||
img: systems/foundryvtt-reve-de-dragon/icons/competence_equitation.webp
|
||||
effects: []
|
||||
system:
|
||||
description: >-
|
||||
<p>Monter à cheval, et, d’une manière générale, connaissance des
|
||||
chevaux. Peut s’appliquer aux autres montures de Rêve de Dragon :
|
||||
aligates, zyglutes, etc.</p>
|
||||
|
||||
<p> </p>
|
||||
descriptionmj: ''
|
||||
niveau: -8
|
||||
default_diffLibre: 0
|
||||
base: -8
|
||||
categorie: particuliere
|
||||
xp: 0
|
||||
defaut_carac: agilite
|
||||
niveau_archetype: 0
|
||||
xp_sort: 0
|
||||
folder: null
|
||||
ownership:
|
||||
default: 0
|
||||
_stats:
|
||||
systemId: foundryvtt-reve-de-dragon
|
||||
systemVersion: 12.0.22
|
||||
coreVersion: '12.331'
|
||||
_key: '!actors.items!cmWQYuyzVsz02NMt.ltZQyOyxJdWsIkpK'
|
||||
- _id: NDwCYUzJVRIUFc77
|
||||
name: Tentacules
|
||||
type: competencecreature
|
||||
|
@ -1,5 +1,5 @@
|
||||
_id: fDwsTMuug0Z5BdaA
|
||||
name: Cuir / Metal
|
||||
name: Cuir / Métal
|
||||
type: armure
|
||||
img: systems/foundryvtt-reve-de-dragon/icons/armes_armures/cuir_metal.webp
|
||||
effects: []
|
||||
|
@ -742,7 +742,7 @@ items:
|
||||
coreVersion: '12.331'
|
||||
_key: '!actors.items!qscItDC5z6Hr2Lrh.MLIEbxSJHkY1m3No'
|
||||
- _id: F5iQNrZSeJsfyTnV
|
||||
name: Equitation
|
||||
name: Équitation
|
||||
type: competence
|
||||
sort: 2600000
|
||||
img: systems/foundryvtt-reve-de-dragon/icons/competence_equitation.webp
|
||||
|
@ -741,7 +741,7 @@ items:
|
||||
coreVersion: '12.331'
|
||||
_key: '!actors.items!zACge7QxwyJkC6nD.MLIEbxSJHkY1m3No'
|
||||
- _id: F5iQNrZSeJsfyTnV
|
||||
name: Equitation
|
||||
name: Équitation
|
||||
type: competence
|
||||
sort: 2700000
|
||||
img: systems/foundryvtt-reve-de-dragon/icons/competence_equitation.webp
|
||||
|
@ -742,7 +742,7 @@ items:
|
||||
coreVersion: '12.331'
|
||||
_key: '!actors.items!esJWonwDGLFaMRK3.MLIEbxSJHkY1m3No'
|
||||
- _id: F5iQNrZSeJsfyTnV
|
||||
name: Equitation
|
||||
name: Équitation
|
||||
type: competence
|
||||
sort: 2600000
|
||||
img: systems/foundryvtt-reve-de-dragon/icons/competence_equitation.webp
|
||||
|
@ -742,7 +742,7 @@ items:
|
||||
coreVersion: '12.331'
|
||||
_key: '!actors.items!gscYFtwk73WrGvA5.MLIEbxSJHkY1m3No'
|
||||
- _id: F5iQNrZSeJsfyTnV
|
||||
name: Equitation
|
||||
name: Équitation
|
||||
type: competence
|
||||
sort: 2600000
|
||||
img: systems/foundryvtt-reve-de-dragon/icons/competence_equitation.webp
|
||||
|
@ -742,7 +742,7 @@ items:
|
||||
coreVersion: '12.331'
|
||||
_key: '!actors.items!dW4RMKpz2WaXbW3h.MLIEbxSJHkY1m3No'
|
||||
- _id: F5iQNrZSeJsfyTnV
|
||||
name: Equitation
|
||||
name: Équitation
|
||||
type: competence
|
||||
sort: 2600000
|
||||
img: systems/foundryvtt-reve-de-dragon/icons/competence_equitation.webp
|
||||
|
@ -742,7 +742,7 @@ items:
|
||||
coreVersion: '12.331'
|
||||
_key: '!actors.items!ncXFs8oaZWG68Tzn.MLIEbxSJHkY1m3No'
|
||||
- _id: F5iQNrZSeJsfyTnV
|
||||
name: Equitation
|
||||
name: Équitation
|
||||
type: competence
|
||||
sort: 2600000
|
||||
img: systems/foundryvtt-reve-de-dragon/icons/competence_equitation.webp
|
||||
|
@ -742,7 +742,7 @@ items:
|
||||
coreVersion: '12.331'
|
||||
_key: '!actors.items!OKMXH6YpPXUyvqzN.MLIEbxSJHkY1m3No'
|
||||
- _id: F5iQNrZSeJsfyTnV
|
||||
name: Equitation
|
||||
name: Équitation
|
||||
type: competence
|
||||
sort: 2600000
|
||||
img: systems/foundryvtt-reve-de-dragon/icons/competence_equitation.webp
|
||||
|
@ -742,7 +742,7 @@ items:
|
||||
coreVersion: '12.331'
|
||||
_key: '!actors.items!EzV1Zxuwi7jwa6bj.MLIEbxSJHkY1m3No'
|
||||
- _id: F5iQNrZSeJsfyTnV
|
||||
name: Equitation
|
||||
name: Équitation
|
||||
type: competence
|
||||
sort: 2600000
|
||||
img: systems/foundryvtt-reve-de-dragon/icons/competence_equitation.webp
|
||||
|
@ -742,7 +742,7 @@ items:
|
||||
coreVersion: '12.331'
|
||||
_key: '!actors.items!YQ6vavAVyZecPvGQ.MLIEbxSJHkY1m3No'
|
||||
- _id: F5iQNrZSeJsfyTnV
|
||||
name: Equitation
|
||||
name: Équitation
|
||||
type: competence
|
||||
sort: 2600000
|
||||
img: systems/foundryvtt-reve-de-dragon/icons/competence_equitation.webp
|
||||
|
@ -742,7 +742,7 @@ items:
|
||||
coreVersion: '12.331'
|
||||
_key: '!actors.items!b7ThiitioBVXxU7D.MLIEbxSJHkY1m3No'
|
||||
- _id: F5iQNrZSeJsfyTnV
|
||||
name: Equitation
|
||||
name: Équitation
|
||||
type: competence
|
||||
sort: 2600000
|
||||
img: systems/foundryvtt-reve-de-dragon/icons/competence_equitation.webp
|
||||
|
@ -742,7 +742,7 @@ items:
|
||||
coreVersion: '12.331'
|
||||
_key: '!actors.items!XnBXyRyE2BUVVT1k.MLIEbxSJHkY1m3No'
|
||||
- _id: F5iQNrZSeJsfyTnV
|
||||
name: Equitation
|
||||
name: Équitation
|
||||
type: competence
|
||||
sort: 2600000
|
||||
img: systems/foundryvtt-reve-de-dragon/icons/competence_equitation.webp
|
||||
|
@ -742,7 +742,7 @@ items:
|
||||
coreVersion: '12.331'
|
||||
_key: '!actors.items!kKI9izKrKftYVnvs.MLIEbxSJHkY1m3No'
|
||||
- _id: F5iQNrZSeJsfyTnV
|
||||
name: Equitation
|
||||
name: Équitation
|
||||
type: competence
|
||||
sort: 2600000
|
||||
img: systems/foundryvtt-reve-de-dragon/icons/competence_equitation.webp
|
||||
|
@ -742,7 +742,7 @@ items:
|
||||
coreVersion: '12.331'
|
||||
_key: '!actors.items!nzw2q9BHSDN6TIQQ.MLIEbxSJHkY1m3No'
|
||||
- _id: F5iQNrZSeJsfyTnV
|
||||
name: Equitation
|
||||
name: Équitation
|
||||
type: competence
|
||||
sort: 2600000
|
||||
img: systems/foundryvtt-reve-de-dragon/icons/competence_equitation.webp
|
||||
|
@ -742,7 +742,7 @@ items:
|
||||
coreVersion: '12.331'
|
||||
_key: '!actors.items!Pf4cLn0kandYzviD.MLIEbxSJHkY1m3No'
|
||||
- _id: F5iQNrZSeJsfyTnV
|
||||
name: Equitation
|
||||
name: Équitation
|
||||
type: competence
|
||||
sort: 2600000
|
||||
img: systems/foundryvtt-reve-de-dragon/icons/competence_equitation.webp
|
||||
|
@ -768,7 +768,7 @@ items:
|
||||
coreVersion: '12.331'
|
||||
_key: '!actors.items!xGtM3z3KM6N6lpd5.MLIEbxSJHkY1m3No'
|
||||
- _id: F5iQNrZSeJsfyTnV
|
||||
name: Equitation
|
||||
name: Équitation
|
||||
type: competence
|
||||
flags: {}
|
||||
img: systems/foundryvtt-reve-de-dragon/icons/competence_equitation.webp
|
||||
|
@ -743,7 +743,7 @@ items:
|
||||
coreVersion: '12.331'
|
||||
_key: '!actors.items!z87rV5CJ3inc6ZPc.MLIEbxSJHkY1m3No'
|
||||
- _id: F5iQNrZSeJsfyTnV
|
||||
name: Equitation
|
||||
name: Équitation
|
||||
type: competence
|
||||
sort: 2600000
|
||||
img: systems/foundryvtt-reve-de-dragon/icons/competence_equitation.webp
|
||||
|
@ -743,7 +743,7 @@ items:
|
||||
coreVersion: '12.331'
|
||||
_key: '!actors.items!I8Q3Aj4ZUrsU4yBg.MLIEbxSJHkY1m3No'
|
||||
- _id: F5iQNrZSeJsfyTnV
|
||||
name: Equitation
|
||||
name: Équitation
|
||||
type: competence
|
||||
sort: 2600000
|
||||
img: systems/foundryvtt-reve-de-dragon/icons/competence_equitation.webp
|
||||
|
@ -742,7 +742,7 @@ items:
|
||||
coreVersion: '12.331'
|
||||
_key: '!actors.items!kB7OSWKvd6m9v0dB.MLIEbxSJHkY1m3No'
|
||||
- _id: F5iQNrZSeJsfyTnV
|
||||
name: Equitation
|
||||
name: Équitation
|
||||
type: competence
|
||||
sort: 2600000
|
||||
img: systems/foundryvtt-reve-de-dragon/icons/competence_equitation.webp
|
||||
|
@ -814,7 +814,7 @@ pages:
|
||||
Epais}</td><td style="width:25%;height:10px">2</td><td
|
||||
style="width:15%;height:10px">10s</td></tr><tr style="height:10px"><td
|
||||
style="width:60%;height:10px">@Compendium[foundryvtt-reve-de-dragon.equipement.fDwsTMuug0Z5BdaA]{Cuir
|
||||
/ Metal}</td><td style="width:25%;height:10px">4</td><td
|
||||
/ Métal}</td><td style="width:25%;height:10px">4</td><td
|
||||
style="width:15%;height:10px">20s</td></tr><tr style="height:10px"><td
|
||||
style="width:60%;height:10px">@Compendium[foundryvtt-reve-de-dragon.equipement.KQZIK8ltQ3sQiDGe]{Mailles
|
||||
de Fer}</td><td style="width:25%;height:10px">6</td><td
|
||||
|
@ -743,7 +743,7 @@ items:
|
||||
coreVersion: '12.331'
|
||||
_key: '!actors.items!GJWEoGXy5kSd4sT8.MLIEbxSJHkY1m3No'
|
||||
- _id: F5iQNrZSeJsfyTnV
|
||||
name: Equitation
|
||||
name: Équitation
|
||||
type: competence
|
||||
sort: 2600000
|
||||
img: systems/foundryvtt-reve-de-dragon/icons/competence_equitation.webp
|
||||
|
@ -743,7 +743,7 @@ items:
|
||||
coreVersion: '12.331'
|
||||
_key: '!actors.items!m63oPEPvCrds4akp.MLIEbxSJHkY1m3No'
|
||||
- _id: F5iQNrZSeJsfyTnV
|
||||
name: Equitation
|
||||
name: Équitation
|
||||
type: competence
|
||||
sort: 2600000
|
||||
img: systems/foundryvtt-reve-de-dragon/icons/competence_equitation.webp
|
||||
|
@ -743,7 +743,7 @@ items:
|
||||
coreVersion: '12.331'
|
||||
_key: '!actors.items!jtJqqegMrF3fuND3.MLIEbxSJHkY1m3No'
|
||||
- _id: F5iQNrZSeJsfyTnV
|
||||
name: Equitation
|
||||
name: Équitation
|
||||
type: competence
|
||||
sort: 2600000
|
||||
img: systems/foundryvtt-reve-de-dragon/icons/competence_equitation.webp
|
||||
|
@ -743,7 +743,7 @@ items:
|
||||
coreVersion: '12.331'
|
||||
_key: '!actors.items!8Jeas59CdpnnYabL.MLIEbxSJHkY1m3No'
|
||||
- _id: F5iQNrZSeJsfyTnV
|
||||
name: Equitation
|
||||
name: Équitation
|
||||
type: competence
|
||||
sort: 2600000
|
||||
img: systems/foundryvtt-reve-de-dragon/icons/competence_equitation.webp
|
||||
|
@ -743,7 +743,7 @@ items:
|
||||
coreVersion: '12.331'
|
||||
_key: '!actors.items!7WgNJwO7p5QNraXA.MLIEbxSJHkY1m3No'
|
||||
- _id: F5iQNrZSeJsfyTnV
|
||||
name: Equitation
|
||||
name: Équitation
|
||||
type: competence
|
||||
sort: 2600000
|
||||
img: systems/foundryvtt-reve-de-dragon/icons/competence_equitation.webp
|
||||
|
@ -742,7 +742,7 @@ items:
|
||||
coreVersion: '12.331'
|
||||
_key: '!actors.items!N5ybrpVwbpL8aPG0.MLIEbxSJHkY1m3No'
|
||||
- _id: F5iQNrZSeJsfyTnV
|
||||
name: Equitation
|
||||
name: Équitation
|
||||
type: competence
|
||||
img: systems/foundryvtt-reve-de-dragon/icons/competence_equitation.webp
|
||||
effects: []
|
||||
|
@ -742,7 +742,7 @@ items:
|
||||
coreVersion: '12.331'
|
||||
_key: '!actors.items!X9d5McdSAT1Ivp39.MLIEbxSJHkY1m3No'
|
||||
- _id: F5iQNrZSeJsfyTnV
|
||||
name: Equitation
|
||||
name: Équitation
|
||||
type: competence
|
||||
img: systems/foundryvtt-reve-de-dragon/icons/competence_equitation.webp
|
||||
effects: []
|
||||
|
@ -743,7 +743,7 @@ items:
|
||||
coreVersion: '12.331'
|
||||
_key: '!actors.items!hvNej1XRliayVZu1.MLIEbxSJHkY1m3No'
|
||||
- _id: F5iQNrZSeJsfyTnV
|
||||
name: Equitation
|
||||
name: Équitation
|
||||
type: competence
|
||||
sort: 2600000
|
||||
img: systems/foundryvtt-reve-de-dragon/icons/competence_equitation.webp
|
||||
|
@ -743,7 +743,7 @@ items:
|
||||
coreVersion: '12.331'
|
||||
_key: '!actors.items!4bI9HX4oomMEXrOT.MLIEbxSJHkY1m3No'
|
||||
- _id: F5iQNrZSeJsfyTnV
|
||||
name: Equitation
|
||||
name: Équitation
|
||||
type: competence
|
||||
sort: 2600000
|
||||
img: systems/foundryvtt-reve-de-dragon/icons/competence_equitation.webp
|
||||
|
@ -743,7 +743,7 @@ items:
|
||||
coreVersion: '12.331'
|
||||
_key: '!actors.items!AZBxORb7IYgXaOfb.MLIEbxSJHkY1m3No'
|
||||
- _id: F5iQNrZSeJsfyTnV
|
||||
name: Equitation
|
||||
name: Équitation
|
||||
type: competence
|
||||
sort: 2600000
|
||||
img: systems/foundryvtt-reve-de-dragon/icons/competence_equitation.webp
|
||||
|
@ -743,7 +743,7 @@ items:
|
||||
coreVersion: '12.331'
|
||||
_key: '!actors.items!OOIjBdFjCKdgJKff.MLIEbxSJHkY1m3No'
|
||||
- _id: F5iQNrZSeJsfyTnV
|
||||
name: Equitation
|
||||
name: Équitation
|
||||
type: competence
|
||||
sort: 2600000
|
||||
img: systems/foundryvtt-reve-de-dragon/icons/competence_equitation.webp
|
||||
|
@ -743,7 +743,7 @@ items:
|
||||
coreVersion: '12.331'
|
||||
_key: '!actors.items!Jas7Wr22jSllfkin.MLIEbxSJHkY1m3No'
|
||||
- _id: F5iQNrZSeJsfyTnV
|
||||
name: Equitation
|
||||
name: Équitation
|
||||
type: competence
|
||||
sort: 2600000
|
||||
img: systems/foundryvtt-reve-de-dragon/icons/competence_equitation.webp
|
||||
|
@ -1,9 +1,9 @@
|
||||
{
|
||||
"id": "foundryvtt-reve-de-dragon",
|
||||
"title": "Rêve de Dragon",
|
||||
"version": "12.0.24",
|
||||
"download": "https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/releases/download/12.0.24/rddsystem.zip",
|
||||
"manifest": "https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/releases/download//12.0.24/system.json",
|
||||
"version": "12.0.26",
|
||||
"download": "https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/releases/download/12.0.26/rddsystem.zip",
|
||||
"manifest": "https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/releases/download/12.0.26/system.json",
|
||||
"changelog": "https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/raw/branch/v11/changelog.md",
|
||||
"compatibility": {
|
||||
"minimum": "11",
|
||||
|
@ -112,7 +112,7 @@
|
||||
"type": "string",
|
||||
"value": 0,
|
||||
"label": "Vitesse",
|
||||
"derivee": true
|
||||
"derivee": false
|
||||
},
|
||||
"protection": {
|
||||
"type": "number",
|
||||
@ -195,13 +195,13 @@
|
||||
"type": "string",
|
||||
"value": 0,
|
||||
"label": "Vitesse",
|
||||
"derivee": true
|
||||
"derivee": false
|
||||
},
|
||||
"encombrement": {
|
||||
"type": "number",
|
||||
"value": 0,
|
||||
"label": "Encombrement",
|
||||
"derivee": false
|
||||
"derivee": true
|
||||
},
|
||||
"protection": {
|
||||
"type": "number",
|
||||
@ -459,7 +459,7 @@
|
||||
"chance": {
|
||||
"value": 0,
|
||||
"max": 0,
|
||||
"label": "Chance",
|
||||
"label": "Chance actuelle",
|
||||
"isInput": true
|
||||
},
|
||||
"destinee": {
|
||||
|
@ -129,11 +129,10 @@
|
||||
<div>
|
||||
{{#if system.attributs.hautrevant.value}}
|
||||
<h3>Haut rêvant</h3>
|
||||
{{> "systems/foundryvtt-reve-de-dragon/templates/actor/haut-revant.html"}}
|
||||
{{> "systems/foundryvtt-reve-de-dragon/templates/actor/haut-revant.hbs"}}
|
||||
{{else}}
|
||||
<h3>Vous n'avez pas le don de haut-rêve</h3>
|
||||
<p>Attribuer la Tête de Dragon 'Don de Haut Rêve' pour rendre le personnage Haut-Rêvant.</p>
|
||||
{{> "systems/foundryvtt-reve-de-dragon/templates/actor/non-haut-revant.html"}}
|
||||
{{> "systems/foundryvtt-reve-de-dragon/templates/actor/non-haut-revant.hbs"}}
|
||||
{{/if}}
|
||||
<br><br>
|
||||
</div>
|
||||
|
25
templates/actor/armures.hbs
Normal file
25
templates/actor/armures.hbs
Normal file
@ -0,0 +1,25 @@
|
||||
{{#if armures}}
|
||||
{{#each armures as |armure|}}
|
||||
<li class="caracteristique item flexrow list-item" data-item-id="{{armure.id}}">
|
||||
<span class="flex-grow">
|
||||
<img class="sheet-competence-img subacteur-open" src="{{armure.img}}" data-tooltip="{{armure.name}}"/>
|
||||
<a class="item-equip" data-tooltip="Equiper">{{#if armure.system.equipe}}<i class="fas fa-hand-rock"></i>{{else}}<i class="far fa-hand-paper"></i>{{/if}}</a>
|
||||
<a>{{armure.name}}</a>
|
||||
{{#if armure.system.malus}}
|
||||
<span class="derivee-value">({{armure.system.malus}})</span>
|
||||
{{/if}}
|
||||
</span>
|
||||
<input class="derivee-value" type="text" disabled value="{{armure.system.protection}}"/>
|
||||
</li>
|
||||
{{/each}}
|
||||
{{/if}}
|
||||
{{#if (or options.isGM (gt system.attributs.protection.value 0))}}
|
||||
<li class="caracteristique flexrow list-item">
|
||||
<label for="system.attributs.protection.value" >Protection naturelle</label>
|
||||
<input class="derivee-value" type="number" {{#unless options.isGM}}disabled{{/unless}} name="system.attributs.protection.value" value="{{system.attributs.protection.value}}" data-dtype="number"/>
|
||||
</li>
|
||||
{{/if}}
|
||||
<li class="caracteristique flexrow list-item" >
|
||||
<label class="derivee-label">Malus armure</label>
|
||||
<input class="derivee-value" type="number" disabled value="{{calc.malusArmure}}" data-dtype="number"/>
|
||||
</li>
|
@ -1,8 +1,21 @@
|
||||
<ol class="carac-list alterne-list">
|
||||
{{#each system.attributs as |attr key|}}
|
||||
<li class="caracteristique flexrow list-item" data-attribute="{{key}}">
|
||||
<span class="carac-label" name="system.attributs.{{key}}.label">{{attr.label}}</span>
|
||||
<input class="caracteristique streched" type="text" name="system.attributs.{{key}}.value" value="{{attr.value}}" data-dtype="{{attr.type}}" {{#unless @root.options.vueDetaillee}}disabled{{/unless}}/>
|
||||
</li>
|
||||
{{#if (and (eq key 'plusdom') (eq @root.system.definition.typeentite 'nonincarne'))}}
|
||||
{{else}}
|
||||
<li class="caracteristique flexrow list-item" data-attribute="{{key}}">
|
||||
<span class="carac-label" name="system.attributs.{{key}}.label">{{attr.label}}</span>
|
||||
{{#if (actor-default @root.type 'attributs' key 'derivee')}}
|
||||
<input class="caracteristique streched" type="text" name="system.attributs.{{key}}.value"
|
||||
{{#if (eq key 'plusdom')}}
|
||||
value="{{numberFormat attr.value decimals=0 sign=true}}"
|
||||
{{else}}
|
||||
value="{{attr.value}}"
|
||||
{{/if}}
|
||||
data-dtype="{{attr.type}}" disabled/>
|
||||
{{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}}/>
|
||||
{{/if}}
|
||||
</li>
|
||||
{{/if}}
|
||||
{{/each}}
|
||||
</ol>
|
||||
|
@ -5,15 +5,23 @@
|
||||
<label class="derivee-value"></label>
|
||||
</li>
|
||||
<br>
|
||||
<li class="caracteristique flexrow list-item">
|
||||
<label class="flexrow derivee-label">{{system.compteurs.stress.label}}
|
||||
<a class="stress-test" data-tooltip="Transformer le stress"><i class="fa-regular fa-moon"></i></a>
|
||||
</label>
|
||||
<input class="derivee-value" type="number" name="system.compteurs.stress.value" value="{{system.compteurs.stress.value}}" data-dtype="number"/>
|
||||
{{>"systems/foundryvtt-reve-de-dragon/templates/actor/armures.hbs"}}
|
||||
<br>
|
||||
<li class="caracteristique flexrow list-item" >
|
||||
<label class="derivee-label">Seuil enc.</label>
|
||||
<input class="derivee-value" type="number" disabled value="{{system.attributs.encombrement.value}}"/>
|
||||
</li>
|
||||
<li class="caracteristique flexrow list-item" >
|
||||
<label class="derivee-label">Bonus dom.</label>
|
||||
<input class="derivee-value" type="text" disabled value="{{plusMoins system.attributs.plusdom.value}}"/>
|
||||
</li>
|
||||
<li class="caracteristique flexrow list-item" >
|
||||
<label class="derivee-label" name="system.attributs.sconst.label">{{system.attributs.sconst.label}}</label>
|
||||
<input class="derivee-value" type="number" disabled value="{{system.attributs.sconst.value}}"/>
|
||||
</li>
|
||||
<br>
|
||||
<li class="caracteristique flexrow list-item">
|
||||
<label class="derivee-label">{{system.compteurs.moral.label}}
|
||||
|
||||
<span>
|
||||
<a class="flex-shrink moral-malheureux" data-tooltip="Jet de moral situation malheureuse"><i class="fa-regular fa-face-frown"></i></a>
|
||||
<a class="flex-shrink moral-neutre" data-tooltip="Jet de moral situation neutre"><i class="fa-regular fa-face-meh"></i></a>
|
||||
@ -38,6 +46,12 @@
|
||||
<label class="derivee-label">voyage</label>
|
||||
<input class="derivee-value" type="number" name="system.compteurs.voyage.value" value="{{system.compteurs.voyage.value}}" data-dtype="number"/>
|
||||
</li>
|
||||
<li class="caracteristique flexrow list-item">
|
||||
<label class="flexrow derivee-label">{{system.compteurs.stress.label}}
|
||||
<a class="stress-test" data-tooltip="Transformer le stress"><i class="fa-regular fa-moon"></i></a>
|
||||
</label>
|
||||
<input class="derivee-value" type="number" name="system.compteurs.stress.value" value="{{system.compteurs.stress.value}}" data-dtype="number"/>
|
||||
</li>
|
||||
|
||||
<br>
|
||||
<li class="caracteristique flexrow list-item">
|
||||
@ -45,40 +59,18 @@
|
||||
<input class="derivee-value" type="number" disabled value="{{system.attributs.sust.value}}"/>
|
||||
<label class="derivee-label" for="system.compteurs.sust.value">mangé</label>
|
||||
<input class="derivee-value" type="number" name="system.compteurs.sust.value" value="{{system.compteurs.sust.value}}" data-dtype="number"/>
|
||||
</li>
|
||||
</li>
|
||||
<li class="caracteristique flexrow list-item">
|
||||
<label class="derivee-label"></label>
|
||||
<label class="derivee-value"></label>
|
||||
<label class="derivee-label" for="system.compteurs.eau.value">bu</label>
|
||||
<input class="derivee-value" type="number" name="system.compteurs.eau.value" value="{{system.compteurs.eau.value}}" data-dtype="number"/>
|
||||
</li>
|
||||
</li>
|
||||
<li class="caracteristique flexrow list-item" data-tooltip="Niveau d'éthylisme">
|
||||
<label class="derivee-label" for="system.compteurs.ethylisme.value">{{system.compteurs.ethylisme.label}}</label>
|
||||
<select class="derivee-value" name="system.compteurs.ethylisme.value" data-dtype="Number">
|
||||
{{selectOptions (RDD_CONFIG 'niveauEthylisme') selected=system.compteurs.ethylisme.value valueAttr="value" nameAttr="value" labelAttr="label"}}
|
||||
</select>
|
||||
</li>
|
||||
|
||||
<br>
|
||||
<li class="caracteristique flexrow list-item" >
|
||||
<label class="carac-label">Seuil enc.</label>
|
||||
<input class="derivee-value" type="number" disabled value="{{system.attributs.encombrement.value}}"/>
|
||||
</li>
|
||||
<li class="caracteristique flexrow list-item" >
|
||||
<label class="carac-label">Bonus dom.</label>
|
||||
<input class="derivee-value" type="text" disabled value="{{plusMoins system.attributs.plusdom.value}}"/>
|
||||
</li>
|
||||
<li class="caracteristique flexrow list-item" >
|
||||
<label class="carac-label">Malus armure</label>
|
||||
<input class="derivee-value" type="number" disabled value="{{calc.malusArmure}}" data-dtype="number"/>
|
||||
</li>
|
||||
<li class="caracteristique flexrow list-item">
|
||||
<label class="carac-label" for="system.attributs.protection.value" >Protection naturelle</label>
|
||||
<input class="derivee-value" type="number" {{#unless options.isGM}}disabled{{/unless}} name="system.attributs.protection.value" value="{{system.attributs.protection.value}}" data-dtype="number"/>
|
||||
</li>
|
||||
<li class="caracteristique flexrow list-item" >
|
||||
<label class="carac-label" name="system.attributs.sconst.label">{{system.attributs.sconst.label}}</label>
|
||||
<input class="derivee-value" type="number" disabled value="{{system.attributs.sconst.value}}"/>
|
||||
</select>
|
||||
</li>
|
||||
<br>
|
||||
</ul>
|
||||
|
@ -11,10 +11,6 @@
|
||||
{{selectOptions (RDD_CONFIG 'typeEntite') selected=system.definition.typeentite}}
|
||||
</select>
|
||||
</li>
|
||||
{{#each system.attributs as |attr key|}}
|
||||
<li class="caracteristique flexrow list-item" data-attribute="{{key}}">
|
||||
<span class="carac-label" name="system.attributs.{{key}}.label">{{attr.label}} : </span>
|
||||
<input class="caracteristique streched" type="text" name="system.attributs.{{key}}.value" value="{{attr.value}}" data-dtype="{{attr.type}}" {{#unless @root.options.vueDetaillee}}disabled{{/unless}}/>
|
||||
</li>
|
||||
{{/each}}
|
||||
</ol>
|
||||
</ol>
|
||||
|
||||
{{> "systems/foundryvtt-reve-de-dragon/templates/actor/carac-creature.html"}}
|
||||
|
@ -1,36 +1,39 @@
|
||||
<ul class="carac-list alterne-list">
|
||||
{{#each system.carac as |carac key|}}
|
||||
{{#if (and (eq key 'taille') (eq @root.system.definition.typeentite 'nonincarne'))}}
|
||||
{{else}}
|
||||
<li class="caracteristique flexrow list-item{{#if carac.isLevelUp}} xp-level-up{{/if}}" data-attribute="{{key}}">
|
||||
{{#if (eq key 'taille')}}
|
||||
<span class="carac-label" name="system.carac.{{key}}.label">{{carac.label}}</span>
|
||||
<input class="carac-value" type="text" name="system.carac.{{key}}.value" value="{{carac.value}}" data-dtype="{{carac.type}}" {{#unless @root.options.vueDetaillee}}disabled{{/unless}} />
|
||||
<label class="carac-xp"/>
|
||||
{{else}}
|
||||
{{#if carac.derivee}}
|
||||
<span class="carac-label" name="system.carac.{{key}}.label"><a class="roll-carac" data-carac-name={{key}}>{{carac.label}}</a></span>
|
||||
<label class="competence-value">{{carac.value}}</label>
|
||||
<label class="carac-xp"/>
|
||||
{{else}}
|
||||
{{#if carac.isLevelUp}}
|
||||
<span class="carac-label tooltip" name="system.carac.{{key}}.label">
|
||||
<span class="tooltiptext ttt-levelup">
|
||||
{{#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>
|
||||
<label class="competence-value">{{carac.value}}</label>
|
||||
<label class="carac-xp"/>
|
||||
{{else}}
|
||||
{{#if carac.isLevelUp}}
|
||||
<span class="carac-label tooltip" name="system.carac.{{key}}.label">
|
||||
<span class="tooltiptext ttt-levelup">
|
||||
Vous pouvez dépenser {{carac.xpNext}} points d'Experience pour augmenter de 1 votre caractéristique {{carac.label}}
|
||||
</span>
|
||||
<a name={{key}}>{{carac.label}}</a>
|
||||
<a class="carac-xp-augmenter" name="augmenter.{{key}}" data-tooltip="Augmenter la caractéristique avec l'expérience">
|
||||
<i class="fas fa-arrow-alt-circle-up"></i>
|
||||
</a>
|
||||
</span>
|
||||
{{else}}
|
||||
<span class="carac-label tooltip" name="system.carac.{{key}}.label"><a class="roll-carac" data-carac-name={{key}}>{{carac.label}}</a></span>
|
||||
{{/if}}
|
||||
<input class="carac-value" type="text" name="system.carac.{{key}}.value" value="{{carac.value}}" data-dtype="{{carac.type}}" {{#unless @root.options.vueDetaillee}}disabled{{/unless}} />
|
||||
<span class="carac-xp tooltip">
|
||||
<input class="carac-xp" type="text" name="system.carac.{{key}}.xp" value="{{carac.xp}}" data-dtype="number" {{#unless @root.options.vueDetaillee}}disabled{{/unless}} />
|
||||
<span class="tooltiptext ttt-xp">Vous devez acquérir {{carac.xpNext}} points d'Experience pour augmenter de 1 votre {{carac.label}}</span>
|
||||
<a name={{key}}>{{carac.label}}</a>
|
||||
<a class="carac-xp-augmenter" name="augmenter.{{key}}" data-tooltip="Augmenter la caractéristique avec l'expérience">
|
||||
<i class="fas fa-arrow-alt-circle-up"></i>
|
||||
</a>
|
||||
</span>
|
||||
{{else}}
|
||||
<span class="carac-label tooltip" name="system.carac.{{key}}.label"><a class="roll-carac" data-carac-name={{key}}>{{carac.label}}</a></span>
|
||||
{{/if}}
|
||||
<input class="carac-value" type="text" name="system.carac.{{key}}.value" value="{{carac.value}}" data-dtype="{{carac.type}}" {{#unless @root.options.vueDetaillee}}disabled{{/unless}} />
|
||||
<span class="carac-xp tooltip">
|
||||
<input class="carac-xp" type="text" name="system.carac.{{key}}.xp" value="{{carac.xp}}" data-dtype="number" {{#unless @root.options.vueDetaillee}}disabled{{/unless}} />
|
||||
<span class="tooltiptext ttt-xp">Vous devez acquérir {{carac.xpNext}} points d'Experience pour augmenter de 1 votre {{carac.label}}</span>
|
||||
</span>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
</li>
|
||||
{{/if}}
|
||||
{{/each}}
|
||||
</ul>
|
||||
|
@ -2,10 +2,10 @@
|
||||
<div>
|
||||
{{#if carac.rollClass}}
|
||||
<a class="{{carac.rollClass}}" data-carac-name="{{carac.column}}">
|
||||
{{upper carac.colName}}
|
||||
{{uppercase carac.colName}}
|
||||
</a>
|
||||
{{else}}
|
||||
{{upper carac.colName}}
|
||||
{{uppercase carac.colName}}
|
||||
{{/if}}
|
||||
<a class="{{button-name}}-moins"><i class="fa-regular fa-square-minus"></i></a>
|
||||
<a class="{{button-name}}-plus"><i class="fa-regular fa-square-plus"></i></a>
|
||||
|
@ -1,9 +1,9 @@
|
||||
<div class="flexrow">
|
||||
<div>
|
||||
{{#if carac.rollClass}}
|
||||
<a class="{{carac.rollClass}}" data-carac-name="{{carac.column}}">{{upper carac.colName}}</a>
|
||||
<a class="{{carac.rollClass}}" data-carac-name="{{carac.column}}">{{uppercase carac.colName}}</a>
|
||||
{{else}}
|
||||
{{upper carac.colName}}
|
||||
{{uppercase carac.colName}}
|
||||
{{/if}}
|
||||
</div>
|
||||
<div class="flex-group-right">{{carac.value}}</div>
|
||||
|
@ -26,7 +26,7 @@
|
||||
{{/if}}
|
||||
</span>
|
||||
</li>
|
||||
{{> "systems/foundryvtt-reve-de-dragon/templates/actor/non-haut-revant.html"}}
|
||||
{{> "systems/foundryvtt-reve-de-dragon/templates/actor/non-haut-revant.hbs"}}
|
||||
<hr>
|
||||
{{> "systems/foundryvtt-reve-de-dragon/templates/actor/hr-signes-draconiques.html"}}
|
||||
{{> "systems/foundryvtt-reve-de-dragon/templates/actor/hr-rencontres.html"}}
|
@ -5,9 +5,7 @@
|
||||
<a class="jet-vie" name="system.sante.vie.label" data-tooltip="Faire un jet de vie">Vie</a>
|
||||
<a class="vie-moins"><i class="fa-solid fa-square-minus"></i></a>
|
||||
<input class="resource-content" type="text" name="system.sante.vie.value" value="{{system.sante.vie.value}}" data-dtype="Number" />
|
||||
/ {{#if @root.options.vueDetaillee}}
|
||||
<input class="resource-content" type="text" name="system.sante.vie.max" value="{{system.sante.vie.max}}" data-dtype="Number"/>
|
||||
{{else}}{{system.sante.vie.max}}{{/if}}
|
||||
/ {{system.sante.vie.max}}
|
||||
<a class="vie-plus"><i class="fa-solid fa-square-plus"></i></a>
|
||||
</label>
|
||||
</li>
|
||||
@ -16,9 +14,7 @@
|
||||
<a class="jet-endurance" name="system.sante.endurance.label" data-tooltip="Faire un jet d'endurance pour ne pas être sonné">Endurance</a>
|
||||
<a class="endurance-moins"><i class="fa-solid fa-square-minus"></i></a>
|
||||
<input class="resource-content" type="text" name="system.sante.endurance.value" value="{{system.sante.endurance.value}}" data-dtype="Number"/>
|
||||
/ {{#if @root.options.vueDetaillee}}
|
||||
<input class="resource-content" type="text" name="system.sante.endurance.max" value="{{system.sante.endurance.max}}" data-dtype="Number"/>
|
||||
{{else}}{{system.sante.endurance.max}}{{/if}}
|
||||
/ {{system.sante.endurance.max}}
|
||||
<a class="endurance-plus"><i class="fa-solid fa-square-plus"></i></a>
|
||||
</label>
|
||||
</li>
|
||||
|
@ -6,9 +6,7 @@
|
||||
Endurance
|
||||
<a class="endurance-moins"><i class="fa-solid fa-square-minus"></i></a>
|
||||
<input class="resource-content" type="text" name="system.sante.endurance.value" value="{{system.sante.endurance.value}}" data-dtype="Number" />
|
||||
/ {{#if @root.options.vueDetaillee}}
|
||||
<input class="resource-content" type="text" name="system.sante.endurance.max" value="{{system.sante.endurance.max}}" data-dtype="Number"/>
|
||||
{{else}}{{system.sante.endurance.max}}{{/if}}
|
||||
/ {{system.sante.endurance.max}}
|
||||
<a class="endurance-plus"><i class="fa-solid fa-square-plus"></i></a>
|
||||
</label>
|
||||
</li>
|
||||
|
41
templates/actor/non-haut-revant.hbs
Normal file
41
templates/actor/non-haut-revant.hbs
Normal file
@ -0,0 +1,41 @@
|
||||
{{#if (not system.attributs.hautrevant.value)}}
|
||||
<p>Attribuer la Tête de Dragon
|
||||
{{#if options.isGM}}
|
||||
<a class="chat-card-button don-de-haut-reve" data-tooltip="Donner le don de haut-rêve">Don de Haut Rêve</a>
|
||||
{{else}}
|
||||
'Don de Haut Rêve'
|
||||
{{/if}}
|
||||
pour rendre le personnage Haut-Rêvant.</p>
|
||||
{{/if}}
|
||||
<li class="item flexrow">
|
||||
<span class="competence-label">Seuil de Rêve :</span>
|
||||
<span>
|
||||
{{#if options.isGM}}
|
||||
<input class="competence-value seuil-reve-value" type="text" name="system.reve.seuil.value" value="{{system.reve.seuil.value}}" data-dtype="Number"/>
|
||||
{{else}}
|
||||
{{system.reve.seuil.value}}
|
||||
{{/if}}
|
||||
</span>
|
||||
</li>
|
||||
<li class="item flexrow" >
|
||||
<span class="competence-label">Refoulement : </span>
|
||||
<span>
|
||||
{{#if options.isGM}}
|
||||
<input class="competence-value" type="text" name="system.reve.refoulement.value" value="{{system.reve.refoulement.value}}" data-dtype="Number"/>
|
||||
{{else}}
|
||||
{{system.reve.refoulement.value}}
|
||||
{{/if}}
|
||||
</span>
|
||||
</li>
|
||||
{{#if system.reve.reve.thanatosused}}
|
||||
<li class="item flexrow" >
|
||||
<span class="competence-label">La prochaine queue est une Ombre</span>
|
||||
<span>
|
||||
<img class="sheet-competence-img" src="systems/foundryvtt-reve-de-dragon/icons/competence_thanatos.webp"/>
|
||||
</span>
|
||||
</li>
|
||||
{{/if}}
|
||||
<hr>
|
||||
{{> "systems/foundryvtt-reve-de-dragon/templates/actor/dragon-queues.html"}}
|
||||
{{> "systems/foundryvtt-reve-de-dragon/templates/actor/dragon-souffles.html"}}
|
||||
{{> "systems/foundryvtt-reve-de-dragon/templates/actor/dragon-tetes.html"}}
|
@ -1,34 +0,0 @@
|
||||
<ul class="item-list">
|
||||
<li class="item flexrow">
|
||||
<span class="competence-label">Seuil de Rêve :</span>
|
||||
<span>
|
||||
{{#if options.isGM}}
|
||||
<input class="competence-value seuil-reve-value" type="text" name="system.reve.seuil.value" value="{{system.reve.seuil.value}}" data-dtype="Number"/>
|
||||
{{else}}
|
||||
{{system.reve.seuil.value}}
|
||||
{{/if}}
|
||||
</span>
|
||||
</li>
|
||||
<li class="item flexrow" >
|
||||
<span class="competence-label">Refoulement : </span>
|
||||
<span>
|
||||
{{#if options.isGM}}
|
||||
<input class="competence-value" type="text" name="system.reve.refoulement.value" value="{{system.reve.refoulement.value}}" data-dtype="Number"/>
|
||||
{{else}}
|
||||
{{system.reve.refoulement.value}}
|
||||
{{/if}}
|
||||
</span>
|
||||
</li>
|
||||
{{#if system.reve.reve.thanatosused}}
|
||||
<li class="item flexrow" >
|
||||
<span class="competence-label">La prochaine queue est une Ombre</span>
|
||||
<span>
|
||||
<img class="sheet-competence-img" src="systems/foundryvtt-reve-de-dragon/icons/competence_thanatos.webp"/>
|
||||
</span>
|
||||
</li>
|
||||
{{/if}}
|
||||
</ul>
|
||||
<hr>
|
||||
{{> "systems/foundryvtt-reve-de-dragon/templates/actor/dragon-queues.html"}}
|
||||
{{> "systems/foundryvtt-reve-de-dragon/templates/actor/dragon-souffles.html"}}
|
||||
{{> "systems/foundryvtt-reve-de-dragon/templates/actor/dragon-tetes.html"}}
|
@ -1,6 +1,6 @@
|
||||
<img class="chat-icon" src="{{competence.img}}" data-tooltip="{{competence.name}}"/>
|
||||
<h4 data-categorie="tmr" data-actor-id="{{actor._id}}">
|
||||
{{alias}} tente de {{maitrise.verbe}} {{le tmr.genre}}
|
||||
{{alias}} tente de {{maitrise.verbe}} {{grammar-le tmr.genre}}
|
||||
{{#if isTMRCache}}
|
||||
{{caseTmr-type tmr.coord}}
|
||||
{{else}}
|
||||
@ -18,7 +18,7 @@
|
||||
<span>
|
||||
{{alias}}
|
||||
{{#if rolled.isSuccess}}parvient à{{else}}échoue à{{/if}}
|
||||
{{maitrise.verbe}} {{le tmr.genre}}
|
||||
{{maitrise.verbe}} {{grammar-le tmr.genre}}
|
||||
{{#if isTMRCache}}
|
||||
{{caseTmr-type tmr.coord}}
|
||||
{{else}}
|
||||
|
@ -1,8 +1,8 @@
|
||||
<img class="chat-icon" src="icons/svg/lightning.svg" data-tooltip="Météo" />
|
||||
<h4>Météo aléatoire</h4>
|
||||
<ul>
|
||||
<li>Vent: {{lowerFirst vent.description}} {{apostrophe 'de' vent.direction}}, force {{vent.force}}</li>
|
||||
<li>Mer {{lowerFirst mer.description}}, {{apostrophe 'de' mer.direction}}, force {{mer.force}}</li>
|
||||
<li>Vent: {{lowerFirst vent.description}} {{grammar-apostrophe 'de' vent.direction}}, force {{vent.force}}</li>
|
||||
<li>Mer {{lowerFirst mer.description}}, {{grammar-apostrophe 'de' mer.direction}}, force {{mer.force}}</li>
|
||||
<li>Température {{lowerFirst temperature.description}} ({{plusMoins temperature.force}})</li>
|
||||
<li>Couverture nuageuse: {{lowerFirst nuage.description}}</li>
|
||||
<li>Pluie: {{lowerFirst pluie.description}}</li>
|
||||
|
Reference in New Issue
Block a user