Compare commits

..

20 Commits

Author SHA1 Message Date
uberwald e47ad95a38 Fix FR translatrion with babele 2026-02-18 00:08:07 +01:00
uberwald fc386487e8 Fix FR translatrion with babele 2026-02-17 23:38:06 +01:00
uberwald bda88c067e Release with specific message 2025-10-17 22:50:39 +02:00
uberwald 4003e0e42b Release with specific message 2025-10-17 22:50:04 +02:00
uberwald a6d811bcda Sync message 2025-10-17 15:32:44 +02:00
uberwald 94eb637637 Sync message 2025-10-17 15:32:22 +02:00
uberwald 8c58367cdc Sync message 2025-10-17 15:31:53 +02:00
uberwald c439ca978c Update internal system with dynamic message 2025-10-17 15:17:04 +02:00
uberwald ffe1144f2a Update internal system with dynamic message 2025-10-17 15:16:00 +02:00
uberwald 38ef07d17b Update internal system with dynamic message 2025-10-17 15:15:03 +02:00
uberwald a8cc2dce4b Update internal system with dynamic message 2025-10-17 15:14:29 +02:00
uberwald 0fadd0783c Update internal system with dynamic message 2025-10-17 15:12:19 +02:00
uberwald a55a038d32 Update internal system with dynamic message 2025-10-17 15:01:42 +02:00
uberwald d012f78881 Update internal system with dynamic message 2025-10-17 14:59:37 +02:00
uberwald 01e13da234 Correction sur application tokens acteurs 2025-10-17 00:33:24 +02:00
uberwald bc09b5050d Correction sur application tokens acteurs 2025-10-17 00:32:42 +02:00
uberwald d68001b376 Fix token/actor 2025-10-02 22:53:09 +02:00
uberwald 6b22dade9c Foundry v13 migration 2025-05-01 23:27:51 +02:00
uberwald 965fc02eb3 Foundry v13 migration 2025-05-01 23:23:29 +02:00
uberwald 0ef689bf1b Fix specialization again 2025-03-11 23:47:08 +01:00
62 changed files with 3185 additions and 2803 deletions
+19 -19
View File
@@ -6,7 +6,7 @@
import { EcrymeUtility } from "../common/ecryme-utility.js"; import { EcrymeUtility } from "../common/ecryme-utility.js";
/* -------------------------------------------- */ /* -------------------------------------------- */
export class EcrymeActorSheet extends ActorSheet { export class EcrymeActorSheet extends foundry.appv1.sheets.ActorSheet {
/** @override */ /** @override */
static get defaultOptions() { static get defaultOptions() {
@@ -53,9 +53,9 @@ export class EcrymeActorSheet extends ActorSheet {
cephalySkills: this.actor.getCephalySkills(), cephalySkills: this.actor.getCephalySkills(),
subActors: foundry.utils.duplicate(this.actor.getSubActors()), subActors: foundry.utils.duplicate(this.actor.getSubActors()),
annency: this.actor.getAnnency(), annency: this.actor.getAnnency(),
description: await TextEditor.enrichHTML(this.object.system.biodata.description, { async: true }), description: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.biodata.description, { async: true }),
notes: await TextEditor.enrichHTML(this.object.system.biodata.notes, { async: true }), notes: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.biodata.notes, { async: true }),
equipementlibre: await TextEditor.enrichHTML(this.object.system.equipmentfree, { async: true }), equipementlibre: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.equipmentfree, { async: true }),
options: this.options, options: this.options,
owner: this.document.isOwner, owner: this.document.isOwner,
editScore: this.options.editScore, editScore: this.options.editScore,
@@ -63,7 +63,7 @@ export class EcrymeActorSheet extends ActorSheet {
} }
this.formData = formData; this.formData = formData;
console.log("PC : ", formData, this.object); //console.log("PC : ", formData, this.object);
return formData; return formData;
} }
@@ -75,10 +75,10 @@ export class EcrymeActorSheet extends ActorSheet {
// Everything below here is only needed if the sheet is editable // Everything below here is only needed if the sheet is editable
if (!this.options.editable) return; if (!this.options.editable) return;
html.bind("keydown", function(e) { // Ignore Enter in actores sheet html.bind("keydown", function(e) { // Ignore Enter in actores sheet
if (e.keyCode === 13) return false; if (e.keyCode === 13) return false;
}); });
html.find('.open-annency').click(ev => { html.find('.open-annency').click(ev => {
let actorId = $(ev.currentTarget).data("annency-id") let actorId = $(ev.currentTarget).data("annency-id")
@@ -105,14 +105,14 @@ export class EcrymeActorSheet extends ActorSheet {
let dataType = $(ev.currentTarget).data("type") let dataType = $(ev.currentTarget).data("type")
this.actor.createEmbeddedDocuments('Item', [{ name: "NewItem", type: dataType }], { renderSheet: true }) this.actor.createEmbeddedDocuments('Item', [{ name: "NewItem", type: dataType }], { renderSheet: true })
}) })
html.find('.subactor-edit').click(ev => { html.find('.subactor-edit').click(ev => {
const li = $(ev.currentTarget).parents(".item"); const li = $(ev.currentTarget).parents(".item");
let actorId = li.data("actor-id"); let actorId = li.data("actor-id");
let actor = game.actors.get( actorId ); let actor = game.actors.get( actorId );
actor.sheet.render(true); actor.sheet.render(true);
}); });
html.find('.subactor-delete').click(ev => { html.find('.subactor-delete').click(ev => {
const li = $(ev.currentTarget).parents(".item"); const li = $(ev.currentTarget).parents(".item");
let actorId = li.data("actor-id"); let actorId = li.data("actor-id");
@@ -131,13 +131,13 @@ export class EcrymeActorSheet extends ActorSheet {
let categKey = $(event.currentTarget).data("category-key") let categKey = $(event.currentTarget).data("category-key")
let skillKey = $(event.currentTarget).data("skill-key") let skillKey = $(event.currentTarget).data("skill-key")
this.actor.rollSkill(categKey, skillKey) this.actor.rollSkill(categKey, skillKey)
}); });
html.find('.roll-spec').click((event) => { html.find('.roll-spec').click((event) => {
let categKey = $(event.currentTarget).data("category-key") let categKey = $(event.currentTarget).data("category-key")
let skillKey = $(event.currentTarget).data("skill-key") let skillKey = $(event.currentTarget).data("skill-key")
let specId = $(event.currentTarget).data("spec-id") let specId = $(event.currentTarget).data("spec-id")
this.actor.rollSpec(categKey, skillKey, specId) this.actor.rollSpec(categKey, skillKey, specId)
}); });
html.find('.roll-skill-confront').click((event) => { html.find('.roll-skill-confront').click((event) => {
let categKey = $(event.currentTarget).data("category-key") let categKey = $(event.currentTarget).data("category-key")
let skillKey = $(event.currentTarget).data("skill-key") let skillKey = $(event.currentTarget).data("skill-key")
@@ -151,36 +151,36 @@ export class EcrymeActorSheet extends ActorSheet {
const li = $(event.currentTarget).parents(".item") const li = $(event.currentTarget).parents(".item")
let weaponId = li.data("item-id"); let weaponId = li.data("item-id");
this.actor.rollWeaponConfront(weaponId) this.actor.rollWeaponConfront(weaponId)
}); });
html.find('.impact-modify').click((event) => { html.find('.impact-modify').click((event) => {
let impactType = $(event.currentTarget).data("impact-type") let impactType = $(event.currentTarget).data("impact-type")
let impactLevel = $(event.currentTarget).data("impact-level") let impactLevel = $(event.currentTarget).data("impact-level")
let modifier = Number($(event.currentTarget).data("impact-modifier")) let modifier = Number($(event.currentTarget).data("impact-modifier"))
this.actor.modifyImpact(impactType, impactLevel, modifier) this.actor.modifyImpact(impactType, impactLevel, modifier)
}); });
html.find('.roll-weapon').click((event) => { html.find('.roll-weapon').click((event) => {
const armeId = $(event.currentTarget).data("arme-id") const armeId = $(event.currentTarget).data("arme-id")
this.actor.rollArme(armeId) this.actor.rollArme(armeId)
}); });
html.find('.lock-unlock-sheet').click((event) => { html.find('.lock-unlock-sheet').click((event) => {
this.options.editScore = !this.options.editScore; this.options.editScore = !this.options.editScore;
this.render(true); this.render(true);
}); });
html.find('.item-equip').click(ev => { html.find('.item-equip').click(ev => {
const li = $(ev.currentTarget).parents(".item"); const li = $(ev.currentTarget).parents(".item");
this.actor.equipItem( li.data("item-id") ); this.actor.equipItem( li.data("item-id") );
this.render(true); this.render(true);
}); });
html.find('.update-field').change(ev => { html.find('.update-field').change(ev => {
const fieldName = $(ev.currentTarget).data("field-name"); const fieldName = $(ev.currentTarget).data("field-name");
let value = Number(ev.currentTarget.value); let value = Number(ev.currentTarget.value);
this.actor.update( { [`${fieldName}`]: value } ); this.actor.update( { [`${fieldName}`]: value } );
}); });
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
/** @override */ /** @override */
setPosition(options = {}) { setPosition(options = {}) {
+2 -2
View File
@@ -6,7 +6,7 @@
import { EcrymeUtility } from "../common/ecryme-utility.js"; import { EcrymeUtility } from "../common/ecryme-utility.js";
/* -------------------------------------------- */ /* -------------------------------------------- */
export class EcrymeAnnencySheet extends ActorSheet { export class EcrymeAnnencySheet extends foundry.appv1.sheets.ActorSheet {
/** @override */ /** @override */
static get defaultOptions() { static get defaultOptions() {
@@ -75,7 +75,7 @@ export class EcrymeAnnencySheet extends ActorSheet {
let actorId = li.data("actor-id") let actorId = li.data("actor-id")
this.actor.removeAnnencyActor(actorId) this.actor.removeAnnencyActor(actorId)
}) })
// Update Inventory Item // Update Inventory Item
html.find('.item-edit').click(ev => { html.find('.item-edit').click(ev => {
+28 -23
View File
@@ -36,7 +36,7 @@ export class EcrymeUtility {
/* -------------------------------------------- */ /* -------------------------------------------- */
static async init() { static async init() {
Hooks.on('renderChatLog', (log, html, data) => EcrymeUtility.chatListeners(html)); Hooks.on('renderChatLog', (log, html, data) => EcrymeUtility.chatListeners(html));
Hooks.on("getChatLogEntryContext", (html, options) => EcrymeUtility.chatMenuManager(html, options)); Hooks.on("getChatMessageContextOptions", (html, options) => EcrymeUtility.chatMenuManager(html, options));
this.rollDataStore = {} this.rollDataStore = {}
this.defenderStore = {} this.defenderStore = {}
@@ -120,7 +120,7 @@ export class EcrymeUtility {
let level = game.settings.get("fvtt-ecryme", "ecryme-game-level") let level = game.settings.get("fvtt-ecryme", "ecryme-game-level")
return level == "level_a" return level == "level_a"
} }
/*-------------------------------------------- */ /*-------------------------------------------- */
static buildSkillConfig() { static buildSkillConfig() {
game.system.ecryme.config.skills = {} game.system.ecryme.config.skills = {}
@@ -155,8 +155,8 @@ export class EcrymeUtility {
/* -------------------------------------------- */ /* -------------------------------------------- */
static getActorFromRollData(rollData) { static getActorFromRollData(rollData) {
let actor = game.actors.get(rollData.actorId) let actor = game.actors.get(rollData.actorId)
if (rollData.tokenId) { if (rollData.defenderTokenId) {
let token = canvas.tokens.placeables.find(t => t.id == rollData.tokenId) let token = canvas.tokens.placeables.find(t => t.id == rollData.defenderTokenId)
if (token) { if (token) {
actor = token.actor actor = token.actor
} }
@@ -273,20 +273,17 @@ export class EcrymeUtility {
let canTranscendRoll = [] let canTranscendRoll = []
for (let i = 1; i <= 10; i++) { for (let i = 1; i <= 10; i++) {
canTranscendRoll[i] = function (li) { canTranscendRoll[i] = function (li) {
let message = game.messages.get(li.attr("data-message-id")) let message = game.messages.get($(li).attr("data-message-id"))
let rollData = message.getFlag("world", "rolldata") let rollData = message.getFlag("world", "rolldata")
//console.log(">>>>>>>>>>>>>>>>>>>>>>>>>> Menu !!!!", rollData) //console.log(">>>>>>>>>>>>>>>>>>>>>>>>>> Menu !!!!", rollData)
if (rollData.skill && rollData.skill.value >= i && !rollData.transcendUsed && rollData.spec) { return (rollData?.skill?.value >= i && !rollData.transcendUsed && rollData.spec)
return true
}
return false
} }
options.push({ options.push({
name: game.i18n.localize("ECRY.chat.spectranscend") + i, name: game.i18n.localize("ECRY.chat.spectranscend") + i,
icon: '<i class="fas fa-plus-square"></i>', icon: '<i class="fas fa-plus-square"></i>',
condition: canTranscendRoll[i], condition: canTranscendRoll[i],
callback: li => { callback: li => {
let message = game.messages.get(li.attr("data-message-id")) let message = game.messages.get($(li).attr("data-message-id"))
let rollData = message.getFlag("world", "rolldata") let rollData = message.getFlag("world", "rolldata")
EcrymeUtility.transcendFromSpec(rollData, i).catch("Error on Transcend") EcrymeUtility.transcendFromSpec(rollData, i).catch("Error on Transcend")
} }
@@ -297,27 +294,35 @@ export class EcrymeUtility {
/* -------------------------------------------- */ /* -------------------------------------------- */
static async chatListeners(html) { static async chatListeners(html) {
html.on("click", '.button-select-confront', event => { $(html).on("click", '.button-select-confront', event => {
let messageId = EcrymeUtility.findChatMessageId(event.currentTarget) let messageId = EcrymeUtility.findChatMessageId(event.currentTarget)
let message = game.messages.get(messageId) let message = game.messages.get(messageId)
let rollData = message.getFlag("world", "ecryme-rolldata") let rollData = message.getFlag("world", "ecryme-rolldata")
ui.notifications.info( game.i18n.localize("ECRY.chat.confrontselect")) ui.notifications.info(game.i18n.localize("ECRY.chat.confrontselect"))
EcrymeUtility.manageConfrontation(rollData) EcrymeUtility.manageConfrontation(rollData)
}) })
html.on("click", '.button-apply-cephaly-difficulty', event => { $(html).on("click", '.button-apply-cephaly-difficulty', event => {
let messageId = EcrymeUtility.findChatMessageId(event.currentTarget) let messageId = EcrymeUtility.findChatMessageId(event.currentTarget)
let message = game.messages.get(messageId) let message = game.messages.get(messageId)
let rollData = message.getFlag("world", "ecryme-rolldata") let rollData = message.getFlag("world", "ecryme-rolldata")
let difficulty = $("#" + rollData.rollId + "-cephaly-difficulty").val() let difficulty = $("#" + rollData.rollId + "-cephaly-difficulty").val()
EcrymeUtility.manageCephalyDifficulty(rollData, difficulty) EcrymeUtility.manageCephalyDifficulty(rollData, difficulty)
}) })
html.on("click", '.button-apply-impact', event => { $(html).on("click", '.button-apply-impact', event => {
let messageId = EcrymeUtility.findChatMessageId(event.currentTarget) let messageId = EcrymeUtility.findChatMessageId(event.currentTarget)
let message = game.messages.get(messageId) let message = game.messages.get(messageId)
let actor = game.actors.get($(event.currentTarget).data("actor-id")) let tokenId = $(event.currentTarget).data("token-id")
let actor
if (!tokenId) {
actorId = $(event.currentTarget).data("actor-id")
actor = game.actors.get(actorId)
} else {
let token = canvas.tokens.placeables.find(t => t.id == tokenId)
actor = token?.actor
}
actor.modifyImpact($(event.currentTarget).data("impact-type"), $(event.currentTarget).data("impact"), 1) actor.modifyImpact($(event.currentTarget).data("impact-type"), $(event.currentTarget).data("impact"), 1)
}) })
html.on("click", '.button-apply-bonus', event => { $(html).on("click", '.button-apply-bonus', event => {
let messageId = EcrymeUtility.findChatMessageId(event.currentTarget) let messageId = EcrymeUtility.findChatMessageId(event.currentTarget)
let message = game.messages.get(messageId) let message = game.messages.get(messageId)
let actor = game.actors.get($(event.currentTarget).data("actor-id")) let actor = game.actors.get($(event.currentTarget).data("actor-id"))
@@ -339,7 +344,7 @@ export class EcrymeUtility {
'systems/fvtt-ecryme/templates/dialogs/partial-confront-bonus-area.hbs', 'systems/fvtt-ecryme/templates/dialogs/partial-confront-bonus-area.hbs',
'systems/fvtt-ecryme/templates/actors/partial-impacts.hbs', 'systems/fvtt-ecryme/templates/actors/partial-impacts.hbs',
] ]
return loadTemplates(templatePaths); return foundry.applications.handlebars.loadTemplates(templatePaths);
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
@@ -414,7 +419,7 @@ export class EcrymeUtility {
console.log("SOCKET MESSAGE", msg) console.log("SOCKET MESSAGE", msg)
if (msg.name == "msg_gm_chat_message") { if (msg.name == "msg_gm_chat_message") {
let rollData = msg.data.rollData let rollData = msg.data.rollData
if ( game.user.isGM ) { if (game.user.isGM) {
let chatMsg = await this.createChatMessage(rollData.alias, "blindroll", { let chatMsg = await this.createChatMessage(rollData.alias, "blindroll", {
content: await renderTemplate(msg.data.template, rollData), content: await renderTemplate(msg.data.template, rollData),
whisper: game.user.id whisper: game.user.id
@@ -575,7 +580,7 @@ export class EcrymeUtility {
this.computeResults(rollData) this.computeResults(rollData)
let msg = await this.createChatWithRollMode(rollData.alias, { let msg = await this.createChatWithRollMode(rollData.alias, {
content: await renderTemplate(`systems/fvtt-ecryme/templates/chat/chat-generic-result.hbs`, rollData) content: await foundry.applications.handlebars.renderTemplate(`systems/fvtt-ecryme/templates/chat/chat-generic-result.hbs`, rollData)
}) })
await msg.setFlag("world", "ecryme-rolldata", rollData) await msg.setFlag("world", "ecryme-rolldata", rollData)
console.log("Rolldata result", rollData) console.log("Rolldata result", rollData)
@@ -661,7 +666,7 @@ export class EcrymeUtility {
} }
return array; return array;
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
static async createChatMessage(name, rollMode, chatOptions) { static async createChatMessage(name, rollMode, chatOptions) {
switch (rollMode) { switch (rollMode) {
@@ -718,11 +723,11 @@ export class EcrymeUtility {
/* -------------------------------------------- */ /* -------------------------------------------- */
static async confirmDelete(actorSheet, li) { static async confirmDelete(actorSheet, li) {
let itemId = li.data("item-id"); let itemId = li.data("item-id");
let msgTxt = "<p>Are you sure to remove this Item ?"; let msgTxt = "<p>Etes vous certain de souhaiter envoyer cet item dans les limbes ?";
let buttons = { let buttons = {
delete: { delete: {
icon: '<i class="fas fa-check"></i>', icon: '<i class="fas fa-check"></i>',
label: "Yes, remove it", label: "Oui, retirez-le",
callback: () => { callback: () => {
actorSheet.actor.deleteEmbeddedDocuments("Item", [itemId]); actorSheet.actor.deleteEmbeddedDocuments("Item", [itemId]);
li.slideUp(200, () => actorSheet.render(false)); li.slideUp(200, () => actorSheet.render(false));
@@ -730,7 +735,7 @@ export class EcrymeUtility {
}, },
cancel: { cancel: {
icon: '<i class="fas fa-times"></i>', icon: '<i class="fas fa-times"></i>',
label: "Cancel" label: "Annuler"
} }
} }
msgTxt += "</p>"; msgTxt += "</p>";
+8 -8
View File
@@ -12,7 +12,7 @@ export class EcrymeConfrontDialog extends Dialog {
width: 620, height: 'fit-content', 'z-index': 99999 width: 620, height: 'fit-content', 'z-index': 99999
}); });
let html = await renderTemplate('systems/fvtt-ecryme/templates/dialogs/confront-dialog.hbs', rollData); let html = await foundry.applications.handlebars.renderTemplate('systems/fvtt-ecryme/templates/dialogs/confront-dialog.hbs', rollData);
return new EcrymeConfrontDialog(actor, rollData, html, options); return new EcrymeConfrontDialog(actor, rollData, html, options);
} }
@@ -72,7 +72,7 @@ export class EcrymeConfrontDialog extends Dialog {
$("#confront-dice-pool").html(content) $("#confront-dice-pool").html(content)
content = await renderTemplate("systems/fvtt-ecryme/templates/dialogs/partial-confront-bonus-area.hbs", this.rollData ) content = await renderTemplate("systems/fvtt-ecryme/templates/dialogs/partial-confront-bonus-area.hbs", this.rollData )
$("#confront-bonus-pool").html(content) $("#confront-bonus-pool").html(content)
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
async refreshDialog() { async refreshDialog() {
@@ -83,7 +83,7 @@ export class EcrymeConfrontDialog extends Dialog {
let button = this.buttonDisabled let button = this.buttonDisabled
setTimeout(function () { $(".launchConfront").attr("disabled", button) }, 180) setTimeout(function () { $(".launchConfront").attr("disabled", button) }, 180)
} }
/* ------------------ -------------------------- */ /* ------------------ -------------------------- */
_canDragStart(selector) { _canDragStart(selector) {
console.log("CAN DRAG START", selector, super._canDragStart(selector) ) console.log("CAN DRAG START", selector, super._canDragStart(selector) )
@@ -124,23 +124,23 @@ export class EcrymeConfrontDialog extends Dialog {
if ( data.dragType == "dice") { if ( data.dragType == "dice") {
let idx = Number(data.diceIndex) let idx = Number(data.diceIndex)
console.log("DATA", data, event, event.srcElement.className) console.log("DATA", data, event, event.srcElement.className)
if (event.srcElement.className.includes("execution") && if (event.srcElement.className.includes("execution") &&
this.rollData.availableDices.filter(d => d.location == "execution").length < 2) { this.rollData.availableDices.filter(d => d.location == "execution").length < 2) {
this.rollData.availableDices[idx].location = "execution" this.rollData.availableDices[idx].location = "execution"
} }
if (event.srcElement.className.includes("preservation") && if (event.srcElement.className.includes("preservation") &&
this.rollData.availableDices.filter(d => d.location == "preservation").length < 2) { this.rollData.availableDices.filter(d => d.location == "preservation").length < 2) {
this.rollData.availableDices[idx].location = "preservation" this.rollData.availableDices[idx].location = "preservation"
} }
if (event.srcElement.className.includes("dice-list")) { if (event.srcElement.className.includes("dice-list")) {
this.rollData.availableDices[idx].location = "mainpool" this.rollData.availableDices[idx].location = "mainpool"
} }
if (this.rollData.availableDices.filter(d => d.location == "execution").length == 2 && this.rollData.availableDices.filter(d => d.location == "preservation").length == 2) { if (this.rollData.availableDices.filter(d => d.location == "execution").length == 2 && this.rollData.availableDices.filter(d => d.location == "preservation").length == 2) {
this.buttonDisabled = false this.buttonDisabled = false
} else { } else {
this.buttonDisabled = true this.buttonDisabled = true
} }
} else { } else {
let idx = Number(data.bonusIndex) let idx = Number(data.bonusIndex)
if (event.srcElement.className.includes("execution")) { if (event.srcElement.className.includes("execution")) {
@@ -192,7 +192,7 @@ export class EcrymeConfrontDialog extends Dialog {
this.processTranscendence() this.processTranscendence()
if (rollData.selectedSpecs && rollData.selectedSpecs.length > 0) { if (rollData.selectedSpecs && rollData.selectedSpecs.length > 0) {
rollData.spec = foundry.utils.duplicate(actor.getSpecialization(rollData.selectedSpecs[0])) rollData.spec = foundry.utils.duplicate(actor.getSpecialization(rollData.selectedSpecs[0]))
rollData.specApplied = true rollData.specApplied = true
rollData.executionTotal += 2 rollData.executionTotal += 2
rollData.preservationTotal += 2 rollData.preservationTotal += 2
@@ -1,13 +1,16 @@
import { EcrymeUtility } from "../common/ecryme-utility.js"; import { EcrymeUtility } from "../common/ecryme-utility.js";
import {EcrymeConfrontDialog } from "./ecryme-confront-dialog.js"; import { EcrymeConfrontDialog } from "./ecryme-confront-dialog.js";
export class EcrymeConfrontStartDialog extends Dialog { export class EcrymeConfrontStartDialog extends Dialog {
/* -------------------------------------------- */ /* -------------------------------------------- */
static async create(actor, rollData) { static async create(actor, rollData) {
if (!actor) throw new Error("Ecryme | No actor provided for confront dialog");
if (!rollData) throw new Error("Ecryme | No roll data provided for confront dialog");
if (actor?.token) rollData.tokenId = actor.token.id;
let options = { classes: ["fvtt-ecryme ecryme-confront-dialog"], width: 540, height: 'fit-content', 'z-index': 99999 } let options = { classes: ["fvtt-ecryme ecryme-confront-dialog"], width: 540, height: 'fit-content', 'z-index': 99999 }
let html = await renderTemplate('systems/fvtt-ecryme/templates/dialogs/confront-start-dialog.hbs', rollData); let html = await foundry.applications.handlebars.renderTemplate('systems/fvtt-ecryme/templates/dialogs/confront-start-dialog.hbs', rollData);
return new EcrymeConfrontStartDialog(actor, rollData, html, options); return new EcrymeConfrontStartDialog(actor, rollData, html, options);
} }
@@ -43,12 +46,12 @@ export class EcrymeConfrontStartDialog extends Dialog {
super(conf, options); super(conf, options);
this.actor = actor; this.actor = actor?.token?.actor || actor;
this.rollData = rollData; this.rollData = rollData;
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
async rollConfront( diceFormula ) { async rollConfront(diceFormula) {
// Do the initial roll // Do the initial roll
let myRoll = await new Roll(diceFormula).roll() let myRoll = await new Roll(diceFormula).roll()
await EcrymeUtility.showDiceSoNice(myRoll, game.settings.get("core", "rollMode")) await EcrymeUtility.showDiceSoNice(myRoll, game.settings.get("core", "rollMode"))
@@ -57,7 +60,7 @@ export class EcrymeConfrontStartDialog extends Dialog {
rollData.roll = foundry.utils.duplicate(myRoll) rollData.roll = foundry.utils.duplicate(myRoll)
rollData.availableDices = [] rollData.availableDices = []
for (let result of myRoll.terms[0].results) { for (let result of myRoll.terms[0].results) {
if ( !result.discarded) { if (!result.discarded) {
let resultDup = foundry.utils.duplicate(result) let resultDup = foundry.utils.duplicate(result)
resultDup.location = "mainpool" resultDup.location = "mainpool"
rollData.availableDices.push(resultDup) rollData.availableDices.push(resultDup)
+4 -5
View File
@@ -6,7 +6,7 @@ export class EcrymeRollDialog extends Dialog {
static async create(actor, rollData) { static async create(actor, rollData) {
let options = { classes: ["ecryme-roll-dialog"], width: 540, height: 'fit-content', 'z-index': 99999 } let options = { classes: ["ecryme-roll-dialog"], width: 540, height: 'fit-content', 'z-index': 99999 }
let html = await renderTemplate('systems/fvtt-ecryme/templates/dialogs/roll-dialog-generic.hbs', rollData); let html = await foundry.applications.handlebars.renderTemplate('systems/fvtt-ecryme/templates/dialogs/roll-dialog-generic.hbs', rollData);
return new EcrymeRollDialog(actor, rollData, html, options); return new EcrymeRollDialog(actor, rollData, html, options);
} }
@@ -52,7 +52,6 @@ export class EcrymeRollDialog extends Dialog {
activateListeners(html) { activateListeners(html) {
super.activateListeners(html); super.activateListeners(html);
var dialog = this;
function onLoad() { function onLoad() {
} }
$(function () { onLoad(); }); $(function () { onLoad(); });
@@ -75,13 +74,13 @@ export class EcrymeRollDialog extends Dialog {
}) })
html.find('#roll-select-transcendence').change((event) => { html.find('#roll-select-transcendence').change((event) => {
this.rollData.skillTranscendence = Number($('#roll-select-transcendence').val()) this.rollData.skillTranscendence = Number($('#roll-select-transcendence').val())
}) })
html.find('#roll-use-spleen').change((event) => { html.find('#roll-use-spleen').change((event) => {
this.rollData.useSpleen = event.currentTarget.checked this.rollData.useSpleen = event.currentTarget.checked
}) })
html.find('#roll-use-ideal').change((event) => { html.find('#roll-use-ideal').change((event) => {
this.rollData.useIdeal = event.currentTarget.checked this.rollData.useIdeal = event.currentTarget.checked
}) })
} }
} }
+33 -18
View File
@@ -5,6 +5,7 @@
*/ */
/* -------------------------------------------- */ /* -------------------------------------------- */
const ECRYME_WELCOME_MESSAGE_URL = "https://www.uberwald.me/gitea/public/fvtt-ecryme/raw/branch/master/welcome-message-ecryme.html"
/* -------------------------------------------- */ /* -------------------------------------------- */
// Import Modules // Import Modules
@@ -38,7 +39,7 @@ Hooks.once("init", async function () {
EcrymeUtility.preloadHandlebarsTemplates(); EcrymeUtility.preloadHandlebarsTemplates();
/* -------------------------------------------- */ /* -------------------------------------------- */
// Set an initiative formula for the system // Set an initiative formula for the system
CONFIG.Combat.initiative = { CONFIG.Combat.initiative = {
formula: "1d6", formula: "1d6",
decimals: 1 decimals: 1
@@ -57,28 +58,40 @@ Hooks.once("init", async function () {
/* -------------------------------------------- */ /* -------------------------------------------- */
// Register sheet application classes // Register sheet application classes
Actors.unregisterSheet("core", ActorSheet); foundry.documents.collections.Actors.unregisterSheet("core", foundry.appv1.sheets.ActorSheet);
Actors.registerSheet("fvtt-ecryme", EcrymeActorSheet, { types: ["pc"], makeDefault: true }); foundry.documents.collections.Actors.registerSheet("fvtt-ecryme", EcrymeActorSheet, { types: ["pc"], makeDefault: true });
Actors.registerSheet("fvtt-ecryme", EcrymeActorSheet, { types: ["npc"], makeDefault: true }); foundry.documents.collections.Actors.registerSheet("fvtt-ecryme", EcrymeActorSheet, { types: ["npc"], makeDefault: true });
Actors.registerSheet("fvtt-ecryme", EcrymeAnnencySheet, { types: ["annency"], makeDefault: false }); foundry.documents.collections.Actors.registerSheet("fvtt-ecryme", EcrymeAnnencySheet, { types: ["annency"], makeDefault: false });
Items.unregisterSheet("core", ItemSheet); foundry.documents.collections.Items.unregisterSheet("core", foundry.appv1.sheets.ItemSheet);
Items.registerSheet("fvtt-ecryme", EcrymeItemSheet, { makeDefault: true }); foundry.documents.collections.Items.registerSheet("fvtt-ecryme", EcrymeItemSheet, { makeDefault: true });
EcrymeUtility.init() EcrymeUtility.init()
Babele.get().setSystemTranslationsDir("translated")
}); });
/* -------------------------------------------- */ /* -------------------------------------------- */
function welcomeMessage() { function welcomeMessage() {
if (game.user.isGM) { if (game.user.isGM) {
ChatMessage.create({ // Try to fetch the welcome message from the github repo "welcome-message-ecryme.html"
user: game.user.id, fetch(ECRYME_WELCOME_MESSAGE_URL)
whisper: [game.user.id], .then(response => response.text())
content: `<div id="welcome-message-ecryme"><span class="rdd-roll-part"> .then(html => {
<strong>Bienvenu dans Ecryme !</strong>` }); //console.log("Fetched welcome message:", html);
ChatMessage.create({
user: game.user.id,
whisper: [game.user.id],
content: html
});
})
.catch(error => {
console.error("Error fetching welcome message:", error);
ChatMessage.create({
user: game.user.id,
whisper: [game.user.id],
content: "<b>Bienvenue dans Ecryme RPG !</b><br>Visitez le site officiel pour plus d'informations."
});
});
} }
} }
@@ -91,6 +104,7 @@ async function importDefaultScene() {
await game.scenes.documentClass.create(newDocuments); await game.scenes.documentClass.create(newDocuments);
game.scenes.find(i => i.name == "Landing page 1").activate(); game.scenes.find(i => i.name == "Landing page 1").activate();
} }
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
@@ -98,9 +112,6 @@ async function importDefaultScene() {
/* -------------------------------------------- */ /* -------------------------------------------- */
Hooks.once("ready", function () { Hooks.once("ready", function () {
// Load trranslations
Babele.get().setSystemTranslationsDir("translated")
// User warning // User warning
if (!game.user.isGM && game.user.character == undefined) { if (!game.user.isGM && game.user.character == undefined) {
ui.notifications.info("Attention ! Aucun personnage relié au joueur !"); ui.notifications.info("Attention ! Aucun personnage relié au joueur !");
@@ -124,6 +135,11 @@ Hooks.once("ready", function () {
}) })
/* -------------------------------------------- */
Hooks.once('babele.init', (babele) => {
babele.setSystemTranslationsDir("translated");
});
/* -------------------------------------------- */ /* -------------------------------------------- */
/* Foundry VTT Initialization */ /* Foundry VTT Initialization */
@@ -138,4 +154,3 @@ Hooks.on("chatMessage", (html, content, msg) => {
} }
return true; return true;
}); });
+5 -5
View File
@@ -4,7 +4,7 @@ import { EcrymeUtility } from "../common/ecryme-utility.js";
* Extend the basic ItemSheet with some very simple modifications * Extend the basic ItemSheet with some very simple modifications
* @extends {ItemSheet} * @extends {ItemSheet}
*/ */
export class EcrymeItemSheet extends ItemSheet { export class EcrymeItemSheet extends foundry.appv1.sheets.ItemSheet {
/** @override */ /** @override */
static get defaultOptions() { static get defaultOptions() {
@@ -61,15 +61,15 @@ export class EcrymeItemSheet extends ItemSheet {
limited: this.object.limited, limited: this.object.limited,
options: this.options, options: this.options,
owner: this.document.isOwner, owner: this.document.isOwner,
description: await TextEditor.enrichHTML(this.object.system.description, { async: true }), description: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.description, { async: true }),
notes: await TextEditor.enrichHTML(this.object.system.notes, { async: true }), notes: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.notes, { async: true }),
isGM: game.user.isGM isGM: game.user.isGM
} }
if ( this.object.type == "archetype") { if ( this.object.type == "archetype") {
formData.tarots = EcrymeUtility.getTarots() formData.tarots = EcrymeUtility.getTarots()
} }
this.options.editable = !(this.object.origin == "embeddedItem"); this.options.editable = !(this.object.origin == "embeddedItem");
console.log("ITEM DATA", formData, this); console.log("ITEM DATA", formData, this);
return formData; return formData;
@@ -115,7 +115,7 @@ export class EcrymeItemSheet extends ItemSheet {
let levelIndex = Number($(ev.currentTarget).parents(".item").data("level-index")) let levelIndex = Number($(ev.currentTarget).parents(".item").data("level-index"))
let choiceIndex = Number($(ev.currentTarget).parents(".item").data("choice-index")) let choiceIndex = Number($(ev.currentTarget).parents(".item").data("choice-index"))
let featureId = $(ev.currentTarget).parents(".item").data("feature-id") let featureId = $(ev.currentTarget).parents(".item").data("feature-id")
let itemData = this.object.system.levels[levelIndex].choices[choiceIndex].features[featureId] let itemData = this.object.system.levels[levelIndex].choices[choiceIndex].features[featureId]
if (itemData.name != 'None') { if (itemData.name != 'None') {
Binary file not shown.
Binary file not shown.
+1 -1
View File
@@ -1 +1 @@
MANIFEST-000176 MANIFEST-000257
+7 -7
View File
@@ -1,7 +1,7 @@
2025/03/11-22:28:43.689446 7f24c57fa6c0 Recovering log #174 2026/02/17-22:52:51.783329 7f1e223fe6c0 Recovering log #255
2025/03/11-22:28:43.742748 7f24c57fa6c0 Delete type=3 #172 2026/02/17-22:52:51.793345 7f1e223fe6c0 Delete type=3 #253
2025/03/11-22:28:43.742876 7f24c57fa6c0 Delete type=0 #174 2026/02/17-22:52:51.793403 7f1e223fe6c0 Delete type=0 #255
2025/03/11-22:29:05.490854 7f24c4bff6c0 Level-0 table #179: started 2026/02/18-00:07:51.604423 7f1e20bfb6c0 Level-0 table #260: started
2025/03/11-22:29:05.490876 7f24c4bff6c0 Level-0 table #179: 0 bytes OK 2026/02/18-00:07:51.604449 7f1e20bfb6c0 Level-0 table #260: 0 bytes OK
2025/03/11-22:29:05.528875 7f24c4bff6c0 Delete type=0 #177 2026/02/18-00:07:51.610566 7f1e20bfb6c0 Delete type=0 #258
2025/03/11-22:29:05.604302 7f24c4bff6c0 Manual compaction at level-0 from '!folders!1GrTlI1xWvaxdKRI' @ 72057594037927935 : 1 .. '!items!zs7krgXhDRndtqbl' @ 0 : 0; will stop at (end) 2026/02/18-00:07:51.628854 7f1e20bfb6c0 Manual compaction at level-0 from '!folders!1GrTlI1xWvaxdKRI' @ 72057594037927935 : 1 .. '!items!zs7krgXhDRndtqbl' @ 0 : 0; will stop at (end)
+7 -7
View File
@@ -1,7 +1,7 @@
2025/03/11-22:17:42.207103 7f24c5ffb6c0 Recovering log #169 2026/02/17-22:32:54.354370 7f1e213fc6c0 Recovering log #251
2025/03/11-22:17:42.229307 7f24c5ffb6c0 Delete type=3 #167 2026/02/17-22:32:54.365341 7f1e213fc6c0 Delete type=3 #249
2025/03/11-22:17:42.229364 7f24c5ffb6c0 Delete type=0 #169 2026/02/17-22:32:54.365467 7f1e213fc6c0 Delete type=0 #251
2025/03/11-22:28:37.828063 7f24c4bff6c0 Level-0 table #175: started 2026/02/17-22:51:18.237998 7f1e20bfb6c0 Level-0 table #256: started
2025/03/11-22:28:37.828090 7f24c4bff6c0 Level-0 table #175: 0 bytes OK 2026/02/17-22:51:18.238020 7f1e20bfb6c0 Level-0 table #256: 0 bytes OK
2025/03/11-22:28:37.835412 7f24c4bff6c0 Delete type=0 #173 2026/02/17-22:51:18.244001 7f1e20bfb6c0 Delete type=0 #254
2025/03/11-22:28:37.855865 7f24c4bff6c0 Manual compaction at level-0 from '!folders!1GrTlI1xWvaxdKRI' @ 72057594037927935 : 1 .. '!items!zs7krgXhDRndtqbl' @ 0 : 0; will stop at (end) 2026/02/17-22:51:18.250338 7f1e20bfb6c0 Manual compaction at level-0 from '!folders!1GrTlI1xWvaxdKRI' @ 72057594037927935 : 1 .. '!items!zs7krgXhDRndtqbl' @ 0 : 0; will stop at (end)
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1 -1
View File
@@ -1 +1 @@
MANIFEST-000113 MANIFEST-000194
+8 -8
View File
@@ -1,8 +1,8 @@
2025/03/11-22:28:43.904749 7f24c6ffd6c0 Recovering log #111 2026/02/17-22:52:51.836522 7f1e213fc6c0 Recovering log #192
2025/03/11-22:28:43.971386 7f24c6ffd6c0 Delete type=3 #109 2026/02/17-22:52:51.846119 7f1e213fc6c0 Delete type=3 #190
2025/03/11-22:28:43.971494 7f24c6ffd6c0 Delete type=0 #111 2026/02/17-22:52:51.846206 7f1e213fc6c0 Delete type=0 #192
2025/03/11-22:29:05.641249 7f24c4bff6c0 Level-0 table #116: started 2026/02/18-00:07:51.788872 7f1e20bfb6c0 Level-0 table #197: started
2025/03/11-22:29:05.641276 7f24c4bff6c0 Level-0 table #116: 0 bytes OK 2026/02/18-00:07:51.788909 7f1e20bfb6c0 Level-0 table #197: 0 bytes OK
2025/03/11-22:29:05.674923 7f24c4bff6c0 Delete type=0 #114 2026/02/18-00:07:51.795266 7f1e20bfb6c0 Delete type=0 #195
2025/03/11-22:29:05.723243 7f24c4bff6c0 Manual compaction at level-0 from '!journal!wooTFYjEwh83FwgT' @ 72057594037927935 : 1 .. '!journal.pages!wooTFYjEwh83FwgT.xhc7hqoL8kdW6lrD' @ 0 : 0; will stop at (end) 2026/02/18-00:07:51.802266 7f1e20bfb6c0 Manual compaction at level-0 from '!journal!wooTFYjEwh83FwgT' @ 72057594037927935 : 1 .. '!journal.pages!wooTFYjEwh83FwgT.xhc7hqoL8kdW6lrD' @ 0 : 0; will stop at (end)
2025/03/11-22:29:05.762798 7f24c4bff6c0 Manual compaction at level-1 from '!journal!wooTFYjEwh83FwgT' @ 72057594037927935 : 1 .. '!journal.pages!wooTFYjEwh83FwgT.xhc7hqoL8kdW6lrD' @ 0 : 0; will stop at (end) 2026/02/18-00:07:51.802303 7f1e20bfb6c0 Manual compaction at level-1 from '!journal!wooTFYjEwh83FwgT' @ 72057594037927935 : 1 .. '!journal.pages!wooTFYjEwh83FwgT.xhc7hqoL8kdW6lrD' @ 0 : 0; will stop at (end)
+8 -8
View File
@@ -1,8 +1,8 @@
2025/03/11-22:17:42.313432 7f24c57fa6c0 Recovering log #106 2026/02/17-22:32:54.423305 7f1e21bfd6c0 Recovering log #188
2025/03/11-22:17:42.340002 7f24c57fa6c0 Delete type=3 #104 2026/02/17-22:32:54.435381 7f1e21bfd6c0 Delete type=3 #186
2025/03/11-22:17:42.340070 7f24c57fa6c0 Delete type=0 #106 2026/02/17-22:32:54.435516 7f1e21bfd6c0 Delete type=0 #188
2025/03/11-22:28:37.842072 7f24c4bff6c0 Level-0 table #112: started 2026/02/17-22:51:18.269462 7f1e20bfb6c0 Level-0 table #193: started
2025/03/11-22:28:37.842115 7f24c4bff6c0 Level-0 table #112: 0 bytes OK 2026/02/17-22:51:18.269511 7f1e20bfb6c0 Level-0 table #193: 0 bytes OK
2025/03/11-22:28:37.848681 7f24c4bff6c0 Delete type=0 #110 2026/02/17-22:51:18.276022 7f1e20bfb6c0 Delete type=0 #191
2025/03/11-22:28:37.855911 7f24c4bff6c0 Manual compaction at level-0 from '!journal!wooTFYjEwh83FwgT' @ 72057594037927935 : 1 .. '!journal.pages!wooTFYjEwh83FwgT.xhc7hqoL8kdW6lrD' @ 0 : 0; will stop at (end) 2026/02/17-22:51:18.276202 7f1e20bfb6c0 Manual compaction at level-0 from '!journal!wooTFYjEwh83FwgT' @ 72057594037927935 : 1 .. '!journal.pages!wooTFYjEwh83FwgT.xhc7hqoL8kdW6lrD' @ 0 : 0; will stop at (end)
2025/03/11-22:28:37.855943 7f24c4bff6c0 Manual compaction at level-1 from '!journal!wooTFYjEwh83FwgT' @ 72057594037927935 : 1 .. '!journal.pages!wooTFYjEwh83FwgT.xhc7hqoL8kdW6lrD' @ 0 : 0; will stop at (end) 2026/02/17-22:51:18.276226 7f1e20bfb6c0 Manual compaction at level-1 from '!journal!wooTFYjEwh83FwgT' @ 72057594037927935 : 1 .. '!journal.pages!wooTFYjEwh83FwgT.xhc7hqoL8kdW6lrD' @ 0 : 0; will stop at (end)
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1 -1
View File
@@ -1 +1 @@
MANIFEST-000176 MANIFEST-000257
+7 -7
View File
@@ -1,7 +1,7 @@
2025/03/11-22:28:43.852356 7f24c67fc6c0 Recovering log #174 2026/02/17-22:52:51.822834 7f1e213fc6c0 Recovering log #255
2025/03/11-22:28:43.902310 7f24c67fc6c0 Delete type=3 #172 2026/02/17-22:52:51.833307 7f1e213fc6c0 Delete type=3 #253
2025/03/11-22:28:43.902433 7f24c67fc6c0 Delete type=0 #174 2026/02/17-22:52:51.833365 7f1e213fc6c0 Delete type=0 #255
2025/03/11-22:29:05.604411 7f24c4bff6c0 Level-0 table #179: started 2026/02/18-00:07:51.795405 7f1e20bfb6c0 Level-0 table #260: started
2025/03/11-22:29:05.604444 7f24c4bff6c0 Level-0 table #179: 0 bytes OK 2026/02/18-00:07:51.795433 7f1e20bfb6c0 Level-0 table #260: 0 bytes OK
2025/03/11-22:29:05.641128 7f24c4bff6c0 Delete type=0 #177 2026/02/18-00:07:51.802173 7f1e20bfb6c0 Delete type=0 #258
2025/03/11-22:29:05.723220 7f24c4bff6c0 Manual compaction at level-0 from '!items!13IYF6BPUTivFZzB' @ 72057594037927935 : 1 .. '!items!oSutlbe9wyBZccmf' @ 0 : 0; will stop at (end) 2026/02/18-00:07:51.802295 7f1e20bfb6c0 Manual compaction at level-0 from '!items!13IYF6BPUTivFZzB' @ 72057594037927935 : 1 .. '!items!oSutlbe9wyBZccmf' @ 0 : 0; will stop at (end)
+7 -7
View File
@@ -1,7 +1,7 @@
2025/03/11-22:17:42.287558 7f24c6ffd6c0 Recovering log #169 2026/02/17-22:32:54.407677 7f1e223fe6c0 Recovering log #251
2025/03/11-22:17:42.309970 7f24c6ffd6c0 Delete type=3 #167 2026/02/17-22:32:54.418634 7f1e223fe6c0 Delete type=3 #249
2025/03/11-22:17:42.310079 7f24c6ffd6c0 Delete type=0 #169 2026/02/17-22:32:54.418777 7f1e223fe6c0 Delete type=0 #251
2025/03/11-22:28:37.821422 7f24c4bff6c0 Level-0 table #175: started 2026/02/17-22:51:18.232103 7f1e20bfb6c0 Level-0 table #256: started
2025/03/11-22:28:37.821461 7f24c4bff6c0 Level-0 table #175: 0 bytes OK 2026/02/17-22:51:18.232142 7f1e20bfb6c0 Level-0 table #256: 0 bytes OK
2025/03/11-22:28:37.827638 7f24c4bff6c0 Delete type=0 #173 2026/02/17-22:51:18.237935 7f1e20bfb6c0 Delete type=0 #254
2025/03/11-22:28:37.827871 7f24c4bff6c0 Manual compaction at level-0 from '!items!13IYF6BPUTivFZzB' @ 72057594037927935 : 1 .. '!items!oSutlbe9wyBZccmf' @ 0 : 0; will stop at (end) 2026/02/17-22:51:18.250322 7f1e20bfb6c0 Manual compaction at level-0 from '!items!13IYF6BPUTivFZzB' @ 72057594037927935 : 1 .. '!items!oSutlbe9wyBZccmf' @ 0 : 0; will stop at (end)
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1 -1
View File
@@ -1 +1 @@
MANIFEST-000060 MANIFEST-000143
+8 -8
View File
@@ -1,8 +1,8 @@
2025/03/11-22:28:43.794986 7f24c6ffd6c0 Recovering log #58 2026/02/17-22:52:51.809397 7f1e22bff6c0 Recovering log #141
2025/03/11-22:28:43.848806 7f24c6ffd6c0 Delete type=3 #56 2026/02/17-22:52:51.819324 7f1e22bff6c0 Delete type=3 #139
2025/03/11-22:28:43.848927 7f24c6ffd6c0 Delete type=0 #58 2026/02/17-22:52:51.819396 7f1e22bff6c0 Delete type=0 #141
2025/03/11-22:29:05.569282 7f24c4bff6c0 Level-0 table #63: started 2026/02/18-00:07:51.772211 7f1e20bfb6c0 Level-0 table #146: started
2025/03/11-22:29:05.569313 7f24c4bff6c0 Level-0 table #63: 0 bytes OK 2026/02/18-00:07:51.772244 7f1e20bfb6c0 Level-0 table #146: 0 bytes OK
2025/03/11-22:29:05.604065 7f24c4bff6c0 Delete type=0 #61 2026/02/18-00:07:51.778644 7f1e20bfb6c0 Delete type=0 #144
2025/03/11-22:29:05.604324 7f24c4bff6c0 Manual compaction at level-0 from '!scenes!YYBr138LR7ntGFdo' @ 72057594037927935 : 1 .. '!scenes!wJJTdzEVyJpkUXaM' @ 0 : 0; will stop at (end) 2026/02/18-00:07:51.788854 7f1e20bfb6c0 Manual compaction at level-0 from '!scenes!DDibQQLAvyIq9y09' @ 72057594037927935 : 1 .. '!scenes!zvY1RwBhTfwdZIBa' @ 0 : 0; will stop at (end)
2025/03/11-22:29:05.675098 7f24c4bff6c0 Manual compaction at level-1 from '!scenes!YYBr138LR7ntGFdo' @ 72057594037927935 : 1 .. '!scenes!wJJTdzEVyJpkUXaM' @ 0 : 0; will stop at (end) 2026/02/18-00:07:51.795394 7f1e20bfb6c0 Manual compaction at level-1 from '!scenes!DDibQQLAvyIq9y09' @ 72057594037927935 : 1 .. '!scenes!zvY1RwBhTfwdZIBa' @ 0 : 0; will stop at (end)
+8 -8
View File
@@ -1,8 +1,8 @@
2025/03/11-22:17:42.261222 7f24c57fa6c0 Recovering log #53 2026/02/17-22:32:54.389501 7f1e21bfd6c0 Recovering log #137
2025/03/11-22:17:42.284333 7f24c57fa6c0 Delete type=3 #51 2026/02/17-22:32:54.400905 7f1e21bfd6c0 Delete type=3 #135
2025/03/11-22:17:42.284459 7f24c57fa6c0 Delete type=0 #53 2026/02/17-22:32:54.401049 7f1e21bfd6c0 Delete type=0 #137
2025/03/11-22:28:37.807470 7f24c4bff6c0 Level-0 table #59: started 2026/02/17-22:51:18.250480 7f1e20bfb6c0 Level-0 table #142: started
2025/03/11-22:28:37.807537 7f24c4bff6c0 Level-0 table #59: 0 bytes OK 2026/02/17-22:51:18.250515 7f1e20bfb6c0 Level-0 table #142: 0 bytes OK
2025/03/11-22:28:37.814273 7f24c4bff6c0 Delete type=0 #57 2026/02/17-22:51:18.256672 7f1e20bfb6c0 Delete type=0 #140
2025/03/11-22:28:37.827846 7f24c4bff6c0 Manual compaction at level-0 from '!scenes!YYBr138LR7ntGFdo' @ 72057594037927935 : 1 .. '!scenes!wJJTdzEVyJpkUXaM' @ 0 : 0; will stop at (end) 2026/02/17-22:51:18.276163 7f1e20bfb6c0 Manual compaction at level-0 from '!scenes!DDibQQLAvyIq9y09' @ 72057594037927935 : 1 .. '!scenes!zvY1RwBhTfwdZIBa' @ 0 : 0; will stop at (end)
2025/03/11-22:28:37.828046 7f24c4bff6c0 Manual compaction at level-1 from '!scenes!YYBr138LR7ntGFdo' @ 72057594037927935 : 1 .. '!scenes!wJJTdzEVyJpkUXaM' @ 0 : 0; will stop at (end) 2026/02/17-22:51:18.276211 7f1e20bfb6c0 Manual compaction at level-1 from '!scenes!DDibQQLAvyIq9y09' @ 72057594037927935 : 1 .. '!scenes!zvY1RwBhTfwdZIBa' @ 0 : 0; will stop at (end)
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1 -1
View File
@@ -1 +1 @@
MANIFEST-000176 MANIFEST-000257
+7 -7
View File
@@ -1,7 +1,7 @@
2025/03/11-22:28:43.632057 7f24c5ffb6c0 Recovering log #174 2026/02/17-22:52:51.771179 7f1e22bff6c0 Recovering log #255
2025/03/11-22:28:43.687014 7f24c5ffb6c0 Delete type=3 #172 2026/02/17-22:52:51.780607 7f1e22bff6c0 Delete type=3 #253
2025/03/11-22:28:43.687139 7f24c5ffb6c0 Delete type=0 #174 2026/02/17-22:52:51.780660 7f1e22bff6c0 Delete type=0 #255
2025/03/11-22:29:05.529067 7f24c4bff6c0 Level-0 table #179: started 2026/02/18-00:07:51.597957 7f1e20bfb6c0 Level-0 table #260: started
2025/03/11-22:29:05.529094 7f24c4bff6c0 Level-0 table #179: 0 bytes OK 2026/02/18-00:07:51.597996 7f1e20bfb6c0 Level-0 table #260: 0 bytes OK
2025/03/11-22:29:05.569107 7f24c4bff6c0 Delete type=0 #177 2026/02/18-00:07:51.604332 7f1e20bfb6c0 Delete type=0 #258
2025/03/11-22:29:05.604312 7f24c4bff6c0 Manual compaction at level-0 from '!folders!00Hn2nNarlL7b0DR' @ 72057594037927935 : 1 .. '!items!yozTUjNuc2rEGjFK' @ 0 : 0; will stop at (end) 2026/02/18-00:07:51.628842 7f1e20bfb6c0 Manual compaction at level-0 from '!folders!00Hn2nNarlL7b0DR' @ 72057594037927935 : 1 .. '!items!yozTUjNuc2rEGjFK' @ 0 : 0; will stop at (end)
+7 -7
View File
@@ -1,7 +1,7 @@
2025/03/11-22:17:42.183744 7f24c67fc6c0 Recovering log #169 2026/02/17-22:32:54.337335 7f1e21bfd6c0 Recovering log #251
2025/03/11-22:17:42.204063 7f24c67fc6c0 Delete type=3 #167 2026/02/17-22:32:54.348929 7f1e21bfd6c0 Delete type=3 #249
2025/03/11-22:17:42.204124 7f24c67fc6c0 Delete type=0 #169 2026/02/17-22:32:54.349060 7f1e21bfd6c0 Delete type=0 #251
2025/03/11-22:28:37.801121 7f24c4bff6c0 Level-0 table #175: started 2026/02/17-22:51:18.224981 7f1e20bfb6c0 Level-0 table #256: started
2025/03/11-22:28:37.801173 7f24c4bff6c0 Level-0 table #175: 0 bytes OK 2026/02/17-22:51:18.225046 7f1e20bfb6c0 Level-0 table #256: 0 bytes OK
2025/03/11-22:28:37.807280 7f24c4bff6c0 Delete type=0 #173 2026/02/17-22:51:18.231994 7f1e20bfb6c0 Delete type=0 #254
2025/03/11-22:28:37.827819 7f24c4bff6c0 Manual compaction at level-0 from '!folders!00Hn2nNarlL7b0DR' @ 72057594037927935 : 1 .. '!items!yozTUjNuc2rEGjFK' @ 0 : 0; will stop at (end) 2026/02/17-22:51:18.250311 7f1e20bfb6c0 Manual compaction at level-0 from '!folders!00Hn2nNarlL7b0DR' @ 72057594037927935 : 1 .. '!items!yozTUjNuc2rEGjFK' @ 0 : 0; will stop at (end)
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1 -1
View File
@@ -1 +1 @@
MANIFEST-000176 MANIFEST-000257
+7 -7
View File
@@ -1,7 +1,7 @@
2025/03/11-22:28:43.745519 7f24c67fc6c0 Recovering log #174 2026/02/17-22:52:51.796322 7f1e213fc6c0 Recovering log #255
2025/03/11-22:28:43.792356 7f24c67fc6c0 Delete type=3 #172 2026/02/17-22:52:51.806414 7f1e213fc6c0 Delete type=3 #253
2025/03/11-22:28:43.792465 7f24c67fc6c0 Delete type=0 #174 2026/02/17-22:52:51.806525 7f1e213fc6c0 Delete type=0 #255
2025/03/11-22:29:05.462231 7f24c4bff6c0 Level-0 table #179: started 2026/02/18-00:07:51.654710 7f1e20bfb6c0 Level-0 table #260: started
2025/03/11-22:29:05.462271 7f24c4bff6c0 Level-0 table #179: 0 bytes OK 2026/02/18-00:07:51.654742 7f1e20bfb6c0 Level-0 table #260: 0 bytes OK
2025/03/11-22:29:05.490724 7f24c4bff6c0 Delete type=0 #177 2026/02/18-00:07:51.660623 7f1e20bfb6c0 Delete type=0 #258
2025/03/11-22:29:05.604286 7f24c4bff6c0 Manual compaction at level-0 from '!folders!DiwHbtGAkTYxtshX' @ 72057594037927935 : 1 .. '!items!zgNI2haxhBxBDBdl' @ 0 : 0; will stop at (end) 2026/02/18-00:07:51.660919 7f1e20bfb6c0 Manual compaction at level-0 from '!folders!DiwHbtGAkTYxtshX' @ 72057594037927935 : 1 .. '!items!zgNI2haxhBxBDBdl' @ 0 : 0; will stop at (end)
+7 -7
View File
@@ -1,7 +1,7 @@
2025/03/11-22:17:42.232923 7f24c6ffd6c0 Recovering log #169 2026/02/17-22:32:54.371182 7f1e223fe6c0 Recovering log #251
2025/03/11-22:17:42.257730 7f24c6ffd6c0 Delete type=3 #167 2026/02/17-22:32:54.383451 7f1e223fe6c0 Delete type=3 #249
2025/03/11-22:17:42.257832 7f24c6ffd6c0 Delete type=0 #169 2026/02/17-22:32:54.383616 7f1e223fe6c0 Delete type=0 #251
2025/03/11-22:28:37.814417 7f24c4bff6c0 Level-0 table #175: started 2026/02/17-22:51:18.244080 7f1e20bfb6c0 Level-0 table #256: started
2025/03/11-22:28:37.814450 7f24c4bff6c0 Level-0 table #175: 0 bytes OK 2026/02/17-22:51:18.244107 7f1e20bfb6c0 Level-0 table #256: 0 bytes OK
2025/03/11-22:28:37.821238 7f24c4bff6c0 Delete type=0 #173 2026/02/17-22:51:18.250200 7f1e20bfb6c0 Delete type=0 #254
2025/03/11-22:28:37.827860 7f24c4bff6c0 Manual compaction at level-0 from '!folders!DiwHbtGAkTYxtshX' @ 72057594037927935 : 1 .. '!items!zgNI2haxhBxBDBdl' @ 0 : 0; will stop at (end) 2026/02/17-22:51:18.250352 7f1e20bfb6c0 Manual compaction at level-0 from '!folders!DiwHbtGAkTYxtshX' @ 72057594037927935 : 1 .. '!items!zgNI2haxhBxBDBdl' @ 0 : 0; will stop at (end)
Binary file not shown.
Binary file not shown.
+1462 -1315
View File
File diff suppressed because it is too large Load Diff
+1455 -1299
View File
File diff suppressed because it is too large Load Diff
+4 -4
View File
@@ -104,8 +104,8 @@
"license": "LICENSE.txt", "license": "LICENSE.txt",
"manifest": "https://www.uberwald.me/gitea/public/fvtt-ecryme/raw/branch/master/system.json", "manifest": "https://www.uberwald.me/gitea/public/fvtt-ecryme/raw/branch/master/system.json",
"compatibility": { "compatibility": {
"minimum": "12", "minimum": "13",
"verified": "12" "verified": "13"
}, },
"id": "fvtt-ecryme", "id": "fvtt-ecryme",
"primaryTokenAttribute": "secondary.health", "primaryTokenAttribute": "secondary.health",
@@ -125,7 +125,7 @@
}, },
"title": "Ecryme, le Jeu de Rôles", "title": "Ecryme, le Jeu de Rôles",
"url": "https://www.uberwald.me/gitea/public/fvtt-ecryme", "url": "https://www.uberwald.me/gitea/public/fvtt-ecryme",
"version": "12.0.2", "version": "13.0.4",
"download": "https://www.uberwald.me/gitea/public/fvtt-ecryme/archive/fvtt-ecryme-v12.0.2.zip", "download": "https://www.uberwald.me/gitea/public/fvtt-ecryme/archive/fvtt-ecryme-v13.0.4.zip",
"background": "systems/fvtt-ecryme/images/assets/ecryme_extract_panel_01.webp" "background": "systems/fvtt-ecryme/images/assets/ecryme_extract_panel_01.webp"
} }
+15
View File
@@ -31,26 +31,31 @@
"pnjvalue": 0, "pnjvalue": 0,
"skilllist": { "skilllist": {
"athletics": { "athletics": {
"key": "athletics",
"name": "ECRY.ui.athletics", "name": "ECRY.ui.athletics",
"max": 0, "max": 0,
"value": 0 "value": 0
}, },
"driving": { "driving": {
"key": "driving",
"name": "ECRY.ui.driving", "name": "ECRY.ui.driving",
"max": 0, "max": 0,
"value": 0 "value": 0
}, },
"fencing": { "fencing": {
"key": "fencing",
"name": "ECRY.ui.fencing", "name": "ECRY.ui.fencing",
"max": 0, "max": 0,
"value": 0 "value": 0
}, },
"brawling": { "brawling": {
"key": "brawling",
"name": "ECRY.ui.brawling", "name": "ECRY.ui.brawling",
"max": 0, "max": 0,
"value": 0 "value": 0
}, },
"shooting": { "shooting": {
"key": "shooting",
"name": "ECRY.ui.shooting", "name": "ECRY.ui.shooting",
"max": 0, "max": 0,
"value": 0 "value": 0
@@ -62,26 +67,31 @@
"pnjvalue": 0, "pnjvalue": 0,
"skilllist": { "skilllist": {
"anthropomecanology": { "anthropomecanology": {
"key": "anthropomecanology",
"name": "ECRY.ui.anthropomecanology", "name": "ECRY.ui.anthropomecanology",
"value": 0, "value": 0,
"max": 10 "max": 10
}, },
"ecrymology": { "ecrymology": {
"key": "ecrymology",
"name": "ECRY.ui.ecrymology", "name": "ECRY.ui.ecrymology",
"value": 0, "value": 0,
"max": 10 "max": 10
}, },
"traumatology": { "traumatology": {
"key": "traumatology",
"name": "ECRY.ui.traumatology", "name": "ECRY.ui.traumatology",
"value": 0, "value": 0,
"max": 10 "max": 10
}, },
"traversology": { "traversology": {
"key": "traversology",
"name": "ECRY.ui.traversology", "name": "ECRY.ui.traversology",
"value": 0, "value": 0,
"max": 10 "max": 10
}, },
"urbatechnology": { "urbatechnology": {
"key": "urbatechnology",
"name": "ECRY.ui.urbatechnology", "name": "ECRY.ui.urbatechnology",
"value": 0, "value": 0,
"max": 10 "max": 10
@@ -93,26 +103,31 @@
"pnjvalue": 0, "pnjvalue": 0,
"skilllist": { "skilllist": {
"quibbling": { "quibbling": {
"key": "quibbling",
"name": "ECRY.ui.quibbling", "name": "ECRY.ui.quibbling",
"value": 0, "value": 0,
"max": 10 "max": 10
}, },
"creativity": { "creativity": {
"key": "creativity",
"name": "ECRY.ui.creativity", "name": "ECRY.ui.creativity",
"value": 0, "value": 0,
"max": 10 "max": 10
}, },
"loquacity": { "loquacity": {
"key": "loquacity",
"name": "ECRY.ui.loquacity", "name": "ECRY.ui.loquacity",
"value": 0, "value": 0,
"max": 10 "max": 10
}, },
"guile": { "guile": {
"key": "guile",
"name": "ECRY.ui.guile", "name": "ECRY.ui.guile",
"value": 0, "value": 0,
"max": 10 "max": 10
}, },
"performance": { "performance": {
"key": "performance",
"name": "ECRY.ui.performance", "name": "ECRY.ui.performance",
"value": 0, "value": 0,
"max": 10 "max": 10
+6 -6
View File
@@ -15,7 +15,7 @@
<div> <div>
<ul> <ul>
<li>Confrontation : {{rollData1.alias}} vs {{rollData2.alias}}</li> <li><strong>Confrontation</strong> : {{rollData1.alias}} vs {{rollData2.alias}}</li>
<li>{{localize rollData1.skill.name}} ({{rollData1.skill.value}}) vs {{localize rollData2.skill.name}} ({{rollData2.skill.value}}) </li> <li>{{localize rollData1.skill.name}} ({{rollData1.skill.value}}) vs {{localize rollData2.skill.name}} ({{rollData2.skill.value}}) </li>
<li>{{rollData1.executionTotal}} vs {{rollData2.preservationTotal}} : {{marginExecution}}</li> <li>{{rollData1.executionTotal}} vs {{rollData2.preservationTotal}} : {{marginExecution}}</li>
<li>{{rollData1.preservationTotal}} vs {{rollData2.executionTotal}} : {{marginPreservation}}</li> <li>{{rollData1.preservationTotal}} vs {{rollData2.executionTotal}} : {{marginPreservation}}</li>
@@ -32,21 +32,21 @@
<li>{{localize "ECRY.ui.effect"}} {{localize "ECRY.ui.execution"}} : {{effectExecution}}</li> <li>{{localize "ECRY.ui.effect"}} {{localize "ECRY.ui.execution"}} : {{effectExecution}}</li>
{{#if impactExecution}} {{#if impactExecution}}
<li>Impact {{rollData2.alias}} : 1 {{localize (concat "ECRY.ui." impactExecution)}}</li> <li>Impact {{rollData2.alias}} : 1 {{localize (concat "ECRY.ui." impactExecution)}}</li>
<button class="button-apply-impact" data-actor-id="{{rollData2.actorId}}" data-impact-type={{rollData1.skill.categKey}} data-impact="{{impactExecution}}">{{localize "ECRY.ui.applyimpact"}}</button> <button class="button-apply-impact" data-token-id="{{rollData2.tokenId}}" data-actor-id="{{rollData2.actorId}}" data-impact-type={{rollData1.skill.categKey}} data-impact="{{impactExecution}}">{{localize "ECRY.ui.applyimpact"}}</button>
{{/if}} {{/if}}
{{#if bonus2}} {{#if bonus2}}
<li>Bonus {{rollData2.alias}} : {{bonus2}}</li> <li>Bonus {{rollData2.alias}} : {{bonus2}}</li>
<button class="button-apply-bonus" data-actor-id="{{rollData2.actorId}}" data-bonus="{{bonus2}}">{{localize "ECRY.ui.applybonus"}}</button> <button class="button-apply-bonus" data-token-id="{{rollData2.tokenId}}" data-actor-id="{{rollData2.actorId}}" data-bonus="{{bonus2}}">{{localize "ECRY.ui.applybonus"}}</button>
{{/if}} {{/if}}
<li>{{localize "ECRY.ui.effect"}} {{localize "ECRY.ui.preservation"}} : {{effectPreservation}}</li> <li>{{localize "ECRY.ui.effect"}} {{localize "ECRY.ui.preservation"}} : {{effectPreservation}}</li>
{{#if impactPreservation}} {{#if impactPreservation}}
<li>Impact {{rollData1.alias}} : 1 {{localize (concat "ECRY.ui." impactPreservation)}}</li> <li>Impact {{rollData1.alias}} : 1 {{localize (concat "ECRY.ui." impactPreservation)}}</li>
<button class="button-apply-impact" data-actor-id="{{rollData1.actorId}}" data-impact-type={{rollData1.skill.categKey}} data-impact="{{impactPreservation}}">{{localize "ECRY.ui.applyimpact"}}</button> <button class="button-apply-impact" data-token-id="{{rollData1.tokenId}}" data-actor-id="{{rollData1.actorId}}" data-impact-type={{rollData1.skill.categKey}} data-impact="{{impactPreservation}}">{{localize "ECRY.ui.applyimpact"}}</button>
{{/if}} {{/if}}
{{#if bonus1}} {{#if bonus1}}
<li>Bonus {{rollData1.alias}} : {{bonus1}}</li> <li>Bonus {{rollData1.alias}} : {{bonus1}}</li>
<button class="button-apply-bonus" data-actor-id="{{rollData1.actorId}}" data-bonus="{{bonus1}}">{{localize "ECRY.ui.applybonus"}}</button> <button class="button-apply-bonus" data-token-id="{{rollData1.tokenId}}" data-actor-id="{{rollData1.actorId}}" data-bonus="{{bonus1}}">{{localize "ECRY.ui.applybonus"}}</button>
{{/if}} {{/if}}
</ul> </ul>
</div> </div>
+42
View File
@@ -0,0 +1,42 @@
<h3 class="welcome-message-h3">Bonjour à tous !</h3>
<div class="message-chat-center">
👋 Juste un petit message pour vous informer que :
<br />
<strong
>⚠️ Le nouveau financement participatif pour la prochaine extension
d'Écryme, LES SECRETS DE L'ÉCRYME ouvre le 21 octobre !</strong
>
</div>
<div class="message-chat-center">
⚠️ Suivez la page de pré-lancement ici pour être sûr de ne pas manquer le
lancement : <br /><a href="https://shorturl.at/qDjg7"
>https://shorturl.at/qDjg7</a
>
</div>
<div class="message-chat-center">
Nous avons aussi un nouveau Discord pour ceux ou celles qui souhaiteraient
participer plus activement à la communauté des jeux d'Open Sesame Games, avec
un espace dédié aux écrymiens ! <br />
Nouveaux joueurs comme vétérans sont les bienvenus, n'hésitez pas à passer
pour papoter, profiter de nos ressources, ou suivre les nouvelles d'OSG plus
directement. Cliquez ici :<br />
<a href="https://discord.gg/dUPhNfJdaD">https://discord.gg/dUPhNfJdaD</a
><br />
</div>
<div class="message-chat-center">
Ce système vous est proposé par Open Sesame Games.<br />
Vous trouverez de l'aide dans
@UUID[Compendium.fvtt-ecryme.help.JournalEntry.wooTFYjEwh83FwgT]{Aide pour
Ecryme}<br />
ainsi que sur le Discord de Foundry FR :<br>
<a href="https://discord.gg/pPSDNJk">https://discord.gg/pPSDNJk</a>
</div>
</div>
Merci pour votre attention et à très bientôt pour la suite ! L'équipe Open
Sesame Games
</div>