Correction vente

- pas de vente à soi même
- conserver le vendeur lors de la diminution de la quantité
disponible
This commit is contained in:
Vincent Vandemeulebrouck 2021-05-08 03:52:19 +02:00
parent c4cb3bf60d
commit 27d83cf516
4 changed files with 21 additions and 18 deletions

View File

@ -963,15 +963,14 @@ export class RdDActor extends Actor {
async processDropItem(event, dragData, objetVersConteneur) {
console.log("DRAG", this.id, dragData);
const droppedItemId = dragData.id || dragData.data._id;
const itemId = dragData.id || dragData.data._id;
if (dragData.actorId && dragData.actorId != this.id) {
console.log("Moving objects", dragData);
this.moveItemsBetweenActors(droppedItemId, dragData.actorId);
this.moveItemsBetweenActors(itemId, 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 (dragData.actorId == this.id) {
@ -1061,7 +1060,7 @@ export class RdDActor extends Actor {
async regrouperEquipementsSimilaires(item, dest) {
await dest.quantiteIncDec(Misc.templateData(item).quantite);
await this.deleteEmbeddedDocuments('Item', [item.id]);
await item.delete();
}
/* -------------------------------------------- */
@ -3272,6 +3271,10 @@ export class RdDActor extends Actor {
/* -------------------------------------------- */
async achatVente(vendeurId, acheteurId, venteData, chatMessageIdVente) {
if (vendeurId == acheteurId){
ui.notifications.info("Inutile de se vendre à soi-même");
return;
}
if (!game.user.isGM) {
RdDActor.remoteActorCall({
userId: Misc.connectedGMOrUser(),
@ -3286,7 +3289,6 @@ export class RdDActor extends Actor {
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);
@ -3298,15 +3300,15 @@ export class RdDActor extends Actor {
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)) {
if ("quantite" in itemData.data ?
itemData.data.quantite < venteData.quantiteTotal : 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;
let qtReste = (itemData.data.quantite ?? 1) - venteData.quantiteTotal;
if (qtReste == 0) {
vendeur.deleteEmbeddedDocuments("Item", itemId);
}
@ -3316,11 +3318,11 @@ export class RdDActor extends Actor {
}
if (acheteur) {
// ajouter l'objet à l'acheteur
// TODO: achat depuis un compendium
const achat = duplicate(Misc.data(vendeur?.getObjet(itemId) ?? game.items.get(itemId)));
achat.data.quantite = venteData.quantiteTotal;
achat._id = undefined;
if ("quantite" in achat.data) {
achat.data.quantite = venteData.quantiteTotal;
}
// TODO: investigate bug - création marche mal...
await acheteur.createEmbeddedDocuments("Item", [achat]);
}
if (coutDeniers > 0) {
@ -3332,11 +3334,11 @@ export class RdDActor extends Actor {
content: await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-achat-item.html', venteData)
});
venteData.quantiteNbLots -= venteData.nombreLots;
if (venteData.quantiteNbLots <= 0) {
if (venteData.quantiteNbLots <= venteData.nombreLots) {
ChatUtility.removeChatMessageId(chatMessageIdVente);
}
else {
venteData.quantiteNbLots -= venteData.nombreLots;
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);

View File

@ -11,7 +11,7 @@ export class DialogItemAchat extends Dialog {
ui.notifications.warn("Impossible d'acheter: informations sur l'objet manquantes")
return;
}
const vendeurId = event.currentTarget.attributes['data-actorId']?.value;
const vendeurId = event.currentTarget.attributes['data-vendeurId']?.value;
const vendeur = vendeurId ? game.actors.get(vendeurId) : undefined;
const acheteur = RdDUtility.getSelectedActor();
@ -25,6 +25,7 @@ export class DialogItemAchat extends Dialog {
const prixLot = event.currentTarget.attributes['data-prixLot']?.value ?? 0;
let venteData = {
item: itemData,
vendeurId: vendeurId,
vendeur: Misc.data(vendeur),
acheteur: Misc.data(acheteur),
tailleLot: event.currentTarget.attributes['data-tailleLot']?.value ?? 1,

View File

@ -8,7 +8,7 @@ export class DialogItemVente extends Dialog {
const venteData = {
item: itemData,
alias: item.actor?.name ?? game.user.name,
actorId: item.actor?.id,
vendeurId: item.actor?.id,
prixOrigine: itemData.data.cout,
prixUnitaire: itemData.data.cout,
prixLot: itemData.data.cout,

View File

@ -1,5 +1,5 @@
<div class="post-item" data-transfer="{{transfer}}">
<h3>Acheter {{#if alias}}{{alias}} propose: {{/if}}{{item.name}}</h3>
<h3>{{#if alias}}{{alias}} propose:{{else}}Acheter {{/if}}{{item.name}}</h3>
{{#if item.img}}
<img src="{{item.img}}" title="{{item.name}}" />
{{/if}}
@ -26,7 +26,7 @@
<span class="chat-card-button-area">
<a class="button-acheter chat-card-button"
data-jsondata='{{jsondata}}'
{{#if actorId}}data-actorId='{{actorId}}'{{/if}}
{{#if vendeurId}}data-vendeurId='{{vendeurId}}'{{/if}}
data-tailleLot="{{tailleLot}}"
data-quantiteNbLots="{{quantiteNbLots}}"
data-quantiteIllimite="{{#if quantiteIllimite}}true{{else}}false{{/if}}"