Sync
This commit is contained in:
parent
e74031be0b
commit
349f8fc875
@ -271,6 +271,10 @@ export class RdDActorSheet extends ActorSheet {
|
||||
this.actor.rollAppelChance();
|
||||
});
|
||||
|
||||
html.find('#jet-astrologie').click((event) => {
|
||||
this.actor.astrologieNombresAstraux();
|
||||
});
|
||||
|
||||
// Roll Skill
|
||||
html.find('.competence-label a').click((event) => {
|
||||
let compName = event.currentTarget.text;
|
||||
|
@ -10,7 +10,7 @@ import { RdDRollDialogEthylisme } from "./rdd-roll-ethylisme.js";
|
||||
import { RdDRoll } from "./rdd-roll.js";
|
||||
import { RdDTMRDialog } from "./rdd-tmr-dialog.js";
|
||||
import { Misc } from "./misc.js";
|
||||
|
||||
import { RdDAstrologieJoueur } from "./rdd-astrologie-joueur.js";
|
||||
import { RdDResolutionTable } from "./rdd-resolution-table.js";
|
||||
import { RdDDice } from "./rdd-dice.js";
|
||||
import { RdDRollTables } from "./rdd-rolltables.js";
|
||||
@ -1257,6 +1257,7 @@ export class RdDActor extends Actor {
|
||||
};
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async _appliquerAjoutExperience(rollData) {
|
||||
// TODO: si pas de compétence, minimum 1 pour carac
|
||||
// TODO: appliquer l'expérience automatiquement
|
||||
@ -1441,20 +1442,18 @@ export class RdDActor extends Actor {
|
||||
}
|
||||
console.log("rollCompetence !!!", rollData.competence);
|
||||
|
||||
const dialog = await RdDRoll.create(this, rollData,
|
||||
{html: 'systems/foundryvtt-reve-de-dragon/templates/dialog-competence.html'},
|
||||
{
|
||||
const dialog = await RdDRoll.create(this, rollData, {html: 'systems/foundryvtt-reve-de-dragon/templates/dialog-competence.html'}, {
|
||||
name: 'jet-competence',
|
||||
label: 'Jet ' +Grammar.apostrophe('de', name),
|
||||
callbacks: [
|
||||
this._createCallbackExperience(),
|
||||
{ action: this._competenceResult }
|
||||
]
|
||||
}
|
||||
);
|
||||
} );
|
||||
dialog.render(true);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
_competenceResult(rollData) {
|
||||
ChatUtility.chatWithRollMode({
|
||||
content: "<strong>Test : " + rollData.selectedCarac.label + " / " + rollData.competence.name + "</strong>"
|
||||
@ -1486,6 +1485,7 @@ export class RdDActor extends Actor {
|
||||
dialog.render(true);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
_appelChanceResult(rollData) {
|
||||
const message = {
|
||||
user: game.user._id,
|
||||
@ -1512,6 +1512,13 @@ export class RdDActor extends Actor {
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
astrologieNombresAstraux( ) {
|
||||
// Afficher l'interface spéciale
|
||||
const myDialog = RdDAstrologieJoueur.create( this, {} );
|
||||
myDialog.render(true);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getCaracByName(caracName) {
|
||||
switch (caracName)
|
||||
@ -1580,6 +1587,7 @@ export class RdDActor extends Actor {
|
||||
}
|
||||
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async rollCompetenceCreature( compName ) {
|
||||
let competence = RdDUtility.findCompetence( this.data.items, compName);
|
||||
|
||||
|
@ -9,6 +9,7 @@ export class ChatUtility {
|
||||
ChatUtility.createChatMessage(chatOptions, rollMode, name);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static createChatMessage( chatOptions, rollMode, name) {
|
||||
switch (rollMode) {
|
||||
case "blindroll": // GM only
|
||||
@ -29,6 +30,7 @@ export class ChatUtility {
|
||||
ChatMessage.create(chatOptions);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static prepareChatMessage( rollMode, name) {
|
||||
return {
|
||||
user: game.user._id,
|
||||
@ -36,6 +38,7 @@ export class ChatUtility {
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static getWhisperRecipients( rollMode, name) {
|
||||
switch (rollMode) {
|
||||
case "blindroll": return ChatUtility.getUsers(user => user.isGM);
|
||||
@ -45,15 +48,18 @@ export class ChatUtility {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static getWhisperRecipientsAndGMs(name) {
|
||||
return ChatMessage.getWhisperRecipients(name)
|
||||
.concat(this.getUsers(user => user.isGM));
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static getUsers(filter) {
|
||||
return game.users.filter(filter).map(user => user.data._id);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static blindMessageToGM(chatOptions) {
|
||||
let chatGM = duplicate(chatOptions);
|
||||
chatGM.whisper = ChatUtility.getUsers(user => user.isGM);
|
||||
@ -62,6 +68,7 @@ export class ChatUtility {
|
||||
game.socket.emit("system.foundryvtt-reve-de-dragon", { msg: "msg_gm_chat_message", data: chatGM });
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static handleGMChatMessage(data) {
|
||||
console.log("blindMessageToGM", data);
|
||||
if (game.user.isGM) { // message privé pour GM only
|
||||
|
@ -10,12 +10,12 @@ export class RdDAstrologieEditeur extends Dialog {
|
||||
constructor(html, calendrier, calendrierData) {
|
||||
|
||||
let myButtons = {
|
||||
saveButton: { label: "Enregistrer", callback: html => this.fillData() }
|
||||
saveButton: { label: "Fermer", callback: html => this.fillData() }
|
||||
};
|
||||
|
||||
// Common conf
|
||||
let dialogConf = { content: html, title: "Editeur d'Astrologie", buttons: myButtons, default: "saveButton" };
|
||||
let dialogOptions = { classes: ["rdddialog"], width: 800, height: 300, 'z-index': 99999 }
|
||||
let dialogOptions = { classes: ["rdddialog"], width: 600, height: 300, 'z-index': 99999 }
|
||||
super(dialogConf, dialogOptions)
|
||||
|
||||
this.calendrier = calendrier;
|
||||
|
53
module/rdd-astrologie-joueur.js
Normal file
53
module/rdd-astrologie-joueur.js
Normal file
@ -0,0 +1,53 @@
|
||||
import { Misc } from "./misc.js";
|
||||
|
||||
/**
|
||||
* Extend the base Dialog entity by defining a custom window to perform roll.
|
||||
* @extends {Dialog}
|
||||
*/
|
||||
export class RdDAstrologieJoueur extends Dialog {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async create(actor, dialogConfig) {
|
||||
|
||||
let data = { nombres: actor.data.items.filter( (item) => item.type == 'nombreastral')
|
||||
}
|
||||
const html = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/dialog-astrologie-joueur.html', data);
|
||||
let options = { classes: ["rdddialog"], width: 600, height: 500, 'z-index': 99999 };
|
||||
if (dialogConfig.options) {
|
||||
mergeObject(options, dialogConfig.options, { overwrite: true })
|
||||
}
|
||||
return new RdDAstrologieJoueur(html, actor, data);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
constructor(html, actor, data ) {
|
||||
|
||||
let myButtons = {
|
||||
saveButton: { label: "Fermer", callback: html => this.fillData() }
|
||||
};
|
||||
|
||||
// Get all n
|
||||
// Common conf
|
||||
let dialogConf = { content: html, title: "Nombres Astraux", buttons: myButtons, default: "saveButton" };
|
||||
let dialogOptions = { classes: ["rdddialog"], width: 600, height: 300, 'z-index': 99999 } ;
|
||||
super(dialogConf, dialogOptions);
|
||||
|
||||
this.actor = actor;
|
||||
this.dataNombreAstral = duplicate(data);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
fillData() {
|
||||
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
activateListeners(html) {
|
||||
super.activateListeners(html);
|
||||
|
||||
$(function () {
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -23,7 +23,7 @@ const saisonsDef = { "printemps": { label: "Printemps"},
|
||||
"hiver": { label: "Hiver"}
|
||||
};
|
||||
const RDD_JOUR_PAR_MOIS = 28;
|
||||
const MAX_NOMBRE_ASTRAL = 30;
|
||||
const MAX_NOMBRE_ASTRAL = 12;
|
||||
|
||||
/* -------------------------------------------- */
|
||||
export class RdDCalendrier extends Application {
|
||||
@ -38,7 +38,7 @@ export class RdDCalendrier extends Application {
|
||||
this.calendrier.heuresRelative = 0;
|
||||
this.calendrier.minutesRelative = 0;
|
||||
this.calendrier.moisRdD = 0; // Index dans heuresList
|
||||
this.calendrier.jour = 1;
|
||||
this.calendrier.jour = 0;
|
||||
if ( game.user.isGM) { // Uniquement si GM
|
||||
game.settings.set("foundryvtt-reve-de-dragon", "calendrier", this.calendrier );
|
||||
}
|
||||
@ -72,9 +72,9 @@ export class RdDCalendrier extends Application {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getDateFromIndex( index ) {
|
||||
let month = Math.ceil(index / 28);
|
||||
let day = index - (month*28);
|
||||
return day+"/"+heuresList[month];
|
||||
let month = Math.floor(index / 28);
|
||||
let day = (index - (month*28)) + 1;
|
||||
return day+" "+heuresList[month];
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@ -94,29 +94,34 @@ export class RdDCalendrier extends Application {
|
||||
/* -------------------------------------------- */
|
||||
getCurrentNombreAstral() {
|
||||
let index = this.getCurrentDayIndex();
|
||||
return this.listeNombreAstral[index].nombreAstral;
|
||||
let astralData = this.listeNombreAstral.find( (nombreAstral, i) => nombreAstral.index == index );
|
||||
return astralData.nombreAstral || "N/A";
|
||||
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
rebuildListeNombreAstral() {
|
||||
// Auto-create if needed
|
||||
if ( this.listeNombreAstral == undefined)
|
||||
this.listeNombreAstral = {};
|
||||
this.listeNombreAstral = [];
|
||||
|
||||
// Nettoyage des nombres astraux anciens
|
||||
let jourCourant = this.getCurrentDayIndex();
|
||||
let keys = Object.keys(this.listeNombreAstral);
|
||||
for ( let jourIndex of keys) {
|
||||
if ( Number(jourIndex) < jourCourant) {
|
||||
this.listeNombreAstral[jourIndex] = undefined;
|
||||
}
|
||||
}
|
||||
// A partir du jour courant, génération des nombres avec gestion des trous potentiels
|
||||
for (let jourIndex = jourCourant; jourIndex<jourCourant+MAX_NOMBRE_ASTRAL; jourIndex++) {
|
||||
if ( this.listeNombreAstral[jourIndex] == undefined) {
|
||||
this.listeNombreAstral[jourIndex] = this.ajouterNombreAstral(jourIndex);
|
||||
let newList = this.listeNombreAstral.filter( (nombreAstral, i) => nombreAstral.index >= jourCourant );
|
||||
//console.log("LSTES", this.listeNombreAstral, newList );
|
||||
|
||||
let lastDay = jourCourant;
|
||||
for (let i=0; i < MAX_NOMBRE_ASTRAL; i++) {
|
||||
let nombreAstral = newList[i];
|
||||
if ( nombreAstral ) {
|
||||
lastDay = nombreAstral.index + 1;
|
||||
} else {
|
||||
newList.push( this.ajouterNombreAstral( lastDay) );
|
||||
lastDay += 1;
|
||||
}
|
||||
}
|
||||
this.listeNombreAstral = newList;
|
||||
|
||||
game.settings.set("foundryvtt-reve-de-dragon", "liste-nombre-astral", this.listeNombreAstral );
|
||||
}
|
||||
|
||||
@ -147,14 +152,14 @@ export class RdDCalendrier extends Application {
|
||||
/* -------------------------------------------- */
|
||||
incrementerJour( ) {
|
||||
this.calendrier.jour += 1;
|
||||
if ( this.calendrier.jour > RDD_JOUR_PAR_MOIS) {
|
||||
if ( this.calendrier.jour >= RDD_JOUR_PAR_MOIS) {
|
||||
this.calendrier.jour -= RDD_JOUR_PAR_MOIS;
|
||||
if ( this.calendrier.jour <= 0)
|
||||
this.calendrier.jour = 1;
|
||||
this.calendrier.jour = 0;
|
||||
this.calendrier.moisRdD += 1;
|
||||
// Reconstruire les nombres astraux
|
||||
this.rebuildListeNombreAstral();
|
||||
}
|
||||
this.rebuildListeNombreAstral();
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@ -181,7 +186,7 @@ export class RdDCalendrier extends Application {
|
||||
data.heureKey = heureKey;
|
||||
data.moisKey = moisKey;
|
||||
data.nomMois = heuresDef[moisKey].label; // heures et mois nommés identiques
|
||||
data.jourMois = this.calendrier.jour;
|
||||
data.jourMois = this.calendrier.jour + 1;
|
||||
data.nomHeure = heuresDef[heureKey].label;
|
||||
data.nomSaison = saisonsDef[heuresDef[moisKey].saison].label;
|
||||
data.heuresRelative = this.calendrier.heuresRelative;
|
||||
@ -238,7 +243,7 @@ export class RdDCalendrier extends Application {
|
||||
saveEditeur( calendrierData ) {
|
||||
this.calendrier.heuresRelative = Number(calendrierData.heuresRelative);
|
||||
this.calendrier.minutesRelative = Number(calendrierData.minutesRelative);
|
||||
this.calendrier.jour = Number(calendrierData.jourMois);
|
||||
this.calendrier.jour = Number(calendrierData.jourMois) - 1;
|
||||
this.calendrier.moisRdD = heuresList.findIndex(mois => mois === calendrierData.moisKey);
|
||||
this.calendrier.heureRdD = heuresList.findIndex(heure => heure === calendrierData.heureKey);; // Index dans heuresList
|
||||
game.settings.set("foundryvtt-reve-de-dragon", "calendrier", duplicate(this.calendrier) );
|
||||
@ -264,18 +269,18 @@ export class RdDCalendrier extends Application {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async showAstrologieEditor() {
|
||||
let calendrierData = duplicate( this.fillCalendrierData( ) );
|
||||
calendrierData.astrologieData = duplicate( this.listeNombreAstral );
|
||||
for (let index in calendrierData.astrologieData ) {
|
||||
let astralData = calendrierData.astrologieData[index];
|
||||
astralData.humanDate = this.getDateFromIndex( index );
|
||||
let calendrierData = duplicate( this.fillCalendrierData( ) );
|
||||
let astrologieArray = [];
|
||||
for (let astralData of this.listeNombreAstral ) {
|
||||
astralData.humanDate = this.getDateFromIndex( astralData.index );
|
||||
astrologieArray.push( duplicate(astralData ) );
|
||||
}
|
||||
if ( this.astrologieEditeur == undefined ) {
|
||||
let html = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/calendar-astrologie-template.html', calendrierData );
|
||||
this.astrologieEditeur = new RdDAstrologieEditeur(html, this, calendrierData )
|
||||
}
|
||||
this.astrologieEditeur.updateData( calendrierData );
|
||||
this.astrologieEditeur.render(true);
|
||||
//console.log("ASTRO", astrologieArray);
|
||||
calendrierData.astrologieData = astrologieArray;
|
||||
let html = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/calendar-astrologie-template.html', calendrierData );
|
||||
let astrologieEditeur = new RdDAstrologieEditeur(html, this, calendrierData )
|
||||
astrologieEditeur.updateData( calendrierData );
|
||||
astrologieEditeur.render(true);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
|
@ -22,7 +22,7 @@ export class RdDRollDialog extends Dialog {
|
||||
else {
|
||||
myButtons = {
|
||||
rollButton: { label: "Lancer", callback: html => this.actor.performRoll(this.rollData) }
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
// Common conf
|
||||
|
@ -7,9 +7,10 @@ import { RdDResolutionTable } from "./rdd-resolution-table.js";
|
||||
* Extend the base Dialog entity to select roll parameters
|
||||
* @extends {Dialog}
|
||||
*/
|
||||
|
||||
/* -------------------------------------------- */
|
||||
export class RdDRoll extends Dialog {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async create(actor, rollData, dialogConfig, ...actions) {
|
||||
|
||||
RdDRoll._ensureCorrectActions(actions);
|
||||
@ -24,6 +25,7 @@ export class RdDRoll extends Dialog {
|
||||
return new RdDRoll(actor, rollData, html, options, actions);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static _setDefaultOptions(actor, rollData) {
|
||||
|
||||
mergeObject(rollData,
|
||||
@ -45,6 +47,7 @@ export class RdDRoll extends Dialog {
|
||||
{ overwrite: false });
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static _ensureCorrectActions(actions) {
|
||||
if (actions.length == 0) {
|
||||
throw 'No action defined';
|
||||
@ -56,6 +59,7 @@ export class RdDRoll extends Dialog {
|
||||
});
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
constructor(actor, rollData, html, options, actions) {
|
||||
let conf = {
|
||||
title: actions[0].label,
|
||||
@ -73,9 +77,9 @@ export class RdDRoll extends Dialog {
|
||||
this.rollData = rollData;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async onAction(action, html) {
|
||||
await RdDResolutionTable.rollData(this.rollData);
|
||||
|
||||
console.log("RdDRoll -=>", this.rollData, this.rollData.rolled);
|
||||
|
||||
if (action.callbacks)
|
||||
|
@ -178,6 +178,7 @@ export class RdDUtility {
|
||||
'systems/foundryvtt-reve-de-dragon/templates/dialog-tmr.html',
|
||||
'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-surenc.html',
|
||||
'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-natation.html',
|
||||
'systems/foundryvtt-reve-de-dragon/templates/dialog-astrologie-joueur.html',
|
||||
// Calendrier
|
||||
'systems/foundryvtt-reve-de-dragon/templates/calendar-template.html',
|
||||
'systems/foundryvtt-reve-de-dragon/templates/calendar-editor-template.html',
|
||||
|
@ -687,6 +687,7 @@
|
||||
},
|
||||
"nombreastral": {
|
||||
"value": 0,
|
||||
"istrue": false,
|
||||
"jourindex": 1
|
||||
},
|
||||
"monnaie": {
|
||||
|
@ -540,6 +540,9 @@
|
||||
{{/if}}
|
||||
</span>
|
||||
</li>
|
||||
<li class="item flexrow" >
|
||||
<span class="competence-label"><a id="jet-astrologie">Astrologie : Nombres Astraux</a></span>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div>
|
||||
|
@ -9,13 +9,18 @@
|
||||
<section class="sheet-body">
|
||||
<div class="form-group">
|
||||
<label for="astralList">Nombres Astraux</label>
|
||||
<table>
|
||||
<table border=1>
|
||||
<tr>
|
||||
{{#each astrologieData as |nombreData key|}}
|
||||
<td>{{nombreData.humanDate}} - {{nombreData.nombreAstral}}</td>
|
||||
<td align="center">{{nombreData.humanDate}}</td>
|
||||
{{/each}}
|
||||
</tr>
|
||||
</table>
|
||||
<tr>
|
||||
{{#each astrologieData as |nombreData key|}}
|
||||
<td align="center">{{nombreData.nombreAstral}}</td>
|
||||
{{/each}}
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
27
templates/dialog-astrologie-joueur.html
Normal file
27
templates/dialog-astrologie-joueur.html
Normal file
@ -0,0 +1,27 @@
|
||||
<form class="{{cssClass}}" autocomplete="off">
|
||||
<header class="sheet-header">
|
||||
<div class="header-fields">
|
||||
<h1 class="charname">Astrologie</h1>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
{{!-- Sheet Body --}}
|
||||
<section class="sheet-body">
|
||||
<div class="form-group">
|
||||
<label for="astralList">Nombres Astraux</label>
|
||||
<table border=1>
|
||||
<tr>
|
||||
{{#each astrologieData as |nombreData key|}}
|
||||
<td align="center">{{nombreData.humanDate}}</td>
|
||||
{{/each}}
|
||||
</tr>
|
||||
<tr>
|
||||
{{#each astrologieData as |nombreData key|}}
|
||||
<td align="center">{{nombreData.nombreAstral}}</td>
|
||||
{{/each}}
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
</form>
|
Loading…
Reference in New Issue
Block a user