forked from public/foundryvtt-reve-de-dragon
#88 Gestion argent
This commit is contained in:
113
module/actor.js
113
module/actor.js
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user