Notion d'équipement/inventaire

This commit is contained in:
Vincent Vandemeulebrouck
2022-11-28 11:31:55 +01:00
parent 42c4fe0b29
commit 4bd2c1c2b4
9 changed files with 272 additions and 284 deletions

View File

@ -3267,10 +3267,9 @@ export class RdDActor extends Actor {
/* -------------------------------------------- */
async equiperObjet(itemID) {
let item = this.getEmbeddedDocument('Item', itemID);
if (item?.system) {
if (item && ['arme', 'armure'].includes(item.type)) {
const isEquipe = !item.system.equipe;
let update = { _id: item.id, "system.equipe": isEquipe };
await this.updateEmbeddedDocuments('Item', [update]);
await this.updateEmbeddedDocuments('Item', [{ _id: item.id, "system.equipe": isEquipe }]);
this.computeEncombrementTotalEtMalusArmure(); // Mise à jour encombrement
if (isEquipe)
this.verifierForceMin(item);
@ -3569,7 +3568,7 @@ export class RdDActor extends Actor {
/* -------------------------------------------- */
getFortune() {
return this.itemTypes['monnaie']
.map(m => Number(m.system.valeur_deniers) * Number(m.system.quantite))
.map(m => Number(m.system.cout) * Number(m.system.quantite))
.reduce(Misc.sum(), 0);
}

View File

@ -4,22 +4,22 @@ import { LOG_HEAD } from "./constants.js";
const MONNAIE_ETAIN = {
name: "Etain (1 denier)", type: 'monnaie',
img: "systems/foundryvtt-reve-de-dragon/icons/objets/piece_etain_poisson.webp",
system: { quantite: 0, valeur_deniers: 1, encombrement: 0.001, description: "" }
system: { quantite: 0, cout: 1, encombrement: 0.001, description: "" }
};
const MONNAIE_BRONZE = {
name: "Bronze (10 deniers)", type: 'monnaie',
img: "systems/foundryvtt-reve-de-dragon/icons/objets/piece_bronze_epees.webp",
system: { quantite: 0, valeur_deniers: 10, encombrement: 0.002, description: "" }
system: { quantite: 0, cout: 10, encombrement: 0.002, description: "" }
};
const MONNAIE_ARGENT = {
name: "Argent (1 sol)", type: 'monnaie',
img: "systems/foundryvtt-reve-de-dragon/icons/objets/piece_argent_sol.webp",
system: { quantite: 0, valeur_deniers: 100, encombrement: 0.003, description: "" }
system: { quantite: 0, cout: 100, encombrement: 0.003, description: "" }
};
const MONNAIE_OR = {
name: "Or (10 sols)", type: 'monnaie',
img: "systems/foundryvtt-reve-de-dragon/icons/objets/piece_or_sol.webp",
system: { quantite: 0, valeur_deniers: 1000, encombrement: 0.004, description: "" }
system: { quantite: 0, cout: 1000, encombrement: 0.004, description: "" }
};
const MONNAIES_STANDARD = [MONNAIE_ETAIN, MONNAIE_BRONZE, MONNAIE_ARGENT, MONNAIE_OR];
@ -32,7 +32,7 @@ export class Monnaie {
static monnaiesManquantes(actor) {
const disponibles = actor.itemTypes['monnaie'];
const manquantes = MONNAIES_STANDARD.filter(standard => !disponibles.find(disponible => Monnaie.deValeur(disponible, standard.system?.valeur_deniers)));
const manquantes = MONNAIES_STANDARD.filter(standard => !disponibles.find(disponible => Monnaie.deValeur(disponible, standard.system?.cout)));
if (manquantes.length > 0) {
console.error(`${LOG_HEAD} monnaiesManquantes pour ${actor.name}`, manquantes, ' avec monnaies', disponibles, MONNAIES_STANDARD);
}
@ -40,7 +40,7 @@ export class Monnaie {
}
static deValeur(monnaie, valeur) {
return valeur == monnaie.system.valeur_deniers
return valeur == monnaie.system.cout
}
static arrondiDeniers(sols) {
@ -48,7 +48,7 @@ export class Monnaie {
}
static triValeurDenier() {
return Misc.ascending(item => item.system.valeur_deniers)
return Misc.ascending(item => item.system.cout)
}
static async creerMonnaiesStandard(actor) {
@ -69,7 +69,7 @@ export class Monnaie {
let reste = fortune;
let monnaies = actor.itemTypes['monnaie'];
let updates = [];
let parValeur = Misc.classifyFirst(monnaies, it => it.system.valeur_deniers);
let parValeur = Misc.classifyFirst(monnaies, it => it.system.cout);
for (let valeur of [1000, 100, 10, 1]) {
const itemPiece = parValeur[valeur];
if (itemPiece) {

View File

@ -172,7 +172,7 @@ export class RdDItem extends Item {
}
valeurDeniers() {
return Math.max(Math.round(this.system.cout ? (this.system.cout * 100) : (this.system.valeur_deniers ?? 0)), 0)
return Math.max(Math.round(this.system.cout ? (this.system.cout * 100) : (this.system.cout ?? 0)), 0)
}
prepareDerivedData() {
@ -494,7 +494,7 @@ export class RdDItem extends Item {
/* -------------------------------------------- */
_monnaieChatData() {
return [
`<b>Valeur en Deniers</b>: ${this.system.valeur_deniers}`,
`<b>Valeur en Deniers</b>: ${this.system.cout}`,
`<b>Encombrement</b>: ${this.system.encombrement}`
]
}

View File

@ -195,7 +195,8 @@ class _10_2_10_DesirLancinant_IdeeFixe extends Migration {
categorie = 'ideefixe';
name = it.name.replace('Idée fixe : ', '')
}
return { _id: it.id, name: name,
return {
_id: it.id, name: name,
'system.ideefixe': undefined,
'system.lancinant': undefined,
'system.categorie': categorie
@ -206,8 +207,36 @@ class _10_2_10_DesirLancinant_IdeeFixe extends Migration {
await this.applyItemsUpdates(items => items
.filter(it => ['queue', 'ombre'].includes(it.type))
.map(it => this.migrateQueue(it))
//.filter(it => it.system.categorie )
);
);
}
}
class _10_3_0_Inventaire extends Migration {
get code() { return "migration-equipement-inventaire"; }
get version() { return "10.3.0"; }
async migrate() {
await this.applyItemsUpdates(items => {
return this._updatesMonnaies(items)
.concat(this._updatesNonEquipe(items))
.concat(this._updatesObjets(items))
});
}
_updatesNonEquipe(items) {
return items
.filter(it => ['munition'].includes(it.type))
.map(it => { return { _id: it.id, 'system.equipe': undefined } });
}
_updatesObjets(items) {
return items
.filter(it => ['objet'].includes(it.type))
.map(it => { return { _id: it.id, 'system.resistance': undefined, 'system.equipe': undefined } });
}
_updatesMonnaies(items) {
return items
.filter(it => ['monnaie'].includes(it.type))
.map(it => { return { _id: it.id, 'system.cout': it.system.valeur_deniers, 'system.valeur_deniers': undefined } });
}
}
@ -220,6 +249,7 @@ export class Migrations {
new _10_0_33_MigrationNomsDraconic(),
new _10_2_5_ArmesTirLancer(),
new _10_2_10_DesirLancinant_IdeeFixe(),
new _10_3_0_Inventaire()
];
}

View File

@ -890,12 +890,12 @@ export class RdDUtility {
}
/* -------------------------------------------- */
static createMonnaie(name, valeur_deniers, img = "", enc = 0.01) {
static createMonnaie(name, cout, img = "", enc = 0.01) {
let piece = {
name: name, type: 'monnaie', img: img, _id: randomID(16),
dasystemta: {
quantite: 0,
valeur_deniers: valeur_deniers,
cout: cout,
encombrement: enc,
description: ""
}