diff --git a/module/actor-sheet.js b/module/actor-sheet.js
index a9fcc32e..29170dc2 100644
--- a/module/actor-sheet.js
+++ b/module/actor-sheet.js
@@ -62,9 +62,6 @@ export class RdDActorSheet extends ActorSheet {
if (this.actor.data.type == 'creature') return formData; // Shortcut
- // toujours avoir une liste d'armes (pour mettre esquive et corps à corps)
- formData.itemsByType.arme = formData.itemsByType.arme ?? [];
-
formData.competenceByCategory = Misc.classify(formData.data.competences, item => item.data.categorie);
formData.calc = {
@@ -93,38 +90,15 @@ export class RdDActorSheet extends ActorSheet {
});
- // Force empty arme, at least for Esquive
- if (formData.itemsByType.arme == undefined) formData.itemsByType.arme = [];
- for (const arme of formData.itemsByType.arme) {
- arme.data.niveau = 0; // Per default, TODO to be fixed
- for (const melee of formData.competenceByCategory.melee) {
- if (melee.name == arme.data.competence)
- arme.data.niveau = melee.data.niveau
- }
- for (const tir of formData.competenceByCategory.tir) {
- if (tir.name == arme.data.competence)
- arme.data.niveau = tir.data.niveau
- }
- for (const lancer of formData.competenceByCategory.lancer) {
- if (lancer.name == arme.data.competence)
- arme.data.niveau = lancer.data.niveau
- }
- }
-
- // To avoid armour and so on...
- formData.data.combat = duplicate(RdDUtility.checkNull(formData.itemsByType['arme']));
+ // toujours avoir une liste d'armes (pour mettre esquive et corps à corps)
+ formData.data.combat = duplicate(formData.itemsByType.arme ?? []);
+ RdDItemArme.computeNiveauArmes(formData.data.combat, formData.data.competences);
+ RdDItemArme.ajoutCorpsACorps(formData.data.combat, formData.data.competences, formData.data.carac );
+ formData.esquive = RdDItemCompetence.getEsquive(formData.data.competences);
formData.data.combat = RdDCombatManager.finalizeArmeList(formData.data.combat, formData.itemsByType.competence, formData.data.carac);
- formData.esquive = { name: "Esquive", niveau: formData.competenceByCategory?.melee.find(it => it.name == 'Esquive')?.data.niveau ?? -6 };
- let corpsACorps = formData.competenceByCategory?.melee.find(it => it.name == 'Corps à corps');
- if (corpsACorps) {
- let cc_init = RdDCombatManager.calculInitiative(corpsACorps.data.niveau, formData.data.carac['melee'].value);
- formData.data.combat.push(RdDItemArme.mainsNues({ niveau: corpsACorps.data.niveau, initiative: cc_init }));
- }
- this.armesList = duplicate(formData.data.combat);
- formData.data.carac.taille.isTaille = true; // To avoid button link;
- formData.data.blessures.resume = this.actor.computeResumeBlessure(formData.data.blessures);
+ this.armesList = formData.data.combat;
// Mise à jour de l'encombrement total et du prix de l'équipement
@@ -140,14 +114,18 @@ export class RdDActorSheet extends ActorSheet {
html: "
" + RdDUtility.makeHTMLfatigueMatrix(formData.data.sante.fatigue.value, formData.data.sante.endurance.max).html() + "
"
}
- RdDUtility.filterItemsPerTypeForSheet(formData);
- formData.data.sortReserve = formData.data.reve.reserve.list;
- formData.data.rencontres = duplicate(formData.data.reve.rencontre.list);
- formData.data.caseSpeciales = formData.itemsByType['casetmr'];
+ formData.hautreve = {
+ sortsReserve: formData.data.reve.reserve.list,
+ rencontres: duplicate(formData.data.reve.rencontre.list),
+ casesTmr: formData.itemsByType.casetmr
+ }
+
RdDUtility.buildArbreDeConteneur(this, formData);
- formData.data.vehiculesList = this.actor.buildVehiculesList();
- formData.data.monturesList = this.actor.buildMonturesList();
- formData.data.suivantsList = this.actor.buildSuivantsList();
+ formData.subacteurs = {
+ vehicules: this.actor.listeVehicules(),
+ montures: this.actor.listeMontures(),
+ suivants: this.actor.listeSuivants()
+ }
return formData;
}
diff --git a/module/actor.js b/module/actor.js
index 8b046d36..30a01d16 100644
--- a/module/actor.js
+++ b/module/actor.js
@@ -3007,7 +3007,7 @@ export class RdDActor extends Actor {
}
/* -------------------------------------------- */
- buildVehiculesList() {
+ listeVehicules() {
return this._buildActorLinksList(
this.data.data.subacteurs?.vehicules ?? [],
vehicle => {
@@ -3019,12 +3019,12 @@ export class RdDActor extends Actor {
}
/* -------------------------------------------- */
- buildSuivantsList() {
+ listeSuivants() {
return this._buildActorLinksList(this.data.data.subacteurs?.suivants ?? []);
}
/* -------------------------------------------- */
- buildMonturesList() {
+ listeMontures() {
return this._buildActorLinksList(this.data.data.subacteurs?.montures ?? []);
}
diff --git a/module/item-arme.js b/module/item-arme.js
index fa3428a5..0d6ea65d 100644
--- a/module/item-arme.js
+++ b/module/item-arme.js
@@ -1,4 +1,5 @@
import { RdDItemCompetenceCreature } from "./item-competencecreature.js"
+import { RdDCombatManager } from "./rdd-combat.js";
const nomCategorieParade = {
"sans-armes": "Sans arme / armes naturelles",
@@ -30,6 +31,17 @@ export class RdDItemArme extends Item {
return RdDItemArme.mainsNues();
}
+ static computeNiveauArmes(armes, competences) {
+ for (const arme of armes) {
+ arme.data.niveau = RdDItemArme.niveauCompetenceArme(arme, competences);
+ }
+ }
+
+ static niveauCompetenceArme(arme, competences) {
+ const compArme = competences.find(it => it.name == arme.data.competence);
+ return compArme?.data.niveau ?? -8;
+ }
+
/* -------------------------------------------- */
static getNomCategorieParade(arme) {
const categorie = arme?.data ? RdDItemArme.getCategorieParade(arme) : arme;
@@ -38,7 +50,7 @@ export class RdDItemArme extends Item {
/* -------------------------------------------- */
static needArmeResist(armeAttaque, armeParade) {
- if (!armeAttaque || !armeParade){
+ if (!armeAttaque || !armeParade) {
return false;
}
// Epées parant une arme de bois (cf. page 115 ), une résistance est nécessaire
@@ -54,7 +66,7 @@ export class RdDItemArme extends Item {
return arme.data.categorie_parade;
}
// pour compatibilité avec des personnages existants
- if (arme.type == 'competencecreature' || arme.data.categorie == 'creature' ) {
+ if (arme.type == 'competencecreature' || arme.data.categorie == 'creature') {
return arme.data.categorie_parade || (arme.data.isparade ? 'sans-armes' : '');
}
if (!arme.type.match(/arme|competencecreature/)) {
@@ -86,7 +98,7 @@ export class RdDItemArme extends Item {
/* -------------------------------------------- */
static needParadeSignificative(armeAttaque, armeParade) {
- if (!armeAttaque || !armeParade){
+ if (!armeAttaque || !armeParade) {
return false;
}
// categories d'armes à la parade (cf. page 115 )
@@ -145,10 +157,16 @@ export class RdDItemArme extends Item {
}
static isArmeUtilisable(item) {
- return item.type == 'arme' && item.data.equipe && (item.data.resistance > 0 || item.data.portee_courte>0);
+ return item.type == 'arme' && item.data.equipe && (item.data.resistance > 0 || item.data.portee_courte > 0);
}
- static mainsNues(actorData={}) {
+ static ajoutCorpsACorps(armes, competences, carac) {
+ let corpsACorps = competences.find(it => it.name == 'Corps à corps') ?? { data: { niveau: -6 } };
+ let init = RdDCombatManager.calculInitiative(corpsACorps.data.niveau, carac['melee'].value);
+ armes.push(RdDItemArme.mainsNues({ niveau: corpsACorps.data.niveau, initiative: init }));
+ }
+
+ static mainsNues(actorData = {}) {
const mainsNues = {
name: 'Mains nues',
data: {
@@ -163,8 +181,8 @@ export class RdDItemArme extends Item {
}
};
if (actorData) {
- mergeObject( mainsNues.data, actorData, {overwrite:false});
+ mergeObject(mainsNues.data, actorData, { overwrite: false });
}
return mainsNues
}
-}
+}
diff --git a/module/item-competence.js b/module/item-competence.js
index 2f947f17..c7be84c7 100644
--- a/module/item-competence.js
+++ b/module/item-competence.js
@@ -56,11 +56,15 @@ export class RdDItemCompetence extends Item {
return categorieCompetences[category].label;
}
+ static getEsquive(competences) {
+ return { name: 'Esquive', niveau: RdDItemCompetence.findCompetence(competences, 'Esquive')?.data.niveau ?? -6 };
+ }
+
/* -------------------------------------------- */
static isCompetenceArme(competence) {
switch (competence.data.categorie) {
case 'melee':
- return competence.name.toLowerCase() != 'esquive';
+ return competence.name != 'Esquive';
case 'tir':
case 'lancer':
return true;
diff --git a/templates/actor-sheet.html b/templates/actor-sheet.html
index 84b0b5a8..056359c8 100644
--- a/templates/actor-sheet.html
+++ b/templates/actor-sheet.html
@@ -541,6 +541,7 @@
{{!-- hautreve Tab --}}
+ {{log 'Haut reve' hautreve}}
Haut rêve:
@@ -599,7 +600,7 @@
Sorts en Réserve:
- {{#each data.sortReserve as |reserve key|}}
+ {{#each hautreve.sortsReserve as |reserve key|}}
-
{{reserve.sort.name}} - {{reserve.coord}}
@@ -625,7 +626,7 @@
Cases Spéciales:
- {{#each data.caseSpeciales as |casetmr key|}}
+ {{#each hautreve.casesTmr as |casetmr key|}}
-
{{casetmr.name}}