#88 Gestion argent

This commit is contained in:
2020-12-31 00:55:02 +01:00
parent fcd4d615dd
commit 5175be2801
7 changed files with 198 additions and 17 deletions

View File

@ -14,6 +14,7 @@ import { Grammar } from "./grammar.js";
import { RdDEncaisser } from "./rdd-roll-encaisser.js";
import { RdDCombat } from "./rdd-combat.js";
/* -------------------------------------------- */
/**
* Extend the base Actor entity by defining a custom roll data structure which is ideal for the Simple system.
* @extends {Actor}
@ -47,8 +48,6 @@ export class RdDActor extends Actor {
let compendiumName = "";
if (data.type == "personnage") {
compendiumName = "foundryvtt-reve-de-dragon.competences";
} else if (data.type == "humanoide") {
compendiumName = "foundryvtt-reve-de-dragon.competences-humanoides";
} else if (data.type == "creature") {
compendiumName = "foundryvtt-reve-de-dragon.competences-creatures";
} else if (data.type == "entite") {
@ -64,12 +63,14 @@ export class RdDActor extends Actor {
data.items.push(compItem);
}
// Ajout monnaie
if (data.type == "personnage" ) {
await RdDActor.ajouterMonnaie( data.items );
}
return super.create(data, options);
}
/* -------------------------------------------- */
/* -------------------------------------------- */
prepareData() {
super.prepareData();
@ -103,6 +104,37 @@ export class RdDActor extends Actor {
this.computeEncombrementTotalEtMalusArmure();
this.computeEtatGeneral();
}
/* -------------------------------------------- */
static async ajouterMonnaie( items ) {
let etain = { name: "Etain (1 denier)", type: 'monnaie', _id: randomID(),
data: {
quantite: 0,
valeur_deniers: 1,
encombrement: 0.01,
description: ""
}
}
items.push(etain);
let bronze = duplicate(etain);
bronze.id = randomID();
bronze.name = "Bronze (10 deniers)";
bronze.data.valeur_deniers = 10;
items.push(bronze);
let argent = duplicate(etain);
argent.id = randomID();
argent.name = "Argent (1 sol)";
argent.data.valeur_deniers = 100;
items.push(argent);
let or = duplicate(argent);
or.id = randomID();
or.name = "Or (10 sols)";
or.data.valeur_deniers = 1000;
items.push(or);
}
/* -------------------------------------------- */
isCreature() {
@ -1355,7 +1387,7 @@ export class RdDActor extends Actor {
isConnaissanceFleuve( ) {
return this.data.items.find( item => item.type == 'tete' && item.name.toLowerCase().includes( 'connaissance du fleuve' ) );
}
/* -------------------------------------------- */
isReserveEnSecurite() {
let reserveSecurite = this.data.items.find( item => item.type == 'tete' && item.name.toLowerCase().includes( ' en sécurité' ) );
@ -1996,7 +2028,6 @@ export class RdDActor extends Actor {
this.sheet.render(true);
}
/* -------------------------------------------- */
/** @override */
getRollData() {
@ -2004,7 +2035,6 @@ export class RdDActor extends Actor {
return data;
}
/* -------------------------------------------- */
/* -- entites -- */
/* retourne true si on peut continuer, false si on ne peut pas continuer */
@ -2075,6 +2105,73 @@ export class RdDActor extends Actor {
await this.update( {"data.sante.resonnance": resonnance});
return;
}
/* -------------------------------------------- */
async optimizeArgent( sumDenier ) {
let sols = Math.floor(sumDenier / 100);
let deniers = sumDenier - (sols*100);
let nbOr = Math.floor(sols / 10);
let nbArgent = sols - (nbOr*10);
let nbBronze = Math.floor(deniers / 10 );
let nbEtain = deniers - (nbBronze*10);
// console.log("ARGENT", nbOr, nbArgent, nbBronze, nbEtain);
let piece = this.data.items.find( item => item.type =='monnaie' && item.data.valeur_deniers == 1000);
if (piece ) {
let update = { _id: piece._id, 'data.quantite': nbOr};
const updated = await this.updateEmbeddedEntity("OwnedItem", update);
}
piece = this.data.items.find( item => item.type =='monnaie' && item.data.valeur_deniers == 100);
if (piece ) {
let update = { _id: piece._id, 'data.quantite': nbArgent};
const updated = await this.updateEmbeddedEntity("OwnedItem", update);
}
piece = this.data.items.find( item => item.type =='monnaie' && item.data.valeur_deniers == 10);
if (piece ) {
let update = { _id: piece._id, 'data.quantite': nbBronze};
const updated = await this.updateEmbeddedEntity("OwnedItem", update);
}
piece = this.data.items.find( item => item.type =='monnaie' && item.data.valeur_deniers == 1);
if (piece ) {
let update = { _id: piece._id, 'data.quantite': nbEtain};
const updated = await this.updateEmbeddedEntity("OwnedItem", update);
}
}
/* -------------------------------------------- */
payerDenier( sumDenier ) {
sumDenier = Number(sumDenier);
let denierDisponible = 0;
let monnaie = this.data.items.filter( item => item.type =='monnaie');
for ( let piece of monnaie ) {
denierDisponible += piece.data.valeur_deniers * Number(piece.data.quantite);
}
console.log("DENIER", game.user.character, sumDenier, denierDisponible);
if ( denierDisponible >= sumDenier) {
denierDisponible -= sumDenier;
this.optimizeArgent(denierDisponible);
} else {
let message = {
whisper: ChatUtility.getWhisperRecipientsAndGMs( this.name ),
content : "Vous n'avez pas assez d'argent pour paye cette somme !"
};
ChatMessage.create( message );
}
}
/* -------------------------------------------- */
async monnaieIncDec( id, value) {
let monnaie = this.data.items.find( item => item.type =='monnaie' && item._id == id );
if (monnaie ) {
monnaie.data.quantite += value;
if ( monnaie.data.quantite < 0 ) monnaie.data.quantite = 0; // Sanity check
const update = {_id: monnaie._id, 'data.quantite': monnaie.data.quantite };
const updated = await this.updateEmbeddedEntity("OwnedItem", update);
}
}
}