This commit is contained in:
2020-12-11 08:32:46 +01:00
19 changed files with 271 additions and 207 deletions

View File

@ -17,6 +17,7 @@ import { RdDRollTables } from "./rdd-rolltables.js";
import { ChatUtility } from "./chat-utility.js";
import { RdDItemSort } from "./item-sort.js";
import { Grammar } from "./grammar.js";
import { RdDCalendrier } from "./rdd-calendrier.js";
export class RdDActor extends Actor {
@ -1466,10 +1467,7 @@ export class RdDActor extends Actor {
/* -------------------------------------------- */
async rollAppelChance( )
{
let rollData = {
selectedCarac: this.getCaracByName('chance-actuelle'),
diffConditions: this.ajustementAstrologique()
}
let rollData = { selectedCarac: this.getCaracByName('chance-actuelle') };
const dialog = await RdDRoll.create(this, rollData,
{ html: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-carac.html'},
@ -1478,15 +1476,14 @@ export class RdDActor extends Actor {
label: 'Appel à la chance',
callbacks: [
this._createCallbackExperience(),
{ action: this._appelChanceResult }
{ action: r => this._appelChanceResult(r) }
]
}
);
dialog.render(true);
}
/* -------------------------------------------- */
_appelChanceResult(rollData) {
async _appelChanceResult(rollData) {
const message = {
user: game.user._id,
alias: this.name,
@ -1494,7 +1491,7 @@ export class RdDActor extends Actor {
};
if (rollData.rolled.isSuccess) {
message.content += "<br>Un point de chance est dépensée, l'action peut être retentée"
this.chanceActuelleIncDec(-1)
await this.chanceActuelleIncDec(-1)
}
ChatMessage.create(message);
}
@ -1508,8 +1505,8 @@ export class RdDActor extends Actor {
/* -------------------------------------------- */
ajustementAstrologique() {
//TODO: selon heure et heure de naissance...
return 0;
// selon l'heure de naissance...
return game.system.rdd.calendrier.getAjustementAstrologique(this.data.data.heure);
}
/* -------------------------------------------- */

View File

@ -1,21 +1,23 @@
/* -------------------------------------------- */
import { RdDCalendrierEditeur } from "./rdd-calendrier-editeur.js";
import { RdDAstrologieEditeur } from "./rdd-astrologie-editeur.js";
import { HtmlUtility } from "./html-utility.js";
/* -------------------------------------------- */
const dossierIconesHeures = 'systems/foundryvtt-reve-de-dragon/icons/heures/'
const heuresList = [ "vaisseau", "sirene", "faucon", "couronne", "dragon", "epees", "lyre", "serpent", "poissonacrobate", "araignee", "roseau", "chateaudormant" ];
const heuresDef = { "vaisseau": { label: "Vaisseau", lettreFont: 'v', saison: "printemps" },
"sirene": { label: "Sirène", lettreFont: 'S', saison: "printemps"},
"faucon": {label: "Faucon", lettreFont: 'f', saison: "printemps"},
"couronne": {label: "Couronne", lettreFont: 'C', saison: "ete"},
"dragon": {label: "Dragon", lettreFont: 'd', saison: "ete"},
"epees": {label: "Epées", lettreFont: 'e', saison: "ete"},
"lyre": {label: "Lyre", lettreFont: 'l', saison: "automne"},
"serpent": {label: "Serpent", lettreFont: 's', saison: "automne"},
"poissonacrobate": {label: "Poisson Acrobate", lettreFont: 'p', saison: "automne"},
"araignee": {label: "Araignée", lettreFont: 'a', saison: "hiver"},
"roseau": {label: "Roseau", lettreFont: 'r', saison: "hiver"},
"chateaudormant": {label: "Château Dormant", lettreFont: 'c', saison: "hiver"}
const heuresDef = { "vaisseau": { label: "Vaisseau", lettreFont: 'v', saison: "printemps", heure: 0, icon: 'hd01.svg' },
"sirene": { label: "Sirène", lettreFont: 'S', saison: "printemps", heure: 1, icon: 'hd02.svg' },
"faucon": { label: "Faucon", lettreFont: 'f', saison: "printemps", heure: 2, icon: 'hd03.svg' },
"couronne": { label: "Couronne", lettreFont: 'C', saison: "ete", heure: 3, icon: 'hd04.svg' },
"dragon": { label: "Dragon", lettreFont: 'd', saison: "ete", heure: 4, icon: 'hd05.svg' },
"epees": { label: "Epées", lettreFont: 'e', saison: "ete", heure: 5, icon: 'hd06.svg' },
"lyre": { label: "Lyre", lettreFont: 'l', saison: "automne", heure: 6, icon: 'hd07.svg' },
"serpent": { label: "Serpent", lettreFont: 's', saison: "automne", heure: 7, icon: 'hd08.svg' },
"poissonacrobate": { label: "Poisson Acrobate", lettreFont: 'p', saison: "automne", heure: 8, icon: 'hd09.svg' },
"araignee": { label: "Araignée", lettreFont: 'a', saison: "hiver", heure: 9, icon: 'hd10.svg' },
"roseau": { label: "Roseau", lettreFont: 'r', saison: "hiver", heure: 10, icon: 'hd11.svg' },
"chateaudormant": { label: "Château Dormant", lettreFont: 'c', saison: "hiver", heure: 11, icon: 'hd12.svg' }
};
const saisonsDef = { "printemps": { label: "Printemps"},
"ete": { label: "Eté"},
@ -83,7 +85,7 @@ export class RdDCalendrier extends Application {
}
/* -------------------------------------------- */
ajouterNombreAstral(index) {
ajouterNombreAstral(index) {
return {
nombreAstral: new Roll("1d12").roll().total,
valeursFausses: [],
@ -182,20 +184,44 @@ export class RdDCalendrier extends Application {
fillCalendrierData( data = {} ) {
let moisKey = heuresList[this.calendrier.moisRdD];
let heureKey = heuresList[this.calendrier.heureRdD];
const mois = heuresDef[moisKey];
const heure = heuresDef[heureKey];
//console.log(moisKey, heureKey);
data.heureKey = heureKey;
data.moisKey = moisKey;
data.nomMois = heuresDef[moisKey].label; // heures et mois nommés identiques
data.jourMois = this.calendrier.jour + 1;
data.nomHeure = heuresDef[heureKey].label;
data.nomSaison = saisonsDef[heuresDef[moisKey].saison].label;
data.nomMois = mois.label; // heures et mois nommés identiques
data.iconMois = dossierIconesHeures + mois.icon;
data.nomHeure = heure.label;
data.iconHeure = dossierIconesHeures + heure.icon;
data.nomSaison = saisonsDef[mois.saison].label;
data.heuresRelative = this.calendrier.heuresRelative;
data.minutesRelative = this.calendrier.minutesRelative;
data.lettreFont = heuresDef[heureKey].lettreFont;
data.lettreFont = heure.lettreFont;
data.isGM = game.user.isGM;
return data;
}
getAjustementAstrologique(heureNaissance)
{
let hn = heuresDef[heureNaissance].heure;
let chiffreAstral = this.getCurrentNombreAstral();
let heureCourante = this.calendrier.heureRdD;
let ecartChance = (hn + chiffreAstral - heureCourante)%12;
console.log("ajustementAstrologique", heureNaissance, hn, chiffreAstral, heureCourante, ecartChance);
switch (ecartChance)
{
case 0: return 4;
case 4: case 8: return 2;
case 6: return -4;
case 3: case 9: return -2;
}
return 0;
}
/* -------------------------------------------- */
getData() {
let data = super.getData();
@ -233,10 +259,9 @@ export class RdDCalendrier extends Application {
let data = this.fillCalendrierData( );
// Rebuild data
document.getElementById("calendar--move-handle").innerHTML = `Jour ${data.jourMois} de ${data.nomMois} (${data.nomSaison})` + " - NA: "+this.getCurrentNombreAstral();
document.getElementById("calendar-heure-texte").innerHTML = ` - ${data.nomHeure}`;
document.getElementById("calendar-heure-texte").innerHTML = `${data.nomHeure}`;
document.getElementById("calendar-time").innerHTML = `${data.heuresRelative}:${data.minutesRelative}`;
document.getElementById("calendar-icone-heure").innerHTML = data.lettreFont;
document.getElementById("calendar-heure-img").src = data.iconHeure;
}
/* -------------------------------------------- */
@ -288,6 +313,8 @@ export class RdDCalendrier extends Application {
activateListeners(html) {
super.activateListeners(html);
HtmlUtility._showControlWhen(".gm-only", game.user.isGM);
this.updateDisplay();
html.find('#calendar-btn-1min').click(ev => {

View File

@ -42,7 +42,8 @@ export class RdDRoll extends Dialog {
surencMalusApply: false,
isNatation: rollData.competence ? rollData.competence.name.toLowerCase().includes("natation") : false,
useEncForNatation: false,
encValueForNatation: actor.encombrementTotal ? Math.floor(actor.encombrementTotal) : 0
encValueForNatation: actor.encombrementTotal ? Math.floor(actor.encombrementTotal) : 0,
ajustementAstrologique: actor.ajustementAstrologique()
},
{ overwrite: false });
}
@ -203,7 +204,7 @@ export class RdDRoll extends Dialog {
let malusEnc = (rollData.surencMalusApply) ? rollData.surencMalusValue : 0;
let diffLibre = Misc.toInt(rollData.diffLibre);
let malusEncNatation = (rollData.useEncForNatation) ? -rollData.encValueForNatation : 0;
let ajustementChance = rollData.selectedCarac.label.toLowerCase().includes('chance') ? rollData.ajustementAstrologique : 0;
// Gestion malus armure
let malusArmureValue = 0;
if (rollData.malusArmureValue != 0 && (rollData.selectedCarac.label == "Agilité" || rollData.selectedCarac.label == "Dérobée")) {
@ -213,6 +214,7 @@ export class RdDRoll extends Dialog {
$("#addon-message").text("");
}
let diffCompetence = 0;
if (rollData.competence) {
diffCompetence = Misc.toInt(rollData.competence.data.niveau);
@ -222,7 +224,7 @@ export class RdDRoll extends Dialog {
diffLibre = RdDItemSort.getDifficulte(rollData.selectedSort, diffLibre);
}
return etat + diffCompetence + diffLibre + diffConditions + malusEnc + malusEncNatation + malusArmureValue;
return etat + diffCompetence + diffLibre + diffConditions + malusEnc + malusEncNatation + malusArmureValue + ajustementChance;
}
/* -------------------------------------------- */