Compare commits

..

2 Commits

Author SHA1 Message Date
uberwald c17aea7371 LIen vers le guide depuis le message de bienvenu
Release Creation / build (release) Successful in 1m19s
2026-05-01 22:47:01 +02:00
uberwald 0e573219fd Messages d'informations sur drag&drop de sorts
Release Creation / build (release) Successful in 1m54s
2026-05-01 19:00:37 +02:00
38 changed files with 139 additions and 4 deletions
@@ -286,7 +286,56 @@ export default class HeritiersActorSheet extends HandlebarsApplicationMixin(foun
}
const itemData = item.toObject ? item.toObject() : item
return this.actor.createEmbeddedDocuments("Item", [itemData])
const createdItems = await this.actor.createEmbeddedDocuments("Item", [itemData])
for (const createdItem of createdItems) {
this.#notifyDroppedItemVisibility(createdItem)
}
return createdItems
}
/**
* Notify the user when a dropped magic item will not be visible in the Magie tab.
* @param {Item} item
*/
#notifyDroppedItemVisibility(item) {
if (!item) return
const magieActivee = this.actor.system?.biodata?.magie !== false
if ((item.type === "sort" || this.#isMagicCompetence(item)) && !magieActivee) {
ui.notifications.info("Élément de magie ajouté, mais l'onglet Magie reste masqué tant que « Fiche de Magie ? » n'est pas activé dans la fiche.")
}
if (item.type !== "sort") return
const competenceName = item.system?.competence?.trim()
if (!competenceName) {
ui.notifications.warn("Sort ajouté, mais il n'apparaîtra pas dans l'onglet Magie tant que sa compétence de magie n'est pas renseignée.")
return
}
const competence = this.actor.items.find(actorItem =>
actorItem.type === "competence"
&& actorItem.system?.profil === "magie"
&& actorItem.name === competenceName)
if (!competence) {
ui.notifications.warn(`Sort ajouté, mais il n'apparaîtra pas dans l'onglet Magie tant que la compétence magique « ${competenceName} » n'existe pas sur l'acteur.`)
return
}
if (competenceName === "Magie du Clan" && !["soufflecombat", "soufflemouvement", "souffleesprit"].includes(item.system?.souffle)) {
ui.notifications.warn("Sort ajouté, mais il n'apparaîtra pas dans l'onglet Magie tant que son souffle n'est pas renseigné dans sa fiche.")
}
}
/**
* @param {Item} item
* @returns {boolean}
*/
#isMagicCompetence(item) {
return item?.type === "competence" && item.system?.profil === "magie"
}
/**
+41 -3
View File
@@ -110,7 +110,44 @@ Hooks.once("init", async function () {
});
/* -------------------------------------------- */
function welcomeMessage() {
async function getGuideFoundryJournalLink() {
const isGuideFoundryJournal = name => {
const normalizedName = name?.toLowerCase() ?? "";
return normalizedName.includes("guide de jeu") && normalizedName.includes("foundry");
};
let journal = game.journal.find(j => isGuideFoundryJournal(j.name));
if (!journal) {
for (const pack of game.packs) {
if (pack.documentName !== "JournalEntry") continue;
const entry = pack.index.find(e => isGuideFoundryJournal(e.name));
if (!entry) continue;
journal = await pack.getDocument(entry._id ?? entry.id);
if (journal) break;
}
}
if (!journal) return "";
return foundry.applications.ux.TextEditor.implementation.enrichHTML(
`@UUID[${journal.uuid}]{${journal.name}}`,
{ async: true }
);
}
/* -------------------------------------------- */
async function welcomeMessage() {
const guideFoundryLink = await getGuideFoundryJournalLink();
const guideFoundrySection = guideFoundryLink
? `
<div class="welcome-section">
<i class="fas fa-book"></i>
<p>Consultez aussi le ${guideFoundryLink}.</p>
</div>
`
: "";
ChatMessage.create({
user: game.user.id,
whisper: [game.user.id],
@@ -142,6 +179,7 @@ function welcomeMessage() {
<p>Système développé par <strong>LeRatierBretonnien</strong></p>
<p>Support sur le <a href="https://discord.gg/pPSDNJk" target="_blank"><i class="fab fa-discord"></i> Discord FR de Foundry</a></p>
</div>
${guideFoundrySection}
</div>
</div>
`
@@ -163,7 +201,7 @@ async function importDefaultScene() {
/* -------------------------------------------- */
/* Foundry VTT Initialization */
/* -------------------------------------------- */
Hooks.once("ready", function () {
Hooks.once("ready", async function () {
HeritiersUtility.ready()
@@ -182,7 +220,7 @@ Hooks.once("ready", function () {
}).catch(err =>
console.log("No stats available, giving up.")
)
welcomeMessage();
await welcomeMessage();
importDefaultScene();
});
+4
View File
@@ -1,3 +1,7 @@
2026/04/01-22:18:07.499964 7f303ffff6c0 Recovering log #346
2026/04/01-22:18:07.553355 7f303ffff6c0 Delete type=3 #344
2026/04/01-22:18:07.553447 7f303ffff6c0 Delete type=0 #346
2026/04/01-22:18:57.557641 7f303effd6c0 Level-0 table #352: started
2026/04/01-22:18:57.557674 7f303effd6c0 Level-0 table #352: 0 bytes OK
2026/04/01-22:18:57.594048 7f303effd6c0 Delete type=0 #350
2026/04/01-22:18:57.719667 7f303effd6c0 Manual compaction at level-0 from '!items!1NhJH4IJpxsGmLB8' @ 72057594037927935 : 1 .. '!items!y1yOenfAJTsb3r6e' @ 0 : 0; will stop at (end)
Binary file not shown.
+4
View File
@@ -1,3 +1,7 @@
2026/04/01-22:18:07.610829 7f303ffff6c0 Recovering log #346
2026/04/01-22:18:07.668851 7f303ffff6c0 Delete type=3 #344
2026/04/01-22:18:07.668940 7f303ffff6c0 Delete type=0 #346
2026/04/01-22:18:57.757073 7f303effd6c0 Level-0 table #352: started
2026/04/01-22:18:57.757102 7f303effd6c0 Level-0 table #352: 0 bytes OK
2026/04/01-22:18:57.790436 7f303effd6c0 Delete type=0 #350
2026/04/01-22:18:57.859562 7f303effd6c0 Manual compaction at level-0 from '!items!1ETVaPBtjDtzelK1' @ 72057594037927935 : 1 .. '!items!zbsVCsWxRzkzzG1N' @ 0 : 0; will stop at (end)
Binary file not shown.
+4
View File
@@ -1,3 +1,7 @@
2026/04/01-22:18:07.389011 7f303ffff6c0 Recovering log #346
2026/04/01-22:18:07.442566 7f303ffff6c0 Delete type=3 #344
2026/04/01-22:18:07.442655 7f303ffff6c0 Delete type=0 #346
2026/04/01-22:18:57.645113 7f303effd6c0 Level-0 table #352: started
2026/04/01-22:18:57.645145 7f303effd6c0 Level-0 table #352: 0 bytes OK
2026/04/01-22:18:57.684527 7f303effd6c0 Delete type=0 #350
2026/04/01-22:18:57.719716 7f303effd6c0 Manual compaction at level-0 from '!items!0fPXtA5LkLgG8uDj' @ 72057594037927935 : 1 .. '!items!zvtBlG6KCIn0oCVk' @ 0 : 0; will stop at (end)
Binary file not shown.
+4
View File
@@ -1,3 +1,7 @@
2026/04/01-22:18:07.221290 7f30557ee6c0 Recovering log #346
2026/04/01-22:18:07.279192 7f30557ee6c0 Delete type=3 #344
2026/04/01-22:18:07.279260 7f30557ee6c0 Delete type=0 #346
2026/04/01-22:18:57.441372 7f303effd6c0 Level-0 table #352: started
2026/04/01-22:18:57.441403 7f303effd6c0 Level-0 table #352: 0 bytes OK
2026/04/01-22:18:57.483170 7f303effd6c0 Delete type=0 #350
2026/04/01-22:18:57.557505 7f303effd6c0 Manual compaction at level-0 from '!items!0EAAt0qSzcD9VRBH' @ 72057594037927935 : 1 .. '!items!zfpjROW9LDAlXUkN' @ 0 : 0; will stop at (end)
Binary file not shown.
+4
View File
@@ -1,3 +1,7 @@
2026/04/01-22:18:07.332490 7f303f7fe6c0 Recovering log #346
2026/04/01-22:18:07.386293 7f303f7fe6c0 Delete type=3 #344
2026/04/01-22:18:07.386367 7f303f7fe6c0 Delete type=0 #346
2026/04/01-22:18:57.518084 7f303effd6c0 Level-0 table #352: started
2026/04/01-22:18:57.518132 7f303effd6c0 Level-0 table #352: 0 bytes OK
2026/04/01-22:18:57.557307 7f303effd6c0 Delete type=0 #350
2026/04/01-22:18:57.557530 7f303effd6c0 Manual compaction at level-0 from '!items!0cNSRJVPk3GbvxfD' @ 72057594037927935 : 1 .. '!items!yWDg2KlXEz33TSmZ' @ 0 : 0; will stop at (end)
Binary file not shown.
+4
View File
@@ -1,3 +1,7 @@
2026/04/01-22:18:07.152752 7f303ffff6c0 Recovering log #352
2026/04/01-22:18:07.218573 7f303ffff6c0 Delete type=3 #350
2026/04/01-22:18:07.218647 7f303ffff6c0 Delete type=0 #352
2026/04/01-22:18:57.411681 7f303effd6c0 Level-0 table #358: started
2026/04/01-22:18:57.411725 7f303effd6c0 Level-0 table #358: 0 bytes OK
2026/04/01-22:18:57.441232 7f303effd6c0 Delete type=0 #356
2026/04/01-22:18:57.557488 7f303effd6c0 Manual compaction at level-0 from '!folders!FBCujRu055QLePB2' @ 72057594037927935 : 1 .. '!items!zEl2NQsnCpELVWzh' @ 0 : 0; will stop at (end)
Binary file not shown.
+4
View File
@@ -1,3 +1,7 @@
2026/04/01-22:18:07.281938 7f303ffff6c0 Recovering log #346
2026/04/01-22:18:07.330015 7f303ffff6c0 Delete type=3 #344
2026/04/01-22:18:07.330112 7f303ffff6c0 Delete type=0 #346
2026/04/01-22:18:57.483327 7f303effd6c0 Level-0 table #352: started
2026/04/01-22:18:57.483365 7f303effd6c0 Level-0 table #352: 0 bytes OK
2026/04/01-22:18:57.517844 7f303effd6c0 Delete type=0 #350
2026/04/01-22:18:57.557519 7f303effd6c0 Manual compaction at level-0 from '!items!2QqvtClSVnh5ejXu' @ 72057594037927935 : 1 .. '!items!xzRJ6JP1HqoqxLdj' @ 0 : 0; will stop at (end)
Binary file not shown.
+4
View File
@@ -1,3 +1,7 @@
2026/04/01-22:18:07.783399 7f30557ee6c0 Recovering log #64
2026/04/01-22:18:07.832197 7f30557ee6c0 Delete type=3 #62
2026/04/01-22:18:07.832261 7f30557ee6c0 Delete type=0 #64
2026/04/01-22:18:57.822755 7f303effd6c0 Level-0 table #70: started
2026/04/01-22:18:57.822793 7f303effd6c0 Level-0 table #70: 0 bytes OK
2026/04/01-22:18:57.859405 7f303effd6c0 Delete type=0 #68
2026/04/01-22:18:57.859590 7f303effd6c0 Manual compaction at level-0 from '!journal!QZDy8zwSVh7t4meA' @ 72057594037927935 : 1 .. '!journal.pages!QZDy8zwSVh7t4meA.gdXBDBkPlBjfmTy7' @ 0 : 0; will stop at (end)
Binary file not shown.
+4
View File
@@ -1,3 +1,7 @@
2026/04/01-22:18:07.445268 7f303f7fe6c0 Recovering log #150
2026/04/01-22:18:07.497391 7f303f7fe6c0 Delete type=3 #148
2026/04/01-22:18:07.497466 7f303f7fe6c0 Delete type=0 #150
2026/04/01-22:18:57.594156 7f303effd6c0 Level-0 table #156: started
2026/04/01-22:18:57.594188 7f303effd6c0 Level-0 table #156: 0 bytes OK
2026/04/01-22:18:57.644990 7f303effd6c0 Delete type=0 #154
2026/04/01-22:18:57.719693 7f303effd6c0 Manual compaction at level-0 from '!folders!5pCYN0vTiCKOHrXM' @ 72057594037927935 : 1 .. '!items!zbZ88BQkH9ZCYlDK' @ 0 : 0; will stop at (end)
Binary file not shown.
+4
View File
@@ -1,3 +1,7 @@
2026/04/01-22:18:07.556228 7f30557ee6c0 Recovering log #347
2026/04/01-22:18:07.608208 7f30557ee6c0 Delete type=3 #345
2026/04/01-22:18:07.608281 7f30557ee6c0 Delete type=0 #347
2026/04/01-22:18:57.684760 7f303effd6c0 Level-0 table #353: started
2026/04/01-22:18:57.684810 7f303effd6c0 Level-0 table #353: 0 bytes OK
2026/04/01-22:18:57.719410 7f303effd6c0 Delete type=0 #351
2026/04/01-22:18:57.719734 7f303effd6c0 Manual compaction at level-0 from '!items!19r9ijZUyvnlIqgm' @ 72057594037927935 : 1 .. '!items!zON0h5SjFyANjPnA' @ 0 : 0; will stop at (end)
Binary file not shown.
+4
View File
@@ -1,3 +1,7 @@
2026/04/01-22:18:07.672422 7f303f7fe6c0 Recovering log #344
2026/04/01-22:18:07.716816 7f303f7fe6c0 Delete type=3 #342
2026/04/01-22:18:07.716880 7f303f7fe6c0 Delete type=0 #344
2026/04/01-22:18:57.719835 7f303effd6c0 Level-0 table #349: started
2026/04/01-22:18:57.719929 7f303effd6c0 Level-0 table #349: 0 bytes OK
2026/04/01-22:18:57.756920 7f303effd6c0 Delete type=0 #347
2026/04/01-22:18:57.859545 7f303effd6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)
Binary file not shown.
+4
View File
@@ -1,3 +1,7 @@
2026/04/01-22:18:07.719675 7f303ffff6c0 Recovering log #315
2026/04/01-22:18:07.780030 7f303ffff6c0 Delete type=3 #313
2026/04/01-22:18:07.780122 7f303ffff6c0 Delete type=0 #315
2026/04/01-22:18:57.790586 7f303effd6c0 Level-0 table #321: started
2026/04/01-22:18:57.790620 7f303effd6c0 Level-0 table #321: 0 bytes OK
2026/04/01-22:18:57.822610 7f303effd6c0 Delete type=0 #319
2026/04/01-22:18:57.859578 7f303effd6c0 Manual compaction at level-0 from '!scenes!8DjkNeeujp2qff1N' @ 72057594037927935 : 1 .. '!scenes.levels!ypDutqjqZcr7lx6I.defaultLevel0000' @ 0 : 0; will stop at (end)
Binary file not shown.