Compare commits

..

5 Commits

Author SHA1 Message Date
uberwald fdbbda28f4 IMprove tresor management
Release Creation / build (release) Successful in 1m40s
2026-07-07 21:21:50 +02:00
uberwald ce5dbebd76 Cleanup doc and licence info 2026-07-01 23:49:17 +02:00
uberwald 9101ad8711 Cleanup doc and licence info 2026-07-01 23:48:39 +02:00
uberwald 311091b262 Cleanup doc and licence info
Release Creation / build (release) Successful in 1m36s
2026-07-01 23:36:16 +02:00
uberwald 6f94521a88 UPdate images and licence info 2026-07-01 23:33:08 +02:00
71 changed files with 617 additions and 194 deletions
+4 -14
View File
@@ -1,17 +1,7 @@
IMAGES
- Exceptées les peties icônes N&B de d10 et celles de game-icon.org,
les images des fichiers du dossier images utilisées dans ce logiciel sont :
Copyright © 2023-2024 Antre Monde Éditions ;
elles sont leurs propriétés (et celles de leurs auteurs respectifs)
et elles ne peuvent ni être reproduites ni réutilisées en dehors de
ce logiciel, sans leur autorisation.
- les icônes rondes, blanches sur fond noir, sont issues du site game-icons.org
et sont sous licence https://creativecommons.org/licenses/by/3.0/
Vous pouvez retrouver le nom de leurs auteurs respectifs sur ce site.
- 'carte_hk.jpg', d'après 'wahaha2005', est sous GNU Free Documentation License
version 1.2 ou toute version ultérieure publiée par la Free Software Foundation,
https://commons.wikimedia.org/wiki/File:Hong_Kong_18_Districts_Blank_Map.svg
- Les icones produites par LeRatierBretonnien depuis games-icons.org, sous licence Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International
IMAGES :
CF images_info.md for details on the images used in this system.
All icons : game-icons.net, free for commercial use, no attribution required.
All other images/background/logo : Provided by Antre Monde edition, no AI
Code Author :
- Developed by LeRatierBretonnien / www.uberwald.me
+4 -2
View File
@@ -4,10 +4,12 @@ Système [Foundry VTT](https://foundryvtt.com) pour **Chroniques de l'Etrange**,
Copyright 2025-2026 Antre Monde Editions All rights reserved
Chroniques de l'ETrange is a game written by Romain d'Huissier and Cédric Lameire. The authors retain their moral rights to this work in both print and digital formats.
Chroniques de l'Etrange is a game written by Romain d'Huissier and Cédric Lameire. The authors retain their moral rights to this work in both print and digital formats.
This system for FoundryVTT has been approved and authorized by Antre-Monde Edition.
Ce système s'inspire d'un système précédent "chroniquesdeletrange" développé par David R.D. 'Mystery Man From Outerspace' Bercovici et Christophe 'Kristov / Qaw' Laudon. Le code a été intégralément réécrit pour être compatible avec la version 14 de FoundryVTT, et pour intégrer le maximum de mécaniques de jeu des Chroniques de l'Etrange, et n'a donc aucun lien de code avec le système précédent.
Ce système n'a plus aucun lien avec le système précédent "chroniquesdeletrange" développé par David R.D. 'Mystery Man From Outerspace' Bercovici et Christophe 'Kristov / Qaw' Laudon. Le code a été intégralément réécrit pour être compatible avec la version 14 de FoundryVTT, et pour intégrer le maximum de mécaniques de jeu des Chroniques de l'Etrange, et n'a donc aucun lien de code avec le système précédent.
Les icones de jeu ont été intégralement remplacées par des icônes libres de droit provenant de [game-icons.net](https://game-icons.net/), et les images de personnages et de fonds d'écran ont été fournies par Antre Monde Éditions.
---
+94 -6
View File
@@ -2743,6 +2743,75 @@ section.npc .cde-neon-tabs .item.active {
color: #4a9eff;
text-shadow: 0 0 8px rgba(74, 158, 255, 0.5);
}
.cde-chat-recovery .cde-chat-recovery-header {
display: flex;
align-items: center;
gap: 8px;
margin-bottom: 8px;
}
.cde-chat-recovery .cde-chat-recovery-icon {
width: 28px;
height: 28px;
border: none;
}
.cde-chat-recovery .cde-chat-recovery-title {
font-weight: 700;
font-size: 1.05rem;
}
.cde-chat-recovery .cde-chat-recovery-dice {
display: flex;
gap: 8px;
align-items: center;
margin-bottom: 6px;
font-size: 0.9rem;
}
.cde-chat-recovery .cde-chat-recovery-dice-label {
font-weight: 600;
white-space: nowrap;
}
.cde-chat-recovery .cde-chat-recovery-dice-results {
font-weight: 500;
color: #7d94b8;
}
.cde-chat-recovery .cde-chat-recovery-results {
display: flex;
gap: 12px;
margin-bottom: 4px;
}
.cde-chat-recovery .cde-chat-recovery-even,
.cde-chat-recovery .cde-chat-recovery-odd {
display: flex;
align-items: center;
gap: 6px;
font-size: 0.85rem;
}
.cde-chat-recovery .cde-chat-recovery-count {
font-size: 1.3rem;
font-weight: 800;
min-width: 1.6em;
text-align: center;
}
.cde-chat-recovery .cde-chat-recovery-even .cde-chat-recovery-count {
color: #cc44ff;
}
.cde-chat-recovery .cde-chat-recovery-odd .cde-chat-recovery-count {
color: #d94f3d;
}
.cde-chat-recovery .cde-chat-recovery-pools {
margin-top: 6px;
padding-top: 4px;
border-top: 1px solid #1a2436;
font-size: 0.8rem;
}
.cde-chat-recovery .cde-chat-recovery-pool-row {
padding: 1px 4px;
}
.cde-chat-recovery .cde-chat-recovery-pool-boost {
color: #cc44ff;
font-weight: 600;
font-size: 0.8rem;
padding: 1px 4px;
}
.cde-tabs {
margin-top: 12px;
border-bottom: 1px solid #1a2436;
@@ -2923,6 +2992,26 @@ strong.ellipsis {
width: 22px;
text-align: center;
}
.cde-recovery-bar {
margin-bottom: 10px;
}
.cde-recovery-bar .cde-recovery-boosts {
display: flex;
flex-wrap: wrap;
gap: 0.3em 1em;
margin-top: 4px;
font-size: 0.85em;
}
.cde-recovery-bar .cde-recovery-boost {
display: inline-flex;
align-items: center;
gap: 0.3em;
white-space: nowrap;
cursor: pointer;
}
.cde-recovery-bar .cde-recovery-boost input[type="checkbox"] {
cursor: pointer;
}
.cde-tt-block {
margin-bottom: 12px;
}
@@ -3947,10 +4036,10 @@ ol.item-list li.item .item-controls a.item-control:hover {
letter-spacing: 0;
font-size: 11px;
}
/* Combatant list */
/* Combatant list — grows to fill available space */
.cde-wheel-combatants {
flex: 0 0 auto;
max-height: 130px;
flex: 1 1 auto;
min-height: 0;
overflow-y: auto;
border-bottom: 1px solid #1a2436;
}
@@ -4014,12 +4103,11 @@ ol.item-list li.item .item-controls a.item-control:hover {
color: #7d94b8;
flex-shrink: 0;
}
/* Action area */
/* Action area — fixed to content height, pushed to bottom */
.cde-wheel-actions {
flex: 1 1 auto;
flex: 0 0 auto;
display: flex;
flex-direction: column;
overflow-y: auto;
padding: 8px 10px 10px;
gap: 6px;
}
+100 -6
View File
@@ -2768,6 +2768,79 @@ section.npc .cde-neon-tabs .item.active { color: @cde-supernatural; borde
text-shadow: 0 0 8px fade(@cde-spell, 50%);
}
// Recovery roll chat
.cde-chat-recovery {
.cde-chat-recovery-header {
display: flex;
align-items: center;
gap: 8px;
margin-bottom: 8px;
}
.cde-chat-recovery-icon {
width: 28px;
height: 28px;
border: none;
}
.cde-chat-recovery-title {
font-weight: 700;
font-size: 1.05rem;
}
.cde-chat-recovery-dice {
display: flex;
gap: 8px;
align-items: center;
margin-bottom: 6px;
font-size: 0.9rem;
}
.cde-chat-recovery-dice-label {
font-weight: 600;
white-space: nowrap;
}
.cde-chat-recovery-dice-results {
font-weight: 500;
color: @cde-muted;
}
.cde-chat-recovery-results {
display: flex;
gap: 12px;
margin-bottom: 4px;
}
.cde-chat-recovery-even,
.cde-chat-recovery-odd {
display: flex;
align-items: center;
gap: 6px;
font-size: 0.85rem;
}
.cde-chat-recovery-count {
font-size: 1.3rem;
font-weight: 800;
min-width: 1.6em;
text-align: center;
}
.cde-chat-recovery-even .cde-chat-recovery-count {
color: @cde-supernatural;
}
.cde-chat-recovery-odd .cde-chat-recovery-count {
color: @wu-fire;
}
.cde-chat-recovery-pools {
margin-top: 6px;
padding-top: 4px;
border-top: 1px solid @cde-border;
font-size: 0.8rem;
}
.cde-chat-recovery-pool-row {
padding: 1px 4px;
}
.cde-chat-recovery-pool-boost {
color: @cde-supernatural;
font-weight: 600;
font-size: 0.8rem;
padding: 1px 4px;
}
}
// Legacy tabs (actor sheets still use cde-tabs)
.cde-tabs {
margin-top: @cde-gap;
@@ -2981,6 +3054,28 @@ strong.ellipsis {
// ============================================================
// Three Treasures layout (HEI / SAN-ZING / PTAO)
// ============================================================
.cde-recovery-bar {
margin-bottom: 10px;
.cde-recovery-boosts {
display: flex;
flex-wrap: wrap;
gap: 0.3em 1em;
margin-top: 4px;
font-size: 0.85em;
}
.cde-recovery-boost {
display: inline-flex;
align-items: center;
gap: 0.3em;
white-space: nowrap;
cursor: pointer;
input[type="checkbox"] {
cursor: pointer;
}
}
}
.cde-tt-block {
margin-bottom: 12px;
@@ -4094,10 +4189,10 @@ ol.item-list {
}
}
/* Combatant list */
/* Combatant list — grows to fill available space */
.cde-wheel-combatants {
flex: 0 0 auto;
max-height: 130px;
flex: 1 1 auto;
min-height: 0;
overflow-y: auto;
border-bottom: 1px solid @cde-border;
}
@@ -4172,12 +4267,11 @@ ol.item-list {
flex-shrink: 0;
}
/* Action area */
/* Action area — fixed to content height, pushed to bottom */
.cde-wheel-actions {
flex: 1 1 auto;
flex: 0 0 auto;
display: flex;
flex-direction: column;
overflow-y: auto;
padding: 8px 10px 10px;
gap: 6px;
+61 -14
View File
@@ -955,6 +955,11 @@ var CharacterDataModel = class extends foundry.abstract.TypeDataModel {
threetreasures: new fields.SchemaField({
heiyang: new fields.SchemaField({ value: numberField(0, { min: 0 }), max: numberField(0, { min: 0 }) }),
heiyin: new fields.SchemaField({ value: numberField(0, { min: 0 }), max: numberField(0, { min: 0 }) }),
recoverybonus: new fields.SchemaField({
san: boolField(),
zing: boolField(),
hei: boolField()
}),
dicelevel: new fields.SchemaField({
level0d: treasureLevel(),
level1d: treasureLevel(),
@@ -2437,34 +2442,75 @@ var CDECharacterSheet = class _CDECharacterSheet extends CDEBaseActorSheet {
const results = roll.dice[0].results.map((r) => r.result);
const evenCount = results.filter((r) => r % 2 === 0).length;
const oddCount = results.filter((r) => r % 2 !== 0).length;
const boostSan = sys.threetreasures?.recoverybonus?.san ?? false;
const boostZing = sys.threetreasures?.recoverybonus?.zing ?? false;
const boostHei = sys.threetreasures?.recoverybonus?.hei ?? false;
const applyBoost = (count, enabled) => enabled && count > 0 ? count + 1 : count;
const sanTotal = applyBoost(evenCount, boostSan);
const zingTotal = applyBoost(oddCount, boostZing);
const heiYangCount = applyBoost(evenCount, boostHei);
const heiYinCount = applyBoost(oddCount, boostHei);
const cap = (max) => max > 0 ? max : Infinity;
const heiYang = Math.min(
(sys.threetreasures?.heiyang?.value ?? 0) + evenCount,
(sys.threetreasures?.heiyang?.value ?? 0) + heiYangCount,
cap(sys.threetreasures?.heiyang?.max)
);
const heiYin = Math.min(
(sys.threetreasures?.heiyin?.value ?? 0) + oddCount,
(sys.threetreasures?.heiyin?.value ?? 0) + heiYinCount,
cap(sys.threetreasures?.heiyin?.max)
);
const san = Math.min(
(sys.threetreasures?.dicelevel?.level0d?.san?.value ?? 0) + evenCount,
cap(sys.threetreasures?.dicelevel?.level0d?.san?.max)
);
const zing = Math.min(
(sys.threetreasures?.dicelevel?.level0d?.zing?.value ?? 0) + oddCount,
cap(sys.threetreasures?.dicelevel?.level0d?.zing?.max)
);
const poolDeltas = {
level2d: { san: 0, zing: 0 },
level1d: { san: 0, zing: 0 },
level0d: { san: 0, zing: 0 }
};
const fillPool = (branch, count) => {
let remaining = count;
for (const key of ["level2d", "level1d", "level0d"]) {
const slot = sys.threetreasures?.dicelevel?.[key]?.[branch];
if (!slot) continue;
const space = cap(slot.max) - (slot.value ?? 0);
if (space <= 0) continue;
const toAdd = Math.min(remaining, space);
remaining -= toAdd;
poolDeltas[key][branch] = toAdd;
if (remaining <= 0) break;
}
return count - remaining;
};
fillPool("san", sanTotal);
fillPool("zing", zingTotal);
await actor.update({
"system.threetreasures.heiyang.value": heiYang,
"system.threetreasures.heiyin.value": heiYin,
"system.threetreasures.dicelevel.level0d.san.value": san,
"system.threetreasures.dicelevel.level0d.zing.value": zing
"system.threetreasures.dicelevel.level2d.san.value": (sys.threetreasures?.dicelevel?.level2d?.san?.value ?? 0) + poolDeltas.level2d.san,
"system.threetreasures.dicelevel.level2d.zing.value": (sys.threetreasures?.dicelevel?.level2d?.zing?.value ?? 0) + poolDeltas.level2d.zing,
"system.threetreasures.dicelevel.level1d.san.value": (sys.threetreasures?.dicelevel?.level1d?.san?.value ?? 0) + poolDeltas.level1d.san,
"system.threetreasures.dicelevel.level1d.zing.value": (sys.threetreasures?.dicelevel?.level1d?.zing?.value ?? 0) + poolDeltas.level1d.zing,
"system.threetreasures.dicelevel.level0d.san.value": (sys.threetreasures?.dicelevel?.level0d?.san?.value ?? 0) + poolDeltas.level0d.san,
"system.threetreasures.dicelevel.level0d.zing.value": (sys.threetreasures?.dicelevel?.level0d?.zing?.value ?? 0) + poolDeltas.level0d.zing
});
const rollLabel = `${game.i18n.localize("CDE.Recovery")} \u2014 ${aspectLabel}`;
const diceStr = results.join(" \xB7 ");
const typeOfThrow = Number(sys.prefs?.typeofthrow?.choice ?? 0);
const ROLL_MODES2 = ["roll", "gmroll", "blindroll", "selfroll"];
const rollMode = ROLL_MODES2[typeOfThrow] ?? "roll";
const poolLine = (key, label) => {
const s = poolDeltas[key].san;
const z = poolDeltas[key].zing;
if (!s && !z) return "";
return `<div class="cde-chat-recovery-pool-row">${label} \u2192 San +${s}, Zing +${z}</div>`;
};
const poolRows = [
poolLine("level2d", "\u22122 d\xE9s"),
poolLine("level1d", "\u22121 d\xE9"),
poolLine("level0d", "0 d\xE9")
].filter(Boolean).join("");
const poolBoostHtml = [
boostSan ? `<div class="cde-chat-recovery-pool-boost">+1 ${game.i18n.localize("CDE.RecoveryBoostSan")}</div>` : "",
boostZing ? `<div class="cde-chat-recovery-pool-boost">+1 ${game.i18n.localize("CDE.RecoveryBoostZing")}</div>` : ""
].filter(Boolean).join("");
const poolHtml = poolBoostHtml + poolRows;
await ChatMessage.create({
user: game.user.id,
speaker: ChatMessage.getSpeaker({ actor }),
@@ -2482,14 +2528,15 @@ var CDECharacterSheet = class _CDECharacterSheet extends CDEBaseActorSheet {
<div class="cde-chat-recovery-even">
<span class="cde-chat-recovery-count">${evenCount}</span>
<span><strong>${game.i18n.localize("CDE.RecoveryEvenLabel")}</strong></span>
<span>\u2192 +${evenCount} Hei Yang, +${evenCount} San</span>
<span>\u2192 Hei Yang +${heiYangCount}${heiYang !== (sys.threetreasures?.heiyang?.value ?? 0) + heiYangCount ? ` (${game.i18n.localize("CDE.ClampedTo")} ${sys.threetreasures?.heiyang?.max})` : ""}${boostHei && evenCount > 0 ? ` (+1 ${game.i18n.localize("CDE.RecoveryBoostHeiLabel")})` : ""}</span>
</div>
<div class="cde-chat-recovery-odd">
<span class="cde-chat-recovery-count">${oddCount}</span>
<span><strong>${game.i18n.localize("CDE.RecoveryOddLabel")}</strong></span>
<span>\u2192 +${oddCount} Hei Yin, +${oddCount} Zing</span>
<span>\u2192 Hei Yin +${heiYinCount}${heiYin !== (sys.threetreasures?.heiyin?.value ?? 0) + heiYinCount ? ` (${game.i18n.localize("CDE.ClampedTo")} ${sys.threetreasures?.heiyin?.max})` : ""}${boostHei && oddCount > 0 ? ` (+1 ${game.i18n.localize("CDE.RecoveryBoostHeiLabel")})` : ""}</span>
</div>
</div>
<div class="cde-chat-recovery-pools">${poolHtml}</div>
</div>`,
rolls: [roll],
rollMode
+2 -2
View File
File diff suppressed because one or more lines are too long
+80
View File
@@ -0,0 +1,80 @@
# Images du système
## `images/` — racine
| Fichier | Description | Origin |
|---|---|---|
| `cde_bois.webp` | Icône Wu Xing — Bois | game-icons.net |
| `cde_eau.webp` | Icône Wu Xing — Eau | game-icons.net |
| `cde_feu.webp` | Icône Wu Xing — Feu | game-icons.net |
| `cde_metal.webp` | Icône Wu Xing — Métal | game-icons.net |
| `cde_terre.webp` | Icône Wu Xing — Terre | game-icons.net |
| `cde_yang.webp` | Icône polarité Yang | game-icons.net |
| `cde_yin.webp` | Icône polarité Yin | game-icons.net |
| `logo_cde.webp` | Logo du jeu | Provided by Antre Monde edition, no AI |
| `logo_jeu.webp` | Logo secondaire | Provided by Antre Monde edition, no AI |
| `loksyu.webp` | Diagramme Loksyu (complet) | Provided by Antre Monde edition, no AI |
| `loksyu_fd_trans.webp` | Diagramme Loksyu (fond transparent) | Provided by Antre Monde edition, no AI |
| `loksyu_long.webp` | Diagramme Loksyu (horizontal) | Provided by Antre Monde edition, no AI |
| `nghang.webp` | Diagramme Ng Hang (complet) | Provided by Antre Monde edition, no AI |
| `nghang_long.webp` | Diagramme Ng Hang (horizontal) | Provided by Antre Monde edition, no AI |
| `yin_yang.webp` | Symbole Yin-Yang | Provided by Antre Monde edition, no AI |
## `images/background/` — arrière-plans
| Fichier | Description | Origin |
|---|---|---|
| `accueil.webp` | Fond de l'écran d'accueil | Provided by Antre Monde edition, no AI |
| `carte_cde.webp` | Carte du monde CdE | Provided by Antre Monde edition, no AI |
| `carte_hk.webp` | Carte de Hong Kong | Provided by Antre Monde edition, no AI |
| `ecran.webp` | Fond d'écran générique | Provided by Antre Monde edition, no AI |
| `loksyu_whole.webp` | Diagramme Loksyu (pleine page) | Provided by Antre Monde edition, no AI |
| `nghang_whole.webp` | Diagramme Ng Hang (pleine page) | Provided by Antre Monde edition, no AI |
## `images/fat_si/` — portraits de personnages prétirés
| Fichier | Personnage | Origin |
|---|---|---|
| `billy.webp` | Billy | Provided by Antre Monde edition, no AI |
| `brenda.webp` | Brenda | Provided by Antre Monde edition, no AI |
| `danny.webp` | Danny | Provided by Antre Monde edition, no AI |
| `emerson.webp` | Emerson | Provided by Antre Monde edition, no AI |
| `freddie.webp` | Freddie | Provided by Antre Monde edition, no AI |
| `lily.webp` | Lily | Provided by Antre Monde edition, no AI |
| `maggie.webp` | Maggie | Provided by Antre Monde edition, no AI |
| `mallory.webp` | Mallory | Provided by Antre Monde edition, no AI |
| `penny.webp` | Penny | Provided by Antre Monde edition, no AI |
| `sam.webp` | Sam | Provided by Antre Monde edition, no AI |
## `images/icons/` — icônes d'équipement et de type
| Fichier | Usage | Origin |
|---|---|---|
| `icon-armor.svg` | Icône armure | game-icons.net |
| `icon-ingredient.svg` | Icône ingrédient | game-icons.net |
| `icon-item.svg` | Icône équipement générique | game-icons.net |
| `icon-kungfu.svg` | Icône art martial | game-icons.net |
| `icon-npc-demon.svg` | Icône PNJ — démon | game-icons.net |
| `icon-npc-dieu.svg` | Icône PNJ — dieu/divinité | game-icons.net |
| `icon-npc-esprit-animal.svg` | Icône PNJ — esprit animal | game-icons.net |
| `icon-sanhei.svg` | Icône sanhei | game-icons.net |
| `icon-spell.svg` | Icône sortilège | game-icons.net |
| `icon-supernatural.svg` | Icône capacité surnaturelle | game-icons.net |
| `icon-weapon.svg` | Icône arme | game-icons.net |
## `images/ui/` — captures d'écran de l'interface
| Fichier | Description | Origin |
|---|---|---|
| `character-sheet-items.png` | Feuille perso — onglet Équipement | Screenshot of the system |
| `character-sheet-kungfu.png` | Feuille perso — onglet Kung-Fu | Screenshot of the system |
| `character-sheet-magics.png` | Feuille perso — onglet Magies | Screenshot of the system |
| `character-sheet-nghang.png` | Feuille perso — onglet Nghang | Screenshot of the system |
| `character-sheet-skills.png` | Feuille perso — onglet Compétences | Screenshot of the system |
| `character-sheet-treasures.png` | Feuille perso — onglet Trésors | Screenshot of the system |
| `initiative-wheel.png` | Roue d'initiative | Screenshot of the system |
| `loksyu-app.png` | Application Loksyu autonome | Screenshot of the system |
| `migration-dialog.png` | Dialogue d'import/migration | Screenshot of the system |
| `npc-sheet.png` | Feuille de PNJ | Screenshot of the system |
| `roll-dialog.png` | Dialogue de jet | Screenshot of the system |
| `roll-result-chat.png` | Résultat de jet dans le chat | Screenshot of the system |
+5
View File
@@ -291,6 +291,11 @@
"CDE.RecoveryNoAspect": "Votre aspect est à 0, la Récupération est impossible.",
"CDE.RecoveryNoGuardian": "Vous devez choisir un Gardien Céleste pour utiliser la Récupération.",
"CDE.RecoveryOddLabel": "Impairs",
"CDE.RecoveryBoostZing": "Récupération de Zing accrue",
"CDE.RecoveryBoostSan": "Récupération de San accrue",
"CDE.RecoveryBoostHei": "Récupération de Hei accrue",
"CDE.RecoveryBoostHeiLabel": "Récup. Hei",
"CDE.ClampedTo": "max:",
"CDE.Renowned": "Renommé",
"CDE.ResourceMax": "Max",
"CDE.ResourceMin": "Min",
+1 -1
View File
@@ -1 +1 @@
MANIFEST-000064
MANIFEST-000072
+7 -3
View File
@@ -1,3 +1,7 @@
2026/07/01-17:09:48.049670 7f190cdff6c0 Recovering log #62
2026/07/01-17:09:48.058970 7f190cdff6c0 Delete type=3 #60
2026/07/01-17:09:48.059029 7f190cdff6c0 Delete type=0 #62
2026/07/07-21:20:15.241511 7f677f7fe6c0 Recovering log #70
2026/07/07-21:20:15.254198 7f677f7fe6c0 Delete type=3 #68
2026/07/07-21:20:15.254278 7f677f7fe6c0 Delete type=0 #70
2026/07/07-21:21:25.218421 7f677ebff6c0 Level-0 table #75: started
2026/07/07-21:21:25.218444 7f677ebff6c0 Level-0 table #75: 0 bytes OK
2026/07/07-21:21:25.224948 7f677ebff6c0 Delete type=0 #73
2026/07/07-21:21:25.244168 7f677ebff6c0 Manual compaction at level-0 from '!items!3aig6MWvZCRoWXPW' @ 72057594037927935 : 1 .. '!items!cXaQG1TBE0jzrbNt' @ 0 : 0; will stop at (end)
+7 -7
View File
@@ -1,7 +1,7 @@
2026/07/01-15:26:29.318091 7f18beffd6c0 Recovering log #58
2026/07/01-15:26:29.363367 7f18beffd6c0 Delete type=3 #56
2026/07/01-15:26:29.363411 7f18beffd6c0 Delete type=0 #58
2026/07/01-17:09:44.878215 7f18be7fc6c0 Level-0 table #63: started
2026/07/01-17:09:44.878236 7f18be7fc6c0 Level-0 table #63: 0 bytes OK
2026/07/01-17:09:44.884157 7f18be7fc6c0 Delete type=0 #61
2026/07/01-17:09:44.903403 7f18be7fc6c0 Manual compaction at level-0 from '!items!3aig6MWvZCRoWXPW' @ 72057594037927935 : 1 .. '!items!cXaQG1TBE0jzrbNt' @ 0 : 0; will stop at (end)
2026/07/07-21:18:30.784888 7f67ccbfe6c0 Recovering log #66
2026/07/07-21:18:30.794190 7f67ccbfe6c0 Delete type=3 #64
2026/07/07-21:18:30.794249 7f67ccbfe6c0 Delete type=0 #66
2026/07/07-21:20:10.802303 7f677ebff6c0 Level-0 table #71: started
2026/07/07-21:20:10.802330 7f677ebff6c0 Level-0 table #71: 0 bytes OK
2026/07/07-21:20:10.808601 7f677ebff6c0 Delete type=0 #69
2026/07/07-21:20:10.829139 7f677ebff6c0 Manual compaction at level-0 from '!items!3aig6MWvZCRoWXPW' @ 72057594037927935 : 1 .. '!items!cXaQG1TBE0jzrbNt' @ 0 : 0; will stop at (end)
+1 -1
View File
@@ -1 +1 @@
MANIFEST-000064
MANIFEST-000072
+7 -3
View File
@@ -1,3 +1,7 @@
2026/07/01-17:09:48.127219 7f18bffff6c0 Recovering log #62
2026/07/01-17:09:48.136685 7f18bffff6c0 Delete type=3 #60
2026/07/01-17:09:48.136731 7f18bffff6c0 Delete type=0 #62
2026/07/07-21:20:15.322073 7f67cd3ff6c0 Recovering log #70
2026/07/07-21:20:15.332602 7f67cd3ff6c0 Delete type=3 #68
2026/07/07-21:20:15.332629 7f67cd3ff6c0 Delete type=0 #70
2026/07/07-21:21:25.256014 7f677ebff6c0 Level-0 table #75: started
2026/07/07-21:21:25.256027 7f677ebff6c0 Level-0 table #75: 0 bytes OK
2026/07/07-21:21:25.262067 7f677ebff6c0 Delete type=0 #73
2026/07/07-21:21:25.269143 7f677ebff6c0 Manual compaction at level-0 from '!journal!CDEGuideMain0001' @ 72057594037927935 : 1 .. '!journal.pages!CDEGuideMain0001.wgqIHHVlO9miegn1' @ 0 : 0; will stop at (end)
+7 -7
View File
@@ -1,7 +1,7 @@
2026/07/01-15:26:29.675722 7f18bffff6c0 Recovering log #58
2026/07/01-15:26:29.729808 7f18bffff6c0 Delete type=3 #56
2026/07/01-15:26:29.729859 7f18bffff6c0 Delete type=0 #58
2026/07/01-17:09:44.910163 7f18be7fc6c0 Level-0 table #63: started
2026/07/01-17:09:44.910189 7f18be7fc6c0 Level-0 table #63: 0 bytes OK
2026/07/01-17:09:44.916090 7f18be7fc6c0 Delete type=0 #61
2026/07/01-17:09:44.923280 7f18be7fc6c0 Manual compaction at level-0 from '!journal!CDEGuideMain0001' @ 72057594037927935 : 1 .. '!journal.pages!CDEGuideMain0001.wgqIHHVlO9miegn1' @ 0 : 0; will stop at (end)
2026/07/07-21:18:30.861129 7f67ccbfe6c0 Recovering log #66
2026/07/07-21:18:30.870622 7f67ccbfe6c0 Delete type=3 #64
2026/07/07-21:18:30.870683 7f67ccbfe6c0 Delete type=0 #66
2026/07/07-21:20:10.842315 7f677ebff6c0 Level-0 table #71: started
2026/07/07-21:20:10.842337 7f677ebff6c0 Level-0 table #71: 0 bytes OK
2026/07/07-21:20:10.848123 7f677ebff6c0 Delete type=0 #69
2026/07/07-21:20:10.860868 7f677ebff6c0 Manual compaction at level-0 from '!journal!CDEGuideMain0001' @ 72057594037927935 : 1 .. '!journal.pages!CDEGuideMain0001.wgqIHHVlO9miegn1' @ 0 : 0; will stop at (end)
+1 -1
View File
@@ -1 +1 @@
MANIFEST-000064
MANIFEST-000072
+7 -3
View File
@@ -1,3 +1,7 @@
2026/07/01-17:09:48.074018 7f18beffd6c0 Recovering log #62
2026/07/01-17:09:48.084875 7f18beffd6c0 Delete type=3 #60
2026/07/01-17:09:48.084935 7f18beffd6c0 Delete type=0 #62
2026/07/07-21:20:15.268071 7f67ccbfe6c0 Recovering log #70
2026/07/07-21:20:15.279425 7f67ccbfe6c0 Delete type=3 #68
2026/07/07-21:20:15.279503 7f67ccbfe6c0 Delete type=0 #70
2026/07/07-21:21:25.230983 7f677ebff6c0 Level-0 table #75: started
2026/07/07-21:21:25.230999 7f677ebff6c0 Level-0 table #75: 0 bytes OK
2026/07/07-21:21:25.236758 7f677ebff6c0 Delete type=0 #73
2026/07/07-21:21:25.244185 7f677ebff6c0 Manual compaction at level-0 from '!items!0NDBw1YB54q3hLH0' @ 72057594037927935 : 1 .. '!items!ykekdZlirabRobEF' @ 0 : 0; will stop at (end)
+7 -7
View File
@@ -1,7 +1,7 @@
2026/07/01-15:26:29.434053 7f18beffd6c0 Recovering log #58
2026/07/01-15:26:29.477273 7f18beffd6c0 Delete type=3 #56
2026/07/01-15:26:29.477315 7f18beffd6c0 Delete type=0 #58
2026/07/01-17:09:44.884203 7f18be7fc6c0 Level-0 table #63: started
2026/07/01-17:09:44.884216 7f18be7fc6c0 Level-0 table #63: 0 bytes OK
2026/07/01-17:09:44.891075 7f18be7fc6c0 Delete type=0 #61
2026/07/01-17:09:44.903417 7f18be7fc6c0 Manual compaction at level-0 from '!items!0NDBw1YB54q3hLH0' @ 72057594037927935 : 1 .. '!items!ykekdZlirabRobEF' @ 0 : 0; will stop at (end)
2026/07/07-21:18:30.809267 7f67cd3ff6c0 Recovering log #66
2026/07/07-21:18:30.819636 7f67cd3ff6c0 Delete type=3 #64
2026/07/07-21:18:30.819678 7f67cd3ff6c0 Delete type=0 #66
2026/07/07-21:20:10.808728 7f677ebff6c0 Level-0 table #71: started
2026/07/07-21:20:10.808749 7f677ebff6c0 Level-0 table #71: 0 bytes OK
2026/07/07-21:20:10.815795 7f677ebff6c0 Delete type=0 #69
2026/07/07-21:20:10.829154 7f677ebff6c0 Manual compaction at level-0 from '!items!0NDBw1YB54q3hLH0' @ 72057594037927935 : 1 .. '!items!ykekdZlirabRobEF' @ 0 : 0; will stop at (end)
+1 -1
View File
@@ -1 +1 @@
MANIFEST-000064
MANIFEST-000072
+7 -3
View File
@@ -1,3 +1,7 @@
2026/07/01-17:09:48.087137 7f18bf7fe6c0 Recovering log #62
2026/07/01-17:09:48.097488 7f18bf7fe6c0 Delete type=3 #60
2026/07/01-17:09:48.097542 7f18bf7fe6c0 Delete type=0 #62
2026/07/07-21:20:15.281481 7f677f7fe6c0 Recovering log #70
2026/07/07-21:20:15.291844 7f677f7fe6c0 Delete type=3 #68
2026/07/07-21:20:15.291894 7f677f7fe6c0 Delete type=0 #70
2026/07/07-21:21:25.236832 7f677ebff6c0 Level-0 table #75: started
2026/07/07-21:21:25.236849 7f677ebff6c0 Level-0 table #75: 0 bytes OK
2026/07/07-21:21:25.244098 7f677ebff6c0 Delete type=0 #73
2026/07/07-21:21:25.244191 7f677ebff6c0 Manual compaction at level-0 from '!items!HKq5ANSGiBIdcnki' @ 72057594037927935 : 1 .. '!items!HKq5ANSGiBIdcnki' @ 0 : 0; will stop at (end)
+7 -7
View File
@@ -1,7 +1,7 @@
2026/07/01-15:26:29.483178 7f190cdff6c0 Recovering log #58
2026/07/01-15:26:29.540021 7f190cdff6c0 Delete type=3 #56
2026/07/01-15:26:29.540074 7f190cdff6c0 Delete type=0 #58
2026/07/01-17:09:44.897405 7f18be7fc6c0 Level-0 table #63: started
2026/07/01-17:09:44.897423 7f18be7fc6c0 Level-0 table #63: 0 bytes OK
2026/07/01-17:09:44.903279 7f18be7fc6c0 Delete type=0 #61
2026/07/01-17:09:44.923251 7f18be7fc6c0 Manual compaction at level-0 from '!items!HKq5ANSGiBIdcnki' @ 72057594037927935 : 1 .. '!items!HKq5ANSGiBIdcnki' @ 0 : 0; will stop at (end)
2026/07/07-21:18:30.822337 7f677f7fe6c0 Recovering log #66
2026/07/07-21:18:30.832009 7f677f7fe6c0 Delete type=3 #64
2026/07/07-21:18:30.832084 7f677f7fe6c0 Delete type=0 #66
2026/07/07-21:20:10.822768 7f677ebff6c0 Level-0 table #71: started
2026/07/07-21:20:10.822797 7f677ebff6c0 Level-0 table #71: 0 bytes OK
2026/07/07-21:20:10.829026 7f677ebff6c0 Delete type=0 #69
2026/07/07-21:20:10.835346 7f677ebff6c0 Manual compaction at level-0 from '!items!HKq5ANSGiBIdcnki' @ 72057594037927935 : 1 .. '!items!HKq5ANSGiBIdcnki' @ 0 : 0; will stop at (end)
+1 -1
View File
@@ -1 +1 @@
MANIFEST-000064
MANIFEST-000072
+7 -3
View File
@@ -1,3 +1,7 @@
2026/07/01-17:09:47.997764 7f190cdff6c0 Recovering log #62
2026/07/01-17:09:48.008593 7f190cdff6c0 Delete type=3 #60
2026/07/01-17:09:48.008661 7f190cdff6c0 Delete type=0 #62
2026/07/07-21:20:15.194109 7f677ffff6c0 Recovering log #70
2026/07/07-21:20:15.204323 7f677ffff6c0 Delete type=3 #68
2026/07/07-21:20:15.204376 7f677ffff6c0 Delete type=0 #70
2026/07/07-21:21:25.211571 7f677ebff6c0 Level-0 table #75: started
2026/07/07-21:21:25.211591 7f677ebff6c0 Level-0 table #75: 0 bytes OK
2026/07/07-21:21:25.218151 7f677ebff6c0 Delete type=0 #73
2026/07/07-21:21:25.218311 7f677ebff6c0 Manual compaction at level-0 from '!items!2nKXEHLG0fXtSOdy' @ 72057594037927935 : 1 .. '!items!tlIc1bmIAbQeUwj7' @ 0 : 0; will stop at (end)
+7 -7
View File
@@ -1,7 +1,7 @@
2026/07/01-15:26:29.064959 7f18beffd6c0 Recovering log #58
2026/07/01-15:26:29.118868 7f18beffd6c0 Delete type=3 #56
2026/07/01-15:26:29.118916 7f18beffd6c0 Delete type=0 #58
2026/07/01-17:09:44.859072 7f18be7fc6c0 Level-0 table #63: started
2026/07/01-17:09:44.859094 7f18be7fc6c0 Level-0 table #63: 0 bytes OK
2026/07/01-17:09:44.865934 7f18be7fc6c0 Delete type=0 #61
2026/07/01-17:09:44.878081 7f18be7fc6c0 Manual compaction at level-0 from '!items!2nKXEHLG0fXtSOdy' @ 72057594037927935 : 1 .. '!items!tlIc1bmIAbQeUwj7' @ 0 : 0; will stop at (end)
2026/07/07-21:18:30.736947 7f677f7fe6c0 Recovering log #66
2026/07/07-21:18:30.746310 7f677f7fe6c0 Delete type=3 #64
2026/07/07-21:18:30.746367 7f677f7fe6c0 Delete type=0 #66
2026/07/07-21:20:10.790037 7f677ebff6c0 Level-0 table #71: started
2026/07/07-21:20:10.790059 7f677ebff6c0 Level-0 table #71: 0 bytes OK
2026/07/07-21:20:10.796155 7f677ebff6c0 Delete type=0 #69
2026/07/07-21:20:10.802205 7f677ebff6c0 Manual compaction at level-0 from '!items!2nKXEHLG0fXtSOdy' @ 72057594037927935 : 1 .. '!items!tlIc1bmIAbQeUwj7' @ 0 : 0; will stop at (end)
+1 -1
View File
@@ -1 +1 @@
MANIFEST-000064
MANIFEST-000072
+7 -3
View File
@@ -1,3 +1,7 @@
2026/07/01-17:09:48.099558 7f18bffff6c0 Recovering log #62
2026/07/01-17:09:48.110384 7f18bffff6c0 Delete type=3 #60
2026/07/01-17:09:48.110441 7f18bffff6c0 Delete type=0 #62
2026/07/07-21:20:15.293932 7f67ccbfe6c0 Recovering log #70
2026/07/07-21:20:15.303122 7f67ccbfe6c0 Delete type=3 #68
2026/07/07-21:20:15.303196 7f67ccbfe6c0 Delete type=0 #70
2026/07/07-21:21:25.250176 7f677ebff6c0 Level-0 table #75: started
2026/07/07-21:21:25.250196 7f677ebff6c0 Level-0 table #75: 0 bytes OK
2026/07/07-21:21:25.255952 7f677ebff6c0 Delete type=0 #73
2026/07/07-21:21:25.269135 7f677ebff6c0 Manual compaction at level-0 from '!actors!4ZjFZ1HoJV9mJStt' @ 72057594037927935 : 1 .. '!actors!zVpmacwoWEG8YTCQ' @ 0 : 0; will stop at (end)
+7 -7
View File
@@ -1,7 +1,7 @@
2026/07/01-15:26:29.542807 7f18bffff6c0 Recovering log #58
2026/07/01-15:26:29.603087 7f18bffff6c0 Delete type=3 #56
2026/07/01-15:26:29.603130 7f18bffff6c0 Delete type=0 #58
2026/07/01-17:09:44.916182 7f18be7fc6c0 Level-0 table #63: started
2026/07/01-17:09:44.916206 7f18be7fc6c0 Level-0 table #63: 0 bytes OK
2026/07/01-17:09:44.923155 7f18be7fc6c0 Delete type=0 #61
2026/07/01-17:09:44.923289 7f18be7fc6c0 Manual compaction at level-0 from '!actors!4ZjFZ1HoJV9mJStt' @ 72057594037927935 : 1 .. '!actors!zVpmacwoWEG8YTCQ' @ 0 : 0; will stop at (end)
2026/07/07-21:18:30.834115 7f67ccbfe6c0 Recovering log #66
2026/07/07-21:18:30.844835 7f67ccbfe6c0 Delete type=3 #64
2026/07/07-21:18:30.844919 7f67ccbfe6c0 Delete type=0 #66
2026/07/07-21:20:10.829223 7f677ebff6c0 Level-0 table #71: started
2026/07/07-21:20:10.829262 7f677ebff6c0 Level-0 table #71: 0 bytes OK
2026/07/07-21:20:10.835230 7f677ebff6c0 Delete type=0 #69
2026/07/07-21:20:10.848201 7f677ebff6c0 Manual compaction at level-0 from '!actors!4ZjFZ1HoJV9mJStt' @ 72057594037927935 : 1 .. '!actors!zVpmacwoWEG8YTCQ' @ 0 : 0; will stop at (end)
+1 -1
View File
@@ -1 +1 @@
MANIFEST-000042
MANIFEST-000050
+8 -3
View File
@@ -1,3 +1,8 @@
2026/07/01-17:09:48.112373 7f18bffff6c0 Recovering log #40
2026/07/01-17:09:48.122708 7f18bffff6c0 Delete type=3 #38
2026/07/01-17:09:48.122759 7f18bffff6c0 Delete type=0 #40
2026/07/07-21:20:15.306222 7f677ffff6c0 Recovering log #48
2026/07/07-21:20:15.316177 7f677ffff6c0 Delete type=3 #46
2026/07/07-21:20:15.316213 7f677ffff6c0 Delete type=0 #48
2026/07/07-21:21:25.244286 7f677ebff6c0 Level-0 table #53: started
2026/07/07-21:21:25.244303 7f677ebff6c0 Level-0 table #53: 0 bytes OK
2026/07/07-21:21:25.250085 7f677ebff6c0 Delete type=0 #51
2026/07/07-21:21:25.269124 7f677ebff6c0 Manual compaction at level-0 from '!actors!5OGW1fRUn12aNMMV' @ 72057594037927935 : 1 .. '!actors.items!zSWwOmFiFjN4YxC9.w8LXSYQ1eIygtlKV' @ 0 : 0; will stop at (end)
2026/07/07-21:21:25.269155 7f677ebff6c0 Manual compaction at level-1 from '!actors!5OGW1fRUn12aNMMV' @ 72057594037927935 : 1 .. '!actors.items!zSWwOmFiFjN4YxC9.w8LXSYQ1eIygtlKV' @ 0 : 0; will stop at (end)
+8 -8
View File
@@ -1,8 +1,8 @@
2026/07/01-15:26:29.611013 7f18bffff6c0 Recovering log #36
2026/07/01-15:26:29.655559 7f18bffff6c0 Delete type=3 #34
2026/07/01-15:26:29.655612 7f18bffff6c0 Delete type=0 #36
2026/07/01-17:09:44.903537 7f18be7fc6c0 Level-0 table #41: started
2026/07/01-17:09:44.903559 7f18be7fc6c0 Level-0 table #41: 0 bytes OK
2026/07/01-17:09:44.910079 7f18be7fc6c0 Delete type=0 #39
2026/07/01-17:09:44.923269 7f18be7fc6c0 Manual compaction at level-0 from '!actors!5OGW1fRUn12aNMMV' @ 72057594037927935 : 1 .. '!actors.items!zSWwOmFiFjN4YxC9.w8LXSYQ1eIygtlKV' @ 0 : 0; will stop at (end)
2026/07/01-17:09:44.923298 7f18be7fc6c0 Manual compaction at level-1 from '!actors!5OGW1fRUn12aNMMV' @ 72057594037927935 : 1 .. '!actors.items!zSWwOmFiFjN4YxC9.w8LXSYQ1eIygtlKV' @ 0 : 0; will stop at (end)
2026/07/07-21:18:30.846745 7f67ccbfe6c0 Recovering log #44
2026/07/07-21:18:30.856183 7f67ccbfe6c0 Delete type=3 #42
2026/07/07-21:18:30.856244 7f67ccbfe6c0 Delete type=0 #44
2026/07/07-21:20:10.835363 7f677ebff6c0 Level-0 table #49: started
2026/07/07-21:20:10.835392 7f677ebff6c0 Level-0 table #49: 0 bytes OK
2026/07/07-21:20:10.842235 7f677ebff6c0 Delete type=0 #47
2026/07/07-21:20:10.854088 7f677ebff6c0 Manual compaction at level-0 from '!actors!5OGW1fRUn12aNMMV' @ 72057594037927935 : 1 .. '!actors.items!zSWwOmFiFjN4YxC9.w8LXSYQ1eIygtlKV' @ 0 : 0; will stop at (end)
2026/07/07-21:20:10.860898 7f677ebff6c0 Manual compaction at level-1 from '!actors!5OGW1fRUn12aNMMV' @ 72057594037927935 : 1 .. '!actors.items!zSWwOmFiFjN4YxC9.w8LXSYQ1eIygtlKV' @ 0 : 0; will stop at (end)
+1 -1
View File
@@ -1 +1 @@
MANIFEST-000064
MANIFEST-000072
+7 -3
View File
@@ -1,3 +1,7 @@
2026/07/01-17:09:48.060952 7f18bf7fe6c0 Recovering log #62
2026/07/01-17:09:48.071370 7f18bf7fe6c0 Delete type=3 #60
2026/07/01-17:09:48.071422 7f18bf7fe6c0 Delete type=0 #62
2026/07/07-21:20:15.256072 7f677ffff6c0 Recovering log #70
2026/07/07-21:20:15.265904 7f677ffff6c0 Delete type=3 #68
2026/07/07-21:20:15.265948 7f677ffff6c0 Delete type=0 #70
2026/07/07-21:21:25.225065 7f677ebff6c0 Level-0 table #75: started
2026/07/07-21:21:25.225088 7f677ebff6c0 Level-0 table #75: 0 bytes OK
2026/07/07-21:21:25.230920 7f677ebff6c0 Delete type=0 #73
2026/07/07-21:21:25.244177 7f677ebff6c0 Manual compaction at level-0 from '!items!DC2kimCi9sWxqhXG' @ 72057594037927935 : 1 .. '!items!qzfAEhmvVxEMzm0k' @ 0 : 0; will stop at (end)
+7 -7
View File
@@ -1,7 +1,7 @@
2026/07/01-15:26:29.366006 7f190cdff6c0 Recovering log #58
2026/07/01-15:26:29.426569 7f190cdff6c0 Delete type=3 #56
2026/07/01-15:26:29.426604 7f190cdff6c0 Delete type=0 #58
2026/07/01-17:09:44.891176 7f18be7fc6c0 Level-0 table #63: started
2026/07/01-17:09:44.891199 7f18be7fc6c0 Level-0 table #63: 0 bytes OK
2026/07/01-17:09:44.897336 7f18be7fc6c0 Delete type=0 #61
2026/07/01-17:09:44.903427 7f18be7fc6c0 Manual compaction at level-0 from '!items!DC2kimCi9sWxqhXG' @ 72057594037927935 : 1 .. '!items!qzfAEhmvVxEMzm0k' @ 0 : 0; will stop at (end)
2026/07/07-21:18:30.796698 7f677ffff6c0 Recovering log #66
2026/07/07-21:18:30.807028 7f677ffff6c0 Delete type=3 #64
2026/07/07-21:18:30.807087 7f677ffff6c0 Delete type=0 #66
2026/07/07-21:20:10.815922 7f677ebff6c0 Level-0 table #71: started
2026/07/07-21:20:10.815951 7f677ebff6c0 Level-0 table #71: 0 bytes OK
2026/07/07-21:20:10.822645 7f677ebff6c0 Delete type=0 #69
2026/07/07-21:20:10.829164 7f677ebff6c0 Manual compaction at level-0 from '!items!DC2kimCi9sWxqhXG' @ 72057594037927935 : 1 .. '!items!qzfAEhmvVxEMzm0k' @ 0 : 0; will stop at (end)
+1 -1
View File
@@ -1 +1 @@
MANIFEST-000084
MANIFEST-000092
+7 -3
View File
@@ -1,3 +1,7 @@
2026/07/01-17:09:48.139473 7f190cdff6c0 Recovering log #82
2026/07/01-17:09:48.150381 7f190cdff6c0 Delete type=3 #80
2026/07/01-17:09:48.150422 7f190cdff6c0 Delete type=0 #82
2026/07/07-21:20:15.335266 7f67ccbfe6c0 Recovering log #90
2026/07/07-21:20:15.345026 7f67ccbfe6c0 Delete type=3 #88
2026/07/07-21:20:15.345098 7f67ccbfe6c0 Delete type=0 #90
2026/07/07-21:21:25.262123 7f677ebff6c0 Level-0 table #95: started
2026/07/07-21:21:25.262137 7f677ebff6c0 Level-0 table #95: 0 bytes OK
2026/07/07-21:21:25.269030 7f677ebff6c0 Delete type=0 #93
2026/07/07-21:21:25.269151 7f677ebff6c0 Manual compaction at level-0 from '!scenes!2C6gyZpvPxWlsVZi' @ 72057594037927935 : 1 .. '!scenes.levels!olYe9bhuXwRWQ8j7.defaultLevel0000' @ 0 : 0; will stop at (end)
+7 -7
View File
@@ -1,7 +1,7 @@
2026/07/01-15:26:29.737317 7f18beffd6c0 Recovering log #78
2026/07/01-15:26:29.785859 7f18beffd6c0 Delete type=3 #76
2026/07/01-15:26:29.785900 7f18beffd6c0 Delete type=0 #78
2026/07/01-17:09:44.923368 7f18be7fc6c0 Level-0 table #83: started
2026/07/01-17:09:44.923392 7f18be7fc6c0 Level-0 table #83: 0 bytes OK
2026/07/01-17:09:44.930091 7f18be7fc6c0 Delete type=0 #81
2026/07/01-17:09:44.952314 7f18be7fc6c0 Manual compaction at level-0 from '!scenes!2C6gyZpvPxWlsVZi' @ 72057594037927935 : 1 .. '!scenes.levels!olYe9bhuXwRWQ8j7.defaultLevel0000' @ 0 : 0; will stop at (end)
2026/07/07-21:18:30.873373 7f677f7fe6c0 Recovering log #86
2026/07/07-21:18:30.883439 7f677f7fe6c0 Delete type=3 #84
2026/07/07-21:18:30.883522 7f677f7fe6c0 Delete type=0 #86
2026/07/07-21:20:10.848211 7f677ebff6c0 Level-0 table #91: started
2026/07/07-21:20:10.848228 7f677ebff6c0 Level-0 table #91: 0 bytes OK
2026/07/07-21:20:10.853981 7f677ebff6c0 Delete type=0 #89
2026/07/07-21:20:10.860912 7f677ebff6c0 Manual compaction at level-0 from '!scenes!2C6gyZpvPxWlsVZi' @ 72057594037927935 : 1 .. '!scenes.levels!olYe9bhuXwRWQ8j7.defaultLevel0000' @ 0 : 0; will stop at (end)
+1 -1
View File
@@ -1 +1 @@
MANIFEST-000064
MANIFEST-000072
+7 -3
View File
@@ -1,3 +1,7 @@
2026/07/01-17:09:48.011009 7f18bf7fe6c0 Recovering log #62
2026/07/01-17:09:48.020855 7f18bf7fe6c0 Delete type=3 #60
2026/07/01-17:09:48.020903 7f18bf7fe6c0 Delete type=0 #62
2026/07/07-21:20:15.205959 7f67ccbfe6c0 Recovering log #70
2026/07/07-21:20:15.216435 7f67ccbfe6c0 Delete type=3 #68
2026/07/07-21:20:15.216502 7f67ccbfe6c0 Delete type=0 #70
2026/07/07-21:21:25.199890 7f677ebff6c0 Level-0 table #75: started
2026/07/07-21:21:25.199914 7f677ebff6c0 Level-0 table #75: 0 bytes OK
2026/07/07-21:21:25.205705 7f677ebff6c0 Delete type=0 #73
2026/07/07-21:21:25.218292 7f677ebff6c0 Manual compaction at level-0 from '!items!2f51pcvFkcZjaxDk' @ 72057594037927935 : 1 .. '!items!yVN7PZw35iIaBl0H' @ 0 : 0; will stop at (end)
+7 -7
View File
@@ -1,7 +1,7 @@
2026/07/01-15:26:29.126390 7f18bffff6c0 Recovering log #58
2026/07/01-15:26:29.179426 7f18bffff6c0 Delete type=3 #56
2026/07/01-15:26:29.179481 7f18bffff6c0 Delete type=0 #58
2026/07/01-17:09:44.852977 7f18be7fc6c0 Level-0 table #63: started
2026/07/01-17:09:44.853045 7f18be7fc6c0 Level-0 table #63: 0 bytes OK
2026/07/01-17:09:44.858986 7f18be7fc6c0 Delete type=0 #61
2026/07/01-17:09:44.878067 7f18be7fc6c0 Manual compaction at level-0 from '!items!2f51pcvFkcZjaxDk' @ 72057594037927935 : 1 .. '!items!yVN7PZw35iIaBl0H' @ 0 : 0; will stop at (end)
2026/07/07-21:18:30.748414 7f67cd3ff6c0 Recovering log #66
2026/07/07-21:18:30.758766 7f67cd3ff6c0 Delete type=3 #64
2026/07/07-21:18:30.758801 7f67cd3ff6c0 Delete type=0 #66
2026/07/07-21:20:10.776448 7f677ebff6c0 Level-0 table #71: started
2026/07/07-21:20:10.776508 7f677ebff6c0 Level-0 table #71: 0 bytes OK
2026/07/07-21:20:10.782742 7f677ebff6c0 Delete type=0 #69
2026/07/07-21:20:10.802179 7f677ebff6c0 Manual compaction at level-0 from '!items!2f51pcvFkcZjaxDk' @ 72057594037927935 : 1 .. '!items!yVN7PZw35iIaBl0H' @ 0 : 0; will stop at (end)
+1 -1
View File
@@ -1 +1 @@
MANIFEST-000064
MANIFEST-000072
+7 -3
View File
@@ -1,3 +1,7 @@
2026/07/01-17:09:48.023657 7f190cdff6c0 Recovering log #62
2026/07/01-17:09:48.033770 7f190cdff6c0 Delete type=3 #60
2026/07/01-17:09:48.033813 7f190cdff6c0 Delete type=0 #62
2026/07/07-21:20:15.218710 7f677f7fe6c0 Recovering log #70
2026/07/07-21:20:15.228480 7f677f7fe6c0 Delete type=3 #68
2026/07/07-21:20:15.228561 7f677f7fe6c0 Delete type=0 #70
2026/07/07-21:21:25.205780 7f677ebff6c0 Level-0 table #75: started
2026/07/07-21:21:25.205796 7f677ebff6c0 Level-0 table #75: 0 bytes OK
2026/07/07-21:21:25.211493 7f677ebff6c0 Delete type=0 #73
2026/07/07-21:21:25.218303 7f677ebff6c0 Manual compaction at level-0 from '!items!APN91pQL0NBfZsG7' @ 72057594037927935 : 1 .. '!items!xxZKGqDVxAfr140W' @ 0 : 0; will stop at (end)
+7 -7
View File
@@ -1,7 +1,7 @@
2026/07/01-15:26:29.193141 7f18beffd6c0 Recovering log #58
2026/07/01-15:26:29.250778 7f18beffd6c0 Delete type=3 #56
2026/07/01-15:26:29.250829 7f18beffd6c0 Delete type=0 #58
2026/07/01-17:09:44.872208 7f18be7fc6c0 Level-0 table #63: started
2026/07/01-17:09:44.872235 7f18be7fc6c0 Level-0 table #63: 0 bytes OK
2026/07/01-17:09:44.877992 7f18be7fc6c0 Delete type=0 #61
2026/07/01-17:09:44.878184 7f18be7fc6c0 Manual compaction at level-0 from '!items!APN91pQL0NBfZsG7' @ 72057594037927935 : 1 .. '!items!xxZKGqDVxAfr140W' @ 0 : 0; will stop at (end)
2026/07/07-21:18:30.761593 7f67ccbfe6c0 Recovering log #66
2026/07/07-21:18:30.770466 7f67ccbfe6c0 Delete type=3 #64
2026/07/07-21:18:30.770512 7f67ccbfe6c0 Delete type=0 #66
2026/07/07-21:20:10.782858 7f677ebff6c0 Level-0 table #71: started
2026/07/07-21:20:10.782879 7f677ebff6c0 Level-0 table #71: 0 bytes OK
2026/07/07-21:20:10.789952 7f677ebff6c0 Delete type=0 #69
2026/07/07-21:20:10.802195 7f677ebff6c0 Manual compaction at level-0 from '!items!APN91pQL0NBfZsG7' @ 72057594037927935 : 1 .. '!items!xxZKGqDVxAfr140W' @ 0 : 0; will stop at (end)
+1 -1
View File
@@ -1 +1 @@
MANIFEST-000064
MANIFEST-000072
+7 -3
View File
@@ -1,3 +1,7 @@
2026/07/01-17:09:48.035766 7f18bffff6c0 Recovering log #62
2026/07/01-17:09:48.047041 7f18bffff6c0 Delete type=3 #60
2026/07/01-17:09:48.047091 7f18bffff6c0 Delete type=0 #62
2026/07/07-21:20:15.230292 7f67cd3ff6c0 Recovering log #70
2026/07/07-21:20:15.239797 7f67cd3ff6c0 Delete type=3 #68
2026/07/07-21:20:15.239862 7f67cd3ff6c0 Delete type=0 #70
2026/07/07-21:21:25.193283 7f677ebff6c0 Level-0 table #75: started
2026/07/07-21:21:25.193344 7f677ebff6c0 Level-0 table #75: 0 bytes OK
2026/07/07-21:21:25.199792 7f677ebff6c0 Delete type=0 #73
2026/07/07-21:21:25.218278 7f677ebff6c0 Manual compaction at level-0 from '!items!2IYbyCPF9LJojzsj' @ 72057594037927935 : 1 .. '!items!uOpWyMGK3oiUJ1Sl' @ 0 : 0; will stop at (end)
+7 -7
View File
@@ -1,7 +1,7 @@
2026/07/01-15:26:29.258256 7f18bffff6c0 Recovering log #58
2026/07/01-15:26:29.311705 7f18bffff6c0 Delete type=3 #56
2026/07/01-15:26:29.311751 7f18bffff6c0 Delete type=0 #58
2026/07/01-17:09:44.866052 7f18be7fc6c0 Level-0 table #63: started
2026/07/01-17:09:44.866086 7f18be7fc6c0 Level-0 table #63: 0 bytes OK
2026/07/01-17:09:44.872136 7f18be7fc6c0 Delete type=0 #61
2026/07/01-17:09:44.878091 7f18be7fc6c0 Manual compaction at level-0 from '!items!2IYbyCPF9LJojzsj' @ 72057594037927935 : 1 .. '!items!uOpWyMGK3oiUJ1Sl' @ 0 : 0; will stop at (end)
2026/07/07-21:18:30.772428 7f67cd3ff6c0 Recovering log #66
2026/07/07-21:18:30.782600 7f67cd3ff6c0 Delete type=3 #64
2026/07/07-21:18:30.782662 7f67cd3ff6c0 Delete type=0 #66
2026/07/07-21:20:10.796225 7f677ebff6c0 Level-0 table #71: started
2026/07/07-21:20:10.796241 7f677ebff6c0 Level-0 table #71: 0 bytes OK
2026/07/07-21:20:10.802073 7f677ebff6c0 Delete type=0 #69
2026/07/07-21:20:10.802213 7f677ebff6c0 Manual compaction at level-0 from '!items!2IYbyCPF9LJojzsj' @ 72057594037927935 : 1 .. '!items!uOpWyMGK3oiUJ1Sl' @ 0 : 0; will stop at (end)
+5
View File
@@ -176,6 +176,11 @@ export default class CharacterDataModel extends foundry.abstract.TypeDataModel {
threetreasures: new fields.SchemaField({
heiyang: new fields.SchemaField({ value: numberField(0, { min: 0 }), max: numberField(0, { min: 0 }) }),
heiyin: new fields.SchemaField({ value: numberField(0, { min: 0 }), max: numberField(0, { min: 0 }) }),
recoverybonus: new fields.SchemaField({
san: boolField(),
zing: boolField(),
hei: boolField(),
}),
dicelevel: new fields.SchemaField({
level0d: treasureLevel(),
level1d: treasureLevel(),
+65 -16
View File
@@ -254,31 +254,61 @@ export class CDECharacterSheet extends CDEBaseActorSheet {
const evenCount = results.filter(r => r % 2 === 0).length
const oddCount = results.filter(r => r % 2 !== 0).length
// Clamp gains to configured max values. If max is 0 (unconfigured),
// allow free accumulation (no clamp).
// -- Recovery bonus flags --
const boostSan = sys.threetreasures?.recoverybonus?.san ?? false
const boostZing = sys.threetreasures?.recoverybonus?.zing ?? false
const boostHei = sys.threetreasures?.recoverybonus?.hei ?? false
const applyBoost = (count, enabled) => enabled && count > 0 ? count + 1 : count
// Apply boosts: +1 to total recovered per resource (if any recovered)
const sanTotal = applyBoost(evenCount, boostSan) // even → San
const zingTotal = applyBoost(oddCount, boostZing) // odd → Zing
const heiYangCount = applyBoost(evenCount, boostHei) // even → Hei Yang
const heiYinCount = applyBoost(oddCount, boostHei) // odd → Hei Yin
// -- HEI (essence) -- simple clamp to max
const cap = (max) => (max > 0 ? max : Infinity)
const heiYang = Math.min(
(sys.threetreasures?.heiyang?.value ?? 0) + evenCount,
(sys.threetreasures?.heiyang?.value ?? 0) + heiYangCount,
cap(sys.threetreasures?.heiyang?.max)
)
const heiYin = Math.min(
(sys.threetreasures?.heiyin?.value ?? 0) + oddCount,
(sys.threetreasures?.heiyin?.value ?? 0) + heiYinCount,
cap(sys.threetreasures?.heiyin?.max)
)
const san = Math.min(
(sys.threetreasures?.dicelevel?.level0d?.san?.value ?? 0) + evenCount,
cap(sys.threetreasures?.dicelevel?.level0d?.san?.max)
)
const zing = Math.min(
(sys.threetreasures?.dicelevel?.level0d?.zing?.value ?? 0) + oddCount,
cap(sys.threetreasures?.dicelevel?.level0d?.zing?.max)
)
// -- SAN / ZING -- fill bottom-up: level2d → level1d → level0d
const poolDeltas = {
level2d: { san: 0, zing: 0 },
level1d: { san: 0, zing: 0 },
level0d: { san: 0, zing: 0 },
}
const fillPool = (branch, count) => {
let remaining = count
for (const key of ["level2d", "level1d", "level0d"]) {
const slot = sys.threetreasures?.dicelevel?.[key]?.[branch]
if (!slot) continue
const space = cap(slot.max) - (slot.value ?? 0)
if (space <= 0) continue
const toAdd = Math.min(remaining, space)
remaining -= toAdd
poolDeltas[key][branch] = toAdd
if (remaining <= 0) break
}
return count - remaining
}
fillPool("san", sanTotal)
fillPool("zing", zingTotal)
await actor.update({
"system.threetreasures.heiyang.value": heiYang,
"system.threetreasures.heiyin.value": heiYin,
"system.threetreasures.dicelevel.level0d.san.value": san,
"system.threetreasures.dicelevel.level0d.zing.value": zing,
"system.threetreasures.dicelevel.level2d.san.value": (sys.threetreasures?.dicelevel?.level2d?.san?.value ?? 0) + poolDeltas.level2d.san,
"system.threetreasures.dicelevel.level2d.zing.value": (sys.threetreasures?.dicelevel?.level2d?.zing?.value ?? 0) + poolDeltas.level2d.zing,
"system.threetreasures.dicelevel.level1d.san.value": (sys.threetreasures?.dicelevel?.level1d?.san?.value ?? 0) + poolDeltas.level1d.san,
"system.threetreasures.dicelevel.level1d.zing.value": (sys.threetreasures?.dicelevel?.level1d?.zing?.value ?? 0) + poolDeltas.level1d.zing,
"system.threetreasures.dicelevel.level0d.san.value": (sys.threetreasures?.dicelevel?.level0d?.san?.value ?? 0) + poolDeltas.level0d.san,
"system.threetreasures.dicelevel.level0d.zing.value": (sys.threetreasures?.dicelevel?.level0d?.zing?.value ?? 0) + poolDeltas.level0d.zing,
})
const rollLabel = `${game.i18n.localize("CDE.Recovery")}${aspectLabel}`
@@ -286,6 +316,24 @@ export class CDECharacterSheet extends CDEBaseActorSheet {
const typeOfThrow = Number(sys.prefs?.typeofthrow?.choice ?? 0)
const ROLL_MODES = ["roll", "gmroll", "blindroll", "selfroll"]
const rollMode = ROLL_MODES[typeOfThrow] ?? "roll"
const poolLine = (key, label) => {
const s = poolDeltas[key].san
const z = poolDeltas[key].zing
if (!s && !z) return ""
return `<div class="cde-chat-recovery-pool-row">${label} → San +${s}, Zing +${z}</div>`
}
const poolRows = [
poolLine("level2d", "2 dés"),
poolLine("level1d", "1 dé"),
poolLine("level0d", "0 dé"),
].filter(Boolean).join("")
const poolBoostHtml = [
boostSan ? `<div class="cde-chat-recovery-pool-boost">+1 ${game.i18n.localize("CDE.RecoveryBoostSan")}</div>` : "",
boostZing ? `<div class="cde-chat-recovery-pool-boost">+1 ${game.i18n.localize("CDE.RecoveryBoostZing")}</div>` : "",
].filter(Boolean).join("")
const poolHtml = poolBoostHtml + poolRows
await ChatMessage.create({
user: game.user.id,
speaker: ChatMessage.getSpeaker({ actor }),
@@ -303,14 +351,15 @@ export class CDECharacterSheet extends CDEBaseActorSheet {
<div class="cde-chat-recovery-even">
<span class="cde-chat-recovery-count">${evenCount}</span>
<span><strong>${game.i18n.localize("CDE.RecoveryEvenLabel")}</strong></span>
<span>→ +${evenCount} Hei Yang, +${evenCount} San</span>
<span>→ Hei Yang +${heiYangCount}${heiYang !== (sys.threetreasures?.heiyang?.value ?? 0) + heiYangCount ? ` (${game.i18n.localize("CDE.ClampedTo")} ${sys.threetreasures?.heiyang?.max})` : ""}${boostHei && evenCount > 0 ? ` (+1 ${game.i18n.localize("CDE.RecoveryBoostHeiLabel")})` : ""}</span>
</div>
<div class="cde-chat-recovery-odd">
<span class="cde-chat-recovery-count">${oddCount}</span>
<span><strong>${game.i18n.localize("CDE.RecoveryOddLabel")}</strong></span>
<span>→ +${oddCount} Hei Yin, +${oddCount} Zing</span>
<span>→ Hei Yin +${heiYinCount}${heiYin !== (sys.threetreasures?.heiyin?.value ?? 0) + heiYinCount ? ` (${game.i18n.localize("CDE.ClampedTo")} ${sys.threetreasures?.heiyin?.max})` : ""}${boostHei && oddCount > 0 ? ` (+1 ${game.i18n.localize("CDE.RecoveryBoostHeiLabel")})` : ""}</span>
</div>
</div>
<div class="cde-chat-recovery-pools">${poolHtml}</div>
</div>`,
rolls: [roll],
rollMode,
@@ -1,8 +1,22 @@
{{!-- Recovery button --}}
{{!-- Recovery button + boost toggles --}}
<div class="cde-recovery-bar">
<button type="button" class="cde-recovery-btn" data-action="recovery">
<i class="fas fa-heartbeat"></i> {{ localize "CDE.Recovery" }}
</button>
<div class="cde-recovery-boosts">
<label class="cde-recovery-boost">
<input type="checkbox" name="system.threetreasures.recoverybonus.zing" {{checked systemData.threetreasures.recoverybonus.zing}} />
{{ localize "CDE.RecoveryBoostZing" }}
</label>
<label class="cde-recovery-boost">
<input type="checkbox" name="system.threetreasures.recoverybonus.san" {{checked systemData.threetreasures.recoverybonus.san}} />
{{ localize "CDE.RecoveryBoostSan" }}
</label>
<label class="cde-recovery-boost">
<input type="checkbox" name="system.threetreasures.recoverybonus.hei" {{checked systemData.threetreasures.recoverybonus.hei}} />
{{ localize "CDE.RecoveryBoostHei" }}
</label>
</div>
</div>
{{!-- HEI — Essence --}}