Gestion des signes draconiques #455
@ -95,7 +95,7 @@ export class RdDActorSheet extends ActorSheet {
|
|||||||
caracTotal: RdDCarac.computeTotal(formData.data.carac, formData.data.beaute),
|
caracTotal: RdDCarac.computeTotal(formData.data.carac, formData.data.beaute),
|
||||||
// Mise à jour de l'encombrement total et du prix de l'équipement
|
// Mise à jour de l'encombrement total et du prix de l'équipement
|
||||||
encTotal: await this.actor.computeEncombrementTotalEtMalusArmure(),
|
encTotal: await this.actor.computeEncombrementTotalEtMalusArmure(),
|
||||||
prixTotalEquipement: await this.actor.computePrixTotalEquipement(),
|
prixTotalEquipement: this.actor.computePrixTotalEquipement(),
|
||||||
surprise: RdDBonus.find(this.actor.getSurprise(false)).descr,
|
surprise: RdDBonus.find(this.actor.getSurprise(false)).descr,
|
||||||
fatigue: {
|
fatigue: {
|
||||||
malus: RdDUtility.calculMalusFatigue(formData.data.sante.fatigue.value, formData.data.sante.endurance.max),
|
malus: RdDUtility.calculMalusFatigue(formData.data.sante.fatigue.value, formData.data.sante.endurance.max),
|
||||||
|
@ -89,7 +89,6 @@ export class RdDActor extends Actor {
|
|||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
prepareData() {
|
prepareData() {
|
||||||
super.prepareData();
|
super.prepareData();
|
||||||
|
|
||||||
const actorData = this.data;
|
const actorData = this.data;
|
||||||
|
|
||||||
// Dynamic computing fields
|
// Dynamic computing fields
|
||||||
@ -138,6 +137,7 @@ export class RdDActor extends Actor {
|
|||||||
async _prepareCharacterData(actorData) {
|
async _prepareCharacterData(actorData) {
|
||||||
// Initialize empty items
|
// Initialize empty items
|
||||||
RdDCarac.computeCarac(actorData.data);
|
RdDCarac.computeCarac(actorData.data);
|
||||||
|
this.computeIsHautRevant();
|
||||||
this.computeEncombrementTotalEtMalusArmure();
|
this.computeEncombrementTotalEtMalusArmure();
|
||||||
this.computePrixTotalEquipement();
|
this.computePrixTotalEquipement();
|
||||||
this.computeEtatGeneral();
|
this.computeEtatGeneral();
|
||||||
@ -232,7 +232,7 @@ export class RdDActor extends Actor {
|
|||||||
return Math.floor(this.encTotal ?? 0);
|
return Math.floor(this.encTotal ?? 0);
|
||||||
}
|
}
|
||||||
getPrixTotalEquipement() {
|
getPrixTotalEquipement() {
|
||||||
return Math.floor(this.prixTotalEquipement ?? 0);
|
return Math.floor(Misc.templateData(this).prixTotalEquipement ?? 0);
|
||||||
}
|
}
|
||||||
getSurenc() {
|
getSurenc() {
|
||||||
return Misc.toInt(Misc.templateData(this).compteurs.surenc?.value);
|
return Misc.toInt(Misc.templateData(this).compteurs.surenc?.value);
|
||||||
@ -948,57 +948,67 @@ export class RdDActor extends Actor {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
detectSurEncombrement() {
|
detectSurEncombrement() {
|
||||||
let maxEnc = 0;
|
return Math.max(0, Math.ceil(Number(this.data.encTotal) - this.getEncombrementMax()));
|
||||||
if (this.data.type == 'vehicule')
|
}
|
||||||
maxEnc = Misc.templateData(this).capacite_encombrement;
|
getEncombrementMax() {
|
||||||
else
|
return (this.data.type == 'vehicule')
|
||||||
maxEnc = Misc.templateData(this).attributs.encombrement.value;
|
? Misc.templateData(this).capacite_encombrement
|
||||||
let diffEnc = Number(this.data.encTotal) - Number(maxEnc);
|
: Misc.templateData(this).attributs.encombrement.value;
|
||||||
return Math.max(0, Math.ceil(diffEnc));
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
async computeIsHautRevant() {
|
||||||
|
const tplData = Misc.templateData(this);
|
||||||
|
tplData.attributs.hautrevant.value = this.listItemsData('tete').find(it => Grammar.toLowerCaseNoAccent(it.name) == 'don de haut-reve')
|
||||||
|
? "Haut rêvant"
|
||||||
|
: "";
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async computeEncombrementTotalEtMalusArmure() {
|
async computeEncombrementTotalEtMalusArmure() {
|
||||||
let encTotal = 0;
|
await this.computeMalusArmure();
|
||||||
let newMalusArmure = 0;
|
return this.computeEncombrement();
|
||||||
for (const itemData of this.filterItemsData(it => it.data.encombrement)) {
|
}
|
||||||
if (itemData.type == 'armure' && itemData.data.equipe) { // Armure équipée, intégration du malus armure total
|
|
||||||
newMalusArmure += itemData.data.malus;
|
|
||||||
}
|
|
||||||
// Calcul encombrement
|
|
||||||
if (itemData.data && itemData.data.encombrement != undefined) {
|
|
||||||
if (!Number(itemData.data.encombrement)) itemData.data.encombrement = 0; // Auto-fix
|
|
||||||
if (itemData.data.quantite == undefined) itemData.data.quantite = 1; // Auto-fix
|
|
||||||
if (itemData.data.quantite < 0) itemData.data.quantite = 0; // Auto-fix
|
|
||||||
itemData.data.encTotal = Number(itemData.data.encombrement) * Number(itemData.data.quantite);
|
|
||||||
encTotal += itemData.data.encTotal;
|
|
||||||
} else {
|
|
||||||
itemData.data.encTotal = 0; // Force default enc
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Mise à jour valeur totale et états
|
|
||||||
this.data.encTotal = encTotal;
|
|
||||||
this.detectSurEncombrement();
|
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
computeEncombrement() {
|
||||||
|
Misc.templateData(this).encTotal = this.filterItemsData(it => it.data.encombrement)
|
||||||
|
.map(it => this._calcEncItem(it))
|
||||||
|
.reduce(Misc.sum(), 0);
|
||||||
|
return Misc.templateData(this).encTotal;
|
||||||
|
}
|
||||||
|
|
||||||
|
_calcEncItem(it) {
|
||||||
|
it.data.encombrement = Number(it.data.encombrement ?? 0);
|
||||||
|
it.data.quantite = Math.min(1, Number(it.data.quantite ?? 1));
|
||||||
|
it.data.encTotal = it.data.encombrement * it.data.quantite;
|
||||||
|
return it.data.encTotal;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
async computeMalusArmure() {
|
||||||
|
const newMalusArmure = this.filterItemsData(it => it.type == 'armure' && it.data.equipe)
|
||||||
|
.map(it => it.data.malus ?? 0)
|
||||||
|
.reduce(Misc.sum(), 0);
|
||||||
// Mise à jour éventuelle du malus armure
|
// Mise à jour éventuelle du malus armure
|
||||||
if (newMalusArmure && Misc.templateData(this).attributs?.malusarmure?.value != newMalusArmure) {
|
if (newMalusArmure && Misc.templateData(this).attributs?.malusarmure?.value != newMalusArmure) {
|
||||||
await this.updateAttributeValue("malusarmure", newMalusArmure);
|
await this.updateAttributeValue("malusarmure", newMalusArmure);
|
||||||
}
|
}
|
||||||
return encTotal;
|
return newMalusArmure;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async computePrixTotalEquipement() {
|
computePrixTotalEquipement() {
|
||||||
let prixTotalEquipement = 0;
|
let prixTotalEquipement = 0;
|
||||||
|
|
||||||
// prix total de l'équipement est la somme du cout de chaque équipement multiplié par sa quantité.
|
// prix total de l'équipement est la somme du cout de chaque équipement multiplié par sa quantité.
|
||||||
for (const itemData of this.filterItemsData(it => it?.data.cout)) {
|
for (const itemData of this.filterItemsData(it => it?.data.cout)) {
|
||||||
const cout = Math.min(Number(itemData.data.cout) ?? 0, 0);
|
const cout = Math.min(Number(itemData.data.cout ?? 0), 0);
|
||||||
const quantite = Math.min(Number(itemData.data.quantite) ?? 1, 1);
|
const quantite = Math.min(Number(itemData.data?.quantite ?? 1), 1);
|
||||||
prixTotalEquipement += cout * quantite;
|
prixTotalEquipement += cout * quantite;
|
||||||
}
|
}
|
||||||
// Mise à jour valeur totale de l'équipement
|
// Mise à jour valeur totale de l'équipement
|
||||||
this.prixTotalEquipement = prixTotalEquipement;
|
Misc.templateData(this).prixTotalEquipement = prixTotalEquipement;
|
||||||
return prixTotalEquipement;
|
return prixTotalEquipement;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
File diff suppressed because one or more lines are too long
@ -6,7 +6,7 @@
|
|||||||
"manifestPlusVersion": "1.0.0",
|
"manifestPlusVersion": "1.0.0",
|
||||||
"minimumCoreVersion": "0.7.5",
|
"minimumCoreVersion": "0.7.5",
|
||||||
"compatibleCoreVersion": "0.7.9",
|
"compatibleCoreVersion": "0.7.9",
|
||||||
"templateVersion": 96,
|
"templateVersion": 97,
|
||||||
"author": "LeRatierBretonnien",
|
"author": "LeRatierBretonnien",
|
||||||
"authors": [
|
"authors": [
|
||||||
{
|
{
|
||||||
|
@ -430,6 +430,12 @@
|
|||||||
"value": 0,
|
"value": 0,
|
||||||
"label": "Protection naturelle",
|
"label": "Protection naturelle",
|
||||||
"derivee": false
|
"derivee": false
|
||||||
|
},
|
||||||
|
"hautrevant": {
|
||||||
|
"type": "string",
|
||||||
|
"value": "",
|
||||||
|
"label": "Haut rêvant",
|
||||||
|
"derivee": true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"reve": {
|
"reve": {
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
{{log 'calc' calc}}
|
||||||
|
|
||||||
<form class="{{cssClass}}" autocomplete="off">
|
<form class="{{cssClass}}" autocomplete="off">
|
||||||
|
|
||||||
{{!-- Sheet Header --}}
|
{{!-- Sheet Header --}}
|
||||||
@ -59,9 +61,11 @@
|
|||||||
<span class="gm-only remise-a-neuf"><a title="Remise à neuf"><img class="button-img" src="icons/svg/regen.svg" alt="Remise à neuf"/></a></span>
|
<span class="gm-only remise-a-neuf"><a title="Remise à neuf"><img class="button-img" src="icons/svg/regen.svg" alt="Remise à neuf"/></a></span>
|
||||||
<span id="dormir-une-heure"><a title="Dormir une heure"><img class="button-img" src="icons/svg/sleep.svg" alt="Dormir une heure"/></a></span>
|
<span id="dormir-une-heure"><a title="Dormir une heure"><img class="button-img" src="icons/svg/sleep.svg" alt="Dormir une heure"/></a></span>
|
||||||
<span id="dormir-chateau-dormant"><a title="Chateau Dormant"><img class="button-img" src="systems/foundryvtt-reve-de-dragon/icons/heures/hd12.svg" alt="Chateau Dormant"/></a></span>
|
<span id="dormir-chateau-dormant"><a title="Chateau Dormant"><img class="button-img" src="systems/foundryvtt-reve-de-dragon/icons/heures/hd12.svg" alt="Chateau Dormant"/></a></span>
|
||||||
|
{{#if (eq data.attributs.hautrevant.value 'Haut rêvant')}}
|
||||||
<span id="monte-tmr"><a title="Montée dans les Terres Médianes !"><img class="button-img" src="systems/foundryvtt-reve-de-dragon/styles/img/ui/icon-tmr-normal.svg" alt="Montée dans les Terres Médianes !"/></a></span>
|
<span id="monte-tmr"><a title="Montée dans les Terres Médianes !"><img class="button-img" src="systems/foundryvtt-reve-de-dragon/styles/img/ui/icon-tmr-normal.svg" alt="Montée dans les Terres Médianes !"/></a></span>
|
||||||
<span id="monte-tmr-rapide"><a title="Montée accélérée dans les Terres Médianes !"><img class="button-img" src="systems/foundryvtt-reve-de-dragon/styles/img/ui/icon-tmr-rapide.svg" alt="Montée accélérée dans les Terres Médianes !"/></a></span>
|
<span id="monte-tmr-rapide"><a title="Montée accélérée dans les Terres Médianes !"><img class="button-img" src="systems/foundryvtt-reve-de-dragon/styles/img/ui/icon-tmr-rapide.svg" alt="Montée accélérée dans les Terres Médianes !"/></a></span>
|
||||||
<span id="visu-tmr"><a title="Regarder les Terres Médianes"><img class="button-img" src="systems/foundryvtt-reve-de-dragon/styles/img/ui/icon-tmr-view.svg" alt="Regarder les Terres Médianes"/></a></span>
|
<span id="visu-tmr"><a title="Regarder les Terres Médianes"><img class="button-img" src="systems/foundryvtt-reve-de-dragon/styles/img/ui/icon-tmr-view.svg" alt="Regarder les Terres Médianes"/></a></span>
|
||||||
|
{{/if}}
|
||||||
</div>
|
</div>
|
||||||
<div class="flexrow">
|
<div class="flexrow">
|
||||||
<span class="tooltip">Malus de fatigue : {{calc.fatigue.malus}}
|
<span class="tooltip">Malus de fatigue : {{calc.fatigue.malus}}
|
||||||
@ -295,14 +299,17 @@
|
|||||||
{{/each}}
|
{{/each}}
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
{{#if (eq data.attributs.hautrevant.value 'Haut rêvant')}}
|
||||||
<header class="competence-header flexrow">
|
<header class="competence-header flexrow">
|
||||||
<span class="competence-title">Draconic</span>
|
<span class="competence-title">Draconic</span>
|
||||||
</header>
|
</header>
|
||||||
<ul class="item-list alterne-list">
|
<ul class="item-list alterne-list">
|
||||||
{{#each competenceByCategory.draconic as |comp key|}}
|
{{#each competenceByCategory.draconic as |comp key|}}
|
||||||
{{> "systems/foundryvtt-reve-de-dragon/templates/actor-sheet-competence-partial.html" comp}}
|
{{> "systems/foundryvtt-reve-de-dragon/templates/actor-sheet-competence-partial.html" comp}}
|
||||||
{{/each}}
|
{{/each}}
|
||||||
</ul>
|
</ul>
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<ul class="item-list">
|
<ul class="item-list">
|
||||||
<li class="item flexrow">
|
<li class="item flexrow">
|
||||||
@ -548,6 +555,7 @@
|
|||||||
<div>
|
<div>
|
||||||
<h3>Haut rêve:</h3>
|
<h3>Haut rêve:</h3>
|
||||||
<ul class="item-list">
|
<ul class="item-list">
|
||||||
|
{{#if (eq data.attributs.hautrevant.value 'Haut rêvant')}}
|
||||||
<li class="item flexrow">
|
<li class="item flexrow">
|
||||||
<span class="competence-label">Position en TMR :</span>
|
<span class="competence-label">Position en TMR :</span>
|
||||||
<span>
|
<span>
|
||||||
@ -558,6 +566,7 @@
|
|||||||
{{/if}}
|
{{/if}}
|
||||||
</span>
|
</span>
|
||||||
</li>
|
</li>
|
||||||
|
{{/if}}
|
||||||
<li class="item flexrow">
|
<li class="item flexrow">
|
||||||
<span class="competence-label">Seuil de Rêve :</span>
|
<span class="competence-label">Seuil de Rêve :</span>
|
||||||
<span>
|
<span>
|
||||||
@ -581,6 +590,7 @@
|
|||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<hr>
|
<hr>
|
||||||
|
{{#if (eq data.attributs.hautrevant.value 'Haut rêvant')}}
|
||||||
<div>
|
<div>
|
||||||
<h3>Sorts:</h3>
|
<h3>Sorts:</h3>
|
||||||
<ul class="item-list">
|
<ul class="item-list">
|
||||||
@ -649,9 +659,10 @@
|
|||||||
{{/each}}
|
{{/each}}
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
<hr>
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
{{!-- Queues, Souffles, Tetes, Ombre --}}
|
{{!-- Queues, Souffles, Tetes, Ombre --}}
|
||||||
<hr>
|
|
||||||
<h3>Queues:</h3>
|
<h3>Queues:</h3>
|
||||||
<ul class="flex-group-left">
|
<ul class="flex-group-left">
|
||||||
{{#each queues as |queue key|}}
|
{{#each queues as |queue key|}}
|
||||||
|
Loading…
Reference in New Issue
Block a user