forked from public/foundryvtt-reve-de-dragon
Standardisation inventaire et prix
Les objets d'inventaire ont maintenant tous: coût, encombrement, qualité, quantité Le coût est toujours exprimé en sols, y compris pour les monnaies. Les paiements et achat-ventes sont fait en sols.
This commit is contained in:
@ -1359,10 +1359,10 @@ export class RdDActor extends Actor {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
computePrixTotalEquipement() {
|
||||
const deniers = this.items.filter(it => it.isEquipement())
|
||||
.map(it => it.prixTotalDeniers())
|
||||
const valeur = this.items.filter(it => it.isEquipement())
|
||||
.map(it => it.valeurTotale())
|
||||
.reduce(Misc.sum(), 0);
|
||||
return deniers / 100;
|
||||
return valeur / 100;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@ -3586,36 +3586,20 @@ export class RdDActor extends Actor {
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async depenserDeniers(depense, dataObj = undefined, quantite = 1, toActorId) {
|
||||
async payerSols(depense) {
|
||||
depense = Number(depense);
|
||||
let fortune = this.getFortune();
|
||||
console.log("depenserDeniers", game.user.character, depense, fortune);
|
||||
let msg = "";
|
||||
if (depense == 0) {
|
||||
if (dataObj) {
|
||||
dataObj.payload.system.cout = depense / 100; // Mise à jour du prix en sols , avec le prix acheté
|
||||
dataObj.payload.system.quantite = quantite;
|
||||
await this.createEmbeddedDocuments('Item', [dataObj.payload]);
|
||||
msg += `<br>L'objet <strong>${dataObj.payload.name}</strong> a été ajouté gratuitement à votre inventaire.`;
|
||||
}
|
||||
return;
|
||||
}
|
||||
else {
|
||||
if (fortune >= depense) {
|
||||
const toActor = game.actors.get(toActorId)
|
||||
await toActor?.ajouterDeniers(depense, this.id);
|
||||
await Monnaie.optimiser(this, fortune - depense);
|
||||
msg = `Vous avez payé <strong>${depense} Deniers</strong>${toActor ? " à " + toActor.name : ''}, qui ont été soustraits de votre argent.`;
|
||||
RdDAudio.PlayContextAudio("argent"); // Petit son
|
||||
|
||||
if (dataObj) {
|
||||
dataObj.payload.system.cout = depense / 100; // Mise à jour du prix en sols , avec le prix acheté
|
||||
dataObj.payload.system.quantite = quantite;
|
||||
await this.createEmbeddedDocuments('Item', [dataObj.payload]);
|
||||
msg += `<br>Et l'objet <strong>${dataObj.payload.name}</strong> a été ajouté à votre inventaire.`;
|
||||
}
|
||||
} else {
|
||||
msg = "Vous n'avez pas assez d'argent pour payer cette somme !";
|
||||
}
|
||||
let fortune = this.getFortune();
|
||||
console.log("payer", game.user.character, depense, fortune);
|
||||
let msg = "";
|
||||
if (fortune >= depense) {
|
||||
await Monnaie.optimiserFortune(this, fortune - depense);
|
||||
msg = `Vous avez payé <strong>${depense} Sols</strong>, qui ont été soustraits de votre argent.`;
|
||||
RdDAudio.PlayContextAudio("argent"); // Petit son
|
||||
} else {
|
||||
msg = "Vous n'avez pas assez d'argent pour payer cette somme !";
|
||||
}
|
||||
|
||||
let message = {
|
||||
@ -3625,38 +3609,38 @@ export class RdDActor extends Actor {
|
||||
ChatMessage.create(message);
|
||||
}
|
||||
|
||||
async depenser(depense) {
|
||||
let reste = this.getFortune() - Number.parseInt(depense);
|
||||
async depenserSols(sols) {
|
||||
let reste = this.getFortune() - Number(sols);
|
||||
if (reste >= 0) {
|
||||
await Monnaie.optimiser(this, reste);
|
||||
await Monnaie.optimiserFortune(this, reste);
|
||||
}
|
||||
return reste;
|
||||
}
|
||||
|
||||
async ajouterDeniers(gain, fromActorId = undefined) {
|
||||
gain = Number.parseInt(gain);
|
||||
if (gain < 0) {
|
||||
ui.notifications.error(`Impossible d'ajouter un gain de ${gain} <0`);
|
||||
async ajouterSols(sols, fromActorId = undefined) {
|
||||
sols = Number(sols);
|
||||
if (sols == 0) {
|
||||
return;
|
||||
}
|
||||
if (gain == 0) {
|
||||
if (sols < 0) {
|
||||
ui.notifications.error(`Impossible d'ajouter un gain de ${sols} <0`);
|
||||
return;
|
||||
}
|
||||
if (fromActorId && !game.user.isGM) {
|
||||
RdDActor.remoteActorCall({
|
||||
userId: Misc.connectedGMOrUser(),
|
||||
actorId: this.id,
|
||||
method: 'ajouterDeniers', args: [gain, fromActorId]
|
||||
method: 'ajouterSols', args: [sols, fromActorId]
|
||||
});
|
||||
}
|
||||
else {
|
||||
const fromActor = game.actors.get(fromActorId)
|
||||
await Monnaie.optimiser(this, gain + this.getFortune());
|
||||
await Monnaie.optimiserFortune(this, sols + this.getFortune());
|
||||
|
||||
RdDAudio.PlayContextAudio("argent"); // Petit son
|
||||
ChatMessage.create({
|
||||
whisper: ChatUtility.getWhisperRecipientsAndGMs(this.name),
|
||||
content: `Vous avez reçu <strong>${gain} Deniers</strong> ${fromActor ? " de " + fromActor.name : ''}, qui ont été ajoutés à votre argent.`
|
||||
content: `Vous avez reçu <strong>${sols} Sols</strong> ${fromActor ? " de " + fromActor.name : ''}, qui ont été ajoutés à votre argent.`
|
||||
});
|
||||
}
|
||||
}
|
||||
@ -3690,23 +3674,23 @@ export class RdDActor extends Actor {
|
||||
const itemId = vente.item._id;
|
||||
const isItemEmpilable = "quantite" in vente.item.system;
|
||||
|
||||
const coutDeniers = Math.floor((achat.prixTotal ?? 0) * 100);
|
||||
const cout = Number(achat.prixTotal ?? 0);
|
||||
achat.quantiteTotal = (achat.choix.nombreLots ?? 1) * (vente.tailleLot);
|
||||
if (acheteur) {
|
||||
let resteAcheteur = await acheteur.depenser(coutDeniers);
|
||||
let resteAcheteur = await acheteur.depenserSols(cout);
|
||||
if (resteAcheteur < 0) {
|
||||
ChatUtility.notifyUser(achat.userId, 'warn', `Vous n'avez pas assez d'argent pour payer ${Math.ceil(coutDeniers / 100)} sols !`);
|
||||
ChatUtility.notifyUser(achat.userId, 'warn', `Vous n'avez pas assez d'argent pour payer ${Math.ceil(cout / 100)} sols !`);
|
||||
return;
|
||||
}
|
||||
}
|
||||
const itemVendu = vendeur?.getObjet(itemId);
|
||||
if (itemVendu) {
|
||||
if (isItemEmpilable ? (itemVendu.system.quantite < achat.quantiteTotal) : (achat.choix.nombreLots != 1)) {
|
||||
await acheteur?.ajouterDeniers(coutDeniers);
|
||||
await acheteur?.ajouterSols(cout);
|
||||
ChatUtility.notifyUser(achat.userId, 'warn', `Le vendeur n'a plus assez de ${vente.item.name} !`);
|
||||
return;
|
||||
}
|
||||
vendeur.ajouterDeniers(coutDeniers);
|
||||
vendeur.ajouterSols(cout);
|
||||
let resteQuantite = (itemVendu.system.quantite ?? 1) - achat.quantiteTotal;
|
||||
if (resteQuantite == 0) {
|
||||
vendeur.deleteEmbeddedDocuments("Item", [itemId])
|
||||
@ -3729,7 +3713,7 @@ export class RdDActor extends Actor {
|
||||
await acheteur.consommerNourritureboisson(items[0].id, achat.choix, vente.actingUserId);
|
||||
}
|
||||
}
|
||||
if (coutDeniers > 0) {
|
||||
if (cout > 0) {
|
||||
RdDAudio.PlayContextAudio("argent");
|
||||
}
|
||||
const chatAchatItem = duplicate(vente);
|
||||
|
Reference in New Issue
Block a user