Compare commits

..

No commits in common. "v1.5" and "foundryvtt-reve-de-dragon-1.5.80" have entirely different histories.

39 changed files with 668 additions and 809 deletions

View File

@ -37,7 +37,8 @@ export class RdDActorSheet extends ActorSheet {
/* -------------------------------------------- */ /* -------------------------------------------- */
async getData() { async getData() {
const objectData = Misc.data(this.object); const objectData = Misc.data(this.object);
this.timerRecherche = undefined;
//this.actor.checkMonnaiePresence(this.actor.data.items); // Always check
let formData = { let formData = {
title: this.title, title: this.title,
@ -77,8 +78,8 @@ export class RdDActorSheet extends ActorSheet {
}; };
formData.competences.forEach(item => { formData.competences.forEach(item => {
item.visible = this.options.recherche item.visible = this.options.cherchercompetence
? RdDItemCompetence.nomContientTexte(item, this.options.recherche.text) ? RdDItemCompetence.nomContientTexte(item, this.options.cherchercompetence)
: (!this.options.showCompNiveauBase || !RdDItemCompetence.isNiveauBase(item)); : (!this.options.showCompNiveauBase || !RdDItemCompetence.isNiveauBase(item));
RdDItemCompetence.levelUp(item, formData.data.compteurs.experience.value); RdDItemCompetence.levelUp(item, formData.data.compteurs.experience.value);
}); });
@ -93,7 +94,7 @@ export class RdDActorSheet extends ActorSheet {
RdDItemArme.computeNiveauArmes(formData.combat, formData.competences); RdDItemArme.computeNiveauArmes(formData.combat, formData.competences);
RdDItemArme.ajoutCorpsACorps(formData.combat, formData.competences, formData.data.carac); RdDItemArme.ajoutCorpsACorps(formData.combat, formData.competences, formData.data.carac);
formData.esquives = this.actor.getCompetences("Esquive").map(i => foundry.utils.deepClone(i.data)); formData.esquives = this.actor.getCompetences("Esquive").map(i => foundry.utils.deepClone(i.data));
formData.combat = RdDCombatManager.listActionsArmes(formData.combat, formData.competences, formData.data.carac); formData.combat = RdDCombatManager.finalizeArmeList(formData.combat, formData.competences, formData.data.carac);
this.armesList = formData.combat; this.armesList = formData.combat;
@ -334,8 +335,8 @@ export class RdDActorSheet extends ActorSheet {
html.find('.arme-initiative a').click(async event => { html.find('.arme-initiative a').click(async event => {
let combatant = game.combat.data.combatants.find(c => c.actor.data._id == this.actor.data._id); let combatant = game.combat.data.combatants.find(c => c.actor.data._id == this.actor.data._id);
if (combatant) { if (combatant) {
let action = this._getEventArmeCombat(event); let arme = this._getEventArmeCombat(event);
RdDCombatManager.rollInitiativeAction(combatant._id, action); RdDCombatManager.rollInitiativeCompetence(combatant._id, arme);
} else { } else {
ui.notifications.info("Impossible de lancer l'initiative sans être dans un combat."); ui.notifications.info("Impossible de lancer l'initiative sans être dans un combat.");
} }
@ -423,31 +424,12 @@ export class RdDActorSheet extends ActorSheet {
this.options.editCaracComp = !this.options.editCaracComp; this.options.editCaracComp = !this.options.editCaracComp;
this.render(true); this.render(true);
}); });
html.find('.cherchercompetence').change(async event => {
html.find('.recherche') this.options.cherchercompetence = event.currentTarget.value;
.each((index, field) => { this.render(true);
if (this.options.recherche) { });
field.focus();
field.setSelectionRange(this.options.recherche.start, this.options.recherche.end);
}
})
.keyup(async event => {
const nouvelleRecherche = this._optionRecherche(event.currentTarget);
if (this.options.recherche?.text != nouvelleRecherche?.text){
this.options.recherche = nouvelleRecherche;
if (this.timerRecherche) {
clearTimeout(this.timerRecherche);
}
this.timerRecherche = setTimeout(() => {
this.timerRecherche = undefined;
this.render(true);
}, 500);
}
})
.change(async event =>
this.options.recherche = this._optionRecherche(event.currentTarget)
);
html.find('.vue-detaillee').click(async event => { html.find('.vue-detaillee').click(async event => {
console.log("CONTROLS", this.options.vueDetaillee)
this.options.vueDetaillee = !this.options.vueDetaillee; this.options.vueDetaillee = !this.options.vueDetaillee;
this.render(true); this.render(true);
}); });
@ -533,17 +515,6 @@ export class RdDActorSheet extends ActorSheet {
}); });
} }
_optionRecherche(target) {
if (!target.value?.length){
return undefined;
}
return {
text: target.value,
start: target.selectionStart,
end: target.selectionEnd,
};
}
_getEventArmeCombat(event) { _getEventArmeCombat(event) {
const li = $(event.currentTarget)?.parents(".item"); const li = $(event.currentTarget)?.parents(".item");
let armeName = li.data("arme-name"); let armeName = li.data("arme-name");

View File

@ -33,8 +33,7 @@ import { RollDataAjustements } from "./rolldata-ajustements.js";
import { DialogItemAchat } from "./dialog-item-achat.js"; import { DialogItemAchat } from "./dialog-item-achat.js";
import { RdDItem } from "./item.js"; import { RdDItem } from "./item.js";
import { RdDPossession } from "./rdd-possession.js"; import { RdDPossession } from "./rdd-possession.js";
import { ENTITE_BLURETTE, ENTITE_INCARNE, ENTITE_NONINCARNE, SYSTEM_RDD, SYSTEM_SOCKET_ID } from "./constants.js"; import { SYSTEM_RDD, SYSTEM_SOCKET_ID } from "./constants.js";
/* -------------------------------------------- */ /* -------------------------------------------- */
/** /**
@ -99,6 +98,7 @@ export class RdDActor extends Actor {
* @param {Object} options (Unused) Additional options which customize the creation workflow. * @param {Object} options (Unused) Additional options which customize the creation workflow.
* *
*/ */
static async create(actorData, options) { static async create(actorData, options) {
// Case of compendium global import // Case of compendium global import
if (actorData instanceof Array) { if (actorData instanceof Array) {
@ -115,14 +115,11 @@ export class RdDActor extends Actor {
return actor; return actor;
} }
const competences = await RdDUtility.loadCompendium(RdDItemCompetence.actorCompendium(actorData.type));
actorData.items = competences.map(i => i.toObject());
if (isPersonnage) { if (isPersonnage) {
const competences = await RdDUtility.loadCompendium(RdDItemCompetence.actorCompendium(actorData.type));
actorData.items = competences.map(i => i.toObject());
actorData.items = actorData.items.concat(Monnaie.monnaiesData()); actorData.items = actorData.items.concat(Monnaie.monnaiesData());
} }
else {
actorData.items = [];
}
return super.create(actorData, options); return super.create(actorData, options);
} }
@ -135,6 +132,13 @@ export class RdDActor extends Actor {
this.encTotal = 0; this.encTotal = 0;
this.prixTotalEquipement = 0; this.prixTotalEquipement = 0;
/*
// Auto-resize token
if (this.isToken) {
let tokenSize = actorData.data.carac.taille.value/10;
this.token.update({height: tokenSize, width: tokenSize } );
}*/
// Make separate methods for each Actor type (character, npc, etc.) to keep // Make separate methods for each Actor type (character, npc, etc.) to keep
// things organized. // things organized.
if (actorData.type === 'personnage') this._prepareCharacterData(actorData); if (actorData.type === 'personnage') this._prepareCharacterData(actorData);
@ -240,7 +244,7 @@ export class RdDActor extends Actor {
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
getForce() { getForce() {
if (this.isEntite()) { if (this.isEntiteCauchemar()) {
return Misc.toInt(Misc.templateData(this).carac.reve?.value); return Misc.toInt(Misc.templateData(this).carac.reve?.value);
} }
return Misc.toInt(Misc.templateData(this).carac.force?.value); return Misc.toInt(Misc.templateData(this).carac.force?.value);
@ -390,9 +394,6 @@ export class RdDActor extends Actor {
getPossession(possessionId) { getPossession(possessionId) {
return this.items.find(it => it.type == 'possession' && it.data.data.possessionid == possessionId); return this.items.find(it => it.type == 'possession' && it.data.data.possessionid == possessionId);
} }
getPossessions() {
return this.items.filter(it => it.type == 'possession');
}
getDemiReve() { getDemiReve() {
return Misc.templateData(this).reve.tmrpos.coord; return Misc.templateData(this).reve.tmrpos.coord;
@ -613,10 +614,7 @@ export class RdDActor extends Actor {
content: "Remise à neuf de " + this.name content: "Remise à neuf de " + this.name
}; };
const actorData = Misc.data(this); const actorData = Misc.data(this);
if (this.isEntite([ENTITE_NONINCARNE])) { if (this.isEntiteCauchemar()) {
return;
}
if (this.isEntite([ENTITE_INCARNE, ENTITE_BLURETTE])) {
await this.santeIncDec("endurance", actorData.data.sante.endurance.max - actorData.data.sante.endurance.value); await this.santeIncDec("endurance", actorData.data.sante.endurance.max - actorData.data.sante.endurance.value);
} }
else { else {
@ -1217,39 +1215,21 @@ export class RdDActor extends Actor {
if (srcId != destId && itemId != destId) { // déplacement de l'objet if (srcId != destId && itemId != destId) { // déplacement de l'objet
const dest = this.getObjet(destId); const dest = this.getObjet(destId);
const src = this.getObjet(srcId); const src = this.getObjet(srcId);
if (dest?.isEquipementSimilaire(item)) { // changer de conteneur
if (this.conteneurPeutContenir(dest, item)) {
await this.enleverDeConteneur(item, src, params.onEnleverConteneur);
await this.ajouterDansConteneur(item, dest, params.onAjouterDansConteneur);
}
else if (dest?.isEquipementSimilaire(item)) {
await this.regrouperEquipementsSimilaires(item, dest); await this.regrouperEquipementsSimilaires(item, dest);
result = false; result = false;
} }
else
{
const cible = this.getContenantOrParent(dest);
// changer de conteneur
if (cible == undefined) {
await this.enleverDeConteneur(item, src, params.onEnleverConteneur);
}
else if (this.conteneurPeutContenir(cible, item)) {
await this.enleverDeConteneur(item, src, params.onEnleverConteneur);
await this.ajouterDansConteneur(item, cible, params.onAjouterDansConteneur);
}
}
} }
} }
await this.computeEncombrementTotalEtMalusArmure(); await this.computeEncombrementTotalEtMalusArmure();
return result; return result;
} }
getContenantOrParent(dest) {
if (!dest || dest.isConteneur()) {
return dest;
}
return this.getContenant(dest);
}
getContenant(item) {
return this.items.find(it => it.isConteneur() && Misc.templateData(it).contenu.includes(item.id));
}
/* -------------------------------------------- */ /* -------------------------------------------- */
conteneurPeutContenir(dest, item) { conteneurPeutContenir(dest, item) {
if (!dest) { if (!dest) {
@ -1644,7 +1624,7 @@ export class RdDActor extends Actor {
/* -------------------------------------------- */ /* -------------------------------------------- */
async setSonne(sonne = true) { async setSonne(sonne = true) {
if (this.isEntite()) { if (this.isEntiteCauchemar()) {
return; return;
} }
if (!game.combat && sonne) { if (!game.combat && sonne) {
@ -1656,7 +1636,7 @@ export class RdDActor extends Actor {
/* -------------------------------------------- */ /* -------------------------------------------- */
getSConst() { getSConst() {
if (this.isEntite()) { if (this.isEntiteCauchemar()) {
return 0; return 0;
} }
return RdDCarac.calculSConst(Misc.templateData(this).carac.constitution.value); return RdDCarac.calculSConst(Misc.templateData(this).carac.constitution.value);
@ -1773,7 +1753,7 @@ export class RdDActor extends Actor {
result.newValue = Math.max(minValue, Math.min(compteur.value + inc, compteur.max)); result.newValue = Math.max(minValue, Math.min(compteur.value + inc, compteur.max));
//console.log("New value ", inc, minValue, result.newValue); //console.log("New value ", inc, minValue, result.newValue);
let fatigue = 0; let fatigue = 0;
if (name == "endurance" && !this.isEntite()) { if (name == "endurance" && !this.isEntiteCauchemar()) {
if (result.newValue == 0 && inc < 0 && !isCritique) { // perte endurance et endurance devient 0 (sauf critique) -> -1 vie if (result.newValue == 0 && inc < 0 && !isCritique) { // perte endurance et endurance devient 0 (sauf critique) -> -1 vie
sante.vie.value--; sante.vie.value--;
result.perteVie = true; result.perteVie = true;
@ -1810,7 +1790,7 @@ export class RdDActor extends Actor {
} }
isDead() { isDead() {
return !this.isEntite() && Misc.templateData(this).sante.vie.value < -this.getSConst() return !this.isEntiteCauchemar() && Misc.templateData(this).sante.vie.value < -this.getSConst()
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
@ -2575,7 +2555,7 @@ export class RdDActor extends Actor {
if (rollData.competence.data.ispossession) { if (rollData.competence.data.ispossession) {
RdDPossession.onAttaquePossession(this, rollData.competence) RdDPossession.onAttaquePossession(this, rollData.competence)
} else { } else {
const arme = RdDItemCompetenceCreature.toActionArme(rollData.competence) const arme = RdDItemCompetenceCreature.toArme(rollData.competence)
RdDCombat.createUsingTarget(this)?.attaque(competence, arme) RdDCombat.createUsingTarget(this)?.attaque(competence, arme)
} }
return return
@ -3164,12 +3144,8 @@ export class RdDActor extends Actor {
case 'chance-actuelle': case 'chance actuelle': case 'chance-actuelle': case 'chance actuelle':
return carac.chance; return carac.chance;
} }
const caracList = Object.entries(carac); let entry = Misc.findFirstLike(name, Object.entries(carac), { mapper: it => it[1].label, description: 'caractéristique' });
let entry = Misc.findFirstLike(name, caracList, { mapper: it => it[0], description: 'caractéristique' }); return entry.length > 0 ? carac[entry[0]] : undefined;
if (!entry || entry.length ==0) {
entry = Misc.findFirstLike(name, caracList, { mapper: it => it[1].label, description: 'caractéristique' });
}
return entry && entry.length > 0 ? carac[entry[0]] : undefined;
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
@ -3373,7 +3349,7 @@ export class RdDActor extends Actor {
let encaissement = await this.jetEncaissement(rollData); let encaissement = await this.jetEncaissement(rollData);
this.ajouterBlessure(encaissement); // Will upate the result table this.ajouterBlessure(encaissement); // Will upate the result table
const perteVie = this.isEntite() const perteVie = this.isEntiteCauchemar()
? { newValue: 0 } ? { newValue: 0 }
: await this.santeIncDec("vie", - encaissement.vie); : await this.santeIncDec("vie", - encaissement.vie);
const perteEndurance = await this.santeIncDec("endurance", -encaissement.endurance, encaissement.critiques > 0); const perteEndurance = await this.santeIncDec("endurance", -encaissement.endurance, encaissement.critiques > 0);
@ -3388,7 +3364,7 @@ export class RdDActor extends Actor {
sonne: perteEndurance.sonne, sonne: perteEndurance.sonne,
jetEndurance: perteEndurance.jetEndurance, jetEndurance: perteEndurance.jetEndurance,
endurance: santeOrig.endurance.value - perteEndurance.newValue, endurance: santeOrig.endurance.value - perteEndurance.newValue,
vie: this.isEntite() ? 0 : (santeOrig.vie.value - perteVie.newValue), vie: this.isEntiteCauchemar() ? 0 : (santeOrig.vie.value - perteVie.newValue),
show: defenderRoll?.show ?? {} show: defenderRoll?.show ?? {}
}); });
@ -3578,8 +3554,8 @@ export class RdDActor extends Actor {
/* -------------------------------------------- */ /* -------------------------------------------- */
async accorder(entite, when = 'avant-encaissement') { async accorder(entite, when = 'avant-encaissement') {
if (when != game.settings.get(SYSTEM_RDD, "accorder-entite-cauchemar") if (when != game.settings.get(SYSTEM_RDD, "accorder-entite-cauchemar")
|| !entite.isEntite([ENTITE_INCARNE]) || !entite.isEntiteCauchemar()
|| entite.isEntiteAccordee(this)) { || entite.isEntiteCauchemarAccordee(this)) {
return true; return true;
} }
const tplData = Misc.templateData(this); const tplData = Misc.templateData(this);
@ -3603,32 +3579,29 @@ export class RdDActor extends Actor {
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
isEntite(typeentite = [] ) { isEntiteCauchemar() {
return this.data.type == 'entite' && (typeentite.length == 0 || typeentite.includes(this.data.data.definition.typeentite)); return this.data.type == 'entite';
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
isEntiteAccordee(attaquant) { isEntiteCauchemarAccordee(attaquant) {
if (!this.isEntite([ENTITE_INCARNE])) { if (!this.isEntiteCauchemar()) { return true; }
return true;
}
let resonnance = Misc.templateData(this).sante.resonnance; let resonnance = Misc.templateData(this).sante.resonnance;
console.log("RESONN", resonnance) return (resonnance.actors.find(it => it == attaquant._id));
return (resonnance.actors.find(it => it == attaquant.id));
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
async setEntiteReveAccordee(attaquant) { async setEntiteReveAccordee(attaquant) {
if (!this.isEntite([ENTITE_INCARNE])) { if (!this.isEntiteCauchemar()) {
ui.notifications.error("Impossible de s'accorder à " + this.name + ": ce n'est pas une entite de cauchemer/rêve"); ui.notifications.error("Impossible de s'accorder à " + this.name + ": ce n'est pas une entite de cauchemer/rêve");
return; return;
} }
let resonnance = duplicate(Misc.templateData(this).sante.resonnance); let resonnance = duplicate(Misc.templateData(this).sante.resonnance);
if (resonnance.actors.find(it => it == attaquant.id)) { if (resonnance.actors.find(it => it == attaquant._id)) {
// déjà accordé // déjà accordé
return; return;
} }
resonnance.actors.push(attaquant.id); resonnance.actors.push(attaquant._id);
await this.update({ "data.sante.resonnance": resonnance }); await this.update({ "data.sante.resonnance": resonnance });
return; return;
} }
@ -4182,7 +4155,7 @@ export class RdDActor extends Actor {
/* -------------------------------------------- */ /* -------------------------------------------- */
async setStatusEffect(label, status, updates = {}) { async setStatusEffect(label, status, updates = {}) {
if (this.isEntite() || this.data.type == 'vehicule') { if (this.isEntiteCauchemar() || this.data.type == 'vehicule') {
return; return;
} }
console.log("setStatusEffect", label, status, updates) console.log("setStatusEffect", label, status, updates)

View File

@ -3,7 +3,3 @@ export const SYSTEM_SOCKET_ID = 'system.foundryvtt-reve-de-dragon';
export const HIDE_DICE = 'hide'; export const HIDE_DICE = 'hide';
export const SHOW_DICE = 'show'; export const SHOW_DICE = 'show';
export const ENTITE_INCARNE = 'incarne';
export const ENTITE_NONINCARNE = 'nonincarne';
export const ENTITE_BLURETTE = 'blurette';

View File

@ -55,7 +55,7 @@ export class DialogItemAchat extends Dialog {
static prepareVenteData(buttonAcheter, vendeurId, vendeur, acheteur) { static prepareVenteData(buttonAcheter, vendeurId, vendeur, acheteur) {
const jsondata = buttonAcheter.attributes['data-jsondata']?.value; const jsondata = buttonAcheter.attributes['data-jsondata']?.value;
const prixLot = parseInt(buttonAcheter.attributes['data-prixLot']?.value ?? 0); const prixLot = buttonAcheter.attributes['data-prixLot']?.value ?? 0;
let venteData = { let venteData = {
item: JSON.parse(jsondata), item: JSON.parse(jsondata),
vendeurId: vendeurId, vendeurId: vendeurId,

View File

@ -30,7 +30,7 @@ export class RdDItemArme extends Item {
switch (armeData ? armeData.type : '') { switch (armeData ? armeData.type : '') {
case 'arme': return armeData; case 'arme': return armeData;
case 'competencecreature': case 'competencecreature':
return RdDItemCompetenceCreature.toActionArme(armeData); return RdDItemCompetenceCreature.toArme(armeData);
} }
return RdDItemArme.mainsNues(); return RdDItemArme.mainsNues();
} }
@ -189,7 +189,7 @@ export class RdDItemArme extends Item {
categorie_parade: 'sans-armes' categorie_parade: 'sans-armes'
} }
}; };
mergeObject(corpsACorps.data, actorData ?? {}, { overwrite: false }); mergeObject(corpsACorps.data, actorData ??{}, { overwrite: false });
return corpsACorps; return corpsACorps;
} }

View File

@ -212,11 +212,8 @@ export class RdDItemCompetence extends Item {
/* -------------------------------------------- */ /* -------------------------------------------- */
static findCompetence(list, idOrName, options = {}) { static findCompetence(list, idOrName, options = {}) {
if (idOrName == undefined) {
return undefined;
}
options = mergeObject(options, { options = mergeObject(options, {
preFilter: it => RdDItemCompetence.isCompetence(it), filter: it => RdDItemCompetence.isCompetence(it),
description: 'compétence', description: 'compétence',
}); });
return list.find(it => it.id == idOrName && RdDItemCompetence.isCompetence(it)) return list.find(it => it.id == idOrName && RdDItemCompetence.isCompetence(it))

View File

@ -11,14 +11,14 @@ export class RdDItemCompetenceCreature extends Item {
rollData.competence.data.categorie = "creature" rollData.competence.data.categorie = "creature"
rollData.selectedCarac = rollData.carac.carac_creature rollData.selectedCarac = rollData.carac.carac_creature
if (rollData.competence.data.iscombat) { if (rollData.competence.data.iscombat) {
rollData.arme = RdDItemCompetenceCreature.toActionArme(rollData.competence); rollData.arme = RdDItemCompetenceCreature.toArme(rollData.competence);
} }
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
static toActionArme(item) { static toArme(item) {
if (RdDItemCompetenceCreature.isCompetenceAttaque(item)) { if (RdDItemCompetenceCreature.isCompetenceAttaque(item)) {
// si c'est un Item compétence: cloner pour ne pas modifier la compétence // si c'est un Item compétence: cloner pour ne pas modifier lma compétence
let arme = Misc.data( (item instanceof Item) ? item.clone(): item); let arme = Misc.data( (item instanceof Item) ? item.clone(): item);
mergeObject(arme.data, mergeObject(arme.data,
{ {
@ -28,12 +28,11 @@ export class RdDItemCompetenceCreature extends Item {
dommagesReels: arme.data.dommages, dommagesReels: arme.data.dommages,
penetration: 0, penetration: 0,
force: 0, force: 0,
rapide: true, rapide: true
action: 'attaque'
}); });
return arme; return arme;
} }
console.error("RdDItemCompetenceCreature.toActionArme(", item, ") : impossible de transformer l'Item en arme"); console.error("RdDItemCompetenceCreature.toArme(", item, ") : impossible de transformer l'Item en arme");
return undefined; return undefined;
} }

View File

@ -192,7 +192,7 @@ export class Misc {
if (!single) { if (!single) {
single = subset[0]; single = subset[0];
const choices = Misc.join(subset.map(it => options.mapper(it)), '<br>'); const choices = Misc.join(subset.map(it => options.mapper(it)), '<br>');
options.onMessage(`Plusieurs choix de ${options.description}s possibles:<br>${choices}<br>Le premier sera choisi: ${options.mapper(single)}`); options.info(`Plusieurs choix de ${options.description}s possibles:<br>${choices}<br>Le premier sera choisi: ${mapToValue(single)}`);
} }
return single; return single;
} }
@ -211,7 +211,7 @@ export class Misc {
} }
value = Grammar.toLowerCaseNoAccent(value); value = Grammar.toLowerCaseNoAccent(value);
const subset = elements.filter(options.preFilter) const subset = elements.filter(options.preFilter)
.filter(it => Grammar.toLowerCaseNoAccent(options.mapper(it))?.includes(value)); .filter(it => Grammar.toLowerCaseNoAccent(options.mapper(it)).includes(value));
if (subset.length == 0) { if (subset.length == 0) {
options.onMessage(`Pas de ${options.description} correspondant à ${value}`); options.onMessage(`Pas de ${options.description} correspondant à ${value}`);
} }

View File

@ -1,6 +1,5 @@
import { ChatUtility } from "./chat-utility.js"; import { ChatUtility } from "./chat-utility.js";
import { ENTITE_INCARNE, ENTITE_NONINCARNE, HIDE_DICE, SYSTEM_RDD, SYSTEM_SOCKET_ID } from "./constants.js"; import { HIDE_DICE, SYSTEM_RDD, SYSTEM_SOCKET_ID } from "./constants.js";
import { Grammar } from "./grammar.js";
import { RdDItemArme } from "./item-arme.js"; import { RdDItemArme } from "./item-arme.js";
import { RdDItemCompetence } from "./item-competence.js"; import { RdDItemCompetence } from "./item-competence.js";
import { RdDItemCompetenceCreature } from "./item-competencecreature.js"; import { RdDItemCompetenceCreature } from "./item-competencecreature.js";
@ -27,7 +26,7 @@ const premierRoundInit = [
{ pattern: 'epeegnome', init: 5.35 }, { pattern: 'epeegnome', init: 5.35 },
{ pattern: 'masse', init: 5.30 }, { pattern: 'masse', init: 5.30 },
{ pattern: 'gourdin', init: 5.25 }, { pattern: 'gourdin', init: 5.25 },
{ pattern: 'fleau', init: 5.20 }, { pattern: 'fléau', init: 5.20 },
{ pattern: 'dague', init: 5.15 }, { pattern: 'dague', init: 5.15 },
{ pattern: 'autre', init: 5.10 }, { pattern: 'autre', init: 5.10 },
]; ];
@ -85,29 +84,34 @@ export class RdDCombatManager extends Combat {
// calculate initiative // calculate initiative
for (let cId = 0; cId < ids.length; cId++) { for (let cId = 0; cId < ids.length; cId++) {
const combatant = this.combatants.get(ids[cId]); const combatant = this.combatants.get(ids[cId]);
let rollFormula = formula ?? RdDCombatManager.formuleInitiative(2, 10, 0, 0); //if (!c) return results;
if (!formula) {
let rollFormula = formula; // Init per default
if (!rollFormula) {
let armeCombat, competence;
if (combatant.actor.data.type == 'creature' || combatant.actor.data.type == 'entite') { if (combatant.actor.data.type == 'creature' || combatant.actor.data.type == 'entite') {
const competence = combatant.actor.data.items.find(it => it.data.data.iscombat) for (const competenceItemData of combatant.actor.data.items) {
if (competence) { if (competenceItemData.data.data.iscombat) {
rollFormula = RdDCombatManager.formuleInitiative(2, competence.data.carac_value, competence.data.niveau, 0); competence = duplicate(competenceItemData);
}
} }
rollFormula = "2+( (" + RdDCombatManager.calculInitiative(competence.data.niveau, competence.data.carac_value) + ")/100)";
} else { } else {
const armeCombat = combatant.actor.data.items.find(it => it.type == 'arme' && itemData.data.equipe) for (const itemData of combatant.actor.data.items) {
const compName = (armeCombat == undefined) ? "Corps à corps" : armeCombat.data.competence; if (itemData.type == "arme" && itemData.data.equipe) {
const competence = RdDItemCompetence.findCompetence(combatant.actor.data.items, compName); armeCombat = duplicate(itemData);
if (competence) { }
const carac = combatant.actor.data.data.carac[competence.data.defaut_carac].value;
const niveau = competence.data.niveau;
const bonusEcaille = (armeCombat?.data.magique) ? armeCombat.data.ecaille_efficacite : 0;
rollFormula = RdDCombatManager.formuleInitiative(2, carac, niveau, bonusEcaille);
} }
let compName = (armeCombat == undefined) ? "Corps à corps" : armeCombat.data.competence;
competence = RdDItemCompetence.findCompetence(combatant.actor.data.items, compName);
let bonusEcaille = (armeCombat && armeCombat.data.magique) ? armeCombat.data.ecaille_efficacite : 0;
rollFormula = "2+( (" + RdDCombatManager.calculInitiative(competence.data.niveau, Misc.data(combatant.actor).data.carac[competence.data.defaut_carac].value, bonusEcaille) + ")/100)";
} }
} }
//console.log("Combatat", c); //console.log("Combatat", c);
const roll = combatant.getInitiativeRoll(rollFormula); const roll = combatant.getInitiativeRoll(rollFormula);
if (!roll.total) { if ( !roll.total) {
roll.evaluate({ async: false }); roll.evaluate( {async: false});
} }
if (roll.total <= 0) roll.total = 0.00; if (roll.total <= 0) roll.total = 0.00;
console.log("Compute init for", rollFormula, roll.total, combatant); console.log("Compute init for", rollFormula, roll.total, combatant);
@ -138,10 +142,6 @@ export class RdDCombatManager extends Combat {
return this; return this;
}; };
static formuleInitiative(rang, carac, niveau, bonusMalus) {
return `${rang} +( (${RdDCombatManager.calculInitiative(niveau, carac, bonusMalus)} )/100)`;
}
/* -------------------------------------------- */ /* -------------------------------------------- */
static calculInitiative(niveau, caracValue, bonusEcaille = 0) { static calculInitiative(niveau, caracValue, bonusEcaille = 0) {
let base = niveau + Math.floor(caracValue / 2); let base = niveau + Math.floor(caracValue / 2);
@ -150,76 +150,63 @@ export class RdDCombatManager extends Combat {
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
/** Retourne une liste triée d'actions d'armes avec le split arme1 main / arme 2 main */ /** Retourne une liste triée d'armes avec le split arme1 main / arme 2 main */
static listActionsArmes(armes, competences, carac) { static finalizeArmeList(armes, competences, carac) {
// Gestion des armes 1/2 mains // Gestion des armes 1/2 mains
let actionsArme = []; let armesEquipe = [];
for (const arme of armes) { for (const arme of armes) {
let action = duplicate(Misc.data(arme)); let armeData = duplicate(Misc.data(arme));
if (action.data.equipe) { if (armeData.data.equipe) {
let compData = competences.map(c => Misc.data(c)).find(c => c.name == action.data.competence); let compData = competences.map(c => Misc.data(c)).find(c => c.name == armeData.data.competence);
actionsArme.push(action); armesEquipe.push(armeData);
action.action = 'attaque'; armeData.data.dommagesReels = Number(armeData.data.dommages);
action.data.dommagesReels = Number(action.data.dommages); armeData.data.niveau = compData.data.niveau;
action.data.niveau = compData.data.niveau; armeData.data.initiative = RdDCombatManager.calculInitiative(compData.data.niveau, carac[compData.data.defaut_carac].value);
action.data.initiative = RdDCombatManager.calculInitiative(compData.data.niveau, carac[compData.data.defaut_carac].value);
// Dupliquer les armes pouvant être à 1 main et 2 mains en patchant la compétence // Dupliquer les armes pouvant être à 1 main et 2 mains en patchant la compétence
if (action.data.unemain && !action.data.deuxmains) { if (armeData.data.unemain && !armeData.data.deuxmains) {
action.data.mainInfo = "(1m)"; armeData.data.mainInfo = "(1m)";
} else if (!action.data.unemain && action.data.deuxmains) { } else if (!armeData.data.unemain && armeData.data.deuxmains) {
action.data.mainInfo = "(2m)"; armeData.data.mainInfo = "(2m)";
} else if (action.data.unemain && action.data.deuxmains) { } else if (armeData.data.unemain && armeData.data.deuxmains) {
action.data.mainInfo = "(1m)"; armeData.data.mainInfo = "(1m)";
const comp2m = action.data.competence.replace(" 1 main", " 2 mains"); // Replace ! const comp2m = armeData.data.competence.replace(" 1 main", " 2 mains"); // Replace !
const comp = Misc.data(competences.find(c => c.name == comp2m)); const comp = Misc.data(competences.find(c => c.name == comp2m));
const arme2main = duplicate(action); const arme2main = duplicate(armeData);
arme2main.data.mainInfo = "(2m)"; arme2main.data.mainInfo = "(2m)";
arme2main.data.niveau = comp.data.niveau; arme2main.data.niveau = comp.data.niveau;
arme2main.data.competence = comp2m; arme2main.data.competence = comp2m;
arme2main.data.initiative = RdDCombatManager.calculInitiative(arme2main.data.niveau, carac[comp.data.defaut_carac].value); arme2main.data.initiative = RdDCombatManager.calculInitiative(arme2main.data.niveau, carac[comp.data.defaut_carac].value);
actionsArme.push(arme2main); armesEquipe.push(arme2main);
const containsSlash = action.data.dommages.includes("/"); const containsSlash = armeData.data.dommages.includes("/");
if (containsSlash) { if (containsSlash) {
const tableauDegats = action.data.dommages.split("/"); const tableauDegats = armeData.data.dommages.split("/");
action.data.dommagesReels = Number(tableauDegats[0]); armeData.data.dommagesReels = Number(tableauDegats[0]);
arme2main.data.dommagesReels = Number(tableauDegats[1]); arme2main.data.dommagesReels = Number(tableauDegats[1]);
} }
else { else{
ui.notifications.info("Les dommages de l'arme à 1/2 mains " + action.name + " ne sont pas corrects (ie sous la forme X/Y)"); ui.notifications.info("Les dommages de l'arme à 1/2 mains " + armeData.name + " ne sont pas corrects (ie sous la forme X/Y)");
} }
} }
} }
} }
return actionsArme.sort(Misc.ascending(armeData => armeData.name + (armeData.data.mainInfo ?? ''))); return armesEquipe.sort(Misc.ascending(armeData => armeData.name + (armeData.data.mainInfo ?? '')));
}
static listActionsPossessions(actor) {
return RdDCombatManager._indexActions(actor.getPossessions().map(p => {
return {
name: p.name,
action: 'conjurer',
data: {
competence: p.name,
possessionid: p.data.data.possessionid,
}
}
}));
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
static listActionsCombat(combatant) { static buildListeActionsCombat(combatant) {
const actor = combatant.actor; if (combatant.actor == undefined) {
let actions = RdDCombatManager.listActionsPossessions(actor); ui.notifications.warn(`Le combatant ${combatant.name} n'est pas associé à un acteur, impossible de déterminer ses actions de combat!`)
if (actions.length > 0) { return [];
return actions;
} }
let items = actor.data.items; const actorData = Misc.data(combatant.actor);
if (actor.isCreature()) { let items = combatant.actor.data.items;
let actions = []
if (combatant.actor.isCreature()) {
actions = actions.concat(items.filter(it => RdDItemCompetenceCreature.isCompetenceAttaque(it)) actions = actions.concat(items.filter(it => RdDItemCompetenceCreature.isCompetenceAttaque(it))
.map(competence => RdDItemCompetenceCreature.toActionArme(competence))); .map(competence => RdDItemCompetenceCreature.toArme(competence)));
} else { } else {
// Recupération des items 'arme' // Recupération des items 'arme'
let armes = items.filter(it => RdDItemArme.isArmeUtilisable(it)) let armes = items.filter(it => RdDItemArme.isArmeUtilisable(it))
@ -227,17 +214,14 @@ export class RdDCombatManager extends Combat {
.concat(RdDItemArme.mainsNues()); .concat(RdDItemArme.mainsNues());
let competences = items.filter(it => it.type == 'competence'); let competences = items.filter(it => it.type == 'competence');
actions = actions.concat(RdDCombatManager.listActionsArmes(armes, competences, actor.data.data.carac)); actions = actions.concat(RdDCombatManager.finalizeArmeList(armes, competences, actorData.data.carac));
if (actor.data.data.attributs.hautrevant.value) { if (actorData.data.attributs.hautrevant.value) {
actions.push({ name: "Draconic", action: 'haut-reve', data: { initOnly: true, competence: "Draconic" } }); actions.push({ name: "Draconic", data: { initOnly: true, competence: "Draconic" } });
} }
} }
return RdDCombatManager._indexActions(actions); actions.push({ name: "Autre action", data: { initOnly: true, competence: "Autre action" } });
}
static _indexActions(actions) {
for (let index = 0; index < actions.length; index++) { for (let index = 0; index < actions.length; index++) {
actions[index].index = index; actions[index].index = index;
} }
@ -251,15 +235,15 @@ export class RdDCombatManager extends Combat {
let initMissing = game.combat.data.combatants.find(it => !it.initiative); let initMissing = game.combat.data.combatants.find(it => !it.initiative);
if (!initMissing) { // Premier round ! if (!initMissing) { // Premier round !
for (let combatant of game.combat.data.combatants) { for (let combatant of game.combat.data.combatants) {
let action = combatant.initiativeData?.arme; let arme = combatant.initiativeData?.arme;
//console.log("Parsed !!!", combatant, initDone, game.combat.current, arme); //console.log("Parsed !!!", combatant, initDone, game.combat.current, arme);
if (action && action.type == "arme") { if (arme && arme.type == "arme") {
for (let initData of premierRoundInit) { for (let initData of premierRoundInit) {
if (Grammar.toLowerCaseNoAccentNoSpace(action.data.initpremierround).includes(initData.pattern)) { if (arme.data.initpremierround.toLowerCase().includes(initData.pattern)) {
let msg = `<h4>L'initiative de ${combatant.actor.name} a été modifiée !</h4> let msg = `<h4>L'initiative de ${combatant.actor.name} a été modifiée !</h4>
<hr> <hr>
<div> <div>
Etant donné son ${action.name}, son initative pour ce premier round est désormais de ${initData.init}. Etant donné son ${arme.name}, son initative pour ce premier round est désormais de ${initData.init}.
</div>` </div>`
ChatMessage.create({ content: msg }); ChatMessage.create({ content: msg });
game.combat.setInitiative(combatant._id, initData.init); game.combat.setInitiative(combatant._id, initData.init);
@ -297,7 +281,7 @@ export class RdDCombatManager extends Combat {
].concat(options); ].concat(options);
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
static rollInitiativeAction(combatantId, action) { static rollInitiativeCompetence(combatantId, arme) {
const combatant = game.combat.combatants.get(combatantId); const combatant = game.combat.combatants.get(combatantId);
if (combatant.actor == undefined) { if (combatant.actor == undefined) {
ui.notifications.warn(`Le combatant ${combatant.name} n'est pas associé à un acteur, impossible de déterminer ses actions de combat!`) ui.notifications.warn(`Le combatant ${combatant.name} n'est pas associé à un acteur, impossible de déterminer ses actions de combat!`)
@ -315,21 +299,16 @@ export class RdDCombatManager extends Combat {
} else if (combatant.actor.getSurprise() == "demi") { } else if (combatant.actor.getSurprise() == "demi") {
initOffset = 0; initOffset = 0;
initInfo = "Demi Surprise" initInfo = "Demi Surprise"
} else if (action.action == 'conjurer') { } else if (arme.name == "Autre action") {
initOffset = 10;
caracForInit = combatant.actor.getReveActuel();
initInfo = "Possession"
} else if (action.action == 'autre') {
initOffset = 2; initOffset = 2;
initInfo = "Autre Action" initInfo = "Autre Action"
} else if (action.action == 'haut-reve') { } else if (arme.name == "Draconic") {
initOffset = 9; initOffset = 9;
initInfo = "Draconic" initInfo = "Draconic"
} else { } else {
compData = Misc.data(RdDItemCompetence.findCompetence(combatant.actor.data.items, action.data.competence)); compData = Misc.data(RdDItemCompetence.findCompetence(combatant.actor.data.items, arme.data.competence));
compNiveau = compData.data.niveau; compNiveau = compData.data.niveau;
initInfo = action.name + " / " + action.data.competence; initInfo = arme.name + " / " + arme.data.competence;
if (combatant.actor.data.type == 'creature' || combatant.actor.data.type == 'entite') { if (combatant.actor.data.type == 'creature' || combatant.actor.data.type == 'entite') {
caracForInit = compData.data.carac_value; caracForInit = compData.data.carac_value;
if (compData.data.categorie == "lancer") { if (compData.data.categorie == "lancer") {
@ -340,15 +319,14 @@ export class RdDCombatManager extends Combat {
} }
} else { } else {
caracForInit = Misc.data(combatant.actor).data.carac[compData.data.defaut_carac].value; caracForInit = Misc.data(combatant.actor).data.carac[compData.data.defaut_carac].value;
initOffset = RdDCombatManager._baseInitOffset(compData.data.categorie, action); initOffset = RdDCombatManager._baseInitOffset(compData.data.categorie, arme);
} }
} }
let malus = combatant.actor.getEtatGeneral(); // Prise en compte état général let malus = combatant.actor.getEtatGeneral(); // Prise en compte état général
// Cas des créatures et entités vs personnages // Cas des créatures et entités vs personnages
let rollFormula = RdDCombatManager.formuleInitiative(initOffset, caracForInit, compNiveau, malus); let rollFormula = initOffset + "+ ( (" + RdDCombatManager.calculInitiative(compNiveau, caracForInit) + " + " + malus + ") /100)";
// Garder la trace de l'arme/compétence utilisée pour l'iniative // Garder la trace de l'arme/compétence utilisée pour l'iniative
combatant.initiativeData = { arme: action } // pour reclasser l'init au round 0 combatant.initiativeData = { arme: arme } // pour reclasser l'init au round 0
game.combat.rollInitiative(combatantId, rollFormula, { initInfo: initInfo }); game.combat.rollInitiative(combatantId, rollFormula, { initInfo: initInfo });
} }
@ -371,21 +349,16 @@ export class RdDCombatManager extends Combat {
static displayInitiativeMenu(html, combatantId) { static displayInitiativeMenu(html, combatantId) {
console.log("Combatant ; ", combatantId); console.log("Combatant ; ", combatantId);
const combatant = game.combat.combatants.get(combatantId); const combatant = game.combat.combatants.get(combatantId);
if (!(combatant?.actor)) { let armesList = RdDCombatManager.buildListeActionsCombat(combatant);
ui.notifications.warn(`Le combatant ${combatant.name ?? combatantId} n'est pas associé à un acteur, impossible de déterminer ses actions de combat!`)
return;
}
let actions = RdDCombatManager.listActionsCombat(combatant);
// Build the relevant submenu // Build the relevant submenu
if (actions) { if (armesList) {
let menuItems = []; let menuItems = [];
for (let action of actions) { for (let arme of armesList) {
menuItems.push({ menuItems.push({
name: action.data.competence, name: arme.data.competence,
icon: "<i class='fas fa-dice-d6'></i>", icon: "<i class='fas fa-dice-d6'></i>",
callback: target => { RdDCombatManager.rollInitiativeAction(combatantId, action) } callback: target => { RdDCombatManager.rollInitiativeCompetence(combatantId, arme) }
}); });
} }
new ContextMenu(html, ".directory-list", menuItems).render(); new ContextMenu(html, ".directory-list", menuItems).render();
@ -456,7 +429,7 @@ export class RdDCombat {
else { else {
const defender = target?.actor; const defender = target?.actor;
const defenderTokenId = target?.data._id; const defenderTokenId = target?.data._id;
if (defender.type == 'entite' && defender.data.data.definition.typeentite == ENTITE_NONINCARNE) { if ( defender.type == 'entite' && defender.data.data.definition.typeentite == 'nonincarne') {
ui.notifications.warn("Vous ne pouvez pas cibler une entité non incarnée !!!!"); ui.notifications.warn("Vous ne pouvez pas cibler une entité non incarnée !!!!");
} else { } else {
return this.create(attacker, defender, defenderTokenId, target) return this.create(attacker, defender, defenderTokenId, target)
@ -566,7 +539,7 @@ export class RdDCombat {
async onEvent(button, event) { async onEvent(button, event) {
const chatMessage = ChatUtility.getChatMessage(event); const chatMessage = ChatUtility.getChatMessage(event);
const defenderRoll = ChatUtility.getMessageData(chatMessage, 'defender-roll'); const defenderRoll = ChatUtility.getMessageData(chatMessage, 'defender-roll');
const attackerRoll = defenderRoll?.attackerRoll ?? ChatUtility.getMessageData(chatMessage, 'attacker-roll'); const attackerRoll = defenderRoll?.attackerRoll ?? ChatUtility.getMessageData(chatMessage, 'attacker-roll') ;
console.log('RdDCombat', attackerRoll, defenderRoll); console.log('RdDCombat', attackerRoll, defenderRoll);
const defenderTokenId = event.currentTarget.attributes['data-defenderTokenId']?.value; const defenderTokenId = event.currentTarget.attributes['data-defenderTokenId']?.value;
@ -759,7 +732,7 @@ export class RdDCombat {
/* -------------------------------------------- */ /* -------------------------------------------- */
async _onAttaqueParticuliere(rollData) { async _onAttaqueParticuliere(rollData) {
const isMeleeDiffNegative = (rollData.competence.type == 'competencecreature' || rollData.selectedCarac.label == "Mêlée") && rollData.diffLibre < 0; const isMeleeDiffNegative = (rollData.competence.type == 'competencecreature' || rollData.selectedCarac.label == "Mêlée") && rollData.diffLibre < 0;
// force toujours, sauf empoignade // force toujours, sauf empoignade
// finesse seulement en mélée, pour l'empoignade, ou si la difficulté libre est de -1 minimum // finesse seulement en mélée, pour l'empoignade, ou si la difficulté libre est de -1 minimum
@ -777,7 +750,7 @@ export class RdDCombat {
else if (!isForce && !isFinesse && isRapide) { else if (!isForce && !isFinesse && isRapide) {
return await this.choixParticuliere(rollData, "rapidite"); return await this.choixParticuliere(rollData, "rapidite");
} }
const choixParticuliere = await ChatMessage.create({ const choixParticuliere = await ChatMessage.create({
alias: this.attacker.name, alias: this.attacker.name,
whisper: ChatUtility.getWhisperRecipientsAndGMs(this.attacker.name), whisper: ChatUtility.getWhisperRecipientsAndGMs(this.attacker.name),
@ -798,7 +771,7 @@ export class RdDCombat {
async _onAttaqueNormale(attackerRoll) { async _onAttaqueNormale(attackerRoll) {
console.log("RdDCombat.onAttaqueNormale >>>", attackerRoll); console.log("RdDCombat.onAttaqueNormale >>>", attackerRoll);
attackerRoll.dmg = RdDBonus.dmg(attackerRoll, this.attacker.getBonusDegat(), this.defender.isEntite()); attackerRoll.dmg = RdDBonus.dmg(attackerRoll, this.attacker.getBonusDegat(), this.defender.isEntiteCauchemar());
let defenderRoll = { attackerRoll: attackerRoll, passeArme: attackerRoll.passeArme, show: {} } let defenderRoll = { attackerRoll: attackerRoll, passeArme: attackerRoll.passeArme, show: {} }
attackerRoll.show = { attackerRoll.show = {
cible: this.target ? this.defender.data.name : 'la cible', cible: this.target ? this.defender.data.name : 'la cible',
@ -816,7 +789,7 @@ export class RdDCombat {
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
isPossession(attackerRoll) { isPossession( attackerRoll) {
return attackerRoll.selectedCarac.label.toLowerCase() == 'possession'; return attackerRoll.selectedCarac.label.toLowerCase() == 'possession';
} }
@ -961,8 +934,9 @@ export class RdDCombat {
const arme = this.defender.getArmeParade(armeParadeId); const arme = this.defender.getArmeParade(armeParadeId);
console.log("RdDCombat.parade >>>", attackerRoll, armeParadeId, arme); console.log("RdDCombat.parade >>>", attackerRoll, armeParadeId, arme);
const competence = Misc.templateData(arme)?.competence; const competence = Misc.templateData(arme)?.competence;
if (competence == undefined) { if (competence == undefined)
console.error("Pas de compétence de parade associée à ", arme); {
console.error("Pas de compétence de parade associée à ", arme) ;
return; return;
} }
@ -1245,12 +1219,10 @@ export class RdDCombat {
/* -------------------------------------------- */ /* -------------------------------------------- */
/* retourne true si on peut continuer, false si on ne peut pas continuer */ /* retourne true si on peut continuer, false si on ne peut pas continuer */
async accorderEntite(when = 'avant-encaissement') { async accorderEntite(when = 'avant-encaissement') {
console.log("TETETET", game.settings.get(SYSTEM_RDD, "accorder-entite-cauchemar"), this.defender.isEntite([ENTITE_INCARNE]), this.defender.isEntiteAccordee(this.attacker))
if (when != game.settings.get(SYSTEM_RDD, "accorder-entite-cauchemar") if (when != game.settings.get(SYSTEM_RDD, "accorder-entite-cauchemar")
|| this.defender == undefined || this.defender == undefined
|| !this.defender.isEntite([ENTITE_INCARNE]) || !this.defender.isEntiteCauchemar()
|| this.defender.isEntiteAccordee(this.attacker)) { || this.defender.isEntiteCauchemarAccordee(this.attacker)) {
return true; return true;
} }

View File

@ -276,11 +276,9 @@ export class RdDCommands {
diff = 0; diff = 0;
} }
const caracName = params[0]; const caracName = params[0];
let competence = length > 1 ? actors[0].getCompetence(Misc.join(params.slice(1, length), ' ')) : undefined; const compName = length > 1 ? Misc.join(params.slice(1, length), ' ') : undefined;
if (competence) { for (let actor of actors) {
for (let actor of actors) { await actor.rollCaracCompetence(caracName, compName, diff);
await actor.rollCaracCompetence(caracName, competence.name, diff);
}
} }
return; return;
} }

View File

@ -1,29 +1,19 @@
import { RdDActor } from "./actor.js";
import { Misc } from "./misc.js"; import { Misc } from "./misc.js";
import { RdDDice } from "./rdd-dice.js"; import { RdDDice } from "./rdd-dice.js";
const words = ['pore', 'pre', 'flor', 'lane', 'turlu', 'pin', 'a', 'alph', 'i', 'onse', 'iane', 'ane', 'zach', 'arri', 'ba', 'bo', 'bi', const words = [ 'pore', 'pre', 'flor', 'lane', 'turlu', 'pin', 'a', 'alph', 'i', 'onse', 'iane', 'ane', 'zach', 'arri', 'ba', 'bo', 'bi',
'alta', 'par', 'pir', 'zor', 'zir', 'de', 'pol', 'tran', 'no', 'la', 'al', 'pul', 'one', 'ner', 'nur', 'mac', 'mery', 'alta', 'par', 'pir', 'zor', 'zir', 'de', 'pol', 'tran', 'no', 'la', 'al' , 'pul', 'one', 'ner', 'nur', 'mac', 'mery',
'cat', 'do', 'di', 'der', 'er', 'el', 'far', 'fer', 'go', 'guer', 'hot', 'jor', 'jar', 'ji', 'kri', 'ket', 'lor', 'hur', 'cat', 'do', 'di', 'der', 'er', 'el', 'far', 'fer', 'go', 'guer', 'hot', 'jor', 'jar', 'ji', 'kri', 'ket', 'lor', 'hur',
'lar', 'lir', 'lu', 'pot', 'pro', 'pra', 'pit', 'qua', 'qui', 're', 'ral', 'sal', 'sen', 'ted', 'to', 'ta', 'lars', 'ver', 'lar', 'lir', 'lu', 'pot', 'pro', 'pra', 'pit', 'qua', 'qui', 're', 'ral', 'sal', 'sen', 'ted', 'to', 'ta', 'lars', 'ver',
'vin', 'ov', 'wal', 'ry', 'ly', '']; 'vin', 'ov', 'wal', 'ry', 'ly', '' ];
/* -------------------------------------------- */ /* -------------------------------------------- */
export class RdDNameGen { export class RdDNameGen {
static async getName(msg, params) { static async getName( msg, params ) {
const html = await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-command-nom.html`, { let name = Misc.upperFirst( await RdDDice.rollOneOf(words) + await RdDDice.rollOneOf(words) )
nom: Misc.upperFirst(await RdDDice.rollOneOf(words) + await RdDDice.rollOneOf(words)) //console.log(name);
}); ChatMessage.create( { content: `Nom : ${name}`, whisper: ChatMessage.getWhisperRecipients("GM") } );
ChatMessage.create({ content: html, whisper: ChatMessage.getWhisperRecipients("GM") });
} }
static async onCreerActeur(event) {
const button = event.currentTarget;
await RdDActor.create({
name: button.attributes['data-nom'].value,
type: button.attributes['data-type'].value
},
{renderSheet: true});
}
} }

View File

@ -85,10 +85,15 @@ export class RdDPossession {
defender: defender, defender: defender,
competence: defender.getDraconicOuPossession(), competence: defender.getDraconicOuPossession(),
selectedCarac: defender.data.data.carac.reve, selectedCarac: defender.data.data.carac.reve,
forceCarac: { 'reve-actuel': { label: "Rêve Actuel", value: defender.getReveActuel() } }
} }
rollData.competence.data.defaut_carac = 'reve-actuel'
if (rollData.isECNIDefender) {
rollData.competence.data.defaut_carac = "reve"
rollData.forceCarac = { 'reve': { label: "Rêve", value: defender.data.data.carac.reve.value } }
} else {
rollData.competence.data.defaut_carac = 'reve-actuel'
rollData.forceCarac = { 'reve-actuel': { label: "Rêve Actuel", value: defender.getReveActuel() } }
}
const dialog = await RdDRoll.create(defender, rollData, const dialog = await RdDRoll.create(defender, rollData,
{ {

View File

@ -158,7 +158,6 @@ export class RdDResolutionTable {
if (difficulte < -10) { if (difficulte < -10) {
return duplicate(levelDown.find(levelData => levelData.level == difficulte)); return duplicate(levelDown.find(levelData => levelData.level == difficulte));
} }
console.log("DATA :", caracValue, difficulte)
return duplicate(RdDResolutionTable.resolutionTable[caracValue][difficulte + 10]); return duplicate(RdDResolutionTable.resolutionTable[caracValue][difficulte + 10]);
} }

View File

@ -1,5 +1,3 @@
import { ENTITE_BLURETTE, ENTITE_INCARNE, ENTITE_NONINCARNE } from "./constants.js";
/** /**
* Extend the base Dialog entity by defining a custom window to perform roll. * Extend the base Dialog entity by defining a custom window to perform roll.
* @extends {Dialog} * @extends {Dialog}
@ -9,19 +7,15 @@ export class RdDEncaisser extends Dialog {
/* -------------------------------------------- */ /* -------------------------------------------- */
constructor(html, actor) { constructor(html, actor) {
// Common conf // Common conf
let buttons = {}; const buttonsCreatures = {
if (!actor.isEntite()){ "mortel": { label: "Mortel", callback: html => this.performEncaisser("mortel") },
buttons = { "non-mortel": { label: "Non-mortel", callback: html => this.performEncaisser("non-mortel") },
"mortel": { label: "Mortel", callback: html => this.performEncaisser("mortel") }, "sonne": { label: "Sonné", callback: html => this.actor.setSonne() },
"non-mortel": { label: "Non-mortel", callback: html => this.performEncaisser("non-mortel") }, };
"sonne": { label: "Sonné", callback: html => this.actor.setSonne() }, const buttonsEntitesCauchemar = {
}; "cauchemar": { label: "cauchemar", callback: html => this.performEncaisser("cauchemar") }
} };
else if (actor.isEntite([ENTITE_BLURETTE, ENTITE_INCARNE])){ const buttons = actor.isEntiteCauchemar() ? buttonsEntitesCauchemar : buttonsCreatures;
buttons = {
"cauchemar": { label: "cauchemar", callback: html => this.performEncaisser("cauchemar") }
}
}
let dialogConf = { let dialogConf = {
title: "Jet d'Encaissement", title: "Jet d'Encaissement",
@ -30,6 +24,7 @@ export class RdDEncaisser extends Dialog {
default: "mortel" default: "mortel"
} }
let dialogOptions = { let dialogOptions = {
classes: ["rdddialog"], classes: ["rdddialog"],
width: 320, width: 320,

View File

@ -23,63 +23,40 @@ export class RdDTokenHud {
let token = canvas.tokens.get(tokenId); let token = canvas.tokens.get(tokenId);
let actor = token.actor; let actor = token.actor;
let combatant = game.combat.combatants.find(c => Misc.data(c).tokenId == tokenId); let combatant = game.combat.combatants.find(c => Misc.data(c).tokenId == tokenId);
if (! (combatant?.actor) ) {
ui.notifications.warn(`Le combatant ${token.name} n'est pas associé à un acteur, impossible de déterminer ses actions de combat!`)
return;
}
app.hasExtension = true; app.hasExtension = true;
let actionsCombat = RdDCombatManager.listActionsCombat(combatant); let armesList = RdDCombatManager.buildListeActionsCombat(combatant);
const hudData = { const hudData = {
combatant: combatant, combatant: combatant, armes: armesList,
actions: actionsCombat, commandes: [{ name: 'Initiative +1', command: 'inc', value: 0.01 }, { name: 'Initiative -1', command: 'dec', value: -0.01 }]
commandes: [
{ name: "Autre action", command: 'autre' },
{ name: 'Initiative +1', command: 'inc', value: 0.01 },
{ name: 'Initiative -1', command: 'dec', value: -0.01 }]
}; };
const controlIconCombat = html.find('.control-icon[data-action=combat]'); const controlIconCombat = html.find('.control-icon[data-action=combat]');
// initiative // initiative
await RdDTokenHud._configureSubMenu(controlIconCombat, await RdDTokenHud._configureSubMenu(controlIconCombat, 'systems/foundryvtt-reve-de-dragon/templates/hud-actor-init.html', hudData,
'systems/foundryvtt-reve-de-dragon/templates/hud-actor-init.html',
hudData,
(event) => { (event) => {
let initCommand = event.currentTarget.attributes['data-command']?.value; let initCommand = event.currentTarget.attributes['data-command'].value;
let combatantId = event.currentTarget.attributes['data-combatant-id']?.value; let combatantId = event.currentTarget.attributes['data-combatant-id'].value;
if (initCommand) { if (!initCommand) {
RdDTokenHud._initiativeCommand(initCommand, combatantId); let armeIndex = event.currentTarget.attributes['data-arme-id'].value;
} else { let arme = armesList[armeIndex];
let index = event.currentTarget.attributes['data-action-index'].value; RdDCombatManager.rollInitiativeCompetence(combatantId, arme);
let action = actionsCombat[index]; } else if (initCommand == 'inc') {
RdDCombatManager.rollInitiativeAction(combatantId, action); RdDCombatManager.incDecInit(combatantId, 0.01);
} } else if (initCommand == 'dec') {
RdDCombatManager.incDecInit(combatantId, -0.01);
}
}); });
const controlIconTarget = html.find('.control-icon[data-action=target]'); const controlIconTarget = html.find('.control-icon[data-action=target]');
// combat // combat
await RdDTokenHud._configureSubMenu(controlIconTarget, 'systems/foundryvtt-reve-de-dragon/templates/hud-actor-attaque.html', hudData, await RdDTokenHud._configureSubMenu(controlIconTarget, 'systems/foundryvtt-reve-de-dragon/templates/hud-actor-attaque.html', hudData,
(event) => { (event) => {
const actionIndex = event.currentTarget.attributes['data-action-index']?.value; let armeIndex = event.currentTarget.attributes['data-arme-id'].value;
const action = actionsCombat[actionIndex]; actor.rollArme(armesList[armeIndex]);
if (action.action == 'conjurer') {
actor.conjurerPossession(actor.getPossession(action.data.possessionid));
}
else {
actor.rollArme(action);
}
}); });
} }
static _initiativeCommand(initCommand, combatantId) {
switch (initCommand) {
case 'inc': return RdDCombatManager.incDecInit(combatantId, 0.01);
case 'dec': return RdDCombatManager.incDecInit(combatantId, -0.01);
case 'autre': return RdDCombatManager.rollInitiativeAction(combatantId,
{ name: "Autre action", action: 'autre', data: { initOnly: true, competence: "Autre action" } });
}
}
/* -------------------------------------------- */ /* -------------------------------------------- */
static async addTokenHudExtensions(app, html, tokenId) { static async addTokenHudExtensions(app, html, tokenId) {
const controlIconCombat = html.find('.control-icon[data-action=combat]'); const controlIconCombat = html.find('.control-icon[data-action=combat]');

View File

@ -11,7 +11,6 @@ import { RdDDice } from "./rdd-dice.js";
import { RdDItem } from "./item.js"; import { RdDItem } from "./item.js";
import { Monnaie } from "./item-monnaie.js"; import { Monnaie } from "./item-monnaie.js";
import { RdDPossession } from "./rdd-possession.js"; import { RdDPossession } from "./rdd-possession.js";
import { RdDNameGen } from "./rdd-namegen.js";
/* -------------------------------------------- */ /* -------------------------------------------- */
// This table starts at 0 -> niveau -10 // This table starts at 0 -> niveau -10
@ -122,12 +121,8 @@ export class RdDUtility {
'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',
// 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-conteneur.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-suivants.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/item-competence-sheet.html', 'systems/foundryvtt-reve-de-dragon/templates/item-competence-sheet.html',
@ -239,38 +234,36 @@ export class RdDUtility {
Handlebars.registerHelper('typeTmr-name', coord => TMRUtility.typeTmrName(coord)); Handlebars.registerHelper('typeTmr-name', coord => TMRUtility.typeTmrName(coord));
Handlebars.registerHelper('min', (...args) => Math.min(...args.slice(0, -1))); Handlebars.registerHelper('min', (...args) => Math.min(...args.slice(0, -1)));
Handlebars.registerHelper('filtreTriCompetences', competences => competences.filter(it => it.visible) Handlebars.registerHelper('sortCompetence', competences => competences.sort((a, b) => {
.sort((a, b) => { if (a.name.startsWith("Survie") && b.name.startsWith("Survie")) {
if (a.name.startsWith("Survie") && b.name.startsWith("Survie")) { if (a.name.includes("Cité")) return -1;
if (a.name.includes("Cité")) return -1; if (b.name.includes("Cité")) return 1;
if (b.name.includes("Cité")) return 1; if (a.name.includes("Extérieur")) return -1;
if (a.name.includes("Extérieur")) return -1; if (b.name.includes("Extérieur")) return 1;
if (b.name.includes("Extérieur")) return 1;
return a.name.localeCompare(b.name);
}
if (a.data.categorie.startsWith("melee") && b.data.categorie.startsWith("melee")) {
if (a.name.includes("Corps")) return -1;
if (b.name.includes("Corps")) return 1;
if (a.name.includes("Dague")) return -1;
if (b.name.includes("Dague")) return 1;
if (a.name.includes("Esquive")) return -1;
if (b.name.includes("Esquive")) return 1;
return a.name.localeCompare(b.name);
}
if (a.name.startsWith("Voie") && b.name.startsWith("Voie")) {
if (a.name.includes("Oniros")) return -1;
if (b.name.includes("Oniros")) return 1;
if (a.name.includes("Hypnos")) return -1;
if (b.name.includes("Hypnos")) return 1;
if (a.name.includes("Narcos")) return -1;
if (b.name.includes("Narcos")) return 1;
if (a.name.includes("Thanatos")) return -1;
if (b.name.includes("Thanatos")) return 1;
return a.name.localeCompare(b.name);
}
return a.name.localeCompare(b.name); return a.name.localeCompare(b.name);
}) }
); if (a.data.categorie.startsWith("melee") && b.data.categorie.startsWith("melee")) {
if (a.name.includes("Corps")) return -1;
if (b.name.includes("Corps")) return 1;
if (a.name.includes("Dague")) return -1;
if (b.name.includes("Dague")) return 1;
if (a.name.includes("Esquive")) return -1;
if (b.name.includes("Esquive")) return 1;
return a.name.localeCompare(b.name);
}
if (a.name.startsWith("Voie") && b.name.startsWith("Voie")) {
if (a.name.includes("Oniros")) return -1;
if (b.name.includes("Oniros")) return 1;
if (a.name.includes("Hypnos")) return -1;
if (b.name.includes("Hypnos")) return 1;
if (a.name.includes("Narcos")) return -1;
if (b.name.includes("Narcos")) return 1;
if (a.name.includes("Thanatos")) return -1;
if (b.name.includes("Thanatos")) return 1;
return a.name.localeCompare(b.name);
}
return a.name.localeCompare(b.name);
}));
return loadTemplates(templatePaths); return loadTemplates(templatePaths);
} }
@ -471,32 +464,34 @@ export class RdDUtility {
/** Construit la structure récursive des conteneurs, avec imbrication potentielle /** Construit la structure récursive des conteneurs, avec imbrication potentielle
* *
*/ */
static buildConteneur(objet, profondeur) { static buildConteneur(objet, niveau) {
if (!profondeur) profondeur = 1; if (!niveau) niveau = 1;
objet.niveau = profondeur; objet.niveau = niveau;
const isConteneur = objet.type == 'conteneur'; //console.log("OBJ:", objet);
const isOuvert = isConteneur && this.getAfficheContenu(objet._id); let str = Handlebars.partials['systems/foundryvtt-reve-de-dragon/templates/actor-sheet-inventaire-conteneur.html']({ item: objet });
const isVide = isConteneur && Misc.templateData(objet).contenu.length == 0; if (objet.type == 'conteneur') {
const conteneur = Handlebars.partials['systems/foundryvtt-reve-de-dragon/templates/actor-sheet-inventaire-item.html']({ const afficherContenu = this.getAfficheContenu(objet._id);
item: objet, str = str + RdDUtility.buildContenu(objet, niveau, afficherContenu);
vide: isVide, }
ouvert: isOuvert return str;
});
const contenu = isConteneur ? RdDUtility.buildContenu(objet, profondeur, isOuvert) : '';
return conteneur + contenu;
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
static buildContenu(objet, profondeur, afficherContenu) { static buildContenu(objet, niveau, afficherContenu) {
if (!profondeur) profondeur = 1; if (!niveau) niveau = 1;
objet.niveau = profondeur; objet.niveau = niveau;
const display = afficherContenu ? 'item-display-show' : 'item-display-hide'; let strContenu = "";
//console.log("ITEM DISPLAYED", objet ); //console.log("ITEM DISPLAYED", objet );
let strContenu = `<ul class='item-list alterne-list ${display} list-item-margin${profondeur}'>`; if (afficherContenu) {
for (let subItem of objet.subItems) { strContenu = "<ul class='item-list alterne-list item-display-show list-item-margin" + niveau + "'>";
strContenu += this.buildConteneur(subItem, profondeur + 1); } else {
strContenu = "<ul class='item-list alterne-list item-display-hide list-item-margin" + niveau + "'>";
} }
return strContenu + "</ul>"; for (let subItem of objet.subItems) {
strContenu = strContenu + this.buildConteneur(subItem, niveau + 1);
}
strContenu = strContenu + "</ul>";
return strContenu;
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
@ -709,7 +704,6 @@ export class RdDUtility {
// gestion bouton tchat Acheter // gestion bouton tchat Acheter
html.on("click", '.button-acheter', event => DialogItemAchat.onButtonAcheter(event)); html.on("click", '.button-acheter', event => DialogItemAchat.onButtonAcheter(event));
html.on("click", '.button-creer-acteur', event => RdDNameGen.onCreerActeur(event));
// Gestion du bouton payer // Gestion du bouton payer
html.on("click", '.payer-button', event => { html.on("click", '.payer-button', event => {

File diff suppressed because one or more lines are too long

View File

@ -65,11 +65,7 @@
--debug-box-shadow-blue: inset 0 0 2px blue; --debug-box-shadow-blue: inset 0 0 2px blue;
--debug-box-shadow-green: inset 0 0 2px green; --debug-box-shadow-green: inset 0 0 2px green;
/* =================== 3. some constants ============ */ /* =================== 3. some constants ============ */
--color-controls:rgba(0, 0, 0, 0.9);
--color-controls-hover:rgba(255, 255, 128, 0.7);
--color-control-border-hover:rgba(255, 128, 0, 0.8);
--color-gold: rgba(191, 149, 63, 0.8);
--gradient-gold: linear-gradient(30deg, rgba(191, 149, 63, 0.3), rgba(252, 246, 186, 0.3), rgba(179, 135, 40, 0.3), rgba(251, 245, 183, 0.3), rgba(170, 119, 28, 0.3)); --gradient-gold: linear-gradient(30deg, rgba(191, 149, 63, 0.3), rgba(252, 246, 186, 0.3), rgba(179, 135, 40, 0.3), rgba(251, 245, 183, 0.3), rgba(170, 119, 28, 0.3));
--gradient-silver: linear-gradient(30deg, rgba(61, 55, 93, 0.3), rgba(178, 179, 196, 0.3), rgba(59, 62, 63, 0.6), rgba(206, 204, 199, 0.3), rgba(61, 46, 49, 0.3)); --gradient-silver: linear-gradient(30deg, rgba(61, 55, 93, 0.3), rgba(178, 179, 196, 0.3), rgba(59, 62, 63, 0.6), rgba(206, 204, 199, 0.3), rgba(61, 46, 49, 0.3));
--gradient-green: linear-gradient(30deg, rgba(7, 76, 0, 0.3), rgba(66, 163, 65, 0.2), rgba(184, 226, 163, 0.1), rgba(66, 163, 65, 0.2), rgba(184, 226, 163, 0.3)); --gradient-green: linear-gradient(30deg, rgba(7, 76, 0, 0.3), rgba(66, 163, 65, 0.2), rgba(184, 226, 163, 0.1), rgba(66, 163, 65, 0.2), rgba(184, 226, 163, 0.3));
@ -108,9 +104,6 @@
.strong-text{ .strong-text{
font-weight: bold; font-weight: bold;
} }
i:is(.fas, .far) {
font-size: smaller;
}
.tabs .item.active, .blessures-list li ul li:first-child:hover, a:hover { .tabs .item.active, .blessures-list li ul li:first-child:hover, a:hover {
text-shadow: 1px 0px 0px #ff6600; text-shadow: 1px 0px 0px #ff6600;
@ -232,26 +225,6 @@ table {border: 1px solid #7a7971;}
flex-grow : 3; flex-grow : 3;
} }
/* Styles limited to foundryvtt-reve-de-dragon sheets */ /* Styles limited to foundryvtt-reve-de-dragon sheets */
.equipement-nom {
flex-grow : 4;
margin: 0;
justify-content: center;
text-align: left;
}
.equipement-detail {
margin: 0;
flex: 'flex-shrink' ;
align-items: center;
justify-content: center;
text-align: center;
}
.equipement-actions {
margin: 0;
flex-grow: 2;
align-items: center;
justify-content: center;
text-align: left;
}
.foundryvtt-reve-de-dragon .sheet-header { .foundryvtt-reve-de-dragon .sheet-header {
-webkit-box-flex: 0; -webkit-box-flex: 0;
@ -293,8 +266,14 @@ table {border: 1px solid #7a7971;}
height: 8%; height: 8%;
max-height: 48px; max-height: 48px;
border-width: 0; border-width: 0;
border: 1px solid rgba(0, 0, 0, 0); border: 1px solid rgba(0, 0, 0, 0);
} }
.button-img:hover {
color: rgba(255, 255, 128, 0.7);
border: 1px solid rgba(255, 128, 0, 0.8);
cursor: pointer;
}
.button-effect-img { .button-effect-img {
vertical-align: baseline; vertical-align: baseline;
width: 16px; width: 16px;
@ -302,16 +281,9 @@ table {border: 1px solid #7a7971;}
height: 16; height: 16;
border-width: 0; border-width: 0;
} }
.small-button-direction { .button-effect-img:hover {
height: 32px; color: rgba(255, 255, 128, 0.7);
width: 32px; border: 1px solid rgba(255, 128, 0, 0.8);
border: 0;
vertical-align: bottom;
}
:is(.button-img,.button-effect-img:hover,.small-button-direction):hover {
color: var(--color-controls-hover);
border: 1px solid var(--color-control-border-hover);
text-shadow: 1px 0px 0px #ff6600;
cursor: pointer; cursor: pointer;
} }
@ -322,6 +294,18 @@ table {border: 1px solid #7a7971;}
vertical-align: bottom; vertical-align: bottom;
} }
.small-button-direction {
height: 32px;
width: 32px;
border: 0;
vertical-align: bottom;
}
.small-button-direction:hover {
color: rgba(255, 255, 128, 0.7);
border: 1px solid rgba(255, 128, 0, 0.8);
cursor: pointer;
}
.foundryvtt-reve-de-dragon .sheet-header .header-fields { .foundryvtt-reve-de-dragon .sheet-header .header-fields {
-webkit-box-flex: 1; -webkit-box-flex: 1;
-ms-flex: 1; -ms-flex: 1;
@ -362,25 +346,25 @@ table {border: 1px solid #7a7971;}
flex-grow: 0; flex-grow: 0;
} }
.rdd.sheet .window-content .sheet-body .carac-list .caracteristique { .rdd.sheet .window-content .sheet-body .carac-list .competence {
flex-wrap: nowrap; flex-wrap: nowrap;
justify-content: stretch; justify-content: stretch;
} }
.rdd.sheet .window-content .sheet-body .carac-list .caracteristique > .carac-label { .rdd.sheet .window-content .sheet-body .carac-list .competence > .carac-label {
flex-basis: 50%; flex-basis: 50%;
} }
.rdd.sheet .window-content .sheet-body .carac-list .caracteristique > .attribut-label { .rdd.sheet .window-content .sheet-body .carac-list .competence > .attribut-label {
flex-basis: 50%; flex-basis: 50%;
} }
.rdd.sheet .window-content .sheet-body .carac-list .caracteristique > .competence-value.total { .rdd.sheet .window-content .sheet-body .carac-list .competence > .competence-value.total {
flex-grow: 1; flex-grow: 1;
text-align: right; text-align: right;
} }
.rdd.sheet .window-content .sheet-body .carac-list .caracteristique > .utiliser-attribut { .rdd.sheet .window-content .sheet-body .carac-list .competence > .utiliser-attribut {
flex-basis: available; flex-basis: available;
flex-grow: 1; flex-grow: 1;
} }
.rdd.sheet .window-content .sheet-body .carac-list .caracteristique > * { .rdd.sheet .window-content .sheet-body .carac-list .competence > * {
flex-basis: 13%; flex-basis: 13%;
flex-grow: 0; flex-grow: 0;
} }
@ -485,18 +469,13 @@ table {border: 1px solid #7a7971;}
flex: 0 0 86px; flex: 0 0 86px;
text-align: right; text-align: right;
} }
.competence-list .item-controls { .competence-list .item-controls {
display: contents !important; display: contents !important;
} }
.competence-list .item-controls.hidden-controls { .competence-list .item-controls.hidden-controls {
display: none !important; display: none !important;
} }
.item-controls i:is(.fas,.far) {
color: var(--color-controls);
}
.item-controls i:is(.fas,.far):hover {
opacity: 0.7 ;
}
.rdddialog .dialog-roll-sort s{ .rdddialog .dialog-roll-sort s{
width: 600px; width: 600px;
@ -588,7 +567,7 @@ table {border: 1px solid #7a7971;}
color: rgba(255, 255, 255, 0.75); color: rgba(255, 255, 255, 0.75);
background: rgba(255, 255, 255, 0.05); background: rgba(255, 255, 255, 0.05);
border: 0 none; border: 0 none;
margin-bottom: 0.2rem; margin-bottom: 0.25rem;
} }
.window-app .window-content, .window-app.sheet .window-content .sheet-body{ .window-app .window-content, .window-app.sheet .window-content .sheet-body{
@ -622,7 +601,7 @@ section.sheet-body{padding: 0.25rem 0.5rem;}
nav.sheet-tabs .item { nav.sheet-tabs .item {
position: relative; position: relative;
padding: 0 0.2rem; padding: 0 0.25rem;
} }
nav.sheet-tabs .item:after { nav.sheet-tabs .item:after {
@ -648,15 +627,11 @@ section.sheet-body:after {
.sheet header.sheet-header .flex-compteurs {text-align: right;} .sheet header.sheet-header .flex-compteurs {text-align: right;}
.sheet header.sheet-header .resource-content {width: 2rem;} .sheet header.sheet-header .resource-content {width: 2rem;}
.compteur span { .ctn-vie span, .ctn-endu span, .ctn-fatigue span, .ctn-reve span {
display: inline-block; display: inline-block;
text-align: left; text-align: left;
width: 2rem; width: 2rem;
} }
.compteur a i:is(.fas,.far):hover {
opacity: 0.7 ;
}
.select-diff { .select-diff {
display: inline-block; display: inline-block;
text-align: left; text-align: left;
@ -669,6 +644,17 @@ section.sheet-body:after {
max-width: 90%; max-width: 90%;
} }
.plus-moins {
display: inline-block;
width: 1.25rem;
background: rgba(30, 25, 20, 1);
text-align: center;
border: 1px solid rgba(72, 46, 28, 1);
border-radius: 0.25rem;
line-height: 1.25rem;
color: rgba(255, 255, 255, 0.5);
}
.alchimie-tache { .alchimie-tache {
font-weight: bold; font-weight: bold;
background: rgb(182, 180, 179); background: rgb(182, 180, 179);
@ -725,13 +711,10 @@ ul, ol {
ul, li { ul, li {
list-style-type: none; list-style-type: none;
} }
.sheet .caracteristique li {
margin: 0.1rem;
padding: 0.2rem;
}
.sheet li { .sheet li {
margin: 0.1rem; margin: 0.125rem;
padding: 0.1rem; padding: 0.25rem;
} }
.header-fields li { .header-fields li {
margin: 0; margin: 0;
@ -748,19 +731,23 @@ ul, li {
background: rgb(160, 130, 100, 0.05); background: rgb(160, 130, 100, 0.05);
} }
.xp-level-up { .xp-level-up {
margin: 0.1rem; margin: 0.125rem;
box-shadow: inset 0px 0px 1px #00000096; box-shadow: inset 0px 0px 1px #00000096;
border-radius: 0.25rem; border-radius: 0.25rem;
padding: 0.1rem; padding: 0.125rem;
flex: 1 1 5rem; flex: 1 1 5rem;
background: var(--gradient-gold) !important; background: var(--gradient-gold) !important;
} }
.niveau-archetype { .niveau-archetype {
background: var(--gradient-silver-light) !important; background: var(--gradient-silver-light) !important;
} }
.item-controls i.fas.allouer-stress.level-up { .fa-arrow-alt-circle-up.allouer-stress {
color: var(--color-gold); color: rgba(83, 60, 14, 0.8);
} }
.fa-arrow-alt-circle-up.allouer-stress-level-up {
color: rgba(191, 149, 63, 0.8);
}
.blessures-list ul { .blessures-list ul {
display: flex; display: flex;
} }
@ -779,18 +766,18 @@ ul, li {
font-weight: bold; font-weight: bold;
} }
.list-item { .list-item {
margin: 0.1rem; margin: 0.125rem;
box-shadow: inset 0px 0px 1px #00000096; box-shadow: inset 0px 0px 1px #00000096;
border-radius: 0.25rem; border-radius: 0.25rem;
padding: 0.1rem; padding: 0.125rem;
flex: 1 1 5rem; flex: 1 1 5rem;
display: flex !important; display: flex !important;
align-items: center !important; align-items: baseline !important;
} }
.table-row { .table-row {
margin: 0.1rem; margin: 0.125rem;
padding: 0.1rem; padding: 0.125rem;
flex: 1 1 5rem; flex: 1 1 5rem;
} }
@ -814,37 +801,28 @@ ul, li {
background: rgb(200, 10, 100, 0.25); background: rgb(200, 10, 100, 0.25);
} }
.item-column { .item-quantite {
margin-left: 0.2rem; margin-left: 0.5rem;
margin-right: 0.2rem;
justify-content: center;
text-align: center;
} }
.list-item-margin1 { .list-item-margin1 {
margin-left: 0.5rem;
}
.list-item-margin2 {
margin-left: 1rem; margin-left: 1rem;
} }
.list-item-margin3 { .list-item-margin2 {
margin-left: 1.5rem;
}
.list-item-margin4 {
margin-left: 2rem; margin-left: 2rem;
} }
.list-item-margin5 { .list-item-margin3 {
margin-left: 2.5rem;
}
.list-item-margin6 {
margin-left: 3rem; margin-left: 3rem;
} }
.list-item-margin4 {
margin-left: 4rem;
}
.sheet-competence-img { .sheet-competence-img {
width: 24px; width: 24px;
height: 24px; height: 24px;
flex-grow: 0; flex-grow: 0;
margin-right: 0.2rem; margin-right: 0.25rem;
vertical-align: bottom; vertical-align: bottom;
} }
.competence-column { .competence-column {
@ -888,20 +866,20 @@ ul, li {
.competence-value { .competence-value {
flex-grow: 0; flex-grow: 0;
flex-basis: 2rem; flex-basis: 2rem;
margin-right: 0.2rem; margin-right: 0.25rem;
margin-left: 0.2rem; margin-left: 0.25rem;
} }
.description-value { .description-value {
flex-grow: 0; flex-grow: 0;
flex-basis: 4rem; flex-basis: 4rem;
margin-right: 0.2rem; margin-right: 0.25rem;
margin-left: 0.2rem; margin-left: 0.25rem;
} }
.competence-xp { .competence-xp {
flex-grow: 0; flex-grow: 0;
flex-basis: 2rem; flex-basis: 2rem;
margin-right: 0.2rem; margin-right: 0.25rem;
margin-left: 0.2rem; margin-left: 0.25rem;
} }
.blessures-title { .blessures-title {
font-weight: bold; font-weight: bold;
@ -979,7 +957,7 @@ ul, li {
flex-basis: auto; flex-basis: auto;
padding: 0; padding: 0;
line-height: 1rem; line-height: 1rem;
margin: 0.2rem; margin: 0.25rem;
} }
.control-icon.tokenhudicon.right { .control-icon.tokenhudicon.right {
margin-left: 8px; margin-left: 8px;
@ -997,7 +975,7 @@ ul, li {
border-left: none; border-left: none;
font-weight: 500; font-weight: 500;
font-size: 1rem; font-size: 1rem;
color: var(--color-controls); color: black;
padding-top: 5px; padding-top: 5px;
margin-right: 0px; margin-right: 0px;
width: 45px; width: 45px;
@ -1097,7 +1075,7 @@ ul, li {
.sidebar-tab .directory-list .entity { .sidebar-tab .directory-list .entity {
border-top: 1px dashed rgba(0,0,0,0.25); border-top: 1px dashed rgba(0,0,0,0.25);
border-bottom: 0 none; border-bottom: 0 none;
padding: 0.2rem 0; padding: 0.25rem 0;
} }
.sidebar-tab .directory-list .entity:hover { .sidebar-tab .directory-list .entity:hover {
@ -1175,11 +1153,11 @@ ul, li {
border-image-width: 4px; border-image-width: 4px;
border-image-outset: 0px; border-image-outset: 0px;
} }
#controls .control-tools { #controls .control-tools {
max-height: calc(100vh - 156px); max-height: calc(100vh - 156px);
height: auto; height: auto;
} }
#controls :is(.scene-control.active,.control-tool.active, .scene-control:hover, .control-tool:hover) { #controls .scene-control.active, #controls .control-tool.active, #controls .scene-control:hover, #controls .control-tool:hover {
background: rgba(72, 46, 28, 1); background: rgba(72, 46, 28, 1);
background-origin: padding-box; background-origin: padding-box;
border-image: url(img/ui/footer-button.webp) 10 repeat; border-image: url(img/ui/footer-button.webp) 10 repeat;
@ -1365,8 +1343,8 @@ ul, li {
color: rgba(255, 255, 255, 0.5); color: rgba(255, 255, 255, 0.5);
} }
.calendar-btn:hover { .calendar-btn:hover {
color: var(--color-controls-hover); color: rgba(255, 255, 128, 0.7);
border: 1px solid var(--color-control-border-hover); border: 1px solid rgba(255, 128, 0, 0.8);
cursor: pointer; cursor: pointer;
} }

View File

@ -29,7 +29,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",
"flags": {}, "flags": {},
"version": "1.5.90", "version": "1.5.80",
"minimumCoreVersion": "0.8.0", "minimumCoreVersion": "0.8.0",
"compatibleCoreVersion": "9", "compatibleCoreVersion": "9",
"scripts": [], "scripts": [],
@ -500,7 +500,7 @@
"dependencies": [], "dependencies": [],
"socket": true, "socket": true,
"manifest": "https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/raw/v1.5/system.json", "manifest": "https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/raw/v1.5/system.json",
"download": "https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/archive/foundryvtt-reve-de-dragon-1.5.90.zip", "download": "https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/archive/foundryvtt-reve-de-dragon-1.5.80.zip",
"protected": false, "protected": false,
"gridDistance": 1, "gridDistance": 1,
"gridUnits": "m", "gridUnits": "m",

View File

@ -1,5 +1,5 @@
<tr class="table-row alterne-row item" data-blessure-type="{{gravite}}" data-attribute={{key}} data-blessure-index="{{key}}" > <tr class="table-row alterne-row item" data-blessure-type="{{gravite}}" data-attribute={{key}} data-blessure-index="{{key}}" >
<td class="blessure-control" title="Blessure {{title}}" data-blessure-active="{{bless.active}}"> <td class="item-control blessure-control" title="Blessure {{title}}" data-blessure-active="{{bless.active}}">
{{#if bless.active}} {{#if bless.active}}
<i class="fas fa-skull-crossbones blessure-active-{{gravite}}" name="blessure-{{gravite}}-{{key}}-active"></i> <i class="fas fa-skull-crossbones blessure-active-{{gravite}}" name="blessure-{{gravite}}-{{key}}-active"></i>
{{else}} {{else}}

View File

@ -108,8 +108,8 @@
<input class="competence-value creature-dommages" type="text" compname="{{comp.name}}" <input class="competence-value creature-dommages" type="text" compname="{{comp.name}}"
value="{{numberFormat comp.data.dommages decimals=0 sign=true}}" data-dtype="number" /> value="{{numberFormat comp.data.dommages decimals=0 sign=true}}" data-dtype="number" />
<div class="item-controls"> <div class="item-controls">
<a class="item-edit" title="Edit Item"><i class="fas fa-edit"></i></a> <a class="item-control item-edit" title="Edit Item"><i class="fas fa-edit"></i></a>
<a class="item-delete" title="Delete Item"><i class="fas fa-trash"></i></a> <a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
</div> </div>
</li> </li>
{{/each}} {{/each}}
@ -126,7 +126,35 @@
{{!-- Equipment Tab --}} {{!-- Equipment Tab --}}
<div class="tab items" data-group="primary" data-tab="items"> <div class="tab items" data-group="primary" data-tab="items">
{{> "systems/foundryvtt-reve-de-dragon/templates/actor-sheet-inventaire.html"}}
{{> "systems/foundryvtt-reve-de-dragon/templates/actor-sheet-inventaire-monnaie.html" monnaie=monnaie}}
<span class="item-name"><h4>Equipement porté</h4></span>
<span class="item-name">Encombrement total/max : {{numberFormat calc.encTotal decimals=2}} / {{data.attributs.encombrement.value}} <b>{{calc.surEncombrementMessage}}</b></span> -
<span class="item-name"><a class="creer-un-objet">Créer un objet</a></span>
{{#if options.isGM}}
<span class="item-name"> - <a id="nettoyer-conteneurs">Vider tout les conteneurs</a></span>
{{/if}}
<ul class="item-list alterne-list">
<li class="competence-header flexrow">
<img class="sheet-competence-img" src="{{img}}" title="Equipement"/>
<span class="competence-title flex-grow">Nom</span>
<span class="competence-title">Q.</span>
<span class="competence-title">Enc.</span>
<span class="competence-title flex-grow">Equiper/Editer/Suppr.</span>
</li>
{{#each objets as |item id|}}
{{#unless item.estContenu}}
{{#if (ne item.type 'conteneur')}}
{{> "systems/foundryvtt-reve-de-dragon/templates/actor-sheet-inventaire-conteneur.html" item=item }}
{{/if}}
{{/unless}}
{{/each}}
{{#each conteneurs as |conteneur id|}}
{{buildConteneur this}}
{{/each}}
</ul>
</div> </div>
{{!-- Biography Tab --}} {{!-- Biography Tab --}}

View File

@ -28,12 +28,12 @@
{{!-- Carac Tab --}} {{!-- Carac Tab --}}
<div class="tab items" data-group="primary" data-tab="carac"> <div class="tab items" data-group="primary" data-tab="carac">
<div class="grid grid-2col"> <div class="grid grid-2col">
<div class="flex-group-left flexcol"> <div class="flex-group-left flexcol">
<ol class="carac-list alterne-list"> <ol class="carac-list alterne-list">
{{#each data.carac as |carac key|}} {{#each data.carac as |carac key|}}
<li class="caracteristique flexrow list-item" data-attribute="{{key}}"> <li class="competence flexrow list-item" data-attribute="{{key}}">
{{#if (eq key 'taille')}} {{#if (eq key 'taille')}}
<span class="carac-label flexrow" name="data.carac.{{key}}.label">{{carac.label}}</span> <span class="carac-label flexrow" name="data.carac.{{key}}.label">{{carac.label}}</span>
{{else}} {{else}}
@ -50,7 +50,7 @@
<div class="flex-group-left flexcol"> <div class="flex-group-left flexcol">
<ol class="carac-list alterne-list"> <ol class="carac-list alterne-list">
<li class="caracteristique flexrow list-item"> <li class="competence flexrow list-item">
<span class="carac-label flexrow" name="catEntite">Catégorie : </span> <span class="carac-label flexrow" name="catEntite">Catégorie : </span>
<select name="data.definition.categorieentite" value="{{data.definition.categorieentite}}" data-dtype="String"> <select name="data.definition.categorieentite" value="{{data.definition.categorieentite}}" data-dtype="String">
{{#select data.definition.categorieentite}} {{#select data.definition.categorieentite}}
@ -59,24 +59,23 @@
{{/select}} {{/select}}
</select> </select>
</li> </li>
<li class="caracteristique flexrow list-item"> <li class="competence flexrow list-item">
<span class="carac-label flexrow" name="typeEntite">Type d'entité : </span> <span class="carac-label flexrow" name="typeEntite">Type d'entité : </span>
<select name="data.definition.typeentite" value="{{data.definition.typeentite}}" data-dtype="String"> <select name="data.definition.typeentite" value="{{data.definition.typeentite}}" data-dtype="String">
{{#select data.definition.typeentite}} {{#select data.definition.typeentite}}
<option value="incarne">Incarnée</option> <option value="incarne">Incarnée</option>
<option value="nonincarne">Non Incarnée</option> <option value="nonincarne">Non Incarnée</option>
<option value="blurette">Blurete</option>
{{/select}} {{/select}}
</select> </select>
</li> </li>
{{#each data.attributs as |attr key|}} {{#each data.attributs as |attr key|}}
<li class="caracteristique flexrow list-item" data-attribute="{{key}}"> <li class="competence flexrow list-item" data-attribute="{{key}}">
<span class="carac-label flexrow" name="data.attributs.{{key}}.label">{{attr.label}} : </span> <span class="carac-label flexrow" name="data.attributs.{{key}}.label">{{attr.label}} : </span>
<span><input class="attribut-value flexrow" type="text" name="data.attributs.{{key}}.value" <span><input class="attribut-value flexrow" type="text" name="data.attributs.{{key}}.value"
value="{{attr.value}}" data-dtype="{{attr.type}}" /></span> value="{{attr.value}}" data-dtype="{{attr.type}}" /></span>
</li> </li>
{{/each}} {{/each}}
<li class="caracteristique flexrow list-item" data-attribute="endurance"> <li class="competence flexrow list-item" data-attribute="endurance">
<span class="competence-label flexrow" name="data.sante.endurance.label">Endurance : </span> <span class="competence-label flexrow" name="data.sante.endurance.label">Endurance : </span>
<span><input class="sante-value flexrow" type="text" name="data.sante.endurance.value" <span><input class="sante-value flexrow" type="text" name="data.sante.endurance.value"
value="{{data.sante.endurance.value}}" data-dtype="Number" /></span><span>/ </span> value="{{data.sante.endurance.value}}" data-dtype="Number" /></span><span>/ </span>
@ -90,7 +89,9 @@
{{!-- Compétences Tab --}} {{!-- Compétences Tab --}}
<div class="tab competences" data-group="primary" data-tab="competences"> <div class="tab competences" data-group="primary" data-tab="competences">
<div class="flexcol"> <div class="flexcol">
<div class="flex-group-left flexcol competence-column"> <div class="flex-group-left flexcol competence-column">
<ol class="item-list alterne-list"> <ol class="item-list alterne-list">
{{#each competences as |comp key|}} {{#each competences as |comp key|}}
@ -104,30 +105,31 @@
<input class="competence-value creature-dommages" type="text" compname="{{comp.name}}" <input class="competence-value creature-dommages" type="text" compname="{{comp.name}}"
value="{{numberFormat comp.data.dommages decimals=0 sign=true}}" data-dtype="number" /> value="{{numberFormat comp.data.dommages decimals=0 sign=true}}" data-dtype="number" />
<div class="item-controls"> <div class="item-controls">
<a class="item-edit" title="Edit Item"><i class="fas fa-edit"></i></a> <a class="item-control item-edit" title="Edit Item"><i class="fas fa-edit"></i></a>
<a class="item-delete" title="Delete Item"><i class="fas fa-trash"></i></a> <a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
</div>
</li>
{{/each}}
</ol>
</div>
<div class="flex-group-left flexcol competence-column">
<ol class="item-list alterne-list">
{{#each possessions as |possession key|}}
<li class="item flexrow list-item" data-item-id="{{possession._id}}">
<img class="sheet-competence-img" src="{{possession.img}}" />
<span class="competence-label">{{possession.name}}</span>
<div class="item-controls">
<a class="item-edit" title="Edit Item"><i class="fas fa-edit"></i></a>
<a class="item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
</div> </div>
</li> </li>
{{/each}} {{/each}}
</ol> </ol>
<div class="flex-group-left flexcol competence-column">
<ol class="item-list alterne-list">
{{#each possessions as |possession key|}}
<li class="item flexrow list-item" data-item-id="{{possession._id}}">
<img class="sheet-competence-img" src="{{possession.img}}" />
<span class="competence-label">{{possession.name}}</span>
<div class="item-controls">
<a class="item-control item-edit" title="Edit Item"><i class="fas fa-edit"></i></a>
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
</div>
</li>
{{/each}}
</ol>
</div> </div>
</div> </div>
</div> </div>
{{!-- Biography Tab --}} {{!-- Biography Tab --}}
<div class="tab description" data-group="primary" data-tab="description"> <div class="tab description" data-group="primary" data-tab="description">
<div class="form-group editor"> <div class="form-group editor">
@ -135,6 +137,8 @@
</div> </div>
{{>"systems/foundryvtt-reve-de-dragon/templates/actor-sheet-editor-notes-mj.html"}} {{>"systems/foundryvtt-reve-de-dragon/templates/actor-sheet-editor-notes-mj.html"}}
</div> </div>
</div>
</section> </section>
</form> </form>

View File

@ -1,31 +1,27 @@
{{#if competences}} <header class="competence-header flexrow">
<div class="flex-shrink"> <span class="competence-title">{{categorie}}</span>
<header class="competence-header flexrow"> </header>
<span class="competence-title">{{categorie}}</span> <ul class="item-list alterne-list competence-list">
</header> {{#if @root.options.vueDetaillee}}
<ul class="item-list alterne-list competence-list"> <li class="item flexrow list-item ">
{{#if @root.options.vueDetaillee}}
<li class="item flexrow list-item "> <span class="competence-label"></span>
<span class="competence-value" >Niv.</span>
<span class="competence-label"></span> <span class="competence-xp">xp</span>
<span class="competence-value" >Niv.</span> {{#if (eq categorie 'Draconic')}}
<span class="competence-xp">xp</span> <span class="competence-xp-sort">sort</span>
{{#if (eq categorie 'Draconic')}}
<span class="competence-xp-sort">sort</span>
{{/if}}
<div class="item-controls">
<i class="far fa-arrow-alt-circle-up"></i>
<span class="competence-archetype">Arch</span>
<i class="far fa-edit"></i>
{{#if @root.options.isGM}}
<i class="far fa-trash"></i>
{{/if}}
</div>
</li>
{{/if}} {{/if}}
{{#each competences as |comp key|}} <div class="item-controls">
{{> "systems/foundryvtt-reve-de-dragon/templates/actor-sheet-competence-partial.html" comp}} <i class="far fa-arrow-alt-circle-up"></i>
{{/each}} <span class="competence-archetype">Arch</span>
</ul> <i class="far fa-edit"></i>
</div> {{#if @root.options.isGM}}
{{/if}} <i class="far fa-trash"></i>
{{/if}}
</div>
</li>
{{/if}}
{{#each competences as |comp key|}}
{{> "systems/foundryvtt-reve-de-dragon/templates/actor-sheet-competence-partial.html" comp}}
{{/each}}
</ul>

View File

@ -7,7 +7,7 @@
{{#if data.isLevelUp}} {{#if data.isLevelUp}}
<span class="tooltiptext ttt-xp">Vous pouvez dépenser {{data.xpNext}} points d'Experience pour augmenter de 1 votre compétence {{name}}</span> <span class="tooltiptext ttt-xp">Vous pouvez dépenser {{data.xpNext}} points d'Experience pour augmenter de 1 votre compétence {{name}}</span>
<a class="competence-xp-augmenter" compname="{{name}}" title="Augmenter"> <a class="item-control competence-xp-augmenter" compname="{{name}}" title="Augmenter">
<i class="fas fa-arrow-alt-circle-up"></i> <i class="fas fa-arrow-alt-circle-up"></i>
</a> </a>
{{/if}} {{/if}}
@ -31,9 +31,9 @@
{{#if @root.options.vueDetaillee}} {{#if @root.options.vueDetaillee}}
<div class="item-controls"> <div class="item-controls">
{{#if data.stressXpMax}} {{#if data.stressXpMax}}
<a class="competence-stress-augmenter" compname="{{name}}" <a class="item-control competence-stress-augmenter" compname="{{name}}"
title="Dépenser {{data.stressXpMax}} points de stress {{#if data.isStressLevelUp}} pour augmenter d'un niveau {{/if}}"> title="Dépenser {{data.stressXpMax}} points de stress {{#if data.isStressLevelUp}} pour augmenter d'un niveau {{/if}}">
<i class="fas fa-arrow-alt-circle-up allouer-stress {{#if data.isStressLevelUp}}level-up{{/if}}"></i> <i class="fas fa-arrow-alt-circle-up allouer-stress{{#if data.isStressLevelUp}}-level-up{{/if}}"></i>
</a> </a>
{{else}} {{else}}
<i class="far fa-circle"></i> <i class="far fa-circle"></i>
@ -41,9 +41,9 @@
<input class="competence-archetype niveau-archetype" type="text" compname="{{name}}" name="comp-archetype-{{name}}" <input class="competence-archetype niveau-archetype" type="text" compname="{{name}}" name="comp-archetype-{{name}}"
value="{{numberFormat data.niveau_archetype decimals=0 sign=true}}" data-dtype="number" value="{{numberFormat data.niveau_archetype decimals=0 sign=true}}" data-dtype="number"
{{#unless @root.options.editCaracComp}}disabled{{/unless}} /> {{#unless @root.options.editCaracComp}}disabled{{/unless}} />
<a class="item-edit" title="Modifier"><i class="fas fa-edit"></i></a> <a class="item-control item-edit" title="Modifier"><i class="fas fa-edit"></i></a>
{{#if @root.options.isGM}} {{#if @root.options.isGM}}
<a class="item-delete" title="Supprimer"><i class="fas fa-trash"></i></a> <a class="item-control item-delete" title="Supprimer"><i class="fas fa-trash"></i></a>
{{/if}} {{/if}}
</div> </div>
{{/if}} {{/if}}

View File

@ -0,0 +1,32 @@
<li class="item flexrow list-item" data-item-id="{{item._id}}" draggable="true">
<img class="sheet-competence-img" src="{{item.img}}" title="{{item.name}}"/>
{{#if (eq item.type 'conteneur')}}
<span class="item-name conteneur-name flex-grow"><a data-item-id="{{item._id}}">+{{item.name}}</a></span>
{{else}}
<span class="item-name flex-grow">{{item.name}}</span>
{{/if}}
<span class="item-quantite">{{item.data.quantite}}
{{#if (gt item.data.quantite 1)}}
<a class="item-control item-split" title="Séparer"><i class="fas fa-unlink"></i></a>
{{/if}}
</span>
<span class="item-quantite">{{numberFormat item.data.encTotal decimals=2}}</span>
<div class="item-controls flex-grow">
{{#unless item.estContenu}}
{{#if (ne item.type 'conteneur')}}
<a class="item-control item-equip" title="Equiper">{{#if item.data.equipe}}<i class="fas fa-hand-rock"></i>{{else}}<i class="far fa-hand-paper"></i>{{/if}}</a>
{{/if}}
{{/unless}}
<a class="item-control item-edit" title="Editer"><i class="fas fa-edit"></i></a>
<a class="item-control item-delete" title="Supprimer"><i class="fas fa-trash"></i></a>
{{#if (or (eq item.type 'arme') (eq item.type 'conteneur') item.data.quantite)}}
&nbsp;
<a class="item-control item-vendre" title="Vendre ou donner"><i class="fas fa-comments-dollar"></i></a>
{{/if}}
<a class="item-control item-montrer" title="Montrer"><i class="fas fa-comment"></i></a>
{{#if item.data.actionPrincipale}}
<a class="item-name item-action">{{item.data.actionPrincipale}}</a>
{{/if}}
</div>
</li>

View File

@ -1,48 +0,0 @@
<li class="item flexrow list-item" data-item-id="{{item._id}}" draggable="true">
<span class="equipement-nom {{#if (eq item.type 'conteneur')}}conteneur-name{{/if}} ">
{{#if (eq item.type 'conteneur')}}
{{#if vide}}
<i class="far fa-square"></i>
{{else}}
<a data-item-id="{{item._id}}">
{{#if ouvert}}
<i class="far fa-minus-square"></i>
{{else}}
<i class="far fa-plus-square"></i>
{{/if}}
</a>
{{/if}}
<a data-item-id="{{item._id}}">
<img class="sheet-competence-img" src="{{item.img}}" title="{{item.name}}"/>
<span>{{item.name}}</span>
</a>
{{else}}
<img class="sheet-competence-img" src="{{item.img}}" title="{{item.name}}"/>
<span>{{item.name}}</span>
{{/if}}
</span>
<span class="equipement-detail">{{item.data.quantite}}
{{#if (gt item.data.quantite 1)}}
<a class="item-split" title="Séparer"><i class="fas fa-unlink"></i></a>
{{/if}}
</span>
<span class="equipement-detail">{{numberFormat item.data.encTotal decimals=2}}</span>
<span class="equipement-actions item-controls">
{{#unless item.estContenu}}
{{#if (ne item.type 'conteneur')}}
<a class="item-equip" title="Equiper">{{#if item.data.equipe}}<i class="fas fa-hand-rock"></i>{{else}}<i class="far fa-hand-paper"></i>{{/if}}</a>
{{/if}}
{{/unless}}
<a class="item-edit" title="Editer"><i class="fas fa-edit"></i></a>
<a class="item-delete" title="Supprimer"><i class="fas fa-trash"></i></a>
&nbsp;
{{#if (or (eq item.type 'arme') (eq item.type 'conteneur') item.data.quantite)}}
<a class="item-vendre" title="Vendre ou donner"><i class="fas fa-comments-dollar"></i></a>
{{/if}}
<a class="item-montrer" title="Montrer"><i class="fas fa-comment"></i></a>
{{#if item.data.actionPrincipale}}
<a class="item-action">{{item.data.actionPrincipale}}</a>
{{/if}}
</span>
</li>

View File

@ -3,26 +3,16 @@
{{#each monnaie as |piece id|}} {{#each monnaie as |piece id|}}
<li class="item flexrow list-item" data-item-id="{{piece._id}}"> <li class="item flexrow list-item" data-item-id="{{piece._id}}">
<img class="sheet-competence-img" src="{{piece.img}}" title="{{piece.name}}"/> <img class="sheet-competence-img" src="{{piece.img}}" title="{{piece.name}}"/>
<span class="equipement-nom">{{piece.name}}</span> <span class="competence-title competence-label">{{piece.name}}</span>
<span class="equipement-detail item-controls"> <span class="competence-title competence-label">{{piece.data.quantite}}</span>
<a class="monnaie-moins"><i class="fas fa-minus-square"></i></a> <span class="competence-title">
</span> <a class="monnaie-plus plus-moins">+</a>
<span class="equipement-detail"> <a class="monnaie-moins plus-moins">-</a>
<span>{{piece.data.quantite}}</span>
</span>
<span class="equipement-detail item-controls">
<a class="monnaie-plus"><i class="fas fa-plus-square"></i></a>
</span>
<!-- <span class="equipement-detail">
<span class="flex-shrink"><a class="monnaie-moins"><i class="fas fa-minus-square"></i></a></span>
<span>{{piece.data.quantite}}</span>
<span class="flex-shrink"><a class="monnaie-plus"><i class="fas fa-plus-square"></i></a></span>
</span> -->
<span class="equipement-actions item-controls">
<a class="item-edit" title="Editer"><i class="fas fa-edit"></i></a>
<a class="item-delete" title="Supprimer"><i class="fas fa-trash"></i></a>
</span> </span>
<div class="item-controls flex-shrink">
<a class="item-control item-edit" title="Editer"><i class="fas fa-edit"></i></a>
<a class="item-control item-delete" title="Supprimer"><i class="fas fa-trash"></i></a>
</div>
</li> </li>
{{/each}} {{/each}}
</ul> </ul>

View File

@ -1,26 +0,0 @@
{{> "systems/foundryvtt-reve-de-dragon/templates/actor-sheet-inventaire-monnaie.html" monnaie=monnaie}}
<span class="item-name"><h4>Equipement</h4></span>
<span class="item-name">Encombrement total/max : {{numberFormat calc.encTotal decimals=2}} / {{data.attributs.encombrement.value}} <b>{{calc.surEncombrementMessage}}</b></span> -
<span class="item-name"><a class="creer-un-objet">Créer un objet</a></span>
{{#if options.isGM}}
<span class="item-name"> - <a id="nettoyer-conteneurs">Vider tout les conteneurs</a></span>
{{/if}}
<ul class="item-list alterne-list">
<li class="competence-header flexrow">
<span class="equipement-nom">Nom</span>
<span class="equipement-detail">Q.</span>
<span class="equipement-detail">Enc.</span>
<span class="equipement-actions">Actions</span>
</li>
{{#each objets as |item id|}}
{{#unless item.estContenu}}
{{#if (ne item.type 'conteneur')}}
{{> "systems/foundryvtt-reve-de-dragon/templates/actor-sheet-inventaire-item.html" item=item vide=true ouvert=true }}
{{/if}}
{{/unless}}
{{/each}}
{{#each conteneurs as |conteneur id|}}
{{buildConteneur this}}
{{/each}}
</ul>

View File

@ -1,12 +0,0 @@
<span class="item-name"><h4>Compagnons animaux</h4></span>
<ul class="item-list alterne-list">
{{#each subacteurs.montures as |monture id|}}
<li class="item flexrow list-item" data-actor-id="{{monture.id}}">
<img class="sheet-competence-img" src="{{monture.img}}" title="{{monture.name}}"/>
<span class="subacteur-label"><a>{{monture.name}}</a></span>
<div class="flex-shrink">
<a class="subacteur-delete" title="Supprimer"><i class="fas fa-trash"></i></a>
</div>
</li>
{{/each}}
</ul>

View File

@ -1,12 +0,0 @@
<span class="item-name"><h4>Suivants</h4></span>
<ul class="item-list alterne-list">
{{#each subacteurs.suivants as |suivant id|}}
<li class="item flexrow list-item" data-actor-id="{{suivant.id}}">
<img class="sheet-competence-img" src="{{suivant.img}}" title="{{suivant.name}}"/>
<span class="competence-title subacteur-label"><a>{{suivant.name}}</a></span>
<div class="item-controls flex-shrink">
<a class="subacteur-delete" title="Supprimer"><i class="fas fa-trash"></i></a>
</div>
</li>
{{/each}}
</ul>

View File

@ -1,15 +0,0 @@
<span class="item-name"><h4>Véhicules</h4></span>
<ul class="item-list alterne-list">
{{#each subacteurs.vehicules as |vehicule id|}}
<li class="item flexrow list-item" data-actor-id="{{vehicule.id}}">
<img class="sheet-competence-img" src="{{vehicule.img}}" title="{{vehicule.name}}"/>
<span class="flex-grow subacteur-label"><a>{{vehicule.name}}</a></span>
<span>{{vehicule.categorie}}</span>
<span>{{vehicule.structure}}</span>
<div class="flex-shrink">
<a class="subacteur-delete" title="Supprimer"><i class="fas fa-trash"></i></a>
</div>
</li>
{{/each}}
</ul>

View File

@ -4,8 +4,8 @@
<a>{{oeuvre.name}} (niveau {{oeuvre.data.niveau}})</a> <a>{{oeuvre.name}} (niveau {{oeuvre.data.niveau}})</a>
</span> </span>
<div class="item-controls"> <div class="item-controls">
<a class="item-edit" title="Edit Item"><i class="fas fa-edit"></i></a> <a class="item-control item-edit" title="Edit Item"><i class="fas fa-edit"></i></a>
<a class="item-delete" title="Delete Item"><i class="fas fa-trash"></i></a> <a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
</div> </div>
</li> </li>

View File

@ -10,40 +10,40 @@
<div class="flexrow"> <div class="flexrow">
<ul class="flex-group-center flex-compteurs"> <ul class="flex-group-center flex-compteurs">
<li> <li>
<label class="compteur"> <label class="ctn-vie">
<a class="jet-vie">Vie</a> <a class="jet-vie">Vie</a>
<a class="vie-moins"><i class="fas fa-minus-square"></i></a> <a class="vie-moins plus-moins">-</a>
<input class="resource-content" type="text" name="data.sante.vie.value" value="{{data.sante.vie.value}}" data-dtype="Number"/> <input class="resource-content" type="text" name="data.sante.vie.value" value="{{data.sante.vie.value}}" data-dtype="Number"/>
<span>/ {{data.sante.vie.max}}</span> <span>/ {{data.sante.vie.max}}</span>
<a class="vie-plus"><i class="fas fa-plus-square"></i></a> <a class="vie-plus plus-moins">+</a>
</label> </label>
</li> </li>
<li> <li>
<label class="compteur"> <label class="ctn-endu">
<a class="jet-endurance">Endurance</a> <a class="jet-endurance">Endurance</a>
<a class="endurance-moins"><i class="fas fa-minus-square"></i></a> <a class="endurance-moins plus-moins">-</a>
<input class="resource-content" type="text" name="data.sante.endurance.value" value="{{data.sante.endurance.value}}" data-dtype="Number"/> <input class="resource-content" type="text" name="data.sante.endurance.value" value="{{data.sante.endurance.value}}" data-dtype="Number"/>
<span>/ {{data.sante.endurance.max}}</span> <span>/ {{data.sante.endurance.max}}</span>
<a class="endurance-plus"><i class="fas fa-plus-square"></i></a> <a class="endurance-plus plus-moins">+</a>
</label> </label>
</li> </li>
<li> <li>
<label class="appliquerFatigue compteur tooltip"> <label class="appliquerFatigue ctn-fatigue tooltip">
<span class="tooltiptext ttt-fatigue">{{{calc.fatigue.html}}}</span> <span class="tooltiptext ttt-fatigue">{{{calc.fatigue.html}}}</span>
Fatigue Fatigue
<a class="fatigue-moins"><i class="fas fa-minus-square"></i></a> <a class="fatigue-moins plus-moins">-</a>
<input class="resource-content" id="fatigue-value" type="text" name="data.sante.fatigue.value" value="{{data.sante.fatigue.value}}" data-dtype="Number" /> <input class="resource-content" id="fatigue-value" type="text" name="data.sante.fatigue.value" value="{{data.sante.fatigue.value}}" data-dtype="Number" />
<span>/ {{data.sante.fatigue.max}}</span> <span>/ {{data.sante.fatigue.max}}</span>
<a class="fatigue-plus"><i class="fas fa-plus-square"></i></a> <a class="fatigue-plus plus-moins">+</a>
</label> </label>
</li> </li>
<li> <li>
<label class="compteur"> <label class="ctn-reve">
<span class="ptreve-actuel"><a>Rêve</a></span> <span class="ptreve-actuel"><a>Rêve</a></span>
<a class="ptreve-actuel-moins"><i class="fas fa-minus-square"></i></a> <a class="ptreve-actuel-moins plus-moins">-</a>
<input class="resource-content" id="pointsreve-value" type="text" name="data.reve.reve.value" value="{{data.reve.reve.value}}" data-dtype="Number" /> <input class="resource-content" id="pointsreve-value" type="text" name="data.reve.reve.value" value="{{data.reve.reve.value}}" data-dtype="Number" />
<span>/ {{data.reve.seuil.value}}</span> <span>/ {{data.reve.seuil.value}}</span>
<a class="ptreve-actuel-plus"><i class="fas fa-plus-square"></i></a> <a class="ptreve-actuel-plus plus-moins">+</a>
</label> </label>
</li> </li>
</ul> </ul>
@ -102,9 +102,9 @@
<ul class="carac-list alterne-list"> <ul class="carac-list alterne-list">
{{#each data.carac as |carac key|}} {{#each data.carac as |carac key|}}
{{#if carac.isLevelUp}} {{#if carac.isLevelUp}}
<li class="caracteristique flexrow item-list xp-level-up" data-attribute="{{key}}"> <li class="competence flexrow item-list xp-level-up" data-attribute="{{key}}">
{{else}} {{else}}
<li class="caracteristique flexrow list-item" data-attribute="{{key}}"> <li class="competence flexrow list-item" data-attribute="{{key}}">
{{/if}} {{/if}}
{{#if (eq key 'taille')}} {{#if (eq key 'taille')}}
<span class="carac-label" name="data.carac.{{key}}.label">{{carac.label}}</span> <span class="carac-label" name="data.carac.{{key}}.label">{{carac.label}}</span>
@ -131,7 +131,7 @@
<span class="tooltiptext ttt-xp">Vous devez acquérir {{carac.xpNext}} points d'Experience pour augmenter de 1 votre {{carac.label}}</span> <span class="tooltiptext ttt-xp">Vous devez acquérir {{carac.xpNext}} points d'Experience pour augmenter de 1 votre {{carac.label}}</span>
</span> </span>
{{#if carac.isLevelUp}} {{#if carac.isLevelUp}}
<a class="carac-xp-augmenter" name="augmenter.{{key}}" title="Augmenter"> <a class="item-control carac-xp-augmenter" name="augmenter.{{key}}" title="Augmenter">
<i class="fas fa-arrow-alt-circle-up"></i> <i class="fas fa-arrow-alt-circle-up"></i>
</a> </a>
{{/if}} {{/if}}
@ -139,22 +139,22 @@
{{/if}} {{/if}}
</li> </li>
{{/each}} {{/each}}
<li class="caracteristique flexrow"> <li class="competence flexrow">
<span class="carac-label" name="carac-total">Total Caractéristiques </span> <span class="carac-label" name="carac-total">Total Caractéristiques </span>
<span class="competence-value total" name="carac-total-value">{{calc.caracTotal}} </span> <span class="competence-value total" name="carac-total-value">{{calc.caracTotal}} </span>
</li> </li>
</ul> </ul>
</div> </div>
<div class="flex-group-left flexcol" > <div class="flex-group-left flexcol" >
<ul class="carac-list"> <ul class="carac-list">
<li class="caracteristique flexrow list-item"> <li class="competence flexrow list-item">
<span class="carac-label" name="beaute">Beauté&nbsp;:</span> <span class="carac-label" name="beaute">Beauté&nbsp;:</span>
<input class="description-value" type="text" name="data.beaute" value="{{data.beaute}}" data-dtype="String" {{#unless @root.options.editCaracComp}}disabled{{/unless}}/> <input class="description-value" type="text" name="data.beaute" value="{{data.beaute}}" data-dtype="String" {{#unless @root.options.editCaracComp}}disabled{{/unless}}/>
<label class="carac-xp"/> <label class="carac-xp"/>
</li> </li>
{{#each data.attributs as |attr key|}} {{#each data.attributs as |attr key|}}
{{#unless (eq key 'hautrevant')}} {{#unless (eq key 'hautrevant')}}
<li class="caracteristique flexrow list-item" data-attribute="{{key}}"> <li class="competence flexrow list-item" data-attribute="{{key}}">
<span class="carac-label" name="data.attributs.{{key}}.label">{{attr.label}}&nbsp;:</span> <span class="carac-label" name="data.attributs.{{key}}.label">{{attr.label}}&nbsp;:</span>
{{#if (eq key 'protection')}} {{#if (eq key 'protection')}}
<input class="description-value" id="attribut-protection-edit" type="text" name="{{key}}" value="{{attr.value}}" data-dtype="number"/> <input class="description-value" id="attribut-protection-edit" type="text" name="{{key}}" value="{{attr.value}}" data-dtype="number"/>
@ -167,16 +167,16 @@
{{/each}} {{/each}}
</ul> </ul>
<ul class="carac-list alterne-list"> <ul class="carac-list alterne-list">
<li class="caracteristique flexrow list-item"> <li class="competence flexrow list-item">
<span class="attribut-label chance-actuelle"><a>Chance actuelle</a></span> <span class="attribut-label chance-actuelle"><a>Chance actuelle</a></span>
<input class="description-value compteur-edit" type="text" name="chance" value="{{data.compteurs.chance.value}}" data-dtype="number"/> <input class="description-value compteur-edit" type="text" name="chance" value="{{data.compteurs.chance.value}}" data-dtype="number"/>
<span class="utiliser-attribut" style="padding-left: 5px"><a class="chance-appel">Utiliser</a></span> <span class="utiliser-attribut" style="padding-left: 5px"><a class="item-control chance-appel">Utiliser</a></span>
</li> </li>
{{#each data.compteurs as |compteur key|}} {{#each data.compteurs as |compteur key|}}
{{#if (eq compteur.label 'Chance')}} {{#if (eq compteur.label 'Chance')}}
{{else if (eq compteur.label 'Experience')}} {{else if (eq compteur.label 'Experience')}}
{{else if compteur.isInput}} {{else if compteur.isInput}}
<li class="caracteristique flexrow list-item"> <li class="competence flexrow list-item">
<span class="attribut-label">{{compteur.label}}</span> <span class="attribut-label">{{compteur.label}}</span>
{{#if (eq compteur.label 'Ethylisme')}} {{#if (eq compteur.label 'Ethylisme')}}
<select class="description-value" name="data.compteurs.ethylisme.value" id="ethylisme" data-dtype="Number"> <select class="description-value" name="data.compteurs.ethylisme.value" id="ethylisme" data-dtype="Number">
@ -189,9 +189,9 @@
{{/if}} {{/if}}
<span class="utiliser-attribut" style="padding-left: 5px"> <span class="utiliser-attribut" style="padding-left: 5px">
{{#if compteur.isStress}} {{#if compteur.isStress}}
<a class="stress-test" title="Transformer">Transformer</a> <a class="item-control stress-test" title="Transformer">Transformer</a>
{{else if (eq compteur.label 'Ethylisme')}} {{else if (eq compteur.label 'Ethylisme')}}
<a class="ethylisme-test" id="ethylisme-test" title="Jet d'Ethylisme">Boire</a> <a class="item-control ethylisme-test" id="ethylisme-test" title="Jet d'Ethylisme">Boire</a>
{{else if (eq compteur.label 'Moral')}} {{else if (eq compteur.label 'Moral')}}
<a class="moral-malheureux" title="Jet de moral situation malheureuse"><img class="small-button-container" src="systems/foundryvtt-reve-de-dragon/icons/moral-malheureux.svg" alt="Jet de moral situation malheureuse"/></a> <a class="moral-malheureux" title="Jet de moral situation malheureuse"><img class="small-button-container" src="systems/foundryvtt-reve-de-dragon/icons/moral-malheureux.svg" alt="Jet de moral situation malheureuse"/></a>
<a class="moral-neutre" title="Jet de moral situation neutre"><img class="small-button-container" src="systems/foundryvtt-reve-de-dragon/icons/moral-neutre.svg" alt="Jet de moral situation neutre"/></a> <a class="moral-neutre" title="Jet de moral situation neutre"><img class="small-button-container" src="systems/foundryvtt-reve-de-dragon/icons/moral-neutre.svg" alt="Jet de moral situation neutre"/></a>
@ -215,9 +215,11 @@
<span><a class="lock-unlock-sheet"><img class="small-button-container" <span><a class="lock-unlock-sheet"><img class="small-button-container"
src="systems/foundryvtt-reve-de-dragon/icons/{{#if options.editCaracComp}}unlocked.svg{{else}}locked.svg{{/if}}" alt="blocker/débloquer"> src="systems/foundryvtt-reve-de-dragon/icons/{{#if options.editCaracComp}}unlocked.svg{{else}}locked.svg{{/if}}" alt="blocker/débloquer">
{{#if options.editCaracComp}}Verrouiller{{else}}Déverrouiller{{/if}}</a></span> {{#if options.editCaracComp}}Verrouiller{{else}}Déverrouiller{{/if}}</a></span>
<span> <span class="flexrow">
<input class="recherche flex-grow" type="text" value="{{options.recherche.text}}" name="recherche" <i class="fas fa-search"></i>
size="8" data-dtype="String" placeholder="chercher"/> <input class="cherchercompetence" type="text" value="{{options.cherchercompetence}}" name="cherchercompetence"
size="8" data-dtype="String" placeholder="chercher"/>
<span></span>
</span> </span>
<span><a class="show-hide-competences"><img class="small-button-container" <span><a class="show-hide-competences"><img class="small-button-container"
src="systems/foundryvtt-reve-de-dragon/icons/{{#if options.showCompNiveauBase}}no-filter.svg{{else}}filter.svg{{/if}}" alt="filter/montrer tout"> src="systems/foundryvtt-reve-de-dragon/icons/{{#if options.showCompNiveauBase}}no-filter.svg{{else}}filter.svg{{/if}}" alt="filter/montrer tout">
@ -230,18 +232,18 @@
</div> </div>
<div class="grid grid-2col"> <div class="grid grid-2col">
<div class="flex-group-left flexcol competence-column"> <div class="flex-group-left flexcol competence-column">
{{> "systems/foundryvtt-reve-de-dragon/templates/actor-sheet-categorie-competences-partial.html" competences=(filtreTriCompetences competenceByCategory.generale) categorie="Compétences générales"}} {{> "systems/foundryvtt-reve-de-dragon/templates/actor-sheet-categorie-competences-partial.html" competences=(sortCompetence competenceByCategory.generale) categorie="Compétences générales"}}
{{> "systems/foundryvtt-reve-de-dragon/templates/actor-sheet-categorie-competences-partial.html" competences=(filtreTriCompetences competenceByCategory.particuliere) categorie="Compétences Particulières"}} {{> "systems/foundryvtt-reve-de-dragon/templates/actor-sheet-categorie-competences-partial.html" competences=(sortCompetence competenceByCategory.particuliere) categorie="Compétences Particulières"}}
{{> "systems/foundryvtt-reve-de-dragon/templates/actor-sheet-categorie-competences-partial.html" competences=(filtreTriCompetences competenceByCategory.specialisee) categorie="Compétences Spécialisées"}} {{> "systems/foundryvtt-reve-de-dragon/templates/actor-sheet-categorie-competences-partial.html" competences=(sortCompetence competenceByCategory.specialisee) categorie="Compétences Spécialisées"}}
</div> </div>
<div class="flex-group-left flexcol competence-column"> <div class="flex-group-left flexcol competence-column">
{{> "systems/foundryvtt-reve-de-dragon/templates/actor-sheet-categorie-competences-partial.html" competences=(filtreTriCompetences competenceByCategory.melee) categorie="Compétences de Mêlée"}} {{> "systems/foundryvtt-reve-de-dragon/templates/actor-sheet-categorie-competences-partial.html" competences=(sortCompetence competenceByCategory.melee) categorie="Compétences de Mêlée"}}
{{> "systems/foundryvtt-reve-de-dragon/templates/actor-sheet-categorie-competences-partial.html" competences=(filtreTriCompetences competenceByCategory.tir) categorie="Compétences de Tir"}} {{> "systems/foundryvtt-reve-de-dragon/templates/actor-sheet-categorie-competences-partial.html" competences=(sortCompetence competenceByCategory.tir) categorie="Compétences de Tir"}}
{{> "systems/foundryvtt-reve-de-dragon/templates/actor-sheet-categorie-competences-partial.html" competences=(filtreTriCompetences competenceByCategory.lancer) categorie="Compétences de Lancer"}} {{> "systems/foundryvtt-reve-de-dragon/templates/actor-sheet-categorie-competences-partial.html" competences=(sortCompetence competenceByCategory.lancer) categorie="Compétences de Lancer"}}
{{> "systems/foundryvtt-reve-de-dragon/templates/actor-sheet-categorie-competences-partial.html" competences=(filtreTriCompetences competenceByCategory.connaissance) categorie="Connaissances"}} {{> "systems/foundryvtt-reve-de-dragon/templates/actor-sheet-categorie-competences-partial.html" competences=(sortCompetence competenceByCategory.connaissance) categorie="Connaissances"}}
{{#if (or data.attributs.hautrevant.value options.vueDetaillee)}} {{#if (or data.attributs.hautrevant.value options.vueDetaillee)}}
{{> "systems/foundryvtt-reve-de-dragon/templates/actor-sheet-categorie-competences-partial.html" competences=(filtreTriCompetences competenceByCategory.draconic) categorie="Draconic"}} {{> "systems/foundryvtt-reve-de-dragon/templates/actor-sheet-categorie-competences-partial.html" competences=(sortCompetence competenceByCategory.draconic) categorie="Draconic"}}
{{/if}} {{/if}}
<div> <div>
@ -347,8 +349,8 @@
{{/if}} {{/if}}
</span> </span>
<div class="item-controls"> <div class="item-controls">
<a class="item-edit" title="Modifier"><i class="fas fa-edit"></i></a> <a class="item-control item-edit" title="Modifier"><i class="fas fa-edit"></i></a>
<a class="item-delete" title="Supprimer"><i class="fas fa-trash"></i></a> <a class="item-control item-delete" title="Supprimer"><i class="fas fa-trash"></i></a>
</div> </div>
</li> </li>
{{/each}} {{/each}}
@ -370,8 +372,8 @@
</span> </span>
<span class="competence-label">{{possession.data.type}}</span> <span class="competence-label">{{possession.data.type}}</span>
<div class="item-controls"> <div class="item-controls">
<a class="item-edit" title="Modifier"><i class="fas fa-edit"></i></a> <a class="item-control item-edit" title="Modifier"><i class="fas fa-edit"></i></a>
<a class="item-delete" title="Supprimer"><i class="fas fa-trash"></i></a> <a class="item-control item-delete" title="Supprimer"><i class="fas fa-trash"></i></a>
</div> </div>
</li> </li>
{{/each}} {{/each}}
@ -389,8 +391,8 @@
(or @root.options.isGM (not tache.data.cacher_points_de_tache)) (or @root.options.isGM (not tache.data.cacher_points_de_tache))
}}/{{tache.data.points_de_tache}}{{/if}})</a></span> }}/{{tache.data.points_de_tache}}{{/if}})</a></span>
<div class="item-controls flex-shrink"> <div class="item-controls flex-shrink">
<a class="item-edit" title="Edit Item"><i class="fas fa-edit"></i></a> <a class="item-control item-edit" title="Edit Item"><i class="fas fa-edit"></i></a>
<a class="item-delete" title="Delete Item"><i class="fas fa-trash"></i></a> <a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
</div> </div>
</li> </li>
{{/each}} {{/each}}
@ -419,8 +421,8 @@
{{#each jeux as |jeu id|}} {{#each jeux as |jeu id|}}
<li class="item flexrow list-item" data-item-id="{{jeu._id}}"><span class="competence-title jeu-label"><a>{{jeu.name}} (base {{jeu.data.base}})</a></span> <li class="item flexrow list-item" data-item-id="{{jeu._id}}"><span class="competence-title jeu-label"><a>{{jeu.name}} (base {{jeu.data.base}})</a></span>
<div class="item-controls flex-shrink"> <div class="item-controls flex-shrink">
<a class="item-edit" title="Edit Item"><i class="fas fa-edit"></i></a> <a class="item-control item-edit" title="Edit Item"><i class="fas fa-edit"></i></a>
<a class="item-delete" title="Delete Item"><i class="fas fa-trash"></i></a> <a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
</div> </div>
</li> </li>
{{/each}} {{/each}}
@ -430,8 +432,8 @@
{{#each recettesAlchimiques as |recette id|}} {{#each recettesAlchimiques as |recette id|}}
<li class="item flexrow list-item" data-item-id="{{recette._id}}"><span class="competence-title recette-label item-edit"><a>{{recette.name}}</a></span> <li class="item flexrow list-item" data-item-id="{{recette._id}}"><span class="competence-title recette-label item-edit"><a>{{recette.name}}</a></span>
<div class="item-controls flex-shrink"> <div class="item-controls flex-shrink">
<a class="item-edit" title="Edit Item"><i class="fas fa-edit"></i></a> <a class="item-control item-edit" title="Edit Item"><i class="fas fa-edit"></i></a>
<a class="item-delete" title="Delete Item"><i class="fas fa-trash"></i></a> <a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
</div> </div>
</li> </li>
{{/each}} {{/each}}
@ -517,7 +519,7 @@
<li class="item flexrow" data-attribute={{key}} data-item-id="{{queue._id}}"> <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> <span class="display-label flex-grow"><a data-item-id="{{queue._id}}">{{queue.name}}</a></span>
<div class="item-controls flex-shrink"> <div class="item-controls flex-shrink">
<a class="item-delete" title="Delete Item"><i class="fas fa-trash"></i></a> <a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
</div> </div>
</li> </li>
{{/each}} {{/each}}
@ -530,7 +532,7 @@
<li class="item flexrow" data-attribute={{key}} data-item-id="{{ombre._id}}"> <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> <span class="display-label flex-grow"><a data-item-id="{{ombre._id}}">{{ombre.name}}</a></span>
<div class="item-controls flex-shrink"> <div class="item-controls flex-shrink">
<a class="item-delete" title="Delete Item"><i class="fas fa-trash"></i></a> <a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
</div> </div>
</li> </li>
{{/each}} {{/each}}
@ -543,7 +545,7 @@
<li class="item flexrow" data-attribute={{key}} data-item-id="{{souffle._id}}"> <li class="item flexrow" data-attribute={{key}} data-item-id="{{souffle._id}}">
<span class="display-label flex-grow"><a data-item-id="{{souffle._id}}">{{souffle.name}}</a></span> <span class="display-label flex-grow"><a data-item-id="{{souffle._id}}">{{souffle.name}}</a></span>
<div class="item-controls flex-shrink"> <div class="item-controls flex-shrink">
<a class="item-delete" title="Delete Item"><i class="fas fa-trash"></i></a> <a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
</div> </div>
</li> </li>
{{/each}} {{/each}}
@ -556,7 +558,7 @@
<li class="item flexrow" data-attribute={{key}} data-item-id="{{tete._id}}"> <li class="item flexrow" data-attribute={{key}} data-item-id="{{tete._id}}">
<span class="display-label flex-grow"><a data-item-id="{{tete._id}}">{{tete.name}}</a></span> <span class="display-label flex-grow"><a data-item-id="{{tete._id}}">{{tete.name}}</a></span>
<div class="item-controls flex-shrink"> <div class="item-controls flex-shrink">
<a class="item-delete" title="Delete Item"><i class="fas fa-trash"></i></a> <a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
</div> </div>
</li> </li>
{{/each}} {{/each}}
@ -571,7 +573,7 @@
<span class="display-label flex-grow"> <a data-item-id="{{signe._id}}">{{signe.name}}</a></span> <span class="display-label flex-grow"> <a data-item-id="{{signe._id}}">{{signe.name}}</a></span>
<span class="flex-shrink">{{signe.data.difficulte}}</span> <span class="flex-shrink">{{signe.data.difficulte}}</span>
<div class="item-controls flex-shrink"> <div class="item-controls flex-shrink">
<a class="item-delete" title="Supprimer"><i class="fas fa-trash"></i></a> <a class="item-control item-delete" title="Supprimer"><i class="fas fa-trash"></i></a>
</div> </div>
</li> </li>
{{/each}} {{/each}}
@ -589,7 +591,7 @@
<span>{{upperFirst rencontre.heure}}, le {{rencontre.date}}</span> <span>{{upperFirst rencontre.heure}}, le {{rencontre.date}}</span>
{{/if}} {{/if}}
<div class="item-controls flex-shrink"> <div class="item-controls flex-shrink">
<a class="rencontre-delete" title="Supprimer"><i class="fas fa-trash"></i></a> <a class="item-control rencontre-delete" title="Supprimer"><i class="fas fa-trash"></i></a>
</div> </div>
</li> </li>
{{/each}} {{/each}}
@ -604,7 +606,7 @@
<span class="display-label">{{reserve.sort.name}} r{{reserve.sort.data.ptreve_reel}}</span> <span class="display-label">{{reserve.sort.name}} r{{reserve.sort.data.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="item-control item-delete flex-shrink" title="Supprimer"><i class="fas fa-trash"></i></a>
</div> </div>
</li> </li>
{{/each}} {{/each}}
@ -624,7 +626,7 @@
</span> </span>
<span>{{sort.data.draconic}} / {{sort.data.difficulte}}</span> <span>{{sort.data.draconic}} / {{sort.data.difficulte}}</span>
<div class="item-controls flex-shrink"> <div class="item-controls flex-shrink">
<a class="item-delete" title="Supprimer"><i class="fas fa-trash"></i></a> <a class="item-control item-delete" title="Supprimer"><i class="fas fa-trash"></i></a>
</div> </div>
</li> </li>
{{/each}} {{/each}}
@ -636,8 +638,8 @@
<li class="item flexrow" data-item-id="{{meditation._id}}" data-attribute="{{key}}"> <li class="item flexrow" data-item-id="{{meditation._id}}" data-attribute="{{key}}">
<span class="meditation-label flex-grow"><a data-item-id="{{meditation._id}}">{{meditation.name}} - {{meditation.data.competence}}</a></span> <span class="meditation-label flex-grow"><a data-item-id="{{meditation._id}}">{{meditation.name}} - {{meditation.data.competence}}</a></span>
<div class="item-controls flex-shrink"> <div class="item-controls flex-shrink">
<a class="item-edit" title="Editer"><i class="fas fa-edit"></i></a> <a class="item-control item-edit" title="Editer"><i class="fas fa-edit"></i></a>
<a class="item-delete" title="Supprimer"><i class="fas fa-trash"></i></a> <a class="item-control item-delete" title="Supprimer"><i class="fas fa-trash"></i></a>
</div> </div>
</li> </li>
{{/each}} {{/each}}
@ -651,7 +653,7 @@
<span class="display-label"><a data-item-id="{{casetmr._id}}">{{casetmr.name}}</a></span> <span class="display-label"><a data-item-id="{{casetmr._id}}">{{casetmr.name}}</a></span>
<span>{{casetmr.data.coord}} - {{caseTmr-label casetmr.data.coord}}</span> <span>{{casetmr.data.coord}} - {{caseTmr-label casetmr.data.coord}}</span>
<div class="item-controls flex-shrink"> <div class="item-controls flex-shrink">
<a class="item-delete" title="Supprimer"><i class="fas fa-trash"></i></a> <a class="item-control item-delete" title="Supprimer"><i class="fas fa-trash"></i></a>
</div> </div>
</li> </li>
{{/each}} {{/each}}
@ -664,10 +666,79 @@
{{!-- Equipment Tab --}} {{!-- Equipment Tab --}}
<div class="tab items" data-group="primary" data-tab="items"> <div class="tab items" data-group="primary" data-tab="items">
{{> "systems/foundryvtt-reve-de-dragon/templates/actor-sheet-inventaire.html"}} {{> "systems/foundryvtt-reve-de-dragon/templates/actor-sheet-inventaire-monnaie.html" monnaie=monnaie}}
{{> "systems/foundryvtt-reve-de-dragon/templates/actor-sheet-liens-animaux.html"}}
{{> "systems/foundryvtt-reve-de-dragon/templates/actor-sheet-liens-suivants.html"}} <span class="item-name"><h4>Equipement porté</h4></span>
{{> "systems/foundryvtt-reve-de-dragon/templates/actor-sheet-liens-vehicules.html"}} <div>
<span class="item-name">Encombrement total/max : {{numberFormat calc.encTotal decimals=2}} / {{data.attributs.encombrement.value}} <b>{{calc.surEncombrementMessage}}</b></span> -
<span class="item-name">Estimation de l'équipement : {{numberFormat calc.prixTotalEquipement decimals=2}} Sols</span>
</div>
<div>
<span class="item-name"><a class="creer-un-objet">Créer un objet</a></span>
{{#if options.isGM}}
<span class="item-name"> - <a id="nettoyer-conteneurs">Vider tout les conteneurs</a></span>
{{/if}}
</div>
<ul class="item-list alterne-list">
<li class="competence-header flexrow">
<img class="sheet-competence-img" src="{{img}}" title="Equipement"/>
<span class="competence-title flex-grow">Nom</span>
<span class="competence-title">Q.</span>
<span class="competence-title">Enc.</span>
<span class="competence-title flex-grow">Equiper/Editer/Suppr.</span>
</li>
{{#each objets as |item id|}}
{{#unless item.estContenu}}
{{#if (ne item.type 'conteneur')}}
{{> "systems/foundryvtt-reve-de-dragon/templates/actor-sheet-inventaire-conteneur.html" item=item }}
{{/if}}
{{/unless}}
{{/each}}
{{#each conteneurs as |conteneur id|}}
{{buildConteneur this}}
{{/each}}
</ul>
<span class="item-name"><h4>Compagnons animaux</h4></span>
<ul class="item-list alterne-list">
{{#each subacteurs.montures as |monture id|}}
<li class="item flexrow list-item" data-actor-id="{{monture.id}}">
<img class="sheet-competence-img" src="{{monture.img}}" title="{{monture.name}}"/>
<span class="competence-title subacteur-label"><a>{{monture.name}}</a></span>
<div class="item-controls flex-shrink">
<a class="item-control subacteur-delete" title="Supprimer"><i class="fas fa-trash"></i></a>
</div>
</li>
{{/each}}
</ul>
<span class="item-name"><h4>Véhicules</h4></span>
<ul class="item-list alterne-list">
{{#each subacteurs.vehicules as |vehicule id|}}
<li class="item flexrow list-item" data-actor-id="{{vehicule.id}}">
<img class="sheet-competence-img" src="{{vehicule.img}}" title="{{vehicule.name}}"/>
<span class="competence-title subacteur-label"><a>{{vehicule.name}}</a></span>
<span class="competence-title">{{vehicule.categorie}}</span>
<span class="competence-title">{{vehicule.structure}}</span>
<div class="item-controls flex-shrink">
<a class="item-control subacteur-delete" title="Supprimer"><i class="fas fa-trash"></i></a>
</div>
</li>
{{/each}}
</ul>
<span class="item-name"><h4>Suivants</h4></span>
<ul class="item-list alterne-list">
{{#each subacteurs.suivants as |suivant id|}}
<li class="item flexrow list-item" data-actor-id="{{suivant.id}}">
<img class="sheet-competence-img" src="{{suivant.img}}" title="{{suivant.name}}"/>
<span class="competence-title subacteur-label"><a>{{suivant.name}}</a></span>
<div class="item-controls flex-shrink">
<a class="item-control subacteur-delete" title="Supprimer"><i class="fas fa-trash"></i></a>
</div>
</li>
{{/each}}
</ul>
</div> </div>

View File

@ -25,7 +25,7 @@
<div class="grid grid-2col"> <div class="grid grid-2col">
<div class="flex-group-left flexcol"> <div class="flex-group-left flexcol">
<ol class="carac-list alterne-list"> <ol class="carac-list alterne-list">
<li class="caracteristique flexrow list-item" data-attribute="{{key}}"> <li class="competence flexrow list-item" data-attribute="{{key}}">
<span class="carac-label flexrow" name="categorie">Catégorie</span> <span class="carac-label flexrow" name="categorie">Catégorie</span>
<select name="data.categorie" class="categorie" data-dtype="String"> <select name="data.categorie" class="categorie" data-dtype="String">
{{#select data.categorie}} {{#select data.categorie}}
@ -33,31 +33,31 @@
{{/select}} {{/select}}
</select> </select>
</li> </li>
<li class="caracteristique flexrow list-item" data-attribute="{{key}}"> <li class="competence flexrow list-item" data-attribute="{{key}}">
<span class="carac-label flexrow" name="categorie">Résistance</span> <span class="carac-label flexrow" name="categorie">Résistance</span>
<input class="competence-value flexrow" type="text" name="data.resistance" value="{{data.resistance}}" data-dtype="Number" /> <input class="competence-value flexrow" type="text" name="data.resistance" value="{{data.resistance}}" data-dtype="Number" />
</li> </li>
<li class="caracteristique flexrow list-item" data-attribute="{{key}}"> <li class="competence flexrow list-item" data-attribute="{{key}}">
<span class="carac-label flexrow" name="categorie">Structure</span> <span class="carac-label flexrow" name="categorie">Structure</span>
<input class="competence-value flexrow" type="text" name="data.structure" value="{{data.structure}}" data-dtype="Number" /> <input class="competence-value flexrow" type="text" name="data.structure" value="{{data.structure}}" data-dtype="Number" />
</li> </li>
<li class="caracteristique flexrow list-item" data-attribute="{{key}}"> <li class="competence flexrow list-item" data-attribute="{{key}}">
<span class="carac-label flexrow" name="categorie">Vitesse</span> <span class="carac-label flexrow" name="categorie">Vitesse</span>
<input class="competence-value flexrow" type="text" name="data.vitesse" value="{{data.vitesse}}" data-dtype="String" /> <input class="competence-value flexrow" type="text" name="data.vitesse" value="{{data.vitesse}}" data-dtype="String" />
</li> </li>
<li class="caracteristique flexrow list-item" data-attribute="{{key}}"> <li class="competence flexrow list-item" data-attribute="{{key}}">
<span class="carac-label flexrow" name="categorie">Bonus</span> <span class="carac-label flexrow" name="categorie">Bonus</span>
<input class="competence-value flexrow" type="text" name="data.bonus" value="{{data.bonus}}" data-dtype="String" /> <input class="competence-value flexrow" type="text" name="data.bonus" value="{{data.bonus}}" data-dtype="String" />
</li> </li>
<li class="caracteristique flexrow list-item" data-attribute="{{key}}"> <li class="competence flexrow list-item" data-attribute="{{key}}">
<span class="carac-label flexrow" name="categorie">Manoeuvrabilité</span> <span class="carac-label flexrow" name="categorie">Manoeuvrabilité</span>
<input class="competence-value flexrow" type="text" name="data.manoeuvrabilite" value="{{data.manoeuvrabilite}}" data-dtype="String" /> <input class="competence-value flexrow" type="text" name="data.manoeuvrabilite" value="{{data.manoeuvrabilite}}" data-dtype="String" />
</li> </li>
<li class="caracteristique flexrow list-item" data-attribute="{{key}}"> <li class="competence flexrow list-item" data-attribute="{{key}}">
<span class="carac-label flexrow" name="categorie">Equipage</span> <span class="carac-label flexrow" name="categorie">Equipage</span>
<input class="competence-value flexrow" type="text" name="data.equipage" value="{{data.equipage}}" data-dtype="Number" /> <input class="competence-value flexrow" type="text" name="data.equipage" value="{{data.equipage}}" data-dtype="Number" />
</li> </li>
<li class="caracteristique flexrow list-item" data-attribute="{{key}}"> <li class="competence flexrow list-item" data-attribute="{{key}}">
<span class="carac-label flexrow" name="categorie">Capacité d'Encombrement</span> <span class="carac-label flexrow" name="categorie">Capacité d'Encombrement</span>
<input class="competence-value flexrow" type="text" name="data.capacite_encombrement" value="{{data.capacite_encombrement}}" data-dtype="Number" /> <input class="competence-value flexrow" type="text" name="data.capacite_encombrement" value="{{data.capacite_encombrement}}" data-dtype="Number" />
</li> </li>
@ -69,9 +69,47 @@
{{!-- Equipment Tab --}} {{!-- Equipment Tab --}}
<div class="tab items" data-group="primary" data-tab="items"> <div class="tab items" data-group="primary" data-tab="items">
{{> "systems/foundryvtt-reve-de-dragon/templates/actor-sheet-inventaire.html"}} {{> "systems/foundryvtt-reve-de-dragon/templates/actor-sheet-inventaire-monnaie.html" monnaie=monnaie}}
<span class="item-name"><h4>Equipement chargé</h4></span>
<span class="item-name">Encombrement total/max : {{numberFormat calc.encTotal decimals=2}} / {{data.capacite_encombrement}} <b>{{calc.surEncombrementMessage}}</b></span> -
<span class="item-name"><a class="creer-un-objet">Créer un objet</a></span>
{{#if options.isGM}}
<span class="item-name"> - <a id="nettoyer-conteneurs">Vider tout les conteneurs</a></span>
{{/if}}
<ul class="item-list alterne-list">
<li class="competence-header flexrow">
<img class="sheet-competence-img" src="{{img}}" title="Equipement"/>
<span class="competence-title competence-label flex-grow">Nom</span>
<span class="competence-title competence-label">Q.</span>
<span class="competence-title competence-value">Enc.</span>
<span class="competence-title competence-value">Equiper/Editer/Suppr.</span>
</li>
{{#each objets as |item id|}}
{{#unless item.estContenu}}
{{#if (ne item.type 'conteneur')}}
<li class="item flexrow list-item" data-item-id="{{item._id}}">
<img class="sheet-competence-img" src="{{item.img}}" title="{{item.name}}"/>
<span class="item-name flex-grow">{{item.name}}</span>
<span class="item-quantite">{{item.data.quantite}}</span>
<span class="item-quantite">{{numberFormat item.data.encTotal decimals=2}}</span>
<div class="item-controls">
<a class="item-control item-equip" title="Equiper">{{#if item.data.equipe}}<i class="fas fa-circle"></i>{{else}}<i class="fas fa-genderless"></i>{{/if}}</a>
<a class="item-control item-edit" title="Editer"><i class="fas fa-edit"></i></a>
<a class="item-control item-delete" title="Supprimer"><i class="fas fa-trash"></i></a>
</div>
</li>
{{/if}}
{{/unless}}
{{/each}}
{{#each conteneurs as |conteneur id|}}
{{buildConteneur this}}
{{/each}}
</ul>
</div>
{{!-- Biography Tab --}} {{!-- Biography Tab --}}
<div class="tab description" data-group="primary" data-tab="description"> <div class="tab description" data-group="primary" data-tab="description">
<div class="form-group editor"> <div class="form-group editor">

View File

@ -1,16 +0,0 @@
<h4>Proposition de nom: {{nom}}</h4>
<span class="chat-card-button-area">
<a class="button-creer-acteur chat-card-button"
data-nom='{{nom}}'
data-type='personnage'
>
Créer un Personnage</a>
</span>
<span class="chat-card-button-area">
<a class="button-creer-acteur chat-card-button"
data-nom='{{nom}}'
data-type='creature'>
Créer une créature</a>
</span>

View File

@ -17,22 +17,16 @@
<a class='defense-possession chat-card-button' <a class='defense-possession chat-card-button'
data-attackerId='{{attacker.id}}' data-attackerId='{{attacker.id}}'
data-defenderId='{{defender.id}}' data-defenderId='{{defender.id}}'
data-possessionId='{{possession.data.possessionid}}'> data-possessionId='{{possession.data.possessionid}}'>Résister à la possession</a>
{{#if isECNIDefender}}
Résister à la conjuration
{{else}}
Résister à la possession
{{/if}}
</a> </a>
{{else}} {{else}}
La Tentative de {{#if isECNIDefender}}conjuration{{else}}possession{{/if}} a échoué ! La Tentative de Possession a échouée !
{{/if}} {{/if}}
{{else}} {{else}}
{{#if rolled.isSuccess}} {{#if rolled.isSuccess}}
La tentative de {{#if isECNIDefender}}conjuration a été repoussée{{else}}possession a été conjurée{{/if}}! La Tentative de Possession a été conjurée ! {{defender.name}} résiste à la tentative de possession.
{{defender.name}} a résisté. {{else}}
{{else}} La Tentative de Possession n'a pas pu être conjurée !
La tentative de {{#if isECNIDefender}}conjuration a réussi{{else}}possession n'a pas pu être conjurée{{/if}}!
{{/if}} {{/if}}
{{/if}} {{/if}}
<br>Points de Possession: {{possession.ptsPossession}} <br>Points de Possession: {{possession.ptsPossession}}

View File

@ -1,13 +1,10 @@
<div class="control-icon rdd-combat "> <div class="control-icon rdd-combat ">
<img class="rdd-hud-togglebutton" src="systems/foundryvtt-reve-de-dragon/icons/heures/hd06.svg" width="36" height="36" title="Attaque"/> <img class="rdd-hud-togglebutton" src="systems/foundryvtt-reve-de-dragon/icons/heures/hd06.svg" width="36" height="36" title="Attaque"/>
<div class="rdd-hud-list tokenhudext left"> <div class="rdd-hud-list tokenhudext left">
{{#each actions as |action key|}} {{#each armes as |arme key|}}
{{#unless action.data.initOnly}} {{#unless arme.data.initOnly}}
<div class="control-icon tokenhudicon rdd-hud-menu rdd-attaque" <div class="control-icon tokenhudicon rdd-hud-menu rdd-attaque" data-combatant-id="{{../combatant.id}}" data-arme-id="{{arme.index}}" title="{{arme.name}}">
data-combatant-id="{{../combatant.id}}" <label>C:{{arme.name}} {{arme.data.mainInfo}}</label>
data-action-index="{{action.index}}"
title="{{action.name}}">
<label>{{action.name}} {{action.data.mainInfo}}</label>
</div> </div>
{{/unless}} {{/unless}}
{{/each}} {{/each}}

View File

@ -1,21 +1,14 @@
<div class="control-icon rdd-initiative "> <div class="control-icon rdd-initiative ">
<img class="rdd-hud-togglebutton" src="icons/svg/sword.svg" width="36" height="36" title="Initiative" /> <img class="rdd-hud-togglebutton" src="icons/svg/sword.svg" width="36" height="36" title="Initiative" />
<div class="rdd-hud-list tokenhudext right"> <div class="rdd-hud-list tokenhudext right">
{{#each actions as |action key|}} {{#each armes as |arme key|}}
<div class="control-icon tokenhudicon rdd-hud-menu" <div class="control-icon tokenhudicon rdd-hud-menu" data-command="{{arme.command}}" data-combatant-id="{{../combatant.id}}" data-arme-id="{{arme.index}}" title="{{arme.name}}">
data-combatant-id="{{../combatant.id}}" <label>I:{{arme.name}} {{arme.data.mainInfo}}</label>
data-action-index="{{action.index}}"
title="{{action.name}}">
<label>init: {{action.name}} {{action.data.mainInfo}}</label>
</div> </div>
{{/each}} {{/each}}
{{#each commandes as |commande key|}} {{#each commandes as |commande key|}}
<div class="control-icon tokenhudicon rdd-hud-menu" <div class="control-icon tokenhudicon rdd-hud-menu" data-command="{{commande.command}}" data-combatant-id="{{../combatant.id}}" data-arme-id="{{commande.index}}" title="{{commande.name}}">
data-command="{{commande.command}}" <label>I:{{commande.name}}</label>
data-combatant-id="{{../combatant.id}}"
data-action-index="{{commande.index}}"
title="{{commande.name}}">
<label>{{commande.name}}</label>
</div> </div>
{{/each}} {{/each}}
</div> </div>

View File

@ -29,10 +29,11 @@
<span><label>Contenu : </label></span> <span><label>Contenu : </label></span>
<ul class="item-list alterne-list"> <ul class="item-list alterne-list">
<li class="competence-header flexrow"> <li class="competence-header flexrow">
<span class="equipement-nom">Nom</span> <img class="sheet-competence-img" src="{{img}}" title="Equipement"/>
<span class="equipement-detail">Q.</span> <span class="competence-title flex-grow">Nom</span>
<span class="equipement-detail">Enc.</span> <span class="competence-title">Q.</span>
<span class="equipement-actions">Actions</span> <span class="competence-title">Enc.</span>
<span class="competence-title flex-grow">Equiper/Editer/Suppr.</span>
</li> </li>
{{buildContenu this}} {{buildContenu this}}
</ul> </ul>