Corrections prix et enc. équipement
Affichage de la valeur si option activée Utilisation de boutons au lieu des liens
This commit is contained in:
parent
efdc676776
commit
22091ef431
@ -139,7 +139,6 @@ export class RdDActor extends Actor {
|
|||||||
|
|
||||||
// Dynamic computing fields
|
// Dynamic computing fields
|
||||||
this.encTotal = 0;
|
this.encTotal = 0;
|
||||||
this.prixTotalEquipement = 0;
|
|
||||||
|
|
||||||
// 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.
|
||||||
@ -299,11 +298,6 @@ export class RdDActor extends Actor {
|
|||||||
return Math.floor(this.encTotal ?? 0);
|
return Math.floor(this.encTotal ?? 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
|
||||||
getPrixTotalEquipement() {
|
|
||||||
return Math.floor(this.system.prixTotalEquipement ?? 0)
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
getCompetence(idOrName, options = {}) {
|
getCompetence(idOrName, options = {}) {
|
||||||
return RdDItemCompetence.findCompetence(this.items, idOrName, options)
|
return RdDItemCompetence.findCompetence(this.items, idOrName, options)
|
||||||
@ -1375,11 +1369,10 @@ export class RdDActor extends Actor {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
computePrixTotalEquipement() {
|
computePrixTotalEquipement() {
|
||||||
this.prixTotalEquipement = this.filterItems(it => it.system.prixTotal)
|
const deniers = this.items.filter(it => it.isEquipement())
|
||||||
.map(it => it.system.prixTotal ?? 0)
|
.map(it => it.prixTotalDeniers())
|
||||||
.reduce(Misc.sum(), 0);
|
.reduce(Misc.sum(), 0);
|
||||||
// Mise à jour valeur totale de l'équipement
|
return deniers / 100;
|
||||||
return this.prixTotalEquipement;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
|
@ -1,12 +1,27 @@
|
|||||||
import { DialogItemVente } from "./dialog-item-vente.js";
|
import { DialogItemVente } from "./dialog-item-vente.js";
|
||||||
import { Grammar } from "./grammar.js";
|
import { Grammar } from "./grammar.js";
|
||||||
import { Misc } from "./misc.js";
|
|
||||||
import { RdDHerbes } from "./rdd-herbes.js";
|
import { RdDHerbes } from "./rdd-herbes.js";
|
||||||
import { RdDUtility } from "./rdd-utility.js";
|
import { RdDUtility } from "./rdd-utility.js";
|
||||||
|
|
||||||
const typesObjetsEquipement = ["objet", "arme", "armure", "gemme", "conteneur", "herbe", "ingredient", "livre", "potion", "munition", "nourritureboisson", "monnaie"]
|
const typesObjetsEquipement = [
|
||||||
|
"arme",
|
||||||
|
"armure",
|
||||||
|
"conteneur",
|
||||||
|
"gemme",
|
||||||
|
"herbe",
|
||||||
|
"ingredient",
|
||||||
|
"livre",
|
||||||
|
"monnaie",
|
||||||
|
"munition",
|
||||||
|
"nourritureboisson",
|
||||||
|
"objet",
|
||||||
|
"potion",
|
||||||
|
]
|
||||||
const typesObjetsOeuvres = ["oeuvre", "recettecuisine", "musique", "chant", "danse", "jeu"]
|
const typesObjetsOeuvres = ["oeuvre", "recettecuisine", "musique", "chant", "danse", "jeu"]
|
||||||
const encBrin = 0.00005;// un brin = 1 décigramme = 1/10g = 1/10000kg = 1/20000 enc
|
const encBrin = 0.00005; // un brin = 1 décigramme = 1/10g = 1/10000kg = 1/20000 enc
|
||||||
|
const encPepin = 0.0007; /* un pépin de gemme = 1/10 cm3 = 1/1000 l = 3.5/1000 kg = 7/2000 kg = 7/1000 enc
|
||||||
|
densité 3.5 (~2.3 à 4, parfois plus) -- https://www.juwelo.fr/guide-des-pierres/faits-et-chiffres/
|
||||||
|
*/
|
||||||
|
|
||||||
export const defaultItemImg = {
|
export const defaultItemImg = {
|
||||||
competence: "systems/foundryvtt-reve-de-dragon/icons/competence_defaut.webp",
|
competence: "systems/foundryvtt-reve-de-dragon/icons/competence_defaut.webp",
|
||||||
@ -50,7 +65,7 @@ export class RdDItem extends Item {
|
|||||||
super(itemData, context);
|
super(itemData, context);
|
||||||
}
|
}
|
||||||
|
|
||||||
static getTypeObjetsEquipement() {
|
static getTypesObjetsEquipement() {
|
||||||
return typesObjetsEquipement
|
return typesObjetsEquipement
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -62,6 +77,9 @@ export class RdDItem extends Item {
|
|||||||
return this.type == 'competence';
|
return this.type == 'competence';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
isEquipement() {
|
||||||
|
return typesObjetsEquipement.includes(this.type)
|
||||||
|
}
|
||||||
isConteneur() {
|
isConteneur() {
|
||||||
return this.type == 'conteneur';
|
return this.type == 'conteneur';
|
||||||
}
|
}
|
||||||
@ -87,11 +105,6 @@ export class RdDItem extends Item {
|
|||||||
isPotion() {
|
isPotion() {
|
||||||
return this.type == 'potion';
|
return this.type == 'potion';
|
||||||
}
|
}
|
||||||
|
|
||||||
isEquipement() {
|
|
||||||
return RdDItem.getTypeObjetsEquipement().includes(this.type)
|
|
||||||
}
|
|
||||||
|
|
||||||
isCristalAlchimique() {
|
isCristalAlchimique() {
|
||||||
return this.type == 'objet' && Grammar.toLowerCaseNoAccent(this.name) == 'cristal alchimique' && this.system.quantite > 0;
|
return this.type == 'objet' && Grammar.toLowerCaseNoAccent(this.name) == 'cristal alchimique' && this.system.quantite > 0;
|
||||||
}
|
}
|
||||||
@ -100,22 +113,36 @@ export class RdDItem extends Item {
|
|||||||
return this.system.magique
|
return this.system.magique
|
||||||
}
|
}
|
||||||
|
|
||||||
getEncTotal() {
|
getQuantite() {
|
||||||
return Number(this.system.encombrement ?? 0) * Number(this.system.quantite ?? 1)
|
return Math.round(this.isConteneur() ? 1 : (this.system.quantite ?? 0))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getEncTotal() {
|
||||||
|
return this.getEnc() * this.getQuantite();
|
||||||
|
}
|
||||||
|
|
||||||
getEnc() {
|
getEnc() {
|
||||||
switch (this.type) {
|
switch (this.type) {
|
||||||
case 'herbe':
|
case 'herbe':
|
||||||
return encBrin;
|
return encBrin;
|
||||||
|
case 'gemme':
|
||||||
|
return encPepin * this.system.taille;
|
||||||
}
|
}
|
||||||
return this.system.encombrement ?? 0;
|
return Math.max(this.system.encombrement ?? 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
prixTotalDeniers() {
|
||||||
|
return this.getQuantite() * this.valeurDeniers()
|
||||||
|
}
|
||||||
|
|
||||||
|
valeurDeniers() {
|
||||||
|
return Math.max(Math.round(this.system.cout ? (this.system.cout * 100) : (this.system.valeur_deniers ?? 0)), 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
prepareDerivedData() {
|
prepareDerivedData() {
|
||||||
super.prepareDerivedData();
|
super.prepareDerivedData();
|
||||||
if (this.isEquipement()) {
|
if (this.isEquipement()) {
|
||||||
this._calculsEquipement();
|
this.system.encTotal = this.getEncTotal();
|
||||||
|
|
||||||
if (this.isPotion()) {
|
if (this.isPotion()) {
|
||||||
this.prepareDataPotion()
|
this.prepareDataPotion()
|
||||||
}
|
}
|
||||||
@ -134,17 +161,6 @@ export class RdDItem extends Item {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_calculsEquipement() {
|
|
||||||
const quantite = this.isConteneur() ? 1 : (this.system.quantite ?? 0);
|
|
||||||
const enc = this.getEnc();
|
|
||||||
if (enc != undefined) {
|
|
||||||
this.system.encTotal = Math.max(enc, 0) * quantite;
|
|
||||||
}
|
|
||||||
if (this.cout != undefined) {
|
|
||||||
this.system.prixTotal = Math.max(this.cout, 0) * quantite;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
getActionPrincipale(options = { warnIfNot: true }) {
|
getActionPrincipale(options = { warnIfNot: true }) {
|
||||||
const warn = options.warnIfNot;
|
const warn = options.warnIfNot;
|
||||||
switch (this.type) {
|
switch (this.type) {
|
||||||
@ -202,18 +218,18 @@ export class RdDItem extends Item {
|
|||||||
if (!other || !this.isEquipement()) return undefined;
|
if (!other || !this.isEquipement()) return undefined;
|
||||||
|
|
||||||
let message = undefined;
|
let message = undefined;
|
||||||
if (this.type != other.type) {
|
if (this.system.quantite == undefined) {
|
||||||
message = `Impossible de regrouper ${this.type} avec ${other.type}`;
|
message = `Impossible de regrouper des ${this.type}, ils ne sont pas empilables`;
|
||||||
|
}
|
||||||
|
else if (this.type != other.type) {
|
||||||
|
message = `Impossible de regrouper des ${this.type} avec des ${other.type}`;
|
||||||
}
|
}
|
||||||
else if (this.name != other.name) {
|
else if (this.name != other.name) {
|
||||||
message = `Impossible de regrouper ${this.name} avec ${other.name}`;
|
message = `Impossible de regrouper ${this.name} avec ${other.name}`;
|
||||||
}
|
}
|
||||||
else if (this.system.quantite == undefined) {
|
|
||||||
message = `Impossible de regrouper des ${this.type}, ils ne sont pas empilables`;
|
|
||||||
}
|
|
||||||
else {
|
else {
|
||||||
const differences = Object.entries(this.system)
|
const differences = Object.entries(this.system)
|
||||||
.filter(([key, value]) => !['quantite', 'encTotal', 'prixTotal', 'cout'].includes(key) && value != other.system[key]);
|
.filter(([key, value]) => !['quantite', 'cout'].includes(key) && value != other.system[key]);
|
||||||
if (differences.length > 0) {
|
if (differences.length > 0) {
|
||||||
message = `Impossible de regrouper les ${this.type} ${this.name}: `;
|
message = `Impossible de regrouper les ${this.type} ${this.name}: `;
|
||||||
for (const [key, value] of differences) {
|
for (const [key, value] of differences) {
|
||||||
|
@ -262,6 +262,7 @@ export class RdDUtility {
|
|||||||
Handlebars.registerHelper('caseTmr-type', coord => TMRUtility.getTMRType(coord));
|
Handlebars.registerHelper('caseTmr-type', coord => TMRUtility.getTMRType(coord));
|
||||||
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('regle-optionnelle', (option) => ReglesOptionelles.isUsing(option) );
|
||||||
|
|
||||||
Handlebars.registerHelper('filtreTriCompetences', competences => competences.filter(it => it.system.isVisible)
|
Handlebars.registerHelper('filtreTriCompetences', competences => competences.filter(it => it.system.isVisible)
|
||||||
.sort((a, b) => {
|
.sort((a, b) => {
|
||||||
@ -307,7 +308,7 @@ export class RdDUtility {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static async selectObjetType(actorSheet) {
|
static async selectObjetType(actorSheet) {
|
||||||
let typeObjets = RdDItem.getTypeObjetsEquipement();
|
let typeObjets = RdDItem.getTypesObjetsEquipement();
|
||||||
let options = `<span class="competence-label">Selectionnez le type d'équipement</span><select class="item-type">`;
|
let options = `<span class="competence-label">Selectionnez le type d'équipement</span><select class="item-type">`;
|
||||||
for (let typeName of typeObjets) {
|
for (let typeName of typeObjets) {
|
||||||
options += `<option value="${typeName}">${typeName}</option>`
|
options += `<option value="${typeName}">${typeName}</option>`
|
||||||
|
@ -12,10 +12,11 @@ const listeReglesOptionelles = [
|
|||||||
{ name: 'degat-minimum-malus-libre', group: 'Règles de combat', descr: "Le malus libre d'attaque remplace une valeur de dés d'encaissement si elle est plus petite. Exemple : la difficulté libre de l'attaquant est de -4. Sur le jet d'encaissement, tout résultat inférieur à 4 devient 4.", default: false },
|
{ name: 'degat-minimum-malus-libre', group: 'Règles de combat', descr: "Le malus libre d'attaque remplace une valeur de dés d'encaissement si elle est plus petite. Exemple : la difficulté libre de l'attaquant est de -4. Sur le jet d'encaissement, tout résultat inférieur à 4 devient 4.", default: false },
|
||||||
{ name: 'degat-ajout-malus-libre', group: 'Règles de combat', descr: "Le malus libre d'attaque s'ajoute au jet d'encaissement et aux autres bonus. Exemple : la difficulté libre de l'attaquant est de -4. Le jet d'encaissement est effectué à 2d10+4, plus les bonus de situation et d'armes.", default: false },
|
{ name: 'degat-ajout-malus-libre', group: 'Règles de combat', descr: "Le malus libre d'attaque s'ajoute au jet d'encaissement et aux autres bonus. Exemple : la difficulté libre de l'attaquant est de -4. Le jet d'encaissement est effectué à 2d10+4, plus les bonus de situation et d'armes.", default: false },
|
||||||
{ name: 'astrologie', group: 'Règles générales', descr: "Appliquer les ajustements astrologiques aux jets de chance et aux rituels", default: true },
|
{ name: 'astrologie', group: 'Règles générales', descr: "Appliquer les ajustements astrologiques aux jets de chance et aux rituels", default: true },
|
||||||
{ name: 'afficher-prix-joueurs', group: 'Règles générales', descr: "Afficher le prix de l'équipement des joueurs", default: true },
|
{ name: 'afficher-prix-joueurs', group: 'Règles générales', descr: "Afficher le prix de l'équipement des joueurs", default: true, uniquementJoueur: true},
|
||||||
{ name: 'appliquer-fatigue', group: 'Règles générales', descr: "Appliquer les règles de fatigue", default: true },
|
{ name: 'appliquer-fatigue', group: 'Règles générales', descr: "Appliquer les règles de fatigue", default: true },
|
||||||
{ name: 'afficher-colonnes-reussite', group: 'Règles générales', descr: "Afficher le nombre de colonnes de réussite ou d'échec", default: false },
|
{ name: 'afficher-colonnes-reussite', group: 'Règles générales', descr: "Afficher le nombre de colonnes de réussite ou d'échec", default: false },
|
||||||
];
|
];
|
||||||
|
const uniquementJoueur = listeReglesOptionelles.filter(it => it.uniquementJoueur).map(it=>it.name);
|
||||||
|
|
||||||
export class ReglesOptionelles extends FormApplication {
|
export class ReglesOptionelles extends FormApplication {
|
||||||
static init() {
|
static init() {
|
||||||
@ -71,6 +72,9 @@ export class ReglesOptionelles extends FormApplication {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static isUsing(name) {
|
static isUsing(name) {
|
||||||
|
if (game.user.isGM && uniquementJoueur.includes(name)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
return game.settings.get(SYSTEM_RDD, ReglesOptionelles._getIdRegle(name));
|
return game.settings.get(SYSTEM_RDD, ReglesOptionelles._getIdRegle(name));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,11 +1,17 @@
|
|||||||
{{> "systems/foundryvtt-reve-de-dragon/templates/actor/inventaire-monnaie.html" monnaie=monnaie}}
|
{{> "systems/foundryvtt-reve-de-dragon/templates/actor/inventaire-monnaie.html" monnaie=monnaie}}
|
||||||
|
|
||||||
<span class="item-name"><h4>Equipement</h4></span>
|
<h4>Equipement</h4>
|
||||||
<span class="item-name">Encombrement total/max : {{numberFormat calc.encTotal decimals=2}} / {{system.attributs.encombrement.value}} <b>{{calc.surEncombrementMessage}}</b></span> -
|
<span class="item-name">
|
||||||
<span class="item-name"><a class="creer-un-objet">Créer un objet</a></span>
|
Encombrement: {{numberFormat calc.encTotal decimals=2}} (max: {{system.attributs.encombrement.value}}){{#if calc.surEncombrementMessage}}<b>{{calc.surEncombrementMessage}}</b>{{/if}}
|
||||||
{{#if options.isGM}}
|
{{#if (regle-optionnelle 'afficher-prix-joueurs')}}
|
||||||
<span class="item-name"> - <a id="nettoyer-conteneurs">Vider tout les conteneurs</a></span>
|
‐ Valeur: {{numberFormat calc.prixTotalEquipement decimals=2}} Sols
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
‐
|
||||||
|
<a class="chat-card-button creer-un-objet">Nouvel objet</a>
|
||||||
|
{{#if options.isGM}}
|
||||||
|
<a class="chat-card-button nettoyer-conteneurs">Tout vider</a>
|
||||||
|
{{/if}}
|
||||||
|
</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>
|
<span class="equipement-nom">Nom</span>
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<h3>Tâches</h3><a class='creer-tache'>Créer une nouvelle Tâche</a>
|
<h3>Tâches</h3><a class="chat-card-button creer-tache">Nouvelle Tâche</a>
|
||||||
<ul class="item-list alterne-list">
|
<ul class="item-list alterne-list">
|
||||||
{{#each taches as |tache id|}}
|
{{#each taches as |tache id|}}
|
||||||
<li class="item flexrow list-item" data-item-id="{{tache._id}}">
|
<li class="item flexrow list-item" data-item-id="{{tache._id}}">
|
||||||
|
Loading…
Reference in New Issue
Block a user