Compare commits

...

17 Commits

Author SHA1 Message Date
8f127bc66b Corrections diverses suite v10 2022-09-18 08:57:45 +02:00
8c5f6b8f1b Merge pull request 'Corrections des TMRs et des Statuis' (#554) from VincentVk/foundryvtt-reve-de-dragon:v10 into v10
Reviewed-on: #554
2022-09-18 08:55:40 +02:00
Vincent Vandemeulebrouck
00630849cb Réinsertion sortie de carte
En sortant de la carte (avec les flèches de direction), le demi-rêve
est maintenant bien réinséré aléatoirement
2022-09-18 01:00:38 +02:00
Vincent Vandemeulebrouck
c4392f0320 Fix TMR accessibles par une rencontre
Les cases n'étaient polus accessibles, ni coloriées
2022-09-18 01:00:38 +02:00
Vincent Vandemeulebrouck
7a92ee85ef Nettoyage des status effects
* Recherche et suppression toujours par flags.core.statusId
* l'ajout d'un status depuis le token est maintenant équivallent
  à l'ajout par le code
* Correction des demi-surprises
* Correction du Demi-rêve (qui ne disparaissait pas)
* fix de la selection dans la configuration système
2022-09-18 01:00:36 +02:00
Vincent Vandemeulebrouck
56ea9dd2e4 Sorts en réserve éditables 2022-09-17 22:35:17 +02:00
ee42902b5c Gestion reserve et queues ameliores(Vincent) 2022-09-17 09:09:09 +02:00
838d4381a4 Merge pull request 'Refouler des queues et supprimer des sorts en réserve' (#553) from VincentVk/foundryvtt-reve-de-dragon:v10 into v10
Reviewed-on: #553
2022-09-17 09:04:19 +02:00
Vincent Vandemeulebrouck
2232224951 Suppression de sorts en réserve 2022-09-17 01:54:27 +02:00
Vincent Vandemeulebrouck
1251d04860 Action Refoulement de queue 2022-09-17 01:54:27 +02:00
63c6d5ff0f Integration fixes Vincent 2022-09-16 08:35:48 +02:00
c0d37e42ca Merge pull request 'Petits fixes suite à tests' (#552) from VincentVk/foundryvtt-reve-de-dragon:v10-fixes into v10
Reviewed-on: #552
2022-09-16 08:34:18 +02:00
Vincent Vandemeulebrouck
c8c13d626c Fix drop item sans actor 2022-09-16 02:41:54 +02:00
Vincent Vandemeulebrouck
e1ca7ab738 Amélioration des monnaies
On peut maintenant supprimer es monnaies tant qu'on garde une monnaie
pour chaque valeur de base
2022-09-16 02:41:08 +02:00
Vincent Vandemeulebrouck
8f1ee315ef Template en-tête standard 2022-09-16 02:24:08 +02:00
Vincent Vandemeulebrouck
5daf15901a Correction erreur xp restant 2022-09-16 02:24:08 +02:00
bddaecbc74 Fix entite 2022-09-11 16:14:27 +02:00
57 changed files with 1111 additions and 1131 deletions

View File

@@ -41,7 +41,8 @@
"TypeOmbre": "Ombre de Thanatos", "TypeOmbre": "Ombre de Thanatos",
"TypeSouffle": "Souffle de Dragon", "TypeSouffle": "Souffle de Dragon",
"TypeTete": "Tête de Dragon", "TypeTete": "Tête de Dragon",
"TypePossession": "Possession" "TypePossession": "Possession",
"TypeSortreserve": "Sort en réserve"
}, },
"EFFECT": { "EFFECT": {
"StatusStunned": "Sonné", "StatusStunned": "Sonné",

View File

@@ -15,6 +15,7 @@ import { DialogSplitItem } from "./dialog-split-item.js";
import { ReglesOptionelles } from "./regles-optionelles.js"; import { ReglesOptionelles } from "./regles-optionelles.js";
import { DialogRepos } from "./dialog-repos.js"; import { DialogRepos } from "./dialog-repos.js";
import { RdDSheetUtility } from "./rdd-sheet-utility.js"; import { RdDSheetUtility } from "./rdd-sheet-utility.js";
import { STATUSES } from "./status-effects.js";
/* -------------------------------------------- */ /* -------------------------------------------- */
export class RdDActorSheet extends ActorSheet { export class RdDActorSheet extends ActorSheet {
@@ -99,8 +100,7 @@ export class RdDActorSheet extends ActorSheet {
formData.difficultesLibres = CONFIG.RDD.difficultesLibres; formData.difficultesLibres = CONFIG.RDD.difficultesLibres;
formData.hautreve = { formData.hautreve = {
isDemiReve: this.actor.getEffectByLabel("Demi-rêve"), isDemiReve: this.actor.getEffect(STATUSES.StatusDemiReve),
sortsReserve: formData.system.reve.reserve.list,
rencontres: duplicate(formData.system.reve.rencontre.list), rencontres: duplicate(formData.system.reve.rencontre.list),
casesTmr: formData.itemsByType.casetmr, casesTmr: formData.itemsByType.casetmr,
cacheTMR: this.actor.isTMRCache() cacheTMR: this.actor.isTMRCache()
@@ -180,7 +180,8 @@ export class RdDActorSheet extends ActorSheet {
}); });
html.find('.item-delete').click(async event => { html.find('.item-delete').click(async event => {
const li = RdDSheetUtility.getEventElement(event); const li = RdDSheetUtility.getEventElement(event);
RdDUtility.confirmerSuppression(this, li); const item = this.actor.getObjet(li.data("item-id"));
RdDUtility.confirmerSuppressionItem(this, item, li);
}); });
html.find('.item-vendre').click(async event => { html.find('.item-vendre').click(async event => {
const item = RdDSheetUtility.getItem(event, this.actor); const item = RdDSheetUtility.getItem(event, this.actor);
@@ -197,7 +198,11 @@ export class RdDActorSheet extends ActorSheet {
}); });
html.find('.subacteur-delete').click(async event => { html.find('.subacteur-delete').click(async event => {
const li = RdDSheetUtility.getEventElement(event); const li = RdDSheetUtility.getEventElement(event);
RdDUtility.confirmerSuppressionSubacteur(this, li); const actorId = li.data("actor-id");
if (actorId) {
const subActor = game.actors.get(actorId);
RdDUtility.confirmerSuppressionSubacteur(this, subActor, li);
}
}); });
html.find('.encaisser-direct').click(async event => { html.find('.encaisser-direct').click(async event => {
@@ -356,11 +361,15 @@ export class RdDActorSheet extends ActorSheet {
await DialogRepos.create(this.actor); await DialogRepos.create(this.actor);
}); });
html.find('.delete-active-effect').click(async event => { html.find('.delete-active-effect').click(async event => {
let id = $(event.currentTarget).parents(".active-effect").data('id'); if (game.user.isGM) {
this.actor.enleverActiveEffectById(id); let effect = $(event.currentTarget).parents(".active-effect").data('effect');
this.actor.removeEffect(effect);
}
}); });
html.find('.enlever-tous-effets').click(async event => { html.find('.enlever-tous-effets').click(async event => {
this.actor.enleverTousLesEffets(); if (game.user.isGM) {
this.actor.enleverTousLesEffets();
}
}); });
html.find('.conteneur-name a').click(async event => { html.find('.conteneur-name a').click(async event => {
RdDUtility.toggleAfficheContenu(RdDSheetUtility.getItemId(event)); RdDUtility.toggleAfficheContenu(RdDSheetUtility.getItemId(event));

View File

@@ -104,7 +104,8 @@ export class RdDActorVehiculeSheet extends ActorSheet {
// Delete Inventory Item // Delete Inventory Item
html.find('.item-delete').click(async event => { html.find('.item-delete').click(async event => {
const li = RdDSheetUtility.getEventElement(event); const li = RdDSheetUtility.getEventElement(event);
RdDUtility.confirmerSuppression(this, li); const item = this.actor.getObjet(li.data("item-id"));
RdDUtility.confirmerSuppressionItem(this, item, li);
}); });
html.find('.item-vendre').click(async event => { html.find('.item-vendre').click(async event => {
const item = RdDSheetUtility.getItem(event, this.actor); const item = RdDSheetUtility.getItem(event, this.actor);

View File

@@ -17,7 +17,7 @@ import { RdDAudio } from "./rdd-audio.js";
import { RdDItemCompetence } from "./item-competence.js"; import { RdDItemCompetence } from "./item-competence.js";
import { RdDItemArme } from "./item-arme.js"; import { RdDItemArme } from "./item-arme.js";
import { RdDAlchimie } from "./rdd-alchimie.js"; import { RdDAlchimie } from "./rdd-alchimie.js";
import { StatusEffects } from "./status-effects.js"; import { STATUSES, StatusEffects } from "./status-effects.js";
import { RdDItemCompetenceCreature } from "./item-competencecreature.js"; import { RdDItemCompetenceCreature } from "./item-competencecreature.js";
import { RdDItemSigneDraconique } from "./item-signedraconique.js"; import { RdDItemSigneDraconique } from "./item-signedraconique.js";
import { ReglesOptionelles } from "./regles-optionelles.js"; import { ReglesOptionelles } from "./regles-optionelles.js";
@@ -52,8 +52,6 @@ const POSSESSION_SANS_DRACONIC = {
export class RdDActor extends Actor { export class RdDActor extends Actor {
/* -------------------------------------------- */ /* -------------------------------------------- */
static init() { static init() {
Hooks.on("deleteActiveEffect", (effect, options, userId) => RdDActor.getParentActor(effect)?.onDeleteActiveEffect(effect, options));
Hooks.on("preUpdateItem", (item, change, options, id) => RdDActor.getParentActor(item)?.onPreUpdateItem(item, change, options, id)); Hooks.on("preUpdateItem", (item, change, options, id) => RdDActor.getParentActor(item)?.onPreUpdateItem(item, change, options, id));
Hooks.on("createItem", (item, options, id) => RdDActor.getParentActor(item)?.onCreateItem(item, options, id)); Hooks.on("createItem", (item, options, id) => RdDActor.getParentActor(item)?.onCreateItem(item, options, id));
Hooks.on("deleteItem", (item, options, id) => RdDActor.getParentActor(item)?.onDeleteItem(item, options, id)); Hooks.on("deleteItem", (item, options, id) => RdDActor.getParentActor(item)?.onDeleteItem(item, options, id));
@@ -200,7 +198,6 @@ export class RdDActor extends Actor {
async checkMonnaiePresence() { // Ajout opportuniste si les pièces n'existent pas. async checkMonnaiePresence() { // Ajout opportuniste si les pièces n'existent pas.
if (!this.items) return; // Sanity check during import if (!this.items) return; // Sanity check during import
let manquantes = Monnaie.monnaiesManquantes(this.itemTypes['monnaie']); let manquantes = Monnaie.monnaiesManquantes(this.itemTypes['monnaie']);
//console.log("Manque : ", manquantes);
if (manquantes.length > 0) { if (manquantes.length > 0) {
await this.createEmbeddedDocuments('Item', manquantes, { renderSheet: false }); await this.createEmbeddedDocuments('Item', manquantes, { renderSheet: false });
} }
@@ -419,23 +416,9 @@ export class RdDActor extends Actor {
} }
} }
/* -------------------------------------------- */
async deleteSortReserve(sortReserve) {
let reserve = duplicate(this.system.reve.reserve);
let tmr = TMRUtility.getTMR(sortReserve.coord);
let index = reserve.list.findIndex(tmr.type == 'fleuve'
? sort => (TMRUtility.getTMR(sort.coord).type == 'fleuve' && sort.sort.name == sortReserve.sort.name)
: sort => (sort.coord == sortReserve.coord && sort.sort.name == sortReserve.sort.name)
);
if (index >= 0) {
reserve.list.splice(index, 1);
await this.update({ "system.reve.reserve": reserve });
}
}
/* -------------------------------------------- */ /* -------------------------------------------- */
getSurprise(isCombat = undefined) { getSurprise(isCombat = undefined) {
let niveauSurprise = this.getActiveEffects() let niveauSurprise = this.getEffects()
.map(effect => StatusEffects.valeurSurprise(effect, isCombat)) .map(effect => StatusEffects.valeurSurprise(effect, isCombat))
.reduce(Misc.sum(), 0); .reduce(Misc.sum(), 0);
if (niveauSurprise > 1) { if (niveauSurprise > 1) {
@@ -849,10 +832,13 @@ export class RdDActor extends Actor {
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
async sortMisEnReserve(rollData, sort) { async sortMisEnReserve(sort, draconic, coord, ptreve) {
let reserve = duplicate(this.system.reve.reserve.list); await this.createEmbeddedDocuments("Item", [{
reserve.push({ coord: rollData.tmr.coord, sort: sort, draconic: duplicate(rollData.competence) }); type: 'sortreserve',
await this.update({ "system.reve.reserve.list": reserve }); name: sort.name,
img: sort.img,
system: { sortid: sort.id, draconic: (draconic ?? sort.system.draconic), ptreve: ptreve, coord: coord, heurecible: 'Vaisseau' } }],
{ renderSheet: false});
this.currentTMR.updateTokens(); this.currentTMR.updateTokens();
} }
@@ -929,26 +915,27 @@ export class RdDActor extends Actor {
if (!competence) { if (!competence) {
return; return;
} }
const stress = this.system.compteurs.experience.value;
const niveau = Number(competence.system.niveau); const niveau = Number(competence.system.niveau);
const stressTransforme = this.system.compteurs.experience.value; const xpSuivant = RdDItemCompetence.getCompetenceNextXp(niveau);
const xpRequis = RdDItemCompetence.getCompetenceNextXp(niveau) - competence.system.xp; const xpRequis = xpSuivant - competence.system.xp;
if (stressTransforme <= 0 || niveau >= competence.system.niveau_archetype || xpRequis <= 0) { if (stress <= 0 || niveau >= competence.system.niveau_archetype) {
ui.notifications.info(`La compétence ne peut pas augmenter! ui.notifications.info(`La compétence ne peut pas augmenter!
stress disponible: ${stressTransforme} stress disponible: ${stress}
expérience requise: ${xpRequis} expérience requise: ${xpRequis}
niveau : ${niveau} niveau : ${niveau}
archétype : ${competence.system.niveau_archetype}`); archétype : ${competence.system.niveau_archetype}`);
return; return;
} }
const xpUtilise = Math.min(stressTransforme, xpRequis); const xpUtilise = Math.max(0, Math.min(stress, xpRequis));
const gainNiveau = xpUtilise >= xpRequis ? 1 : 0; const gainNiveau = (xpUtilise >= xpRequis || xpRequis <=0) ? 1 : 0;
const nouveauNiveau = niveau + gainNiveau; const nouveauNiveau = niveau + gainNiveau;
const nouveauXp = gainNiveau > 0 ? Math.max(competence.system.xp - xpRequis, 0) : (competence.system.xp + xpUtilise); const nouveauXp = gainNiveau > 0 ? Math.max(competence.system.xp - xpSuivant, 0) : (competence.system.xp + xpUtilise);
await competence.update({ await competence.update({
"system.xp": nouveauXp, "system.xp": nouveauXp,
"system.niveau": nouveauNiveau, "system.niveau": nouveauNiveau,
}); });
const stressTransformeRestant = Math.max(0, stressTransforme - xpUtilise); const stressTransformeRestant = Math.max(0, stress - xpUtilise);
await this.update({ "system.compteurs.experience.value": stressTransformeRestant }); await this.update({ "system.compteurs.experience.value": stressTransformeRestant });
this.updateExperienceLog('Dépense stress', xpUtilise, `Stress en ${competence.name} ${gainNiveau ? "pour passer à " + nouveauNiveau : ""}`); this.updateExperienceLog('Dépense stress', xpUtilise, `Stress en ${competence.name} ${gainNiveau ? "pour passer à " + nouveauNiveau : ""}`);
} }
@@ -1132,11 +1119,11 @@ export class RdDActor extends Actor {
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
async deleteAllConteneur(itemId) { async deleteAllConteneur(itemId, options) {
let list = []; let list = [];
list.push({ id: itemId, conteneurId: undefined }); // Init list list.push({ id: itemId, conteneurId: undefined }); // Init list
this.buildSubConteneurObjetList(itemId, list); this.buildSubConteneurObjetList(itemId, list);
await this.deleteEmbeddedDocuments('Item', list.map(it => it.id)); await this.deleteEmbeddedDocuments('Item', list.map(it => it.id), options);
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
@@ -1424,6 +1411,15 @@ export class RdDActor extends Actor {
} }
} }
/* -------------------------------------------- */
async actionRefoulement(item) {
const refoulement = item?.system.refoulement ?? 0;
if (refoulement>0){
await this.ajouterRefoulement(refoulement);
await item.delete();
}
}
/* -------------------------------------------- */ /* -------------------------------------------- */
async ajouterRefoulement(value = 1) { async ajouterRefoulement(value = 1) {
let refoulement = this.system.reve.refoulement.value + value; let refoulement = this.system.reve.refoulement.value + value;
@@ -1589,12 +1585,12 @@ export class RdDActor extends Actor {
/* -------------------------------------------- */ /* -------------------------------------------- */
getSonne() { getSonne() {
return this.getEffectByLabel("EFFECT.StatusStunned"); return this.getEffect(STATUSES.StatusStunned);
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
async finDeRound(options = { terminer: false }) { async finDeRound(options = { terminer: false }) {
for (let effect of this.getActiveEffects()) { for (let effect of this.getEffects()) {
if (effect.duration.type !== 'none' && (effect.duration.remaining <= 0 || options.terminer)) { if (effect.duration.type !== 'none' && (effect.duration.remaining <= 0 || options.terminer)) {
if (effect.system.origin) { if (effect.system.origin) {
await effect.update({ 'disabled': true }); await effect.update({ 'disabled': true });
@@ -1623,7 +1619,7 @@ export class RdDActor extends Actor {
ui.notifications.info("Le personnage est hors combat, il ne reste donc pas sonné"); ui.notifications.info("Le personnage est hors combat, il ne reste donc pas sonné");
return; return;
} }
await this.setStatusEffect("EFFECT.StatusStunned", sonne); await this.setEffect(STATUSES.StatusStunned, sonne);
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
@@ -1776,7 +1772,7 @@ export class RdDActor extends Actor {
} }
await this.update({ "system.sante": sante }) await this.update({ "system.sante": sante })
if (this.isDead()) { if (this.isDead()) {
await this.setStatusEffect("EFFECT.StatusComma", true); await this.setEffect(STATUSES.StatusComma, true);
} }
return result; return result;
} }
@@ -1924,6 +1920,7 @@ export class RdDActor extends Actor {
} }
return; return;
} }
case 'queue': case 'ombre': return await this.actionRefoulement(item);
} }
} }
@@ -2435,7 +2432,7 @@ export class RdDActor extends Actor {
RdDItemSort.incrementBonusCase(this, selectedSort, rollData.tmr.coord); RdDItemSort.incrementBonusCase(this, selectedSort, rollData.tmr.coord);
if (rollData.isSortReserve) { if (rollData.isSortReserve) {
await this.sortMisEnReserve(rollData, selectedSort); await this.sortMisEnReserve(selectedSort, rollData.competence, rollData.tmr.coord, Number(selectedSort.system.ptreve_reel));
} }
} }
else { else {
@@ -2447,6 +2444,7 @@ export class RdDActor extends Actor {
if (rolled.isETotal) { // Echec total ! if (rolled.isETotal) { // Echec total !
rollData.depenseReve = Math.min(reveActuel, Math.floor(rollData.depenseReve * 1.5)) rollData.depenseReve = Math.min(reveActuel, Math.floor(rollData.depenseReve * 1.5))
// TODO: mise en réserve d'un échec total... // TODO: mise en réserve d'un échec total...
// await dialog mse en réserve, pour traitement échec total
} else { } else {
rollData.depenseReve = 0 rollData.depenseReve = 0
} }
@@ -3158,8 +3156,7 @@ export class RdDActor extends Actor {
ui.notifications.warn("Vous êtes déja dans les TMR...."); ui.notifications.warn("Vous êtes déja dans les TMR....");
return return
} }
let demiReve = this.getActiveEffects(it => it.label == "Demi-rêve"); if (mode != 'visu' && this.getEffect(STATUSES.StatusDemiReve)) {
if (mode != 'visu' && demiReve.length > 0) {
ui.notifications.warn("Le joueur ou le MJ est déja dans les Terres Médianes avec ce personnage ! Visualisation uniquement"); ui.notifications.warn("Le joueur ou le MJ est déja dans les Terres Médianes avec ce personnage ! Visualisation uniquement");
mode = "visu"; // bascule le mode en visu automatiquement mode = "visu"; // bascule le mode en visu automatiquement
} }
@@ -3174,7 +3171,7 @@ export class RdDActor extends Actor {
}); });
return; return;
} }
await this.setStatusEffect("EFFECT.StatusDemiReve", true); await this.setEffect(STATUSES.StatusDemiReve, true);
} }
const fatigue = this.system.sante.fatigue.value; const fatigue = this.system.sante.fatigue.value;
@@ -3464,7 +3461,7 @@ export class RdDActor extends Actor {
count--; count--;
} else { } else {
// TODO: status effect dead // TODO: status effect dead
this.setStatusEffect("EFFECT.StatusComma", true); this.setEffect(STATUSES.StatusComma, true);
ChatMessage.create({ ChatMessage.create({
content: `<img class="chat-icon" src="icons/svg/skull.svg" alt="charge" /> content: `<img class="chat-icon" src="icons/svg/skull.svg" alt="charge" />
<strong>${this.name} vient de succomber à une seconde blessure critique ! Que les Dragons gardent son Archétype en paix !</strong>` <strong>${this.name} vient de succomber à une seconde blessure critique ! Que les Dragons gardent son Archétype en paix !</strong>`
@@ -3554,7 +3551,7 @@ export class RdDActor extends Actor {
/* -------------------------------------------- */ /* -------------------------------------------- */
isEntite(typeentite = []) { isEntite(typeentite = []) {
return this.type == 'entite' && (typeentite.length == 0 || typeentite.includes(this.system.typeentite)); return this.type == 'entite' && (typeentite.length == 0 || typeentite.includes(this.system.definition.typeentite));
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
@@ -3916,9 +3913,9 @@ export class RdDActor extends Actor {
let newVehicules = this.system.subacteurs.vehicules.filter(function (obj, index, arr) { return obj.id != actorId }); let newVehicules = this.system.subacteurs.vehicules.filter(function (obj, index, arr) { return obj.id != actorId });
let newSuivants = this.system.subacteurs.suivants.filter(function (obj, index, arr) { return obj.id != actorId }); let newSuivants = this.system.subacteurs.suivants.filter(function (obj, index, arr) { return obj.id != actorId });
let newMontures = this.system.subacteurs.montures.filter(function (obj, index, arr) { return obj.id != actorId }); let newMontures = this.system.subacteurs.montures.filter(function (obj, index, arr) { return obj.id != actorId });
await this.update({ 'system.subacteurs.vehicules': newVehicules }); await this.update({ 'system.subacteurs.vehicules': newVehicules }, { renderSheet: false });
await this.update({ 'system.subacteurs.suivants': newSuivants }); await this.update({ 'system.subacteurs.suivants': newSuivants }, { renderSheet: false });
await this.update({ 'system.subacteurs.montures': newMontures }); await this.update({ 'system.subacteurs.montures': newMontures }, { renderSheet: false });
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
@@ -4099,61 +4096,44 @@ export class RdDActor extends Actor {
async onUpdateActor(update, options, actorId) { async onUpdateActor(update, options, actorId) {
const updatedEndurance = update?.system?.sante?.endurance const updatedEndurance = update?.system?.sante?.endurance
if (updatedEndurance && options.diff) { if (updatedEndurance && options.diff) {
await this.setStatusEffect("EFFECT.StatusUnconscious", updatedEndurance.value == 0) await this.setEffect(STATUSES.StatusUnconscious, updatedEndurance.value == 0)
} }
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
async onDeleteActiveEffect(effect, options) { getEffects() {
switch (effect.label) { return this.getEmbeddedCollection("ActiveEffect");
case 'EFFECT.StatusStunned':
return;
}
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
getActiveEffects(matching = it => true) { getEffect(statusId) {
return Array.from(this.getEmbeddedCollection("ActiveEffect").values()).filter(it => matching(it)); return this.getEmbeddedCollection("ActiveEffect").find(it => it.flags?.core?.statusId == statusId);
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
getEffectByLabel(label) { async setEffect(statusId, status) {
return this.getActiveEffects().find(it => it.system?.label == label);
}
/* -------------------------------------------- */
getEffectById(id) {
return this.getActiveEffects().find(it => it.id == id);
}
/* -------------------------------------------- */
async setStatusEffect(label, status, updates = {}) {
if (this.isEntite() || this.type == 'vehicule') { if (this.isEntite() || this.type == 'vehicule') {
return; return;
} }
console.log("setStatusEffect", label, status, updates) console.log("setEffect", statusId, status)
const existing = this.getEffectByLabel(label); await this.removeEffect(statusId);
if (existing) { const effect = StatusEffects.status(statusId);
existing.delete(); if (effect) {
} await this.createEmbeddedDocuments("ActiveEffect", [effect]);
if (status) {
const statusEffect = mergeObject(duplicate(StatusEffects.status(label)), updates);
await this.createEmbeddedDocuments("ActiveEffect", [statusEffect]);
} }
} }
enleverActiveEffectById(id) { async removeEffect(statusId) {
if (game.user.isGM) { const effect = this.getEffect(statusId);
const existing = this.getEffectById(id); if (effect) {
if (existing) { await this.deleteEmbeddedDocuments('ActiveEffect', [effect.id]);
existing.delete();
}
} }
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
enleverTousLesEffets() { enleverTousLesEffets() {
if (game.user.isGM) { if (game.user.isGM) {
this.deleteEmbeddedDocuments('ActiveEffect', this.getActiveEffects().map(it => it.id)); this.deleteEmbeddedDocuments('ActiveEffect', this.getEffects().map(it => it.id));
} }
} }

View File

@@ -1,5 +1,6 @@
export const SYSTEM_RDD = 'foundryvtt-reve-de-dragon'; export const SYSTEM_RDD = 'foundryvtt-reve-de-dragon';
export const SYSTEM_SOCKET_ID = 'system.foundryvtt-reve-de-dragon'; export const SYSTEM_SOCKET_ID = 'system.foundryvtt-reve-de-dragon';
export const LOG_HEAD = 'RdD | ';
export const HIDE_DICE = 'hide'; export const HIDE_DICE = 'hide';
export const SHOW_DICE = 'show'; export const SHOW_DICE = 'show';

View File

@@ -22,12 +22,19 @@ const MONNAIES_STANDARD = [
system: { quantite: 0, valeur_deniers: 1000, encombrement: 0.004, description: "" } system: { quantite: 0, valeur_deniers: 1000, encombrement: 0.004, description: "" }
} }
] ]
const VALEURS_STANDARDS = MONNAIES_STANDARD.map(it =>it.system.valeur_deniers);
export class Monnaie { export class Monnaie {
static isSystemMonnaie(item) { static isSystemMonnaie(item, items) {
let present = MONNAIES_STANDARD.find(monnaie => monnaie.system.valeur_deniers == item?.system?.valeur_deniers); if (item.type == 'monnaie') {
return present; const valeur = item.system.valeur_deniers;
if (VALEURS_STANDARDS.includes(valeur)) {
const monnaiesDeValeur = items.filter(it => it.type == 'monnaie' && it.system.valeur_deniers == valeur)
return monnaiesDeValeur.length<=1;
}
}
return false;
} }
static monnaiesData() { static monnaiesData() {
@@ -40,10 +47,10 @@ export class Monnaie {
static monnaiesManquantes(disponibles) { static monnaiesManquantes(disponibles) {
const manquantes = MONNAIES_STANDARD.filter(standard => !disponibles.find(disponible => Monnaie.deValeur(disponible, standard.system?.valeur_deniers))); const manquantes = MONNAIES_STANDARD.filter(standard => !disponibles.find(disponible => Monnaie.deValeur(disponible, standard.system?.valeur_deniers)));
if (manquantes.length>0) { if (manquantes.length > 0) {
console.error('monnaiesManquantes', manquantes, ' avec monnaies', disponibles, MONNAIES_STANDARD); console.error('monnaiesManquantes', manquantes, ' avec monnaies', disponibles, MONNAIES_STANDARD);
} }
return []; //manquantes; return manquantes;
} }
static deValeur(monnaie, valeur) { static deValeur(monnaie, valeur) {

View File

@@ -84,32 +84,36 @@ export class RdDItemSheet extends ItemSheet {
} }
formData.categorieCompetences = RdDItemCompetence.getCategorieCompetences() formData.categorieCompetences = RdDItemCompetence.getCategorieCompetences()
if (formData.type == 'tache' || formData.type == 'livre' || formData.type == 'meditation' || formData.type == 'oeuvre') { if (this.item.type == 'tache' || this.item.type == 'livre' || this.item.type == 'meditation' || this.item.type == 'oeuvre') {
formData.caracList = duplicate(game.system.model.Actor.personnage.carac) formData.caracList = duplicate(game.system.model.Actor.personnage.carac)
formData.caracList["reve-actuel"] = duplicate(game.system.model.Actor.personnage.reve.reve) formData.caracList["reve-actuel"] = duplicate(game.system.model.Actor.personnage.reve.reve)
formData.competences = await RdDUtility.loadCompendium('foundryvtt-reve-de-dragon.competences') formData.competences = await RdDUtility.loadCompendium('foundryvtt-reve-de-dragon.competences')
} }
if (formData.type == 'arme') { if (this.item.type == 'arme') {
formData.competences = await RdDUtility.loadCompendium('foundryvtt-reve-de-dragon.competences', it => RdDItemCompetence.isCompetenceArme(it)); formData.competences = await RdDUtility.loadCompendium('foundryvtt-reve-de-dragon.competences', it => RdDItemCompetence.isCompetenceArme(it));
console.log(formData.competences) console.log(formData.competences)
} }
if (formData.type == 'recettealchimique') { if (this.item.type == 'recettealchimique') {
RdDAlchimie.processManipulation(this.item, this.actor && this.actor.id); RdDAlchimie.processManipulation(this.item, this.actor && this.actor.id);
} }
if (formData.type == 'gemme') { if (this.item.type == 'gemme') {
formData.gemmeTypeList = RdDGemme.getGemmeTypeOptionList(); formData.gemmeTypeList = RdDGemme.getGemmeTypeOptionList();
RdDGemme.calculDataDerivees(this.item); RdDGemme.calculDataDerivees(this.item);
} }
if (formData.type == 'potion') { if (this.item.type == 'potion') {
if (this.dateUpdated) { if (this.dateUpdated) {
formData.system.prdate = this.dateUpdated; formData.system.prdate = this.dateUpdated;
this.dateUpdated = undefined; this.dateUpdated = undefined;
} }
RdDHerbes.updatePotionData(formData); RdDHerbes.updatePotionData(formData);
} }
if (formData.isOwned && formData.type == 'herbe' && (formData.system.categorie == 'Soin' || formData.system.categorie == 'Repos')) { if (formData.isOwned && this.item.type == 'herbe' && (formData.system.categorie == 'Soin' || formData.system.categorie == 'Repos')) {
formData.isIngredientPotionBase = true; formData.isIngredientPotionBase = true;
} }
if (this.item.type == 'sortreserve') {
const sortId = this.item.system.sortid;
formData.sort = formData.isOwned ? this.item.actor.items.get(sortId) : game.items.get(sortId);
}
formData.bonusCaseList = RdDItemSort.getBonusCaseList(formData, true); formData.bonusCaseList = RdDItemSort.getBonusCaseList(formData, true);
return formData; return formData;
@@ -197,7 +201,8 @@ export class RdDItemSheet extends ItemSheet {
}); });
html.find('.item-delete').click(async event => { html.find('.item-delete').click(async event => {
const li = RdDSheetUtility.getEventElement(event); const li = RdDSheetUtility.getEventElement(event);
RdDUtility.confirmerSuppression(this, li); const item = this.actor.getObjet(li.data("item-id"));
RdDUtility.confirmerSuppressionItem(this, item, li);
}); });
html.find('.item-vendre').click(async event => { html.find('.item-vendre').click(async event => {
const item = RdDSheetUtility.getItem(event, this.actor); const item = RdDSheetUtility.getItem(event, this.actor);

View File

@@ -36,7 +36,8 @@ export const defaultItemImg = {
nourritureboisson: "systems/foundryvtt-reve-de-dragon/icons/objets/provision_crue.webp", nourritureboisson: "systems/foundryvtt-reve-de-dragon/icons/objets/provision_crue.webp",
signedraconique: "systems/foundryvtt-reve-de-dragon/icons/tmr/signe_draconique.webp", signedraconique: "systems/foundryvtt-reve-de-dragon/icons/tmr/signe_draconique.webp",
gemme: "systems/foundryvtt-reve-de-dragon/icons/gemmes/almaze.webp", gemme: "systems/foundryvtt-reve-de-dragon/icons/gemmes/almaze.webp",
possession: "systems/foundryvtt-reve-de-dragon/icons/entites/possession2.webp" possession: "systems/foundryvtt-reve-de-dragon/icons/entites/possession2.webp",
sortreserve: "systems/foundryvtt-reve-de-dragon/icons/competence_oniros.webp",
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
@@ -145,24 +146,28 @@ export class RdDItem extends Item {
} }
getActionPrincipale(options = { warnIfNot: true }) { getActionPrincipale(options = { warnIfNot: true }) {
if (!this.isConteneur() && (this.system.quantite ?? 0) <= 0) { const warn = options.warnIfNot;
if (options.warnIfNot) { switch (this.type) {
case 'nourritureboisson': return this._actionOrWarnQuantiteZero(this.boisson ? 'Boire' : 'Manger', warn);
case 'potion': return this._actionOrWarnQuantiteZero('Boire', warn);
case 'livre': return this._actionOrWarnQuantiteZero('Lire', warn);
case 'conteneur': return this._actionOrWarnQuantiteZero('Ouvrir', warn);
case 'herbe': return this.isHerbeAPotion() ? this._actionOrWarnQuantiteZero('Décoction', warn) : undefined;
case 'queue': case 'ombre': return this.system.refoulement>0 ? 'Refouler' : undefined;
}
return undefined;
}
_actionOrWarnQuantiteZero(actionName, warn){
if ((this.system.quantite ?? 0) <= 0) {
if (warn) {
ui.notifications.warn(`Vous n'avez plus de ${this.name}.`); ui.notifications.warn(`Vous n'avez plus de ${this.name}.`);
} }
return undefined; return undefined;
} }
switch (this.type) { else {
case 'nourritureboisson': return this.boisson ? 'Boire' : 'Manger'; return actionName;
case 'potion': return 'Boire';
case 'livre': return 'Lire';
case 'conteneur': return 'Ouvrir';
} }
if (this.isHerbeAPotion()) { return 'Décoction'; }
if (options.warnIfNot) {
ui.notifications.warn(`Impossible d'utiliser un ${this.name}, aucune action associée définie.`);
}
return undefined;
} }
async diminuerQuantite(nombre, options = { diminuerQuantite: true, supprimerSiZero: false }) { async diminuerQuantite(nombre, options = { diminuerQuantite: true, supprimerSiZero: false }) {

103
module/migrations.js Normal file
View File

@@ -0,0 +1,103 @@
import { LOG_HEAD, SYSTEM_RDD } from "./constants.js";
class Migration {
get code() { return "sample"; }
get version() { return "0.0.0"; }
async migrate() { }
}
class _10_0_16_MigrationSortsReserve extends Migration {
get code() { return "creation-item-sort-reserve"; }
get version() { return "10.0.16"; }
async migrate() {
await game.actors
.filter((actor) => actor.type == "personnage")
.filter((actor) => actor.system.reve?.reserve?.list?.length ?? 0 > 0)
.forEach(async (actor) => {
const sortsReserve = actor.system.reve.reserve.list.map(this.conversionSortReserve);
console.log(LOG_HEAD + "Migration des sorts ", sortsReserve);
await actor.createEmbeddedDocuments("Item", sortsReserve, {
renderSheet: false,
});
await actor.update({'system.reve.reserve.list':[]})
});
}
conversionSortReserve(it) {
return {
type: 'sortreserve',
name: it.sort.name,
img: it.sort.img,
system: {
// ATTENTION, utilisation de data / _id possibles, encore présents pour les anciens sorts en réserve
sortid: it.sort._id,
draconic: it.sort.draconic,
ptreve: (it.sort.system ?? it.sort.data).ptreve_reel,
coord: it.coord,
heurecible: 'Vaisseau',
},
};
}
}
export class Migrations {
static getMigrations() {
return [
new _10_0_16_MigrationSortsReserve()
];
}
constructor() {
game.settings.register(SYSTEM_RDD, "systemMigrationVersion", {
name: "System Migration Version",
scope: "world",
config: false,
type: String,
default: "0.0.0",
});
}
migrate() {
const currentVersion = game.settings.get(
SYSTEM_RDD,
"systemMigrationVersion"
);
if (isNewerVersion(game.system.version, currentVersion)) {
const migrations = Migrations.getMigrations().filter(m => isNewerVersion(m.version, currentVersion));
// if (true) {
// const migrations = Migrations.getMigrations();
if (migrations.length > 0) {
migrations.sort((a, b) =>
isNewerVersion(a.version, b.version)
? 1
: isNewerVersion(b.version, a.version)
? -1
: 0
);
migrations.forEach(async (m) => {
ui.notifications.info(
`Executing migration ${m.code}: version ${currentVersion} is lower than ${m.version}`
);
await m.migrate();
});
ui.notifications.info(
`Migrations done, version will change to ${game.system.version}`
);
} else {
console.log(
LOG_HEAD +
`No migration needeed, version will change to ${game.system.version}`
);
}
game.settings.set(
SYSTEM_RDD,
"systemMigrationVersion",
game.system.version
);
} else {
console.log(LOG_HEAD + `No system version changed`);
}
}
}

View File

@@ -10,6 +10,7 @@ import { RdDResolutionTable } from "./rdd-resolution-table.js";
import { RdDRoll } from "./rdd-roll.js"; import { RdDRoll } from "./rdd-roll.js";
import { RdDRollTables } from "./rdd-rolltables.js"; import { RdDRollTables } from "./rdd-rolltables.js";
import { ReglesOptionelles } from "./regles-optionelles.js"; import { ReglesOptionelles } from "./regles-optionelles.js";
import { STATUSES } from "./status-effects.js";
/* -------------------------------------------- */ /* -------------------------------------------- */
const premierRoundInit = [ const premierRoundInit = [
@@ -1185,7 +1186,7 @@ export class RdDCombat {
defenderRoll.show.recul = 'encaisse'; defenderRoll.show.recul = 'encaisse';
} else if (rollRecul.rolled.isETotal || this._isReculCauseChute(impact)) { } else if (rollRecul.rolled.isETotal || this._isReculCauseChute(impact)) {
defenderRoll.show.recul = 'chute'; defenderRoll.show.recul = 'chute';
await this.defender.setStatusEffect("EFFECT.StatusProne", true); await this.defender.setEffect(STATUSES.StatusProne, true);
} }
else { else {
defenderRoll.show.recul = 'recul'; defenderRoll.show.recul = 'recul';

View File

@@ -35,6 +35,7 @@ import { RdDDice } from "./rdd-dice.js";
import { RdDPossession } from "./rdd-possession.js"; import { RdDPossession } from "./rdd-possession.js";
import { RdDSigneDraconiqueItemSheet } from "./item-signedraconique-sheet.js"; import { RdDSigneDraconiqueItemSheet } from "./item-signedraconique-sheet.js";
import { Misc } from "./misc.js"; import { Misc } from "./misc.js";
import { Migrations } from './migrations.js';
/* -------------------------------------------- */ /* -------------------------------------------- */
/* Foundry VTT Initialization */ /* Foundry VTT Initialization */
@@ -183,7 +184,7 @@ Hooks.once("init", async function () {
Items.registerSheet(SYSTEM_RDD, RdDItemSheet, { Items.registerSheet(SYSTEM_RDD, RdDItemSheet, {
types: ["arme", "armure", "objet", "arme", "armure", "conteneur", "competence", "sort", "herbe", "ingredient", "livre", "potion", "munition", "rencontresTMR", "queue", "ombre", "souffle", types: ["arme", "armure", "objet", "arme", "armure", "conteneur", "competence", "sort", "herbe", "ingredient", "livre", "potion", "munition", "rencontresTMR", "queue", "ombre", "souffle",
"tete", "competencecreature", "tarot", "monnaie", "nombreastral", "tache", "meditation", "casetmr", "recettealchimique", "gemme", "tete", "competencecreature", "tarot", "monnaie", "nombreastral", "tache", "meditation", "casetmr", "recettealchimique", "gemme",
"musique", "chant", "danse", "jeu", "recettecuisine", "maladie", "poison", "oeuvre", "nourritureboisson", "possession"], makeDefault: true "musique", "chant", "danse", "jeu", "recettecuisine", "maladie", "poison", "oeuvre", "nourritureboisson", "possession", "sortreserve"], makeDefault: true
}); });
CONFIG.Combat.documentClass = RdDCombatManager; CONFIG.Combat.documentClass = RdDCombatManager;
@@ -245,6 +246,9 @@ function registerUsageCount( registerKey ) {
/* -------------------------------------------- */ /* -------------------------------------------- */
Hooks.once("ready", async function () { Hooks.once("ready", async function () {
await migrationPngWebp_1_5_34() await migrationPngWebp_1_5_34()
if (Misc.isUniqueConnectedGM()) {
new Migrations().migrate();
}
StatusEffects.onReady(); StatusEffects.onReady();
RdDHerbes.initializeHerbes(); RdDHerbes.initializeHerbes();

View File

@@ -26,7 +26,7 @@ export class RdDSheetUtility {
destId: destItemId, destId: destItemId,
targetActorId: actorId, targetActorId: actorId,
itemId: item.id, itemId: item.id,
sourceActorId: item.actor.id, sourceActorId: item.actor?.id,
srcId: objetVersConteneur[item.id], srcId: objetVersConteneur[item.id],
onEnleverConteneur: () => { delete objetVersConteneur[item.id]; }, onEnleverConteneur: () => { delete objetVersConteneur[item.id]; },
onAjouterDansConteneur: (itemId, conteneurId) => { objetVersConteneur[itemId] = conteneurId; } onAjouterDansConteneur: (itemId, conteneurId) => { objetVersConteneur[itemId] = conteneurId; }

View File

@@ -1,4 +1,3 @@
import { SYSTEM_SOCKET_ID } from "./constants.js";
import { RollDataAjustements } from "./rolldata-ajustements.js"; import { RollDataAjustements } from "./rolldata-ajustements.js";
import { RdDUtility } from "./rdd-utility.js"; import { RdDUtility } from "./rdd-utility.js";
import { TMRUtility } from "./tmr-utility.js"; import { TMRUtility } from "./tmr-utility.js";
@@ -16,6 +15,7 @@ import { Misc } from "./misc.js";
import { HtmlUtility } from "./html-utility.js"; import { HtmlUtility } from "./html-utility.js";
import { ReglesOptionelles } from "./regles-optionelles.js"; import { ReglesOptionelles } from "./regles-optionelles.js";
import { RdDDice } from "./rdd-dice.js"; import { RdDDice } from "./rdd-dice.js";
import { STATUSES } from "./status-effects.js";
/* -------------------------------------------- */ /* -------------------------------------------- */
export class RdDTMRDialog extends Dialog { export class RdDTMRDialog extends Dialog {
@@ -55,7 +55,6 @@ export class RdDTMRDialog extends Dialog {
this.fatigueParCase = this.viewOnly || !ReglesOptionelles.isUsing("appliquer-fatigue") ? 0 : this.actor.getTMRFatigue(); this.fatigueParCase = this.viewOnly || !ReglesOptionelles.isUsing("appliquer-fatigue") ? 0 : this.actor.getTMRFatigue();
this.cumulFatigue = 0; this.cumulFatigue = 0;
this.loadRencontres(); this.loadRencontres();
this.loadSortsReserve();
this.loadCasesSpeciales(); this.loadCasesSpeciales();
this.allTokens = []; this.allTokens = [];
this.rencontreState = 'aucune'; this.rencontreState = 'aucune';
@@ -81,9 +80,16 @@ export class RdDTMRDialog extends Dialog {
this.casesSpeciales = this.actor.items.filter(item => Draconique.isCaseTMR(item)); this.casesSpeciales = this.actor.items.filter(item => Draconique.isCaseTMR(item));
} }
/* -------------------------------------------- */ get sortsReserve() {
loadSortsReserve() { return this.actor.itemTypes['sortreserve'];
this.sortsReserves = this.actor.system.reve.reserve.list; }
getSortsReserve(coord) {
return this.actor.itemTypes['sortreserve'].filter(// Reserve sur une case fleuve ou normale
TMRUtility.getTMR(coord).type == 'fleuve'
? it => TMRUtility.getTMR(it.system.coord).type == 'fleuve'
: it => it.system.coord == coord
);
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
@@ -100,7 +106,7 @@ export class RdDTMRDialog extends Dialog {
/* -------------------------------------------- */ /* -------------------------------------------- */
_createTokens() { _createTokens() {
if (!this.isDemiReveCache()){ if (!this.isDemiReveCache()) {
this.demiReve = this._tokenDemiReve(); this.demiReve = this._tokenDemiReve();
this._trackToken(this.demiReve); this._trackToken(this.demiReve);
} }
@@ -117,7 +123,6 @@ export class RdDTMRDialog extends Dialog {
updateTokens() { updateTokens() {
this._removeTokens(t => true); this._removeTokens(t => true);
this.loadRencontres(); this.loadRencontres();
this.loadSortsReserve();
this.loadCasesSpeciales(); this.loadCasesSpeciales();
this._createTokens(); this._createTokens();
} }
@@ -136,7 +141,7 @@ export class RdDTMRDialog extends Dialog {
return this.rencontresExistantes.map(it => this._tokenRencontre(it)); return this.rencontresExistantes.map(it => this._tokenRencontre(it));
} }
_getTokensSortsReserve() { _getTokensSortsReserve() {
return this.sortsReserves.map(it => this._tokenSortEnReserve(it)); return this.actor.itemTypes['sortreserve'].map(it => this._tokenSortEnReserve(it));
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
@@ -148,8 +153,8 @@ export class RdDTMRDialog extends Dialog {
const draconique = Draconique.get(caseData.system.specific); const draconique = Draconique.get(caseData.system.specific);
return draconique?.token(this.pixiTMR, caseData, () => caseData.system.coord); return draconique?.token(this.pixiTMR, caseData, () => caseData.system.coord);
} }
_tokenSortEnReserve(sortEnReserve) { _tokenSortEnReserve(sortReserve) {
return EffetsDraconiques.sortReserve.token(this.pixiTMR, sortEnReserve.sort, () => sortEnReserve.coord); return EffetsDraconiques.sortReserve.token(this.pixiTMR, sortReserve, () => sortReserve.system.coord);
} }
_tokenDemiReve() { _tokenDemiReve() {
@@ -254,9 +259,9 @@ export class RdDTMRDialog extends Dialog {
let tmrpos = document.getElementById("tmr-pos"); let tmrpos = document.getElementById("tmr-pos");
if (this.isDemiReveCache()) { if (this.isDemiReveCache()) {
tmrpos.innerHTML = '?? (' + TMRUtility.getTMRType(coord) + ')'; tmrpos.innerHTML = `?? ( ${ TMRUtility.getTMRType(coord)})`;
} else { } else {
tmrpos.innerHTML = coord + " (" + TMRUtility.getTMRLabel(coord) + ")"; tmrpos.innerHTML = `${coord} ( ${TMRUtility.getTMRLabel(coord)})`;
} }
let etat = document.getElementById("tmr-etatgeneral-value"); let etat = document.getElementById("tmr-etatgeneral-value");
@@ -272,15 +277,16 @@ export class RdDTMRDialog extends Dialog {
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
close() { async close() {
if ( this.actor.tmrApp ) { if (this.actor.tmrApp) {
this.actor.tmrApp = undefined; // Cleanup reference this.actor.tmrApp = undefined; // Cleanup reference
if ( !this.viewOnly ) { if (!this.viewOnly) {
this.actor.setStatusEffect("EFFECT.StatusDemiReve", false); await this.actor.setEffect(STATUSES.StatusDemiReve, false)
this._tellToGM(this.actor.name + " a quitté les terres médianes"); this._tellToGM(this.actor.name + " a quitté les terres médianes");
} }
this.actor.santeIncDec("fatigue", this.cumulFatigue).then(super.close()); // moving 1 cell costs 1 fatigue await this.actor.santeIncDec("fatigue", this.cumulFatigue)
} }
await super.close(); // moving 1 cell costs 1 fatigue
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
@@ -316,11 +322,11 @@ export class RdDTMRDialog extends Dialog {
this.currentRencontre.graphics = []; // Keep track of rectangles to delete it this.currentRencontre.graphics = []; // Keep track of rectangles to delete it
this.currentRencontre.locList = duplicate(listCoordTMR); // And track of allowed location this.currentRencontre.locList = duplicate(listCoordTMR); // And track of allowed location
for (let coordTMR of listCoordTMR) { for (let coordTMR of listCoordTMR) {
let rect = this._getCaseRectangleCoord(coordTMR); const rect = this._getCaseRectangleCoord(coordTMR);
var rectDraw = new PIXI.Graphics(); const rectDraw = new PIXI.Graphics();
rectDraw.beginFill(0xFFFF00, 0.3); rectDraw.beginFill(0xffff00, 0.3);
// set the line style to have a width of 5 and set the color to red // set the line style to have a width of 5 and set the color to red
rectDraw.lineStyle(5, 0xFF0000); rectDraw.lineStyle(5, 0xff0000);
// draw a rectangle // draw a rectangle
rectDraw.drawRect(rect.x, rect.y, rect.w, rect.h); rectDraw.drawRect(rect.x, rect.y, rect.w, rect.h);
this.pixiApp.stage.addChild(rectDraw); this.pixiApp.stage.addChild(rectDraw);
@@ -336,19 +342,13 @@ export class RdDTMRDialog extends Dialog {
/* -------------------------------------------- */ /* -------------------------------------------- */
async choisirCasePortee(coord, portee) { async choisirCasePortee(coord, portee) {
if (this.actor.isTMRCache())
{
return;
}
// Récupère la liste des cases à portées // Récupère la liste des cases à portées
let locList = TMRUtility.getTMRPortee(coord, portee); this.colorierZoneRencontre(TMRUtility.getTMRPortee(coord, portee));
this.colorierZoneRencontre(locList);
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
async choisirCaseType(type) { async choisirCaseType(type) {
const locList = TMRUtility.filterTMR(it => it.type == type).map(it => it.coord); this.colorierZoneRencontre(TMRUtility.filterTMR(it => it.type == type).map(it => it.coord));
this.colorierZoneRencontre(locList);
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
@@ -573,6 +573,9 @@ export class RdDTMRDialog extends Dialog {
/* -------------------------------------------- */ /* -------------------------------------------- */
async manageTmrInnaccessible(tmr) { async manageTmrInnaccessible(tmr) {
if (!tmr) {
return await this.actor.reinsertionAleatoire('Sortie de carte');
}
const caseTmrInnaccessible = this.casesSpeciales.find(c => EffetsDraconiques.isInnaccessible(c, tmr.coord)); const caseTmrInnaccessible = this.casesSpeciales.find(c => EffetsDraconiques.isInnaccessible(c, tmr.coord));
if (caseTmrInnaccessible) { if (caseTmrInnaccessible) {
return await this.actor.reinsertionAleatoire(caseTmrInnaccessible.name); return await this.actor.reinsertionAleatoire(caseTmrInnaccessible.name);
@@ -774,9 +777,8 @@ export class RdDTMRDialog extends Dialog {
/* -------------------------------------------- */ /* -------------------------------------------- */
async declencheSortEnReserve(coord) { async declencheSortEnReserve(coord) {
let sorts = this.getSortsReserve(coord);
let sortsEnCoord = TMRUtility.getSortsReserve(this.sortsReserves, coord); if (sorts.length > 0) {
if (sortsEnCoord.length > 0) {
if (EffetsDraconiques.isSortReserveImpossible(this.actor)) { if (EffetsDraconiques.isSortReserveImpossible(this.actor)) {
ui.notifications.error("Une queue ou un souffle vous empèche de déclencher de sort!"); ui.notifications.error("Une queue ou un souffle vous empèche de déclencher de sort!");
return; return;
@@ -784,8 +786,8 @@ export class RdDTMRDialog extends Dialog {
if (!EffetsDraconiques.isUrgenceDraconique(this.actor) && if (!EffetsDraconiques.isUrgenceDraconique(this.actor) &&
(EffetsDraconiques.isReserveEnSecurite(this.actor) || this.isReserveExtensible(coord))) { (EffetsDraconiques.isReserveEnSecurite(this.actor) || this.isReserveExtensible(coord))) {
let msg = "Vous êtes sur une case avec un Sort en Réserve. Grâce à votre Tête <strong>Reserve en Sécurité</strong> ou <strong>Réserve Exensible</strong>, vous pouvez contrôler le déclenchement. Cliquez si vous souhaitez le déclencher : <ul>"; let msg = "Vous êtes sur une case avec un Sort en Réserve. Grâce à votre Tête <strong>Reserve en Sécurité</strong> ou <strong>Réserve Exensible</strong>, vous pouvez contrôler le déclenchement. Cliquez si vous souhaitez le déclencher : <ul>";
for (let sortReserve of sortsEnCoord) { for (let sort of sorts) {
msg += "<li><a class='chat-card-button' id='sort-reserve' data-actor-id='" + this.actor._id + "' data-tmr-coord='" + coord + "' data-sort-id='" + sortReserve.sort._id + "'>" + sortReserve.sort.name + "</a></li>"; msg += `<li><a class="chat-card-button declencher-sort-reserve" data-actor-id="${this.actor.id}" data-tmr-coord="${coord}" data-sort-id='${sort.id}">${sort.name}</a></li>`;
} }
msg += "</ol>"; msg += "</ol>";
ChatMessage.create({ ChatMessage.create({
@@ -794,33 +796,35 @@ export class RdDTMRDialog extends Dialog {
}); });
return; return;
} }
await this.processSortReserve(sortsEnCoord[0]); await this.processSortReserve(sorts[0]);
} }
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
lancerSortEnReserve(coord, sortId) { lancerSortEnReserve(coord, sortId) {
let sortEnCoord = TMRUtility.getSortsReserve(this.sortsReserves, coord); let sorts = this.getSortsReserve(coord);
let sortReserve = sortEnCoord.find(sortReserve => sortReserve.sort._id == sortId); let sort = sorts.find(it => it.id == sortId);
if (sortReserve) { if (sort) {
this.processSortReserve(sortReserve); this.processSortReserve(sort);
} else { } else {
ChatMessage.create({ ChatMessage.create({
content: "Une erreur est survenue : impossible de récupérer le sort en réserve demandé.", content:
whisper: ChatMessage.getWhisperRecipients(game.user.name) "Une erreur est survenue : impossible de récupérer le sort en réserve demandé.",
whisper: ChatMessage.getWhisperRecipients(game.user.name),
}); });
} }
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
async processSortReserve(sortReserve) { async processSortReserve(sortReserve) {
await this.actor.deleteSortReserve(sortReserve); await this.actor.deleteEmbeddedDocuments('Item', [sortReserve.id]);
//this.updateSortReserve(); console.log("declencheSortEnReserve", sortReserve);
console.log("declencheSortEnReserve", sortReserve) this._tellToUserAndGM(`Vous avez déclenché
this._tellToUserAndGM(`Vous avez déclenché le sort en réserve <strong> ${sortReserve.sort.name}</strong> ${sortReserve.system.echectotal ? "<strong>l'échec total!</strong>" : "le sort"}
avec ${sortReserve.sort.data.ptreve_reel} points de Rêve en réserve <strong>${sortReserve.name}</strong>
en ${sortReserve.coord} (${TMRUtility.getTMRLabel(sortReserve.coord)}) avec ${sortReserve.system.ptreve} points de Rêve
`); en ${sortReserve.system.coord} (${TMRUtility.getTMRLabel(sortReserve.system.coord)}).
L'heure ciblée est ${sortReserve.system.heurecible}`);
this.close(); this.close();
} }
@@ -926,7 +930,7 @@ export class RdDTMRDialog extends Dialog {
const isInArea = this.rencontreState == 'aucune' const isInArea = this.rencontreState == 'aucune'
? (this.isTerreAttache(targetCoord) || this.isConnaissanceFleuve(currentCoord, targetCoord) || TMRUtility.distanceOddq(fromOddq, toOddq) <= 1) ? (this.isTerreAttache(targetCoord) || this.isConnaissanceFleuve(currentCoord, targetCoord) || TMRUtility.distanceOddq(fromOddq, toOddq) <= 1)
: this.currentRencontre?.locList.find(coord => coord == targetCoord) ?? false : this.currentRencontre?.locList?.find(coord => coord == targetCoord) ?? false
if (isInArea) { if (isInArea) {
switch (this.rencontreState) { switch (this.rencontreState) {
case 'aucune': return 'normal'; case 'aucune': return 'normal';
@@ -994,6 +998,7 @@ export class RdDTMRDialog extends Dialog {
/* -------------------------------------------- */ /* -------------------------------------------- */
async postRencontre(tmr) { async postRencontre(tmr) {
if (!(this.viewOnly || this.currentRencontre)) { if (!(this.viewOnly || this.currentRencontre)) {
// TODO: vérifier que la méthode s'arrête en cas de non-maîtrise
await this.manageCaseHumide(tmr); await this.manageCaseHumide(tmr);
await this.conquerirCiteFermee(tmr); await this.conquerirCiteFermee(tmr);
await this.purifierPeriple(tmr); await this.purifierPeriple(tmr);
@@ -1019,7 +1024,7 @@ export class RdDTMRDialog extends Dialog {
let x = origEvent.clientX - canvasRect.left; let x = origEvent.clientX - canvasRect.left;
let y = origEvent.clientY - canvasRect.top; let y = origEvent.clientY - canvasRect.top;
let col = Math.floor(x / tmrConstants.cellw); // [From 0 -> 12] let col = Math.floor(x / tmrConstants.cellw); // [From 0 -> 12]
y -= (col % 2 == 0) ? tmrConstants.col1_y : tmrConstants.col2_y; y -= col % 2 == 0 ? tmrConstants.col1_y : tmrConstants.col2_y;
let row = Math.floor(y / tmrConstants.cellh); // [From 0 -> 14] let row = Math.floor(y / tmrConstants.cellh); // [From 0 -> 14]
return { col: col, row: row }; return { col: col, row: row };
} }

View File

@@ -121,8 +121,10 @@ export class RdDUtility {
'systems/foundryvtt-reve-de-dragon/templates/actor-sheet-oeuvre-partial.html', 'systems/foundryvtt-reve-de-dragon/templates/actor-sheet-oeuvre-partial.html',
'systems/foundryvtt-reve-de-dragon/templates/actor-liste-blessures-partial.html', 'systems/foundryvtt-reve-de-dragon/templates/actor-liste-blessures-partial.html',
'systems/foundryvtt-reve-de-dragon/templates/actor-blessure-partial.html', 'systems/foundryvtt-reve-de-dragon/templates/actor-blessure-partial.html',
'systems/foundryvtt-reve-de-dragon/templates/actor-sheet-queues.html',
// Conteneur/item in Actor sheet // Conteneur/item in Actor sheet
'systems/foundryvtt-reve-de-dragon/templates/actor-sheet-inventaire.html', 'systems/foundryvtt-reve-de-dragon/templates/actor-sheet-inventaire.html',
'systems/foundryvtt-reve-de-dragon/templates/actor-sheet-item-queue.html',
'systems/foundryvtt-reve-de-dragon/templates/actor-sheet-inventaire-item.html', 'systems/foundryvtt-reve-de-dragon/templates/actor-sheet-inventaire-item.html',
"systems/foundryvtt-reve-de-dragon/templates/actor-sheet-inventaire-monnaie.html", "systems/foundryvtt-reve-de-dragon/templates/actor-sheet-inventaire-monnaie.html",
'systems/foundryvtt-reve-de-dragon/templates/actor-sheet-liens-animaux.html', 'systems/foundryvtt-reve-de-dragon/templates/actor-sheet-liens-animaux.html',
@@ -130,6 +132,7 @@ export class RdDUtility {
'systems/foundryvtt-reve-de-dragon/templates/actor-sheet-liens-vehicules.html', 'systems/foundryvtt-reve-de-dragon/templates/actor-sheet-liens-vehicules.html',
'systems/foundryvtt-reve-de-dragon/templates/actor-sheet-editor-notes-mj.html', 'systems/foundryvtt-reve-de-dragon/templates/actor-sheet-editor-notes-mj.html',
//Items //Items
'systems/foundryvtt-reve-de-dragon/templates/header-item.html',
'systems/foundryvtt-reve-de-dragon/templates/item-competence-sheet.html', 'systems/foundryvtt-reve-de-dragon/templates/item-competence-sheet.html',
'systems/foundryvtt-reve-de-dragon/templates/item-competencecreature-sheet.html', 'systems/foundryvtt-reve-de-dragon/templates/item-competencecreature-sheet.html',
'systems/foundryvtt-reve-de-dragon/templates/item-arme-sheet.html', 'systems/foundryvtt-reve-de-dragon/templates/item-arme-sheet.html',
@@ -390,6 +393,7 @@ export class RdDUtility {
formData.possessions = this.arrayOrEmpty(formData.itemsByType['possession']); formData.possessions = this.arrayOrEmpty(formData.itemsByType['possession']);
formData.maladiesPoisons = formData.maladies.concat(formData.poisons); formData.maladiesPoisons = formData.maladies.concat(formData.poisons);
formData.competences = (formData.itemsByType.competence ?? []).concat(formData.itemsByType.competencecreature ?? []); formData.competences = (formData.itemsByType.competence ?? []).concat(formData.itemsByType.competencecreature ?? []);
formData.sortsReserve = this.arrayOrEmpty(formData.itemsByType['sortreserve']);
} }
static filterEquipementParType(formData) { static filterEquipementParType(formData) {
@@ -690,12 +694,13 @@ export class RdDUtility {
actor.tmrApp.positionnerDemiReve(coord); actor.tmrApp.positionnerDemiReve(coord);
}); });
// Gestion spécifique des sorts en réserve multiples (ie têtes) // Gestion spécifique des sorts en réserve multiples (ie têtes)
html.on("click", '#sort-reserve', event => { html.on("click", '.declencher-sort-reserve', event => {
let coord = event.currentTarget.attributes['data-tmr-coord'].value; let coord = event.currentTarget.attributes['data-tmr-coord'].value;
let sortId = event.currentTarget.attributes['data-sort-id'].value; let sortId = event.currentTarget.attributes['data-sort-id'].value;
let actorId = event.currentTarget.attributes['data-actor-id'].value; let actorId = event.currentTarget.attributes['data-actor-id'].value;
let actor = game.actors.get(actorId); let actor = game.actors.get(actorId);
actor.tmrApp.lancerSortEnReserve(coord, sortId); actor.tmrApp.lancerSortEnReserve(coord, sortId);
// TODO: supprimer le message?
}); });
// gestion bouton tchat Possession // gestion bouton tchat Possession
@@ -828,21 +833,17 @@ export class RdDUtility {
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
static confirmerSuppressionSubacteur(actorSheet, li) { static confirmerSuppression(sheet, htmlToDelete, options) {
let actorId = li.data("actor-id"); const d = new Dialog({
let actor = game.actors.get(actorId); title: options.title ?? 'Confirmer la suppression',
let msgTxt = "<p>Etes vous certain de vouloir supprimer le lien vers ce véhicule/monture/suivant : " + actor.name + " ?</p>"; content: `<p>Etes vous certain de vouloir supprimer ${options.supprimer ?? 'cet objet'} ?</p>`,
let d = new Dialog({
title: "Confirmer la suppression du lien",
content: msgTxt,
buttons: { buttons: {
delete: { delete: {
icon: '<i class="fas fa-check"></i>', icon: '<i class="fas fa-check"></i>',
label: "Supprimer le lien", label: options.deleteLabel ?? 'Supprimer',
callback: () => { callback: () => {
console.log("Delete : ", actorId); options.onDelete();
actorSheet.actor.removeSubacteur(actorId); RdDUtility.slideOnDelete(sheet, htmlToDelete);
li.slideUp(200, () => actorSheet.render(false));
} }
}, },
cancel: { cancel: {
@@ -856,11 +857,21 @@ export class RdDUtility {
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
static async confirmerSuppression(actorSheet, li) { static confirmerSuppressionSubacteur(sheet, subActor, htmlToDelete) {
let itemId = li.data("item-id"); RdDUtility.confirmerSuppression(sheet, htmlToDelete,{
let objet = actorSheet.actor.getObjet(itemId); supprimer: "le lien vers le véhicule/monture/suivant : " + subActor.name,
deleteLabel: "Supprimer le lien",
onDelete: () => {
console.log("Delete : ", subActor.id);
sheet.actor.removeSubacteur(subActor.id);
}
})
}
if (objet.type == 'monnaie' && Monnaie.isSystemMonnaie(objet)) { /* -------------------------------------------- */
static async confirmerSuppressionItem(sheet, item, htmlToDelete) {
const itemId = item.id;
if (Monnaie.isSystemMonnaie(item, sheet.actor.items)) {
ui.notifications.warn("Suppression des monnaies de base impossible"); ui.notifications.warn("Suppression des monnaies de base impossible");
return; return;
} }
@@ -872,8 +883,8 @@ export class RdDUtility {
label: "Supprimer l'objet", label: "Supprimer l'objet",
callback: () => { callback: () => {
console.log("Delete : ", itemId); console.log("Delete : ", itemId);
actorSheet.actor.deleteEmbeddedDocuments('Item', [itemId]); sheet.actor.deleteEmbeddedDocuments('Item', [itemId], { renderSheet: false });
li.slideUp(200, () => actorSheet.render(false)); RdDUtility.slideOnDelete(sheet, htmlToDelete);
} }
}, },
cancel: { cancel: {
@@ -881,15 +892,15 @@ export class RdDUtility {
label: "Annuler" label: "Annuler"
} }
} }
if (objet.type == 'conteneur' && objet.system.contenu.length > 0) { if (item.type == 'conteneur' && item.system.contenu.length > 0) {
msgTxt += "<br>Ce conteneur n'est pas vide. Choisissez l'option de suppression"; msgTxt += "<br>Ce conteneur n'est pas vide. Choisissez l'option de suppression";
buttons['deleteall'] = { buttons['deleteall'] = {
icon: '<i class="fas fa-check"></i>', icon: '<i class="fas fa-check"></i>',
label: "Supprimer le conteneur et tout son contenu", label: "Supprimer le conteneur et tout son contenu",
callback: () => { callback: () => {
console.log("Delete : ", itemId); console.log("Delete : ", itemId);
actorSheet.actor.deleteAllConteneur(itemId); sheet.actor.deleteAllConteneur(itemId, { renderSheet: false });
li.slideUp(200, () => actorSheet.render(false)); RdDUtility.slideOnDelete(sheet, htmlToDelete);
} }
} }
} }
@@ -903,6 +914,10 @@ export class RdDUtility {
d.render(true); d.render(true);
} }
static slideOnDelete(sheet, htmlToDelete) {
return htmlToDelete.slideUp(200, () => sheet.render(false));
}
/* -------------------------------------------- */ /* -------------------------------------------- */
static afficherHeuresChanceMalchance(heureNaissance) { static afficherHeuresChanceMalchance(heureNaissance) {
if (game.user.isGM) { if (game.user.isGM) {

View File

@@ -1,26 +1,41 @@
import { SYSTEM_RDD } from "./constants.js"; import { SYSTEM_RDD } from "./constants.js";
const rddStatusEffects = [ export const STATUSES = {
{ rdd: true, id: 'stun', label: 'EFFECT.StatusStunned', icon: 'icons/svg/stoned.svg', "duration.rounds": 1 }, StatusStunned : 'stun',
{ rdd: true, id: 'bleeding', label: 'EFFECT.StatusBleeding', icon: 'icons/svg/blood.svg' }, StatusBleeding: 'bleeding',
{ rdd: true, id: 'prone', label: 'EFFECT.StatusProne', icon: 'icons/svg/falling.svg' }, StatusProne: 'prone',
{ rdd: true, id: 'grappling', tint: '#33cc33', label: 'EFFECT.StatusGrappling', icon: 'systems/foundryvtt-reve-de-dragon/icons/competence_corps_a_corps.webp' }, StatusGrappling: 'grappling',
{ rdd: true, id: 'grappled', tint: '#ff9900', label: 'EFFECT.StatusGrappled', icon: 'systems/foundryvtt-reve-de-dragon/icons/competence_corps_a_corps.webp' }, StatusGrappled: 'grappled',
{ rdd: true, id: 'restrain', label: 'EFFECT.StatusRestrained', icon: 'icons/svg/net.svg' }, StatusRestrained: 'restrain',
{ rdd: true, id: 'unconscious', label: 'EFFECT.StatusUnconscious', icon: 'icons/svg/unconscious.svg' }, StatusUnconscious: 'unconscious',
{ rdd: true, id: 'blind', label: 'EFFECT.StatusBlind', icon: 'icons/svg/blind.svg' }, StatusBlind: 'blind',
{ rdd: true, id: 'comma', label: 'EFFECT.StatusComma', icon: 'icons/svg/skull.svg' }, StatusComma: 'comma',
{ rdd: true, id: 'dead', label: 'EFFECT.StatusDead', icon: 'icons/svg/skull.svg' }, StatusDead: 'dead',
{ rdd: true, id: 'demi-reve', label: 'EFFECT.StatusDemiReve', icon: 'systems/foundryvtt-reve-de-dragon/icons/heures/hd12.svg' } StatusDemiReve: 'demi-reve',
]; }
const demiReveStatusEffect = rddStatusEffects.find(it => it.label == 'EFFECT.StatusDemiReve');
const statusDemiSurprise = new Set(['EFFECT.StatusStunned', 'EFFECT.StatusProne', 'EFFECT.StatusRestrain']); const rddStatusEffects = [
const statusSurpriseTotale = new Set(['EFFECT.StatusUnconscious', 'EFFECT.StatusBlind', 'EFFECT.StatusComma']); { rdd: true, id: STATUSES.StatusStunned, label: 'EFFECT.StatusStunned', icon: 'icons/svg/stoned.svg', "duration.rounds": 1 },
{ rdd: true, id: STATUSES.StatusBleeding, label: 'EFFECT.StatusBleeding', icon: 'icons/svg/blood.svg' },
{ rdd: true, id: STATUSES.StatusProne, label: 'EFFECT.StatusProne', icon: 'icons/svg/falling.svg' },
{ rdd: true, id: STATUSES.StatusGrappling, tint: '#33cc33', label: 'EFFECT.StatusGrappling', icon: 'systems/foundryvtt-reve-de-dragon/icons/competence_corps_a_corps.webp' },
{ rdd: true, id: STATUSES.StatusGrappled, tint: '#ff9900', label: 'EFFECT.StatusGrappled', icon: 'systems/foundryvtt-reve-de-dragon/icons/competence_corps_a_corps.webp' },
{ rdd: true, id: STATUSES.StatusRestrained, label: 'EFFECT.StatusRestrained', icon: 'icons/svg/net.svg' },
{ rdd: true, id: STATUSES.StatusUnconscious, label: 'EFFECT.StatusUnconscious', icon: 'icons/svg/unconscious.svg' },
{ rdd: true, id: STATUSES.StatusBlind, label: 'EFFECT.StatusBlind', icon: 'icons/svg/blind.svg' },
{ rdd: true, id: STATUSES.StatusComma, label: 'EFFECT.StatusComma', icon: 'icons/svg/skull.svg' },
{ rdd: true, id: STATUSES.StatusDead, label: 'EFFECT.StatusDead', icon: 'icons/svg/skull.svg' },
{ rdd: true, id: STATUSES.StatusDemiReve, label: 'EFFECT.StatusDemiReve', icon: 'systems/foundryvtt-reve-de-dragon/icons/heures/hd12.svg' }
];
const demiReveStatusEffect = rddStatusEffects.find(it => it.id == STATUSES.StatusDemiReve);
const statusDemiSurprise = [STATUSES.StatusStunned, STATUSES.StatusProne, STATUSES.StatusRestrained];
const statusSurpriseTotale = [STATUSES.StatusUnconscious, STATUSES.StatusBlind, STATUSES.StatusComma];
export class StatusEffects { export class StatusEffects {
static onReady() { static onReady() {
const rddStatusIds = rddStatusEffects.map(it => it.id); const rddStatusIds = rddStatusEffects.map(it => it.id);
rddStatusEffects.forEach(it => it.flags = { core: { statusId: it.id } });
const defaultStatusEffectIds = CONFIG.statusEffects.map(it => it.id); const defaultStatusEffectIds = CONFIG.statusEffects.map(it => it.id);
game.settings.register(SYSTEM_RDD, "use-status-effects", { game.settings.register(SYSTEM_RDD, "use-status-effects", {
name: "use-status-effects", name: "use-status-effects",
@@ -47,40 +62,36 @@ export class StatusEffects {
static valeurSurprise(effect, isCombat) { static valeurSurprise(effect, isCombat) {
// const id = StatusEffects.statusId(effect); // const id = StatusEffects.statusId(effect);
if (statusSurpriseTotale.has(effect.label)) { if (statusSurpriseTotale.includes(effect.flags?.core?.statusId)) {
return 2; return 2;
} }
return statusDemiSurprise.has(effect.label) || (isCombat && effect.label == demiReveStatusEffect.label) ? 1 : 0; return statusDemiSurprise.includes(effect.flags?.core?.statusId) || (isCombat && effect.flags?.core?.statusId == STATUSES.StatusDemiReve) ? 1 : 0;
}
static setMandatoryRdd() {
CONFIG.statusEffects.filter(it => statusDemiSurprise.has(it.id) || statusSurpriseTotale.has(it.id))
.forEach(it => it.rdd = true);
} }
static _getUseStatusEffects() { static _getUseStatusEffects() {
const setting = game.settings.get(SYSTEM_RDD, "use-status-effects"); const setting = game.settings.get(SYSTEM_RDD, "use-status-effects");
return setting ? new Set(setting.split(',')) : new Set(); return setting ? setting.split(',') : [];
} }
static _setUseStatusEffects(useStatusEffects) { static _setUseStatusEffects(statusIds) {
if (game.user.isGM) { if (game.user.isGM) {
game.settings.set(SYSTEM_RDD, "use-status-effects", StatusEffects._toSetting(useStatusEffects)); game.settings.set(SYSTEM_RDD, "use-status-effects", StatusEffects._toSetting(statusIds));
} }
for (let effect of CONFIG.RDD.allEffects) { for (let effect of CONFIG.RDD.allEffects) {
effect.active = effect.rdd || useStatusEffects.has(effect.id); effect.active = effect.rdd || statusIds.includes(effect.flags?.core?.statusId);
} }
CONFIG.statusEffects = CONFIG.RDD.allEffects.filter(it => it.active); CONFIG.statusEffects = CONFIG.RDD.allEffects.filter(it => it.active);
} }
static _toSetting(useStatusEffects) { static _toSetting(statusIds) {
return Array.from(useStatusEffects).join(); return statusIds.join();
} }
static status(label) { static status(statusId) {
return rddStatusEffects.find(it => it.label == label) ?? { label: label }; return rddStatusEffects.find(it => it.flags?.core?.statusId == statusId);
} }
static demiReve() { static demiReve() {
return demiReveStatusEffect; return demiReveStatusEffect;
} }
@@ -106,8 +117,10 @@ class StatusEffectsSettings extends FormApplication {
} }
getData() { getData() {
const used = StatusEffects._getUseStatusEffects();
let formData = super.getData(); let formData = super.getData();
formData.effects = CONFIG.RDD.allEffects; formData.effects = duplicate(CONFIG.RDD.allEffects);
formData.effects.forEach(it => it.active = used.includes(it.id))
return formData; return formData;
} }
@@ -118,10 +131,10 @@ class StatusEffectsSettings extends FormApplication {
let selected = StatusEffects._getUseStatusEffects(); let selected = StatusEffects._getUseStatusEffects();
let isChecked = event.currentTarget.checked; let isChecked = event.currentTarget.checked;
if (isChecked) { if (isChecked) {
selected.add(id); selected.push(id);
} }
else { else {
selected.delete(id); selected = selected.filter(it => it != id)
} }
StatusEffects._setUseStatusEffects(selected); StatusEffects._setUseStatusEffects(selected);
} }

View File

@@ -433,9 +433,9 @@ export class TMRRencontres {
/* -------------------------------------------- */ /* -------------------------------------------- */
static async msgEchecPasseurFou(tmrData) { static async msgEchecPasseurFou(tmrData) {
tmrData.sortReserve = tmrData.actor.system.reve.reserve.list[0]; tmrData.sortReserve = RdDDice.rollOneOf(tmrData.actor.itemTypes['sortreserve']);
if (tmrData.sortReserve) { if (tmrData.sortReserve) {
// Passeur fou positionne sur la case d'un ort en réserve // TODO : Choisir le sort le plus loin ou au hasard // Passeur fou positionne sur la case d'un sort en réserve
tmrData.newTMR = TMRUtility.getTMR(tmrData.sortReserve.coord); tmrData.newTMR = TMRUtility.getTMR(tmrData.sortReserve.coord);
} else { } else {
// Déplacement aléatoire de la force du Passeur Fou // Déplacement aléatoire de la force du Passeur Fou

View File

@@ -379,18 +379,6 @@ export class TMRUtility {
return await RdDDice.rollOneOf(TMRUtility.filterTMR(filter)) return await RdDDice.rollOneOf(TMRUtility.filterTMR(filter))
} }
/* -------------------------------------------- */
static getSortsReserve(reserveList, coord) {
// TODO : Gérer les têtes spéciales réserve!
let tmrDescr = this.getTMR(coord);
//console.log("Sort réserve : ", tmrDescr);
if (tmrDescr.type == 'fleuve') { // Gestion de la reserve en Fleuve
return reserveList.filter(it => TMRUtility.getTMR(it.coord).type == 'fleuve');
}
// Reserve sur un case "normale"
return reserveList.filter(it => it.coord == coord);
}
/* -------------------------------------------- */ /* -------------------------------------------- */
/** Returns a list of case inside a given distance /** Returns a list of case inside a given distance
* *

View File

@@ -1,5 +1,4 @@
import { Grammar } from "../grammar.js"; import { Grammar } from "../grammar.js";
import { Misc } from "../misc.js";
import { RdDDice } from "../rdd-dice.js"; import { RdDDice } from "../rdd-dice.js";
import { TMRUtility } from "../tmr-utility.js"; import { TMRUtility } from "../tmr-utility.js";
import { tmrConstants, tmrColors, tmrTokenZIndex } from "../tmr-constants.js"; import { tmrConstants, tmrColors, tmrTokenZIndex } from "../tmr-constants.js";

View File

@@ -12,8 +12,8 @@ export class SortReserve extends Draconique {
manualMessage() { return false } manualMessage() { return false }
async onActorCreateOwned(actor, item) { } async onActorCreateOwned(actor, item) { }
code() { return 'sort' } code() { return 'sortreserve' }
tooltip(sort) { return `${sort.name}, r${sort.data.ptreve_reel}` } tooltip(sort) { return `${sort.name}, r${sort.system.ptreve}` }
img() { return 'systems/foundryvtt-reve-de-dragon/icons/tmr/scroll.webp' } img() { return 'systems/foundryvtt-reve-de-dragon/icons/tmr/scroll.webp' }
createSprite(pixiTMR) { createSprite(pixiTMR) {

View File

@@ -34,7 +34,7 @@
], ],
"url": "https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/", "url": "https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/",
"license": "LICENSE.txt", "license": "LICENSE.txt",
"version": "10.0.12", "version": "10.0.16",
"compatibility": { "compatibility": {
"minimum": "10" "minimum": "10"
}, },
@@ -332,7 +332,7 @@
], ],
"socket": true, "socket": true,
"manifest": "https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/raw/v10/system.json", "manifest": "https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/raw/v10/system.json",
"download": "https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/archive/foundryvtt-reve-de-dragon-10.0.12.zip", "download": "https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/archive/foundryvtt-reve-de-dragon-10.0.16.zip",
"gridDistance": 1, "gridDistance": 1,
"gridUnits": "m", "gridUnits": "m",
"primaryTokenAttribute": "sante.vie", "primaryTokenAttribute": "sante.vie",

View File

@@ -576,7 +576,7 @@
"types": ["objet", "arme", "armure", "conteneur", "competence", "sort", "herbe", "ingredient", "livre", "potion", "munition", "rencontresTMR", "queue", "ombre", "souffle", "types": ["objet", "arme", "armure", "conteneur", "competence", "sort", "herbe", "ingredient", "livre", "potion", "munition", "rencontresTMR", "queue", "ombre", "souffle",
"tete", "competencecreature", "tarot", "monnaie", "nombreastral", "tache", "meditation", "casetmr", "recettealchimique", "tete", "competencecreature", "tarot", "monnaie", "nombreastral", "tache", "meditation", "casetmr", "recettealchimique",
"musique", "chant", "danse", "jeu", "recettecuisine", "maladie", "poison", "oeuvre", "nourritureboisson", "signedraconique", "gemme", "musique", "chant", "danse", "jeu", "recettecuisine", "maladie", "poison", "oeuvre", "nourritureboisson", "signedraconique", "gemme",
"possession" ], "possession", "sortreserve" ],
"possession": { "possession": {
"typepossession": "", "typepossession": "",
"possede": false, "possede": false,
@@ -943,6 +943,14 @@
}, },
"description": "", "description": "",
"descriptionmj": "" "descriptionmj": ""
},
"sortreserve": {
"sortid" : "",
"draconic": "",
"coord": "",
"ptreve": 0,
"heurecible": "",
"echectotal": false
} }
} }
} }

View File

@@ -1,7 +1,7 @@
{{#if calc.surprise}}{{calc.surprise}}! {{/if}} {{#if calc.surprise}}{{calc.surprise}}! {{/if}}
{{#if effects}} {{#if effects}}
{{#each effects as |effect key|}} {{#each effects as |effect key|}}
<span class="active-effect" data-id="{{effect._id}}"> <span class="active-effect" data-effect="{{effect.flags.core.statusId}}">
<img class="button-effect-img delete-active-effect" src="{{effect.icon}}" alt="{{localize effect.label}}" width="24" height="24" /> <img class="button-effect-img delete-active-effect" src="{{effect.icon}}" alt="{{localize effect.label}}" width="24" height="24" />
</span> </span>
{{/each}} {{/each}}

View File

@@ -0,0 +1,9 @@
<li class="item flexrow" data-attribute={{key}} data-item-id="{{queue._id}}">
<span class="display-label flex-grow"><a>{{queue.name}}</a></span>
<div class="item-controls">
<a class="item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
{{#if queue.system.refoulement}}
<a class="item-action">Refouler</a>
{{/if}}
</div>
</li>

View File

@@ -0,0 +1,15 @@
{{#if (or queues.length ombres.length)}}
<h3>
{{#if queues.length}}Queues de Dragon{{/if}}
{{#if (and queues.length ombres.length)}} et {{/if}}
{{#if ombres.length}}Ombres de Thanatos{{/if}}
:</h3>
<ul class="flex-group-left">
{{#each queues as |queue key|}}
{{> "systems/foundryvtt-reve-de-dragon/templates/actor-sheet-item-queue.html" queue=queue key=key}}
{{/each}}
{{#each ombres as |ombre key|}}
{{> "systems/foundryvtt-reve-de-dragon/templates/actor-sheet-item-queue.html" queue=ombre key=key}}
{{/each}}
</ul>
{{/if}}

View File

@@ -510,32 +510,7 @@
</div> </div>
<hr> <hr>
{{!-- Queues, Souffles, Tetes, Ombre --}} {{!-- Queues, Souffles, Tetes, Ombre --}}
{{#if queues.length}} {{> "systems/foundryvtt-reve-de-dragon/templates/actor-sheet-queues.html"}}
<h3>Queues:</h3>
<ul class="flex-group-left">
{{#each queues as |queue key|}}
<li class="item flexrow" data-attribute={{key}} data-item-id="{{queue._id}}">
<span class="display-label flex-grow"><a data-item-id="{{queue._id}}">{{queue.name}}</a></span>
<div class="item-controls flex-shrink">
<a class="item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
</div>
</li>
{{/each}}
</ul>
{{/if}}
{{#if ombres.length}}
<h3>Ombres de Thanatos:</h3>
<ul class="item-list">
{{#each ombres as |ombre key|}}
<li class="item flexrow" data-attribute={{key}} data-item-id="{{ombre._id}}">
<span class="display-label flex-grow"><a data-item-id="{{ombre._id}}">{{ombre.name}}</a></span>
<div class="item-controls flex-shrink">
<a class="item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
</div>
</li>
{{/each}}
</ul>
{{/if}}
{{#if souffles.length}} {{#if souffles.length}}
<h3>Souffles:</h3> <h3>Souffles:</h3>
<ul class="item-list"> <ul class="item-list">
@@ -594,17 +569,27 @@
</li> </li>
{{/each}} {{/each}}
</ul> </ul>
{{/if}} {{/if}}
{{#if hautreve.sortsReserve.length}} {{#if sortsReserve.length}}
<h3>Sorts en Réserve:</h3> <h3>Sorts en Réserve:</h3>
<ul class="item-list alterne-list"> <ul class="item-list alterne-list">
{{#each sortsReserve as |sort key|}}
<li class="item list-item flexrow" data-item-id="{{sort._id}}" data-attribute="{{key}}">
<img class="sheet-competence-img" src="{{sort.img}}" />
<span class="display-label"><a>{{#if sort.system.echectotal}}Echec total: {{/if}}{{sort.name}} r{{sort.system.ptreve}}</a></span>
<span>{{sort.system.coord}} - {{caseTmr-label sort.system.coord}}</span>
<div class="item-controls flex-shrink">
<a class="item-delete flex-shrink" title="Supprimer"><i class="fas fa-trash"></i></a>
</div>
</li>
{{/each}}
{{#each hautreve.sortsReserve as |reserve key|}} {{#each hautreve.sortsReserve as |reserve key|}}
<li class="item list-item flexrow" data-item-id="{{reserve._id}}" data-attribute="{{key}}"> <li class="item list-item flexrow" data-index="{{key}}">
<img class="sheet-competence-img" src="{{reserve.sort.img}}" /> <img class="sheet-competence-img" src="{{reserve.sort.img}}" />
<span class="display-label">{{reserve.sort.name}} r{{reserve.sort.system.ptreve_reel}}</span> <span class="display-label">{{reserve.sort.name}} r{{reserve.sort.system.ptreve_reel}}</span>
<span>{{reserve.coord}} - {{caseTmr-label reserve.coord}}</span> <span>{{reserve.coord}} - {{caseTmr-label reserve.coord}}</span>
<div class="item-controls flex-shrink"> <div class="item-controls flex-shrink">
<a class="item-delete flex-shrink" title="Supprimer"><i class="fas fa-trash"></i></a> <a class="delete-sort-reserve flex-shrink" title="Supprimer"><i class="fas fa-trash"></i></a>
</div> </div>
</li> </li>
{{/each}} {{/each}}

View File

@@ -1,6 +1,6 @@
<form class="dialog-roll-sort"> <form class="dialog-roll-sort">
<h2>Lancer le <span class="sort-ou-rituel">{{#if sort.system.isrituel}}rituel{{else}}sort{{/if}}</span>: <h2 class="flexrow">Lancer le {{#if sort.system.isrituel}}rituel{{else}}sort{{/if}}:
<select name="sort" class="roll-sort flex-grow" data-dtype="String"> <select name="sort" class="roll-sort" data-dtype="String">
{{#select sort}} {{#select sort}}
{{#each sortList as |sort key|}} {{#each sortList as |sort key|}}
<option value={{key}}>{{this.name}} - {{#if this.system.caseTMRspeciale}} {{this.system.caseTMRspeciale}} <option value={{key}}>{{this.name}} - {{#if this.system.caseTMRspeciale}} {{this.system.caseTMRspeciale}}

View File

@@ -0,0 +1,6 @@
<header class="sheet-header">
<img class="profile-img" src="{{img}}" data-edit="img" title="{{name}}"/>
<div class="header-fields">
<h1 class="charname"><input name="name" type="text" value="{{name}}" placeholder="Name"/></h1>
</div>
</header>

View File

@@ -1,10 +1,5 @@
<form class="{{cssClass}}" autocomplete="off"> <form class="{{cssClass}}" autocomplete="off">
<header class="sheet-header"> {{>"systems/foundryvtt-reve-de-dragon/templates/header-item.html"}}
<img class="profile-img" src="{{img}}" data-edit="img" title="{{name}}"/>
<div class="header-fields">
<h1 class="charname"><input name="name" type="text" value="{{name}}" placeholder="Name"/></h1>
</div>
</header>
{{!-- Sheet Body --}} {{!-- Sheet Body --}}
<section class="sheet-body"> <section class="sheet-body">

View File

@@ -1,35 +1,29 @@
<form class="{{cssClass}}" autocomplete="off"> <form class="{{cssClass}}" autocomplete="off">
<header class="sheet-header"> {{>"systems/foundryvtt-reve-de-dragon/templates/header-item.html"}}
<img class="profile-img" src="{{img}}" data-edit="img" title="{{name}}"/>
<div class="header-fields">
<h1 class="charname"><input name="name" type="text" value="{{name}}" placeholder="Name"/></h1>
</div>
</header>
{{!-- Sheet Body --}} {{!-- Sheet Body --}}
<section class="sheet-body"> <section class="sheet-body">
<div class="form-group"> <div class="form-group">
<label for="xp">Protection</label> <label for="xp">Protection</label>
<input class="attribute-value" type="text" name="system.protection" value="{{system.protection}}" data-dtype="String"/> <input class="attribute-value" type="text" name="system.protection" value="{{system.protection}}" data-dtype="String"/>
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="xp">Encombrement </label> <label for="xp">Encombrement </label>
<input class="attribute-value" type="text" name="system.encombrement" value="{{system.encombrement}}" data-dtype="Number"/> <input class="attribute-value" type="text" name="system.encombrement" value="{{system.encombrement}}" data-dtype="Number"/>
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="xp">Détérioration</label> <label for="xp">Détérioration</label>
<input class="attribute-value" type="text" name="system.deterioration" value="{{system.deterioration}}" data-dtype="Number"/> <input class="attribute-value" type="text" name="system.deterioration" value="{{system.deterioration}}" data-dtype="Number"/>
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="xp">Malus Armure </label> <label for="xp">Malus Armure </label>
<input class="attribute-value" type="text" name="system.malus" value="{{system.malus}}" data-dtype="Number"/> <input class="attribute-value" type="text" name="system.malus" value="{{system.malus}}" data-dtype="Number"/>
</div> </div>
<div class="form-group item-cout"> <div class="form-group item-cout">
<label for="xp">Prix (sols) </label> <label for="xp">Prix (sols) </label>
<input class="attribute-value" type="text" name="system.cout" value="{{system.cout}}" data-dtype="Number"/> <input class="attribute-value" type="text" name="system.cout" value="{{system.cout}}" data-dtype="Number"/>
</div> </div>
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-item-description.html"}}
</section>
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-item-description.html"}}
</section>
</form> </form>

View File

@@ -1,27 +1,20 @@
<form class="{{cssClass}}" autocomplete="off"> <form class="{{cssClass}}" autocomplete="off">
<header class="sheet-header"> {{>"systems/foundryvtt-reve-de-dragon/templates/header-item.html"}}
<img class="profile-img" src="{{img}}" data-edit="img" title="{{name}}"/> {{!-- Sheet Body --}}
<div class="header-fields"> <section class="sheet-body">
<h1 class="charname"><input name="name" type="text" value="{{name}}" placeholder="Name"/></h1> <div class="form-group">
</div> <label for="niveau">Coordonnées TMR </label>
</header> <input class="attribute-value" type="text" name="system.coord" value="{{system.coord}}" data-dtype="String"/>
</div>
{{!-- Sheet Body --}} <div class="form-group">
<section class="sheet-body"> <label for="niveau">Mode spécifique</label>
<div class="form-group"> <select name="system.specific" id="specific" data-dtype="String">
<label for="niveau">Coordonnées TMR </label> {{#select system.specific}}
<input class="attribute-value" type="text" name="system.coord" value="{{system.coord}}" data-dtype="String"/> {{>"systems/foundryvtt-reve-de-dragon/templates/casetmr-specific-list.html"}}
</div> {{/select}}
<div class="form-group"> </select>
<label for="niveau">Mode spécifique</label> </div>
<select name="system.specific" id="specific" data-dtype="String">
{{#select system.specific}}
{{>"systems/foundryvtt-reve-de-dragon/templates/casetmr-specific-list.html"}}
{{/select}}
</select>
</div>
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-item-description.html"}}
</section>
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-item-description.html"}}
</section>
</form> </form>

View File

@@ -1,24 +1,16 @@
<form class="{{cssClass}}" autocomplete="off"> <form class="{{cssClass}}" autocomplete="off">
<header class="sheet-header"> {{>"systems/foundryvtt-reve-de-dragon/templates/header-item.html"}}
<img class="profile-img" src="{{img}}" data-edit="img" title="{{name}}"/> {{!-- Sheet Body --}}
<div class="header-fields"> <section class="sheet-body">
<h1 class="charname"><input name="name" type="text" value="{{name}}" placeholder="Name"/></h1> <div class="form-group">
</div> <label class="alchimie-title" for="xp">Niveau</label>
</header> <input class="attribute-value" type="text" name="system.niveau" value="{{system.niveau}}" data-dtype="Number"/>
</div>
{{!-- Sheet Body --}} <div class="form-group">
<section class="sheet-body"> <label>Référence / Auteur</label>
<div class="form-group"> <input class="attribute-value" type="text" name="system.reference" value="{{system.reference}}" data-dtype="String"/>
<label class="alchimie-title" for="xp">Niveau</label> </div>
<input class="attribute-value" type="text" name="system.niveau" value="{{system.niveau}}" data-dtype="Number"/>
</div>
<div class="form-group">
<label>Référence / Auteur</label>
<input class="attribute-value" type="text" name="system.reference" value="{{system.reference}}" data-dtype="String"/>
</div>
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-item-description.html"}}
</section>
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-item-description.html"}}
</section>
</form> </form>

View File

@@ -1,52 +1,44 @@
<form class="{{cssClass}}" autocomplete="off"> <form class="{{cssClass}}" autocomplete="off">
<header class="sheet-header"> {{>"systems/foundryvtt-reve-de-dragon/templates/header-item.html"}}
<img class="profile-img" src="{{img}}" data-edit="img" title="{{name}}"/> {{!-- Sheet Body --}}
<div class="header-fields"> <section class="sheet-body">
<h1 class="charname"><input name="name" type="text" value="{{name}}" placeholder="Name"/></h1> <div class="form-group">
</div> <label for="niveau">Niveau </label>
</header> <input class="attribute-value" type="text" name="system.niveau" value="{{system.niveau}}" data-dtype="Number"/>
</div>
{{!-- Sheet Body --}} <div class="form-group">
<section class="sheet-body"> <label for="niveau">Valeur de Caractéristique </label>
<div class="form-group"> <input class="attribute-value" type="text" name="system.carac_value" value="{{system.carac_value}}" data-dtype="Number"/>
<label for="niveau">Niveau </label> </div>
<input class="attribute-value" type="text" name="system.niveau" value="{{system.niveau}}" data-dtype="Number"/> <div class="form-group">
</div> <label for="default_diffLibre">Difficulté libre par défaut</label>
<div class="form-group"> <input class="attribute-value" type="text" name="system.default_diffLibre" value="{{system.default_diffLibre}}" data-dtype="Number"/>
<label for="niveau">Valeur de Caractéristique </label> </div>
<input class="attribute-value" type="text" name="system.carac_value" value="{{system.carac_value}}" data-dtype="Number"/> <div class="form-group">
</div> <label for="xp">Arme ? </label>
<div class="form-group"> <input class="attribute-value" type="checkbox" name="system.iscombat" {{#if system.iscombat}}checked{{/if}}/>
<label for="default_diffLibre">Difficulté libre par défaut</label> </div>
<input class="attribute-value" type="text" name="system.default_diffLibre" value="{{system.default_diffLibre}}" data-dtype="Number"/> <div class="form-group">
</div> <label for="xp">Parade ? </label>
<div class="form-group"> <input class="attribute-value" type="checkbox" name="system.isparade" {{#if system.isparade}}checked{{/if}}/>
<label for="xp">Arme ? </label> </div>
<input class="attribute-value" type="checkbox" name="system.iscombat" {{#if system.iscombat}}checked{{/if}}/> <div class="form-group">
</div> <label for="xp">Possession ? </label>
<div class="form-group"> <input class="attribute-value" type="checkbox" name="system.ispossession" {{#if system.ispossession}}checked{{/if}}/>
<label for="xp">Parade ? </label> </div>
<input class="attribute-value" type="checkbox" name="system.isparade" {{#if system.isparade}}checked{{/if}}/> <div class="form-group">
</div> <label>Catégorie parade </label>
<div class="form-group"> <select name="system.categorie_parade" id="categorie_parade" data-dtype="String">
<label for="xp">Possession ? </label> {{#select system.categorie_parade}}
<input class="attribute-value" type="checkbox" name="system.ispossession" {{#if system.ispossession}}checked{{/if}}/> {{>"systems/foundryvtt-reve-de-dragon/templates/enum-categorie-parade.html"}}
</div> {{/select}}
<div class="form-group"> </select>
<label>Catégorie parade </label> </div>
<select name="system.categorie_parade" id="categorie_parade" data-dtype="String"> <div class="form-group">
{{#select system.categorie_parade}} <label for="niveau">Dommages (+dom), si applicable </label>
{{>"systems/foundryvtt-reve-de-dragon/templates/enum-categorie-parade.html"}} <input class="attribute-value" type="text" name="system.dommages" value="{{system.dommages}}" data-dtype="Number"/>
{{/select}} </div>
</select>
</div>
<div class="form-group">
<label for="niveau">Dommages (+dom), si applicable </label>
<input class="attribute-value" type="text" name="system.dommages" value="{{system.dommages}}" data-dtype="Number"/>
</div>
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-item-description.html"}}
</section>
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-item-description.html"}}
</section>
</form> </form>

View File

@@ -1,47 +1,39 @@
<form class="{{cssClass}}" autocomplete="off"> <form class="{{cssClass}}" autocomplete="off">
<header class="sheet-header"> {{>"systems/foundryvtt-reve-de-dragon/templates/header-item.html"}}
<img class="profile-img" src="{{img}}" data-edit="img" title="{{name}}"/> {{!-- Sheet Body --}}
<div class="header-fields"> <section class="sheet-body">
<h1 class="charname"><input name="name" type="text" value="{{name}}" placeholder="Name"/></h1> <div class="form-group">
</div> <label for="xp">Encombrement </label>
</header> <input class="attribute-value" type="text" name="system.encombrement" value="{{system.encombrement}}" data-dtype="Number"/>
</div>
{{!-- Sheet Body --}} <div class="form-group">
<section class="sheet-body"> <label for="xp">Capacite (points d'Encombrement portable)</label>
<div class="form-group"> <input class="attribute-value" type="text" name="system.capacite" value="{{system.capacite}}" data-dtype="Number"/>
<label for="xp">Encombrement </label> </div>
<input class="attribute-value" type="text" name="system.encombrement" value="{{system.encombrement}}" data-dtype="Number"/> <div class="form-group">
</div> <label for="xp">Qualité</label>
<div class="form-group"> <input class="attribute-value" type="text" name="system.qualite" value="{{system.qualite}}" data-dtype="Number"/>
<label for="xp">Capacite (points d'Encombrement portable)</label> </div>
<input class="attribute-value" type="text" name="system.capacite" value="{{system.capacite}}" data-dtype="Number"/> <div class="form-group item-cout">
</div> <label for="xp">Prix (sols) </label>
<div class="form-group"> <input class="attribute-value" type="text" name="system.cout" value="{{system.cout}}" data-dtype="Number"/>
<label for="xp">Qualité</label> </div>
<input class="attribute-value" type="text" name="system.qualite" value="{{system.qualite}}" data-dtype="Number"/> {{#if isOwned}}
</div> <div class="flexcol">
<div class="form-group item-cout"> <span><label>Contenu : </label></span>
<label for="xp">Prix (sols) </label> <ul class="item-list alterne-list">
<input class="attribute-value" type="text" name="system.cout" value="{{system.cout}}" data-dtype="Number"/> <li class="competence-header flexrow">
</div> <span class="equipement-nom">Nom</span>
{{#if isOwned}} <span class="equipement-detail">Q.</span>
<div class="flexcol"> <span class="equipement-detail">Enc.</span>
<span><label>Contenu : </label></span> <span class="equipement-actions">Actions</span>
<ul class="item-list alterne-list"> </li>
<li class="competence-header flexrow"> {{buildContenu this}}
<span class="equipement-nom">Nom</span> </ul>
<span class="equipement-detail">Q.</span> </div>
<span class="equipement-detail">Enc.</span> {{/if}}
<span class="equipement-actions">Actions</span>
</li>
{{buildContenu this}}
</ul>
</div>
{{/if}}
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-item-description.html"}} {{>"systems/foundryvtt-reve-de-dragon/templates/partial-item-description.html"}}
</section>
</section>
</form> </form>

View File

@@ -1,41 +1,33 @@
<form class="{{cssClass}}" autocomplete="off"> <form class="{{cssClass}}" autocomplete="off">
<header class="sheet-header"> {{>"systems/foundryvtt-reve-de-dragon/templates/header-item.html"}}
<img class="profile-img" src="{{img}}" data-edit="img" title="{{name}}"/> {{!-- Sheet Body --}}
<div class="header-fields"> <section class="sheet-body">
<h1 class="charname"><input name="name" type="text" value="{{name}}" placeholder="Name"/></h1> <div class="form-group">
</div> <label class="alchimie-title" for="xp">Type</label>
</header> <select name="system.type" data-dtype="String">
{{#select system.type}}
{{!-- Sheet Body --}} <option value="recreative">Récréative</option>
<section class="sheet-body"> <option value="soliste">Soliste</option>
<div class="form-group"> {{/select}}
<label class="alchimie-title" for="xp">Type</label> </select>
<select name="system.type" data-dtype="String"> </div>
{{#select system.type}} <div class="form-group">
<option value="recreative">Récréative</option> <label class="alchimie-title" for="xp">Agilité ?</label>
<option value="soliste">Soliste</option> <input class="attribute-value" type="checkbox" name="system.agilite" {{#if system.agilite}}checked{{/if}}/>
{{/select}} </div>
</select> <div class="form-group">
</div> <label class="alchimie-title" for="xp">Apparence ?</label>
<div class="form-group"> <input class="attribute-value" type="checkbox" name="system.apparence" {{#if system.apparence}}checked{{/if}}/>
<label class="alchimie-title" for="xp">Agilité ?</label> </div>
<input class="attribute-value" type="checkbox" name="system.agilite" {{#if system.agilite}}checked{{/if}}/> <div class="form-group">
</div> <label class="alchimie-title" for="xp">Niveau</label>
<div class="form-group"> <input class="attribute-value" type="text" name="system.niveau" value="{{system.niveau}}" data-dtype="Number"/>
<label class="alchimie-title" for="xp">Apparence ?</label> </div>
<input class="attribute-value" type="checkbox" name="system.apparence" {{#if system.apparence}}checked{{/if}}/> <div class="form-group">
</div> <label>Référence / Auteur</label>
<div class="form-group"> <input class="attribute-value" type="text" name="system.reference" value="{{system.reference}}" data-dtype="String"/>
<label class="alchimie-title" for="xp">Niveau</label> </div>
<input class="attribute-value" type="text" name="system.niveau" value="{{system.niveau}}" data-dtype="Number"/>
</div>
<div class="form-group">
<label>Référence / Auteur</label>
<input class="attribute-value" type="text" name="system.reference" value="{{system.reference}}" data-dtype="String"/>
</div>
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-item-description.html"}}
</section>
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-item-description.html"}}
</section>
</form> </form>

View File

@@ -1,11 +1,5 @@
<form class="{{cssClass}}" autocomplete="off"> <form class="{{cssClass}}" autocomplete="off">
<header class="sheet-header"> {{>"systems/foundryvtt-reve-de-dragon/templates/header-item.html"}}
<img class="profile-img" src="{{img}}" data-edit="img" title="{{name}}" />
<div class="header-fields">
<h1 class="charname"><input name="name" type="text" value="{{name}}" placeholder="Name" /></h1>
</div>
</header>
{{!-- Sheet Body --}} {{!-- Sheet Body --}}
<section class="sheet-body"> <section class="sheet-body">
<div class="form-group"> <div class="form-group">
@@ -50,7 +44,5 @@
</div> </div>
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-item-description.html"}} {{>"systems/foundryvtt-reve-de-dragon/templates/partial-item-description.html"}}
</section> </section>
</form> </form>

View File

@@ -1,10 +1,5 @@
<form class="{{cssClass}}" autocomplete="off"> <form class="{{cssClass}}" autocomplete="off">
<header class="sheet-header"> {{>"systems/foundryvtt-reve-de-dragon/templates/header-item.html"}}
<img class="profile-img" src="{{img}}" data-edit="img" title="{{name}}" />
<div class="header-fields">
<h1 class="charname"><input name="name" type="text" value="{{name}}" placeholder="Name" /></h1>
</div>
</header>
{{!-- Sheet Body --}} {{!-- Sheet Body --}}
<section class="sheet-body"> <section class="sheet-body">
@@ -48,7 +43,5 @@
</div> </div>
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-item-description.html"}} {{>"systems/foundryvtt-reve-de-dragon/templates/partial-item-description.html"}}
</section> </section>
</form> </form>

View File

@@ -1,39 +1,32 @@
<form class="{{cssClass}}" autocomplete="off"> <form class="{{cssClass}}" autocomplete="off">
<header class="sheet-header"> {{>"systems/foundryvtt-reve-de-dragon/templates/header-item.html"}}
<img class="profile-img" src="{{img}}" data-edit="img" title="{{name}}"/>
<div class="header-fields">
<h1 class="charname"><input name="name" type="text" value="{{name}}" placeholder="Name"/></h1>
</div>
</header>
{{!-- Sheet Body --}} {{!-- Sheet Body --}}
<section class="sheet-body"> <section class="sheet-body">
<div class="form-group"> <div class="form-group">
<label class="alchimie-title" for="xp">Type</label> <label class="alchimie-title" for="xp">Type</label>
<select name="system.type" data-dtype="String"> <select name="system.type" data-dtype="String">
{{#select system.type}} {{#select system.type}}
<option value="adressehasard">Adresse/Hasard</option> <option value="adressehasard">Adresse/Hasard</option>
<option value="de">Dés</option> <option value="de">Dés</option>
<option value="carte">Cartes</option> <option value="carte">Cartes</option>
<option value="reflexion">Reflexion</option> <option value="reflexion">Reflexion</option>
{{/select}} {{/select}}
</select> </select>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="alchimie-title" for="xp">Base</label> <label class="alchimie-title" for="xp">Base</label>
<input class="attribute-value" type="text" name="system.base" value="{{system.base}}" data-dtype="Number"/> <input class="attribute-value" type="text" name="system.base" value="{{system.base}}" data-dtype="Number"/>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="alchimie-title" for="xp">Caractéristique/Compétence</label> <label class="alchimie-title" for="xp">Caractéristique/Compétence</label>
<input class="attribute-value" type="text" name="system.caraccomp" value="{{system.caraccomp}}" data-dtype="String"/> <input class="attribute-value" type="text" name="system.caraccomp" value="{{system.caraccomp}}" data-dtype="String"/>
</div> </div>
<div class="form-group"> <div class="form-group">
<label>Référence / Auteur</label> <label>Référence / Auteur</label>
<input class="attribute-value" type="text" name="system.reference" value="{{system.reference}}" data-dtype="String"/> <input class="attribute-value" type="text" name="system.reference" value="{{system.reference}}" data-dtype="String"/>
</div> </div>
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-item-description.html"}}
</section>
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-item-description.html"}}
</section>
</form> </form>

View File

@@ -1,84 +1,76 @@
<form class="{{cssClass}}" autocomplete="off"> <form class="{{cssClass}}" autocomplete="off">
<header class="sheet-header"> {{>"systems/foundryvtt-reve-de-dragon/templates/header-item.html"}}
<img class="profile-img" src="{{img}}" data-edit="img" title="{{name}}"/> {{!-- Sheet Body --}}
<div class="header-fields"> <section class="sheet-body">
<h1 class="charname"><input name="name" type="text" value="{{name}}" placeholder="Name"/></h1> <div class="form-group">
</div> <label for="xp">Compétence</label>
</header> <select name="system.competence" id="competenceselect" data-dtype="String">
{{#select system.competence}}
{{!-- Sheet Body --}} {{#each competences as |competence key|}}
<section class="sheet-body"> <option value="{{competence.name}}">{{competence.name}}</option>
<div class="form-group"> {{/each}}
<label for="xp">Compétence</label> {{/select}}
<select name="system.competence" id="competenceselect" data-dtype="String"> </select>
{{#select system.competence}} </div>
{{#each competences as |competence key|}} <div class="form-group">
<option value="{{competence.name}}">{{competence.name}}</option> <label for="xp">Thème</label>
{{/each}} <input class="attribute-value" type="text" name="system.theme" value="{{system.theme}}" data-dtype="String"/>
{{/select}} </div>
</select> <div class="form-group">
</div> <label for="xp">Support</label>
<div class="form-group"> <input class="attribute-value" type="text" name="system.support" value="{{system.support}}" data-dtype="String"/>
<label for="xp">Thème</label> </div>
<input class="attribute-value" type="text" name="system.theme" value="{{system.theme}}" data-dtype="String"/> <div class="form-group">
</div> <label for="xp">Heure</label>
<div class="form-group"> <select name="system.heure" id="heure" data-dtype="String">
<label for="xp">Support</label> {{#select system.heure}}
<input class="attribute-value" type="text" name="system.support" value="{{system.support}}" data-dtype="String"/> {{>"systems/foundryvtt-reve-de-dragon/templates/heures-select-option.html"}}
</div> {{/select}}
<div class="form-group"> </select>
<label for="xp">Heure</label> </div>
<select name="system.heure" id="heure" data-dtype="String"> <div class="form-group">
{{#select system.heure}} <label for="xp">Purification</label>
{{>"systems/foundryvtt-reve-de-dragon/templates/heures-select-option.html"}} <input class="attribute-value" type="text" name="system.purification" value="{{system.purification}}" data-dtype="String"/>
{{/select}} </div>
</select> <div class="form-group">
</div> <label for="xp">Vêture</label>
<div class="form-group"> <input class="attribute-value" type="text" name="system.veture" value="{{system.veture}}" data-dtype="String"/>
<label for="xp">Purification</label> </div>
<input class="attribute-value" type="text" name="system.purification" value="{{system.purification}}" data-dtype="String"/> <div class="form-group">
</div> <label for="xp">Comportement</label>
<div class="form-group"> <input class="attribute-value" type="text" name="system.comportement" value="{{system.comportement}}" data-dtype="String"/>
<label for="xp">Vêture</label> </div>
<input class="attribute-value" type="text" name="system.veture" value="{{system.veture}}" data-dtype="String"/> <div class="form-group">
</div> <label for="xp">Case TMR</label>
<div class="form-group"> <select name="system.tmr" id="tmr" data-dtype="String">
<label for="xp">Comportement</label> {{#select system.tmr}}
<input class="attribute-value" type="text" name="system.comportement" value="{{system.comportement}}" data-dtype="String"/> {{>"systems/foundryvtt-reve-de-dragon/templates/sort-tmr.html"}}
</div> {{/select}}
<div class="form-group"> </select>
<label for="xp">Case TMR</label> </div>
<select name="system.tmr" id="tmr" data-dtype="String"> <div class="form-group">
{{#select system.tmr}} <label for="xp">Malus</label>
{{>"systems/foundryvtt-reve-de-dragon/templates/sort-tmr.html"}} {{#if isGM}}
{{/select}} <select name="system.malus" id="malus" data-dtype="Number">
</select> {{#select system.malus}}
</div> <option value="0">0</option>
<div class="form-group"> <option value="-1">-1</option>
<label for="xp">Malus</label> <option value="-2">-2</option>
{{#if isGM}} <option value="-3">-3</option>
<select name="system.malus" id="malus" data-dtype="Number"> <option value="-4">-4</option>
{{#select system.malus}} <option value="-5">-5</option>
<option value="0">0</option> <option value="-6">-6</option>
<option value="-1">-1</option> <option value="-7">-7</option>
<option value="-2">-2</option> <option value="-8">-8</option>
<option value="-3">-3</option> <option value="-9">-9</option>
<option value="-4">-4</option> <option value="-10">-10</option>
<option value="-5">-5</option> {{/select}}
<option value="-6">-6</option> </select>
<option value="-7">-7</option> {{else}}
<option value="-8">-8</option> <label>>{{system.malus}}</label>
<option value="-9">-9</option> {{/if}}
<option value="-10">-10</option> </div>
{{/select}}
</select>
{{else}}
<label>>{{system.malus}}</label>
{{/if}}
</div>
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-item-description.html"}}
</section>
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-item-description.html"}}
</section>
</form> </form>

View File

@@ -1,32 +1,24 @@
<form class="{{cssClass}}" autocomplete="off"> <form class="{{cssClass}}" autocomplete="off">
<header class="sheet-header"> {{>"systems/foundryvtt-reve-de-dragon/templates/header-item.html"}}
<img class="profile-img" src="{{img}}" data-edit="img" title="{{name}}"/> {{!-- Sheet Body --}}
<div class="header-fields"> <section class="sheet-body">
<h1 class="charname"><input name="name" type="text" value="{{name}}" placeholder="Name"/></h1> <div class="form-group">
</div> <label for="xp">Quantité</label>
</header> <input class="attribute-value" type="text" name="system.quantite" value="{{system.quantite}}" data-dtype="Number"/>
</div>
{{!-- Sheet Body --}} <div class="form-group">
<section class="sheet-body"> <label for="xp">Valeur en Deniers</label>
<div class="form-group"> {{#if isGM}}
<label for="xp">Quantité</label> <input class="attribute-value" type="text" name="system.valeur_deniers" value="{{system.valeur_deniers}}" data-dtype="Number"/>
<input class="attribute-value" type="text" name="system.quantite" value="{{system.quantite}}" data-dtype="Number"/> {{else}}
</div> <label for="xp">{{system.valeur_deniers}}</label>
<div class="form-group"> {{/if}}
<label for="xp">Valeur en Deniers</label> </div>
{{#if isGM}} <div class="form-group">
<input class="attribute-value" type="text" name="system.valeur_deniers" value="{{system.valeur_deniers}}" data-dtype="Number"/> <label for="xp">Encombrement</label>
{{else}} <input class="attribute-value" type="text" name="system.encombrement" value="{{system.encombrement}}" data-dtype="Number"/>
<label for="xp">{{system.valeur_deniers}}</label> </div>
{{/if}}
</div>
<div class="form-group">
<label for="xp">Encombrement</label>
<input class="attribute-value" type="text" name="system.encombrement" value="{{system.encombrement}}" data-dtype="Number"/>
</div>
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-item-description.html"}}
</section>
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-item-description.html"}}
</section>
</form> </form>

View File

@@ -1,32 +1,24 @@
<form class="{{cssClass}}" autocomplete="off"> <form class="{{cssClass}}" autocomplete="off">
<header class="sheet-header"> {{>"systems/foundryvtt-reve-de-dragon/templates/header-item.html"}}
<img class="profile-img" src="{{img}}" data-edit="img" title="{{name}}"/> {{!-- Sheet Body --}}
<div class="header-fields"> <section class="sheet-body">
<h1 class="charname"><input name="name" type="text" value="{{name}}" placeholder="Name"/></h1> <div class="form-group">
</div> <label for="xp">Encombrement </label>
</header> <input class="attribute-value" type="text" name="system.encombrement" value="{{system.encombrement}}" data-dtype="Number"/>
</div>
{{!-- Sheet Body --}} <div class="form-group">
<section class="sheet-body"> <label>Quantité </label>
<div class="form-group"> <input class="attribute-value" type="text" name="system.quantite" value="{{system.quantite}}" data-dtype="Number" />
<label for="xp">Encombrement </label> </div>
<input class="attribute-value" type="text" name="system.encombrement" value="{{system.encombrement}}" data-dtype="Number"/> <div class="form-group">
</div> <label for="xp">Qualité</label>
<div class="form-group"> <input class="attribute-value" type="text" name="system.qualite" value="{{system.qualite}}" data-dtype="Number"/>
<label>Quantité </label> </div>
<input class="attribute-value" type="text" name="system.quantite" value="{{system.quantite}}" data-dtype="Number" /> <div class="form-group item-cout">
</div> <label for="xp">Prix (sols) </label>
<div class="form-group"> <input class="attribute-value" type="text" name="system.cout" value="{{system.cout}}" data-dtype="Number"/>
<label for="xp">Qualité</label> </div>
<input class="attribute-value" type="text" name="system.qualite" value="{{system.qualite}}" data-dtype="Number"/>
</div>
<div class="form-group item-cout">
<label for="xp">Prix (sols) </label>
<input class="attribute-value" type="text" name="system.cout" value="{{system.cout}}" data-dtype="Number"/>
</div>
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-item-description.html"}}
</section>
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-item-description.html"}}
</section>
</form> </form>

View File

@@ -1,24 +1,16 @@
<form class="{{cssClass}}" autocomplete="off"> <form class="{{cssClass}}" autocomplete="off">
<header class="sheet-header"> {{>"systems/foundryvtt-reve-de-dragon/templates/header-item.html"}}
<img class="profile-img" src="{{img}}" data-edit="img" title="{{name}}"/> {{!-- Sheet Body --}}
<div class="header-fields"> <section class="sheet-body">
<h1 class="charname"><input name="name" type="text" value="{{name}}" placeholder="Name"/></h1> <div class="form-group">
</div> <label class="alchimie-title" for="xp">Niveau</label>
</header> <input class="attribute-value" type="text" name="system.niveau" value="{{system.niveau}}" data-dtype="Number"/>
</div>
{{!-- Sheet Body --}} <div class="form-group">
<section class="sheet-body"> <label>Référence / Auteur</label>
<div class="form-group"> <input class="attribute-value" type="text" name="system.reference" value="{{system.reference}}" data-dtype="String"/>
<label class="alchimie-title" for="xp">Niveau</label> </div>
<input class="attribute-value" type="text" name="system.niveau" value="{{system.niveau}}" data-dtype="Number"/>
</div>
<div class="form-group">
<label>Référence / Auteur</label>
<input class="attribute-value" type="text" name="system.reference" value="{{system.reference}}" data-dtype="String"/>
</div>
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-item-description.html"}}
</section>
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-item-description.html"}}
</section>
</form> </form>

View File

@@ -1,30 +1,23 @@
<form class="{{cssClass}}" autocomplete="off"> <form class="{{cssClass}}" autocomplete="off">
<header class="sheet-header"> {{>"systems/foundryvtt-reve-de-dragon/templates/header-item.html"}}
<img class="profile-img" src="{{img}}" data-edit="img" title="{{name}}"/> {{!-- Sheet Body --}}
<div class="header-fields"> <section class="sheet-body">
<h1 class="charname"><input name="name" type="text" value="{{name}}" placeholder="Name"/></h1> <div class="form-group">
</div> <label for="xp">Nombre</label>
</header> <input class="attribute-value" type="text" name="system.value" value="{{system.value}}" data-dtype="Number"/>
</div>
{{!-- Sheet Body --}} <div class="form-group">
<section class="sheet-body"> <label for="xp">Nombre valide ? </label>
<div class="form-group"> <input class="attribute-value" type="checkbox" name="system.istrue" {{#if system.istrue}}checked{{/if}}/>
<label for="xp">Nombre</label> </div>
<input class="attribute-value" type="text" name="system.value" value="{{system.value}}" data-dtype="Number"/> <div class="form-group">
</div> <label for="xp">Index du jour concerné</label>
<div class="form-group"> <input class="attribute-value" type="text" name="system.jourindex" value="{{system.jourindex}}" data-dtype="Number"/>
<label for="xp">Nombre valide ? </label> </div>
<input class="attribute-value" type="checkbox" name="system.istrue" {{#if system.istrue}}checked{{/if}}/> <div class="form-group">
</div> <label for="xp">Label du jour</label>
<div class="form-group"> <input class="attribute-value" type="text" name="system.jourlabel" value="{{system.jourlabel}}" data-dtype="String"/>
<label for="xp">Index du jour concerné</label> </div>
<input class="attribute-value" type="text" name="system.jourindex" value="{{system.jourindex}}" data-dtype="Number"/>
</div>
<div class="form-group">
<label for="xp">Label du jour</label>
<input class="attribute-value" type="text" name="system.jourlabel" value="{{system.jourlabel}}" data-dtype="String"/>
</div>
</section>
</section>
</form> </form>

View File

@@ -1,11 +1,5 @@
<form class="{{cssClass}}" autocomplete="off"> <form class="{{cssClass}}" autocomplete="off">
<header class="sheet-header"> {{>"systems/foundryvtt-reve-de-dragon/templates/header-item.html"}}
<img class="profile-img" src="{{img}}" data-edit="img" title="{{name}}" />
<div class="header-fields">
<h1 class="charname"><input name="name" type="text" value="{{name}}" placeholder="Name" /></h1>
</div>
</header>
{{!-- Sheet Body --}} {{!-- Sheet Body --}}
<section class="sheet-body"> <section class="sheet-body">
<div class="form-group"> <div class="form-group">
@@ -55,7 +49,5 @@
</div> </div>
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-item-description.html"}} {{>"systems/foundryvtt-reve-de-dragon/templates/partial-item-description.html"}}
</section> </section>
</form> </form>

View File

@@ -1,36 +1,28 @@
<form class="{{cssClass}}" autocomplete="off"> <form class="{{cssClass}}" autocomplete="off">
<header class="sheet-header"> {{>"systems/foundryvtt-reve-de-dragon/templates/header-item.html"}}
<img class="profile-img" src="{{img}}" data-edit="img" title="{{name}}"/> {{!-- Sheet Body --}}
<div class="header-fields"> <section class="sheet-body">
<h1 class="charname"><input name="name" type="text" value="{{name}}" placeholder="Name"/></h1> <div class="form-group">
</div> <label for="xp">Encombrement </label>
</header> <input class="attribute-value" type="text" name="system.encombrement" value="{{system.encombrement}}" data-dtype="Number"/>
</div>
{{!-- Sheet Body --}} <div class="form-group">
<section class="sheet-body"> <label>Quantité </label>
<div class="form-group"> <input class="attribute-value" type="text" name="system.quantite" value="{{system.quantite}}" data-dtype="Number" />
<label for="xp">Encombrement </label> </div>
<input class="attribute-value" type="text" name="system.encombrement" value="{{system.encombrement}}" data-dtype="Number"/> <div class="form-group">
</div> <label for="xp">Résistance</label>
<div class="form-group"> <input class="attribute-value" type="text" name="system.resistance" value="{{system.resistance}}" data-dtype="Number"/>
<label>Quantité </label> </div>
<input class="attribute-value" type="text" name="system.quantite" value="{{system.quantite}}" data-dtype="Number" /> <div class="form-group">
</div> <label for="xp">Qualité</label>
<div class="form-group"> <input class="attribute-value" type="text" name="system.qualite" value="{{system.qualite}}" data-dtype="Number"/>
<label for="xp">Résistance</label> </div>
<input class="attribute-value" type="text" name="system.resistance" value="{{system.resistance}}" data-dtype="Number"/> <div class="form-group item-cout">
</div> <label for="xp">Prix (sols) </label>
<div class="form-group"> <input class="attribute-value" type="text" name="system.cout" value="{{system.cout}}" data-dtype="Number"/>
<label for="xp">Qualité</label> </div>
<input class="attribute-value" type="text" name="system.qualite" value="{{system.qualite}}" data-dtype="Number"/>
</div>
<div class="form-group item-cout">
<label for="xp">Prix (sols) </label>
<input class="attribute-value" type="text" name="system.cout" value="{{system.cout}}" data-dtype="Number"/>
</div>
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-item-description.html"}}
</section>
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-item-description.html"}}
</section>
</form> </form>

View File

@@ -1,20 +1 @@
<form class="{{cssClass}}" autocomplete="off"> {{>"systems/foundryvtt-reve-de-dragon/templates/item-queue-sheet.html"}}
<header class="sheet-header">
<img class="profile-img" src="{{img}}" data-edit="img" title="{{name}}"/>
<div class="header-fields">
<h1 class="charname"><input name="name" type="text" value="{{name}}" placeholder="Name"/></h1>
</div>
</header>
{{!-- Sheet Body --}}
<section class="sheet-body">
<div class="form-group">
<label for="xp">Refoulement</label>
<input class="attribute-value" type="text" name="system.refoulement" value="{{system.refoulement}}" data-dtype="Number"/>
</div>
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-item-description.html"}}
</section>
</form>

View File

@@ -1,29 +1,19 @@
<form class="{{cssClass}}" autocomplete="off"> <form class="{{cssClass}}" autocomplete="off">
<header class="sheet-header"> {{>"systems/foundryvtt-reve-de-dragon/templates/header-item.html"}}
<img class="profile-img" src="{{img}}" data-edit="img" title="{{name}}"/> {{!-- Sheet Body --}}
<div class="header-fields"> <section class="sheet-body">
<h1 class="charname"><input name="name" type="text" value="{{name}}" placeholder="Name"/></h1> <div class="form-group">
</div> <label for="xp">Type de possession </label>
</header> <input class="attribute-value" type="text" name="system.typepossession" value="{{system.typepossession}}" data-dtype="String"/>
</div>
{{!-- Sheet Body --}} <div class="form-group">
<section class="sheet-body"> <label for="xp">Possédé ? </label>
<div class="form-group"> <input class="attribute-value" type="checkbox" name="system.istrue" {{#if system.istrue}}checked{{/if}}/>
<label for="xp">Type de possession </label> </div>
<input class="attribute-value" type="text" name="system.typepossession" value="{{system.typepossession}}" data-dtype="String"/> <div class="form-group">
</div> <label for="xp">Compteur </label>
<div class="form-group"> <input class="attribute-value" type="text" name="system.compteur" value="{{system.compteur}}" data-dtype="Number"/>
<label for="xp">Possédé ? </label> </div>
<input class="attribute-value" type="checkbox" name="system.istrue" {{#if system.istrue}}checked{{/if}}/> {{>"systems/foundryvtt-reve-de-dragon/templates/partial-item-description.html"}}
</div> </section>
<div class="form-group">
<label for="xp">Compteur </label>
<input class="attribute-value" type="text" name="system.compteur" value="{{system.compteur}}" data-dtype="Number"/>
</div>
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-item-description.html"}}
</section>
</form> </form>

View File

@@ -1,20 +1,20 @@
<form class="{{cssClass}}" autocomplete="off"> <form class="{{cssClass}}" autocomplete="off">
<header class="sheet-header"> {{>"systems/foundryvtt-reve-de-dragon/templates/header-item.html"}}
<img class="profile-img" src="{{img}}" data-edit="img" title="{{name}}"/> {{!-- Sheet Body --}}
<div class="header-fields"> <section class="sheet-body">
<h1 class="charname"><input name="name" type="text" value="{{name}}" placeholder="Name"/></h1> <div class="form-group">
</div> <label></label>
</header> <label class="attribute-value">{{#if (eq type 'ombre')}}Ombre de thanatos
{{else if (eq type 'queue')}}Queue de Dragon
{{/if}}
</label>
</div>
{{!-- Sheet Body --}} <div class="form-group">
<section class="sheet-body"> <label for="system.refoulement">Refoulement</label>
<div class="form-group"> <input class="attribute-value" type="text" name="system.refoulement" value="{{system.refoulement}}" data-dtype="Number"/>
<label for="xp">Refoulement</label> </div>
<input class="attribute-value" type="text" name="system.refoulement" value="{{system.refoulement}}" data-dtype="Number"/>
</div>
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-item-description.html"}}
</section>
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-item-description.html"}}
</section>
</form> </form>

View File

@@ -1,44 +1,36 @@
<form class="{{cssClass}}" autocomplete="off"> <form class="{{cssClass}}" autocomplete="off">
<header class="sheet-header"> {{>"systems/foundryvtt-reve-de-dragon/templates/header-item.html"}}
<img class="profile-img" src="{{img}}" data-edit="img" title="{{name}}"/> {{!-- Sheet Body --}}
<div class="header-fields"> <section class="sheet-body">
<h1 class="charname"><input name="name" type="text" value="{{name}}" placeholder="Name"/></h1> <div class="form-group">
</div> <label class="alchimie-title" for="xp">But</label>
</header> <input class="attribute-value" type="text" name="system.but" value="{{system.but}}" data-dtype="String"/>
</div>
{{!-- Sheet Body --}} <div class="flexcol">
<section class="sheet-body"> <span><label class="alchimie-title">Manipulation : </label></span>
<div class="form-group"> <div class="form-group medium-editor">
<label class="alchimie-title" for="xp">But</label> {{editor system.manipulation_update target="system.manipulation" button=true owner=owner editable=editable}}
<input class="attribute-value" type="text" name="system.but" value="{{system.but}}" data-dtype="String"/> </div>
</div> </div>
<div class="flexcol"> <div class="flexcol">
<span><label class="alchimie-title">Manipulation : </label></span> <span><label class="alchimie-title">Utilisation : </label></span>
<div class="form-group medium-editor"> <div class="form-group small-editor">
{{editor system.manipulation_update target="system.manipulation" button=true owner=owner editable=editable}} {{editor system.utilisation target="system.utilisation" button=true owner=owner editable=editable}}
</div> </div>
</div> </div>
<div class="flexcol"> <div class="flexcol">
<span><label class="alchimie-title">Utilisation : </label></span> <span><label class="alchimie-title">Enchantement : </label></span>
<div class="form-group small-editor"> <div class="form-group small-editor">
{{editor system.utilisation target="system.utilisation" button=true owner=owner editable=editable}} {{editor system.enchantement target="system.enchantement" button=true owner=owner editable=editable}}
</div> </div>
</div> </div>
<div class="flexcol"> <div class="flexcol">
<span><label class="alchimie-title">Enchantement : </label></span> <span><label class="alchimie-title">Sur-effet : </label></span>
<div class="form-group small-editor"> <div class="form-group small-editor">
{{editor system.enchantement target="system.enchantement" button=true owner=owner editable=editable}} {{editor system.sureffet target="system.sureffet" button=true owner=owner editable=editable}}
</div> </div>
</div> </div>
<div class="flexcol">
<span><label class="alchimie-title">Sur-effet : </label></span>
<div class="form-group small-editor">
{{editor system.sureffet target="system.sureffet" button=true owner=owner editable=editable}}
</div>
</div>
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-item-description.html"}}
</section>
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-item-description.html"}}
</section>
</form> </form>

View File

@@ -1,42 +1,34 @@
<form class="{{cssClass}}" autocomplete="off"> <form class="{{cssClass}}" autocomplete="off">
<header class="sheet-header"> {{>"systems/foundryvtt-reve-de-dragon/templates/header-item.html"}}
<img class="profile-img" src="{{img}}" data-edit="img" title="{{name}}"/> {{!-- Sheet Body --}}
<div class="header-fields"> <section class="sheet-body">
<h1 class="charname"><input name="name" type="text" value="{{name}}" placeholder="Name"/></h1> <div class="form-group">
</div> <label>Niveau</label>
</header> <input class="attribute-value" type="text" name="system.niveau" value="{{system.niveau}}" data-dtype="Number"/>
</div>
{{!-- Sheet Body --}} <div class="form-group">
<section class="sheet-body"> <label>Durée</label>
<div class="form-group"> <input class="attribute-value" type="text" name="system.duree" value="{{system.duree}}" data-dtype="String"/>
<label>Niveau</label> </div>system
<input class="attribute-value" type="text" name="system.niveau" value="{{system.niveau}}" data-dtype="Number"/> <div class="form-group">
</div> <label>Sust</label>
<div class="form-group"> <input class="attribute-value" type="text" name="system.sust" value="{{system.sust}}" data-dtype="Number"/>
<label>Durée</label> </div>
<input class="attribute-value" type="text" name="system.duree" value="{{system.duree}}" data-dtype="String"/> <div class="form-group">
</div>system <label>Exotisme</label>
<div class="form-group"> <input class="attribute-value" type="text" name="system.exotisme" value="{{system.exotisme}}" data-dtype="Number"/>
<label>Sust</label> </div>
<input class="attribute-value" type="text" name="system.sust" value="{{system.sust}}" data-dtype="Number"/> <div class="form-group">
</div> <label>Référence / Auteur</label>
<div class="form-group"> <input class="attribute-value" type="text" name="system.reference" value="{{system.reference}}" data-dtype="String"/>
<label>Exotisme</label> </div>
<input class="attribute-value" type="text" name="system.exotisme" value="{{system.exotisme}}" data-dtype="Number"/> <div class="flexcol">
</div> <span><label>Ingrédients : </label></span>
<div class="form-group"> <div class="form-group editor">
<label>Référence / Auteur</label> {{editor system.ingredients target="system.ingredients" button=true owner=owner editable=editable}}
<input class="attribute-value" type="text" name="system.reference" value="{{system.reference}}" data-dtype="String"/> </div>
</div> </div>
<div class="flexcol">
<span><label>Ingrédients : </label></span>
<div class="form-group editor">
{{editor system.ingredients target="system.ingredients" button=true owner=owner editable=editable}}
</div>
</div>
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-item-description.html"}}
</section>
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-item-description.html"}}
</section>
</form> </form>

View File

@@ -1,16 +1,7 @@
<form class="{{cssClass}}" autocomplete="off"> <form class="{{cssClass}}" autocomplete="off">
<header class="sheet-header"> {{>"systems/foundryvtt-reve-de-dragon/templates/header-item.html"}}
<img class="profile-img" src="{{img}}" data-edit="img" title="{{name}}"/> {{!-- Sheet Body --}}
<div class="header-fields"> <section class="sheet-body">
<h1 class="charname"><input name="name" type="text" value="{{name}}" placeholder="Name"/></h1> {{>"systems/foundryvtt-reve-de-dragon/templates/partial-item-description.html"}}
</div> </section>
</header>
{{!-- Sheet Body --}}
<section class="sheet-body">
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-item-description.html"}}
</section>
</form> </form>

View File

@@ -1,82 +1,74 @@
<form class="{{cssClass}}" autocomplete="off"> <form class="{{cssClass}}" autocomplete="off">
<header class="sheet-header"> {{>"systems/foundryvtt-reve-de-dragon/templates/header-item.html"}}
<img class="profile-img" src="{{img}}" data-edit="img" title="{{name}}"/> {{!-- Sheet Body --}}
<div class="header-fields"> <section class="sheet-body">
<h1 class="charname"><input name="name" type="text" value="{{name}}" placeholder="Name"/></h1> <div class="form-group">
</div> <label>Draconic</label>
</header> <select name="system.draconic" id="draconic" data-dtype="String">
{{#select system.draconic}}
{{!-- Sheet Body --}} {{>"systems/foundryvtt-reve-de-dragon/templates/sort-draconic.html"}}
<section class="sheet-body"> {{/select}}
<div class="form-group"> </select>
<label>Draconic </label> </div>
<select name="system.draconic" id="draconic" data-dtype="String"> <div class="form-group">
{{#select system.draconic}} <label for="system.caseTMR">Case TMR</label>
{{>"systems/foundryvtt-reve-de-dragon/templates/sort-draconic.html"}} <select name="system.caseTMR" id="caseTMR" data-dtype="String">
{{/select}} {{#select system.caseTMR}}
</select> {{>"systems/foundryvtt-reve-de-dragon/templates/sort-tmr.html"}}
</div> <option value="special">Case spéciale TMR (saisie ci-dessous)</option>
<div class="form-group"> {{/select}}
<label for="xp">Case TMR </label> </select>
<select name="system.caseTMR" id="caseTMR" data-dtype="String"> </div>
{{#select system.caseTMR}} <div class="form-group">
{{>"systems/foundryvtt-reve-de-dragon/templates/sort-tmr.html"}} <label for="system.caseTMRspeciale">Case TMR Spéciale</label>
<option value="special">Case spéciale TMR (saisie ci-dessous)</option> <input class="attribute-value" type="text" name="system.caseTMRspeciale" value="{{system.caseTMRspeciale}}" data-dtype="String"/>
{{/select}} </div>
</select> <div class="form-group">
</div> <label for="system.difficulte">Difficulté</label>
<div class="form-group"> <input class="attribute-value" type="text" name="system.difficulte" value="{{system.difficulte}}" data-dtype="String"/>
<label for="xp">Case TMR Spéciale </label> </div>
<input class="attribute-value" type="text" name="system.caseTMRspeciale" value="{{system.caseTMRspeciale}}" data-dtype="String"/> <div class="form-group">
</div> <label for="system.ptreve">Coût en Rêve</label>
<div class="form-group"> <input class="attribute-value" type="text" name="system.ptreve" value="{{system.ptreve}}" data-dtype="String"/>
<label for="xp">Difficulté </label> </div>
<input class="attribute-value" type="text" name="system.difficulte" value="{{system.difficulte}}" data-dtype="String"/> <div class="form-group">
</div> <label for="system.coutseuil">Coût en Seuil</label>
<div class="form-group"> <input class="attribute-value" type="text" name="system.coutseuil" value="{{system.coutseuil}}" data-dtype="Number"/>
<label for="xp">Coût en Rêve </label> </div>
<input class="attribute-value" type="text" name="system.ptreve" value="{{system.ptreve}}" data-dtype="String"/> <div class="form-group">
</div> <label for="system.isrituel">Rituel</label>
<div class="form-group"> <input class="attribute-value" type="checkbox" name="system.isrituel" {{#if system.isrituel}}checked{{/if}}/>
<label for="xp">Coût en Seuil </label> </div>
<input class="attribute-value" type="text" name="system.coutseuil" value="{{system.coutseuil}}" data-dtype="Number"/> <div class="form-group">
</div> <label for="system.duree">Durée</label>
<div class="form-group"> <input class="attribute-value" type="text" name="system.duree" value="{{system.duree}}" data-dtype="String"/>
<label for="rituel">Rituel </label> </div>
<input class="attribute-value" type="checkbox" name="system.isrituel" {{#if system.isrituel}}checked{{/if}}/> <div class="form-group">
</div> <label for="system.portee">Portée</label>
<div class="form-group"> <input class="attribute-value" type="text" name="system.portee" value="{{system.portee}}" data-dtype="String"/>
<label for="xp">Durée </label> </div>
<input class="attribute-value" type="text" name="system.duree" value="{{system.duree}}" data-dtype="String"/> <div class="form-group">
</div> <label for="system.cible">Cible</label>
<div class="form-group"> <input class="attribute-value" type="text" name="system.cible" value="{{system.cible}}" data-dtype="String"/>
<label for="xp">Portée </label> </div>
<input class="attribute-value" type="text" name="system.portee" value="{{system.portee}}" data-dtype="String"/> <div class="form-group">
</div> <label for="system.JR">Jet de Resistance</label>
<div class="form-group"> <input class="attribute-value" type="text" name="system.JR" value="{{system.JR}}" data-dtype="String"/>
<label for="xp">Cible </label> </div>
<input class="attribute-value" type="text" name="system.cible" value="{{system.cible}}" data-dtype="String"/> <div class="form-group">
</div> <label for="system.xp">XP</label>
<div class="form-group"> <input class="attribute-value" type="text" name="system.xp" value="{{system.xp}}" data-dtype="Number"/>
<label for="xp">Jet de Resistance</label> </div>
<input class="attribute-value" type="text" name="system.JR" value="{{system.JR}}" data-dtype="String"/> {{#if owner}}
</div> {{#each bonusCaseList as |bcData key|}}
<div class="form-group"> <div class="form-group">
<label for="xp">XP </label> <label for="caseValue">Case/Bonus :</label>
<input class="attribute-value" type="text" name="system.xp" value="{{system.xp}}" data-dtype="Number"/> <input class="attribute-value" type="text" name="caseValue" value="{{bcData.case}}" data-dtype="String"/>
</div> <input class="attribute-value" type="text" name="bonusValue" value="{{bcData.bonus}}" data-dtype="Number"/>
{{#if owner}} </div>
{{#each bonusCaseList as |bcData key|}} {{/each}}
<div class="form-group"> {{/if}}
<label for="bonuscase">Case/Bonus :</label>
<input class="attribute-value" type="text" name="caseValue" value="{{bcData.case}}" data-dtype="String"/>
<input class="attribute-value" type="text" name="bonusValue" value="{{bcData.bonus}}" data-dtype="Number"/>
</div>
{{/each}}
{{/if}}
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-item-description.html"}}
</section>
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-item-description.html"}}
</section>
</form> </form>

View File

@@ -0,0 +1,41 @@
<form class="{{cssClass}}" autocomplete="off">
{{>"systems/foundryvtt-reve-de-dragon/templates/header-item.html"}}
<section class="sheet-body">
{{#if (and system.sortid sort)}}
<div class="form-group">
<label>Sort</label>
<label>{{sort.name}} - {{sort.system.draconic}} / {{sort.system.difficulte}}</label>
</div>
{{else}}
<div class="form-group">
<label>Draconic</label>
<select name="system.draconic" id="draconic" data-dtype="String">
{{#select system.draconic}}
{{>"systems/foundryvtt-reve-de-dragon/templates/sort-draconic.html"}}
{{/select}}
</select>
</div>
{{/if}}
<div class="form-group">
<label for="system.coord">Case TMR</label>
<input class="attribute-value" type="text" name="system.coord" value="{{system.coord}}" data-dtype="String"/>
</div>
<div class="form-group">
<label for="system.ptreve">Rêve</label>
<input class="attribute-value" type="text" name="system.ptreve" value="{{system.ptreve}}" data-dtype="String"/>
</div>
<div class="form-group">
<label for="system.heurecible">Heure de naissance cible</label>
<select type="text" name="system.heurecible" value="{{system.heurecible}}" data-dtype="String">
{{#select system.heurecible}}
{{>"systems/foundryvtt-reve-de-dragon/templates/heures-select-option.html"}}
{{/select}}
</select>
</div>
<div class="form-group">
<label for="system.echectotal">Echec total</label>
<input class="attribute-value" type="checkbox" name="system.echectotal" {{#if system.echectotal}}checked{{/if}} />
</div>
</section>
</form>

View File

@@ -1,16 +1,8 @@
<form class="{{cssClass}}" autocomplete="off"> <form class="{{cssClass}}" autocomplete="off">
<header class="sheet-header"> {{>"systems/foundryvtt-reve-de-dragon/templates/header-item.html"}}
<img class="profile-img" src="{{img}}" data-edit="img" title="{{name}}"/> {{!-- Sheet Body --}}
<div class="header-fields"> <section class="sheet-body">
<h1 class="charname"><input name="name" type="text" value="{{name}}" placeholder="Name"/></h1>
</div>
</header>
{{!-- Sheet Body --}}
<section class="sheet-body">
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-item-description.html"}}
</section>
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-item-description.html"}}
</section>
</form> </form>

View File

@@ -1,80 +1,72 @@
<form class="{{cssClass}}" autocomplete="off"> <form class="{{cssClass}}" autocomplete="off">
<header class="sheet-header"> {{>"systems/foundryvtt-reve-de-dragon/templates/header-item.html"}}
<img class="profile-img" src="{{img}}" data-edit="img" title="{{name}}"/> {{!-- Sheet Body --}}
<div class="header-fields"> <section class="sheet-body">
<h1 class="charname"><input name="name" type="text" value="{{name}}" placeholder="Name"/></h1> <div class="form-group">
</div> <label for="xp">Caractéristique</label>
</header> <select name="system.carac" id="caracselect" data-dtype="String">
{{#select system.carac}}
{{!-- Sheet Body --}} {{#each caracList as |carac key|}}
<section class="sheet-body"> <option value="{{key}}">{{carac.label}}</option>
<div class="form-group"> {{/each}}
<label for="xp">Caractéristique</label> {{/select}}
<select name="system.carac" id="caracselect" data-dtype="String">
{{#select system.carac}}
{{#each caracList as |carac key|}}
<option value="{{key}}">{{carac.label}}</option>
{{/each}}
{{/select}}
</select>
</div>
<div class="form-group">
<label for="xp">Compétence</label>
<select name="system.competence" id="competenceselect" data-dtype="String">
{{#select system.competence}}
{{#each competences as |competence key|}}
<option value="{{competence.name}}">{{competence.name}}</option>
{{/each}}
{{/select}}
</select> </select>
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="xp">Difficulté</label> <label for="xp">Compétence</label>
<input class="attribute-value" type="text" name="system.difficulte" value="{{system.difficulte}}" data-dtype="Number"/> <select name="system.competence" id="competenceselect" data-dtype="String">
</div> {{#select system.competence}}
<div class="form-group"> {{#each competences as |competence key|}}
<label for="xp">Périodicité</label> <option value="{{competence.name}}">{{competence.name}}</option>
<input class="attribute-value" type="text" name="system.periodicite" value="{{system.periodicite}}" data-dtype="String"/> {{/each}}
</div> {{/select}}
<div class="form-group"> </select>
<label for="xp">Fatigue</label> </div>
<input class="attribute-value" type="text" name="system.fatigue" value="{{system.fatigue}}" data-dtype="Number"/> <div class="form-group">
</div> <label for="xp">Difficulté</label>
{{#if isGM}} <input class="attribute-value" type="text" name="system.difficulte" value="{{system.difficulte}}" data-dtype="Number"/>
<div class="form-group"> </div>
<label for="xp">Cacher les Points de Tâches nécessaires au joueur</label> <div class="form-group">
<input class="attribute-value" type="checkbox" name="system.cacher_points_de_tache" value="{{system.cacher_points_de_tache}}" {{checked system.cacher_points_de_tache}}/> <label for="xp">Périodicité</label>
</div> <input class="attribute-value" type="text" name="system.periodicite" value="{{system.periodicite}}" data-dtype="String"/>
</div>
<div class="form-group">
<label for="xp">Fatigue</label>
<input class="attribute-value" type="text" name="system.fatigue" value="{{system.fatigue}}" data-dtype="Number"/>
</div>
{{#if isGM}}
<div class="form-group">
<label for="xp">Cacher les Points de Tâches nécessaires au joueur</label>
<input class="attribute-value" type="checkbox" name="system.cacher_points_de_tache" value="{{system.cacher_points_de_tache}}" {{checked system.cacher_points_de_tache}}/>
</div>
<div class="form-group">
<label for="xp">Points de tâches nécessaires</label>
<input class="attribute-value" type="text" name="system.points_de_tache" value="{{system.points_de_tache}}" data-dtype="Number"/>
</div>
{{else}}
<div class="form-group"> <div class="form-group">
<label for="xp">Points de tâches nécessaires</label> <label for="xp">Points de tâches nécessaires</label>
{{#if system.cacher_points_de_tache}}
<input class="attribute-value" type="text" value="?????" data-dtype="Number" disabled/>
{{else}}
<input class="attribute-value" type="text" name="system.points_de_tache" value="{{system.points_de_tache}}" data-dtype="Number"/> <input class="attribute-value" type="text" name="system.points_de_tache" value="{{system.points_de_tache}}" data-dtype="Number"/>
{{/if}}
</div> </div>
{{else}} {{/if}}
<div class="form-group"> <hr>
<label for="xp">Points de tâches nécessaires</label> <div class="form-group">
{{#if system.cacher_points_de_tache}} <label for="xp">Points de tâches obtenus</label>
<input class="attribute-value" type="text" value="?????" data-dtype="Number" disabled/> <input class="attribute-value" type="text" name="system.points_de_tache_courant" value="{{system.points_de_tache_courant}}" data-dtype="Number"/>
{{else}} </div>
<input class="attribute-value" type="text" name="system.points_de_tache" value="{{system.points_de_tache}}" data-dtype="Number"/> <div class="form-group">
{{/if}} <label for="xp">Nombre de Succès</label>
</div> <input class="attribute-value" type="text" name="system.nb_jet_succes" value="{{system.nb_jet_succes}}" data-dtype="Number" {{#if isGM}}{{else}}disabled{{/if}}/>
{{/if}} </div>
<hr> <div class="form-group">
<div class="form-group"> <label for="xp">Nombre d'Echecs</label>
<label for="xp">Points de tâches obtenus</label> <input class="attribute-value" type="text" name="system.nb_jet_echec" value="{{system.nb_jet_echec}}" data-dtype="Number" {{#if isGM}}{{else}}disabled{{/if}}/>
<input class="attribute-value" type="text" name="system.points_de_tache_courant" value="{{system.points_de_tache_courant}}" data-dtype="Number"/> </div>
</div>
<div class="form-group">
<label for="xp">Nombre de Succès</label>
<input class="attribute-value" type="text" name="system.nb_jet_succes" value="{{system.nb_jet_succes}}" data-dtype="Number" {{#if isGM}}{{else}}disabled{{/if}}/>
</div>
<div class="form-group">
<label for="xp">Nombre d'Echecs</label>
<input class="attribute-value" type="text" name="system.nb_jet_echec" value="{{system.nb_jet_echec}}" data-dtype="Number" {{#if isGM}}{{else}}disabled{{/if}}/>
</div>
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-item-description.html"}}
</section>
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-item-description.html"}}
</section>
</form> </form>

View File

@@ -1,29 +1,21 @@
<form class="{{cssClass}}" autocomplete="off"> <form class="{{cssClass}}" autocomplete="off">
<header class="sheet-header"> {{>"systems/foundryvtt-reve-de-dragon/templates/header-item.html"}}
<img class="profile-img" src="{{img}}" data-edit="img" title="{{name}}"/> {{!-- Sheet Body --}}
<div class="header-fields"> <section class="sheet-body">
<h1 class="charname"><input name="name" type="text" value="{{name}}" placeholder="Name"/></h1> <div class="flexcol">
</div> <div class="form-group">
</header> <label>Aspect</label>
<input class="attribute-value" type="text" name="system.concept" value="{{system.concept}}" data-dtype="String" />
{{!-- Sheet Body --}} </div>
<section class="sheet-body"> <div class="form-group">
<div class="flexcol"> <label>Sens</label>
<div class="form-group"> <select name="system.aspect" id="aspect" data-dtype="String">
<label>Aspect</label> {{#select system.aspect}}
<input class="attribute-value" type="text" name="system.concept" value="{{system.concept}}" data-dtype="String" /> {{>"systems/foundryvtt-reve-de-dragon/templates/enum-aspect-tarot.html"}}
</div> {{/select}}
<div class="form-group"> </select>
<label>Sens</label> </div>
<select name="system.aspect" id="aspect" data-dtype="String">
{{#select system.aspect}}
{{>"systems/foundryvtt-reve-de-dragon/templates/enum-aspect-tarot.html"}}
{{/select}}
</select>
</div>
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-item-description.html"}}
</section>
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-item-description.html"}}
</section>
</form> </form>

View File

@@ -1,16 +1,8 @@
<form class="{{cssClass}}" autocomplete="off"> <form class="{{cssClass}}" autocomplete="off">
<header class="sheet-header"> {{>"systems/foundryvtt-reve-de-dragon/templates/header-item.html"}}
<img class="profile-img" src="{{img}}" data-edit="img" title="{{name}}"/> {{!-- Sheet Body --}}
<div class="header-fields"> <section class="sheet-body">
<h1 class="charname"><input name="name" type="text" value="{{name}}" placeholder="Name"/></h1>
</div>
</header>
{{!-- Sheet Body --}}
<section class="sheet-body">
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-item-description.html"}}
</section>
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-item-description.html"}}
</section>
</form> </form>

View File

@@ -7,7 +7,7 @@
{{else}} {{else}}
<input class="resource-content select-effect" type="checkbox" name="{{effect.id}}" {{#if effect.active}}checked{{/if}}/> <input class="resource-content select-effect" type="checkbox" name="{{effect.id}}" {{#if effect.active}}checked{{/if}}/>
{{/if}} {{/if}}
<img class="button-effect-img" height="16" width="16" src="{{effect.icon}}" alt="{{ localize effect.label}}" /> <img class="button-effect-img" height="16" width="16" src="{{effect.icon}}" alt="{{localize effect.label}}" />
<label>{{localize effect.label}}</label> <label>{{localize effect.label}}</label>
</li> </li>
{{/each}} {{/each}}