forked from public/foundryvtt-reve-de-dragon
		
	Merge v1.5
This commit is contained in:
		| @@ -33,7 +33,8 @@ import { RollDataAjustements } from "./rolldata-ajustements.js"; | |||||||
| import { DialogItemAchat } from "./dialog-item-achat.js"; | import { DialogItemAchat } from "./dialog-item-achat.js"; | ||||||
| import { RdDItem } from "./item.js"; | import { RdDItem } from "./item.js"; | ||||||
| import { RdDPossession } from "./rdd-possession.js"; | import { RdDPossession } from "./rdd-possession.js"; | ||||||
| import { SYSTEM_RDD, SYSTEM_SOCKET_ID } from "./constants.js"; | import { ENTITE_BLURETTE, ENTITE_INCARNE, ENTITE_NONINCARNE, SYSTEM_RDD, SYSTEM_SOCKET_ID } from "./constants.js"; | ||||||
|  |  | ||||||
|  |  | ||||||
| /* -------------------------------------------- */ | /* -------------------------------------------- */ | ||||||
| /** | /** | ||||||
| @@ -98,7 +99,6 @@ export class RdDActor extends Actor { | |||||||
|    * @param {Object} options     (Unused) Additional options which customize the creation workflow. |    * @param {Object} options     (Unused) Additional options which customize the creation workflow. | ||||||
|    * |    * | ||||||
|    */ |    */ | ||||||
|  |  | ||||||
|   static async create(actorData, options) { |   static async create(actorData, options) { | ||||||
|     // Case of compendium global import |     // Case of compendium global import | ||||||
|     if (actorData instanceof Array) { |     if (actorData instanceof Array) { | ||||||
| @@ -134,13 +134,6 @@ export class RdDActor extends Actor { | |||||||
|     this.encTotal = 0; |     this.encTotal = 0; | ||||||
|     this.prixTotalEquipement = 0; |     this.prixTotalEquipement = 0; | ||||||
|  |  | ||||||
|     /* |  | ||||||
|     // Auto-resize token |  | ||||||
|     if (this.isToken) { |  | ||||||
|       let tokenSize = actorData.data.carac.taille.value/10; |  | ||||||
|       this.token.update({height: tokenSize, width: tokenSize } ); |  | ||||||
|     }*/ |  | ||||||
|  |  | ||||||
|     // Make separate methods for each Actor type (character, npc, etc.) to keep |     // Make separate methods for each Actor type (character, npc, etc.) to keep | ||||||
|     // things organized. |     // things organized. | ||||||
|     if (this.type === 'personnage') this._prepareCharacterData(this) |     if (this.type === 'personnage') this._prepareCharacterData(this) | ||||||
| @@ -245,7 +238,7 @@ export class RdDActor extends Actor { | |||||||
|   } |   } | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   getForce() { |   getForce() { | ||||||
|     if (this.isEntiteCauchemar()) { |     if (this.isEntite()) { | ||||||
|       return Misc.toInt(this.system.carac.reve?.value); |       return Misc.toInt(this.system.carac.reve?.value); | ||||||
|     } |     } | ||||||
|     return Misc.toInt(this.system.carac.force?.value); |     return Misc.toInt(this.system.carac.force?.value); | ||||||
| @@ -323,7 +316,7 @@ export class RdDActor extends Actor { | |||||||
|     return this.filterItemsData(it => it.type == type); |     return this.filterItemsData(it => it.type == type); | ||||||
|   } |   } | ||||||
|   filterItemsData(filter) { |   filterItemsData(filter) { | ||||||
|     return this.items.map( it => it).filter(filter) |     return this.items.map(it => it).filter(filter) | ||||||
|   } |   } | ||||||
|   filterItems(filter) { |   filterItems(filter) { | ||||||
|     return this.items.filter(it => filter(it)) |     return this.items.filter(it => filter(it)) | ||||||
| @@ -375,11 +368,11 @@ export class RdDActor extends Actor { | |||||||
|   getDraconicOuPossession() { |   getDraconicOuPossession() { | ||||||
|     const possessions = this.items.filter(it => it.type == 'competencecreature' && it.system.ispossession) |     const possessions = this.items.filter(it => it.type == 'competencecreature' && it.system.ispossession) | ||||||
|       .sort(Misc.descending(it => it.system.niveau)); |       .sort(Misc.descending(it => it.system.niveau)); | ||||||
|     if (possessions.length>0) { |     if (possessions.length > 0) { | ||||||
|       return duplicate(possessions[0]); |       return duplicate(possessions[0]); | ||||||
|     } |     } | ||||||
|     const draconics = this.getDraconicList().filter(it => it.system.niveau >= 0); |     const draconics = this.getDraconicList().filter(it => it.system.niveau >= 0); | ||||||
|     if (draconics.length> 0) { |     if (draconics.length > 0) { | ||||||
|       return duplicate(draconics[0]); |       return duplicate(draconics[0]); | ||||||
|     } |     } | ||||||
|     return { |     return { | ||||||
| @@ -616,7 +609,11 @@ export class RdDActor extends Actor { | |||||||
|       whisper: ChatUtility.getWhisperRecipientsAndGMs(this.name), |       whisper: ChatUtility.getWhisperRecipientsAndGMs(this.name), | ||||||
|       content: "Remise à neuf de " + this.name |       content: "Remise à neuf de " + this.name | ||||||
|     }; |     }; | ||||||
|     if (this.isEntiteCauchemar()) { |     const actorData = Misc.data(this); | ||||||
|  |     if (this.isEntite([ENTITE_NONINCARNE])) { | ||||||
|  |       return; | ||||||
|  |     } | ||||||
|  |     if (this.isEntite([ENTITE_INCARNE, ENTITE_BLURETTE])) { | ||||||
|       await this.santeIncDec("endurance", this.system.sante.endurance.max - this.system.sante.endurance.value); |       await this.santeIncDec("endurance", this.system.sante.endurance.max - this.system.sante.endurance.value); | ||||||
|     } |     } | ||||||
|     else { |     else { | ||||||
| @@ -831,7 +828,7 @@ export class RdDActor extends Actor { | |||||||
|   async resultCombatReveDeDragon(rollData) { |   async resultCombatReveDeDragon(rollData) { | ||||||
|     rollData.queues = []; |     rollData.queues = []; | ||||||
|     if (rollData.rolled.isEchec) { |     if (rollData.rolled.isEchec) { | ||||||
|       rollData.queues.push( await this.ajouterQueue()); |       rollData.queues.push(await this.ajouterQueue()); | ||||||
|     } |     } | ||||||
|     if (rollData.rolled.isETotal) { |     if (rollData.rolled.isETotal) { | ||||||
|       rollData.queues.push(await this.ajouterQueue()); |       rollData.queues.push(await this.ajouterQueue()); | ||||||
| @@ -981,7 +978,7 @@ export class RdDActor extends Actor { | |||||||
|       let nouveauNiveau = compValue ?? RdDItemCompetence.getNiveauBase(competence.system.categorie); |       let nouveauNiveau = compValue ?? RdDItemCompetence.getNiveauBase(competence.system.categorie); | ||||||
|       const tronc = RdDItemCompetence.getListTronc(competence.name).filter(it => { |       const tronc = RdDItemCompetence.getListTronc(competence.name).filter(it => { | ||||||
|         const comp = this.getCompetence(it); |         const comp = this.getCompetence(it); | ||||||
|         const niveauTr = competence? competence.system.niveau : 0; |         const niveauTr = competence ? competence.system.niveau : 0; | ||||||
|         return niveauTr < 0 && niveauTr < nouveauNiveau; |         return niveauTr < 0 && niveauTr < nouveauNiveau; | ||||||
|       }); |       }); | ||||||
|       if (tronc.length > 0) { |       if (tronc.length > 0) { | ||||||
| @@ -1310,13 +1307,13 @@ export class RdDActor extends Actor { | |||||||
|     } |     } | ||||||
|     return Math.min(0, this.getEncombrementMax() - Math.ceil(Number(this.getEncTotal()))); |     return Math.min(0, this.getEncombrementMax() - Math.ceil(Number(this.getEncTotal()))); | ||||||
|   } |   } | ||||||
|   getMessageSurEncombrement(){ |   getMessageSurEncombrement() { | ||||||
|     return this.computeMalusSurEncombrement() <0 ? "Sur-Encombrement!" : ""; |     return this.computeMalusSurEncombrement() < 0 ? "Sur-Encombrement!" : ""; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   getEncombrementMax() { |   getEncombrementMax() { | ||||||
|     switch (this.type){ |     switch (this.type) { | ||||||
|       case 'vehicule': |       case 'vehicule': | ||||||
|         return this.system.capacite_encombrement; |         return this.system.capacite_encombrement; | ||||||
|       case 'entite': |       case 'entite': | ||||||
| @@ -1342,7 +1339,7 @@ export class RdDActor extends Actor { | |||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   async computeEncombrementTotalEtMalusArmure() { |   async computeEncombrementTotalEtMalusArmure() { | ||||||
|     if ( !this.pack ) {  |     if (!this.pack) { | ||||||
|       await this.computeMalusArmure(); |       await this.computeMalusArmure(); | ||||||
|       return this.computeEncombrement(); |       return this.computeEncombrement(); | ||||||
|     } |     } | ||||||
| @@ -1620,7 +1617,7 @@ export class RdDActor extends Actor { | |||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   async setSonne(sonne = true) { |   async setSonne(sonne = true) { | ||||||
|     if (this.isEntiteCauchemar()) { |     if (this.isEntite()) { | ||||||
|       return; |       return; | ||||||
|     } |     } | ||||||
|     if (!game.combat && sonne) { |     if (!game.combat && sonne) { | ||||||
| @@ -1632,7 +1629,7 @@ export class RdDActor extends Actor { | |||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   getSConst() { |   getSConst() { | ||||||
|     if (this.isEntiteCauchemar()) { |     if (this.isEntite()) { | ||||||
|       return 0; |       return 0; | ||||||
|     } |     } | ||||||
|     return RdDCarac.calculSConst(this.system.carac.constitution.value) |     return RdDCarac.calculSConst(this.system.carac.constitution.value) | ||||||
| @@ -1747,7 +1744,7 @@ export class RdDActor extends Actor { | |||||||
|     result.newValue = Math.max(minValue, Math.min(compteur.value + inc, compteur.max)); |     result.newValue = Math.max(minValue, Math.min(compteur.value + inc, compteur.max)); | ||||||
|     //console.log("New value ", inc, minValue, result.newValue); |     //console.log("New value ", inc, minValue, result.newValue); | ||||||
|     let fatigue = 0; |     let fatigue = 0; | ||||||
|     if (name == "endurance" && !this.isEntiteCauchemar()) { |     if (name == "endurance" && !this.isEntite()) { | ||||||
|       if (result.newValue == 0 && inc < 0 && !isCritique) { // perte endurance et endurance devient 0 (sauf critique) -> -1 vie |       if (result.newValue == 0 && inc < 0 && !isCritique) { // perte endurance et endurance devient 0 (sauf critique) -> -1 vie | ||||||
|         sante.vie.value--; |         sante.vie.value--; | ||||||
|         result.perteVie = true; |         result.perteVie = true; | ||||||
| @@ -1784,7 +1781,7 @@ export class RdDActor extends Actor { | |||||||
|   } |   } | ||||||
|  |  | ||||||
|   isDead() { |   isDead() { | ||||||
|     return !this.isEntiteCauchemar() && this.system.sante.vie.value < -this.getSConst() |     return !this.isEntite() && this.system.sante.vie.value < -this.getSConst() | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
| @@ -1913,7 +1910,7 @@ export class RdDActor extends Actor { | |||||||
|   } |   } | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   async actionItem(item, onActionItem = async ()=>{}) { |   async actionItem(item, onActionItem = async () => { }) { | ||||||
|     if (!item.getActionPrincipale()) return; |     if (!item.getActionPrincipale()) return; | ||||||
|     switch (item.type) { |     switch (item.type) { | ||||||
|       case 'nourritureboisson': return await this.actionNourritureboisson(item, onActionItem); |       case 'nourritureboisson': return await this.actionNourritureboisson(item, onActionItem); | ||||||
| @@ -1921,7 +1918,7 @@ export class RdDActor extends Actor { | |||||||
|       case 'livre': return await this.actionLire(item); |       case 'livre': return await this.actionLire(item); | ||||||
|       case 'conteneur': return await item.sheet.render(true); |       case 'conteneur': return await item.sheet.render(true); | ||||||
|       case 'herbe': { |       case 'herbe': { | ||||||
|         if (item.isHerbeAPotion()){ |         if (item.isHerbeAPotion()) { | ||||||
|           return this.dialogFabriquerPotion(item); |           return this.dialogFabriquerPotion(item); | ||||||
|         } |         } | ||||||
|         return; |         return; | ||||||
| @@ -3289,10 +3286,10 @@ export class RdDActor extends Actor { | |||||||
|       if (res) { |       if (res) { | ||||||
|         let malus = Misc.toInt(res[3]) - 1; |         let malus = Misc.toInt(res[3]) - 1; | ||||||
|         let armure = Misc.toInt(res[2]); |         let armure = Misc.toInt(res[2]); | ||||||
|         if (armure+malus <= 0){ |         if (armure + malus <= 0) { | ||||||
|           itemData.system.protection = 0; |           itemData.system.protection = 0; | ||||||
|         } else { |         } else { | ||||||
|           itemData.system.protection = '' + (res[1]??'1') + 'd' + armure + malus; |           itemData.system.protection = '' + (res[1] ?? '1') + 'd' + armure + malus; | ||||||
|         } |         } | ||||||
|       } |       } | ||||||
|       else if (/\d+/.exec(itemData.system.protection)) { |       else if (/\d+/.exec(itemData.system.protection)) { | ||||||
| @@ -3325,7 +3322,7 @@ export class RdDActor extends Actor { | |||||||
|     let encaissement = await this.jetEncaissement(rollData); |     let encaissement = await this.jetEncaissement(rollData); | ||||||
|  |  | ||||||
|     this.ajouterBlessure(encaissement); // Will upate the result table |     this.ajouterBlessure(encaissement); // Will upate the result table | ||||||
|     const perteVie = this.isEntiteCauchemar() |     const perteVie = this.isEntite() | ||||||
|       ? { newValue: 0 } |       ? { newValue: 0 } | ||||||
|       : await this.santeIncDec("vie", - encaissement.vie); |       : 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, encaissement.critiques > 0); | ||||||
| @@ -3339,7 +3336,7 @@ export class RdDActor extends Actor { | |||||||
|       sonne: perteEndurance.sonne, |       sonne: perteEndurance.sonne, | ||||||
|       jetEndurance: perteEndurance.jetEndurance, |       jetEndurance: perteEndurance.jetEndurance, | ||||||
|       endurance: santeOrig.endurance.value - perteEndurance.newValue, |       endurance: santeOrig.endurance.value - perteEndurance.newValue, | ||||||
|       vie: this.isEntiteCauchemar() ? 0 : (santeOrig.vie.value - perteVie.newValue), |       vie: this.isEntite() ? 0 : (santeOrig.vie.value - perteVie.newValue), | ||||||
|       show: defenderRoll?.show ?? {} |       show: defenderRoll?.show ?? {} | ||||||
|     }); |     }); | ||||||
|  |  | ||||||
| @@ -3528,8 +3525,8 @@ export class RdDActor extends Actor { | |||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   async accorder(entite, when = 'avant-encaissement') { |   async accorder(entite, when = 'avant-encaissement') { | ||||||
|     if (when != game.settings.get(SYSTEM_RDD, "accorder-entite-cauchemar") |     if (when != game.settings.get(SYSTEM_RDD, "accorder-entite-cauchemar") | ||||||
|       || !entite.isEntiteCauchemar() |       || !entite.isEntite([ENTITE_INCARNE]) | ||||||
|       || entite.isEntiteCauchemarAccordee(this)) { |       || entite.isEntiteAccordee(this)) { | ||||||
|       return true; |       return true; | ||||||
|     } |     } | ||||||
|     const tplData = this.system; |     const tplData = this.system; | ||||||
| @@ -3553,29 +3550,29 @@ export class RdDActor extends Actor { | |||||||
|   } |   } | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   isEntiteCauchemar() { |   isEntite(typeentite = []) { | ||||||
|     return this.type == 'entite'; |     return this.type == 'entite' && (typeentite.length == 0 || typeentite.includes(this.system.typeentite)); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   isEntiteCauchemarAccordee(attaquant) { |   isEntiteAccordee(attaquant) { | ||||||
|     if (!this.isEntiteCauchemar()) { return true; } |     if (!this.isEntite([ENTITE_INCARNE])) { return true; } | ||||||
|     let resonnance = this.system.sante.resonnance; |     let resonnance = this.system.sante.resonnance; | ||||||
|     return (resonnance.actors.find(it => it == attaquant._id)); |     return (resonnance.actors.find(it => it == attaquant.id)); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   async setEntiteReveAccordee(attaquant) { |   async setEntiteReveAccordee(attaquant) { | ||||||
|     if (!this.isEntiteCauchemar()) { |     if (!this.isEntite([ENTITE_INCARNE])) { | ||||||
|       ui.notifications.error("Impossible de s'accorder à " + this.name + ": ce n'est pas une entite de cauchemer/rêve"); |       ui.notifications.error("Impossible de s'accorder à " + this.name + ": ce n'est pas une entite de cauchemer/rêve"); | ||||||
|       return; |       return; | ||||||
|     } |     } | ||||||
|     let resonnance = duplicate(this.system.sante.resonnance); |     let resonnance = duplicate(this.system.sante.resonnance); | ||||||
|     if (resonnance.actors.find(it => it == attaquant._id)) { |     if (resonnance.actors.find(it => it == attaquant.id)) { | ||||||
|       // déjà accordé |       // déjà accordé | ||||||
|       return; |       return; | ||||||
|     } |     } | ||||||
|     resonnance.actors.push(attaquant._id); |     resonnance.actors.push(attaquant.id); | ||||||
|     await this.update({ "system.sante.resonnance": resonnance }); |     await this.update({ "system.sante.resonnance": resonnance }); | ||||||
|     return; |     return; | ||||||
|   } |   } | ||||||
| @@ -3602,7 +3599,7 @@ export class RdDActor extends Actor { | |||||||
|       10: Math.floor(fortuneTotale / 10) % 10, // bronze |       10: Math.floor(fortuneTotale / 10) % 10, // bronze | ||||||
|       1: fortuneTotale % 10 // étain |       1: fortuneTotale % 10 // étain | ||||||
|     } |     } | ||||||
|     console.log('RdDActor.optimizeArgent', fortuneTotale, 'nouvelleFortune', nouvelleFortune, 'monnaie_par_valeur',parValeur); |     console.log('RdDActor.optimizeArgent', fortuneTotale, 'nouvelleFortune', nouvelleFortune, 'monnaie_par_valeur', parValeur); | ||||||
|     let updates = []; |     let updates = []; | ||||||
|     for (const [valeur, nombre] of Object.entries(nouvelleFortune)) { |     for (const [valeur, nombre] of Object.entries(nouvelleFortune)) { | ||||||
|       updates.push({ _id: parValeur[valeur].id, 'system.quantite': nombre }); |       updates.push({ _id: parValeur[valeur].id, 'system.quantite': nombre }); | ||||||
| @@ -3671,7 +3668,8 @@ export class RdDActor extends Actor { | |||||||
|       RdDActor.remoteActorCall({ |       RdDActor.remoteActorCall({ | ||||||
|         userId: Misc.connectedGMOrUser(), |         userId: Misc.connectedGMOrUser(), | ||||||
|         actorId: this.id, |         actorId: this.id, | ||||||
|         method: 'ajouterDeniers', args: [gain, fromActorId] }); |         method: 'ajouterDeniers', args: [gain, fromActorId] | ||||||
|  |       }); | ||||||
|     } |     } | ||||||
|     else { |     else { | ||||||
|       const fromActor = game.actors.get(fromActorId) |       const fromActor = game.actors.get(fromActorId) | ||||||
| @@ -3706,7 +3704,8 @@ export class RdDActor extends Actor { | |||||||
|       RdDActor.remoteActorCall({ |       RdDActor.remoteActorCall({ | ||||||
|         actorId: achat.vendeurId ?? achat.acheteurId, |         actorId: achat.vendeurId ?? achat.acheteurId, | ||||||
|         method: 'achatVente', |         method: 'achatVente', | ||||||
|         args: [achat] }, |         args: [achat] | ||||||
|  |       }, | ||||||
|       ); |       ); | ||||||
|       return; |       return; | ||||||
|     } |     } | ||||||
| @@ -4078,7 +4077,7 @@ export class RdDActor extends Actor { | |||||||
|   } |   } | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   async consommerPotion(potion, onActionItem = async () => {}) { |   async consommerPotion(potion, onActionItem = async () => { }) { | ||||||
|     const potionData = potion |     const potionData = potion | ||||||
|  |  | ||||||
|     if (potionData.system.categorie.includes('Soin')) { |     if (potionData.system.categorie.includes('Soin')) { | ||||||
| @@ -4125,7 +4124,7 @@ export class RdDActor extends Actor { | |||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   async setStatusEffect(label, status, updates = {}) { |   async setStatusEffect(label, status, updates = {}) { | ||||||
|     if (this.isEntiteCauchemar() || this.type == 'vehicule') { |     if (this.isEntite() || this.type == 'vehicule') { | ||||||
|       return; |       return; | ||||||
|     } |     } | ||||||
|     console.log("setStatusEffect", label, status, updates) |     console.log("setStatusEffect", label, status, updates) | ||||||
|   | |||||||
| @@ -3,3 +3,7 @@ export const SYSTEM_SOCKET_ID = 'system.foundryvtt-reve-de-dragon'; | |||||||
|  |  | ||||||
| export const HIDE_DICE = 'hide'; | export const HIDE_DICE = 'hide'; | ||||||
| export const SHOW_DICE = 'show'; | export const SHOW_DICE = 'show'; | ||||||
|  |  | ||||||
|  | export const ENTITE_INCARNE = 'incarne'; | ||||||
|  | export const ENTITE_NONINCARNE = 'nonincarne'; | ||||||
|  | export const ENTITE_BLURETTE = 'blurette'; | ||||||
|   | |||||||
| @@ -55,7 +55,7 @@ export class DialogItemAchat extends Dialog { | |||||||
|  |  | ||||||
|   static prepareVenteData(buttonAcheter, vendeurId, vendeur, acheteur) { |   static prepareVenteData(buttonAcheter, vendeurId, vendeur, acheteur) { | ||||||
|     const jsondata = buttonAcheter.attributes['data-jsondata']?.value; |     const jsondata = buttonAcheter.attributes['data-jsondata']?.value; | ||||||
|     const prixLot = buttonAcheter.attributes['data-prixLot']?.value ?? 0; |     const prixLot = parseInt(buttonAcheter.attributes['data-prixLot']?.value ?? 0); | ||||||
|     let venteData = { |     let venteData = { | ||||||
|       item: JSON.parse(jsondata), |       item: JSON.parse(jsondata), | ||||||
|       vendeurId: vendeurId, |       vendeurId: vendeurId, | ||||||
|   | |||||||
| @@ -1,5 +1,5 @@ | |||||||
| import { ChatUtility } from "./chat-utility.js"; | import { ChatUtility } from "./chat-utility.js"; | ||||||
| import { HIDE_DICE, SYSTEM_RDD, SYSTEM_SOCKET_ID } from "./constants.js"; | import { ENTITE_INCARNE, ENTITE_NONINCARNE, HIDE_DICE, SYSTEM_RDD, SYSTEM_SOCKET_ID } from "./constants.js"; | ||||||
| import { Grammar } from "./grammar.js"; | import { Grammar } from "./grammar.js"; | ||||||
| import { RdDItemArme } from "./item-arme.js"; | import { RdDItemArme } from "./item-arme.js"; | ||||||
| import { RdDItemCompetence } from "./item-competence.js"; | import { RdDItemCompetence } from "./item-competence.js"; | ||||||
| @@ -320,7 +320,7 @@ export class RdDCombatManager extends Combat { | |||||||
|       initOffset = 10; |       initOffset = 10; | ||||||
|       caracForInit = combatant.actor.getReveActuel(); |       caracForInit = combatant.actor.getReveActuel(); | ||||||
|       initInfo = "Possession" |       initInfo = "Possession" | ||||||
|     } else if (action.name == 'autre') { |     } else if (action.action == 'autre') { | ||||||
|       initOffset = 2; |       initOffset = 2; | ||||||
|       initInfo = "Autre Action" |       initInfo = "Autre Action" | ||||||
|     } else if (action.action == 'haut-reve') { |     } else if (action.action == 'haut-reve') { | ||||||
| @@ -455,9 +455,9 @@ export class RdDCombat { | |||||||
|         : "Vous devez choisir une cible à attaquer!"); |         : "Vous devez choisir une cible à attaquer!"); | ||||||
|     } |     } | ||||||
|     else { |     else { | ||||||
|       const defender = target?.actor |       const defender = target?.actor; | ||||||
|       const defenderTokenId = target?.id |       const defenderTokenId = target?.id; | ||||||
|       if ( defender.type == 'entite' && defender.system.definition.typeentite == 'nonincarne') { |       if ( defender.type == 'entite' && defender.system.definition.typeentite == ENTITE_NONINCARNE) { | ||||||
|         ui.notifications.warn("Vous ne pouvez pas cibler une entité non incarnée !!!!"); |         ui.notifications.warn("Vous ne pouvez pas cibler une entité non incarnée !!!!"); | ||||||
|       } else { |       } else { | ||||||
|         return this.create(attacker, defender, defenderTokenId, target) |         return this.create(attacker, defender, defenderTokenId, target) | ||||||
| @@ -799,7 +799,7 @@ export class RdDCombat { | |||||||
|   async _onAttaqueNormale(attackerRoll) { |   async _onAttaqueNormale(attackerRoll) { | ||||||
|     console.log("RdDCombat.onAttaqueNormale >>>", attackerRoll); |     console.log("RdDCombat.onAttaqueNormale >>>", attackerRoll); | ||||||
|  |  | ||||||
|     attackerRoll.dmg = RdDBonus.dmg(attackerRoll, this.attacker.getBonusDegat(), this.defender.isEntiteCauchemar()); |     attackerRoll.dmg = RdDBonus.dmg(attackerRoll, this.attacker.getBonusDegat(), this.defender.isEntite()); | ||||||
|     let defenderRoll = { attackerRoll: attackerRoll, passeArme: attackerRoll.passeArme, show: {} } |     let defenderRoll = { attackerRoll: attackerRoll, passeArme: attackerRoll.passeArme, show: {} } | ||||||
|     attackerRoll.show = { |     attackerRoll.show = { | ||||||
|       cible: this.target ? this.defender.system.name : 'la cible', |       cible: this.target ? this.defender.system.name : 'la cible', | ||||||
| @@ -1248,8 +1248,8 @@ export class RdDCombat { | |||||||
|   async accorderEntite(when = 'avant-encaissement') { |   async accorderEntite(when = 'avant-encaissement') { | ||||||
|     if (when != game.settings.get(SYSTEM_RDD, "accorder-entite-cauchemar") |     if (when != game.settings.get(SYSTEM_RDD, "accorder-entite-cauchemar") | ||||||
|       || this.defender == undefined |       || this.defender == undefined | ||||||
|       || !this.defender.isEntiteCauchemar() |       || !this.defender.isEntite([ENTITE_INCARNE]) | ||||||
|       || this.defender.isEntiteCauchemarAccordee(this.attacker)) { |       || this.defender.isEntiteAccordee(this.attacker)) { | ||||||
|       return true; |       return true; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,19 +1,29 @@ | |||||||
|  | import { RdDActor } from "./actor.js"; | ||||||
| import { Misc } from "./misc.js"; | import { Misc } from "./misc.js"; | ||||||
| import { RdDDice } from "./rdd-dice.js"; | import { RdDDice } from "./rdd-dice.js"; | ||||||
|  |  | ||||||
| const words = [ 'pore', 'pre', 'flor', 'lane', 'turlu', 'pin', 'a', 'alph', 'i', 'onse', 'iane', 'ane', 'zach', 'arri', 'ba', 'bo', 'bi',  | const words = ['pore', 'pre', 'flor', 'lane', 'turlu', 'pin', 'a', 'alph', 'i', 'onse', 'iane', 'ane', 'zach', 'arri', 'ba', 'bo', 'bi', | ||||||
|               'alta', 'par', 'pir', 'zor', 'zir', 'de', 'pol', 'tran', 'no', 'la', 'al' , 'pul', 'one', 'ner', 'nur', 'mac', 'mery', |   'alta', 'par', 'pir', 'zor', 'zir', 'de', 'pol', 'tran', 'no', 'la', 'al', 'pul', 'one', 'ner', 'nur', 'mac', 'mery', | ||||||
|   'cat', 'do', 'di', 'der', 'er', 'el', 'far', 'fer', 'go', 'guer', 'hot', 'jor', 'jar', 'ji', 'kri', 'ket', 'lor', 'hur', |   'cat', 'do', 'di', 'der', 'er', 'el', 'far', 'fer', 'go', 'guer', 'hot', 'jor', 'jar', 'ji', 'kri', 'ket', 'lor', 'hur', | ||||||
|   'lar', 'lir', 'lu', 'pot', 'pro', 'pra', 'pit', 'qua', 'qui', 're', 'ral', 'sal', 'sen', 'ted', 'to', 'ta', 'lars', 'ver', |   'lar', 'lir', 'lu', 'pot', 'pro', 'pra', 'pit', 'qua', 'qui', 're', 'ral', 'sal', 'sen', 'ted', 'to', 'ta', 'lars', 'ver', | ||||||
|               'vin', 'ov', 'wal', 'ry', 'ly', '' ]; |   'vin', 'ov', 'wal', 'ry', 'ly', '']; | ||||||
|  |  | ||||||
| /* -------------------------------------------- */ | /* -------------------------------------------- */ | ||||||
| export class RdDNameGen { | export class RdDNameGen { | ||||||
|  |  | ||||||
|   static async getName( msg, params ) { |   static async getName(msg, params) { | ||||||
|     let name = Misc.upperFirst( await RdDDice.rollOneOf(words) + await RdDDice.rollOneOf(words) ) |     const html = await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-command-nom.html`, { | ||||||
|     //console.log(name); |       nom: Misc.upperFirst(await RdDDice.rollOneOf(words) + await RdDDice.rollOneOf(words)) | ||||||
|     ChatMessage.create( { content: `Nom : ${name}`, whisper: ChatMessage.getWhisperRecipients("GM") } ); |     }); | ||||||
|  |     ChatMessage.create({ content: html, whisper: ChatMessage.getWhisperRecipients("GM") }); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   static async onCreerActeur(event) { | ||||||
|  |     const button = event.currentTarget; | ||||||
|  |     await RdDActor.create({ | ||||||
|  |         name: button.attributes['data-nom'].value, | ||||||
|  |         type: button.attributes['data-type'].value | ||||||
|  |       }, | ||||||
|  |       {renderSheet: true}); | ||||||
|  |   } | ||||||
| } | } | ||||||
| @@ -1,3 +1,5 @@ | |||||||
|  | import { ENTITE_BLURETTE, ENTITE_INCARNE, ENTITE_NONINCARNE } from "./constants"; | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * Extend the base Dialog entity by defining a custom window to perform roll. |  * Extend the base Dialog entity by defining a custom window to perform roll. | ||||||
|  * @extends {Dialog} |  * @extends {Dialog} | ||||||
| @@ -7,15 +9,19 @@ export class RdDEncaisser extends Dialog { | |||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   constructor(html, actor) { |   constructor(html, actor) { | ||||||
|     // Common conf |     // Common conf | ||||||
|     const buttonsCreatures = { |     let buttons = {}; | ||||||
|  |     if (!actor.isEntite()){ | ||||||
|  |       buttons = { | ||||||
|         "mortel": { label: "Mortel", callback: html => this.performEncaisser("mortel") }, |         "mortel": { label: "Mortel", callback: html => this.performEncaisser("mortel") }, | ||||||
|         "non-mortel": { label: "Non-mortel", callback: html => this.performEncaisser("non-mortel") }, |         "non-mortel": { label: "Non-mortel", callback: html => this.performEncaisser("non-mortel") }, | ||||||
|         "sonne": { label: "Sonné", callback: html => this.actor.setSonne() }, |         "sonne": { label: "Sonné", callback: html => this.actor.setSonne() }, | ||||||
|       }; |       }; | ||||||
|     const buttonsEntitesCauchemar = { |     } | ||||||
|  |     else if (actor.isEntite([ENTITE_BLURETTE, ENTITE_INCARNE])){ | ||||||
|  |       buttons = { | ||||||
|         "cauchemar": { label: "cauchemar", callback: html => this.performEncaisser("cauchemar") } |         "cauchemar": { label: "cauchemar", callback: html => this.performEncaisser("cauchemar") } | ||||||
|     }; |       } | ||||||
|     const buttons = actor.isEntiteCauchemar() ? buttonsEntitesCauchemar : buttonsCreatures; |     } | ||||||
|  |  | ||||||
|     let dialogConf = { |     let dialogConf = { | ||||||
|       title: "Jet d'Encaissement", |       title: "Jet d'Encaissement", | ||||||
|   | |||||||
| @@ -11,6 +11,7 @@ import { RdDDice } from "./rdd-dice.js"; | |||||||
| import { RdDItem } from "./item.js"; | import { RdDItem } from "./item.js"; | ||||||
| import { Monnaie } from "./item-monnaie.js"; | import { Monnaie } from "./item-monnaie.js"; | ||||||
| import { RdDPossession } from "./rdd-possession.js"; | import { RdDPossession } from "./rdd-possession.js"; | ||||||
|  | import { RdDNameGen } from "./rdd-namegen.js"; | ||||||
|  |  | ||||||
| /* -------------------------------------------- */ | /* -------------------------------------------- */ | ||||||
| // This table starts at 0 -> niveau -10 | // This table starts at 0 -> niveau -10 | ||||||
| @@ -703,6 +704,7 @@ export class RdDUtility { | |||||||
|  |  | ||||||
|     // gestion bouton tchat Acheter |     // gestion bouton tchat Acheter | ||||||
|     html.on("click", '.button-acheter', event => DialogItemAchat.onButtonAcheter(event)); |     html.on("click", '.button-acheter', event => DialogItemAchat.onButtonAcheter(event)); | ||||||
|  |     html.on("click", '.button-creer-acteur', event => RdDNameGen.onCreerActeur(event)); | ||||||
|  |  | ||||||
|     // Gestion du bouton payer |     // Gestion du bouton payer | ||||||
|     html.on("click", '.payer-button', event => { |     html.on("click", '.payer-button', event => { | ||||||
|   | |||||||
| @@ -32,7 +32,7 @@ | |||||||
|   "url": "https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/", |   "url": "https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/", | ||||||
|   "license": "LICENSE.txt", |   "license": "LICENSE.txt", | ||||||
|   "flags": {}, |   "flags": {}, | ||||||
|   "version": "10.0.5", |   "version": "10.0.6", | ||||||
|   "scripts": [], |   "scripts": [], | ||||||
|   "esmodules": [ |   "esmodules": [ | ||||||
|     "module/rdd-main.js" |     "module/rdd-main.js" | ||||||
| @@ -500,7 +500,7 @@ | |||||||
|   "relationships": {}, |   "relationships": {}, | ||||||
|   "socket": true, |   "socket": true, | ||||||
|   "manifest": "https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/raw/v10/system.json", |   "manifest": "https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/raw/v10/system.json", | ||||||
|   "download": "https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/archive/foundryvtt-reve-de-dragon-10.0.5.zip", |   "download": "https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/archive/foundryvtt-reve-de-dragon-10.0.6.zip", | ||||||
|   "protected": false, |   "protected": false, | ||||||
|   "gridDistance": 1, |   "gridDistance": 1, | ||||||
|   "gridUnits": "m", |   "gridUnits": "m", | ||||||
|   | |||||||
| @@ -65,6 +65,7 @@ | |||||||
|                 {{#select data.definition.typeentite}} |                 {{#select data.definition.typeentite}} | ||||||
|                 <option value="incarne">Incarnée</option> |                 <option value="incarne">Incarnée</option> | ||||||
|                 <option value="nonincarne">Non Incarnée</option> |                 <option value="nonincarne">Non Incarnée</option> | ||||||
|  |                 <option value="blurette">Blurete</option> | ||||||
|                 {{/select}} |                 {{/select}} | ||||||
|               </select> |               </select> | ||||||
|             </li> |             </li> | ||||||
|   | |||||||
							
								
								
									
										16
									
								
								templates/chat-command-nom.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								templates/chat-command-nom.html
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,16 @@ | |||||||
|  |  | ||||||
|  | <h4>Proposition de nom: {{nom}}</h4> | ||||||
|  | <span class="chat-card-button-area"> | ||||||
|  |   <a class="button-creer-acteur chat-card-button" | ||||||
|  |     data-nom='{{nom}}' | ||||||
|  |     data-type='personnage' | ||||||
|  |     > | ||||||
|  |   Créer un Personnage</a> | ||||||
|  | </span> | ||||||
|  | <span class="chat-card-button-area"> | ||||||
|  |   <a class="button-creer-acteur chat-card-button" | ||||||
|  |     data-nom='{{nom}}' | ||||||
|  |     data-type='creature'> | ||||||
|  |   Créer une créature</a> | ||||||
|  | </span> | ||||||
|  |  | ||||||
		Reference in New Issue
	
	Block a user