This commit is contained in:
+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
@@ -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