forked from public/foundryvtt-reve-de-dragon
Ecole de commerce
This commit is contained in:
106
module/actor.js
106
module/actor.js
@ -969,12 +969,11 @@ export class RdDActor extends Actor {
|
||||
this.moveItemsBetweenActors(droppedItemId, dragData.actorId);
|
||||
return false;
|
||||
}
|
||||
|
||||
let result = true;
|
||||
const destId = $(event.target).parents(".item").attr("data-item-id");
|
||||
const itemId = dragData.id || dragData.data._id;
|
||||
const item = this.getObjet(itemId);
|
||||
if (item.isEquipement()) {
|
||||
if (item?.isEquipement()) {
|
||||
if (dragData.actorId == this.id) {
|
||||
// rangement
|
||||
const srcId = objetVersConteneur[itemId];
|
||||
@ -1000,8 +999,8 @@ export class RdDActor extends Actor {
|
||||
}
|
||||
}
|
||||
}
|
||||
await this.computeEncombrementTotalEtMalusArmure();
|
||||
}
|
||||
await this.computeEncombrementTotalEtMalusArmure();
|
||||
return result;
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
@ -1472,7 +1471,7 @@ export class RdDActor extends Actor {
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async santeIncDec(name, inc, options = {isCritique: false, ethylisme: false}) {
|
||||
async santeIncDec(name, inc, options = { isCritique: false, ethylisme: false }) {
|
||||
|
||||
const sante = duplicate(Misc.templateData(this).sante);
|
||||
let compteur = sante[name];
|
||||
@ -1667,7 +1666,7 @@ export class RdDActor extends Actor {
|
||||
|
||||
let enduranceLost = new Roll("1d6").roll().total;
|
||||
rollDataView.enduranceLost = enduranceLost;
|
||||
await this.santeIncDec("endurance", -enduranceLost, {ethylisme:true});
|
||||
await this.santeIncDec("endurance", -enduranceLost, { ethylisme: true });
|
||||
// Qui a bu boira (p 164)
|
||||
let rollVolonte = await RdDResolutionTable.roll(actorData.data.carac.volonte.value, Math.min(ethylisme.value, 0) + actorData.data.compteurs.moral.value);
|
||||
rollDataView.rollVolonteIsSuccess = rollVolonte.isSuccess;
|
||||
@ -1741,7 +1740,7 @@ export class RdDActor extends Actor {
|
||||
return;
|
||||
}
|
||||
if (choix.doses > itemData.data.quantite) {
|
||||
ui.notifications.warn(`Il n'y a pas assez de ${itemData.name} poour manger ${choix.doses}`)
|
||||
ui.notifications.warn(`Il n'y a pas assez de ${itemData.name} pour manger ${choix.doses}`)
|
||||
return;
|
||||
}
|
||||
const surmonteExotisme = await this.surmonterExotisme(item, choix);
|
||||
@ -2946,7 +2945,7 @@ export class RdDActor extends Actor {
|
||||
const perteVie = this.isEntiteCauchemar()
|
||||
? { newValue: 0 }
|
||||
: await this.santeIncDec("vie", - encaissement.vie);
|
||||
const perteEndurance = await this.santeIncDec("endurance", -encaissement.endurance, {critiques: encaissement.critiques > 0});
|
||||
const perteEndurance = await this.santeIncDec("endurance", -encaissement.endurance, { critiques: encaissement.critiques > 0 });
|
||||
|
||||
this.computeEtatGeneral();
|
||||
this.sheet.render(false);
|
||||
@ -3210,9 +3209,7 @@ export class RdDActor extends Actor {
|
||||
if (fortune >= depense) {
|
||||
fortune -= depense;
|
||||
const toActor = game.actors.get(toActorId)
|
||||
if (toActor) {
|
||||
toActor.ajouterDeniers(depense, this.id);
|
||||
}
|
||||
await toActor?.ajouterDeniers(depense, this.id);
|
||||
await this.optimizeArgent(fortune);
|
||||
msg = `Vous avez payé <strong>${depense} Deniers</strong>${toActor ? " à " + toActor.name : ''}, qui ont été soustraits de votre argent.`;
|
||||
RdDAudio.PlayContextAudio("argent"); // Petit son
|
||||
@ -3235,6 +3232,17 @@ export class RdDActor extends Actor {
|
||||
ChatMessage.create(message);
|
||||
}
|
||||
|
||||
async depenser(depense) {
|
||||
depense = Number(depense);
|
||||
let fortune = this.getFortune();
|
||||
let reste = fortune - depense;
|
||||
if (reste >= 0) {
|
||||
fortune -= depense;
|
||||
await this.optimizeArgent(fortune);
|
||||
}
|
||||
return reste;
|
||||
}
|
||||
|
||||
async ajouterDeniers(gain, fromActorId = undefined) {
|
||||
if (fromActorId && !game.user.isGM) {
|
||||
RdDActor.remoteActorCall({ userId: Misc.connectedGMOrUser(), actorId: this.id, method: 'ajouterDeniers', args: [gain, fromActorId] });
|
||||
@ -3248,7 +3256,7 @@ export class RdDActor extends Actor {
|
||||
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 de votre argent.`
|
||||
content: `Vous avez reçu <strong>${gain} Deniers</strong> ${fromActor ? " de " + fromActor.name : ''}, qui ont été ajoutés à votre argent.`
|
||||
});
|
||||
}
|
||||
}
|
||||
@ -3262,6 +3270,82 @@ export class RdDActor extends Actor {
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async achatVente(vendeurId, acheteurId, venteData, chatMessageIdVente) {
|
||||
if (!game.user.isGM) {
|
||||
RdDActor.remoteActorCall({
|
||||
userId: Misc.connectedGMOrUser(),
|
||||
actorId: this.vendeur?.id ?? this.acheteur?.id,
|
||||
method: 'achatVente', args: [vendeurId, acheteurId, venteData, chatMessageIdVente]
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
const acheteur = acheteurId ? game.actors.get(acheteurId) : undefined;
|
||||
const vendeur = vendeurId ? game.actors.get(vendeurId) : undefined;
|
||||
const itemId = venteData.item._id;
|
||||
|
||||
const coutDeniers = Math.floor((venteData.prixTotal ?? 0) * 100);
|
||||
const achat = duplicate(venteData.item);
|
||||
venteData.quantiteTotal = (venteData.nombreLots ?? 1) * (venteData.tailleLot);
|
||||
if (acheteur) {
|
||||
let resteAcheteur = await acheteur.depenser(coutDeniers);
|
||||
if (resteAcheteur < 0) {
|
||||
ui.notifications.warn(`Vous n'avez pas assez d'argent pour payer ${venteData.prixTotal} sols !`);
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (vendeur) {
|
||||
let itemData = Misc.data(vendeur.getObjet(itemId));
|
||||
// diminuer QuantiteVendeur
|
||||
if (("quantite" in itemData.data && itemData.data.quantite < venteData.nombreLots)
|
||||
|| (!("quantite" in itemData.data) && venteData.nombreLots != 1)) {
|
||||
// pas assez de quantite
|
||||
await acheteur?.ajouterDeniers(coutDeniers);
|
||||
ui.notifications.warn(`Le vendeur n'a plus assez de ${venteData.item.name} !`);
|
||||
return;
|
||||
}
|
||||
vendeur.ajouterDeniers(coutDeniers);
|
||||
let qtReste = (itemData.data.quantite ?? 1) - venteData.nombreLots;
|
||||
if (qtReste == 0) {
|
||||
vendeur.deleteEmbeddedDocuments("Item", itemId);
|
||||
}
|
||||
else {
|
||||
vendeur.updateEmbeddedDocuments("Item", [{ _id: itemId, 'data.quantite': qtReste }]);
|
||||
}
|
||||
}
|
||||
|
||||
if (acheteur) {
|
||||
// ajouter l'objet à l'acheteur
|
||||
achat._id = undefined;
|
||||
if ("quantite" in achat.data) {
|
||||
achat.data.quantite = venteData.quantiteTotal;
|
||||
}
|
||||
await acheteur.createEmbeddedDocuments("Item", [achat]);
|
||||
}
|
||||
if (coutDeniers > 0) {
|
||||
RdDAudio.PlayContextAudio("argent");
|
||||
}
|
||||
|
||||
ChatMessage.create({
|
||||
whisper: ChatUtility.getWhisperRecipientsAndGMs(this.name),
|
||||
content: await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-achat-item.html', venteData)
|
||||
});
|
||||
|
||||
venteData.quantiteNbLots -= venteData.nombreLots;
|
||||
if (venteData.quantiteNbLots <= 0) {
|
||||
ChatUtility.removeChatMessageId(chatMessageIdVente);
|
||||
}
|
||||
else {
|
||||
venteData.jsondata = JSON.stringify(venteData.item);
|
||||
let newMessageVente = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-vente-item.html', venteData);
|
||||
const messageVente = game.messages.get(chatMessageIdVente);
|
||||
messageVente.update({ content: newMessageVente });
|
||||
messageVente.render(true);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async effectuerTacheAlchimie(recetteId, tacheAlchimie, texteTache) {
|
||||
let recetteData = Misc.data(this.getItemOfType(recetteId, 'recettealchimique'));
|
||||
|
Reference in New Issue
Block a user