Compare commits
5 Commits
4865cb9635
..
main
| Author | SHA1 | Date | |
|---|---|---|---|
| fdbbda28f4 | |||
| ce5dbebd76 | |||
| 9101ad8711 | |||
| 311091b262 | |||
| 6f94521a88 |
+4
-14
@@ -1,17 +1,7 @@
|
|||||||
IMAGES
|
IMAGES :
|
||||||
- Exceptées les peties icônes N&B de d10 et celles de game-icon.org,
|
CF images_info.md for details on the images used in this system.
|
||||||
les images des fichiers du dossier images utilisées dans ce logiciel sont :
|
All icons : game-icons.net, free for commercial use, no attribution required.
|
||||||
Copyright © 2023-2024 Antre Monde Éditions ;
|
All other images/background/logo : Provided by Antre Monde edition, no AI
|
||||||
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
|
|
||||||
|
|
||||||
Code Author :
|
Code Author :
|
||||||
- Developed by LeRatierBretonnien / www.uberwald.me
|
- Developed by LeRatierBretonnien / www.uberwald.me
|
||||||
|
|||||||
@@ -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
|
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.
|
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
@@ -2743,6 +2743,75 @@ section.npc .cde-neon-tabs .item.active {
|
|||||||
color: #4a9eff;
|
color: #4a9eff;
|
||||||
text-shadow: 0 0 8px rgba(74, 158, 255, 0.5);
|
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 {
|
.cde-tabs {
|
||||||
margin-top: 12px;
|
margin-top: 12px;
|
||||||
border-bottom: 1px solid #1a2436;
|
border-bottom: 1px solid #1a2436;
|
||||||
@@ -2923,6 +2992,26 @@ strong.ellipsis {
|
|||||||
width: 22px;
|
width: 22px;
|
||||||
text-align: center;
|
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 {
|
.cde-tt-block {
|
||||||
margin-bottom: 12px;
|
margin-bottom: 12px;
|
||||||
}
|
}
|
||||||
@@ -3947,10 +4036,10 @@ ol.item-list li.item .item-controls a.item-control:hover {
|
|||||||
letter-spacing: 0;
|
letter-spacing: 0;
|
||||||
font-size: 11px;
|
font-size: 11px;
|
||||||
}
|
}
|
||||||
/* Combatant list */
|
/* Combatant list — grows to fill available space */
|
||||||
.cde-wheel-combatants {
|
.cde-wheel-combatants {
|
||||||
flex: 0 0 auto;
|
flex: 1 1 auto;
|
||||||
max-height: 130px;
|
min-height: 0;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
border-bottom: 1px solid #1a2436;
|
border-bottom: 1px solid #1a2436;
|
||||||
}
|
}
|
||||||
@@ -4014,12 +4103,11 @@ ol.item-list li.item .item-controls a.item-control:hover {
|
|||||||
color: #7d94b8;
|
color: #7d94b8;
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
}
|
}
|
||||||
/* Action area */
|
/* Action area — fixed to content height, pushed to bottom */
|
||||||
.cde-wheel-actions {
|
.cde-wheel-actions {
|
||||||
flex: 1 1 auto;
|
flex: 0 0 auto;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
overflow-y: auto;
|
|
||||||
padding: 8px 10px 10px;
|
padding: 8px 10px 10px;
|
||||||
gap: 6px;
|
gap: 6px;
|
||||||
}
|
}
|
||||||
|
|||||||
+100
-6
@@ -2768,6 +2768,79 @@ section.npc .cde-neon-tabs .item.active { color: @cde-supernatural; borde
|
|||||||
text-shadow: 0 0 8px fade(@cde-spell, 50%);
|
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)
|
// Legacy tabs (actor sheets still use cde-tabs)
|
||||||
.cde-tabs {
|
.cde-tabs {
|
||||||
margin-top: @cde-gap;
|
margin-top: @cde-gap;
|
||||||
@@ -2981,6 +3054,28 @@ strong.ellipsis {
|
|||||||
// ============================================================
|
// ============================================================
|
||||||
// Three Treasures layout (HEI / SAN-ZING / PTAO)
|
// 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 {
|
.cde-tt-block {
|
||||||
margin-bottom: 12px;
|
margin-bottom: 12px;
|
||||||
|
|
||||||
@@ -4094,10 +4189,10 @@ ol.item-list {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Combatant list */
|
/* Combatant list — grows to fill available space */
|
||||||
.cde-wheel-combatants {
|
.cde-wheel-combatants {
|
||||||
flex: 0 0 auto;
|
flex: 1 1 auto;
|
||||||
max-height: 130px;
|
min-height: 0;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
border-bottom: 1px solid @cde-border;
|
border-bottom: 1px solid @cde-border;
|
||||||
}
|
}
|
||||||
@@ -4172,12 +4267,11 @@ ol.item-list {
|
|||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Action area */
|
/* Action area — fixed to content height, pushed to bottom */
|
||||||
.cde-wheel-actions {
|
.cde-wheel-actions {
|
||||||
flex: 1 1 auto;
|
flex: 0 0 auto;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
overflow-y: auto;
|
|
||||||
padding: 8px 10px 10px;
|
padding: 8px 10px 10px;
|
||||||
gap: 6px;
|
gap: 6px;
|
||||||
|
|
||||||
|
|||||||
Vendored
+61
-14
@@ -955,6 +955,11 @@ var CharacterDataModel = class extends foundry.abstract.TypeDataModel {
|
|||||||
threetreasures: new fields.SchemaField({
|
threetreasures: new fields.SchemaField({
|
||||||
heiyang: new fields.SchemaField({ value: numberField(0, { min: 0 }), max: numberField(0, { min: 0 }) }),
|
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 }) }),
|
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({
|
dicelevel: new fields.SchemaField({
|
||||||
level0d: treasureLevel(),
|
level0d: treasureLevel(),
|
||||||
level1d: treasureLevel(),
|
level1d: treasureLevel(),
|
||||||
@@ -2437,34 +2442,75 @@ var CDECharacterSheet = class _CDECharacterSheet extends CDEBaseActorSheet {
|
|||||||
const results = roll.dice[0].results.map((r) => r.result);
|
const results = roll.dice[0].results.map((r) => r.result);
|
||||||
const evenCount = results.filter((r) => r % 2 === 0).length;
|
const evenCount = results.filter((r) => r % 2 === 0).length;
|
||||||
const oddCount = 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 cap = (max) => max > 0 ? max : Infinity;
|
||||||
const heiYang = Math.min(
|
const heiYang = Math.min(
|
||||||
(sys.threetreasures?.heiyang?.value ?? 0) + evenCount,
|
(sys.threetreasures?.heiyang?.value ?? 0) + heiYangCount,
|
||||||
cap(sys.threetreasures?.heiyang?.max)
|
cap(sys.threetreasures?.heiyang?.max)
|
||||||
);
|
);
|
||||||
const heiYin = Math.min(
|
const heiYin = Math.min(
|
||||||
(sys.threetreasures?.heiyin?.value ?? 0) + oddCount,
|
(sys.threetreasures?.heiyin?.value ?? 0) + heiYinCount,
|
||||||
cap(sys.threetreasures?.heiyin?.max)
|
cap(sys.threetreasures?.heiyin?.max)
|
||||||
);
|
);
|
||||||
const san = Math.min(
|
const poolDeltas = {
|
||||||
(sys.threetreasures?.dicelevel?.level0d?.san?.value ?? 0) + evenCount,
|
level2d: { san: 0, zing: 0 },
|
||||||
cap(sys.threetreasures?.dicelevel?.level0d?.san?.max)
|
level1d: { san: 0, zing: 0 },
|
||||||
);
|
level0d: { san: 0, zing: 0 }
|
||||||
const zing = Math.min(
|
};
|
||||||
(sys.threetreasures?.dicelevel?.level0d?.zing?.value ?? 0) + oddCount,
|
const fillPool = (branch, count) => {
|
||||||
cap(sys.threetreasures?.dicelevel?.level0d?.zing?.max)
|
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({
|
await actor.update({
|
||||||
"system.threetreasures.heiyang.value": heiYang,
|
"system.threetreasures.heiyang.value": heiYang,
|
||||||
"system.threetreasures.heiyin.value": heiYin,
|
"system.threetreasures.heiyin.value": heiYin,
|
||||||
"system.threetreasures.dicelevel.level0d.san.value": san,
|
"system.threetreasures.dicelevel.level2d.san.value": (sys.threetreasures?.dicelevel?.level2d?.san?.value ?? 0) + poolDeltas.level2d.san,
|
||||||
"system.threetreasures.dicelevel.level0d.zing.value": zing
|
"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 rollLabel = `${game.i18n.localize("CDE.Recovery")} \u2014 ${aspectLabel}`;
|
||||||
const diceStr = results.join(" \xB7 ");
|
const diceStr = results.join(" \xB7 ");
|
||||||
const typeOfThrow = Number(sys.prefs?.typeofthrow?.choice ?? 0);
|
const typeOfThrow = Number(sys.prefs?.typeofthrow?.choice ?? 0);
|
||||||
const ROLL_MODES2 = ["roll", "gmroll", "blindroll", "selfroll"];
|
const ROLL_MODES2 = ["roll", "gmroll", "blindroll", "selfroll"];
|
||||||
const rollMode = ROLL_MODES2[typeOfThrow] ?? "roll";
|
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({
|
await ChatMessage.create({
|
||||||
user: game.user.id,
|
user: game.user.id,
|
||||||
speaker: ChatMessage.getSpeaker({ actor }),
|
speaker: ChatMessage.getSpeaker({ actor }),
|
||||||
@@ -2482,14 +2528,15 @@ var CDECharacterSheet = class _CDECharacterSheet extends CDEBaseActorSheet {
|
|||||||
<div class="cde-chat-recovery-even">
|
<div class="cde-chat-recovery-even">
|
||||||
<span class="cde-chat-recovery-count">${evenCount}</span>
|
<span class="cde-chat-recovery-count">${evenCount}</span>
|
||||||
<span><strong>${game.i18n.localize("CDE.RecoveryEvenLabel")}</strong></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>
|
||||||
<div class="cde-chat-recovery-odd">
|
<div class="cde-chat-recovery-odd">
|
||||||
<span class="cde-chat-recovery-count">${oddCount}</span>
|
<span class="cde-chat-recovery-count">${oddCount}</span>
|
||||||
<span><strong>${game.i18n.localize("CDE.RecoveryOddLabel")}</strong></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>
|
</div>
|
||||||
|
<div class="cde-chat-recovery-pools">${poolHtml}</div>
|
||||||
</div>`,
|
</div>`,
|
||||||
rolls: [roll],
|
rolls: [roll],
|
||||||
rollMode
|
rollMode
|
||||||
|
|||||||
Vendored
+2
-2
File diff suppressed because one or more lines are too long
@@ -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 |
|
||||||
@@ -291,6 +291,11 @@
|
|||||||
"CDE.RecoveryNoAspect": "Votre aspect est à 0, la Récupération est impossible.",
|
"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.RecoveryNoGuardian": "Vous devez choisir un Gardien Céleste pour utiliser la Récupération.",
|
||||||
"CDE.RecoveryOddLabel": "Impairs",
|
"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.Renowned": "Renommé",
|
||||||
"CDE.ResourceMax": "Max",
|
"CDE.ResourceMax": "Max",
|
||||||
"CDE.ResourceMin": "Min",
|
"CDE.ResourceMin": "Min",
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
MANIFEST-000064
|
MANIFEST-000072
|
||||||
|
|||||||
@@ -1,3 +1,7 @@
|
|||||||
2026/07/01-17:09:48.049670 7f190cdff6c0 Recovering log #62
|
2026/07/07-21:20:15.241511 7f677f7fe6c0 Recovering log #70
|
||||||
2026/07/01-17:09:48.058970 7f190cdff6c0 Delete type=3 #60
|
2026/07/07-21:20:15.254198 7f677f7fe6c0 Delete type=3 #68
|
||||||
2026/07/01-17:09:48.059029 7f190cdff6c0 Delete type=0 #62
|
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)
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
2026/07/01-15:26:29.318091 7f18beffd6c0 Recovering log #58
|
2026/07/07-21:18:30.784888 7f67ccbfe6c0 Recovering log #66
|
||||||
2026/07/01-15:26:29.363367 7f18beffd6c0 Delete type=3 #56
|
2026/07/07-21:18:30.794190 7f67ccbfe6c0 Delete type=3 #64
|
||||||
2026/07/01-15:26:29.363411 7f18beffd6c0 Delete type=0 #58
|
2026/07/07-21:18:30.794249 7f67ccbfe6c0 Delete type=0 #66
|
||||||
2026/07/01-17:09:44.878215 7f18be7fc6c0 Level-0 table #63: started
|
2026/07/07-21:20:10.802303 7f677ebff6c0 Level-0 table #71: started
|
||||||
2026/07/01-17:09:44.878236 7f18be7fc6c0 Level-0 table #63: 0 bytes OK
|
2026/07/07-21:20:10.802330 7f677ebff6c0 Level-0 table #71: 0 bytes OK
|
||||||
2026/07/01-17:09:44.884157 7f18be7fc6c0 Delete type=0 #61
|
2026/07/07-21:20:10.808601 7f677ebff6c0 Delete type=0 #69
|
||||||
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:20:10.829139 7f677ebff6c0 Manual compaction at level-0 from '!items!3aig6MWvZCRoWXPW' @ 72057594037927935 : 1 .. '!items!cXaQG1TBE0jzrbNt' @ 0 : 0; will stop at (end)
|
||||||
|
|||||||
Binary file not shown.
@@ -1 +1 @@
|
|||||||
MANIFEST-000064
|
MANIFEST-000072
|
||||||
|
|||||||
+7
-3
@@ -1,3 +1,7 @@
|
|||||||
2026/07/01-17:09:48.127219 7f18bffff6c0 Recovering log #62
|
2026/07/07-21:20:15.322073 7f67cd3ff6c0 Recovering log #70
|
||||||
2026/07/01-17:09:48.136685 7f18bffff6c0 Delete type=3 #60
|
2026/07/07-21:20:15.332602 7f67cd3ff6c0 Delete type=3 #68
|
||||||
2026/07/01-17:09:48.136731 7f18bffff6c0 Delete type=0 #62
|
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)
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
2026/07/01-15:26:29.675722 7f18bffff6c0 Recovering log #58
|
2026/07/07-21:18:30.861129 7f67ccbfe6c0 Recovering log #66
|
||||||
2026/07/01-15:26:29.729808 7f18bffff6c0 Delete type=3 #56
|
2026/07/07-21:18:30.870622 7f67ccbfe6c0 Delete type=3 #64
|
||||||
2026/07/01-15:26:29.729859 7f18bffff6c0 Delete type=0 #58
|
2026/07/07-21:18:30.870683 7f67ccbfe6c0 Delete type=0 #66
|
||||||
2026/07/01-17:09:44.910163 7f18be7fc6c0 Level-0 table #63: started
|
2026/07/07-21:20:10.842315 7f677ebff6c0 Level-0 table #71: started
|
||||||
2026/07/01-17:09:44.910189 7f18be7fc6c0 Level-0 table #63: 0 bytes OK
|
2026/07/07-21:20:10.842337 7f677ebff6c0 Level-0 table #71: 0 bytes OK
|
||||||
2026/07/01-17:09:44.916090 7f18be7fc6c0 Delete type=0 #61
|
2026/07/07-21:20:10.848123 7f677ebff6c0 Delete type=0 #69
|
||||||
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:20:10.860868 7f677ebff6c0 Manual compaction at level-0 from '!journal!CDEGuideMain0001' @ 72057594037927935 : 1 .. '!journal.pages!CDEGuideMain0001.wgqIHHVlO9miegn1' @ 0 : 0; will stop at (end)
|
||||||
|
|||||||
Binary file not shown.
@@ -1 +1 @@
|
|||||||
MANIFEST-000064
|
MANIFEST-000072
|
||||||
|
|||||||
@@ -1,3 +1,7 @@
|
|||||||
2026/07/01-17:09:48.074018 7f18beffd6c0 Recovering log #62
|
2026/07/07-21:20:15.268071 7f67ccbfe6c0 Recovering log #70
|
||||||
2026/07/01-17:09:48.084875 7f18beffd6c0 Delete type=3 #60
|
2026/07/07-21:20:15.279425 7f67ccbfe6c0 Delete type=3 #68
|
||||||
2026/07/01-17:09:48.084935 7f18beffd6c0 Delete type=0 #62
|
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)
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
2026/07/01-15:26:29.434053 7f18beffd6c0 Recovering log #58
|
2026/07/07-21:18:30.809267 7f67cd3ff6c0 Recovering log #66
|
||||||
2026/07/01-15:26:29.477273 7f18beffd6c0 Delete type=3 #56
|
2026/07/07-21:18:30.819636 7f67cd3ff6c0 Delete type=3 #64
|
||||||
2026/07/01-15:26:29.477315 7f18beffd6c0 Delete type=0 #58
|
2026/07/07-21:18:30.819678 7f67cd3ff6c0 Delete type=0 #66
|
||||||
2026/07/01-17:09:44.884203 7f18be7fc6c0 Level-0 table #63: started
|
2026/07/07-21:20:10.808728 7f677ebff6c0 Level-0 table #71: started
|
||||||
2026/07/01-17:09:44.884216 7f18be7fc6c0 Level-0 table #63: 0 bytes OK
|
2026/07/07-21:20:10.808749 7f677ebff6c0 Level-0 table #71: 0 bytes OK
|
||||||
2026/07/01-17:09:44.891075 7f18be7fc6c0 Delete type=0 #61
|
2026/07/07-21:20:10.815795 7f677ebff6c0 Delete type=0 #69
|
||||||
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:20:10.829154 7f677ebff6c0 Manual compaction at level-0 from '!items!0NDBw1YB54q3hLH0' @ 72057594037927935 : 1 .. '!items!ykekdZlirabRobEF' @ 0 : 0; will stop at (end)
|
||||||
|
|||||||
Binary file not shown.
@@ -1 +1 @@
|
|||||||
MANIFEST-000064
|
MANIFEST-000072
|
||||||
|
|||||||
+7
-3
@@ -1,3 +1,7 @@
|
|||||||
2026/07/01-17:09:48.087137 7f18bf7fe6c0 Recovering log #62
|
2026/07/07-21:20:15.281481 7f677f7fe6c0 Recovering log #70
|
||||||
2026/07/01-17:09:48.097488 7f18bf7fe6c0 Delete type=3 #60
|
2026/07/07-21:20:15.291844 7f677f7fe6c0 Delete type=3 #68
|
||||||
2026/07/01-17:09:48.097542 7f18bf7fe6c0 Delete type=0 #62
|
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)
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
2026/07/01-15:26:29.483178 7f190cdff6c0 Recovering log #58
|
2026/07/07-21:18:30.822337 7f677f7fe6c0 Recovering log #66
|
||||||
2026/07/01-15:26:29.540021 7f190cdff6c0 Delete type=3 #56
|
2026/07/07-21:18:30.832009 7f677f7fe6c0 Delete type=3 #64
|
||||||
2026/07/01-15:26:29.540074 7f190cdff6c0 Delete type=0 #58
|
2026/07/07-21:18:30.832084 7f677f7fe6c0 Delete type=0 #66
|
||||||
2026/07/01-17:09:44.897405 7f18be7fc6c0 Level-0 table #63: started
|
2026/07/07-21:20:10.822768 7f677ebff6c0 Level-0 table #71: started
|
||||||
2026/07/01-17:09:44.897423 7f18be7fc6c0 Level-0 table #63: 0 bytes OK
|
2026/07/07-21:20:10.822797 7f677ebff6c0 Level-0 table #71: 0 bytes OK
|
||||||
2026/07/01-17:09:44.903279 7f18be7fc6c0 Delete type=0 #61
|
2026/07/07-21:20:10.829026 7f677ebff6c0 Delete type=0 #69
|
||||||
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:20:10.835346 7f677ebff6c0 Manual compaction at level-0 from '!items!HKq5ANSGiBIdcnki' @ 72057594037927935 : 1 .. '!items!HKq5ANSGiBIdcnki' @ 0 : 0; will stop at (end)
|
||||||
|
|||||||
Binary file not shown.
@@ -1 +1 @@
|
|||||||
MANIFEST-000064
|
MANIFEST-000072
|
||||||
|
|||||||
@@ -1,3 +1,7 @@
|
|||||||
2026/07/01-17:09:47.997764 7f190cdff6c0 Recovering log #62
|
2026/07/07-21:20:15.194109 7f677ffff6c0 Recovering log #70
|
||||||
2026/07/01-17:09:48.008593 7f190cdff6c0 Delete type=3 #60
|
2026/07/07-21:20:15.204323 7f677ffff6c0 Delete type=3 #68
|
||||||
2026/07/01-17:09:48.008661 7f190cdff6c0 Delete type=0 #62
|
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)
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
2026/07/01-15:26:29.064959 7f18beffd6c0 Recovering log #58
|
2026/07/07-21:18:30.736947 7f677f7fe6c0 Recovering log #66
|
||||||
2026/07/01-15:26:29.118868 7f18beffd6c0 Delete type=3 #56
|
2026/07/07-21:18:30.746310 7f677f7fe6c0 Delete type=3 #64
|
||||||
2026/07/01-15:26:29.118916 7f18beffd6c0 Delete type=0 #58
|
2026/07/07-21:18:30.746367 7f677f7fe6c0 Delete type=0 #66
|
||||||
2026/07/01-17:09:44.859072 7f18be7fc6c0 Level-0 table #63: started
|
2026/07/07-21:20:10.790037 7f677ebff6c0 Level-0 table #71: started
|
||||||
2026/07/01-17:09:44.859094 7f18be7fc6c0 Level-0 table #63: 0 bytes OK
|
2026/07/07-21:20:10.790059 7f677ebff6c0 Level-0 table #71: 0 bytes OK
|
||||||
2026/07/01-17:09:44.865934 7f18be7fc6c0 Delete type=0 #61
|
2026/07/07-21:20:10.796155 7f677ebff6c0 Delete type=0 #69
|
||||||
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:20:10.802205 7f677ebff6c0 Manual compaction at level-0 from '!items!2nKXEHLG0fXtSOdy' @ 72057594037927935 : 1 .. '!items!tlIc1bmIAbQeUwj7' @ 0 : 0; will stop at (end)
|
||||||
|
|||||||
Binary file not shown.
@@ -1 +1 @@
|
|||||||
MANIFEST-000064
|
MANIFEST-000072
|
||||||
|
|||||||
+7
-3
@@ -1,3 +1,7 @@
|
|||||||
2026/07/01-17:09:48.099558 7f18bffff6c0 Recovering log #62
|
2026/07/07-21:20:15.293932 7f67ccbfe6c0 Recovering log #70
|
||||||
2026/07/01-17:09:48.110384 7f18bffff6c0 Delete type=3 #60
|
2026/07/07-21:20:15.303122 7f67ccbfe6c0 Delete type=3 #68
|
||||||
2026/07/01-17:09:48.110441 7f18bffff6c0 Delete type=0 #62
|
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)
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
2026/07/01-15:26:29.542807 7f18bffff6c0 Recovering log #58
|
2026/07/07-21:18:30.834115 7f67ccbfe6c0 Recovering log #66
|
||||||
2026/07/01-15:26:29.603087 7f18bffff6c0 Delete type=3 #56
|
2026/07/07-21:18:30.844835 7f67ccbfe6c0 Delete type=3 #64
|
||||||
2026/07/01-15:26:29.603130 7f18bffff6c0 Delete type=0 #58
|
2026/07/07-21:18:30.844919 7f67ccbfe6c0 Delete type=0 #66
|
||||||
2026/07/01-17:09:44.916182 7f18be7fc6c0 Level-0 table #63: started
|
2026/07/07-21:20:10.829223 7f677ebff6c0 Level-0 table #71: started
|
||||||
2026/07/01-17:09:44.916206 7f18be7fc6c0 Level-0 table #63: 0 bytes OK
|
2026/07/07-21:20:10.829262 7f677ebff6c0 Level-0 table #71: 0 bytes OK
|
||||||
2026/07/01-17:09:44.923155 7f18be7fc6c0 Delete type=0 #61
|
2026/07/07-21:20:10.835230 7f677ebff6c0 Delete type=0 #69
|
||||||
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:20:10.848201 7f677ebff6c0 Manual compaction at level-0 from '!actors!4ZjFZ1HoJV9mJStt' @ 72057594037927935 : 1 .. '!actors!zVpmacwoWEG8YTCQ' @ 0 : 0; will stop at (end)
|
||||||
|
|||||||
Binary file not shown.
@@ -1 +1 @@
|
|||||||
MANIFEST-000042
|
MANIFEST-000050
|
||||||
|
|||||||
@@ -1,3 +1,8 @@
|
|||||||
2026/07/01-17:09:48.112373 7f18bffff6c0 Recovering log #40
|
2026/07/07-21:20:15.306222 7f677ffff6c0 Recovering log #48
|
||||||
2026/07/01-17:09:48.122708 7f18bffff6c0 Delete type=3 #38
|
2026/07/07-21:20:15.316177 7f677ffff6c0 Delete type=3 #46
|
||||||
2026/07/01-17:09:48.122759 7f18bffff6c0 Delete type=0 #40
|
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)
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
2026/07/01-15:26:29.611013 7f18bffff6c0 Recovering log #36
|
2026/07/07-21:18:30.846745 7f67ccbfe6c0 Recovering log #44
|
||||||
2026/07/01-15:26:29.655559 7f18bffff6c0 Delete type=3 #34
|
2026/07/07-21:18:30.856183 7f67ccbfe6c0 Delete type=3 #42
|
||||||
2026/07/01-15:26:29.655612 7f18bffff6c0 Delete type=0 #36
|
2026/07/07-21:18:30.856244 7f67ccbfe6c0 Delete type=0 #44
|
||||||
2026/07/01-17:09:44.903537 7f18be7fc6c0 Level-0 table #41: started
|
2026/07/07-21:20:10.835363 7f677ebff6c0 Level-0 table #49: started
|
||||||
2026/07/01-17:09:44.903559 7f18be7fc6c0 Level-0 table #41: 0 bytes OK
|
2026/07/07-21:20:10.835392 7f677ebff6c0 Level-0 table #49: 0 bytes OK
|
||||||
2026/07/01-17:09:44.910079 7f18be7fc6c0 Delete type=0 #39
|
2026/07/07-21:20:10.842235 7f677ebff6c0 Delete type=0 #47
|
||||||
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/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/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:20:10.860898 7f677ebff6c0 Manual compaction at level-1 from '!actors!5OGW1fRUn12aNMMV' @ 72057594037927935 : 1 .. '!actors.items!zSWwOmFiFjN4YxC9.w8LXSYQ1eIygtlKV' @ 0 : 0; will stop at (end)
|
||||||
|
|||||||
Binary file not shown.
@@ -1 +1 @@
|
|||||||
MANIFEST-000064
|
MANIFEST-000072
|
||||||
|
|||||||
@@ -1,3 +1,7 @@
|
|||||||
2026/07/01-17:09:48.060952 7f18bf7fe6c0 Recovering log #62
|
2026/07/07-21:20:15.256072 7f677ffff6c0 Recovering log #70
|
||||||
2026/07/01-17:09:48.071370 7f18bf7fe6c0 Delete type=3 #60
|
2026/07/07-21:20:15.265904 7f677ffff6c0 Delete type=3 #68
|
||||||
2026/07/01-17:09:48.071422 7f18bf7fe6c0 Delete type=0 #62
|
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)
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
2026/07/01-15:26:29.366006 7f190cdff6c0 Recovering log #58
|
2026/07/07-21:18:30.796698 7f677ffff6c0 Recovering log #66
|
||||||
2026/07/01-15:26:29.426569 7f190cdff6c0 Delete type=3 #56
|
2026/07/07-21:18:30.807028 7f677ffff6c0 Delete type=3 #64
|
||||||
2026/07/01-15:26:29.426604 7f190cdff6c0 Delete type=0 #58
|
2026/07/07-21:18:30.807087 7f677ffff6c0 Delete type=0 #66
|
||||||
2026/07/01-17:09:44.891176 7f18be7fc6c0 Level-0 table #63: started
|
2026/07/07-21:20:10.815922 7f677ebff6c0 Level-0 table #71: started
|
||||||
2026/07/01-17:09:44.891199 7f18be7fc6c0 Level-0 table #63: 0 bytes OK
|
2026/07/07-21:20:10.815951 7f677ebff6c0 Level-0 table #71: 0 bytes OK
|
||||||
2026/07/01-17:09:44.897336 7f18be7fc6c0 Delete type=0 #61
|
2026/07/07-21:20:10.822645 7f677ebff6c0 Delete type=0 #69
|
||||||
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:20:10.829164 7f677ebff6c0 Manual compaction at level-0 from '!items!DC2kimCi9sWxqhXG' @ 72057594037927935 : 1 .. '!items!qzfAEhmvVxEMzm0k' @ 0 : 0; will stop at (end)
|
||||||
|
|||||||
Binary file not shown.
@@ -1 +1 @@
|
|||||||
MANIFEST-000084
|
MANIFEST-000092
|
||||||
|
|||||||
@@ -1,3 +1,7 @@
|
|||||||
2026/07/01-17:09:48.139473 7f190cdff6c0 Recovering log #82
|
2026/07/07-21:20:15.335266 7f67ccbfe6c0 Recovering log #90
|
||||||
2026/07/01-17:09:48.150381 7f190cdff6c0 Delete type=3 #80
|
2026/07/07-21:20:15.345026 7f67ccbfe6c0 Delete type=3 #88
|
||||||
2026/07/01-17:09:48.150422 7f190cdff6c0 Delete type=0 #82
|
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)
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
2026/07/01-15:26:29.737317 7f18beffd6c0 Recovering log #78
|
2026/07/07-21:18:30.873373 7f677f7fe6c0 Recovering log #86
|
||||||
2026/07/01-15:26:29.785859 7f18beffd6c0 Delete type=3 #76
|
2026/07/07-21:18:30.883439 7f677f7fe6c0 Delete type=3 #84
|
||||||
2026/07/01-15:26:29.785900 7f18beffd6c0 Delete type=0 #78
|
2026/07/07-21:18:30.883522 7f677f7fe6c0 Delete type=0 #86
|
||||||
2026/07/01-17:09:44.923368 7f18be7fc6c0 Level-0 table #83: started
|
2026/07/07-21:20:10.848211 7f677ebff6c0 Level-0 table #91: started
|
||||||
2026/07/01-17:09:44.923392 7f18be7fc6c0 Level-0 table #83: 0 bytes OK
|
2026/07/07-21:20:10.848228 7f677ebff6c0 Level-0 table #91: 0 bytes OK
|
||||||
2026/07/01-17:09:44.930091 7f18be7fc6c0 Delete type=0 #81
|
2026/07/07-21:20:10.853981 7f677ebff6c0 Delete type=0 #89
|
||||||
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:20:10.860912 7f677ebff6c0 Manual compaction at level-0 from '!scenes!2C6gyZpvPxWlsVZi' @ 72057594037927935 : 1 .. '!scenes.levels!olYe9bhuXwRWQ8j7.defaultLevel0000' @ 0 : 0; will stop at (end)
|
||||||
|
|||||||
Binary file not shown.
@@ -1 +1 @@
|
|||||||
MANIFEST-000064
|
MANIFEST-000072
|
||||||
|
|||||||
@@ -1,3 +1,7 @@
|
|||||||
2026/07/01-17:09:48.011009 7f18bf7fe6c0 Recovering log #62
|
2026/07/07-21:20:15.205959 7f67ccbfe6c0 Recovering log #70
|
||||||
2026/07/01-17:09:48.020855 7f18bf7fe6c0 Delete type=3 #60
|
2026/07/07-21:20:15.216435 7f67ccbfe6c0 Delete type=3 #68
|
||||||
2026/07/01-17:09:48.020903 7f18bf7fe6c0 Delete type=0 #62
|
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)
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
2026/07/01-15:26:29.126390 7f18bffff6c0 Recovering log #58
|
2026/07/07-21:18:30.748414 7f67cd3ff6c0 Recovering log #66
|
||||||
2026/07/01-15:26:29.179426 7f18bffff6c0 Delete type=3 #56
|
2026/07/07-21:18:30.758766 7f67cd3ff6c0 Delete type=3 #64
|
||||||
2026/07/01-15:26:29.179481 7f18bffff6c0 Delete type=0 #58
|
2026/07/07-21:18:30.758801 7f67cd3ff6c0 Delete type=0 #66
|
||||||
2026/07/01-17:09:44.852977 7f18be7fc6c0 Level-0 table #63: started
|
2026/07/07-21:20:10.776448 7f677ebff6c0 Level-0 table #71: started
|
||||||
2026/07/01-17:09:44.853045 7f18be7fc6c0 Level-0 table #63: 0 bytes OK
|
2026/07/07-21:20:10.776508 7f677ebff6c0 Level-0 table #71: 0 bytes OK
|
||||||
2026/07/01-17:09:44.858986 7f18be7fc6c0 Delete type=0 #61
|
2026/07/07-21:20:10.782742 7f677ebff6c0 Delete type=0 #69
|
||||||
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:20:10.802179 7f677ebff6c0 Manual compaction at level-0 from '!items!2f51pcvFkcZjaxDk' @ 72057594037927935 : 1 .. '!items!yVN7PZw35iIaBl0H' @ 0 : 0; will stop at (end)
|
||||||
|
|||||||
Binary file not shown.
@@ -1 +1 @@
|
|||||||
MANIFEST-000064
|
MANIFEST-000072
|
||||||
|
|||||||
@@ -1,3 +1,7 @@
|
|||||||
2026/07/01-17:09:48.023657 7f190cdff6c0 Recovering log #62
|
2026/07/07-21:20:15.218710 7f677f7fe6c0 Recovering log #70
|
||||||
2026/07/01-17:09:48.033770 7f190cdff6c0 Delete type=3 #60
|
2026/07/07-21:20:15.228480 7f677f7fe6c0 Delete type=3 #68
|
||||||
2026/07/01-17:09:48.033813 7f190cdff6c0 Delete type=0 #62
|
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)
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
2026/07/01-15:26:29.193141 7f18beffd6c0 Recovering log #58
|
2026/07/07-21:18:30.761593 7f67ccbfe6c0 Recovering log #66
|
||||||
2026/07/01-15:26:29.250778 7f18beffd6c0 Delete type=3 #56
|
2026/07/07-21:18:30.770466 7f67ccbfe6c0 Delete type=3 #64
|
||||||
2026/07/01-15:26:29.250829 7f18beffd6c0 Delete type=0 #58
|
2026/07/07-21:18:30.770512 7f67ccbfe6c0 Delete type=0 #66
|
||||||
2026/07/01-17:09:44.872208 7f18be7fc6c0 Level-0 table #63: started
|
2026/07/07-21:20:10.782858 7f677ebff6c0 Level-0 table #71: started
|
||||||
2026/07/01-17:09:44.872235 7f18be7fc6c0 Level-0 table #63: 0 bytes OK
|
2026/07/07-21:20:10.782879 7f677ebff6c0 Level-0 table #71: 0 bytes OK
|
||||||
2026/07/01-17:09:44.877992 7f18be7fc6c0 Delete type=0 #61
|
2026/07/07-21:20:10.789952 7f677ebff6c0 Delete type=0 #69
|
||||||
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:20:10.802195 7f677ebff6c0 Manual compaction at level-0 from '!items!APN91pQL0NBfZsG7' @ 72057594037927935 : 1 .. '!items!xxZKGqDVxAfr140W' @ 0 : 0; will stop at (end)
|
||||||
|
|||||||
Binary file not shown.
@@ -1 +1 @@
|
|||||||
MANIFEST-000064
|
MANIFEST-000072
|
||||||
|
|||||||
@@ -1,3 +1,7 @@
|
|||||||
2026/07/01-17:09:48.035766 7f18bffff6c0 Recovering log #62
|
2026/07/07-21:20:15.230292 7f67cd3ff6c0 Recovering log #70
|
||||||
2026/07/01-17:09:48.047041 7f18bffff6c0 Delete type=3 #60
|
2026/07/07-21:20:15.239797 7f67cd3ff6c0 Delete type=3 #68
|
||||||
2026/07/01-17:09:48.047091 7f18bffff6c0 Delete type=0 #62
|
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)
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
2026/07/01-15:26:29.258256 7f18bffff6c0 Recovering log #58
|
2026/07/07-21:18:30.772428 7f67cd3ff6c0 Recovering log #66
|
||||||
2026/07/01-15:26:29.311705 7f18bffff6c0 Delete type=3 #56
|
2026/07/07-21:18:30.782600 7f67cd3ff6c0 Delete type=3 #64
|
||||||
2026/07/01-15:26:29.311751 7f18bffff6c0 Delete type=0 #58
|
2026/07/07-21:18:30.782662 7f67cd3ff6c0 Delete type=0 #66
|
||||||
2026/07/01-17:09:44.866052 7f18be7fc6c0 Level-0 table #63: started
|
2026/07/07-21:20:10.796225 7f677ebff6c0 Level-0 table #71: started
|
||||||
2026/07/01-17:09:44.866086 7f18be7fc6c0 Level-0 table #63: 0 bytes OK
|
2026/07/07-21:20:10.796241 7f677ebff6c0 Level-0 table #71: 0 bytes OK
|
||||||
2026/07/01-17:09:44.872136 7f18be7fc6c0 Delete type=0 #61
|
2026/07/07-21:20:10.802073 7f677ebff6c0 Delete type=0 #69
|
||||||
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:20:10.802213 7f677ebff6c0 Manual compaction at level-0 from '!items!2IYbyCPF9LJojzsj' @ 72057594037927935 : 1 .. '!items!uOpWyMGK3oiUJ1Sl' @ 0 : 0; will stop at (end)
|
||||||
|
|||||||
Binary file not shown.
@@ -176,6 +176,11 @@ export default class CharacterDataModel extends foundry.abstract.TypeDataModel {
|
|||||||
threetreasures: new fields.SchemaField({
|
threetreasures: new fields.SchemaField({
|
||||||
heiyang: new fields.SchemaField({ value: numberField(0, { min: 0 }), max: numberField(0, { min: 0 }) }),
|
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 }) }),
|
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({
|
dicelevel: new fields.SchemaField({
|
||||||
level0d: treasureLevel(),
|
level0d: treasureLevel(),
|
||||||
level1d: treasureLevel(),
|
level1d: treasureLevel(),
|
||||||
|
|||||||
@@ -254,31 +254,61 @@ export class CDECharacterSheet extends CDEBaseActorSheet {
|
|||||||
const evenCount = results.filter(r => r % 2 === 0).length
|
const evenCount = results.filter(r => r % 2 === 0).length
|
||||||
const oddCount = 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),
|
// -- Recovery bonus flags --
|
||||||
// allow free accumulation (no clamp).
|
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 cap = (max) => (max > 0 ? max : Infinity)
|
||||||
const heiYang = Math.min(
|
const heiYang = Math.min(
|
||||||
(sys.threetreasures?.heiyang?.value ?? 0) + evenCount,
|
(sys.threetreasures?.heiyang?.value ?? 0) + heiYangCount,
|
||||||
cap(sys.threetreasures?.heiyang?.max)
|
cap(sys.threetreasures?.heiyang?.max)
|
||||||
)
|
)
|
||||||
const heiYin = Math.min(
|
const heiYin = Math.min(
|
||||||
(sys.threetreasures?.heiyin?.value ?? 0) + oddCount,
|
(sys.threetreasures?.heiyin?.value ?? 0) + heiYinCount,
|
||||||
cap(sys.threetreasures?.heiyin?.max)
|
cap(sys.threetreasures?.heiyin?.max)
|
||||||
)
|
)
|
||||||
const san = Math.min(
|
|
||||||
(sys.threetreasures?.dicelevel?.level0d?.san?.value ?? 0) + evenCount,
|
// -- SAN / ZING -- fill bottom-up: level2d → level1d → level0d
|
||||||
cap(sys.threetreasures?.dicelevel?.level0d?.san?.max)
|
const poolDeltas = {
|
||||||
)
|
level2d: { san: 0, zing: 0 },
|
||||||
const zing = Math.min(
|
level1d: { san: 0, zing: 0 },
|
||||||
(sys.threetreasures?.dicelevel?.level0d?.zing?.value ?? 0) + oddCount,
|
level0d: { san: 0, zing: 0 },
|
||||||
cap(sys.threetreasures?.dicelevel?.level0d?.zing?.max)
|
}
|
||||||
)
|
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({
|
await actor.update({
|
||||||
"system.threetreasures.heiyang.value": heiYang,
|
"system.threetreasures.heiyang.value": heiYang,
|
||||||
"system.threetreasures.heiyin.value": heiYin,
|
"system.threetreasures.heiyin.value": heiYin,
|
||||||
"system.threetreasures.dicelevel.level0d.san.value": san,
|
"system.threetreasures.dicelevel.level2d.san.value": (sys.threetreasures?.dicelevel?.level2d?.san?.value ?? 0) + poolDeltas.level2d.san,
|
||||||
"system.threetreasures.dicelevel.level0d.zing.value": zing,
|
"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}`
|
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 typeOfThrow = Number(sys.prefs?.typeofthrow?.choice ?? 0)
|
||||||
const ROLL_MODES = ["roll", "gmroll", "blindroll", "selfroll"]
|
const ROLL_MODES = ["roll", "gmroll", "blindroll", "selfroll"]
|
||||||
const rollMode = ROLL_MODES[typeOfThrow] ?? "roll"
|
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({
|
await ChatMessage.create({
|
||||||
user: game.user.id,
|
user: game.user.id,
|
||||||
speaker: ChatMessage.getSpeaker({ actor }),
|
speaker: ChatMessage.getSpeaker({ actor }),
|
||||||
@@ -303,14 +351,15 @@ export class CDECharacterSheet extends CDEBaseActorSheet {
|
|||||||
<div class="cde-chat-recovery-even">
|
<div class="cde-chat-recovery-even">
|
||||||
<span class="cde-chat-recovery-count">${evenCount}</span>
|
<span class="cde-chat-recovery-count">${evenCount}</span>
|
||||||
<span><strong>${game.i18n.localize("CDE.RecoveryEvenLabel")}</strong></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>
|
||||||
<div class="cde-chat-recovery-odd">
|
<div class="cde-chat-recovery-odd">
|
||||||
<span class="cde-chat-recovery-count">${oddCount}</span>
|
<span class="cde-chat-recovery-count">${oddCount}</span>
|
||||||
<span><strong>${game.i18n.localize("CDE.RecoveryOddLabel")}</strong></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>
|
</div>
|
||||||
|
<div class="cde-chat-recovery-pools">${poolHtml}</div>
|
||||||
</div>`,
|
</div>`,
|
||||||
rolls: [roll],
|
rolls: [roll],
|
||||||
rollMode,
|
rollMode,
|
||||||
|
|||||||
@@ -1,8 +1,22 @@
|
|||||||
{{!-- Recovery button --}}
|
{{!-- Recovery button + boost toggles --}}
|
||||||
<div class="cde-recovery-bar">
|
<div class="cde-recovery-bar">
|
||||||
<button type="button" class="cde-recovery-btn" data-action="recovery">
|
<button type="button" class="cde-recovery-btn" data-action="recovery">
|
||||||
<i class="fas fa-heartbeat"></i> {{ localize "CDE.Recovery" }}
|
<i class="fas fa-heartbeat"></i> {{ localize "CDE.Recovery" }}
|
||||||
</button>
|
</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>
|
</div>
|
||||||
|
|
||||||
{{!-- HEI — Essence --}}
|
{{!-- HEI — Essence --}}
|
||||||
|
|||||||
Reference in New Issue
Block a user