Nombreux fixes
* Utilisation de EmbeddedDocuments * utiliser data seulement dans le chemin d'update * utiliser class au lieu de id dans le html * si possible, update de la valuer au lieu d'un duplicate du noeud
This commit is contained in:
@@ -31,18 +31,16 @@ export class RdDActorCreatureSheet extends RdDActorSheet {
|
||||
let sheetData = super.getData();
|
||||
console.log("Creature : ", sheetData);
|
||||
|
||||
sheetData.itemsByType = Misc.classify(sheetData.items, item => item.type);
|
||||
sheetData.itemsByType = Misc.classify(sheetData.items);
|
||||
sheetData.calc = {
|
||||
caracTotal: RdDCarac.computeTotal(sheetData.data.data.carac),
|
||||
blessures: {
|
||||
resume: sheetData.actor.computeResumeBlessure(sheetData.data.data.blessures)
|
||||
}
|
||||
resumeBlessures: sheetData.actor.computeResumeBlessure(sheetData.data.data.blessures),
|
||||
}
|
||||
// Compute current carac sum
|
||||
sheetData.data.carac.taille.isTaille = true; // To avoid button link;
|
||||
sheetData.data.data.carac.taille.isTaille = true; // To avoid button link;
|
||||
|
||||
|
||||
sheetData.data.competencecreature = sheetData.itemsByType["competencecreature"];
|
||||
sheetData.data.data.competencecreature = sheetData.itemsByType["competencecreature"];
|
||||
|
||||
this.actor.computeEncombrementTotalEtMalusArmure();
|
||||
RdDUtility.filterItemsPerTypeForSheet(sheetData);
|
||||
|
||||
@@ -46,14 +46,14 @@ export class RdDActorEntiteSheet extends ActorSheet {
|
||||
// Update Inventory Item
|
||||
html.find('.item-edit').click(ev => {
|
||||
const li = $(ev.currentTarget).parents(".item");
|
||||
const item = this.actor.getOwnedItem(li.data("itemId"));
|
||||
const item = this.actor.items.get(li.data("itemId"));
|
||||
item.sheet.render(true);
|
||||
});
|
||||
|
||||
// Delete Inventory Item
|
||||
html.find('.item-delete').click(ev => {
|
||||
const li = $(ev.currentTarget).parents(".item");
|
||||
this.actor.deleteOwnedItem(li.data("itemId"));
|
||||
this.actor.deleteEmbeddedDocuments('Item', [li.data("itemId")]);
|
||||
li.slideUp(200, () => this.render(false));
|
||||
});
|
||||
|
||||
@@ -83,16 +83,16 @@ export class RdDActorEntiteSheet extends ActorSheet {
|
||||
this.actor.rollCompetence( compName );
|
||||
});
|
||||
|
||||
html.find('#endurance-plus').click((event) => {
|
||||
html.find('.endurance-plus').click((event) => {
|
||||
this.actor.santeIncDec("endurance", 1);
|
||||
this.render(true);
|
||||
});
|
||||
html.find('#endurance-moins').click((event) => {
|
||||
html.find('.endurance-moins').click((event) => {
|
||||
this.actor.santeIncDec("endurance", -1);
|
||||
this.render(true);
|
||||
});
|
||||
|
||||
html.find('#encaisser-direct').click(ev => {
|
||||
html.find('.encaisser-direct').click(ev => {
|
||||
this.actor.encaisser();
|
||||
});
|
||||
|
||||
|
||||
@@ -37,7 +37,7 @@ export class RdDActorSheet extends ActorSheet {
|
||||
let sheetData = await super.getData();
|
||||
|
||||
sheetData.options = this.options;
|
||||
sheetData.itemsByType = Misc.classify(sheetData.items, item => item.type);
|
||||
sheetData.itemsByType = Misc.classify(sheetData.items);
|
||||
sheetData.options.isGM = game.user.isGM;
|
||||
|
||||
const carac = sheetData.data.data.carac;
|
||||
@@ -56,7 +56,7 @@ export class RdDActorSheet extends ActorSheet {
|
||||
sheetData.calc = {
|
||||
comptageArchetype: RdDItemCompetence.computeResumeArchetype(competences),
|
||||
competenceXPTotal: RdDItemCompetence.computeTotalXP(competences),
|
||||
caracTotal: RdDCarac.computeTotal(carac),
|
||||
caracTotal: RdDCarac.computeTotal(carac, sheetData.data.data.beaute),
|
||||
// Mise à jour de l'encombrement total et du prix de l'équipement
|
||||
encTotal: await sheetData.actor.computeEncombrementTotalEtMalusArmure(),
|
||||
prixTotalEquipement: await sheetData.actor.computePrixTotalEquipement(),
|
||||
@@ -73,7 +73,7 @@ export class RdDActorSheet extends ActorSheet {
|
||||
RdDItemCompetence.setLevelUp(competences);
|
||||
RdDCarac.setLevelUp(carac);
|
||||
|
||||
sheetData.armes = sheetData.itemsByType.arme;
|
||||
sheetData.armes = duplicate(sheetData.itemsByType.arme);
|
||||
RdDItemArme.computeNiveauArmes(sheetData.armes, competences);
|
||||
RdDItemArme.ajoutCorpsACorps(sheetData.armes, competences, carac);
|
||||
sheetData.esquive = RdDItemCompetence.getEsquive(competences);
|
||||
@@ -124,21 +124,21 @@ export class RdDActorSheet extends ActorSheet {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async createEmptyTache() {
|
||||
await this.actor.createOwnedItem({ name: 'Nouvelle tache', type: 'tache' }, { renderSheet: true });
|
||||
await this.actor.createEmbeddedDocuments('Item', [{ name: 'Nouvelle tache', type: 'tache' }], { renderSheet: true });
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async creerObjet() {
|
||||
let itemType = $("#creer-equipement").val();
|
||||
await this.actor.createOwnedItem({ name: 'Nouveau ' + itemType, type: itemType }, { renderSheet: true });
|
||||
await this.actor.createEmbeddedDocuments('Item', [{ name: `Nouveau ${itemType}`, type: itemType }], { renderSheet: true });
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async selectObjetType() {
|
||||
let itemType = ["objet", "arme", "armure", "conteneur", "herbe", "ingredient", "livre", "potion", "munition", "monnaie"];
|
||||
let options = '<span class="competence-label">Selectionnez le type d\'équipement</span><select id="creer-equipement">';
|
||||
let options = `<span class="competence-label">Selectionnez le type d'équipement</span><select id="creer-equipement">`;
|
||||
for (let typeName of itemType) {
|
||||
options += '<option value="' + typeName + '">' + typeName + '</option>'
|
||||
options += `<option value="${typeName}"> ${typeName}</option>`
|
||||
}
|
||||
options += '</select>';
|
||||
let d = new Dialog({
|
||||
@@ -158,11 +158,12 @@ export class RdDActorSheet extends ActorSheet {
|
||||
/* -------------------------------------------- */
|
||||
/** @override */
|
||||
activateListeners(html) {
|
||||
|
||||
super.activateListeners(html);
|
||||
|
||||
HtmlUtility._showControlWhen($(".gm-only"), game.user.isGM);
|
||||
|
||||
html.find('#show-hide-competences').click((event) => {
|
||||
html.find('.show-hide-competences').click((event) => {
|
||||
this.options.showCompNiveauBase = !this.options.showCompNiveauBase;
|
||||
this.render(true);
|
||||
});
|
||||
@@ -192,7 +193,7 @@ export class RdDActorSheet extends ActorSheet {
|
||||
RdDUtility.confirmerSuppressionSubacteur(this, li);
|
||||
});
|
||||
|
||||
html.find('#encaisser-direct').click(ev => {
|
||||
html.find('.encaisser-direct').click(ev => {
|
||||
this.actor.encaisser();
|
||||
});
|
||||
|
||||
@@ -248,15 +249,15 @@ export class RdDActorSheet extends ActorSheet {
|
||||
this.actor.rollCarac(caracName.toLowerCase());
|
||||
});
|
||||
|
||||
html.find('#chance-actuelle').click((event) => {
|
||||
html.find('.chance-actuelle').click((event) => {
|
||||
this.actor.rollCarac('chance-actuelle');
|
||||
});
|
||||
|
||||
html.find('#chance-appel').click((event) => {
|
||||
html.find('.chance-appel').click((event) => {
|
||||
this.actor.rollAppelChance();
|
||||
});
|
||||
|
||||
html.find('#jet-astrologie').click((event) => {
|
||||
html.find('.jet-astrologie').click((event) => {
|
||||
this.actor.astrologieNombresAstraux();
|
||||
});
|
||||
|
||||
@@ -337,45 +338,45 @@ export class RdDActorSheet extends ActorSheet {
|
||||
}
|
||||
});
|
||||
// Display TMR, visuualisation
|
||||
html.find('#visu-tmr').click((event) => {
|
||||
html.find('.visu-tmr').click((event) => {
|
||||
this.actor.displayTMR("visu");
|
||||
});
|
||||
|
||||
// Display TMR, normal
|
||||
html.find('#monte-tmr').click((event) => {
|
||||
html.find('.monte-tmr').click((event) => {
|
||||
this.actor.displayTMR("normal");
|
||||
});
|
||||
|
||||
// Display TMR, fast
|
||||
html.find('#monte-tmr-rapide').click((event) => {
|
||||
html.find('.monte-tmr-rapide').click((event) => {
|
||||
this.actor.displayTMR("rapide");
|
||||
});
|
||||
|
||||
html.find('#dormir-une-heure').click((event) => {
|
||||
html.find('.dormir-une-heure').click((event) => {
|
||||
this.actor.dormir(1);
|
||||
});
|
||||
html.find('#dormir-chateau-dormant').click((event) => {
|
||||
html.find('.dormir-chateau-dormant').click((event) => {
|
||||
this.actor.dormirChateauDormant();
|
||||
});
|
||||
html.find('#enlever-tous-effets').click((event) => {
|
||||
html.find('.enlever-tous-effets').click((event) => {
|
||||
this.actor.enleverTousLesEffets();
|
||||
});
|
||||
// Display info about queue
|
||||
html.find('.queuesouffle-label a').click((event) => {
|
||||
let myID = event.currentTarget.attributes['data-item-id'].value;
|
||||
const item = this.actor.getOwnedItem(myID);
|
||||
const item = this.actor.items.get(myID);
|
||||
item.sheet.render(true);
|
||||
});
|
||||
// Info sort
|
||||
html.find('.sort-label a').click((event) => {
|
||||
let myID = event.currentTarget.attributes['data-id'].value;
|
||||
const item = this.actor.getOwnedItem(myID);
|
||||
const item = this.actor.items.get(myID);
|
||||
item.sheet.render(true);
|
||||
});
|
||||
// Info sort
|
||||
html.find('.case-label a').click((event) => {
|
||||
let myID = event.currentTarget.attributes['data-id'].value;
|
||||
const item = this.actor.getOwnedItem(myID);
|
||||
const item = this.actor.items.get(myID);
|
||||
item.sheet.render(true);
|
||||
});
|
||||
|
||||
@@ -390,12 +391,10 @@ export class RdDActorSheet extends ActorSheet {
|
||||
// On carac change
|
||||
html.find('.carac-value').change((event) => {
|
||||
let caracName = event.currentTarget.name.replace(".value", "").replace("data.carac.", "");
|
||||
//console.log("Value changed :", event, caracName);
|
||||
this.actor.updateCarac(caracName, parseInt(event.target.value));
|
||||
});
|
||||
html.find('.carac-xp').change((event) => {
|
||||
let caracName = event.currentTarget.name.replace(".xp", "").replace("data.carac.", "");
|
||||
//console.log("Value changed :", event, caracName);
|
||||
this.actor.updateCaracXP(caracName, parseInt(event.target.value));
|
||||
});
|
||||
// On competence change
|
||||
@@ -426,64 +425,61 @@ export class RdDActorSheet extends ActorSheet {
|
||||
this.options.editCaracComp = !this.options.editCaracComp;
|
||||
this.render(true);
|
||||
});
|
||||
html.find('#show-hide-archetype').click((event) => {
|
||||
html.find('.show-hide-archetype').click((event) => {
|
||||
this.options.montrerArchetype = !this.options.montrerArchetype;
|
||||
this.render(true);
|
||||
});
|
||||
|
||||
// On pts de reve change
|
||||
html.find('.pointsreve-value').change((event) => {
|
||||
let reveValue = event.currentTarget.value;
|
||||
let reve = duplicate(this.actor.data.data.reve.reve);
|
||||
reve.value = reveValue;
|
||||
this.actor.update({ "data.reve.reve": reve });
|
||||
this.actor.update({ "data.reve.reve.value": parseInt(event.currentTarget.value) });
|
||||
});
|
||||
|
||||
// On seuil de reve change
|
||||
html.find('.seuil-reve-value').change((event) => {
|
||||
console.log("seuil-reve-value", event.currentTarget)
|
||||
this.actor.setPointsDeSeuil(event.currentTarget.value);
|
||||
this.actor.setPointsDeSeuil(parseInt(event.currentTarget.value));
|
||||
});
|
||||
|
||||
html.find('#attribut-protection-edit').change((event) => {
|
||||
this.actor.updateProtectionValue(event.currentTarget.attributes.name.value, parseInt(event.target.value));
|
||||
html.find('.attribut-protection-edit').change((event) => {
|
||||
this.actor.updateAttribut(event.currentTarget.attributes.name.value, parseInt(event.target.value));
|
||||
});
|
||||
|
||||
// On stress change
|
||||
html.find('.compteur-edit').change((event) => {
|
||||
let fieldName = event.currentTarget.attributes.name.value;
|
||||
this.actor.updateCompteurValue(fieldName, parseInt(event.target.value));
|
||||
this.actor.updateCompteur(fieldName, parseInt(event.target.value));
|
||||
});
|
||||
|
||||
html.find('#ethylisme').change((event) => {
|
||||
html.find('.ethylisme').change((event) => {
|
||||
this.actor.setEthylisme(parseInt(event.target.value));
|
||||
});
|
||||
html.find('#stress-test').click((event) => {
|
||||
html.find('.stress-test').click((event) => {
|
||||
this.actor.transformerStress();
|
||||
this.render(true);
|
||||
});
|
||||
html.find('#moral-malheureux').click((event) => {
|
||||
html.find('.moral-malheureux').click((event) => {
|
||||
this.actor.jetDeMoral('malheureuse');
|
||||
this.render(true);
|
||||
});
|
||||
html.find('#moral-neutre').click((event) => {
|
||||
html.find('.moral-neutre').click((event) => {
|
||||
this.actor.jetDeMoral('neutre');
|
||||
this.render(true);
|
||||
});
|
||||
html.find('#moral-heureux').click((event) => {
|
||||
html.find('.moral-heureux').click((event) => {
|
||||
this.actor.jetDeMoral('heureuse');
|
||||
this.render(true);
|
||||
});
|
||||
html.find('#ethylisme-test').click((event) => {
|
||||
html.find('.ethylisme-test').click((event) => {
|
||||
this.actor.ethylismeTest();
|
||||
this.render(true);
|
||||
});
|
||||
|
||||
html.find('#jet-vie').click((event) => {
|
||||
html.find('.jet-vie').click((event) => {
|
||||
this.actor.jetVie();
|
||||
this.render(true);
|
||||
});
|
||||
html.find('#jet-endurance').click((event) => {
|
||||
html.find('.jet-endurance').click((event) => {
|
||||
this.actor.jetEndurance();
|
||||
this.render(true);
|
||||
});
|
||||
@@ -499,19 +495,19 @@ export class RdDActorSheet extends ActorSheet {
|
||||
this.render(true);
|
||||
});
|
||||
|
||||
html.find('#vie-plus').click((event) => {
|
||||
html.find('.vie-plus').click((event) => {
|
||||
this.actor.santeIncDec("vie", 1);
|
||||
this.render(true);
|
||||
});
|
||||
html.find('#vie-moins').click((event) => {
|
||||
html.find('.vie-moins').click((event) => {
|
||||
this.actor.santeIncDec("vie", -1);
|
||||
this.render(true);
|
||||
});
|
||||
html.find('#endurance-plus').click((event) => {
|
||||
html.find('.endurance-plus').click((event) => {
|
||||
this.actor.santeIncDec("endurance", 1);
|
||||
this.render(true);
|
||||
});
|
||||
html.find('#endurance-moins').click((event) => {
|
||||
html.find('.endurance-moins').click((event) => {
|
||||
this.actor.santeIncDec("endurance", -1);
|
||||
this.render(true);
|
||||
});
|
||||
@@ -519,25 +515,24 @@ export class RdDActorSheet extends ActorSheet {
|
||||
this.actor.setSonne(event.currentTarget.checked);
|
||||
this.render(true);
|
||||
});
|
||||
html.find('#ptreve-actuel-plus').click((event) => {
|
||||
html.find('.ptreve-actuel-plus').click((event) => {
|
||||
this.actor.reveActuelIncDec(1);
|
||||
this.render(true);
|
||||
});
|
||||
html.find('#ptreve-actuel-moins').click((event) => {
|
||||
html.find('.ptreve-actuel-moins').click((event) => {
|
||||
this.actor.reveActuelIncDec(-1);
|
||||
this.render(true);
|
||||
});
|
||||
html.find('#fatigue-plus').click((event) => {
|
||||
html.find('.fatigue-plus').click((event) => {
|
||||
this.actor.santeIncDec("fatigue", 1);
|
||||
this.render(true);
|
||||
});
|
||||
html.find('#fatigue-moins').click((event) => {
|
||||
html.find('.fatigue-moins').click((event) => {
|
||||
this.actor.santeIncDec("fatigue", -1);
|
||||
this.render(true);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
/* -------------------------------------------- */
|
||||
/** @override */
|
||||
setPosition(options = {}) {
|
||||
|
||||
@@ -67,7 +67,7 @@ export class RdDActorVehiculeSheet extends ActorSheet {
|
||||
// Update Inventory Item
|
||||
html.find('.item-edit').click(ev => {
|
||||
const li = $(ev.currentTarget).parents(".item");
|
||||
const item = this.actor.getOwnedItem(li.data("itemId"));
|
||||
const item = this.actor.items.get(li.data("itemId"));
|
||||
item.sheet.render(true);
|
||||
});
|
||||
// Delete Inventory Item
|
||||
|
||||
593
module/actor.js
593
module/actor.js
File diff suppressed because it is too large
Load Diff
@@ -18,15 +18,15 @@ const nomCategorieParade = {
|
||||
export class RdDItemArme extends Item {
|
||||
|
||||
static isArme(item) {
|
||||
return (item.type == 'competencecreature' && item.data.iscombat) || item.type == 'arme';
|
||||
return (item.data.type == 'competencecreature' && item.data.iscombat) || item.data.type == 'arme';
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static getArmeData(item) {
|
||||
switch (item ? item.data.type : '') {
|
||||
case 'arme': return item.data;
|
||||
case 'arme': return item.data.data;
|
||||
case 'competencecreature':
|
||||
return RdDItemCompetenceCreature.toArme(item.data);
|
||||
return RdDItemCompetenceCreature.toArme(item.data.data);
|
||||
}
|
||||
return RdDItemArme.mainsNues();
|
||||
}
|
||||
@@ -146,7 +146,7 @@ export class RdDItemArme extends Item {
|
||||
}
|
||||
|
||||
static isArmeUtilisable(item) {
|
||||
return item.type == 'arme' && (item.data.resistance > 0 || item.data.portee_courte>0);
|
||||
return item.data.type == 'arme' && (item.data.resistance > 0 || item.data.portee_courte>0);
|
||||
}
|
||||
|
||||
static mainsNues(actorData={}) {
|
||||
|
||||
@@ -17,10 +17,19 @@ function _buildCumulXP() {
|
||||
return cumulXP;
|
||||
}
|
||||
|
||||
const compendiumCompetences = {
|
||||
"personnage": "foundryvtt-reve-de-dragon.competences",
|
||||
"creature": "foundryvtt-reve-de-dragon.competences-creatures",
|
||||
"entite": "foundryvtt-reve-de-dragon.competences-entites"
|
||||
};
|
||||
|
||||
const competence_xp_cumul = _buildCumulXP();
|
||||
|
||||
export class RdDItemCompetence extends Item {
|
||||
|
||||
static compendium(actorType){
|
||||
return compendiumCompetences[actorType] ?? '';
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
static isCompetenceArme(competence) {
|
||||
switch (competence.data.categorie) {
|
||||
|
||||
@@ -17,7 +17,7 @@ export class RdDItemCompetenceCreature extends Item {
|
||||
/* -------------------------------------------- */
|
||||
static toArme(item) {
|
||||
if (RdDItemCompetenceCreature.isCompetenceAttaque(item)) {
|
||||
let arme = { name: item.name, data: duplicate(item.data) };
|
||||
let arme = { name: item.name, data: duplicate(item.data.data) };
|
||||
mergeObject(arme.data,
|
||||
{
|
||||
competence: item.name,
|
||||
@@ -35,11 +35,11 @@ export class RdDItemCompetenceCreature extends Item {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static isCompetenceAttaque(item) {
|
||||
return item.type == 'competencecreature' && item.data.iscombat;
|
||||
return item.data.type == 'competencecreature' && item.data.iscombat;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static isCompetenceParade(item) {
|
||||
return item.type == 'competencecreature' && item.data.isparade;
|
||||
return item.data.type == 'competencecreature' && item.data.isparade;
|
||||
}
|
||||
}
|
||||
|
||||
30
module/item-monnaie.js
Normal file
30
module/item-monnaie.js
Normal file
@@ -0,0 +1,30 @@
|
||||
|
||||
|
||||
const monnaiesParDefaut = [
|
||||
{ name: "Etain (1 denier)", valeur: 1, enc: 0.01, img: "systems/foundryvtt-reve-de-dragon/icons/objets/piece_etain_poisson.webp" },
|
||||
{ name: "Bronze (10 deniers)", valeur: 10, enc: 0.01, img: "systems/foundryvtt-reve-de-dragon/icons/objets/piece_bronze_epees.webp" },
|
||||
{ name: "Argent (1 sol)", valeur: 100, enc: 0.01, img: "systems/foundryvtt-reve-de-dragon/icons/objets/piece_argent_sol.webp" },
|
||||
{ name: "Or (10 sols)", valeur: 1000, enc: 0.01, img: "systems/foundryvtt-reve-de-dragon/icons/objets/piece_or_sol.webp" }
|
||||
]
|
||||
|
||||
export class Monnaie {
|
||||
|
||||
static monnaiesParDefaut() {
|
||||
return monnaiesParDefaut.map(it => Monnaie.prepareMonnaie(it.name, it.valeur, it.img, it.enc));
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static prepareMonnaie(name, valeur_deniers, img = "", enc = 0.01) {
|
||||
let piece = {
|
||||
name: name, type: 'monnaie', img: img, _id: randomID(16),
|
||||
data: {
|
||||
quantite: 0,
|
||||
valeur_deniers: valeur_deniers,
|
||||
encombrement: enc,
|
||||
description: ""
|
||||
}
|
||||
}
|
||||
return piece;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -13,7 +13,7 @@ export class RdDItemSheet extends ItemSheet {
|
||||
/** @override */
|
||||
static get defaultOptions() {
|
||||
return mergeObject(super.defaultOptions, {
|
||||
classes: ["foundryvtt-reve-de-dragon", "sheet", "item"],
|
||||
classes: ["foundryvtt-reve-de-dragon", "sheet", 'Item'],
|
||||
template: "systems/foundryvtt-reve-de-dragon/templates/item-sheet.html",
|
||||
width: 550,
|
||||
height: 550
|
||||
@@ -30,7 +30,7 @@ export class RdDItemSheet extends ItemSheet {
|
||||
{
|
||||
class: "post",
|
||||
icon: "fas fa-comment",
|
||||
onclick: ev => new RdDItem(this.item.data).postItem()
|
||||
onclick: ev => new RdDItem(this.item.data.data).postItem()
|
||||
})
|
||||
return buttons
|
||||
}
|
||||
@@ -50,14 +50,14 @@ export class RdDItemSheet extends ItemSheet {
|
||||
let sheetData = super.getData();
|
||||
|
||||
sheetData.categorieCompetences = RdDUtility.getCategorieCompetences();
|
||||
if ( sheetData.item.type == 'tache' || sheetData.item.type == 'livre' || sheetData.item.type == 'meditation' || sheetData.item.type == 'oeuvre') {
|
||||
if ( sheetData.item.data.type == 'tache' || sheetData.item.data.type == 'livre' || sheetData.item.data.type == 'meditation' || sheetData.item.data.type == 'oeuvre') {
|
||||
sheetData.caracList = duplicate(game.system.model.Actor.personnage.carac);
|
||||
sheetData.competences = await RdDUtility.loadCompendiumNames( 'foundryvtt-reve-de-dragon.competences' );
|
||||
}
|
||||
if (sheetData.item.type == 'arme') {
|
||||
if (sheetData.item.data.type == 'arme') {
|
||||
sheetData.competences = await RdDUtility.loadCompendium( 'foundryvtt-reve-de-dragon.competences', it => RdDItemCompetence.isCompetenceArme(it));
|
||||
}
|
||||
if ( sheetData.item.type == 'recettealchimique' ) {
|
||||
if ( sheetData.item.data.type == 'recettealchimique' ) {
|
||||
RdDAlchimie.processManipulation(sheetData.item, this.actor && this.actor.id );
|
||||
}
|
||||
if ( this.actor ) {
|
||||
@@ -120,7 +120,7 @@ export class RdDItemSheet extends ItemSheet {
|
||||
/* -------------------------------------------- */
|
||||
get template()
|
||||
{
|
||||
let type = this.item.type;
|
||||
let type = this.item.data.type;
|
||||
return `systems/foundryvtt-reve-de-dragon/templates/item-${type}-sheet.html`;
|
||||
}
|
||||
|
||||
|
||||
@@ -53,7 +53,7 @@ export class RdDItemSort extends Item {
|
||||
*/
|
||||
static getBonusCaseList( data, newCase = false ) {
|
||||
// Gestion spéciale case bonus
|
||||
if ( data.item.type == 'sort') {
|
||||
if ( data.item.data.type == 'sort') {
|
||||
return this.buildBonusCaseList(data.data.bonuscase, newCase );
|
||||
}
|
||||
return undefined;
|
||||
@@ -106,7 +106,7 @@ export class RdDItemSort extends Item {
|
||||
// Sauvegarde/update
|
||||
let bonuscase = StringList.toString();
|
||||
//console.log("Bonus cae :", bonuscase);
|
||||
actor.updateEmbeddedEntity("OwnedItem", { _id: sort._id, 'data.bonuscase': bonuscase } );
|
||||
actor.updateEmbeddedDocuments('Item', [{ _id: sort._id, 'data.bonuscase': bonuscase }]);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
|
||||
@@ -6,26 +6,24 @@
|
||||
export class Misc {
|
||||
static isFunction(v) {
|
||||
return v && {}.toString.call(v) === '[object Function]';
|
||||
}
|
||||
}
|
||||
|
||||
static upperFirst(text) {
|
||||
return text.charAt(0).toUpperCase() + text.slice(1);
|
||||
}
|
||||
|
||||
static toSignedString(number){
|
||||
static toSignedString(number) {
|
||||
const value = parseInt(number)
|
||||
const isPositiveNumber = value != NaN && value > 0;
|
||||
return isPositiveNumber ? "+"+number : number
|
||||
return isPositiveNumber ? "+" + number : number
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts the value to an integer, or to 0 if undefined/null/not representing integer
|
||||
* @param {*} value value to convert to an integer using parseInt
|
||||
*/
|
||||
static toInt(value)
|
||||
{
|
||||
if (value == undefined)
|
||||
{
|
||||
static toInt(value) {
|
||||
if (value == undefined) {
|
||||
return 0;
|
||||
}
|
||||
const parsed = parseInt(value);
|
||||
@@ -41,13 +39,13 @@ export class Misc {
|
||||
}
|
||||
}
|
||||
|
||||
static classify(items, classifier = it => it.type, transform = it => it) {
|
||||
static classify(items, classifier = item => item.type, transform = it => it) {
|
||||
let itemsBy = {};
|
||||
Misc.classifyInto(itemsBy, items, classifier, transform);
|
||||
return itemsBy;
|
||||
}
|
||||
|
||||
static classifyInto(itemsBy, items, classifier = it => it.type, transform = it => it) {
|
||||
static classifyInto(itemsBy, items, classifier = item => item.type, transform = it => it) {
|
||||
for (const item of items) {
|
||||
const classification = classifier(item);
|
||||
let list = itemsBy[classification];
|
||||
@@ -66,5 +64,4 @@ export class Misc {
|
||||
static distinct(array) {
|
||||
return [...new Set(array)];
|
||||
}
|
||||
|
||||
}
|
||||
@@ -43,7 +43,7 @@ export class RdDAstrologieJoueur extends Dialog {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static organizeNombres(actor) {
|
||||
let itemNombres = actor.data.items.filter( (item) => item.type == 'nombreastral');
|
||||
let itemNombres = actor.data.items.filter( (item) => item.data.type == 'nombreastral');
|
||||
let itemFiltered = {};
|
||||
for ( let item of itemNombres) {
|
||||
if ( itemFiltered[item.data.jourindex] ) {
|
||||
@@ -91,7 +91,7 @@ export class RdDAstrologieJoueur extends Dialog {
|
||||
$("#diffConditions").val(0);
|
||||
});
|
||||
|
||||
html.find('#jet-astrologie').click((event) => {
|
||||
html.find('.jet-astrologie').click((event) => {
|
||||
this.requestJetAstrologie();
|
||||
});
|
||||
}
|
||||
|
||||
@@ -78,14 +78,14 @@ export class RdDCombatManager extends Combat {
|
||||
let armeCombat, competence;
|
||||
if (c.actor.data.type == 'creature' || c.actor.data.type == 'entite') {
|
||||
for (const competenceItem of c.actor.data.items) {
|
||||
if (competenceItem.data.iscombat) {
|
||||
if (competenceitem.data.iscombat) {
|
||||
competence = duplicate(competenceItem);
|
||||
}
|
||||
}
|
||||
rollFormula = "2+( (" + RdDCombatManager.calculInitiative(competence.data.niveau, competence.data.carac_value) + ")/100)";
|
||||
} else {
|
||||
for (const item of c.actor.data.items) {
|
||||
if (item.type == "arme" && item.data.equipe) {
|
||||
if (item.data.type == "arme" && item.data.equipe) {
|
||||
armeCombat = duplicate(item);
|
||||
}
|
||||
}
|
||||
@@ -99,7 +99,7 @@ export class RdDCombatManager extends Combat {
|
||||
const roll = super._getInitiativeRoll(c, rollFormula);
|
||||
if (roll.total <= 0) roll.total = 0.00;
|
||||
console.log("Compute init for", rollFormula, roll.total);
|
||||
await this.updateEmbeddedEntity("Combatant", { _id: c._id, initiative: roll.total });
|
||||
await this.updateEmbeddedDocuments("Combatant", [{ _id: c._id, initiative: roll.total }]);
|
||||
|
||||
// Send a chat message
|
||||
let rollMode = messageOptions.rollMode || game.settings.get("core", "rollMode");
|
||||
@@ -211,7 +211,7 @@ export class RdDCombatManager extends Combat {
|
||||
let msg = `<h4>L'initiative de ${combatant.actor.name} a été modifiée !</h4>
|
||||
<hr>
|
||||
<div>
|
||||
Etant donné son ${arme.name}, son initative pour ce premier round est désormais de ${initData.init}.
|
||||
Etant donné son ${arme.name}, son initiative pour ce premier round est désormais de ${initData.init}.
|
||||
</div>`
|
||||
ChatMessage.create({ content: msg });
|
||||
game.combat.setInitiative(combatant._id, initData.init);
|
||||
@@ -725,7 +725,7 @@ export class RdDCombat {
|
||||
/* -------------------------------------------- */
|
||||
async _onAttaqueParticuliere(rollData) {
|
||||
RdDCombat._storeAttaque(this.attackerId, rollData);
|
||||
this.attacker.decItemUse( rollData.arme._id ); // Usage décrémenté sur particulière
|
||||
this.attacker.decItemUse(rollData.arme._id); // Usage décrémenté sur particulière
|
||||
|
||||
// Finesse et Rapidité seulement en mêlée et si la difficulté libre est de -1 minimum
|
||||
const isMeleeDiffNegative = rollData.selectedCarac.label == "Mêlée" && rollData.diffLibre < 0;
|
||||
@@ -733,7 +733,7 @@ export class RdDCombat {
|
||||
alias: this.attacker.name,
|
||||
whisper: ChatUtility.getWhisperRecipientsAndGMs(this.attacker.name),
|
||||
content: await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-demande-attaque-particuliere.html', {
|
||||
alias: this.attacker.name,
|
||||
actor: this.attacker,
|
||||
attackerId: this.attackerId,
|
||||
defenderTokenId: this.defenderTokenId,
|
||||
isFinesse: isMeleeDiffNegative,
|
||||
@@ -1109,7 +1109,7 @@ export class RdDCombat {
|
||||
resistance -= perteResistance;
|
||||
defenderRoll.show.deteriorationArme = resistance <= 0 ? 'brise' : 'perte';
|
||||
defenderRoll.show.perteResistance = perteResistance;
|
||||
this.defender.updateEmbeddedEntity("OwnedItem", { _id: defenderRoll.arme._id, 'data.resistance': resistance });
|
||||
this.defender.updateEmbeddedDocuments('Item', [{ _id: defenderRoll.arme._id, 'data.resistance': resistance }]);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
@@ -1126,7 +1126,7 @@ export class RdDCombat {
|
||||
resistance -= dmg;
|
||||
defenderRoll.show.deteriorationArme = resistance <= 0 ? 'brise' : 'perte';
|
||||
defenderRoll.show.perteResistance = dmg;
|
||||
this.defender.updateEmbeddedEntity("OwnedItem", { _id: defenderRoll.arme._id, 'data.resistance': resistance });
|
||||
this.defender.updateEmbeddedDocuments('Item', [{ _id: defenderRoll.arme._id, 'data.resistance': resistance }]);
|
||||
}
|
||||
}
|
||||
// Si l'arme de parade n'est pas un bouclier, jet de désarmement (p.132)
|
||||
@@ -1248,7 +1248,7 @@ export class RdDCombat {
|
||||
static async displayActorCombatStatus(combat, actor) {
|
||||
let data = {
|
||||
combatId: combat._id,
|
||||
alias: actor.name,
|
||||
actor: actor,
|
||||
etatGeneral: actor.getEtatGeneral(),
|
||||
isSonne: actor.getSonne(),
|
||||
blessuresStatus: actor.computeResumeBlessure(),
|
||||
|
||||
@@ -11,11 +11,11 @@ export class RdDHotbar {
|
||||
|
||||
Hooks.on("hotbarDrop", async (bar, data, slot) => {
|
||||
// Create item macro if rollable item - weapon, spell, prayer, trait, or skill
|
||||
if (data.type == "Item") {
|
||||
if (data.type == 'Item') {
|
||||
if (data.data.type != "arme" && data.data.type != "competence" )
|
||||
return
|
||||
let item = data.data
|
||||
let command = `game.system.rdd.RdDHotbar.rollMacro("${item.name}", "${item.type}");`;
|
||||
let command = `game.system.rdd.RdDHotbar.rollMacro("${item.name}", "${item.data.type}");`;
|
||||
let macro = game.macros.entities.find(m => (m.name === item.name) && (m.command === command));
|
||||
if (!macro) {
|
||||
macro = await Macro.create({
|
||||
@@ -70,10 +70,10 @@ export class RdDHotbar {
|
||||
let item = actor ? actor.items.find(i => i.name === itemName && i.type == itemType) : null;
|
||||
if (!item) return ui.notifications.warn(`Impossible de trouver l'objet de cette macro`);
|
||||
|
||||
item = item.data;
|
||||
item = item.data.data;
|
||||
|
||||
// Trigger the item roll
|
||||
switch (item.type) {
|
||||
switch (item.data.type) {
|
||||
case "arme":
|
||||
return actor.rollArme(item.data.competence, itemName);
|
||||
case "competence":
|
||||
|
||||
@@ -39,7 +39,7 @@ export class RdDRoll extends Dialog {
|
||||
/* -------------------------------------------- */
|
||||
static _setDefaultOptions(actor, rollData) {
|
||||
let defaultRollData = {
|
||||
alias: actor.name,
|
||||
actor: actor,
|
||||
ajustementsConditions: CONFIG.RDD.ajustementsConditions,
|
||||
difficultesLibres: CONFIG.RDD.difficultesLibres,
|
||||
etat: actor.getEtatGeneral(),
|
||||
|
||||
@@ -76,7 +76,7 @@ export class RdDTMRDialog extends Dialog {
|
||||
}
|
||||
|
||||
loadRencontres() {
|
||||
this.rencontresExistantes = duplicate(this.actor.getTMRRencontres()).list;
|
||||
this.rencontresExistantes = duplicate(this.actor.getTMRRencontres());
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@@ -304,7 +304,6 @@ export class RdDTMRDialog extends Dialog {
|
||||
|
||||
let rencontreData = {
|
||||
actor: this.actor,
|
||||
alias: this.actor.name,
|
||||
reveDepart: this.actor.getReveActuel(),
|
||||
competence: this.actor.getBestDraconic(),
|
||||
rencontre: this.currentRencontre,
|
||||
@@ -431,7 +430,6 @@ export class RdDTMRDialog extends Dialog {
|
||||
// simuler une rencontre
|
||||
let rencontreData = {
|
||||
actor: this.actor,
|
||||
alias: this.actor.name,
|
||||
reveDepart: this.actor.getReveActuel(),
|
||||
competence: this.actor.getBestDraconic(),
|
||||
rencontre: this.currentRencontre,
|
||||
|
||||
@@ -690,20 +690,6 @@ export class RdDUtility {
|
||||
});
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static createMonnaie(name, valeur_deniers, img = "", enc = 0.01) {
|
||||
let piece = {
|
||||
name: name, type: 'monnaie', img: img, _id: randomID(16),
|
||||
data: {
|
||||
quantite: 0,
|
||||
valeur_deniers: valeur_deniers,
|
||||
encombrement: enc,
|
||||
description: ""
|
||||
}
|
||||
}
|
||||
return piece;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static afficherDemandePayer(som1, som2) {
|
||||
som1 = (som1) ? som1.toLowerCase() : "0d";
|
||||
@@ -784,7 +770,7 @@ export class RdDUtility {
|
||||
label: "Supprimer l'objet",
|
||||
callback: () => {
|
||||
console.log("Delete : ", itemId);
|
||||
actorSheet.actor.deleteOwnedItem(itemId);
|
||||
actorSheet.actor.deleteEmbeddedDocuments('Item', [itemId]);
|
||||
li.slideUp(200, () => actorSheet.render(false));
|
||||
}
|
||||
},
|
||||
|
||||
@@ -293,7 +293,7 @@ export class TMRUtility {
|
||||
tmr.coord = coord;
|
||||
tmr.genre = TMRType[tmr.type].genre;
|
||||
}
|
||||
let tmrByType = Misc.classify(Object.values(TMRMapping));
|
||||
let tmrByType = Misc.classify(Object.values(TMRMapping), tmr => tmr.type);
|
||||
for (const [type, list] of Object.entries(tmrByType)) {
|
||||
TMRType[type].list = list;
|
||||
}
|
||||
|
||||
@@ -36,7 +36,7 @@ export class Conquete extends Draconique {
|
||||
}
|
||||
|
||||
async onActorDeleteCaseTmr(actor, casetmr) {
|
||||
await actor.deleteOwnedItem(casetmr.data.sourceid);
|
||||
await actor.deleteEmbeddedDocuments('Item', [casetmr.data.sourceid]);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -123,24 +123,20 @@ export class Draconique {
|
||||
}
|
||||
|
||||
async createCaseTmr(actor, label, tmr, sourceId = undefined) {
|
||||
await actor.createOwnedItem({
|
||||
await actor.createEmbeddedDocuments('Item', [{
|
||||
name: label, type: 'casetmr', img: this.img(), _id: randomID(16),
|
||||
data: { coord: tmr.coord, specific: this.code(), sourceid: sourceId }
|
||||
});
|
||||
}]);
|
||||
}
|
||||
|
||||
async deleteCasesTmr(actor, draconique) {
|
||||
let caseTmrs = actor.data.items.filter(it => this.isCase(it) && it.data.sourceid == draconique._id);
|
||||
for (let casetmr of caseTmrs) {
|
||||
await actor.deleteOwnedItem(casetmr._id);
|
||||
}
|
||||
await actor.deleteEmbeddedDocuments('Item', caseTmrs.map(it =>it._id));
|
||||
}
|
||||
|
||||
async onVisiteSupprimer(actor, tmr, onRemoveToken) {
|
||||
let existants = actor.data.items.filter(it => this.isCase(it, tmr.coord));
|
||||
for (let casetmr of existants) {
|
||||
await actor.deleteOwnedItem(casetmr._id);
|
||||
onRemoveToken(tmr, casetmr);
|
||||
}
|
||||
await actor.deleteEmbeddedDocuments('Item', [ existants.map(it => it._id)]);
|
||||
existants.forEach(it => onRemoveToken(tmr, it));
|
||||
}
|
||||
}
|
||||
@@ -32,7 +32,7 @@ export class Pelerinage extends Draconique {
|
||||
}
|
||||
|
||||
async onActorDeleteCaseTmr(actor, casetmr) {
|
||||
await actor.deleteOwnedItem(casetmr.data.sourceid);
|
||||
await actor.deleteEmbeddedDocuments('Item', [casetmr.data.sourceid]);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -60,6 +60,6 @@ export class PresentCites extends Draconique {
|
||||
}
|
||||
|
||||
async ouvrirLePresent(actor, casetmr) {
|
||||
await actor.deleteOwnedItem(casetmr._id);
|
||||
await actor.deleteEmbeddedDocuments('Item', [casetmr._id]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,8 +23,8 @@ export class UrgenceDraconique extends Draconique {
|
||||
whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name),
|
||||
content: `En l'absence de sorts en réserve, l'urgence draconique de ${actor.name} se transforme en ${queue.name}`
|
||||
});
|
||||
await actor.createOwnedItem(ideeFixe);
|
||||
await actor.deleteOwnedItem(queue._id);
|
||||
await actor.createEmbeddedDocuments('Item', [ideeFixe]);
|
||||
await actor.deleteEmbeddedDocuments('Item', [queue._id]);
|
||||
return;
|
||||
}
|
||||
else {
|
||||
@@ -36,7 +36,7 @@ export class UrgenceDraconique extends Draconique {
|
||||
}
|
||||
|
||||
async onActorDeleteCaseTmr(actor, casetmr) {
|
||||
await actor.deleteOwnedItem(casetmr.data.sourceid);
|
||||
await actor.deleteEmbeddedDocuments('Item', [casetmr.data.sourceid]);
|
||||
}
|
||||
|
||||
code() { return 'urgence' }
|
||||
|
||||
Reference in New Issue
Block a user