509b7f97dc
Utilisation de system dans les data de formulaire pour tous les Item/Actor (à la base, ou les sous-éléments) Corrections sur les sorts en réserve (ce ne sont pas des Item) Petites améliorations: * `actor.itemTypes[type]` revient à faire (sans besoin de filtrer) `actor.items.filter(it => it.type == type)` * dans les ItemSheet, this.object et this.document remplacés par this.item * dans les ActorSheet, this.object et this.document remplacés par this.actor Quelques corrections en plus: * parade ne marchait pas * problèmes sur le commerce
118 lines
4.9 KiB
JavaScript
118 lines
4.9 KiB
JavaScript
import { ChatUtility } from "./chat-utility.js";
|
|
import { HtmlUtility } from "./html-utility.js";
|
|
import { RdDItemSigneDraconique } from "./item-signedraconique.js";
|
|
import { Misc } from "./misc.js";
|
|
import { TMRUtility } from "./tmr-utility.js";
|
|
|
|
export class DialogCreateSigneDraconique extends Dialog {
|
|
|
|
static async createSigneForActors() {
|
|
const signe = await RdDItemSigneDraconique.randomSigneDraconique({ephemere: true});
|
|
let dialogData = {
|
|
signe: signe,
|
|
tmrs: TMRUtility.listSelectedTMR(signe.system.typesTMR ?? []),
|
|
actors: game.actors.filter(actor => actor.isHautRevant()).map(actor => {
|
|
let actorData = duplicate(actor);
|
|
actorData.selected = actor.hasPlayerOwner;
|
|
return actorData;
|
|
})
|
|
};
|
|
|
|
const html = await renderTemplate("systems/foundryvtt-reve-de-dragon/templates/dialog-create-signedraconique.html", dialogData);
|
|
new DialogCreateSigneDraconique(dialogData, html)
|
|
.render(true);
|
|
}
|
|
|
|
constructor(dialogData, html, callback) {
|
|
let options = { classes: ["DialogCreateSigneDraconiqueActorsActors"], width: 500, height: 650, 'z-index': 99999 };
|
|
let conf = {
|
|
title: "Créer un signe",
|
|
content: html,
|
|
default: "Ajouter aux haut-rêvants",
|
|
buttons: {
|
|
"Ajouter aux haut-rêvants": { label: "Ajouter aux haut-rêvants", callback: it => { this._onCreerSigneActeurs(); } }
|
|
}
|
|
};
|
|
super(conf, options);
|
|
this.dialogData = dialogData;
|
|
}
|
|
|
|
async _onCreerSigneActeurs() {
|
|
await $("[name='signe.system.ephemere']").change();
|
|
await $(".signe-xp-sort").change();
|
|
this.validerSigne();
|
|
this.dialogData.actors.filter(it => it.selected).map(it => game.actors.get(it._id))
|
|
.forEach(actor => this._createSigneForActor(actor, this.dialogData.signe));
|
|
}
|
|
|
|
async _createSigneForActor(actor, signe) {
|
|
actor.createEmbeddedDocuments("Item", [signe]);
|
|
ChatMessage.create({
|
|
whisper: ChatUtility.getWhisperRecipientsAndGMs(actor.name),
|
|
content: await renderTemplate("systems/foundryvtt-reve-de-dragon/templates/chat-signe-draconique-actor.html", {
|
|
signe: signe,
|
|
alias: actor.name
|
|
})
|
|
});
|
|
}
|
|
|
|
validerSigne() {
|
|
this.dialogData.signe.name = $("[name='signe.name']").val();
|
|
this.dialogData.signe.system.valeur.norm = $("[name='signe.system.valeur.norm']").val();
|
|
this.dialogData.signe.system.valeur.sign = $("[name='signe.system.valeur.sign']").val();
|
|
this.dialogData.signe.system.valeur.part = $("[name='signe.system.valeur.part']").val();
|
|
this.dialogData.signe.system.difficulte = $("[name='signe.system.difficulte']").val();
|
|
this.dialogData.signe.system.ephemere = $("[name='signe.system.ephemere']").prop("checked");
|
|
this.dialogData.signe.system.duree = $("[name='signe.system.duree']").val();
|
|
this.dialogData.signe.system.typesTMR = $(".select-tmr").val();
|
|
}
|
|
|
|
/* -------------------------------------------- */
|
|
activateListeners(html) {
|
|
super.activateListeners(html);
|
|
this.setEphemere(this.dialogData.signe.system.ephemere);
|
|
html.find(".signe-aleatoire").click(event => this.setSigneAleatoire());
|
|
html.find("[name='signe.system.ephemere']").change((event) => this.setEphemere(event.currentTarget.checked));
|
|
html.find(".select-actor").change((event) => this.onSelectActor(event));
|
|
html.find(".signe-xp-sort").change((event) => this.onValeurXpSort(event));
|
|
}
|
|
|
|
async setSigneAleatoire() {
|
|
const newSigne = await RdDItemSigneDraconique.randomSigneDraconique({ephemere: true});
|
|
|
|
$("[name='signe.name']").val(newSigne.name);
|
|
$("[name='signe.system.valeur.norm']").val(newSigne.system.valeur.norm);
|
|
$("[name='signe.system.valeur.sign']").val(newSigne.system.valeur.sign);
|
|
$("[name='signe.system.valeur.part']").val(newSigne.system.valeur.part);
|
|
$("[name='signe.system.difficulte']").val(newSigne.system.difficulte);
|
|
$("[name='signe.system.duree']").val(newSigne.system.duree);
|
|
$("[name='signe.system.ephemere']").prop("checked", newSigne.system.ephemere);
|
|
$(".select-tmr").val(newSigne.system.typesTMR);
|
|
this.setEphemere(newSigne.system.ephemere);
|
|
}
|
|
|
|
async setEphemere(ephemere) {
|
|
this.dialogData.signe.system.ephemere = ephemere;
|
|
HtmlUtility._showControlWhen($(".signe-system-duree"), ephemere);
|
|
}
|
|
|
|
async onSelectActor(event) {
|
|
event.preventDefault();
|
|
const options = event.currentTarget.options;
|
|
for (var i = 0; i < options.length; i++) { // looping over the options
|
|
const actorId = options[i].attributes["data-actor-id"].value;
|
|
const actor = this.dialogData.actors.find(it => it._id == actorId);
|
|
if (actor) {
|
|
actor.selected = options[i].selected;
|
|
}
|
|
};
|
|
}
|
|
|
|
onValeurXpSort(event) {
|
|
const codeReussite = event.currentTarget.attributes['data-typereussite']?.value ?? 0;
|
|
const xp = Number(event.currentTarget.value);
|
|
const oldValeur = this.dialogData.signe.system.valeur;
|
|
this.dialogData.signe.system.valeur = RdDItemSigneDraconique.calculValeursXpSort(codeReussite, xp, oldValeur);
|
|
}
|
|
|
|
} |