Fix 0.8.0

This commit is contained in:
sladecraven 2021-02-19 18:04:10 +01:00
parent 1f61c955b7
commit 8b7b474442
11 changed files with 75 additions and 67 deletions

View File

@ -58,8 +58,9 @@ export class RdDActorSheet extends ActorSheet {
// Compute current carac sum
let sum = 0;
for (let caracName in data.data.carac) {
let currentCarac = data.data.carac[caracName];
let caracList = data.data.data.carac;
for (let caracName in caracList) {
let currentCarac = caracList[caracName];
if (!currentCarac.derivee) {
sum += parseInt(currentCarac.value);
}
@ -93,14 +94,15 @@ export class RdDActorSheet extends ActorSheet {
data.esquive = { name: "Esquive", niveau: data.competenceByCategory?.melee.find(it => it.name == 'Esquive')?.data.niveau ?? -6};
let corpsACorps = data.competenceByCategory?.melee.find(it => it.name == 'Corps à corps');
if (corpsACorps) {
let cc_init = RdDUtility.calculInitiative(corpsACorps.data.niveau, data.data.carac['melee'].value);
let cc_init = RdDUtility.calculInitiative(corpsACorps.data.niveau, caracList['melee'].value);
data.data.combat.push(RdDItemArme.mainsNues({ niveau: corpsACorps.data.niveau, initiative: cc_init }));
}
this.armesList = duplicate(data.data.combat);
data.data.carac.taille.isTaille = true; // To avoid button link;
data.data.compteurs.chance.isChance = true;
data.data.blessures.resume = this.actor.computeResumeBlessure(data.data.blessures);
caracList.isTaille = true; // To avoid button link;
let compteursList = data.data.data.compteurs
compteursList.chance.isChance = true;
data.data.data.blessures.resume = this.actor.computeResumeBlessure(data.data.data.blessures);
// Mise à jour de l'encombrement total et du prix de l'équipement
this.actor.computeEncombrementTotalEtMalusArmure();
@ -117,16 +119,16 @@ export class RdDActorSheet extends ActorSheet {
// low is normal, this the base used to compute the grid.
data.data.fatigue = {
malus: RdDUtility.calculMalusFatigue(data.data.sante.fatigue.value, data.data.sante.endurance.max),
html: "<table class='table-fatigue'>" + RdDUtility.makeHTMLfatigueMatrix(data.data.sante.fatigue.value, data.data.sante.endurance.max).html() + "</table>"
malus: RdDUtility.calculMalusFatigue(data.data.data.sante.fatigue.value, data.data.data.sante.endurance.max),
html: "<table class='table-fatigue'>" + RdDUtility.makeHTMLfatigueMatrix(data.data.data.sante.fatigue.value, data.data.data.sante.endurance.max).html() + "</table>"
}
RdDUtility.filterItemsPerTypeForSheet(data);
data.data.sortReserve = data.data.reve.reserve.list;
data.data.rencontres = duplicate(data.data.reve.rencontre.list);
data.data.sortReserve = data.data.data.reve.reserve.list;
data.data.rencontres = duplicate(data.data.data.reve.rencontre.list);
data.data.caseSpeciales = data.itemsByType['casetmr'];
RdDUtility.buildArbreDeConteneur(this, data);
data.data.surEncombrementMessage = (data.data.compteurs.surenc.value < 0) ? "Sur-Encombrement!" : "";
data.data.surEncombrementMessage = (data.data.data.compteurs.surenc.value < 0) ? "Sur-Encombrement!" : "";
data.data.vehiculesList = this.actor.buildVehiculesList();
data.data.monturesList = this.actor.buildMonturesList();
data.data.suivantsList = this.actor.buildSuivantsList();
@ -191,7 +193,7 @@ export class RdDActorSheet extends ActorSheet {
html.find('.item-edit').click(ev => {
const li = $(ev.currentTarget).parents(".item");
const item = this.actor.getOwnedItem(li.data("item-id"));
const item = this.actor.items.get(li.data("item-id"));
item.sheet.render(true);
});
// Update Inventory Item

View File

@ -60,6 +60,8 @@ export class RdDActor extends Actor {
if (data instanceof Array) {
return super.create(data, options);
}
console.log("****************************************************");
// If the created actor has items (only applicable to duplicated actors) bypass the new actor creation logic
if (data.items) {
let actor = super.create(data, options);
@ -140,25 +142,28 @@ export class RdDActor extends Actor {
/* -------------------------------------------- */
async checkMonnaiePresence(items) { // Ajout opportuniste si les pièces n'existent pas.
if (!items) return; // Sanity check during import
let piece = items.find(item => item.type == 'monnaie' && Number(item.data.valeur_deniers) == 1);
//console.log("NO MONNAIR FOUND!!!!", items);
let piece = items.find(item => item.data.type == 'monnaie' && Number(item.data.data.valeur_deniers) == 1 );
let newMonnaie = [];
if (!piece) {
newMonnaie.push(RdDUtility.createMonnaie("Etain (1 denier)", 1, "systems/foundryvtt-reve-de-dragon/icons/objets/piece_etain_poisson.webp"));
}
piece = items.find(item => item.type == 'monnaie' && Number(item.data.valeur_deniers) == 10);
piece = items.find(item => item.data.type == 'monnaie' && Number(item.data.data.valeur_deniers) == 10);
if (!piece) {
newMonnaie.push(RdDUtility.createMonnaie("Bronze (10 deniers)", 10, "systems/foundryvtt-reve-de-dragon/icons/objets/piece_bronze_epees.webp"));
}
piece = items.find(item => item.type == 'monnaie' && Number(item.data.valeur_deniers) == 100);
piece = items.find(item => item.data.type == 'monnaie' && Number(item.data.data.valeur_deniers) == 100);
if (!piece) {
newMonnaie.push(RdDUtility.createMonnaie("Argent (1 sol)", 100, "systems/foundryvtt-reve-de-dragon/icons/objets/piece_argent_sol.webp"));
}
piece = items.find(item => item.type == 'monnaie' && Number(item.data.valeur_deniers) == 1000);
piece = items.find(item => item.data.type == 'monnaie' && Number(item.data.data.valeur_deniers) == 1000);
if (!piece) {
newMonnaie.push(RdDUtility.createMonnaie("Or (10 sols)", 1000, "systems/foundryvtt-reve-de-dragon/icons/objets/piece_or_sol.webp"));
}
if (newMonnaie.length > 0) {
await this.createOwnedItem(newMonnaie);
await this.createEmbeddedDocuments("Item", newMonnaie );
//await this.createOwnedItem(newMonnaie);
}
}
@ -294,7 +299,7 @@ export class RdDActor extends Actor {
}
/* -------------------------------------------- */
getBestDraconic() {
const list = this.getDraconicList().sort((a, b) => b.data.niveau - a.data.niveau);
const list = this.getDraconicList().sort((a, b) => b.data.data.niveau - a.data.data.niveau);
if (list.length == 0) {
return { name: "none", data: { niveau: -11 } };
}

View File

@ -13,7 +13,7 @@ export class ChatUtility {
/* -------------------------------------------- */
static onRemoveMessages(part, gmId) {
if (game.user._id == gmId) {
if (game.user.data._id == gmId) {
const toDelete = game.messages.filter(it => it.data.content.includes(part));
toDelete.forEach(it => it.delete());
}
@ -22,10 +22,10 @@ export class ChatUtility {
/* -------------------------------------------- */
static removeChatMessageContaining(part) {
const gmId = game.user.isGM ? game.user._id : game.users.entities.find(u => u.isGM)?.id;
const gmId = game.user.isGM ? game.user.data._id : game.users.entities.find(u => u.isGM)?.data.id;
if (!gmId || game.user.isGM) {
ChatUtility.onRemoveMessages(part, game.user._id);
ChatUtility.onRemoveMessages(part, game.user.data._id);
}
else {
game.socket.emit("system.foundryvtt-reve-de-dragon", {

View File

@ -57,11 +57,11 @@ export class RdDItemSheet extends ItemSheet {
data.competences = await RdDUtility.loadCompendium( 'foundryvtt-reve-de-dragon.competences', it => RdDItemCompetence.isCompetenceArme(it));
}
if ( data.item.type == 'recettealchimique' ) {
RdDAlchimie.processManipulation(data.item, this.actor && this.actor._id );
RdDAlchimie.processManipulation(data.item, this.actor && this.actor.id );
}
if ( this.actor ) {
data.isOwned = true;
data.actorId = this.actor._id;
data.actorId = this.actor.id;
}
data.bonusCaseList = RdDItemSort.getBonusCaseList(data, true);
data.isGM = game.user.isGM; // Pour verrouiller certaines éditions

View File

@ -203,7 +203,8 @@ Hooks.once("init", async function () {
/* -------------------------------------------- */
// Define custom Entity classes
CONFIG.Actor.entityClass = RdDActor;
CONFIG.Actor.documentClass = RdDActor;
//CONFIG.Actor.entityClass = RdDActor;
CONFIG.RDD = {
resolutionTable: RdDResolutionTable.resolutionTable,
carac_array: RdDUtility.getCaracArray(),
@ -220,7 +221,8 @@ Hooks.once("init", async function () {
Actors.registerSheet("foundryvtt-reve-de-dragon", RdDActorEntiteSheet, { types: ["entite"], makeDefault: true });
Items.unregisterSheet("core", ItemSheet);
Items.registerSheet("foundryvtt-reve-de-dragon", RdDItemSheet, { makeDefault: true });
CONFIG.Combat.entityClass = RdDCombatManager;
//CONFIG.Combat.entityClass = RdDCombatManager;
CONFIG.Combat.documentClass = RdDCombatManager;
// Handlebar function pour container
Handlebars.registerHelper('buildConteneur', (objet) => { return RdDUtility.buildConteneur(objet); });
@ -246,7 +248,7 @@ function messageDeBienvenue() {
if (game.user.isGM) {
ChatUtility.removeChatMessageContaining('<div id="message-bienvenue-rdd">');
ChatMessage.create({
user: game.user._id,
user: game.user.data._id,
content: `<div id="message-bienvenue-rdd"><span class="rdd-roll-part">Bienvenue dans le Rêve des Dragons !</span>
<br>Vous trouverez quelques informations pour démarrer dans ce document : @Compendium[foundryvtt-reve-de-dragon.rappel-des-regles.7uGrUHGdPu0EmIu2]{Documentation MJ/Joueurs}
<br>La commande <code>/aide</code> dans le chat permet de voir les commandes spécifiques à Rêve de Dragon.</div>

View File

@ -134,8 +134,8 @@ export class RdDRoll extends Dialog {
// Update html, according to data
if (rollData.competence) {
// Set the default carac from the competence item
rollData.selectedCarac = rollData.carac[rollData.competence.data.defaut_carac];
$("#carac").val(rollData.competence.data.defaut_carac);
rollData.selectedCarac = rollData.carac[rollData.competence.data.data.defaut_carac];
$("#carac").val(rollData.competence.data.data.defaut_carac);
}
if (rollData.selectedSort) {
$("#draconic").val(rollData.selectedSort.data.listIndex); // Uniquement a la selection du sort, pour permettre de changer
@ -288,10 +288,10 @@ export class RdDRoll extends Dialog {
/* -------------------------------------------- */
_computeDiffCompetence(rollData) {
if (rollData.competence) {
return Misc.toInt(rollData.competence.data.niveau);
return Misc.toInt(rollData.competence.data.data.niveau);
}
if (rollData.draconicList) {
return Misc.toInt(rollData.competence.data.niveau);
return Misc.toInt(rollData.competence.data.data.niveau);
}
return 0;
}
@ -328,7 +328,7 @@ export class RdDRoll extends Dialog {
return compName + " - " + rollData.selectedSort.name;
}
// If a weapon is there, add it in the title
const niveau = Misc.toSignedString(rollData.competence.data.niveau);
const niveau = Misc.toSignedString(rollData.competence.data.data.niveau);
if (compName == carac) {
// cas des créatures
return carac + " " + niveau

View File

@ -648,11 +648,10 @@ export class RdDUtility {
/* -------------------------------------------- */
static async loadCompendium(compendium, filter = item => true) {
let compendiumItems = await RdDUtility.loadCompendiumNames(compendium);
const pack = game.packs.get(compendium);
let list = [];
for (let compendiumItem of compendiumItems) {
await pack.getEntity(compendiumItem._id).then(it => {
for (let compendiumItem of compendiumItems) {
await pack.getDocument(compendiumItem._id).then(it => {
const item = it.data;
if (filter(item)) {
list.push(item);

View File

@ -20,7 +20,7 @@ export const referenceAjustements = {
competence: {
isUsed: (rollData, actor) => rollData.competence,
getLabel: (rollData, actor) => rollData.competence?.name,
getValue: (rollData, actor) => rollData.competence?.data?.niveau,
getValue: (rollData, actor) => rollData.competence?.data?.data.niveau,
},
meditation: {
isUsed: (rollData, actor) => rollData.meditation,

View File

@ -2,10 +2,10 @@
"name": "foundryvtt-reve-de-dragon",
"title": "Rêve de Dragon",
"description": "Rêve de Dragon RPG for FoundryVTT",
"version": "1.3.22",
"version": "1.4.0",
"manifestPlusVersion": "1.0.0",
"minimumCoreVersion": "0.7.5",
"compatibleCoreVersion": "0.7.9",
"minimumCoreVersion": "0.8.0",
"compatibleCoreVersion": "0.8.0",
"templateVersion": 95,
"author": "LeRatierBretonnien",
"authors": [

View File

@ -14,8 +14,8 @@
<label class="ctn-vie">
<a id="jet-vie">Vie</a>
<a id="vie-moins">-</a>
<input class="resource-content" type="text" name="data.sante.vie.value" value="{{data.sante.vie.value}}" data-dtype="Number"/>
<span>/ {{data.sante.vie.max}}</span>
<input class="resource-content" type="text" name="data.data.sante.vie.value" value="{{data.data.sante.vie.value}}" data-dtype="Number"/>
<span>/ {{data.data.sante.vie.max}}</span>
<a id="vie-plus">+</a>
</label>
</li>
@ -23,8 +23,8 @@
<label class="ctn-endu">
<a id="jet-endurance">Endurance</a>
<a id="endurance-moins">-</a>
<input class="resource-content" type="text" name="data.sante.endurance.value" value="{{data.sante.endurance.value}}" data-dtype="Number"/>
<span>/ {{data.sante.endurance.max}}</span>
<input class="resource-content" type="text" name="data.sante.endurance.value" value="{{data.data.sante.endurance.value}}" data-dtype="Number"/>
<span>/ {{data.data.sante.endurance.max}}</span>
<a id="endurance-plus">+</a>
</label>
</li>
@ -33,23 +33,23 @@
<span class="tooltiptext ttt-fatigue">{{{data.fatigue.html}}}</span>
Fatigue
<a id="fatigue-moins">-</a>
<input class="resource-content" id="fatigue-value" type="text" name="data.sante.fatigue.value" value="{{data.sante.fatigue.value}}" data-dtype="Number" />
<span>/ {{data.sante.fatigue.max}}</span>
<input class="resource-content" id="fatigue-value" type="text" name="data.data.sante.fatigue.value" value="{{data.data.sante.fatigue.value}}" data-dtype="Number" />
<span>/ {{data.data.sante.fatigue.max}}</span>
<a id="fatigue-plus">+</a>
</label>
</li>
<li>
<label class="ctn-sonne">
Sonné :
<input class="resource-content data-sante-sonne" type="checkbox" {{#if data.sante.sonne.value}}checked{{/if}} />
<input class="resource-content data-sante-sonne" type="checkbox" {{#if data.data.sante.sonne.value}}checked{{/if}} />
</label>
</li>
<li>
<label class="ctn-reve">
<span class="ptreve-actuel"><a>Rêve</a></span>
<a id="ptreve-actuel-moins">-</a>
<input class="resource-content" id="pointsreve-value" type="text" name="data.reve.reve.value" value="{{data.reve.reve.value}}" data-dtype="Number" />
<span>/ {{data.reve.seuil.value}}</span>
<input class="resource-content" id="pointsreve-value" type="text" name="data.data.reve.reve.value" value="{{data.data.reve.reve.value}}" data-dtype="Number" />
<span>/ {{data.data.reve.seuil.value}}</span>
<a id="ptreve-actuel-plus">+</a>
</label>
</li>
@ -65,14 +65,14 @@
<span id="visu-tmr"><a title="Regarder les Terres M&eacute;dianes"><img class="button-img" src="systems/foundryvtt-reve-de-dragon/styles/img/ui/icon-tmr-view.svg" alt="Regarder les Terres M&eacute;dianes"/></a></span>
</div>
<div class="flexrow">
<span class="tooltip">Malus de fatigue : {{data.fatigue.malus}}
<span class="tooltip">Malus de fatigue : {{data.data.fatigue.malus}}
<span class="tooltiptext ttt-fatigue">{{{data.fatigue.html}}}</span>
</span>
<span>{{data.blessures.resume}}</span>
<span>{{data.data.blessures.resume}}</span>
</div>
<div class="flexrow">
<span>{{data.compteurs.etat.label}}: {{data.compteurs.etat.value}}</span>
<span>{{data.compteurs.surenc.label}}: {{data.compteurs.surenc.value}}</span>
<span>{{data.data.compteurs.etat.label}}: {{data.data.compteurs.etat.value}}</span>
<span>{{data.data.compteurs.surenc.label}}: {{data.data.compteurs.surenc.value}}</span>
</div>
<div>
{{#if data.surprise}}{{data.surprise}}! {{/if}}
@ -116,7 +116,7 @@
src="systems/foundryvtt-reve-de-dragon/icons/{{#if data.editCaracComp}}unlocked.svg{{else}}locked.svg{{/if}}" alt="blocker/débloquer"
>{{#if data.editCaracComp}}Verrouiller{{else}}Déverrouiller{{/if}}</a></span>
<ul class="carac-list alterne-list">
{{#each data.carac as |carac key|}}
{{#each data.data.carac as |carac key|}}
{{#if carac.isLevelUp}}
<li class="competence flexrow xp-level-up" data-attribute="{{key}}">
{{else}}
@ -155,7 +155,7 @@
</div>
<div class="flex-group-left flexcol" >
<ul class="carac-list">
{{#each data.attributs as |attr key|}}
{{#each data.data.attributs as |attr key|}}
<li class="competence flexrow list-item" data-attribute="{{key}}">
<span class="competence-label flexrow" name="data.attributs.{{key}}.label">{{attr.label}} :
{{#if (eq key 'protection')}}
@ -173,7 +173,7 @@
<input class="compteur-edit" id="chance-edit" type="text" name="chance" value="{{data.compteurs.chance.value}}" data-dtype="number"/>
<span><a class="item-control stress-test" id="chance-appel">Utiliser</a></span>
</li>
{{#each data.compteurs as |compteur key|}}
{{#each data.data.compteurs as |compteur key|}}
{{#if compteur.isChance}}
{{else if compteur.isInput}}
<li class="competence flexrow list-item">

View File

@ -16,54 +16,54 @@
<section class="sheet-body">
<div class="form-group">
<label for="categorie">Catégorie </label>
<select name="data.categorie" id="categorie" data-dtype="String">
{{#select item.data.categorie}}
<select name="data.data.categorie" id="categorie" data-dtype="String">
{{#select item.data.data.categorie}}
{{>"systems/foundryvtt-reve-de-dragon/templates/enum-categorie-competence.html"}}
{{/select}}
</select>
</div>
<div class="form-group">
<label for="niveau">Niveau </label>
<input class="attribute-value" type="text" name="data.niveau" value="{{data.niveau}}" data-dtype="Number"/>
<input class="attribute-value" type="text" name="data.data.niveau" value="{{data.data.niveau}}" data-dtype="Number"/>
</div>
<div class="form-group">
<label for="xp">XP </label>
<input class="attribute-value" id="sheet-competence-xp" type="text" name="data.xp" value="{{data.xp}}" data-dtype="Number"/>
<input class="attribute-value" id="sheet-competence-xp" type="text" name="data.data.xp" value="{{data.data.xp}}" data-dtype="Number"/>
</div>
<div class="form-group">
<label for="base">Niveau de base </label>
<select name="data.base" id="base" data-dtype="Number">
{{#select item.data.base}}
<select name="data.data.base" id="base" data-dtype="Number">
{{#select item.data.data.base}}
{{>"systems/foundryvtt-reve-de-dragon/templates/competence-base.html"}}
{{/select}}
</select>
</div>
<div class="form-group">
<label for="defaut_carac">Caractéristique par défaut </label>
<select name="data.defaut_carac" id="defaut_carac" data-dtype="String">
{{#select item.data.defaut_carac}}
<select name="data.data.defaut_carac" id="defaut_carac" data-dtype="String">
{{#select item.data.data.defaut_carac}}
{{>"systems/foundryvtt-reve-de-dragon/templates/competence-carac-defaut.html"}}
{{/select}}
</select>
</div>
<div class="form-group">
<label for="default_diffLibre">Difficulté libre par défaut</label>
<input class="attribute-value" type="text" name="data.default_diffLibre" value="{{data.default_diffLibre}}" data-dtype="Number"/>
<input class="attribute-value" type="text" name="data.data.default_diffLibre" value="{{data.data.default_diffLibre}}" data-dtype="Number"/>
</div>
{{#if (eq data.categorie 'draconic')}}
{{#if (eq data.data.categorie 'draconic')}}
<div class="form-group">
<label for="xp">XP Sort </label>
<input class="attribute-value" type="text" name="data.xp_sort" value="{{data.xp_sort}}" data-dtype="Number"/>
<input class="attribute-value" type="text" name="data.data.xp_sort" value="{{data.data.xp_sort}}" data-dtype="Number"/>
</div>
{{/if}}
<div class="form-group">
<label for="niveau_archetype">Niveau d'Archetype</label>
<input class="attribute-value" type="text" name="data.niveau_archetype" value="{{data.niveau_archetype}}" data-dtype="Number"/>
<input class="attribute-value" type="text" name="data.data.niveau_archetype" value="{{data.data.niveau_archetype}}" data-dtype="Number"/>
</div>
<div class="flexcol">
<span><label>Description : </label></span>
<div class="form-group editor">
{{editor content=data.description target="data.description" button=true owner=owner editable=editable}}
{{editor content=data.data.description target="data.data.description" button=true owner=owner editable=editable}}
</div>
</div>
</section>