forked from public/foundryvtt-reve-de-dragon
Merge branch 'v1.4' of https://gitlab.com/LeRatierBretonnien/foundryvtt-reve-de-dragon into v1.4
This commit is contained in:
103
module/actor.js
103
module/actor.js
@ -359,7 +359,7 @@ export class RdDActor extends Actor {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async verifierPotionsEnchantees() {
|
||||
let potionsEnchantees = this.filterItemsData(it => it.type == 'potion' && it.data.isEnchante);
|
||||
let potionsEnchantees = this.filterItemsData(it => it.type == 'potion' && it.data.magique);
|
||||
for (let potion of potionsEnchantees) {
|
||||
if (!potion.prpermanent) {
|
||||
console.log(potion);
|
||||
@ -931,28 +931,29 @@ export class RdDActor extends Actor {
|
||||
/* -------------------------------------------- */
|
||||
/** Supprime un item d'un conteneur, sur la base
|
||||
* de leurs ID */
|
||||
async enleverDeConteneur(itemId, conteneur) {
|
||||
if (conteneur?.isConteneur()) { // Si présent
|
||||
async enleverDeConteneur(item, conteneur, objetVersConteneur) {
|
||||
if (conteneur?.isConteneur()) {
|
||||
let data2use = duplicate(Misc.data(conteneur));
|
||||
//console.log("Suppression du conteneur1", conteneurId, itemId, data2use.data.contenu);
|
||||
let contenu = data2use.data.contenu;
|
||||
let index = contenu.indexOf(itemId);
|
||||
let index = contenu.indexOf(item.id);
|
||||
while (index >= 0) { // Force cleanup, itemId is unique
|
||||
contenu.splice(index, 1);
|
||||
index = contenu.indexOf(itemId);
|
||||
index = contenu.indexOf(item.id);
|
||||
}
|
||||
await this.updateEmbeddedDocuments('Item', [data2use]);
|
||||
delete objetVersConteneur[item.id];
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
/** Ajoute un item dans un conteneur, sur la base
|
||||
* de leurs ID */
|
||||
async ajouterDansConteneur(itemId, conteneur) {
|
||||
async ajouterDansConteneur(item, conteneur, objetVersConteneur) {
|
||||
if (conteneur?.isConteneur()) {
|
||||
let data2use = duplicate(Misc.data(conteneur));
|
||||
data2use.data.contenu.push(itemId);
|
||||
data2use.data.contenu.push(item.id);
|
||||
await this.updateEmbeddedDocuments('Item', [data2use]);
|
||||
objetVersConteneur[item.id] = conteneur.id;
|
||||
}
|
||||
}
|
||||
|
||||
@ -970,54 +971,52 @@ export class RdDActor extends Actor {
|
||||
await this.updateEmbeddedDocuments('Item', conteneurFixedList);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async processItemDropEvent(event, objetVersConteneur) {
|
||||
let dragData = JSON.parse(event.dataTransfer.getData("text/plain"));
|
||||
async processDropItem(event, dragData, objetVersConteneur) {
|
||||
console.log("DRAG", this.id, dragData);
|
||||
let itemId = dragData.id || dragData.data._id;
|
||||
if (dragData.type == 'Item') {
|
||||
if (dragData.actorId && dragData.actorId != this.id) {
|
||||
console.log("Moving objects", dragData);
|
||||
this.moveItemsBetweenActors(itemId, dragData.actorId);
|
||||
return false;
|
||||
}
|
||||
const droppedItemId = dragData.id || dragData.data._id;
|
||||
if (dragData.actorId && dragData.actorId != this.id) {
|
||||
console.log("Moving objects", dragData);
|
||||
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 (dragData.actorId == this.id) {
|
||||
// rangement
|
||||
const destId = $(event.target).parents(".item").attr("data-item-id");
|
||||
const srcId = objetVersConteneur[itemId];
|
||||
if (srcId != destId && itemId != destId) { // déplacement de l'objet
|
||||
const item = this.getObjet(itemId);
|
||||
const dest = this.getObjet(destId);
|
||||
const src = this.getObjet(srcId);
|
||||
if (!dest) {
|
||||
// on peut toujours vider son sac
|
||||
await this.enleverDeConteneur(itemId, src);
|
||||
if (dest?.isConteneur()) {
|
||||
if (this.conteneurPeutContenir(dest, item)) {
|
||||
await this.enleverDeConteneur(item, src, objetVersConteneur);
|
||||
await this.ajouterDansConteneur(item, dest, objetVersConteneur);
|
||||
}
|
||||
}
|
||||
else if (!dest.isConteneur()) {
|
||||
// regrouper?
|
||||
await this.regrouperEquipementsSimilaires(item, dest);
|
||||
}
|
||||
else if (this.conteneurPeutContenir(dest, item)) {
|
||||
// déplacer?
|
||||
await this.enleverDeConteneur(itemId, src);
|
||||
await this.ajouterDansConteneur(itemId, dest);
|
||||
else {
|
||||
if (src?.isConteneur() && !item?.isConteneur()) {
|
||||
await this.enleverDeConteneur(item, src, objetVersConteneur);
|
||||
// simuler la re-création
|
||||
dragData.actorId = null;
|
||||
await this.deleteEmbeddedDocuments('Item', [item.id]);
|
||||
}
|
||||
else if (dest?.isEquipementSimilaire(item)) {
|
||||
await this.regrouperEquipementsSimilaires(item, dest);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
this.computeEncombrementTotalEtMalusArmure();
|
||||
await this.computeEncombrementTotalEtMalusArmure();
|
||||
}
|
||||
if (dragData.type == "Actor") {
|
||||
this.addSubacteur(itemId);
|
||||
}
|
||||
return true;
|
||||
return result;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
conteneurPeutContenir(dest, item) {
|
||||
const destData = Misc.data(dest);
|
||||
if (destData?.type != 'conteneur') {
|
||||
ui.notifications.warn(`Impossible de déplacer un objet (${item.name}) vers un ${destData.type} qui n'est pas un conteneur (${dest.name}) !`);
|
||||
return false;
|
||||
}
|
||||
if (this._isConteneurContenu(item, dest)) {
|
||||
ui.notifications.warn(`Impossible de déplacer un conteneur parent (${item.name}) dans un de ses contenus ${destData.name} !`);
|
||||
return false; // Loop detected !
|
||||
@ -1072,10 +1071,8 @@ export class RdDActor extends Actor {
|
||||
}
|
||||
|
||||
async regrouperEquipementsSimilaires(item, dest) {
|
||||
if (item.isEquipementSimilaire(dest)) {
|
||||
await dest.quantiteIncDec(Misc.templateData(item).quantite);
|
||||
await this.deleteEmbeddedDocuments('Item', [item.id]);
|
||||
}
|
||||
await dest.quantiteIncDec(Misc.templateData(item).quantite);
|
||||
await this.deleteEmbeddedDocuments('Item', [item.id]);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@ -1485,7 +1482,7 @@ export class RdDActor extends Actor {
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async santeIncDec(name, inc, isCritique = false) {
|
||||
async santeIncDec(name, inc, options = {isCritique: false, ethylisme: false}) {
|
||||
|
||||
const sante = duplicate(Misc.templateData(this).sante);
|
||||
let compteur = sante[name];
|
||||
@ -1502,7 +1499,7 @@ export class RdDActor extends Actor {
|
||||
//console.log("New value ", inc, minValue, result.newValue);
|
||||
let fatigue = 0;
|
||||
if (name == "endurance" && !this.isEntiteCauchemar()) {
|
||||
if (result.newValue == 0 && inc < 0 && !isCritique) { // perte endurance et endurance devient 0 (sauf critique) -> -1 vie
|
||||
if (result.newValue == 0 && inc < 0 && !options.isCritique) { // perte endurance et endurance devient 0 (sauf critique) -> -1 vie
|
||||
sante.vie.value--;
|
||||
}
|
||||
result.newValue = Math.max(0, result.newValue);
|
||||
@ -1510,7 +1507,7 @@ export class RdDActor extends Actor {
|
||||
result.newValue = Math.min(result.newValue, this._computeEnduranceMax())
|
||||
}
|
||||
const perte = compteur.value - result.newValue;
|
||||
if (perte > 1) {
|
||||
if (perte > 1 && !options.ethylisme) {
|
||||
// Peut-être sonné si 2 points d'endurance perdus d'un coup
|
||||
const testIsSonne = await this.testSiSonne(sante, result.newValue);
|
||||
result.sonne = testIsSonne.sonne;
|
||||
@ -1680,7 +1677,7 @@ export class RdDActor extends Actor {
|
||||
|
||||
let enduranceLost = new Roll("1d6").roll().total;
|
||||
rollDataView.enduranceLost = enduranceLost;
|
||||
await this.santeIncDec("endurance", -enduranceLost, false);
|
||||
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;
|
||||
@ -2365,7 +2362,7 @@ export class RdDActor extends Actor {
|
||||
// Mise à jour de la tache
|
||||
rollData.tache = duplicate(rollData.tache);
|
||||
rollData.tache.data.points_de_tache_courant += rollData.rolled.ptTache;
|
||||
if (rollData.rolled.isETotal){
|
||||
if (rollData.rolled.isETotal) {
|
||||
rollData.tache.data.difficulte--;
|
||||
}
|
||||
this.updateEmbeddedDocuments('Item', [rollData.tache]);
|
||||
@ -2964,7 +2961,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, (encaissement.critiques > 0));
|
||||
const perteEndurance = await this.santeIncDec("endurance", -encaissement.endurance, {critiques: encaissement.critiques > 0});
|
||||
|
||||
this.computeEtatGeneral();
|
||||
this.sheet.render(false);
|
||||
@ -3464,7 +3461,7 @@ export class RdDActor extends Actor {
|
||||
potionData.alias = this.name;
|
||||
potionData.supprimer = true;
|
||||
|
||||
if (potionData.data.isEnchante) {
|
||||
if (potionData.data.magique) {
|
||||
ChatMessage.create({
|
||||
whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name),
|
||||
content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-consommer-potion-soin.html`, potionData)
|
||||
@ -3496,7 +3493,7 @@ export class RdDActor extends Actor {
|
||||
potionData.alias = this.name;
|
||||
potionData.supprimer = true;
|
||||
|
||||
if (potionData.data.isEnchante) {
|
||||
if (potionData.data.magique) {
|
||||
ChatMessage.create({
|
||||
whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name),
|
||||
content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-consommer-potion-repos.html`, potionData)
|
||||
|
Reference in New Issue
Block a user