diff --git a/css/bol.css b/css/bol.css index 6ab3dc9..cdfca74 100644 --- a/css/bol.css +++ b/css/bol.css @@ -442,8 +442,14 @@ ul.no-bullets { background-color: lightgray; } .items-list .item-header .item-name { - font-family: "Wolfsbane2Expanded", cursive; - font-size: 1.5em; + font-family: "Wolfsbane2Expanded", cursive !important; + font-size: 1.32em !important; + color: #191813 !important; +} +.items-list .item-header .item-field { + font-family: 'Signika', sans-serif !important; + font-size: 0.85em !important; + color: #4b4a44 !important; } .items-list .item { min-height: 30px; @@ -451,6 +457,8 @@ ul.no-bullets { padding: 3px 0 3px 3px; border-bottom: 1px solid #BBB; align-items: stretch; + color: #4b4a44; + font-size: 0.9em; } .items-list .item .item-image { flex: 0 0 30px; @@ -490,6 +498,11 @@ ul.no-bullets { .items-list .item .item-name, .items-list .item .item-field { margin: 0; + color: #333; + font-size: 0.84rem; + font-family: inherit; + display: flex; + align-items: center; } .items-list .item .item-controls-1 { flex: 0 0 18px; @@ -603,6 +616,144 @@ ul.no-bullets { color: #fff; } /* ----------------------------------------- */ +/* Post Item Chat Card */ +/* ----------------------------------------- */ +.bol-post-item { + color: #191813; +} +.bol-post-item .bpi-header { + display: flex; + flex-direction: row; + align-items: flex-start; + gap: 8px; + padding-bottom: 6px; + border-bottom: 2px solid #8b7355; + margin-bottom: 8px; +} +.bol-post-item .bpi-header .bpi-img { + width: 52px; + height: 52px; + border: 1px outset lightgray; + box-shadow: 2px 2px 3px rgba(0, 0, 0, 0.5); + object-fit: cover; + flex: 0 0 52px; +} +.bol-post-item .bpi-header .bpi-title-block { + flex: 1; +} +.bol-post-item .bpi-header .bpi-title-block .bpi-name { + margin: 0 0 2px 0; + font-family: "Wolfsbane2Expanded", cursive; + font-size: 1.1em; + color: #4b4a44; + line-height: 1.2; + border: none; +} +.bol-post-item .bpi-header .bpi-title-block .bpi-type { + font-family: "IMFellDWPicaSC-Regular", serif; + font-size: 0.8em; + color: #7a7060; + font-style: italic; +} +.bol-post-item .bpi-stats-row { + display: flex; + flex-direction: row; + flex-wrap: wrap; + gap: 3px 12px; + margin: 4px 0; + padding: 4px 6px; + background: rgba(139, 115, 85, 0.08); + border: 1px solid rgba(139, 115, 85, 0.25); + border-radius: 3px; +} +.bol-post-item .bpi-stats-row .bpi-stat { + display: flex; + flex-direction: row; + align-items: baseline; + gap: 4px; +} +.bol-post-item .bpi-stats-row .bpi-stat .bpi-sl { + font-family: "IMFellDWPicaSC-Regular", serif; + font-size: 0.72em; + color: #7a7060; + font-style: italic; +} +.bol-post-item .bpi-stats-row .bpi-stat .bpi-sv { + font-weight: bold; + font-size: 0.88em; + color: #191813; +} +.bol-post-item .bpi-tags { + display: flex; + flex-direction: row; + flex-wrap: wrap; + gap: 3px; + margin: 3px 0; +} +.bol-post-item .bpi-tags .bpi-tag { + padding: 1px 7px; + border: 1px solid #8b7355; + border-radius: 10px; + font-size: 0.7em; + color: #4b4a44; + background: rgba(139, 115, 85, 0.12); + font-family: "IMFellDWPicaSC-Regular", serif; +} +.bol-post-item .bpi-tags .bpi-tag-magic { + border-color: #6a4a9c; + color: #5a3a8c; + background: rgba(106, 74, 156, 0.1); +} +.bol-post-item .bpi-tags .bpi-tag-bonus { + border-color: #2d7a2d; + color: #1a5a1a; + background: rgba(45, 122, 45, 0.1); +} +.bol-post-item .bpi-tags .bpi-tag-malus { + border-color: #8b2020; + color: #6a1a1a; + background: rgba(139, 32, 32, 0.1); +} +.bol-post-item .bpi-conditions { + margin: 3px 0; +} +.bol-post-item .bpi-conditions .bpi-cond-label { + font-family: "IMFellDWPicaSC-Regular", serif; + font-size: 0.75em; + font-style: italic; + color: #7a7060; +} +.bol-post-item .bpi-conditions .bpi-condition { + display: inline-block; + margin: 1px 2px; + padding: 1px 6px; + border-radius: 3px; + font-size: 0.8em; +} +.bol-post-item .bpi-conditions .bpi-cond-req { + border: 1px solid #8b2020; + background: rgba(139, 32, 32, 0.08); + color: #6a1a1a; +} +.bol-post-item .bpi-conditions .bpi-cond-opt { + border: 1px solid #6a7a30; + background: rgba(106, 122, 48, 0.08); + color: #4a5a20; +} +.bol-post-item .bpi-description { + margin-top: 7px; + padding-top: 6px; + border-top: 1px dashed #c4a882; +} +.bol-post-item .bpi-description .bpi-desc-content { + font-size: 0.85em; + color: #191813; + line-height: 1.45; +} +.bol-post-item .bpi-description .bpi-desc-content p { + margin: 0 0 4px 0; +} +/* ----------------------------------------- */ /* Chat Messages */ /* ----------------------------------------- */ .message-header h2.damage { @@ -692,7 +843,7 @@ body.system-bol img#logo { overflow-y: hidden; background: transparent; } -.bol.sheet .window-content form { +.bol.sheet .window-content .bol-actor-form { border: 10px solid transparent; border-image: url("/systems/bol/ui/box-border-large.webp") 36 repeat; border-image-outset: 1; @@ -700,8 +851,10 @@ body.system-bol img#logo { margin: 0; padding: 0; height: 100%; + position: relative; + width: 100%; } -.bol.sheet .window-content form .sheet-header { +.bol.sheet .window-content .bol-actor-form .sheet-header { background-image: url("/systems/bol/ui/banner.webp"); background-repeat: no-repeat; background-size: 330px 62px; @@ -718,7 +871,7 @@ body.system-bol img#logo { align-items: flex-end; padding-bottom: 10px; } -.bol.sheet .window-content form .sheet-header .header-field .header-field-group { +.bol.sheet .window-content .bol-actor-form .sheet-header .header-field .header-field-group { overflow: hidden; display: flex; flex-direction: row; @@ -726,22 +879,72 @@ body.system-bol img#logo { justify-content: flex-start; align-items: baseline; } -.bol.sheet .window-content form .sheet-header .header-field .header-field-group .header-field-label { - margin-right: 5px; -} -.bol.sheet .window-content form .sheet-header .header-field .header-field-group .charname, -.bol.sheet .window-content form .sheet-header .header-field .header-field-group .itemname, -.bol.sheet .window-content form .sheet-header .header-field .header-field-group .header-field-value { +.bol.sheet .window-content .bol-actor-form .sheet-header .header-field .header-field-group .charname, +.bol.sheet .window-content .bol-actor-form .sheet-header .header-field .header-field-group .itemname { color: #4b4a44; - font-family: 'Contrail One', cursive; - font-size: 1.5rem; - background-color: #EEE; + font-family: "Wolfsbane2Expanded", cursive; + font-size: 1.65rem; + background-color: #2a2a2a30; + border: 1px solid #4b4a44 !important; + border-radius: 0.5rem; + width: 100%; + margin-bottom: 4px; } -.bol.sheet .window-content form .main .tabs { +.bol.sheet .window-content .bol-actor-form .sheet-header .header-field .header-field-group .header-field-label { + margin-right: 5px; + font-size: 0.86rem; +} +.bol.sheet .window-content .bol-actor-form .sheet-header .header-field .header-field-group .header-field-label.xp-sublabel { + font-size: 0.9rem; + color: #606060; +} +.bol.sheet .window-content .bol-actor-form .sheet-header .header-field .header-field-group .header-field-value { + color: #4b4a44; + font-family: "Wolfsbane2Expanded", cursive; + font-size: 0.9rem; + background-color: #2a2a2a30; + border: 1px solid #4b4a44 !important; + border-radius: 0.5rem; + text-align: center; +} +.bol.sheet .window-content .bol-actor-form .sheet-header .header-buttons { + align-self: flex-end; + padding-bottom: 10px; +} +.bol.sheet .window-content .bol-actor-form .sheet-header .header-buttons .post-item { + flex: 0 0 auto; + height: 32px; + width: 32px; + line-height: 30px; + cursor: pointer; + background: rgba(0, 0, 0, 0.1); + border: 1px solid #999; + border-radius: 3px; +} +.bol.sheet .window-content .bol-actor-form .sheet-header .header-buttons .post-item:hover { + background: rgba(0, 0, 0, 0.2); +} +.bol.sheet .window-content .bol-actor-form .wrap { + flex: 1; + min-height: 0; + align-items: stretch; +} +.bol.sheet .window-content .bol-actor-form .bol-actor-sidebar { + align-self: flex-start; +} +.bol.sheet .window-content .bol-actor-form .main { + display: flex; + flex-direction: column; + flex: 1; + min-height: 0; + height: 100%; + overflow: hidden; +} +.bol.sheet .window-content .bol-actor-form .main .tabs { flex: 0 0 30px; background-color: black; } -.bol.sheet .window-content form .main .tabs .item { +.bol.sheet .window-content .bol-actor-form .main .tabs .item { line-height: 30px; font-weight: bold; font-family: "CCMeanwhile", cursive; @@ -749,21 +952,49 @@ body.system-bol img#logo { padding-top: 4px; font-size: 0.8em; } -.bol.sheet .window-content form .main .tabs .item.active { +.bol.sheet .window-content .bol-actor-form .main .tabs .item.active { text-decoration: underline; text-shadow: none; } -.bol.sheet .window-content form .main .sheet-body { +.bol.sheet .window-content .bol-actor-form .main .sheet-body { + flex: 1; + min-height: 0; overflow: hidden; } -.bol.sheet .window-content form .main .sheet-body .tab { - height: 95%; +.bol.sheet .window-content .bol-actor-form .main .sheet-body .tab { + height: 100%; border: none; overflow-y: auto; + display: none; } -.bol.sheet .window-content form .main .sheet-body .tab.description .editor, -.bol.sheet .window-content form .main .sheet-body .tab.description .editor-content { +.bol.sheet .window-content .bol-actor-form .main .sheet-body .tab.active { + display: block; +} +.bol.sheet .window-content .bol-actor-form .main .sheet-body .tab.stats hr { + margin-top: 6px; + margin-bottom: 6px; +} +.bol.sheet .window-content .bol-actor-form .main .sheet-body .tab.description .editor, +.bol.sheet .window-content .bol-actor-form .main .sheet-body .tab.description .editor-content, +.bol.sheet .window-content .bol-actor-form .main .sheet-body .tab.description prose-mirror { height: 100%; + color: #191813; +} +.bol.sheet .window-content .bol-actor-form .main .sheet-body .tab.description prose-mirror .editor-content, +.bol.sheet .window-content .bol-actor-form .main .sheet-body .tab.description prose-mirror p, +.bol.sheet .window-content .bol-actor-form .main .sheet-body .tab.description prose-mirror div, +.bol.sheet .window-content .bol-actor-form .main .sheet-body .tab.description prose-mirror span { + color: #191813 !important; +} +.bol.sheet .window-content .bol-actor-form .main .sheet-body .tab.description input[type="text"], +.bol.sheet .window-content .bol-actor-form .main .sheet-body .tab.description input[type="number"] { + background-color: #2a2a2a30; + border: 1px solid #4b4a44 !important; + border-radius: 0.5rem; + color: #4b4a44; + text-align: center; + font-size: 0.95rem; + margin-left: 6px; } .sheet-profile-img { cursor: pointer; @@ -790,13 +1021,14 @@ body.system-bol img#logo { background-repeat: no-repeat; background-size: 190px 115px; } -.bol.sheet.actor .window-content form .sidebar { +.bol.sheet.actor .window-content .bol-actor-form .sidebar { padding-top: 115px; min-width: 250px; width: 250px; max-width: 250px; + overflow: hidden; } -.bol.sheet.actor .window-content form .sidebar .profile-img { +.bol.sheet.actor .window-content .bol-actor-form .sidebar .profile-img { cursor: pointer; border: none; background-color: #EEE; @@ -806,35 +1038,62 @@ body.system-bol img#logo { max-width: calc(250px - 10px); margin-right: 10px; } -.bol.sheet.actor .window-content form .main .sheet-body { +.bol.sheet.actor .window-content .bol-actor-form .sidebar .items-list { + width: calc(250px - 10px); + max-width: calc(250px - 10px); + margin-right: 10px; +} +.bol.sheet.actor .window-content .bol-actor-form .main .sheet-body { overflow: hidden; } -.bol.sheet.actor .window-content form .main .sheet-body .tab .attribute.vigor { +.bol.sheet.actor .window-content .bol-actor-form .main .sheet-body .tab .attribute.vigor { background-image: url("/systems/bol/ui/attributes/vigor.webp"); background-repeat: no-repeat; - background-position: center center; - background-size: 64px 64px; + background-position: center 40%; + background-size: 100px 100px; } -.bol.sheet.actor .window-content form .main .sheet-body .tab .attribute.agility { +.bol.sheet.actor .window-content .bol-actor-form .main .sheet-body .tab .attribute.agility { background-image: url("/systems/bol/ui/attributes/agility.webp"); background-repeat: no-repeat; - background-position: center center; - background-size: 64px 64px; + background-position: center 40%; + background-size: 100px 100px; } -.bol.sheet.actor .window-content form .main .sheet-body .tab .attribute.mind { +.bol.sheet.actor .window-content .bol-actor-form .main .sheet-body .tab .attribute.mind { background-image: url("/systems/bol/ui/attributes/mind.webp"); background-repeat: no-repeat; - background-position: center center; - background-size: 64px 64px; + background-position: center 40%; + background-size: 100px 100px; } -.bol.sheet.actor .window-content form .main .sheet-body .tab .attribute.appeal { +.bol.sheet.actor .window-content .bol-actor-form .main .sheet-body .tab .attribute.appeal { background-image: url("/systems/bol/ui/attributes/appeal.webp"); background-repeat: no-repeat; - background-position: center center; - background-size: 64px 64px; + background-position: center 40%; + background-size: 100px 100px; } -.bol.sheet.actor .window-content form .main .sheet-body .tab .attribute .stat-value { - margin-top: -10px; +.bol.sheet.actor .window-content .bol-actor-form .main .sheet-body .tab .attribute .stat-value { + margin-top: -18px; +} +.bol.sheet.actor .window-content .bol-actor-form .main .sheet-body .tab .attribute .stat-value.rounded { + background: transparent; + border: none; + box-shadow: none; + text-align: center; + line-height: 4rem; +} +.bol.sheet.actor .window-content .bol-actor-form .main .sheet-body .tab .aptitude .stat-value.rounded-border { + background: transparent; + text-align: center; + line-height: 4rem; +} +.bol.sheet.actor .resources-value { + text-align: center; + color: #4b4a44; +} +.bol.sheet.actor .inc-dec-btns-resource { + color: #8b0000; +} +.bol.sheet.actor .inc-dec-btns-resource:hover { + color: #4b4a44; } .bol.sheet.actor .bol-footer { height: 62px; @@ -855,7 +1114,6 @@ body.system-bol img#logo { height: 30px; max-height: 30px; min-height: 30px; - background-color: black; } .bol.sheet.actor .bol-footer .footer-right { text-align: right; @@ -911,6 +1169,7 @@ body.system-bol img#logo { font-family: "Wolfsbane2Expanded", cursive; font-size: 2rem; font-variant: small-caps; + color: #4b4a44; } .bol.sheet.actor .rounded { border-radius: 100px; @@ -1052,27 +1311,212 @@ body.system-bol img#logo { min-width: 460px; min-height: 400px; } +.bol.sheet.item .window-content { + background: transparent !important; + color: #191813 !important; + padding: 10px; + overflow: hidden; +} +.bol.sheet.item .window-content .bol.sheet.item { + border: 10px solid transparent; + border-image: url("/systems/bol/ui/box-border-large.webp") 36 repeat; + border-image-outset: 1; + background: white !important; + color: #191813 !important; + margin: 0; + padding: 0; + height: 100%; + position: relative; + width: 100%; + display: flex; + flex-direction: column; +} +.bol.sheet.item .window-content .bol.sheet.item .wrap { + flex: 1; + min-height: 0; + display: flex; + flex-direction: column; +} +.bol.sheet.item .window-content .bol.sheet.item .wrap .main { + flex: 1; + min-height: 0; + display: flex; + flex-direction: column; +} +.bol.sheet.item .window-content .bol.sheet.item .wrap .main .sheet-body { + flex: 1; + min-height: 0; + overflow: hidden; +} +.bol.sheet.item .window-content .bol.sheet.item .wrap .main .sheet-body .tab { + display: none; +} +.bol.sheet.item .window-content .bol.sheet.item .wrap .main .sheet-body .tab.active { + display: block; + height: 100%; + overflow-y: auto; +} +.bol.sheet.item .window-content .bol.sheet.item .wrap .main .sheet-body .tab.properties { + padding: 5px 8px; +} +.bol.sheet.item .window-content .bol.sheet.item .sheet-header { + background-image: url("/systems/bol/ui/banner.webp"); + background-size: 330px 62px; + background-position: 100% -15px; + background-repeat: no-repeat; + height: 115px; + min-height: 115px; + display: flex; + align-items: flex-end; + padding-bottom: 10px; +} +.bol.sheet.item .window-content .bol.sheet.item .sheet-header img.profile-img { + cursor: pointer; + border: none; + background-color: lightgray; + box-shadow: 5px 5px 5px black; + width: 96px; + height: 96px; + min-width: 96px; + min-height: 96px; + max-width: 96px; + max-height: 96px; + margin-right: 10px; + object-fit: cover; +} +.bol.sheet.item .window-content .bol.sheet.item .sheet-header .header-buttons { + align-self: flex-end; + padding-bottom: 10px; +} +.bol.sheet.item .window-content .bol.sheet.item .sheet-header .header-buttons .post-item { + color: #4b4a44; + background: rgba(0, 0, 0, 0.1); + border: 1px solid #999; + border-radius: 3px; + height: 32px; + width: 32px; + line-height: 30px; + cursor: pointer; +} +.bol.sheet.item .window-content .bol.sheet.item .sheet-header .header-buttons .post-item:hover { + color: #191813; + background: rgba(0, 0, 0, 0.2); +} +.bol.sheet.item .window-content .bol.sheet.item .tabs { + height: 44px; + background-color: black; + display: flex; + flex-shrink: 0; +} +.bol.sheet.item .window-content .bol.sheet.item .tabs a.item { + line-height: 44px; + font-weight: bold; + font-family: "CCMeanwhile", cursive; + color: white; + font-size: 0.9em; +} +.bol.sheet.item .window-content .bol.sheet.item .tabs a.item.active { + text-decoration: underline; + text-shadow: none; +} +.bol.sheet.item .window-content .bol.sheet.item .sheet-body .tab.description.active { + color: #191813; + display: block; + overflow: auto; +} +.bol.sheet.item .window-content .bol.sheet.item .sheet-body .tab.description.active .editor, +.bol.sheet.item .window-content .bol.sheet.item .sheet-body .tab.description.active .editor-content, +.bol.sheet.item .window-content .bol.sheet.item .sheet-body .tab.description.active .prosemirror, +.bol.sheet.item .window-content .bol.sheet.item .sheet-body .tab.description.active .prosemirror p, +.bol.sheet.item .window-content .bol.sheet.item .sheet-body .tab.description.active .prosemirror div, +.bol.sheet.item .window-content .bol.sheet.item .sheet-body .tab.description.active .prosemirror span, +.bol.sheet.item .window-content .bol.sheet.item .sheet-body .tab.description.active .prosemirror h1, +.bol.sheet.item .window-content .bol.sheet.item .sheet-body .tab.description.active .prosemirror h2, +.bol.sheet.item .window-content .bol.sheet.item .sheet-body .tab.description.active .prosemirror h3, +.bol.sheet.item .window-content .bol.sheet.item .sheet-body .tab.description.active .prosemirror h4, +.bol.sheet.item .window-content .bol.sheet.item .sheet-body .tab.description.active .form-group:has(.prosemirror), +.bol.sheet.item .window-content .bol.sheet.item .sheet-body .tab.description.active .form-group:has(.editor) { + color: #191813 !important; +} +.bol.sheet.item .window-content .bol.sheet.item .sheet-body .tab.properties label, +.bol.sheet.item .window-content .bol.sheet.item .sheet-body .tab.properties .form-group label, +.bol.sheet.item .window-content .bol.sheet.item .sheet-body .tab.properties select, +.bol.sheet.item .window-content .bol.sheet.item .sheet-body .tab.properties input[type="text"], +.bol.sheet.item .window-content .bol.sheet.item .sheet-body .tab.properties input[type="number"] { + color: #191813; +} .bol.sheet.item h1 input.itemname { - margin-top: 32px; - min-width: 24rem; + margin-top: 0; + min-width: 26.4rem; font-family: "Wolfsbane2Expanded", cursive; + text-shadow: 3px 3px 5px #333; +} +.bol.sheet.item .window-content .bol.sheet.item .form-group { + display: flex; + flex-direction: row; + align-items: center; + margin: 3px 0; +} +.bol.sheet.item .window-content .bol.sheet.item .form-group label { + flex: 0 0 40%; + color: #191813; + font-weight: bold; +} +.bol.sheet.item .window-content .bol.sheet.item .form-group input[type="checkbox"] { + flex: 0 0 auto; + width: 16px; + height: 16px; + margin: 0; + position: static; + top: auto; + cursor: pointer; +} +.bol.sheet.item .window-content .bol.sheet.item .form-group input[type="text"], +.bol.sheet.item .window-content .bol.sheet.item .form-group input[type="number"], +.bol.sheet.item .window-content .bol.sheet.item .form-group select, +.bol.sheet.item .window-content .bol.sheet.item .form-group .form-fields { + flex: 1; +} +.bol.sheet.item .window-content .bol.sheet.item label.checkbox { + display: flex; + flex-direction: row; + align-items: center; + gap: 6px; + color: #191813; +} +.bol.sheet.item .window-content .bol.sheet.item label.checkbox > input[type="checkbox"] { + position: static; + top: auto; + margin: 0; + flex: 0 0 auto; +} +.bol.sheet.item .window-content .bol.sheet.item input[type="text"], +.bol.sheet.item .window-content .bol.sheet.item input[type="number"], +.bol.sheet.item .window-content .bol.sheet.item input[type="text"]:hover, +.bol.sheet.item .window-content .bol.sheet.item input[type="number"]:hover, +.bol.sheet.item .window-content .bol.sheet.item input[type="text"]:focus, +.bol.sheet.item .window-content .bol.sheet.item input[type="number"]:focus, +.bol.sheet.item .window-content .bol.sheet.item select { + color: #191813; + background-color: #f0efe8; + border: 1px solid #999; + border-radius: 2px; + padding: 1px 4px; +} +.bol.sheet.item .window-content .bol.sheet.item select option { + background-color: #f0efe8; + color: #191813; } .bol.sheet.item .item-properties { - flex: 0 0 150px; - margin: 5px 5px 5px 0; - padding-right: 5px; - border-right: 1px groove #eeede0; -} -.bol.sheet.item .item-properties .form-group { - margin: 0; -} -.bol.sheet.item .item-properties .form-group label { - line-height: 20px; + margin: 5px 0; + padding-bottom: 5px; + border-bottom: 1px groove #eeede0; } .bol.sheet.item .item-properties .properties-list { list-style: none; margin: 0; padding: 0; + display: block; } .bol.sheet.item .item-properties .properties-list li { margin: 3px 0; diff --git a/module/applications/sheets/_module.mjs b/module/applications/sheets/_module.mjs index 08faa02..6322617 100644 --- a/module/applications/sheets/_module.mjs +++ b/module/applications/sheets/_module.mjs @@ -1,3 +1,7 @@ export { default as BoLBaseItemSheet } from "./base-item-sheet.mjs" export { default as BoLItemSheet } from "./item-sheet.mjs" export { default as BoLFeatureSheet } from "./feature-sheet.mjs" +export { default as BoLBaseActorSheet } from "./base-actor-sheet.mjs" +export { default as BoLActorSheet } from "./actor-sheet.mjs" +export { default as BoLHordeSheet } from "./horde-sheet.mjs" +export { default as BoLVehicleSheet } from "./vehicle-sheet.mjs" diff --git a/module/applications/sheets/actor-sheet.mjs b/module/applications/sheets/actor-sheet.mjs new file mode 100644 index 0000000..4d7b958 --- /dev/null +++ b/module/applications/sheets/actor-sheet.mjs @@ -0,0 +1,144 @@ +import BoLBaseActorSheet from "./base-actor-sheet.mjs" +import { BoLUtility } from "../../system/bol-utility.js" + +/** + * Actor Sheet for BoL characters and encounters using AppV2 + */ +export default class BoLActorSheet extends BoLBaseActorSheet { + /** @override */ + static DEFAULT_OPTIONS = { + ...super.DEFAULT_OPTIONS, + classes: [...super.DEFAULT_OPTIONS.classes], + actions: { + ...super.DEFAULT_OPTIONS.actions, + }, + } + + /** @override */ + static PARTS = { + sheet: { + template: "systems/bol/templates/actor/actor-sheet.hbs", + }, + } + + /** @override */ + tabGroups = { primary: "stats" } + + /** @override */ + async _prepareContext() { + const context = await super._prepareContext() + const actor = this.document + + context.data = actor.toObject() + context.details = actor.details + context.attributes = actor.attributes + context.aptitudes = actor.aptitudes + context.resources = actor.getResourcesFromType() + context.xp = actor.system.xp + context.equipment = actor.equipment + context.equipmentCreature = actor.equipmentCreature + context.weapons = actor.weapons + context.protections = actor.protections + context.spells = actor.spells + context.alchemy = actor.alchemy + context.containers = actor.containers + context.treasure = actor.treasure + context.boleffects = actor.boleffects + context.alchemyrecipe = actor.alchemyrecipe + context.horoscopes = actor.horoscopes + context.vehicles = actor.vehicles + context.fightoptions = actor.fightoptions + context.ammos = actor.ammos + context.misc = actor.misc + context.xplog = actor.xplog + context.combat = actor.buildCombat() + context.initiativeRank = actor.getInitiativeRank() + context.features = actor.buildFeatures() + context.options = this.options + context.editScore = this.options.editScore + context.useBougette = (actor.type === "character" && BoLUtility.getUseBougette()) || false + context.bougette = actor.getBougette() + context.charType = actor.getCharType() + context.villainy = actor.getVillainy() + context.isUndead = actor.isUndead() + context.biography = await foundry.applications.ux.TextEditor.implementation.enrichHTML( + actor.system.details?.biography || "", { async: true } + ) + context.notes = await foundry.applications.ux.TextEditor.implementation.enrichHTML( + actor.system.details?.notes || "", { async: true } + ) + context.isSorcerer = actor.isSorcerer() + context.isAlchemist = actor.isAlchemist() + context.isAstrologer = actor.isAstrologer() + context.isMysteries = context.isSorcerer || context.isAlchemist || context.isAstrologer + context.isPriest = actor.isPriest() + context.horoscopeGroupList = game.settings.get("bol", "horoscope-group") + + console.log("ACTORDATA (AppV2)", context) + return context + } + + /** @override */ + _activateListeners() { + super._activateListeners() + if (!this.isEditable) return + + // Create generic item + this.element.querySelectorAll(".create-item").forEach((el) => { + el.addEventListener("click", () => { + this.actor.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("BOL.ui.newEquipment"), type: "item" }], { renderSheet: true }) + }) + }) + + // Create natural weapon + this.element.querySelectorAll(".create-natural-weapon").forEach((el) => { + el.addEventListener("click", () => { + const system = foundry.utils.duplicate(game.bol.config.defaultNaturalWeapon) + this.actor.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("BOL.ui.newNaturalWeapon"), type: "item", system }], { renderSheet: true }) + }) + }) + + // Create natural protection + this.element.querySelectorAll(".create-natural-protection").forEach((el) => { + el.addEventListener("click", () => { + const system = foundry.utils.duplicate(game.bol.config.defaultNaturalProtection) + this.actor.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("BOL.ui.newNaturalProtection"), type: "item", system }], { renderSheet: true }) + }) + }) + + // Item create via header dataset (type-based creation) + this.element.querySelectorAll(".item-create").forEach((el) => { + el.addEventListener("click", (ev) => { + ev.preventDefault() + const header = ev.currentTarget + const type = header.dataset.type + const data = foundry.utils.duplicate(header.dataset) + const name = `New ${type}` + delete data.type + this.actor.createEmbeddedDocuments("Item", [{ name, type, data }]) + }) + }) + + // Add XP Log entry + this.element.querySelectorAll(".xplog-add").forEach((el) => { + el.addEventListener("click", (ev) => { + ev.preventDefault() + this.actor.addXPLog("other", "Nouveau", 0, 0) + }) + }) + + // Add item by category/subtype (equipment tab headers) + this.element.querySelectorAll(".item-add").forEach((el) => { + el.addEventListener("click", (ev) => { + ev.preventDefault() + const { itemType, category, subtype } = ev.currentTarget.dataset + const system = { category, subtype } + this.actor.createEmbeddedDocuments("Item", [{ + name: game.i18n.localize("BOL.ui.newEquipment"), + type: itemType || "item", + system, + }], { renderSheet: true }) + }) + }) + } +} diff --git a/module/applications/sheets/base-actor-sheet.mjs b/module/applications/sheets/base-actor-sheet.mjs new file mode 100644 index 0000000..0041624 --- /dev/null +++ b/module/applications/sheets/base-actor-sheet.mjs @@ -0,0 +1,307 @@ +const { HandlebarsApplicationMixin } = foundry.applications.api + +import { BoLRoll } from "../../controllers/bol-rolls.js" +import { BoLUtility } from "../../system/bol-utility.js" + +/** + * Base Actor Sheet for BoL system using AppV2 + * @extends {ActorSheetV2} + */ +export default class BoLBaseActorSheet extends HandlebarsApplicationMixin(foundry.applications.sheets.ActorSheetV2) { + constructor(options = {}) { + super(options) + this.#dragDrop = this.#createDragDropHandlers() + } + + #dragDrop + + /** @override */ + static DEFAULT_OPTIONS = { + classes: ["bol", "sheet", "actor"], + position: { + width: 836, + height: 807, + }, + form: { + submitOnChange: true, + closeOnSubmit: false, + }, + window: { + resizable: true, + }, + tabs: [ + { + navSelector: "nav[data-group=\"primary\"]", + contentSelector: "section.sheet-body", + initial: "stats", + }, + ], + dragDrop: [{ dragSelector: ".items-list .item", dropSelector: null }], + actions: {}, + } + + /** Tab groups state */ + tabGroups = { primary: "stats" } + + /** @override */ + async _prepareContext() { + const actor = this.document + return { + actor, + system: actor.system, + config: game.bol.config, + isGM: game.user.isGM, + isEditable: this.isEditable, + owner: this.document.isOwner, + cssClass: this.options.classes.join(" "), + } + } + + /** @override */ + _onRender(context, options) { + super._onRender(context, options) + this.#dragDrop.forEach((d) => d.bind(this.element)) + this._activateTabs() + this._activateListeners() + this._applyBackgroundImage() + this._activateImageEdit() + } + + /** + * Apply background image to the actor form + * @private + */ + _applyBackgroundImage() { + const logoUrl = BoLUtility.getLogoActorSheet() + const form = this.element.querySelector(".bol-actor-form") + if (form) form.style.backgroundImage = `url(${logoUrl})` + } + + /** + * Activate image editing via FilePicker + * @private + */ + _activateImageEdit() { + const img = this.element.querySelector('[data-edit="img"]') + if (img && this.isEditable) { + img.style.cursor = "pointer" + img.addEventListener("click", () => { + new FilePicker({ + type: "image", + current: this.document.img, + callback: (path) => this.document.update({ img: path }), + }).browse() + }) + } + } + + /** + * Activate tab navigation + * @private + */ + _activateTabs() { + const nav = this.element.querySelector("nav[data-group]") + if (!nav) return + + const group = nav.dataset.group + const activeTab = this.tabGroups[group] || "stats" + + nav.querySelectorAll("[data-tab]").forEach((link) => { + const tab = link.dataset.tab + link.classList.toggle("active", tab === activeTab) + link.addEventListener("click", (event) => { + event.preventDefault() + this.tabGroups[group] = tab + this.render() + }) + }) + + this.element.querySelectorAll(`[data-group="${group}"][data-tab]`).forEach((content) => { + content.classList.toggle("active", content.dataset.tab === activeTab) + }) + } + + /** + * Activate event listeners (replaces activateListeners with vanilla DOM) + * @private + */ + _activateListeners() { + if (!this.isEditable) return + + // Item edit + this.element.querySelectorAll(".item-edit").forEach((el) => { + el.addEventListener("click", (ev) => { + const li = ev.currentTarget.closest(".item") + const item = this.actor.items.get(li?.dataset.itemId) + item?.sheet.render(true) + }) + }) + + // Item delete + this.element.querySelectorAll(".item-delete").forEach((el) => { + el.addEventListener("click", (ev) => { + const li = ev.currentTarget.closest(".item") + const itemId = li?.dataset.itemId + Dialog.confirm({ + title: game.i18n.localize("BOL.ui.deletetitle"), + content: game.i18n.localize("BOL.ui.confirmdelete"), + yes: () => { + this.actor.deleteEmbeddedDocuments("Item", [itemId]) + li?.remove() + }, + no: () => {}, + defaultYes: false, + }) + }) + }) + + // Item equip/unequip + this.element.querySelectorAll(".item-equip").forEach((el) => { + el.addEventListener("click", (ev) => { + const li = ev.currentTarget.closest(".item") + const item = this.actor.items.get(li?.dataset.itemId) + if (item) this.actor.toggleEquipItem(item) + }) + }) + + // Toggle fight option + this.element.querySelectorAll(".toggle-fight-option").forEach((el) => { + el.addEventListener("click", (ev) => { + const li = ev.currentTarget.closest(".item") + this.actor.toggleFightOption(li?.dataset.itemId) + }) + }) + + // Inc/dec alchemy points + this.element.querySelectorAll(".inc-dec-btns-alchemy").forEach((el) => { + el.addEventListener("click", (ev) => { + const li = ev.currentTarget.closest(".item") + this.actor.spendAlchemyPoint(li?.dataset.itemId, 1) + }) + }) + + // Inc/dec resource buttons + this.element.querySelectorAll(".inc-dec-btns-resource").forEach((el) => { + el.addEventListener("click", (ev) => { + const dataset = ev.currentTarget.dataset + this.actor.incDecResources(dataset.target, parseInt(dataset.incr)) + }) + }) + + // Generic inc/dec buttons for item fields + this.element.querySelectorAll(".inc-dec-btns").forEach((el) => { + el.addEventListener("click", (ev) => { + const li = ev.currentTarget.closest(".item") + if (!li) return + const item = this.actor.items.get(li.dataset.itemId) + if (!item) return + const dataset = ev.currentTarget.dataset + const operator = dataset.operator + const target = dataset.target + const incr = parseInt(dataset.incr) + const min = parseInt(dataset.min) + const max = parseInt(dataset.max) || 10000 + // eslint-disable-next-line no-eval + let value = eval("item." + target) || 0 + if (operator === "minus") value = value >= min + incr ? value - incr : min + if (operator === "plus") value = value <= max - incr ? value + incr : max + item.update({ [target]: value }) + }) + }) + + // Rollable elements + this.element.querySelectorAll(".rollable").forEach((el) => { + el.addEventListener("click", (ev) => this._onRoll(ev)) + }) + } + + /** + * Handle clickable rolls (replaces _onRoll with vanilla DOM) + * @param {Event} event + * @private + */ + _onRoll(event) { + event.preventDefault() + const element = event.currentTarget + const dataset = element.dataset + const rollType = dataset.rollType + const li = element.closest(".item") + const itemId = li?.dataset.itemId + + switch (rollType) { + case "attribute": + BoLRoll.attributeCheck(this.actor, dataset.key, event) + break + case "aptitude": + BoLRoll.aptitudeCheck(this.actor, dataset.key, event) + break + case "weapon": + BoLRoll.weaponCheck(this.actor, event) + break + case "spell": + BoLRoll.spellCheck(this.actor, event) + break + case "alchemy": + BoLRoll.alchemyCheck(this.actor, event) + break + case "protection": + this.actor.rollProtection(itemId) + break + case "damage": + this.actor.rollWeaponDamage(itemId) + break + case "aptitudexp": + this.actor.incAptitudeXP(dataset.key) + break + case "attributexp": + this.actor.incAttributeXP(dataset.key) + break + case "careerxp": + this.actor.incCareerXP(itemId) + break + case "horoscope-minor": + BoLRoll.horoscopeCheck(this.actor, event, "minor") + break + case "horoscope-major": + BoLRoll.horoscopeCheck(this.actor, event, "major") + break + case "horoscope-major-group": + BoLRoll.horoscopeCheck(this.actor, event, "majorgroup") + break + case "bougette": + this.actor.rollBougette() + break + default: + break + } + } + + // #region Drag-and-Drop + + #createDragDropHandlers() { + return (this.options.dragDrop || []).map((dragDrop) => + new foundry.applications.ux.DragDrop.implementation({ + ...dragDrop, + permissions: { + dragstart: this._canDragStart.bind(this), + drop: this._canDragDrop.bind(this), + }, + callbacks: { + dragstart: this._onDragStart.bind(this), + dragover: this._onDragOver.bind(this), + drop: this._onDrop.bind(this), + }, + }) + ) + } + + _canDragStart(selector) { + return this.isEditable + } + + _canDragDrop(selector) { + return this.isEditable + } + + // #endregion +} diff --git a/module/applications/sheets/base-item-sheet.mjs b/module/applications/sheets/base-item-sheet.mjs index 9f9ae2f..af69427 100644 --- a/module/applications/sheets/base-item-sheet.mjs +++ b/module/applications/sheets/base-item-sheet.mjs @@ -25,6 +25,13 @@ export default class BoLBaseItemSheet extends HandlebarsApplicationMixin(foundry window: { resizable: true, }, + tabs: [ + { + navSelector: 'nav[data-group="primary"]', + contentSelector: "section.sheet-body", + initial: "description", + }, + ], actions: { editImage: BoLBaseItemSheet.#onEditImage, postItem: BoLBaseItemSheet.#onPostItem, @@ -146,29 +153,34 @@ export default class BoLBaseItemSheet extends HandlebarsApplicationMixin(foundry } /** - * Activate tab navigation + * Activate tab navigation via CSS only (no re-render) to preserve unsaved form state. * @private */ _activateTabs() { - const nav = this.element.querySelector('nav.tabs[data-group="primary"]') + const nav = this.element.querySelector('nav[data-group="primary"]') if (!nav) return + const section = this.element.querySelector('section.sheet-body') + if (!section) return const activeTab = this.tabGroups.primary || "description" - - // Activate tab links + + // Set initial active state nav.querySelectorAll('[data-tab]').forEach(link => { - const tab = link.dataset.tab - link.classList.toggle('active', tab === activeTab) - link.addEventListener('click', (event) => { - event.preventDefault() - this.tabGroups.primary = tab - this.render() - }) + link.classList.toggle('active', link.dataset.tab === activeTab) + }) + section.querySelectorAll('[data-tab]').forEach(content => { + content.classList.toggle('active', content.dataset.tab === activeTab) }) - // Show/hide tab content - this.element.querySelectorAll('.tab[data-tab]').forEach(content => { - content.classList.toggle('active', content.dataset.tab === activeTab) + // Tab click — CSS-only switch, no render() + nav.querySelectorAll('[data-tab]').forEach(link => { + link.addEventListener('click', (event) => { + event.preventDefault() + const tab = link.dataset.tab + this.tabGroups.primary = tab + nav.querySelectorAll('[data-tab]').forEach(l => l.classList.toggle('active', l.dataset.tab === tab)) + section.querySelectorAll('[data-tab]').forEach(c => c.classList.toggle('active', c.dataset.tab === tab)) + }) }) } diff --git a/module/applications/sheets/feature-sheet.mjs b/module/applications/sheets/feature-sheet.mjs index 34b8d97..9ae191e 100644 --- a/module/applications/sheets/feature-sheet.mjs +++ b/module/applications/sheets/feature-sheet.mjs @@ -8,8 +8,7 @@ export default class BoLFeatureSheet extends BoLBaseItemSheet { /** @override */ static DEFAULT_OPTIONS = { - ...super.DEFAULT_OPTIONS, - classes: [...super.DEFAULT_OPTIONS.classes, "item-type-feature"], + classes: ["bol", "sheet", "item", "item-type-feature"], } /** @override */ diff --git a/module/applications/sheets/horde-sheet.mjs b/module/applications/sheets/horde-sheet.mjs new file mode 100644 index 0000000..067d3f7 --- /dev/null +++ b/module/applications/sheets/horde-sheet.mjs @@ -0,0 +1,65 @@ +import BoLBaseActorSheet from "./base-actor-sheet.mjs" + +/** + * Actor Sheet for BoL hordes using AppV2 + */ +export default class BoLHordeSheet extends BoLBaseActorSheet { + /** @override */ + static DEFAULT_OPTIONS = { + ...super.DEFAULT_OPTIONS, + classes: [...super.DEFAULT_OPTIONS.classes], + actions: { + ...super.DEFAULT_OPTIONS.actions, + }, + } + + /** @override */ + static PARTS = { + sheet: { + template: "systems/bol/templates/actor/horde-sheet.hbs", + }, + } + + /** @override */ + tabGroups = { primary: "stats" } + + /** @override */ + async _prepareContext() { + const context = await super._prepareContext() + const actor = this.document + + context.options = this.options + context.editScore = this.options.editScore + context.description = await foundry.applications.ux.TextEditor.implementation.enrichHTML( + actor.system.description || "", { async: true } + ) + + console.log("HORDE (AppV2)", context) + return context + } + + /** @override */ + _activateListeners() { + super._activateListeners() + if (!this.isEditable) return + + // Item create via header dataset + this.element.querySelectorAll(".item-create").forEach((el) => { + el.addEventListener("click", (ev) => { + ev.preventDefault() + const header = ev.currentTarget + const type = header.dataset.type + const data = foundry.utils.duplicate(header.dataset) + delete data.type + this.actor.createEmbeddedDocuments("Item", [{ name: `New ${type}`, type, data }]) + }) + }) + + // Create generic item + this.element.querySelectorAll(".create_item").forEach((el) => { + el.addEventListener("click", () => { + this.actor.createEmbeddedDocuments("Item", [{ name: "Nouvel Equipement", type: "item" }], { renderSheet: true }) + }) + }) + } +} diff --git a/module/applications/sheets/item-sheet.mjs b/module/applications/sheets/item-sheet.mjs index d6d4259..2475486 100644 --- a/module/applications/sheets/item-sheet.mjs +++ b/module/applications/sheets/item-sheet.mjs @@ -8,8 +8,7 @@ export default class BoLItemSheet extends BoLBaseItemSheet { /** @override */ static DEFAULT_OPTIONS = { - ...super.DEFAULT_OPTIONS, - classes: [...super.DEFAULT_OPTIONS.classes, "item-type-item"], + classes: ["bol", "sheet", "item", "item-type-item"], } /** @override */ diff --git a/module/applications/sheets/vehicle-sheet.mjs b/module/applications/sheets/vehicle-sheet.mjs new file mode 100644 index 0000000..7ae81fe --- /dev/null +++ b/module/applications/sheets/vehicle-sheet.mjs @@ -0,0 +1,66 @@ +import BoLBaseActorSheet from "./base-actor-sheet.mjs" + +/** + * Actor Sheet for BoL vehicles using AppV2 + */ +export default class BoLVehicleSheet extends BoLBaseActorSheet { + /** @override */ + static DEFAULT_OPTIONS = { + ...super.DEFAULT_OPTIONS, + classes: [...super.DEFAULT_OPTIONS.classes], + actions: { + ...super.DEFAULT_OPTIONS.actions, + }, + } + + /** @override */ + static PARTS = { + sheet: { + template: "systems/bol/templates/actor/vehicle-sheet.hbs", + }, + } + + /** @override */ + tabGroups = { primary: "stats" } + + /** @override */ + async _prepareContext() { + const context = await super._prepareContext() + const actor = this.document + + context.weapons = actor.vehicleWeapons + context.options = this.options + context.editScore = this.options.editScore + context.description = await foundry.applications.ux.TextEditor.implementation.enrichHTML( + actor.system.description || "", { async: true } + ) + + console.log("VEHICLE (AppV2)", context) + return context + } + + /** @override */ + _activateListeners() { + super._activateListeners() + if (!this.isEditable) return + + // Item create via header dataset + this.element.querySelectorAll(".item-create").forEach((el) => { + el.addEventListener("click", (ev) => { + ev.preventDefault() + const header = ev.currentTarget + const type = header.dataset.type + const data = foundry.utils.duplicate(header.dataset) + delete data.type + this.actor.createEmbeddedDocuments("Item", [{ name: `New ${type}`, type, data }]) + }) + }) + + // Create generic item + this.element.querySelectorAll(".create_item").forEach((el) => { + el.addEventListener("click", () => { + this.actor.createEmbeddedDocuments("Item", [{ name: "Nouvel Equipement", type: "item" }], { renderSheet: true }) + }) + }) + } +} diff --git a/module/bol.js b/module/bol.js index 79adc69..8a1676f 100644 --- a/module/bol.js +++ b/module/bol.js @@ -1,9 +1,7 @@ /* -------------------------------------------- */ // Import Modules import { BoLActor } from "./actor/actor.js" -import { BoLActorSheet } from "./actor/actor-sheet.js" -import { BoLVehicleSheet } from "./actor/vehicle-sheet.js" -import { BoLHordeSheet } from "./actor/horde-sheet.js" +// AppV1 actor sheets kept for reference only (AppV2 used via sheets.* below) import { BoLItem } from "./item/item.js" // Note: Old BoLItemSheet (AppV1) is now replaced by AppV2 sheets import { System, BOL } from "./system/config.js" @@ -72,9 +70,9 @@ Hooks.once('init', async function () { // Register sheet application classes foundry.documents.collections.Actors.unregisterSheet("core", foundry.appv1.sheets.ActorSheet); - foundry.documents.collections.Actors.registerSheet("bol", BoLActorSheet, { types: ["character", "encounter"], makeDefault: true }) - foundry.documents.collections.Actors.registerSheet("bol", BoLVehicleSheet, { types: ["vehicle"], makeDefault: true }) - foundry.documents.collections.Actors.registerSheet("bol", BoLHordeSheet, { types: ["horde"], makeDefault: true }) + foundry.documents.collections.Actors.registerSheet("bol", sheets.BoLActorSheet, { types: ["character", "encounter"], makeDefault: true }) + foundry.documents.collections.Actors.registerSheet("bol", sheets.BoLVehicleSheet, { types: ["vehicle"], makeDefault: true }) + foundry.documents.collections.Actors.registerSheet("bol", sheets.BoLHordeSheet, { types: ["horde"], makeDefault: true }) // Register AppV2 Item Sheets foundry.documents.collections.Items.unregisterSheet("core", foundry.appv1.sheets.ItemSheet); diff --git a/module/models/feature.mjs b/module/models/feature.mjs index 199ef30..9e7cb6d 100644 --- a/module/models/feature.mjs +++ b/module/models/feature.mjs @@ -5,14 +5,47 @@ export default class BoLFeatureDataModel extends foundry.abstract.TypeDataModel static defineSchema() { const fields = foundry.data.fields; const requiredInteger = { required: true, nullable: false, integer: true }; - + const nullableNumber = { required: false, nullable: true, initial: null }; + return { // Base fields category: new fields.StringField({ initial: "" }), subtype: new fields.StringField({ initial: "default" }), description: new fields.HTMLField({ initial: "" }), - properties: new fields.SchemaField({}), - + properties: new fields.SchemaField({ + // Career + sorcerer: new fields.BooleanField({ initial: false }), + alchemist: new fields.BooleanField({ initial: false }), + priest: new fields.BooleanField({ initial: false }), + astrologer: new fields.BooleanField({ initial: false }), + + // Boon + isbonusdice: new fields.BooleanField({ initial: false }), + + // Flaw + ismalusdice: new fields.BooleanField({ initial: false }), + + // Fight option + fightoptiontype: new fields.StringField({ initial: "" }), + activated: new fields.BooleanField({ initial: false }), + isspecial: new fields.BooleanField({ initial: false }), + + // Effect (boleffect) + identifier: new fields.StringField({ initial: "" }), + modifier: new fields.StringField({ initial: "" }), + + // Horoscope + horoscopeanswer: new fields.StringField({ initial: "" }), + rank: new fields.NumberField({ ...nullableNumber }), + + // XP log + xptype: new fields.StringField({ initial: "" }), + xpdate: new fields.StringField({ initial: "" }), + xpname: new fields.StringField({ initial: "" }), + xpcost: new fields.NumberField({ ...nullableNumber }), + xpvalue: new fields.NumberField({ ...nullableNumber }), + }), + // Feature-specific fields rank: new fields.NumberField({ ...requiredInteger, initial: 0 }) }; diff --git a/module/models/item.mjs b/module/models/item.mjs index fe3a9ef..dc90081 100644 --- a/module/models/item.mjs +++ b/module/models/item.mjs @@ -5,6 +5,7 @@ export default class BoLItemDataModel extends foundry.abstract.TypeDataModel { static defineSchema() { const fields = foundry.data.fields; const requiredInteger = { required: true, nullable: false, integer: true }; + const nullableNumber = { required: false, nullable: true, initial: null }; return { // Base fields @@ -12,6 +13,7 @@ export default class BoLItemDataModel extends foundry.abstract.TypeDataModel { subtype: new fields.StringField({ initial: "default" }), description: new fields.HTMLField({ initial: "" }), properties: new fields.SchemaField({ + // Base flags ranged: new fields.BooleanField({ initial: false }), melee: new fields.BooleanField({ initial: false }), spell: new fields.BooleanField({ initial: false }), @@ -27,7 +29,76 @@ export default class BoLItemDataModel extends foundry.abstract.TypeDataModel { reloadable: new fields.BooleanField({ initial: false }), bow: new fields.BooleanField({ initial: false }), crossbow: new fields.BooleanField({ initial: false }), - throwing: new fields.BooleanField({ initial: false }) + throwing: new fields.BooleanField({ initial: false }), + + // Equipment + stackable: new fields.BooleanField({ initial: false }), + stacksize: new fields.NumberField({ ...nullableNumber }), + slot: new fields.StringField({ initial: "-" }), + + // Weapon flags + natural: new fields.BooleanField({ initial: false }), + concealable: new fields.BooleanField({ initial: false }), + ignoreshield: new fields.BooleanField({ initial: false }), + attackBonusDice: new fields.BooleanField({ initial: false }), + attackMalusDice: new fields.BooleanField({ initial: false }), + onlymodifier: new fields.BooleanField({ initial: false }), + bashing: new fields.BooleanField({ initial: false }), + throwable: new fields.BooleanField({ initial: false }), + damageReroll1: new fields.BooleanField({ initial: false }), + + // Weapon stats + attackAttribute: new fields.StringField({ initial: "vigor" }), + attackAptitude: new fields.StringField({ initial: "melee" }), + attackModifiers: new fields.NumberField({ ...nullableNumber }), + weaponSize: new fields.StringField({ initial: "unarmed" }), + damage: new fields.StringField({ initial: "0" }), + damageAttribute: new fields.StringField({ initial: "" }), + damageModifiers: new fields.NumberField({ ...nullableNumber }), + damageMultiplier: new fields.StringField({ initial: "1" }), + range: new fields.NumberField({ ...nullableNumber }), + reload: new fields.NumberField({ ...nullableNumber }), + + // Protection + armorQuality: new fields.StringField({ initial: "" }), + soak: new fields.SchemaField({ + formula: new fields.StringField({ initial: "" }), + value: new fields.NumberField({ initial: 0, nullable: true }), + modifier: new fields.NumberField({ initial: 0, nullable: true }), + }), + blocking: new fields.SchemaField({ + malus: new fields.NumberField({ initial: 0, nullable: true }), + blocking1: new fields.BooleanField({ initial: false }), + blockingAll: new fields.BooleanField({ initial: false }), + }), + modifiers: new fields.SchemaField({ + init: new fields.NumberField({ initial: 0, nullable: true }), + agility: new fields.NumberField({ initial: 0, nullable: true }), + powercost: new fields.NumberField({ initial: 0, nullable: true }), + social: new fields.BooleanField({ initial: false }), + }), + + // Spell + circle: new fields.NumberField({ initial: 0, nullable: true }), + difficulty: new fields.StringField({ initial: "" }), + ppcost: new fields.NumberField({ initial: 0, nullable: true }), + duration: new fields.StringField({ initial: "" }), + nbmandatoryconditions: new fields.NumberField({ initial: 0, nullable: true }), + mandatoryconditions: new fields.ArrayField(new fields.StringField()), + optionnalconditions: new fields.ArrayField(new fields.StringField()), + + // Alchemy + alchemytype: new fields.StringField({ initial: "" }), + pccost: new fields.NumberField({ initial: 0, nullable: true }), + pccurrent: new fields.NumberField({ initial: 0, nullable: true }), + + // Vehicle weapon + isfiredamage: new fields.BooleanField({ initial: false }), + ishulldamage: new fields.BooleanField({ initial: false }), + iscrewdamage: new fields.BooleanField({ initial: false }), + isboarding: new fields.BooleanField({ initial: false }), + isspur: new fields.BooleanField({ initial: false }), + isbreakrow: new fields.BooleanField({ initial: false }), }), // Equipment fields diff --git a/module/system/bol-utility.js b/module/system/bol-utility.js index 3d5604a..0499c2f 100644 --- a/module/system/bol-utility.js +++ b/module/system/bol-utility.js @@ -237,6 +237,11 @@ export class BoLUtility { if (chatData.img.includes("/blank.png")) { chatData.img = null; } + // For old-format weapon items lacking stat fields, apply defaults so the chat card can display them + if (chatData.system?.properties?.weapon && !chatData.system.properties.damage) { + const defaults = game.bol.config.defaultNaturalWeapon?.properties ?? {}; + chatData.system.properties = Object.assign(foundry.utils.duplicate(defaults), chatData.system.properties); + } // JSON object for easy creation chatData.jsondata = JSON.stringify( { diff --git a/packs/aides-de-jeu/000970.log b/packs/aides-de-jeu/001073.log similarity index 100% rename from packs/aides-de-jeu/000970.log rename to packs/aides-de-jeu/001073.log diff --git a/packs/aides-de-jeu/CURRENT b/packs/aides-de-jeu/CURRENT index 1526d0a..422b12b 100644 --- a/packs/aides-de-jeu/CURRENT +++ b/packs/aides-de-jeu/CURRENT @@ -1 +1 @@ -MANIFEST-000969 +MANIFEST-001072 diff --git a/packs/aides-de-jeu/LOG b/packs/aides-de-jeu/LOG index dd3d03b..cf734ec 100644 --- a/packs/aides-de-jeu/LOG +++ b/packs/aides-de-jeu/LOG @@ -1,3 +1,3 @@ -2026/01/13-08:07:30.199598 7fad373ff6c0 Recovering log #967 -2026/01/13-08:07:30.210270 7fad373ff6c0 Delete type=3 #965 -2026/01/13-08:07:30.210357 7fad373ff6c0 Delete type=0 #967 +2026/02/28-17:23:52.883622 7f56f93fe6c0 Recovering log #1070 +2026/02/28-17:23:52.893895 7f56f93fe6c0 Delete type=3 #1068 +2026/02/28-17:23:52.893967 7f56f93fe6c0 Delete type=0 #1070 diff --git a/packs/aides-de-jeu/LOG.old b/packs/aides-de-jeu/LOG.old index 9e3c512..d01ca82 100644 --- a/packs/aides-de-jeu/LOG.old +++ b/packs/aides-de-jeu/LOG.old @@ -1,8 +1,8 @@ -2026/01/13-00:31:14.360616 7fad35bfc6c0 Recovering log #963 -2026/01/13-00:31:14.370734 7fad35bfc6c0 Delete type=3 #961 -2026/01/13-00:31:14.370788 7fad35bfc6c0 Delete type=0 #963 -2026/01/13-00:33:18.090132 7fad353fb6c0 Level-0 table #968: started -2026/01/13-00:33:18.090168 7fad353fb6c0 Level-0 table #968: 0 bytes OK -2026/01/13-00:33:18.096686 7fad353fb6c0 Delete type=0 #966 -2026/01/13-00:33:18.110856 7fad353fb6c0 Manual compaction at level-0 from '!journal!3xJg1rCxnWvEmoxS' @ 72057594037927935 : 1 .. '!journal.pages!veAAxCtCKcFIsnln.0kUgZspxXO7VS8bd' @ 0 : 0; will stop at (end) -2026/01/13-00:33:18.110909 7fad353fb6c0 Manual compaction at level-1 from '!journal!3xJg1rCxnWvEmoxS' @ 72057594037927935 : 1 .. '!journal.pages!veAAxCtCKcFIsnln.0kUgZspxXO7VS8bd' @ 0 : 0; will stop at (end) +2026/02/28-16:33:30.670789 7f56f9bff6c0 Recovering log #1066 +2026/02/28-16:33:30.681105 7f56f9bff6c0 Delete type=3 #1064 +2026/02/28-16:33:30.681173 7f56f9bff6c0 Delete type=0 #1066 +2026/02/28-17:23:47.157740 7f54e37ef6c0 Level-0 table #1071: started +2026/02/28-17:23:47.157777 7f54e37ef6c0 Level-0 table #1071: 0 bytes OK +2026/02/28-17:23:47.163664 7f54e37ef6c0 Delete type=0 #1069 +2026/02/28-17:23:47.170059 7f54e37ef6c0 Manual compaction at level-0 from '!journal!3xJg1rCxnWvEmoxS' @ 72057594037927935 : 1 .. '!journal.pages!veAAxCtCKcFIsnln.0kUgZspxXO7VS8bd' @ 0 : 0; will stop at (end) +2026/02/28-17:23:47.170090 7f54e37ef6c0 Manual compaction at level-1 from '!journal!3xJg1rCxnWvEmoxS' @ 72057594037927935 : 1 .. '!journal.pages!veAAxCtCKcFIsnln.0kUgZspxXO7VS8bd' @ 0 : 0; will stop at (end) diff --git a/packs/aides-de-jeu/MANIFEST-000969 b/packs/aides-de-jeu/MANIFEST-001072 similarity index 91% rename from packs/aides-de-jeu/MANIFEST-000969 rename to packs/aides-de-jeu/MANIFEST-001072 index e59a0c8..04ac199 100644 Binary files a/packs/aides-de-jeu/MANIFEST-000969 and b/packs/aides-de-jeu/MANIFEST-001072 differ diff --git a/packs/armors/000875.log b/packs/armors/000978.log similarity index 100% rename from packs/armors/000875.log rename to packs/armors/000978.log diff --git a/packs/armors/CURRENT b/packs/armors/CURRENT index 7299140..760f0f8 100644 --- a/packs/armors/CURRENT +++ b/packs/armors/CURRENT @@ -1 +1 @@ -MANIFEST-000874 +MANIFEST-000977 diff --git a/packs/armors/LOG b/packs/armors/LOG index d7554ea..6e3cadc 100644 --- a/packs/armors/LOG +++ b/packs/armors/LOG @@ -1,3 +1,3 @@ -2026/01/13-08:07:30.170497 7fad363fd6c0 Recovering log #872 -2026/01/13-08:07:30.181911 7fad363fd6c0 Delete type=3 #870 -2026/01/13-08:07:30.182023 7fad363fd6c0 Delete type=0 #872 +2026/02/28-17:23:52.858522 7f56e3fff6c0 Recovering log #975 +2026/02/28-17:23:52.869495 7f56e3fff6c0 Delete type=3 #973 +2026/02/28-17:23:52.869552 7f56e3fff6c0 Delete type=0 #975 diff --git a/packs/armors/LOG.old b/packs/armors/LOG.old index 9835a04..9b13e5a 100644 --- a/packs/armors/LOG.old +++ b/packs/armors/LOG.old @@ -1,8 +1,8 @@ -2026/01/13-00:31:14.336061 7fad36bfe6c0 Recovering log #868 -2026/01/13-00:31:14.346068 7fad36bfe6c0 Delete type=3 #866 -2026/01/13-00:31:14.346144 7fad36bfe6c0 Delete type=0 #868 -2026/01/13-00:33:18.103240 7fad353fb6c0 Level-0 table #873: started -2026/01/13-00:33:18.103270 7fad353fb6c0 Level-0 table #873: 0 bytes OK -2026/01/13-00:33:18.110698 7fad353fb6c0 Delete type=0 #871 -2026/01/13-00:33:18.110885 7fad353fb6c0 Manual compaction at level-0 from '!items!G3dZTHIabA3LA1hY' @ 72057594037927935 : 1 .. '!items!xhEcsi3WHjbt2ro9' @ 0 : 0; will stop at (end) -2026/01/13-00:33:18.110931 7fad353fb6c0 Manual compaction at level-1 from '!items!G3dZTHIabA3LA1hY' @ 72057594037927935 : 1 .. '!items!xhEcsi3WHjbt2ro9' @ 0 : 0; will stop at (end) +2026/02/28-16:33:30.644599 7f56e3fff6c0 Recovering log #971 +2026/02/28-16:33:30.654938 7f56e3fff6c0 Delete type=3 #969 +2026/02/28-16:33:30.655008 7f56e3fff6c0 Delete type=0 #971 +2026/02/28-17:23:47.144484 7f54e37ef6c0 Level-0 table #976: started +2026/02/28-17:23:47.144510 7f54e37ef6c0 Level-0 table #976: 0 bytes OK +2026/02/28-17:23:47.151643 7f54e37ef6c0 Delete type=0 #974 +2026/02/28-17:23:47.170034 7f54e37ef6c0 Manual compaction at level-0 from '!items!G3dZTHIabA3LA1hY' @ 72057594037927935 : 1 .. '!items!xhEcsi3WHjbt2ro9' @ 0 : 0; will stop at (end) +2026/02/28-17:23:47.170076 7f54e37ef6c0 Manual compaction at level-1 from '!items!G3dZTHIabA3LA1hY' @ 72057594037927935 : 1 .. '!items!xhEcsi3WHjbt2ro9' @ 0 : 0; will stop at (end) diff --git a/packs/armors/MANIFEST-000874 b/packs/armors/MANIFEST-000977 similarity index 82% rename from packs/armors/MANIFEST-000874 rename to packs/armors/MANIFEST-000977 index 097c308..d42619a 100644 Binary files a/packs/armors/MANIFEST-000874 and b/packs/armors/MANIFEST-000977 differ diff --git a/packs/boons/000969.log b/packs/boons/001072.log similarity index 100% rename from packs/boons/000969.log rename to packs/boons/001072.log diff --git a/packs/boons/CURRENT b/packs/boons/CURRENT index 0a8f1fe..6027312 100644 --- a/packs/boons/CURRENT +++ b/packs/boons/CURRENT @@ -1 +1 @@ -MANIFEST-000968 +MANIFEST-001071 diff --git a/packs/boons/LOG b/packs/boons/LOG index 47ce8dc..f6cb9ba 100644 --- a/packs/boons/LOG +++ b/packs/boons/LOG @@ -1,3 +1,3 @@ -2026/01/13-08:07:30.052912 7fad35bfc6c0 Recovering log #966 -2026/01/13-08:07:30.063608 7fad35bfc6c0 Delete type=3 #964 -2026/01/13-08:07:30.063709 7fad35bfc6c0 Delete type=0 #966 +2026/02/28-17:23:52.757933 7f56f9bff6c0 Recovering log #1069 +2026/02/28-17:23:52.767692 7f56f9bff6c0 Delete type=3 #1067 +2026/02/28-17:23:52.767761 7f56f9bff6c0 Delete type=0 #1069 diff --git a/packs/boons/LOG.old b/packs/boons/LOG.old index b57abf8..59c7177 100644 --- a/packs/boons/LOG.old +++ b/packs/boons/LOG.old @@ -1,8 +1,8 @@ -2026/01/13-00:31:14.236837 7fad373ff6c0 Recovering log #962 -2026/01/13-00:31:14.246601 7fad373ff6c0 Delete type=3 #960 -2026/01/13-00:31:14.246657 7fad373ff6c0 Delete type=0 #962 -2026/01/13-00:33:18.044085 7fad353fb6c0 Level-0 table #967: started -2026/01/13-00:33:18.044110 7fad353fb6c0 Level-0 table #967: 0 bytes OK -2026/01/13-00:33:18.050908 7fad353fb6c0 Delete type=0 #965 -2026/01/13-00:33:18.057401 7fad353fb6c0 Manual compaction at level-0 from '!items!039ZF3E3MtAGwbiX' @ 72057594037927935 : 1 .. '!items!zgspy1QKaxdEetEw' @ 0 : 0; will stop at (end) -2026/01/13-00:33:18.057428 7fad353fb6c0 Manual compaction at level-1 from '!items!039ZF3E3MtAGwbiX' @ 72057594037927935 : 1 .. '!items!zgspy1QKaxdEetEw' @ 0 : 0; will stop at (end) +2026/02/28-16:33:30.543841 7f56e3fff6c0 Recovering log #1065 +2026/02/28-16:33:30.553998 7f56e3fff6c0 Delete type=3 #1063 +2026/02/28-16:33:30.554062 7f56e3fff6c0 Delete type=0 #1065 +2026/02/28-17:23:47.101088 7f54e37ef6c0 Level-0 table #1070: started +2026/02/28-17:23:47.101118 7f54e37ef6c0 Level-0 table #1070: 0 bytes OK +2026/02/28-17:23:47.107544 7f54e37ef6c0 Delete type=0 #1068 +2026/02/28-17:23:47.119520 7f54e37ef6c0 Manual compaction at level-0 from '!items!039ZF3E3MtAGwbiX' @ 72057594037927935 : 1 .. '!items!zgspy1QKaxdEetEw' @ 0 : 0; will stop at (end) +2026/02/28-17:23:47.119595 7f54e37ef6c0 Manual compaction at level-1 from '!items!039ZF3E3MtAGwbiX' @ 72057594037927935 : 1 .. '!items!zgspy1QKaxdEetEw' @ 0 : 0; will stop at (end) diff --git a/packs/boons/MANIFEST-000968 b/packs/boons/MANIFEST-001071 similarity index 81% rename from packs/boons/MANIFEST-000968 rename to packs/boons/MANIFEST-001071 index 6e9808c..d4c5972 100644 Binary files a/packs/boons/MANIFEST-000968 and b/packs/boons/MANIFEST-001071 differ diff --git a/packs/boonsflawscreatures/000968.log b/packs/boonsflawscreatures/001071.log similarity index 100% rename from packs/boonsflawscreatures/000968.log rename to packs/boonsflawscreatures/001071.log diff --git a/packs/boonsflawscreatures/CURRENT b/packs/boonsflawscreatures/CURRENT index 0165034..210222d 100644 --- a/packs/boonsflawscreatures/CURRENT +++ b/packs/boonsflawscreatures/CURRENT @@ -1 +1 @@ -MANIFEST-000967 +MANIFEST-001070 diff --git a/packs/boonsflawscreatures/LOG b/packs/boonsflawscreatures/LOG index 82b256c..6b43d9c 100644 --- a/packs/boonsflawscreatures/LOG +++ b/packs/boonsflawscreatures/LOG @@ -1,3 +1,3 @@ -2026/01/13-08:07:30.067310 7fad373ff6c0 Recovering log #965 -2026/01/13-08:07:30.078796 7fad373ff6c0 Delete type=3 #963 -2026/01/13-08:07:30.078908 7fad373ff6c0 Delete type=0 #965 +2026/02/28-17:23:52.769847 7f56f93fe6c0 Recovering log #1068 +2026/02/28-17:23:52.780583 7f56f93fe6c0 Delete type=3 #1066 +2026/02/28-17:23:52.780639 7f56f93fe6c0 Delete type=0 #1068 diff --git a/packs/boonsflawscreatures/LOG.old b/packs/boonsflawscreatures/LOG.old index 3331621..cf08599 100644 --- a/packs/boonsflawscreatures/LOG.old +++ b/packs/boonsflawscreatures/LOG.old @@ -1,8 +1,8 @@ -2026/01/13-00:31:14.249012 7fad36bfe6c0 Recovering log #961 -2026/01/13-00:31:14.258675 7fad36bfe6c0 Delete type=3 #959 -2026/01/13-00:31:14.258729 7fad36bfe6c0 Delete type=0 #961 -2026/01/13-00:33:18.037279 7fad353fb6c0 Level-0 table #966: started -2026/01/13-00:33:18.037321 7fad353fb6c0 Level-0 table #966: 0 bytes OK -2026/01/13-00:33:18.043985 7fad353fb6c0 Delete type=0 #964 -2026/01/13-00:33:18.057393 7fad353fb6c0 Manual compaction at level-0 from '!items!CoqlfsDV1gL5swbK' @ 72057594037927935 : 1 .. '!items!yofwG0YrsL902G77' @ 0 : 0; will stop at (end) -2026/01/13-00:33:18.057422 7fad353fb6c0 Manual compaction at level-1 from '!items!CoqlfsDV1gL5swbK' @ 72057594037927935 : 1 .. '!items!yofwG0YrsL902G77' @ 0 : 0; will stop at (end) +2026/02/28-16:33:30.556447 7f56f9bff6c0 Recovering log #1064 +2026/02/28-16:33:30.566208 7f56f9bff6c0 Delete type=3 #1062 +2026/02/28-16:33:30.566291 7f56f9bff6c0 Delete type=0 #1064 +2026/02/28-17:23:47.107642 7f54e37ef6c0 Level-0 table #1069: started +2026/02/28-17:23:47.107677 7f54e37ef6c0 Level-0 table #1069: 0 bytes OK +2026/02/28-17:23:47.113550 7f54e37ef6c0 Delete type=0 #1067 +2026/02/28-17:23:47.119530 7f54e37ef6c0 Manual compaction at level-0 from '!items!CoqlfsDV1gL5swbK' @ 72057594037927935 : 1 .. '!items!yofwG0YrsL902G77' @ 0 : 0; will stop at (end) +2026/02/28-17:23:47.119574 7f54e37ef6c0 Manual compaction at level-1 from '!items!CoqlfsDV1gL5swbK' @ 72057594037927935 : 1 .. '!items!yofwG0YrsL902G77' @ 0 : 0; will stop at (end) diff --git a/packs/boonsflawscreatures/MANIFEST-000967 b/packs/boonsflawscreatures/MANIFEST-001070 similarity index 82% rename from packs/boonsflawscreatures/MANIFEST-000967 rename to packs/boonsflawscreatures/MANIFEST-001070 index 6d4fa54..5ac7ea1 100644 Binary files a/packs/boonsflawscreatures/MANIFEST-000967 and b/packs/boonsflawscreatures/MANIFEST-001070 differ diff --git a/packs/careers/000968.log b/packs/careers/001071.log similarity index 100% rename from packs/careers/000968.log rename to packs/careers/001071.log diff --git a/packs/careers/CURRENT b/packs/careers/CURRENT index 0165034..210222d 100644 --- a/packs/careers/CURRENT +++ b/packs/careers/CURRENT @@ -1 +1 @@ -MANIFEST-000967 +MANIFEST-001070 diff --git a/packs/careers/LOG b/packs/careers/LOG index 13eb4df..dae2016 100644 --- a/packs/careers/LOG +++ b/packs/careers/LOG @@ -1,3 +1,3 @@ -2026/01/13-08:07:30.097111 7fad35bfc6c0 Recovering log #965 -2026/01/13-08:07:30.108030 7fad35bfc6c0 Delete type=3 #963 -2026/01/13-08:07:30.108147 7fad35bfc6c0 Delete type=0 #965 +2026/02/28-17:23:52.796426 7f56f9bff6c0 Recovering log #1068 +2026/02/28-17:23:52.805920 7f56f9bff6c0 Delete type=3 #1066 +2026/02/28-17:23:52.805973 7f56f9bff6c0 Delete type=0 #1068 diff --git a/packs/careers/LOG.old b/packs/careers/LOG.old index 47380b6..f37a57d 100644 --- a/packs/careers/LOG.old +++ b/packs/careers/LOG.old @@ -1,8 +1,8 @@ -2026/01/13-00:31:14.273174 7fad373ff6c0 Recovering log #961 -2026/01/13-00:31:14.283828 7fad373ff6c0 Delete type=3 #959 -2026/01/13-00:31:14.283908 7fad373ff6c0 Delete type=0 #961 -2026/01/13-00:33:18.051012 7fad353fb6c0 Level-0 table #966: started -2026/01/13-00:33:18.051036 7fad353fb6c0 Level-0 table #966: 0 bytes OK -2026/01/13-00:33:18.057270 7fad353fb6c0 Delete type=0 #964 -2026/01/13-00:33:18.057409 7fad353fb6c0 Manual compaction at level-0 from '!items!4S4xAfMXGnuU0O1a' @ 72057594037927935 : 1 .. '!items!zxY3sW0iCJBvwjOS' @ 0 : 0; will stop at (end) -2026/01/13-00:33:18.057437 7fad353fb6c0 Manual compaction at level-1 from '!items!4S4xAfMXGnuU0O1a' @ 72057594037927935 : 1 .. '!items!zxY3sW0iCJBvwjOS' @ 0 : 0; will stop at (end) +2026/02/28-16:33:30.581375 7f56f8bfd6c0 Recovering log #1064 +2026/02/28-16:33:30.592412 7f56f8bfd6c0 Delete type=3 #1062 +2026/02/28-16:33:30.592492 7f56f8bfd6c0 Delete type=0 #1064 +2026/02/28-17:23:47.113620 7f54e37ef6c0 Level-0 table #1069: started +2026/02/28-17:23:47.113644 7f54e37ef6c0 Level-0 table #1069: 0 bytes OK +2026/02/28-17:23:47.119422 7f54e37ef6c0 Delete type=0 #1067 +2026/02/28-17:23:47.119541 7f54e37ef6c0 Manual compaction at level-0 from '!items!4S4xAfMXGnuU0O1a' @ 72057594037927935 : 1 .. '!items!zxY3sW0iCJBvwjOS' @ 0 : 0; will stop at (end) +2026/02/28-17:23:47.119585 7f54e37ef6c0 Manual compaction at level-1 from '!items!4S4xAfMXGnuU0O1a' @ 72057594037927935 : 1 .. '!items!zxY3sW0iCJBvwjOS' @ 0 : 0; will stop at (end) diff --git a/packs/careers/MANIFEST-000967 b/packs/careers/MANIFEST-001070 similarity index 81% rename from packs/careers/MANIFEST-000967 rename to packs/careers/MANIFEST-001070 index 0f461ff..ab210f9 100644 Binary files a/packs/careers/MANIFEST-000967 and b/packs/careers/MANIFEST-001070 differ diff --git a/packs/effets-exemples/000966.log b/packs/effets-exemples/001069.log similarity index 100% rename from packs/effets-exemples/000966.log rename to packs/effets-exemples/001069.log diff --git a/packs/effets-exemples/CURRENT b/packs/effets-exemples/CURRENT index 8bac917..436e6b4 100644 --- a/packs/effets-exemples/CURRENT +++ b/packs/effets-exemples/CURRENT @@ -1 +1 @@ -MANIFEST-000965 +MANIFEST-001068 diff --git a/packs/effets-exemples/LOG b/packs/effets-exemples/LOG index fcc53ce..b614af9 100644 --- a/packs/effets-exemples/LOG +++ b/packs/effets-exemples/LOG @@ -1,3 +1,3 @@ -2026/01/13-08:07:30.299106 7fad35bfc6c0 Recovering log #963 -2026/01/13-08:07:30.310415 7fad35bfc6c0 Delete type=3 #961 -2026/01/13-08:07:30.310500 7fad35bfc6c0 Delete type=0 #963 +2026/02/28-17:23:52.970603 7f56f9bff6c0 Recovering log #1066 +2026/02/28-17:23:52.981835 7f56f9bff6c0 Delete type=3 #1064 +2026/02/28-17:23:52.981888 7f56f9bff6c0 Delete type=0 #1066 diff --git a/packs/effets-exemples/LOG.old b/packs/effets-exemples/LOG.old index ad6a2d6..baa34c5 100644 --- a/packs/effets-exemples/LOG.old +++ b/packs/effets-exemples/LOG.old @@ -1,8 +1,8 @@ -2026/01/13-00:31:14.446842 7fad363fd6c0 Recovering log #959 -2026/01/13-00:31:14.457714 7fad363fd6c0 Delete type=3 #957 -2026/01/13-00:31:14.457795 7fad363fd6c0 Delete type=0 #959 -2026/01/13-00:33:18.151324 7fad353fb6c0 Level-0 table #964: started -2026/01/13-00:33:18.151382 7fad353fb6c0 Level-0 table #964: 0 bytes OK -2026/01/13-00:33:18.157882 7fad353fb6c0 Delete type=0 #962 -2026/01/13-00:33:18.164702 7fad353fb6c0 Manual compaction at level-0 from '!items!6fTZ6hOKR4pWbWOe' @ 72057594037927935 : 1 .. '!items!zwSNMO9HpiqUCMt8' @ 0 : 0; will stop at (end) -2026/01/13-00:33:18.175125 7fad353fb6c0 Manual compaction at level-1 from '!items!6fTZ6hOKR4pWbWOe' @ 72057594037927935 : 1 .. '!items!zwSNMO9HpiqUCMt8' @ 0 : 0; will stop at (end) +2026/02/28-16:33:30.759164 7f56f9bff6c0 Recovering log #1062 +2026/02/28-16:33:30.769105 7f56f9bff6c0 Delete type=3 #1060 +2026/02/28-16:33:30.769164 7f56f9bff6c0 Delete type=0 #1062 +2026/02/28-17:23:47.203516 7f54e37ef6c0 Level-0 table #1067: started +2026/02/28-17:23:47.203569 7f54e37ef6c0 Level-0 table #1067: 0 bytes OK +2026/02/28-17:23:47.210686 7f54e37ef6c0 Delete type=0 #1065 +2026/02/28-17:23:47.224578 7f54e37ef6c0 Manual compaction at level-0 from '!items!6fTZ6hOKR4pWbWOe' @ 72057594037927935 : 1 .. '!items!zwSNMO9HpiqUCMt8' @ 0 : 0; will stop at (end) +2026/02/28-17:23:47.224615 7f54e37ef6c0 Manual compaction at level-1 from '!items!6fTZ6hOKR4pWbWOe' @ 72057594037927935 : 1 .. '!items!zwSNMO9HpiqUCMt8' @ 0 : 0; will stop at (end) diff --git a/packs/effets-exemples/MANIFEST-000965 b/packs/effets-exemples/MANIFEST-001068 similarity index 82% rename from packs/effets-exemples/MANIFEST-000965 rename to packs/effets-exemples/MANIFEST-001068 index efa040c..d28bc09 100644 Binary files a/packs/effets-exemples/MANIFEST-000965 and b/packs/effets-exemples/MANIFEST-001068 differ diff --git a/packs/equipment/000969.log b/packs/equipment/001072.log similarity index 100% rename from packs/equipment/000969.log rename to packs/equipment/001072.log diff --git a/packs/equipment/CURRENT b/packs/equipment/CURRENT index 0a8f1fe..6027312 100644 --- a/packs/equipment/CURRENT +++ b/packs/equipment/CURRENT @@ -1 +1 @@ -MANIFEST-000968 +MANIFEST-001071 diff --git a/packs/equipment/LOG b/packs/equipment/LOG index 08bd1d6..b03c632 100644 --- a/packs/equipment/LOG +++ b/packs/equipment/LOG @@ -1,3 +1,3 @@ -2026/01/13-08:07:30.141144 7fad36bfe6c0 Recovering log #966 -2026/01/13-08:07:30.151959 7fad36bfe6c0 Delete type=3 #964 -2026/01/13-08:07:30.152081 7fad36bfe6c0 Delete type=0 #966 +2026/02/28-17:23:52.834261 7f56f9bff6c0 Recovering log #1069 +2026/02/28-17:23:52.843912 7f56f9bff6c0 Delete type=3 #1067 +2026/02/28-17:23:52.843969 7f56f9bff6c0 Delete type=0 #1069 diff --git a/packs/equipment/LOG.old b/packs/equipment/LOG.old index 8500baa..a3b3c3c 100644 --- a/packs/equipment/LOG.old +++ b/packs/equipment/LOG.old @@ -1,8 +1,8 @@ -2026/01/13-00:31:14.310520 7fad373ff6c0 Recovering log #962 -2026/01/13-00:31:14.320991 7fad373ff6c0 Delete type=3 #960 -2026/01/13-00:31:14.321051 7fad373ff6c0 Delete type=0 #962 -2026/01/13-00:33:18.069718 7fad353fb6c0 Level-0 table #967: started -2026/01/13-00:33:18.069745 7fad353fb6c0 Level-0 table #967: 0 bytes OK -2026/01/13-00:33:18.076816 7fad353fb6c0 Delete type=0 #965 -2026/01/13-00:33:18.083350 7fad353fb6c0 Manual compaction at level-0 from '!items!0ErhyqifZLDCmMfT' @ 72057594037927935 : 1 .. '!items!yE8UH6YAgNGjKDEu' @ 0 : 0; will stop at (end) -2026/01/13-00:33:18.083400 7fad353fb6c0 Manual compaction at level-1 from '!items!0ErhyqifZLDCmMfT' @ 72057594037927935 : 1 .. '!items!yE8UH6YAgNGjKDEu' @ 0 : 0; will stop at (end) +2026/02/28-16:33:30.620158 7f56f9bff6c0 Recovering log #1065 +2026/02/28-16:33:30.630293 7f56f9bff6c0 Delete type=3 #1063 +2026/02/28-16:33:30.630363 7f56f9bff6c0 Delete type=0 #1065 +2026/02/28-17:23:47.126363 7f54e37ef6c0 Level-0 table #1070: started +2026/02/28-17:23:47.126384 7f54e37ef6c0 Level-0 table #1070: 0 bytes OK +2026/02/28-17:23:47.132261 7f54e37ef6c0 Delete type=0 #1068 +2026/02/28-17:23:47.144361 7f54e37ef6c0 Manual compaction at level-0 from '!items!0ErhyqifZLDCmMfT' @ 72057594037927935 : 1 .. '!items!yE8UH6YAgNGjKDEu' @ 0 : 0; will stop at (end) +2026/02/28-17:23:47.144409 7f54e37ef6c0 Manual compaction at level-1 from '!items!0ErhyqifZLDCmMfT' @ 72057594037927935 : 1 .. '!items!yE8UH6YAgNGjKDEu' @ 0 : 0; will stop at (end) diff --git a/packs/equipment/MANIFEST-000968 b/packs/equipment/MANIFEST-001071 similarity index 81% rename from packs/equipment/MANIFEST-000968 rename to packs/equipment/MANIFEST-001071 index c3e66d5..6d3f3e0 100644 Binary files a/packs/equipment/MANIFEST-000968 and b/packs/equipment/MANIFEST-001071 differ diff --git a/packs/fightoptions/000968.log b/packs/fightoptions/001071.log similarity index 100% rename from packs/fightoptions/000968.log rename to packs/fightoptions/001071.log diff --git a/packs/fightoptions/CURRENT b/packs/fightoptions/CURRENT index 0165034..210222d 100644 --- a/packs/fightoptions/CURRENT +++ b/packs/fightoptions/CURRENT @@ -1 +1 @@ -MANIFEST-000967 +MANIFEST-001070 diff --git a/packs/fightoptions/LOG b/packs/fightoptions/LOG index 3f7467a..0a62d10 100644 --- a/packs/fightoptions/LOG +++ b/packs/fightoptions/LOG @@ -1,3 +1,3 @@ -2026/01/13-08:07:30.243235 7fad36bfe6c0 Recovering log #965 -2026/01/13-08:07:30.253392 7fad36bfe6c0 Delete type=3 #963 -2026/01/13-08:07:30.253472 7fad36bfe6c0 Delete type=0 #965 +2026/02/28-17:23:52.920377 7f56e3fff6c0 Recovering log #1068 +2026/02/28-17:23:52.930570 7f56e3fff6c0 Delete type=3 #1066 +2026/02/28-17:23:52.930642 7f56e3fff6c0 Delete type=0 #1068 diff --git a/packs/fightoptions/LOG.old b/packs/fightoptions/LOG.old index 57bce28..b14751a 100644 --- a/packs/fightoptions/LOG.old +++ b/packs/fightoptions/LOG.old @@ -1,8 +1,8 @@ -2026/01/13-00:31:14.398650 7fad36bfe6c0 Recovering log #961 -2026/01/13-00:31:14.408258 7fad36bfe6c0 Delete type=3 #959 -2026/01/13-00:31:14.408316 7fad36bfe6c0 Delete type=0 #961 -2026/01/13-00:33:18.117431 7fad353fb6c0 Level-0 table #966: started -2026/01/13-00:33:18.117458 7fad353fb6c0 Level-0 table #966: 0 bytes OK -2026/01/13-00:33:18.123956 7fad353fb6c0 Delete type=0 #964 -2026/01/13-00:33:18.137577 7fad353fb6c0 Manual compaction at level-0 from '!items!AoT2c0af4lY6aBsx' @ 72057594037927935 : 1 .. '!items!vGydqADwTsHZ9B3j' @ 0 : 0; will stop at (end) -2026/01/13-00:33:18.137619 7fad353fb6c0 Manual compaction at level-1 from '!items!AoT2c0af4lY6aBsx' @ 72057594037927935 : 1 .. '!items!vGydqADwTsHZ9B3j' @ 0 : 0; will stop at (end) +2026/02/28-16:33:30.708467 7f56e3fff6c0 Recovering log #1064 +2026/02/28-16:33:30.718300 7f56e3fff6c0 Delete type=3 #1062 +2026/02/28-16:33:30.718379 7f56e3fff6c0 Delete type=0 #1064 +2026/02/28-17:23:47.176664 7f54e37ef6c0 Level-0 table #1069: started +2026/02/28-17:23:47.176691 7f54e37ef6c0 Level-0 table #1069: 0 bytes OK +2026/02/28-17:23:47.182879 7f54e37ef6c0 Delete type=0 #1067 +2026/02/28-17:23:47.196873 7f54e37ef6c0 Manual compaction at level-0 from '!items!AoT2c0af4lY6aBsx' @ 72057594037927935 : 1 .. '!items!vGydqADwTsHZ9B3j' @ 0 : 0; will stop at (end) +2026/02/28-17:23:47.196911 7f54e37ef6c0 Manual compaction at level-1 from '!items!AoT2c0af4lY6aBsx' @ 72057594037927935 : 1 .. '!items!vGydqADwTsHZ9B3j' @ 0 : 0; will stop at (end) diff --git a/packs/fightoptions/MANIFEST-000967 b/packs/fightoptions/MANIFEST-001070 similarity index 81% rename from packs/fightoptions/MANIFEST-000967 rename to packs/fightoptions/MANIFEST-001070 index e46078e..cb8372a 100644 Binary files a/packs/fightoptions/MANIFEST-000967 and b/packs/fightoptions/MANIFEST-001070 differ diff --git a/packs/fightoptionsfanmade/000451.log b/packs/fightoptionsfanmade/000554.log similarity index 100% rename from packs/fightoptionsfanmade/000451.log rename to packs/fightoptionsfanmade/000554.log diff --git a/packs/fightoptionsfanmade/CURRENT b/packs/fightoptionsfanmade/CURRENT index cf972fb..06420a4 100644 --- a/packs/fightoptionsfanmade/CURRENT +++ b/packs/fightoptionsfanmade/CURRENT @@ -1 +1 @@ -MANIFEST-000450 +MANIFEST-000553 diff --git a/packs/fightoptionsfanmade/LOG b/packs/fightoptionsfanmade/LOG index d9e8fe8..fc090b3 100644 --- a/packs/fightoptionsfanmade/LOG +++ b/packs/fightoptionsfanmade/LOG @@ -1,3 +1,3 @@ -2026/01/13-08:07:30.256588 7fad35bfc6c0 Recovering log #448 -2026/01/13-08:07:30.267581 7fad35bfc6c0 Delete type=3 #446 -2026/01/13-08:07:30.267689 7fad35bfc6c0 Delete type=0 #448 +2026/02/28-17:23:52.933111 7f56f9bff6c0 Recovering log #551 +2026/02/28-17:23:52.944230 7f56f9bff6c0 Delete type=3 #549 +2026/02/28-17:23:52.944299 7f56f9bff6c0 Delete type=0 #551 diff --git a/packs/fightoptionsfanmade/LOG.old b/packs/fightoptionsfanmade/LOG.old index 7cbcaa1..426e7f2 100644 --- a/packs/fightoptionsfanmade/LOG.old +++ b/packs/fightoptionsfanmade/LOG.old @@ -1,8 +1,8 @@ -2026/01/13-00:31:14.410555 7fad363fd6c0 Recovering log #444 -2026/01/13-00:31:14.420238 7fad363fd6c0 Delete type=3 #442 -2026/01/13-00:31:14.420295 7fad363fd6c0 Delete type=0 #444 -2026/01/13-00:33:18.124112 7fad353fb6c0 Level-0 table #449: started -2026/01/13-00:33:18.124145 7fad353fb6c0 Level-0 table #449: 0 bytes OK -2026/01/13-00:33:18.131131 7fad353fb6c0 Delete type=0 #447 -2026/01/13-00:33:18.137587 7fad353fb6c0 Manual compaction at level-0 from '!items!CLRp0k5qV8mD03pW' @ 72057594037927935 : 1 .. '!items!wYEpnhbyYaMkaNdL' @ 0 : 0; will stop at (end) -2026/01/13-00:33:18.137626 7fad353fb6c0 Manual compaction at level-1 from '!items!CLRp0k5qV8mD03pW' @ 72057594037927935 : 1 .. '!items!wYEpnhbyYaMkaNdL' @ 0 : 0; will stop at (end) +2026/02/28-16:33:30.720629 7f56f93fe6c0 Recovering log #547 +2026/02/28-16:33:30.730500 7f56f93fe6c0 Delete type=3 #545 +2026/02/28-16:33:30.730560 7f56f93fe6c0 Delete type=0 #547 +2026/02/28-17:23:47.170169 7f54e37ef6c0 Level-0 table #552: started +2026/02/28-17:23:47.170192 7f54e37ef6c0 Level-0 table #552: 0 bytes OK +2026/02/28-17:23:47.176521 7f54e37ef6c0 Delete type=0 #550 +2026/02/28-17:23:47.196862 7f54e37ef6c0 Manual compaction at level-0 from '!items!CLRp0k5qV8mD03pW' @ 72057594037927935 : 1 .. '!items!wYEpnhbyYaMkaNdL' @ 0 : 0; will stop at (end) +2026/02/28-17:23:47.196905 7f54e37ef6c0 Manual compaction at level-1 from '!items!CLRp0k5qV8mD03pW' @ 72057594037927935 : 1 .. '!items!wYEpnhbyYaMkaNdL' @ 0 : 0; will stop at (end) diff --git a/packs/fightoptionsfanmade/MANIFEST-000450 b/packs/fightoptionsfanmade/MANIFEST-000553 similarity index 81% rename from packs/fightoptionsfanmade/MANIFEST-000450 rename to packs/fightoptionsfanmade/MANIFEST-000553 index 5e5a186..ee7ddc7 100644 Binary files a/packs/fightoptionsfanmade/MANIFEST-000450 and b/packs/fightoptionsfanmade/MANIFEST-000553 differ diff --git a/packs/flaws/000969.log b/packs/flaws/001072.log similarity index 100% rename from packs/flaws/000969.log rename to packs/flaws/001072.log diff --git a/packs/flaws/CURRENT b/packs/flaws/CURRENT index 0a8f1fe..6027312 100644 --- a/packs/flaws/CURRENT +++ b/packs/flaws/CURRENT @@ -1 +1 @@ -MANIFEST-000968 +MANIFEST-001071 diff --git a/packs/flaws/LOG b/packs/flaws/LOG index c2ce08a..8c2e959 100644 --- a/packs/flaws/LOG +++ b/packs/flaws/LOG @@ -1,3 +1,3 @@ -2026/01/13-08:07:30.082049 7fad363fd6c0 Recovering log #966 -2026/01/13-08:07:30.092988 7fad363fd6c0 Delete type=3 #964 -2026/01/13-08:07:30.093097 7fad363fd6c0 Delete type=0 #966 +2026/02/28-17:23:52.782908 7f56e3fff6c0 Recovering log #1069 +2026/02/28-17:23:52.794098 7f56e3fff6c0 Delete type=3 #1067 +2026/02/28-17:23:52.794177 7f56e3fff6c0 Delete type=0 #1069 diff --git a/packs/flaws/LOG.old b/packs/flaws/LOG.old index 22024c6..7d5a037 100644 --- a/packs/flaws/LOG.old +++ b/packs/flaws/LOG.old @@ -1,8 +1,8 @@ -2026/01/13-00:31:14.260770 7fad363fd6c0 Recovering log #962 -2026/01/13-00:31:14.270998 7fad363fd6c0 Delete type=3 #960 -2026/01/13-00:31:14.271071 7fad363fd6c0 Delete type=0 #962 -2026/01/13-00:33:18.030429 7fad353fb6c0 Level-0 table #967: started -2026/01/13-00:33:18.030470 7fad353fb6c0 Level-0 table #967: 0 bytes OK -2026/01/13-00:33:18.037118 7fad353fb6c0 Delete type=0 #965 -2026/01/13-00:33:18.057382 7fad353fb6c0 Manual compaction at level-0 from '!items!0wCqg1UpGd50uJrS' @ 72057594037927935 : 1 .. '!items!znd0K3b7HzYpdehs' @ 0 : 0; will stop at (end) -2026/01/13-00:33:18.057416 7fad353fb6c0 Manual compaction at level-1 from '!items!0wCqg1UpGd50uJrS' @ 72057594037927935 : 1 .. '!items!znd0K3b7HzYpdehs' @ 0 : 0; will stop at (end) +2026/02/28-16:33:30.568367 7f56f93fe6c0 Recovering log #1065 +2026/02/28-16:33:30.578749 7f56f93fe6c0 Delete type=3 #1063 +2026/02/28-16:33:30.578812 7f56f93fe6c0 Delete type=0 #1065 +2026/02/28-17:23:47.094442 7f54e37ef6c0 Level-0 table #1070: started +2026/02/28-17:23:47.094487 7f54e37ef6c0 Level-0 table #1070: 0 bytes OK +2026/02/28-17:23:47.100985 7f54e37ef6c0 Delete type=0 #1068 +2026/02/28-17:23:47.119507 7f54e37ef6c0 Manual compaction at level-0 from '!items!0wCqg1UpGd50uJrS' @ 72057594037927935 : 1 .. '!items!znd0K3b7HzYpdehs' @ 0 : 0; will stop at (end) +2026/02/28-17:23:47.119555 7f54e37ef6c0 Manual compaction at level-1 from '!items!0wCqg1UpGd50uJrS' @ 72057594037927935 : 1 .. '!items!znd0K3b7HzYpdehs' @ 0 : 0; will stop at (end) diff --git a/packs/flaws/MANIFEST-000968 b/packs/flaws/MANIFEST-001071 similarity index 81% rename from packs/flaws/MANIFEST-000968 rename to packs/flaws/MANIFEST-001071 index 87fa11e..11f8887 100644 Binary files a/packs/flaws/MANIFEST-000968 and b/packs/flaws/MANIFEST-001071 differ diff --git a/packs/languages/000968.log b/packs/languages/001071.log similarity index 100% rename from packs/languages/000968.log rename to packs/languages/001071.log diff --git a/packs/languages/CURRENT b/packs/languages/CURRENT index 0165034..210222d 100644 --- a/packs/languages/CURRENT +++ b/packs/languages/CURRENT @@ -1 +1 @@ -MANIFEST-000967 +MANIFEST-001070 diff --git a/packs/languages/LOG b/packs/languages/LOG index e86b2ab..229a7bc 100644 --- a/packs/languages/LOG +++ b/packs/languages/LOG @@ -1,3 +1,3 @@ -2026/01/13-08:07:30.213893 7fad363fd6c0 Recovering log #965 -2026/01/13-08:07:30.225009 7fad363fd6c0 Delete type=3 #963 -2026/01/13-08:07:30.225096 7fad363fd6c0 Delete type=0 #965 +2026/02/28-17:23:52.896387 7f56f9bff6c0 Recovering log #1068 +2026/02/28-17:23:52.906464 7f56f9bff6c0 Delete type=3 #1066 +2026/02/28-17:23:52.906539 7f56f9bff6c0 Delete type=0 #1068 diff --git a/packs/languages/LOG.old b/packs/languages/LOG.old index 9ec6f11..a7baa4a 100644 --- a/packs/languages/LOG.old +++ b/packs/languages/LOG.old @@ -1,8 +1,8 @@ -2026/01/13-00:31:14.372945 7fad363fd6c0 Recovering log #961 -2026/01/13-00:31:14.383623 7fad363fd6c0 Delete type=3 #959 -2026/01/13-00:31:14.383679 7fad363fd6c0 Delete type=0 #961 -2026/01/13-00:33:18.096825 7fad353fb6c0 Level-0 table #966: started -2026/01/13-00:33:18.096859 7fad353fb6c0 Level-0 table #966: 0 bytes OK -2026/01/13-00:33:18.103126 7fad353fb6c0 Delete type=0 #964 -2026/01/13-00:33:18.110872 7fad353fb6c0 Manual compaction at level-0 from '!items!46qF6OBN5gf0dqWc' @ 72057594037927935 : 1 .. '!items!vaAQiuAHdyQrQiUX' @ 0 : 0; will stop at (end) -2026/01/13-00:33:18.110920 7fad353fb6c0 Manual compaction at level-1 from '!items!46qF6OBN5gf0dqWc' @ 72057594037927935 : 1 .. '!items!vaAQiuAHdyQrQiUX' @ 0 : 0; will stop at (end) +2026/02/28-16:33:30.684377 7f56f8bfd6c0 Recovering log #1064 +2026/02/28-16:33:30.694121 7f56f8bfd6c0 Delete type=3 #1062 +2026/02/28-16:33:30.694253 7f56f8bfd6c0 Delete type=0 #1064 +2026/02/28-17:23:47.163767 7f54e37ef6c0 Level-0 table #1069: started +2026/02/28-17:23:47.163790 7f54e37ef6c0 Level-0 table #1069: 0 bytes OK +2026/02/28-17:23:47.169941 7f54e37ef6c0 Delete type=0 #1067 +2026/02/28-17:23:47.170068 7f54e37ef6c0 Manual compaction at level-0 from '!items!46qF6OBN5gf0dqWc' @ 72057594037927935 : 1 .. '!items!vaAQiuAHdyQrQiUX' @ 0 : 0; will stop at (end) +2026/02/28-17:23:47.170097 7f54e37ef6c0 Manual compaction at level-1 from '!items!46qF6OBN5gf0dqWc' @ 72057594037927935 : 1 .. '!items!vaAQiuAHdyQrQiUX' @ 0 : 0; will stop at (end) diff --git a/packs/languages/MANIFEST-000967 b/packs/languages/MANIFEST-001070 similarity index 81% rename from packs/languages/MANIFEST-000967 rename to packs/languages/MANIFEST-001070 index f67f301..6670a74 100644 Binary files a/packs/languages/MANIFEST-000967 and b/packs/languages/MANIFEST-001070 differ diff --git a/packs/objets-alchimie/000968.log b/packs/objets-alchimie/001071.log similarity index 100% rename from packs/objets-alchimie/000968.log rename to packs/objets-alchimie/001071.log diff --git a/packs/objets-alchimie/CURRENT b/packs/objets-alchimie/CURRENT index 0165034..210222d 100644 --- a/packs/objets-alchimie/CURRENT +++ b/packs/objets-alchimie/CURRENT @@ -1 +1 @@ -MANIFEST-000967 +MANIFEST-001070 diff --git a/packs/objets-alchimie/LOG b/packs/objets-alchimie/LOG index 4de586a..5d8068b 100644 --- a/packs/objets-alchimie/LOG +++ b/packs/objets-alchimie/LOG @@ -1,3 +1,3 @@ -2026/01/13-08:07:30.285456 7fad373ff6c0 Recovering log #965 -2026/01/13-08:07:30.295903 7fad373ff6c0 Delete type=3 #963 -2026/01/13-08:07:30.295998 7fad373ff6c0 Delete type=0 #965 +2026/02/28-17:23:52.958813 7f56e3fff6c0 Recovering log #1068 +2026/02/28-17:23:52.968345 7f56e3fff6c0 Delete type=3 #1066 +2026/02/28-17:23:52.968393 7f56e3fff6c0 Delete type=0 #1068 diff --git a/packs/objets-alchimie/LOG.old b/packs/objets-alchimie/LOG.old index b6bf755..5f4bfb3 100644 --- a/packs/objets-alchimie/LOG.old +++ b/packs/objets-alchimie/LOG.old @@ -1,8 +1,8 @@ -2026/01/13-00:31:14.434032 7fad36bfe6c0 Recovering log #961 -2026/01/13-00:31:14.444388 7fad36bfe6c0 Delete type=3 #959 -2026/01/13-00:31:14.444475 7fad36bfe6c0 Delete type=0 #961 -2026/01/13-00:33:18.158035 7fad353fb6c0 Level-0 table #966: started -2026/01/13-00:33:18.158068 7fad353fb6c0 Level-0 table #966: 0 bytes OK -2026/01/13-00:33:18.164518 7fad353fb6c0 Delete type=0 #964 -2026/01/13-00:33:18.164715 7fad353fb6c0 Manual compaction at level-0 from '!items!0Yhn3r8AFsKXEKeS' @ 72057594037927935 : 1 .. '!items!xVWrSPiX0Nwccsn6' @ 0 : 0; will stop at (end) -2026/01/13-00:33:18.164827 7fad353fb6c0 Manual compaction at level-1 from '!items!0Yhn3r8AFsKXEKeS' @ 72057594037927935 : 1 .. '!items!xVWrSPiX0Nwccsn6' @ 0 : 0; will stop at (end) +2026/02/28-16:33:30.745872 7f56f93fe6c0 Recovering log #1064 +2026/02/28-16:33:30.756473 7f56f93fe6c0 Delete type=3 #1062 +2026/02/28-16:33:30.756549 7f56f93fe6c0 Delete type=0 #1064 +2026/02/28-17:23:47.196995 7f54e37ef6c0 Level-0 table #1069: started +2026/02/28-17:23:47.197070 7f54e37ef6c0 Level-0 table #1069: 0 bytes OK +2026/02/28-17:23:47.203333 7f54e37ef6c0 Delete type=0 #1067 +2026/02/28-17:23:47.224558 7f54e37ef6c0 Manual compaction at level-0 from '!items!0Yhn3r8AFsKXEKeS' @ 72057594037927935 : 1 .. '!items!xVWrSPiX0Nwccsn6' @ 0 : 0; will stop at (end) +2026/02/28-17:23:47.224608 7f54e37ef6c0 Manual compaction at level-1 from '!items!0Yhn3r8AFsKXEKeS' @ 72057594037927935 : 1 .. '!items!xVWrSPiX0Nwccsn6' @ 0 : 0; will stop at (end) diff --git a/packs/objets-alchimie/MANIFEST-000967 b/packs/objets-alchimie/MANIFEST-001070 similarity index 81% rename from packs/objets-alchimie/MANIFEST-000967 rename to packs/objets-alchimie/MANIFEST-001070 index 3fd940a..30a4ba6 100644 Binary files a/packs/objets-alchimie/MANIFEST-000967 and b/packs/objets-alchimie/MANIFEST-001070 differ diff --git a/packs/origins/000968.log b/packs/origins/001071.log similarity index 100% rename from packs/origins/000968.log rename to packs/origins/001071.log diff --git a/packs/origins/CURRENT b/packs/origins/CURRENT index 0165034..210222d 100644 --- a/packs/origins/CURRENT +++ b/packs/origins/CURRENT @@ -1 +1 @@ -MANIFEST-000967 +MANIFEST-001070 diff --git a/packs/origins/LOG b/packs/origins/LOG index 94994da..af4a0db 100644 --- a/packs/origins/LOG +++ b/packs/origins/LOG @@ -1,3 +1,3 @@ -2026/01/13-08:07:30.112173 7fad373ff6c0 Recovering log #965 -2026/01/13-08:07:30.123346 7fad373ff6c0 Delete type=3 #963 -2026/01/13-08:07:30.123478 7fad373ff6c0 Delete type=0 #965 +2026/02/28-17:23:52.807927 7f56f93fe6c0 Recovering log #1068 +2026/02/28-17:23:52.818186 7f56f93fe6c0 Delete type=3 #1066 +2026/02/28-17:23:52.818257 7f56f93fe6c0 Delete type=0 #1068 diff --git a/packs/origins/LOG.old b/packs/origins/LOG.old index 905528d..9eb0e0d 100644 --- a/packs/origins/LOG.old +++ b/packs/origins/LOG.old @@ -1,8 +1,8 @@ -2026/01/13-00:31:14.286076 7fad35bfc6c0 Recovering log #961 -2026/01/13-00:31:14.295737 7fad35bfc6c0 Delete type=3 #959 -2026/01/13-00:31:14.295823 7fad35bfc6c0 Delete type=0 #961 -2026/01/13-00:33:18.063638 7fad353fb6c0 Level-0 table #966: started -2026/01/13-00:33:18.063660 7fad353fb6c0 Level-0 table #966: 0 bytes OK -2026/01/13-00:33:18.069632 7fad353fb6c0 Delete type=0 #964 -2026/01/13-00:33:18.083342 7fad353fb6c0 Manual compaction at level-0 from '!items!2Wtl8xrKf46LMwBF' @ 72057594037927935 : 1 .. '!items!zIlZmEd9WAA473UX' @ 0 : 0; will stop at (end) -2026/01/13-00:33:18.083376 7fad353fb6c0 Manual compaction at level-1 from '!items!2Wtl8xrKf46LMwBF' @ 72057594037927935 : 1 .. '!items!zIlZmEd9WAA473UX' @ 0 : 0; will stop at (end) +2026/02/28-16:33:30.595096 7f56f9bff6c0 Recovering log #1064 +2026/02/28-16:33:30.604934 7f56f9bff6c0 Delete type=3 #1062 +2026/02/28-16:33:30.604985 7f56f9bff6c0 Delete type=0 #1064 +2026/02/28-17:23:47.132350 7f54e37ef6c0 Level-0 table #1069: started +2026/02/28-17:23:47.132377 7f54e37ef6c0 Level-0 table #1069: 0 bytes OK +2026/02/28-17:23:47.138287 7f54e37ef6c0 Delete type=0 #1067 +2026/02/28-17:23:47.144369 7f54e37ef6c0 Manual compaction at level-0 from '!items!2Wtl8xrKf46LMwBF' @ 72057594037927935 : 1 .. '!items!zIlZmEd9WAA473UX' @ 0 : 0; will stop at (end) +2026/02/28-17:23:47.144403 7f54e37ef6c0 Manual compaction at level-1 from '!items!2Wtl8xrKf46LMwBF' @ 72057594037927935 : 1 .. '!items!zIlZmEd9WAA473UX' @ 0 : 0; will stop at (end) diff --git a/packs/origins/MANIFEST-000967 b/packs/origins/MANIFEST-001070 similarity index 81% rename from packs/origins/MANIFEST-000967 rename to packs/origins/MANIFEST-001070 index 2f1d810..58a569b 100644 Binary files a/packs/origins/MANIFEST-000967 and b/packs/origins/MANIFEST-001070 differ diff --git a/packs/potions-alchimie/000968.log b/packs/potions-alchimie/001071.log similarity index 100% rename from packs/potions-alchimie/000968.log rename to packs/potions-alchimie/001071.log diff --git a/packs/potions-alchimie/CURRENT b/packs/potions-alchimie/CURRENT index 0165034..210222d 100644 --- a/packs/potions-alchimie/CURRENT +++ b/packs/potions-alchimie/CURRENT @@ -1 +1 @@ -MANIFEST-000967 +MANIFEST-001070 diff --git a/packs/potions-alchimie/LOG b/packs/potions-alchimie/LOG index 9aaab5b..d47c26b 100644 --- a/packs/potions-alchimie/LOG +++ b/packs/potions-alchimie/LOG @@ -1,3 +1,3 @@ -2026/01/13-08:07:30.270517 7fad363fd6c0 Recovering log #965 -2026/01/13-08:07:30.282336 7fad363fd6c0 Delete type=3 #963 -2026/01/13-08:07:30.282475 7fad363fd6c0 Delete type=0 #965 +2026/02/28-17:23:52.947009 7f56f93fe6c0 Recovering log #1068 +2026/02/28-17:23:52.956752 7f56f93fe6c0 Delete type=3 #1066 +2026/02/28-17:23:52.956816 7f56f93fe6c0 Delete type=0 #1068 diff --git a/packs/potions-alchimie/LOG.old b/packs/potions-alchimie/LOG.old index 6208e1c..4b92591 100644 --- a/packs/potions-alchimie/LOG.old +++ b/packs/potions-alchimie/LOG.old @@ -1,8 +1,8 @@ -2026/01/13-00:31:14.421946 7fad35bfc6c0 Recovering log #961 -2026/01/13-00:31:14.431615 7fad35bfc6c0 Delete type=3 #959 -2026/01/13-00:31:14.431688 7fad35bfc6c0 Delete type=0 #961 -2026/01/13-00:33:18.131253 7fad353fb6c0 Level-0 table #966: started -2026/01/13-00:33:18.131283 7fad353fb6c0 Level-0 table #966: 0 bytes OK -2026/01/13-00:33:18.137434 7fad353fb6c0 Delete type=0 #964 -2026/01/13-00:33:18.137604 7fad353fb6c0 Manual compaction at level-0 from '!items!0a8UFoCOd3D35WBb' @ 72057594037927935 : 1 .. '!items!y9NHZCxKXMZEqcRo' @ 0 : 0; will stop at (end) -2026/01/13-00:33:18.137633 7fad353fb6c0 Manual compaction at level-1 from '!items!0a8UFoCOd3D35WBb' @ 72057594037927935 : 1 .. '!items!y9NHZCxKXMZEqcRo' @ 0 : 0; will stop at (end) +2026/02/28-16:33:30.732884 7f56f9bff6c0 Recovering log #1064 +2026/02/28-16:33:30.743613 7f56f9bff6c0 Delete type=3 #1062 +2026/02/28-16:33:30.743678 7f56f9bff6c0 Delete type=0 #1064 +2026/02/28-17:23:47.190627 7f54e37ef6c0 Level-0 table #1069: started +2026/02/28-17:23:47.190673 7f54e37ef6c0 Level-0 table #1069: 0 bytes OK +2026/02/28-17:23:47.196754 7f54e37ef6c0 Delete type=0 #1067 +2026/02/28-17:23:47.196895 7f54e37ef6c0 Manual compaction at level-0 from '!items!0a8UFoCOd3D35WBb' @ 72057594037927935 : 1 .. '!items!y9NHZCxKXMZEqcRo' @ 0 : 0; will stop at (end) +2026/02/28-17:23:47.196926 7f54e37ef6c0 Manual compaction at level-1 from '!items!0a8UFoCOd3D35WBb' @ 72057594037927935 : 1 .. '!items!y9NHZCxKXMZEqcRo' @ 0 : 0; will stop at (end) diff --git a/packs/potions-alchimie/MANIFEST-000967 b/packs/potions-alchimie/MANIFEST-001070 similarity index 81% rename from packs/potions-alchimie/MANIFEST-000967 rename to packs/potions-alchimie/MANIFEST-001070 index d1528ab..9771d80 100644 Binary files a/packs/potions-alchimie/MANIFEST-000967 and b/packs/potions-alchimie/MANIFEST-001070 differ diff --git a/packs/races/000968.log b/packs/races/001071.log similarity index 100% rename from packs/races/000968.log rename to packs/races/001071.log diff --git a/packs/races/CURRENT b/packs/races/CURRENT index 0165034..210222d 100644 --- a/packs/races/CURRENT +++ b/packs/races/CURRENT @@ -1 +1 @@ -MANIFEST-000967 +MANIFEST-001070 diff --git a/packs/races/LOG b/packs/races/LOG index 4ff7b7c..54c3d90 100644 --- a/packs/races/LOG +++ b/packs/races/LOG @@ -1,3 +1,3 @@ -2026/01/13-08:07:30.127058 7fad363fd6c0 Recovering log #965 -2026/01/13-08:07:30.137403 7fad363fd6c0 Delete type=3 #963 -2026/01/13-08:07:30.137554 7fad363fd6c0 Delete type=0 #965 +2026/02/28-17:23:52.820409 7f56e3fff6c0 Recovering log #1068 +2026/02/28-17:23:52.831852 7f56e3fff6c0 Delete type=3 #1066 +2026/02/28-17:23:52.831927 7f56e3fff6c0 Delete type=0 #1068 diff --git a/packs/races/LOG.old b/packs/races/LOG.old index 415364e..27f9a2c 100644 --- a/packs/races/LOG.old +++ b/packs/races/LOG.old @@ -1,8 +1,8 @@ -2026/01/13-00:31:14.298047 7fad363fd6c0 Recovering log #961 -2026/01/13-00:31:14.308541 7fad363fd6c0 Delete type=3 #959 -2026/01/13-00:31:14.308602 7fad363fd6c0 Delete type=0 #961 -2026/01/13-00:33:18.057541 7fad353fb6c0 Level-0 table #966: started -2026/01/13-00:33:18.057568 7fad353fb6c0 Level-0 table #966: 0 bytes OK -2026/01/13-00:33:18.063555 7fad353fb6c0 Delete type=0 #964 -2026/01/13-00:33:18.083331 7fad353fb6c0 Manual compaction at level-0 from '!items!3oOvUd7AIqrXzLDl' @ 72057594037927935 : 1 .. '!items!oWexVALVtDXmedMy' @ 0 : 0; will stop at (end) -2026/01/13-00:33:18.083392 7fad353fb6c0 Manual compaction at level-1 from '!items!3oOvUd7AIqrXzLDl' @ 72057594037927935 : 1 .. '!items!oWexVALVtDXmedMy' @ 0 : 0; will stop at (end) +2026/02/28-16:33:30.607336 7f56e3fff6c0 Recovering log #1064 +2026/02/28-16:33:30.617749 7f56e3fff6c0 Delete type=3 #1062 +2026/02/28-16:33:30.617797 7f56e3fff6c0 Delete type=0 #1064 +2026/02/28-17:23:47.119733 7f54e37ef6c0 Level-0 table #1069: started +2026/02/28-17:23:47.119789 7f54e37ef6c0 Level-0 table #1069: 0 bytes OK +2026/02/28-17:23:47.126273 7f54e37ef6c0 Delete type=0 #1067 +2026/02/28-17:23:47.144350 7f54e37ef6c0 Manual compaction at level-0 from '!items!3oOvUd7AIqrXzLDl' @ 72057594037927935 : 1 .. '!items!oWexVALVtDXmedMy' @ 0 : 0; will stop at (end) +2026/02/28-17:23:47.144395 7f54e37ef6c0 Manual compaction at level-1 from '!items!3oOvUd7AIqrXzLDl' @ 72057594037927935 : 1 .. '!items!oWexVALVtDXmedMy' @ 0 : 0; will stop at (end) diff --git a/packs/races/MANIFEST-000967 b/packs/races/MANIFEST-001070 similarity index 82% rename from packs/races/MANIFEST-000967 rename to packs/races/MANIFEST-001070 index d63336a..b20eed6 100644 Binary files a/packs/races/MANIFEST-000967 and b/packs/races/MANIFEST-001070 differ diff --git a/packs/spells/000968.log b/packs/spells/001071.log similarity index 100% rename from packs/spells/000968.log rename to packs/spells/001071.log diff --git a/packs/spells/CURRENT b/packs/spells/CURRENT index 0165034..210222d 100644 --- a/packs/spells/CURRENT +++ b/packs/spells/CURRENT @@ -1 +1 @@ -MANIFEST-000967 +MANIFEST-001070 diff --git a/packs/spells/LOG b/packs/spells/LOG index f95d1bd..6342eb5 100644 --- a/packs/spells/LOG +++ b/packs/spells/LOG @@ -1,3 +1,3 @@ -2026/01/13-08:07:30.228081 7fad373ff6c0 Recovering log #965 -2026/01/13-08:07:30.240063 7fad373ff6c0 Delete type=3 #963 -2026/01/13-08:07:30.240242 7fad373ff6c0 Delete type=0 #965 +2026/02/28-17:23:52.908514 7f56f93fe6c0 Recovering log #1068 +2026/02/28-17:23:52.918072 7f56f93fe6c0 Delete type=3 #1066 +2026/02/28-17:23:52.918131 7f56f93fe6c0 Delete type=0 #1068 diff --git a/packs/spells/LOG.old b/packs/spells/LOG.old index fa19829..207b04f 100644 --- a/packs/spells/LOG.old +++ b/packs/spells/LOG.old @@ -1,8 +1,8 @@ -2026/01/13-00:31:14.386295 7fad35bfc6c0 Recovering log #961 -2026/01/13-00:31:14.396283 7fad35bfc6c0 Delete type=3 #959 -2026/01/13-00:31:14.396332 7fad35bfc6c0 Delete type=0 #961 -2026/01/13-00:33:18.111010 7fad353fb6c0 Level-0 table #966: started -2026/01/13-00:33:18.111042 7fad353fb6c0 Level-0 table #966: 0 bytes OK -2026/01/13-00:33:18.117293 7fad353fb6c0 Delete type=0 #964 -2026/01/13-00:33:18.137565 7fad353fb6c0 Manual compaction at level-0 from '!items!2svd3uio8Hp4e5Wy' @ 72057594037927935 : 1 .. '!items!zq5h9kCpo8gK4oIH' @ 0 : 0; will stop at (end) -2026/01/13-00:33:18.137612 7fad353fb6c0 Manual compaction at level-1 from '!items!2svd3uio8Hp4e5Wy' @ 72057594037927935 : 1 .. '!items!zq5h9kCpo8gK4oIH' @ 0 : 0; will stop at (end) +2026/02/28-16:33:30.696883 7f56f93fe6c0 Recovering log #1064 +2026/02/28-16:33:30.706599 7f56f93fe6c0 Delete type=3 #1062 +2026/02/28-16:33:30.706663 7f56f93fe6c0 Delete type=0 #1064 +2026/02/28-17:23:47.183016 7f54e37ef6c0 Level-0 table #1069: started +2026/02/28-17:23:47.183043 7f54e37ef6c0 Level-0 table #1069: 0 bytes OK +2026/02/28-17:23:47.190475 7f54e37ef6c0 Delete type=0 #1067 +2026/02/28-17:23:47.196884 7f54e37ef6c0 Manual compaction at level-0 from '!items!2svd3uio8Hp4e5Wy' @ 72057594037927935 : 1 .. '!items!zq5h9kCpo8gK4oIH' @ 0 : 0; will stop at (end) +2026/02/28-17:23:47.196917 7f54e37ef6c0 Manual compaction at level-1 from '!items!2svd3uio8Hp4e5Wy' @ 72057594037927935 : 1 .. '!items!zq5h9kCpo8gK4oIH' @ 0 : 0; will stop at (end) diff --git a/packs/spells/MANIFEST-000967 b/packs/spells/MANIFEST-001070 similarity index 82% rename from packs/spells/MANIFEST-000967 rename to packs/spells/MANIFEST-001070 index d0a3be1..a3e4753 100644 Binary files a/packs/spells/MANIFEST-000967 and b/packs/spells/MANIFEST-001070 differ diff --git a/packs/vehicleweapons/000875.log b/packs/vehicleweapons/000978.log similarity index 100% rename from packs/vehicleweapons/000875.log rename to packs/vehicleweapons/000978.log diff --git a/packs/vehicleweapons/CURRENT b/packs/vehicleweapons/CURRENT index 7299140..760f0f8 100644 --- a/packs/vehicleweapons/CURRENT +++ b/packs/vehicleweapons/CURRENT @@ -1 +1 @@ -MANIFEST-000874 +MANIFEST-000977 diff --git a/packs/vehicleweapons/LOG b/packs/vehicleweapons/LOG index fe9da81..df10a5d 100644 --- a/packs/vehicleweapons/LOG +++ b/packs/vehicleweapons/LOG @@ -1,3 +1,3 @@ -2026/01/13-08:07:30.185715 7fad35bfc6c0 Recovering log #872 -2026/01/13-08:07:30.196559 7fad35bfc6c0 Delete type=3 #870 -2026/01/13-08:07:30.196735 7fad35bfc6c0 Delete type=0 #872 +2026/02/28-17:23:52.871452 7f56f9bff6c0 Recovering log #975 +2026/02/28-17:23:52.881163 7f56f9bff6c0 Delete type=3 #973 +2026/02/28-17:23:52.881256 7f56f9bff6c0 Delete type=0 #975 diff --git a/packs/vehicleweapons/LOG.old b/packs/vehicleweapons/LOG.old index 9ac75ab..bed2d51 100644 --- a/packs/vehicleweapons/LOG.old +++ b/packs/vehicleweapons/LOG.old @@ -1,8 +1,8 @@ -2026/01/13-00:31:14.348450 7fad373ff6c0 Recovering log #868 -2026/01/13-00:31:14.358522 7fad373ff6c0 Delete type=3 #866 -2026/01/13-00:31:14.358579 7fad373ff6c0 Delete type=0 #868 -2026/01/13-00:33:18.083482 7fad353fb6c0 Level-0 table #873: started -2026/01/13-00:33:18.083514 7fad353fb6c0 Level-0 table #873: 0 bytes OK -2026/01/13-00:33:18.089996 7fad353fb6c0 Delete type=0 #871 -2026/01/13-00:33:18.110837 7fad353fb6c0 Manual compaction at level-0 from '!items!2cqkViQnOYZ4qwU1' @ 72057594037927935 : 1 .. '!items!qcCZxbaV9sucG1XK' @ 0 : 0; will stop at (end) -2026/01/13-00:33:18.110897 7fad353fb6c0 Manual compaction at level-1 from '!items!2cqkViQnOYZ4qwU1' @ 72057594037927935 : 1 .. '!items!qcCZxbaV9sucG1XK' @ 0 : 0; will stop at (end) +2026/02/28-16:33:30.657363 7f56f8bfd6c0 Recovering log #971 +2026/02/28-16:33:30.668267 7f56f8bfd6c0 Delete type=3 #969 +2026/02/28-16:33:30.668326 7f56f8bfd6c0 Delete type=0 #971 +2026/02/28-17:23:47.151742 7f54e37ef6c0 Level-0 table #976: started +2026/02/28-17:23:47.151765 7f54e37ef6c0 Level-0 table #976: 0 bytes OK +2026/02/28-17:23:47.157639 7f54e37ef6c0 Delete type=0 #974 +2026/02/28-17:23:47.170048 7f54e37ef6c0 Manual compaction at level-0 from '!items!2cqkViQnOYZ4qwU1' @ 72057594037927935 : 1 .. '!items!qcCZxbaV9sucG1XK' @ 0 : 0; will stop at (end) +2026/02/28-17:23:47.170083 7f54e37ef6c0 Manual compaction at level-1 from '!items!2cqkViQnOYZ4qwU1' @ 72057594037927935 : 1 .. '!items!qcCZxbaV9sucG1XK' @ 0 : 0; will stop at (end) diff --git a/packs/vehicleweapons/MANIFEST-000874 b/packs/vehicleweapons/MANIFEST-000977 similarity index 82% rename from packs/vehicleweapons/MANIFEST-000874 rename to packs/vehicleweapons/MANIFEST-000977 index fce7286..686c2b7 100644 Binary files a/packs/vehicleweapons/MANIFEST-000874 and b/packs/vehicleweapons/MANIFEST-000977 differ diff --git a/packs/weapons/000881.log b/packs/weapons/000984.log similarity index 100% rename from packs/weapons/000881.log rename to packs/weapons/000984.log diff --git a/packs/weapons/CURRENT b/packs/weapons/CURRENT index 5bac171..1dfa95c 100644 --- a/packs/weapons/CURRENT +++ b/packs/weapons/CURRENT @@ -1 +1 @@ -MANIFEST-000880 +MANIFEST-000983 diff --git a/packs/weapons/LOG b/packs/weapons/LOG index 66e649e..c9eb861 100644 --- a/packs/weapons/LOG +++ b/packs/weapons/LOG @@ -1,3 +1,3 @@ -2026/01/13-08:07:30.156659 7fad373ff6c0 Recovering log #878 -2026/01/13-08:07:30.167240 7fad373ff6c0 Delete type=3 #876 -2026/01/13-08:07:30.167330 7fad373ff6c0 Delete type=0 #878 +2026/02/28-17:23:52.846187 7f56f93fe6c0 Recovering log #981 +2026/02/28-17:23:52.856256 7f56f93fe6c0 Delete type=3 #979 +2026/02/28-17:23:52.856329 7f56f93fe6c0 Delete type=0 #981 diff --git a/packs/weapons/LOG.old b/packs/weapons/LOG.old index d87e8e7..7337c13 100644 --- a/packs/weapons/LOG.old +++ b/packs/weapons/LOG.old @@ -1,8 +1,8 @@ -2026/01/13-00:31:14.323267 7fad35bfc6c0 Recovering log #874 -2026/01/13-00:31:14.332961 7fad35bfc6c0 Delete type=3 #872 -2026/01/13-00:31:14.333041 7fad35bfc6c0 Delete type=0 #874 -2026/01/13-00:33:18.076941 7fad353fb6c0 Level-0 table #879: started -2026/01/13-00:33:18.076974 7fad353fb6c0 Level-0 table #879: 0 bytes OK -2026/01/13-00:33:18.083219 7fad353fb6c0 Delete type=0 #877 -2026/01/13-00:33:18.083369 7fad353fb6c0 Manual compaction at level-0 from '!items!2xxMC458KXaAgm3T' @ 72057594037927935 : 1 .. '!items!zjOFhNocHjeJZcy4' @ 0 : 0; will stop at (end) -2026/01/13-00:33:18.083406 7fad353fb6c0 Manual compaction at level-1 from '!items!2xxMC458KXaAgm3T' @ 72057594037927935 : 1 .. '!items!zjOFhNocHjeJZcy4' @ 0 : 0; will stop at (end) +2026/02/28-16:33:30.632587 7f56f93fe6c0 Recovering log #977 +2026/02/28-16:33:30.642029 7f56f93fe6c0 Delete type=3 #975 +2026/02/28-16:33:30.642091 7f56f93fe6c0 Delete type=0 #977 +2026/02/28-17:23:47.138374 7f54e37ef6c0 Level-0 table #982: started +2026/02/28-17:23:47.138404 7f54e37ef6c0 Level-0 table #982: 0 bytes OK +2026/02/28-17:23:47.144277 7f54e37ef6c0 Delete type=0 #980 +2026/02/28-17:23:47.144377 7f54e37ef6c0 Manual compaction at level-0 from '!items!2xxMC458KXaAgm3T' @ 72057594037927935 : 1 .. '!items!zjOFhNocHjeJZcy4' @ 0 : 0; will stop at (end) +2026/02/28-17:23:47.144417 7f54e37ef6c0 Manual compaction at level-1 from '!items!2xxMC458KXaAgm3T' @ 72057594037927935 : 1 .. '!items!zjOFhNocHjeJZcy4' @ 0 : 0; will stop at (end) diff --git a/packs/weapons/MANIFEST-000880 b/packs/weapons/MANIFEST-000983 similarity index 81% rename from packs/weapons/MANIFEST-000880 rename to packs/weapons/MANIFEST-000983 index 7e15627..c378963 100644 Binary files a/packs/weapons/MANIFEST-000880 and b/packs/weapons/MANIFEST-000983 differ diff --git a/styles/components/actor.less b/styles/components/actor.less index af72f5e..b2180b8 100644 --- a/styles/components/actor.less +++ b/styles/components/actor.less @@ -14,12 +14,13 @@ background-size: 190px 115px; } - form { + .bol-actor-form { .sidebar { padding-top: 115px; min-width: 250px; width: 250px; max-width: 250px; + overflow: hidden; .profile-img { cursor: pointer; @@ -31,6 +32,12 @@ max-width: calc(250px - 10px); margin-right: 10px; } + + .items-list { + width: calc(250px - 10px); + max-width: calc(250px - 10px); + margin-right: 10px; + } } .main { @@ -42,33 +49,50 @@ &.vigor { background-image: url("/systems/bol/ui/attributes/vigor.webp"); background-repeat: no-repeat; - background-position: center center; - background-size: 64px 64px; + background-position: center 40%; + background-size: 100px 100px; } &.agility { background-image: url("/systems/bol/ui/attributes/agility.webp"); background-repeat: no-repeat; - background-position: center center; - background-size: 64px 64px; + background-position: center 40%; + background-size: 100px 100px; } &.mind { background-image: url("/systems/bol/ui/attributes/mind.webp"); background-repeat: no-repeat; - background-position: center center; - background-size: 64px 64px; + background-position: center 40%; + background-size: 100px 100px; } &.appeal { background-image: url("/systems/bol/ui/attributes/appeal.webp"); background-repeat: no-repeat; - background-position: center center; - background-size: 64px 64px; + background-position: center 40%; + background-size: 100px 100px; } .stat-value { - margin-top: -10px; + margin-top: -18px; + &.rounded { + background: transparent; + border: none; + box-shadow: none; + text-align: center; + line-height: 4rem; + } + } + } + + .aptitude { + .stat-value { + &.rounded-border { + background: transparent; + text-align: center; + line-height: 4rem; + } } } } @@ -77,6 +101,16 @@ } } + .resources-value { + text-align: center; + color: #4b4a44; + } + + .inc-dec-btns-resource { + color: #8b0000; + &:hover { color: #4b4a44; } + } + .bol-footer { height: 62px; max-height: 62px; @@ -97,7 +131,6 @@ height: 30px; max-height: 30px; min-height: 30px; - background-color: black; } .footer-right { @@ -166,6 +199,7 @@ font-family: "Wolfsbane2Expanded", cursive; font-size: 2rem; font-variant: small-caps; + color: #4b4a44; } .rounded { diff --git a/styles/components/common.less b/styles/components/common.less index f1ba9e5..f5a265b 100644 --- a/styles/components/common.less +++ b/styles/components/common.less @@ -21,7 +21,7 @@ body.system-bol img#logo { overflow-y: hidden; background: transparent; - form { + .bol-actor-form { border: 10px solid transparent; border-image: url("/systems/bol/ui/box-border-large.webp") 36 repeat; border-image-outset: 1; @@ -29,6 +29,8 @@ body.system-bol img#logo { margin: 0; padding: 0; height: 100%; + position: relative; + width: 100%; .sheet-header { background-image: url("/systems/bol/ui/banner.webp"); @@ -56,23 +58,79 @@ body.system-bol img#logo { justify-content: flex-start; align-items: baseline; - .header-field-label { - margin-right: 5px; + .charname, + .itemname { + color: #4b4a44; + font-family: "Wolfsbane2Expanded", cursive; + font-size: 1.65rem; + background-color: #2a2a2a30; + border: 1px solid #4b4a44 !important; + border-radius: 0.5rem; + width: 100%; + margin-bottom: 4px; + } + + .header-field-label { + margin-right: 5px; + font-size: 0.86rem; + } + + .header-field-label.xp-sublabel { + font-size: 0.9rem; + color: #606060; } - .charname, - .itemname, .header-field-value { color: #4b4a44; - font-family: 'Contrail One', cursive; - font-size: 1.5rem; - background-color: #EEE; + font-family: "Wolfsbane2Expanded", cursive; + font-size: 0.9rem; + background-color: #2a2a2a30; + border: 1px solid #4b4a44 !important; + border-radius: 0.5rem; + text-align: center; + } + } + } + + .header-buttons { + align-self: flex-end; + padding-bottom: 10px; + + .post-item { + flex: 0 0 auto; + height: 32px; + width: 32px; + line-height: 30px; + cursor: pointer; + background: rgba(0, 0, 0, 0.1); + border: 1px solid #999; + border-radius: 3px; + + &:hover { + background: rgba(0, 0, 0, 0.2); } } } } + .wrap { + flex: 1; + min-height: 0; + align-items: stretch; + } + + .bol-actor-sidebar { + align-self: flex-start; + } + .main { + display: flex; + flex-direction: column; + flex: 1; + min-height: 0; + height: 100%; + overflow: hidden; + .tabs { flex: 0 0 30px; background-color: black; @@ -93,17 +151,49 @@ body.system-bol img#logo { } .sheet-body { + flex: 1; + min-height: 0; overflow: hidden; .tab { - height: 95%; + height: 100%; border: none; overflow-y: auto; + display: none; + + &.active { + display: block; + } + + &.stats { + hr { + margin-top: 6px; + margin-bottom: 6px; + } + } &.description { .editor, - .editor-content { + .editor-content, + prose-mirror { height: 100%; + color: #191813; + } + prose-mirror .editor-content, + prose-mirror p, + prose-mirror div, + prose-mirror span { + color: #191813 !important; + } + input[type="text"], + input[type="number"] { + background-color: #2a2a2a30; + border: 1px solid #4b4a44 !important; + border-radius: 0.5rem; + color: #4b4a44; + text-align: center; + font-size: 0.95rem; + margin-left: 6px; } } } diff --git a/styles/components/item.less b/styles/components/item.less index c08343c..e891e88 100644 --- a/styles/components/item.less +++ b/styles/components/item.less @@ -6,30 +6,248 @@ min-width: 460px; min-height: 400px; + .window-content { + background: transparent !important; + color: #191813 !important; + padding: 10px; + overflow: hidden; + + // Inner div — mirrors the AppV1
with box-border-large decoration + .bol.sheet.item { + border: 10px solid transparent; + border-image: url("/systems/bol/ui/box-border-large.webp") 36 repeat; + border-image-outset: 1; + background: white !important; + color: #191813 !important; + margin: 0; + padding: 0; + height: 100%; + position: relative; + width: 100%; + display: flex; + flex-direction: column; + + .wrap { + flex: 1; + min-height: 0; + display: flex; + flex-direction: column; + + .main { + flex: 1; + min-height: 0; + display: flex; + flex-direction: column; + + .sheet-body { + flex: 1; + min-height: 0; + overflow: hidden; + + .tab { + display: none; + + &.active { + display: block; + height: 100%; + overflow-y: auto; + } + + &.properties { + padding: 5px 8px; + } + } + } + } + } + } + } + + .window-content .bol.sheet.item .sheet-header { + background-image: url("/systems/bol/ui/banner.webp"); + background-size: 330px 62px; + background-position: 100% -15px; + background-repeat: no-repeat; + height: 115px; + min-height: 115px; + display: flex; + align-items: flex-end; + padding-bottom: 10px; + + img.profile-img { + cursor: pointer; + border: none; + background-color: lightgray; + box-shadow: 5px 5px 5px black; + width: 96px; + height: 96px; + min-width: 96px; + min-height: 96px; + max-width: 96px; + max-height: 96px; + margin-right: 10px; + object-fit: cover; + } + + .header-buttons { + align-self: flex-end; + padding-bottom: 10px; + + .post-item { + color: #4b4a44; + background: rgba(0, 0, 0, 0.1); + border: 1px solid #999; + border-radius: 3px; + height: 32px; + width: 32px; + line-height: 30px; + cursor: pointer; + + &:hover { + color: #191813; + background: rgba(0, 0, 0, 0.2); + } + } + } + } + + .window-content .bol.sheet.item .tabs { + height: 44px; + background-color: black; + display: flex; + flex-shrink: 0; + + a.item { + line-height: 44px; + font-weight: bold; + font-family: "CCMeanwhile", cursive; + color: white; + font-size: 0.9em; + + &.active { + text-decoration: underline; + text-shadow: none; + } + } + } + + .window-content .bol.sheet.item .sheet-body { + .tab.description.active { + color: #191813; + display: block; + overflow: auto; + + .editor, + .editor-content, + .prosemirror, + .prosemirror p, + .prosemirror div, + .prosemirror span, + .prosemirror h1, + .prosemirror h2, + .prosemirror h3, + .prosemirror h4, + .form-group:has(.prosemirror), + .form-group:has(.editor) { + color: #191813 !important; + } + } + + .tab.properties { + label, + .form-group label, + select, + input[type="text"], + input[type="number"] { + color: #191813; + } + } + } + h1 input.itemname { - margin-top: 32px; - min-width: 24rem; + margin-top: 0; + min-width: 26.4rem; font-family: "Wolfsbane2Expanded", cursive; + text-shadow: 3px 3px 5px #333; + } + + // Normalize inputs and selects in item sheets + .window-content .bol.sheet.item { + .form-group { + display: flex; + flex-direction: row; + align-items: center; + margin: 3px 0; + + label { + flex: 0 0 40%; + color: #191813; + font-weight: bold; + } + + input[type="checkbox"] { + flex: 0 0 auto; + width: 16px; + height: 16px; + margin: 0; + position: static; + top: auto; + cursor: pointer; + } + + input[type="text"], + input[type="number"], + select, + .form-fields { + flex: 1; + } + } + + label.checkbox { + display: flex; + flex-direction: row; + align-items: center; + gap: 6px; + color: #191813; + + > input[type="checkbox"] { + position: static; + top: auto; + margin: 0; + flex: 0 0 auto; + } + } + + input[type="text"], + input[type="number"], + input[type="text"]:hover, + input[type="number"]:hover, + input[type="text"]:focus, + input[type="number"]:focus, + select { + color: #191813; + background-color: #f0efe8; + border: 1px solid #999; + border-radius: 2px; + padding: 1px 4px; + } + + select option { + background-color: #f0efe8; + color: #191813; + } } .item-properties { - flex: 0 0 150px; - margin: 5px 5px 5px 0; - padding-right: 5px; - border-right: 1px groove #eeede0; - - .form-group { - margin: 0; - - label { - line-height: 20px; - } - } + margin: 5px 0; + padding-bottom: 5px; + border-bottom: 1px groove #eeede0; .properties-list { list-style: none; margin: 0; padding: 0; + display: block; li { margin: 3px 0; diff --git a/styles/global/chat.less b/styles/global/chat.less index 5c19a4f..5b66bd7 100644 --- a/styles/global/chat.less +++ b/styles/global/chat.less @@ -1,3 +1,165 @@ +/* ----------------------------------------- */ +/* Post Item Chat Card */ +/* ----------------------------------------- */ + +.bol-post-item { + color: #191813; + + .bpi-header { + display: flex; + flex-direction: row; + align-items: flex-start; + gap: 8px; + padding-bottom: 6px; + border-bottom: 2px solid #8b7355; + margin-bottom: 8px; + + .bpi-img { + width: 52px; + height: 52px; + border: 1px outset lightgray; + box-shadow: 2px 2px 3px rgba(0, 0, 0, 0.5); + object-fit: cover; + flex: 0 0 52px; + } + + .bpi-title-block { + flex: 1; + + .bpi-name { + margin: 0 0 2px 0; + font-family: "Wolfsbane2Expanded", cursive; + font-size: 1.1em; + color: #4b4a44; + line-height: 1.2; + border: none; + } + + .bpi-type { + font-family: "IMFellDWPicaSC-Regular", serif; + font-size: 0.8em; + color: #7a7060; + font-style: italic; + } + } + } + + .bpi-stats-row { + display: flex; + flex-direction: row; + flex-wrap: wrap; + gap: 3px 12px; + margin: 4px 0; + padding: 4px 6px; + background: rgba(139, 115, 85, 0.08); + border: 1px solid rgba(139, 115, 85, 0.25); + border-radius: 3px; + + .bpi-stat { + display: flex; + flex-direction: row; + align-items: baseline; + gap: 4px; + + .bpi-sl { + font-family: "IMFellDWPicaSC-Regular", serif; + font-size: 0.72em; + color: #7a7060; + font-style: italic; + } + + .bpi-sv { + font-weight: bold; + font-size: 0.88em; + color: #191813; + } + } + } + + .bpi-tags { + display: flex; + flex-direction: row; + flex-wrap: wrap; + gap: 3px; + margin: 3px 0; + + .bpi-tag { + padding: 1px 7px; + border: 1px solid #8b7355; + border-radius: 10px; + font-size: 0.7em; + color: #4b4a44; + background: rgba(139, 115, 85, 0.12); + font-family: "IMFellDWPicaSC-Regular", serif; + } + + .bpi-tag-magic { + border-color: #6a4a9c; + color: #5a3a8c; + background: rgba(106, 74, 156, 0.1); + } + + .bpi-tag-bonus { + border-color: #2d7a2d; + color: #1a5a1a; + background: rgba(45, 122, 45, 0.1); + } + + .bpi-tag-malus { + border-color: #8b2020; + color: #6a1a1a; + background: rgba(139, 32, 32, 0.1); + } + } + + .bpi-conditions { + margin: 3px 0; + + .bpi-cond-label { + font-family: "IMFellDWPicaSC-Regular", serif; + font-size: 0.75em; + font-style: italic; + color: #7a7060; + } + + .bpi-condition { + display: inline-block; + margin: 1px 2px; + padding: 1px 6px; + border-radius: 3px; + font-size: 0.8em; + } + + .bpi-cond-req { + border: 1px solid #8b2020; + background: rgba(139, 32, 32, 0.08); + color: #6a1a1a; + } + + .bpi-cond-opt { + border: 1px solid #6a7a30; + background: rgba(106, 122, 48, 0.08); + color: #4a5a20; + } + } + + .bpi-description { + margin-top: 7px; + padding-top: 6px; + border-top: 1px dashed #c4a882; + + .bpi-desc-content { + font-size: 0.85em; + color: #191813; + line-height: 1.45; + + p { + margin: 0 0 4px 0; + } + } + } +} + /* ----------------------------------------- */ /* Chat Messages */ /* ----------------------------------------- */ diff --git a/styles/global/item-list.less b/styles/global/item-list.less index 6d08e2f..4f201c0 100644 --- a/styles/global/item-list.less +++ b/styles/global/item-list.less @@ -15,8 +15,15 @@ background-color: lightgray; .item-name { - font-family: "Wolfsbane2Expanded", cursive; - font-size: 1.5em; + font-family: "Wolfsbane2Expanded", cursive !important; + font-size: 1.32em !important; + color: #191813 !important; + } + + .item-field { + font-family: 'Signika', sans-serif !important; + font-size: 0.85em !important; + color: #4b4a44 !important; } } @@ -26,6 +33,8 @@ padding: 3px 0 3px 3px; border-bottom: 1px solid #BBB; align-items: stretch; + color: #4b4a44; + font-size: 0.9em; .item-image { flex: 0 0 30px; @@ -68,6 +77,11 @@ .item-name, .item-field { margin: 0; + color: #333; + font-size: 0.84rem; + font-family: inherit; + display: flex; + align-items: center; } .item-controls-1 { diff --git a/system.json b/system.json index 894bef8..f5d0c6d 100644 --- a/system.json +++ b/system.json @@ -381,7 +381,7 @@ "json" ], "paths": [ - "styles", + "css", "./", "templates", "lang/fr.json" diff --git a/templates/actor/actor-sheet.hbs b/templates/actor/actor-sheet.hbs index b9bb0e2..a7065db 100644 --- a/templates/actor/actor-sheet.hbs +++ b/templates/actor/actor-sheet.hbs @@ -1,4 +1,4 @@ - +
@@ -97,4 +97,4 @@
-
\ No newline at end of file + \ No newline at end of file diff --git a/templates/actor/horde-sheet.hbs b/templates/actor/horde-sheet.hbs index 56c2a80..4501d7d 100644 --- a/templates/actor/horde-sheet.hbs +++ b/templates/actor/horde-sheet.hbs @@ -1,4 +1,4 @@ -
+
@@ -72,4 +72,4 @@
-
\ No newline at end of file + \ No newline at end of file diff --git a/templates/actor/parts/actor-header.hbs b/templates/actor/parts/actor-header.hbs index 213622b..d179dd2 100644 --- a/templates/actor/parts/actor-header.hbs +++ b/templates/actor/parts/actor-header.hbs @@ -2,19 +2,18 @@
-
- +
{{#if (eq charType "player")}}

-
+

-
+

diff --git a/templates/actor/parts/tabs/actor-actions.hbs b/templates/actor/parts/tabs/actor-actions.hbs index 90ff709..49371cb 100644 --- a/templates/actor/parts/tabs/actor-actions.hbs +++ b/templates/actor/parts/tabs/actor-actions.hbs @@ -15,7 +15,7 @@ {{#if ../protection}}
{{item.system.properties.soak.formula}} / {{item.system.properties.soak.value}}
{{/if}} {{#if ../blocking}}
{{item.system.properties.blocking.malus}}
{{/if}} {{#if ../weapon}}{{/if}} {{#if ../ranged}}
{{item.system.properties.range}}
{{else}}
{{/if}} {{#if ../options}}
diff --git a/templates/actor/parts/tabs/actor-biodata.hbs b/templates/actor/parts/tabs/actor-biodata.hbs index 0d8e104..ce52686 100644 --- a/templates/actor/parts/tabs/actor-biodata.hbs +++ b/templates/actor/parts/tabs/actor-biodata.hbs @@ -95,13 +95,9 @@ -{{editor -biography -target='system.details.biography' -button=true -owner=owner -editable=editable -}} + + {{{biography}}} + {{#if (eq charType "player")}}
    @@ -113,7 +109,7 @@ editable=editable
    {{localize "BOL.ui.cost"}}
    {{localize "BOL.ui.value"}}
    - +
    {{#each xplog as |xp idx|}} @@ -162,10 +158,6 @@ editable=editable
-{{editor -notes -target='system.details.notes' -button=true -owner=owner -editable=editable -}} \ No newline at end of file + + {{{notes}}} + \ No newline at end of file diff --git a/templates/actor/parts/tabs/actor-equipment.hbs b/templates/actor/parts/tabs/actor-equipment.hbs index 94249de..08ea0f9 100644 --- a/templates/actor/parts/tabs/actor-equipment.hbs +++ b/templates/actor/parts/tabs/actor-equipment.hbs @@ -1,5 +1,4 @@ - {{#if useBougette}}
    @@ -37,7 +36,7 @@
    {{localize "BOL.ui.qty"}}
    {{localize "BOL.ui.price"}}
    {{localize "BOL.ui.equip"}}
    -
    +
    {{#each weapons as |item id|}}
  1. @@ -90,7 +89,7 @@
    {{localize "BOL.ui.qty"}}
    {{localize "BOL.ui.price"}}
    {{localize "BOL.ui.equip"}}
    -
    +
  2. {{#each protections as |item id|}}
  3. @@ -148,7 +147,7 @@
    {{localize "BOL.ui.qty"}}
    {{localize "BOL.ui.price"}}
    {{localize "BOL.ui.equip"}}
    -
    +
  4. {{#each ammos as |item id|}}
  5. @@ -200,7 +199,7 @@
    {{localize "BOL.ui.qty"}}
    {{localize "BOL.ui.price"}}
    {{localize "BOL.ui.equip"}}
    -
    +
  6. {{#each containers as |item id|}}
  7. @@ -252,7 +251,7 @@
    {{localize "BOL.ui.qty"}}
    {{localize "BOL.ui.price"}}
    {{localize "BOL.ui.equip"}}
    -
    +
  8. {{#each treasure as |item id|}}
  9. @@ -304,7 +303,7 @@
    {{localize "BOL.ui.qty"}}
    {{localize "BOL.ui.price"}}
    {{localize "BOL.ui.equip"}}
    -
    +
  10. {{#each vehicles as |item id|}}
  11. @@ -356,7 +355,7 @@
    {{localize "BOL.ui.qty"}}
    {{localize "BOL.ui.price"}}
    {{localize "BOL.ui.equip"}}
    -
    +
  12. {{#each misc as |item id|}}
  13. diff --git a/templates/actor/vehicle-sheet.hbs b/templates/actor/vehicle-sheet.hbs index 368ea1d..bdcc9c9 100644 --- a/templates/actor/vehicle-sheet.hbs +++ b/templates/actor/vehicle-sheet.hbs @@ -1,4 +1,4 @@ -
    +
    @@ -63,4 +63,4 @@
    -
    \ No newline at end of file +
\ No newline at end of file diff --git a/templates/item/feature-sheet.hbs b/templates/item/feature-sheet.hbs index dfcf9a3..0d8296c 100644 --- a/templates/item/feature-sheet.hbs +++ b/templates/item/feature-sheet.hbs @@ -1,4 +1,4 @@ -
+
{{> "systems/bol/templates/item/parts/item-header.hbs"}} @@ -16,7 +16,7 @@ {{!-- Sheet Body --}}
{{!-- Description Tab --}} -
+
{{#if itemProperties}}
    @@ -27,14 +27,14 @@
{{/if}} - {{editor enrichedDescription target="system.description" button=true editable=isEditable engine="prosemirror"}} + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=isEditable}}
{{!-- Properties Tab --}} -
+
{{> "systems/bol/templates/item/parts/properties/feature-properties.hbs"}}
- +
diff --git a/templates/item/item-sheet.hbs b/templates/item/item-sheet.hbs index a371a43..c76fb86 100644 --- a/templates/item/item-sheet.hbs +++ b/templates/item/item-sheet.hbs @@ -1,4 +1,4 @@ -
+
{{> "systems/bol/templates/item/parts/item-header.hbs"}} @@ -16,7 +16,7 @@ {{!-- Sheet Body --}}
{{!-- Description Tab --}} -
+
{{#if itemProperties}}
    @@ -27,14 +27,14 @@
{{/if}} - {{editor enrichedDescription target="system.description" button=true editable=isEditable engine="prosemirror"}} + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=isEditable}}
{{!-- Properties Tab --}} -
+
{{> "systems/bol/templates/item/parts/properties/item-properties.hbs"}}
- +
diff --git a/templates/item/post-item.hbs b/templates/item/post-item.hbs index 4429261..3efb41e 100644 --- a/templates/item/post-item.hbs +++ b/templates/item/post-item.hbs @@ -1,8 +1,237 @@ -
-

{{name}}

- {{#if img}} - +
+ + {{!-- Header: image + name + type --}} +
+ {{#if img}} + + {{/if}} +
+

{{name}}

+ + {{#if (eq type "feature")}} + {{localize (concat "BOL.featureSubtypes." system.subtype)}} + {{else}} + {{localize (concat "BOL.itemCategory." system.category)}} + {{#if (and (eq system.category "equipment") system.subtype)}} + — {{localize (concat "BOL.equipmentCategory." system.subtype)}} + {{/if}} + {{/if}} + +
+
+ + {{!-- ======= WEAPON ======= --}} + {{#if (or system.properties.weapon (eq system.subtype "weapon"))}} +
+ {{#if system.properties.damage}} +
+ {{localize "BOL.itemProperty.damage"}} + {{system.properties.damage}}{{#if system.properties.damageAttribute}} + {{localize (concat "BOL.attributes." system.properties.damageAttribute)}}{{/if}}{{#if system.properties.damageModifiers}} {{#if (isPositive system.properties.damageModifiers)}}+{{/if}}{{system.properties.damageModifiers}}{{/if}} +
+ {{/if}} + {{#if system.properties.weaponSize}} +
+ {{localize "BOL.itemProperty.weaponSize"}} + {{localize (concat "BOL.weaponSize." system.properties.weaponSize)}} +
+ {{/if}} + {{#if system.properties.attackModifiers}} +
+ {{localize "BOL.itemProperty.attackModifiers"}} + {{system.properties.attackModifiers}} +
+ {{/if}} + {{#if system.properties.range}} +
+ {{localize "BOL.itemProperty.range"}} + {{system.properties.range}} m +
+ {{/if}} + {{#if system.properties.reload}} +
+ {{localize "BOL.itemProperty.reload"}} + {{system.properties.reload}} +
+ {{/if}} +
+
+ {{#if system.properties.melee}}{{localize "BOL.itemProperty.melee"}}{{/if}} + {{#if system.properties.ranged}}{{localize "BOL.itemProperty.ranged"}}{{/if}} + {{#if system.properties.throwing}}{{localize "BOL.itemProperty.throwing"}}{{/if}} + {{#if (lookup system.properties "2H")}}{{localize "BOL.itemProperty.2H"}}{{/if}} + {{#if system.properties.bashing}}{{localize "BOL.itemProperty.bashing"}}{{/if}} + {{#if system.properties.throwable}}{{localize "BOL.itemProperty.throwable"}}{{/if}} + {{#if system.properties.concealable}}{{localize "BOL.itemProperty.concealable"}}{{/if}} + {{#if system.properties.ignoreshield}}{{localize "BOL.itemProperty.ignoreshield"}}{{/if}} + {{#if system.properties.attackBonusDice}}{{localize "BOL.itemProperty.attackBonusDice"}}{{/if}} + {{#if system.properties.attackMalusDice}}{{localize "BOL.itemProperty.attackMalusDice"}}{{/if}} + {{#if system.properties.magical}}{{localize "BOL.itemProperty.magical"}}{{/if}} +
{{/if}} -

Description :

-

{{{system.description}}}

+ + {{!-- ======= PROTECTION ======= --}} + {{#if system.properties.protection}} +
+ {{#if system.properties.armor}} +
+ {{localize "BOL.itemProperty.armorQuality"}} + {{localize (concat "BOL.armorQuality." system.properties.armorQuality)}} +
+
+ {{localize "BOL.itemProperty.soakFormula"}} + {{system.properties.soak.formula}}{{#if system.properties.soak.value}} ({{system.properties.soak.value}}){{/if}} +
+ {{/if}} + {{#if system.properties.helm}} +
+ {{localize "BOL.itemProperty.soakModifiers"}} + {{system.properties.soak.modifier}} +
+ {{/if}} + {{#if system.properties.shield}} +
+ {{localize "BOL.itemProperty.blockingMalus"}} + {{system.properties.blocking.malus}} +
+ {{/if}} + {{#if system.properties.modifiers.init}} +
+ {{localize "BOL.itemModifiers.init"}} + {{system.properties.modifiers.init}} +
+ {{/if}} + {{#if system.properties.modifiers.agility}} +
+ {{localize "BOL.itemModifiers.agility"}} + {{system.properties.modifiers.agility}} +
+ {{/if}} +
+
+ {{#if system.properties.armor}}{{localize "BOL.itemProperty.armor"}}{{/if}} + {{#if system.properties.shield}}{{localize "BOL.itemProperty.shield"}}{{/if}} + {{#if system.properties.helm}}{{localize "BOL.itemProperty.helm"}}{{/if}} + {{#if system.properties.blocking.blocking1}}{{localize "BOL.itemProperty.blocking1Attack"}}{{/if}} + {{#if system.properties.blocking.blockingAll}}{{localize "BOL.itemProperty.blockingAllAttacks"}}{{/if}} + {{#if system.properties.magical}}{{localize "BOL.itemProperty.magical"}}{{/if}} +
+ {{/if}} + + {{!-- ======= SPELL ======= --}} + {{#if (eq system.category "spell")}} +
+
+ {{localize "BOL.ui.circle"}} + + {{#if (eq system.properties.circle 0)}}{{localize "BOL.spellItem.charm"}}{{/if}} + {{#if (eq system.properties.circle 1)}}{{localize "BOL.spellItem.circle1"}}{{/if}} + {{#if (eq system.properties.circle 2)}}{{localize "BOL.spellItem.circle2"}}{{/if}} + {{#if (eq system.properties.circle 3)}}{{localize "BOL.spellItem.circle3"}}{{/if}} + +
+
+ {{localize "BOL.ui.ppcost"}} + {{system.properties.ppcost}} PP +
+ {{#if system.properties.difficulty}} +
+ {{localize "BOL.ui.difficulty"}} + {{system.properties.difficulty}} +
+ {{/if}} + {{#if system.properties.duration}} +
+ {{localize "BOL.ui.duration"}} + {{system.properties.duration}} +
+ {{/if}} +
+ {{#if system.properties.nbmandatoryconditions}} +
+ {{localize "BOL.ui.mandatoryconditions"}} : + {{#each system.properties.mandatoryconditions as |cond idx|}} + {{#if (lt idx ../system.properties.nbmandatoryconditions)}} + {{#if cond}}{{cond}}{{/if}} + {{/if}} + {{/each}} +
+ {{/if}} + {{#if system.properties.nboptionnalconditions}} +
+ {{localize "BOL.ui.optionnalconditions"}} : + {{#each system.properties.optionnalconditions as |cond idx|}} + {{#if (lt idx ../system.properties.nboptionnalconditions)}} + {{#if cond}}{{cond}}{{/if}} + {{/if}} + {{/each}} +
+ {{/if}} +
+ {{#if system.properties.spellkeep}}{{localize "BOL.ui.spellkeep"}}{{/if}} + {{#if system.properties.concentrate}}{{localize "BOL.ui.concentrate"}}{{/if}} + {{#if system.properties.aggressive}}{{localize "BOL.ui.aggressive"}}{{/if}} +
+ {{/if}} + + {{!-- ======= ALCHEMY ======= --}} + {{#if (eq system.category "alchemy")}} +
+
+ {{localize "BOL.ui.alchemyType"}} + {{localize (concat "BOL.alchemyItem." system.properties.alchemytype)}} +
+
+ {{localize "BOL.ui.pccost"}} + {{system.properties.pccost}} PC +
+ {{#if system.properties.pccurrent}} +
+ {{localize "BOL.ui.pcnow"}} + {{system.properties.pccurrent}} +
+ {{/if}} + {{#if system.properties.difficulty}} +
+ {{localize "BOL.ui.difficulty"}} + {{system.properties.difficulty}} +
+ {{/if}} +
+ {{/if}} + + {{!-- ======= FEATURE ======= --}} + {{#if (eq type "feature")}} + {{#if (eq system.subtype "career")}} +
+
+ {{localize "BOL.ui.rank"}} + {{system.rank}} +
+
+
+ {{#if system.properties.sorcerer}}{{localize "BOL.ui.isSorcerer"}}{{/if}} + {{#if system.properties.alchemist}}{{localize "BOL.ui.isAlchemist"}}{{/if}} + {{#if system.properties.priest}}{{localize "BOL.ui.isPriest"}}{{/if}} + {{#if system.properties.astrologer}}{{localize "BOL.ui.isAstrologer"}}{{/if}} +
+ {{/if}} + {{#if (eq system.subtype "boon")}} +
+ {{#if system.properties.isbonusdice}}{{localize "BOL.ui.isbonusdice"}}{{/if}} +
+ {{/if}} + {{#if (eq system.subtype "flaw")}} +
+ {{#if system.properties.ismalusdice}}{{localize "BOL.ui.ismalusdice"}}{{/if}} +
+ {{/if}} + {{/if}} + + {{!-- ======= DESCRIPTION ======= --}} + {{#if system.description}} +
+
{{{system.description}}}
+
+ {{/if}} +