Appv2 + DataModel migration completed
This commit is contained in:
@@ -1,8 +0,0 @@
|
|||||||
// Actor sheet styles
|
|
||||||
|
|
||||||
.actor-sheet {
|
|
||||||
min-width: 720px;
|
|
||||||
min-height: 680px;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Placeholder - to be expanded based on actor-sheet.html
|
|
||||||
@@ -1,90 +0,0 @@
|
|||||||
// Base styles
|
|
||||||
|
|
||||||
* {
|
|
||||||
scrollbar-color: initial;
|
|
||||||
}
|
|
||||||
|
|
||||||
.hawkmoon {
|
|
||||||
font-family: @font-family-base;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Utility classes
|
|
||||||
.flexrow {
|
|
||||||
.flex-row();
|
|
||||||
gap: @spacing-base;
|
|
||||||
}
|
|
||||||
|
|
||||||
.flexcol {
|
|
||||||
.flex-column();
|
|
||||||
gap: @spacing-base;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Item lists
|
|
||||||
.item-list {
|
|
||||||
list-style: none;
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
|
|
||||||
.item {
|
|
||||||
padding: @spacing-small @spacing-base;
|
|
||||||
border-bottom: 1px solid lighten(@color-border, 20%);
|
|
||||||
|
|
||||||
&:hover {
|
|
||||||
background: lighten(@color-secondary, 65%);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.alternate-list {
|
|
||||||
.item:nth-child(even) {
|
|
||||||
background: lighten(@color-secondary, 70%);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Form elements
|
|
||||||
input[type="text"],
|
|
||||||
input[type="number"],
|
|
||||||
textarea,
|
|
||||||
select {
|
|
||||||
.input-base();
|
|
||||||
}
|
|
||||||
|
|
||||||
button {
|
|
||||||
.button-base();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Labels
|
|
||||||
label {
|
|
||||||
.label-base();
|
|
||||||
}
|
|
||||||
|
|
||||||
.generic-label {
|
|
||||||
.label-base();
|
|
||||||
margin: 0 @spacing-base;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Field sizes
|
|
||||||
.item-field-label-short {
|
|
||||||
flex: 0 0 40px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.item-field-label-medium {
|
|
||||||
flex: 0 0 80px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.item-field-label-long {
|
|
||||||
flex: 0 0 120px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.item-field-label-very-long {
|
|
||||||
flex: 0 0 150px;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Padd classes
|
|
||||||
.padd-right {
|
|
||||||
padding-right: @spacing-medium;
|
|
||||||
}
|
|
||||||
|
|
||||||
.padd-left {
|
|
||||||
padding-left: @spacing-medium;
|
|
||||||
}
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
// Cellule sheet styles
|
|
||||||
|
|
||||||
.cellule-sheet {
|
|
||||||
min-width: 720px;
|
|
||||||
min-height: 680px;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Placeholder - to be expanded based on cellule-sheet.html
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
// Chat message styles
|
|
||||||
|
|
||||||
.chat-message {
|
|
||||||
.message-header {
|
|
||||||
.flex-row();
|
|
||||||
gap: @spacing-base;
|
|
||||||
margin-bottom: @spacing-small;
|
|
||||||
}
|
|
||||||
|
|
||||||
.dice-roll {
|
|
||||||
.flex-center();
|
|
||||||
padding: @spacing-base;
|
|
||||||
background: lighten(@color-secondary, 70%);
|
|
||||||
border-radius: @input-border-radius;
|
|
||||||
|
|
||||||
.dice-total {
|
|
||||||
font-size: 1.2rem;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Placeholder - to be expanded based on chat templates
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
// Combat styles
|
|
||||||
|
|
||||||
// Placeholder - combat tracker styles
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
// Creature sheet styles
|
|
||||||
|
|
||||||
.creature-sheet {
|
|
||||||
min-width: 720px;
|
|
||||||
min-height: 680px;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Placeholder - to be expanded based on creature-sheet.html
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
// Dialog styles
|
|
||||||
|
|
||||||
.dialog {
|
|
||||||
.dialog-buttons {
|
|
||||||
.flex-row();
|
|
||||||
justify-content: flex-end;
|
|
||||||
gap: @spacing-base;
|
|
||||||
padding-top: @spacing-medium;
|
|
||||||
border-top: 1px solid @color-border;
|
|
||||||
|
|
||||||
button {
|
|
||||||
min-width: 80px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Placeholder - to be expanded based on roll-dialog-generic.html
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
// Font definitions
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: "Pfeffer";
|
|
||||||
src: url("../assets/fonts/pfeffer-simpelgotisch.regular2.otf")
|
|
||||||
format("opentype");
|
|
||||||
}
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: "Montserrat";
|
|
||||||
src: url("../assets/fonts/Montserrat-Medium.woff") format("woff");
|
|
||||||
font-weight: normal;
|
|
||||||
}
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
// Form elements specific styles
|
|
||||||
|
|
||||||
form {
|
|
||||||
input[type="checkbox"] {
|
|
||||||
width: auto;
|
|
||||||
margin: 0 @spacing-base;
|
|
||||||
}
|
|
||||||
|
|
||||||
input[disabled],
|
|
||||||
select[disabled],
|
|
||||||
textarea[disabled] {
|
|
||||||
opacity: 0.6;
|
|
||||||
cursor: not-allowed;
|
|
||||||
background: lighten(@color-border, 25%);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.editor {
|
|
||||||
min-height: 100px;
|
|
||||||
border: @input-border;
|
|
||||||
border-radius: @input-border-radius;
|
|
||||||
padding: @spacing-base;
|
|
||||||
|
|
||||||
.editor-content {
|
|
||||||
min-height: 80px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
// HUD styles
|
|
||||||
|
|
||||||
// Placeholder - to be expanded based on hud-adversites.html
|
|
||||||
@@ -1,109 +0,0 @@
|
|||||||
// Item sheets styles
|
|
||||||
|
|
||||||
.item-sheet {
|
|
||||||
min-width: 500px;
|
|
||||||
min-height: 400px;
|
|
||||||
|
|
||||||
.sheet-header {
|
|
||||||
.flex-row();
|
|
||||||
gap: @spacing-medium;
|
|
||||||
padding: @spacing-medium;
|
|
||||||
background: lighten(@color-secondary, 65%);
|
|
||||||
border-bottom: 2px solid @color-primary;
|
|
||||||
|
|
||||||
img.item-sheet-img {
|
|
||||||
flex: 0 0 48px;
|
|
||||||
width: 48px;
|
|
||||||
height: 48px;
|
|
||||||
object-fit: cover;
|
|
||||||
border: 2px solid @color-border;
|
|
||||||
border-radius: @input-border-radius;
|
|
||||||
cursor: pointer;
|
|
||||||
|
|
||||||
&:hover {
|
|
||||||
border-color: @color-primary;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.header-fields {
|
|
||||||
flex: 1;
|
|
||||||
|
|
||||||
h1 {
|
|
||||||
margin: 0 0 @spacing-base 0;
|
|
||||||
font-size: 1.2rem;
|
|
||||||
font-weight: bold;
|
|
||||||
border: none;
|
|
||||||
|
|
||||||
input {
|
|
||||||
font-size: 1.2rem;
|
|
||||||
font-weight: bold;
|
|
||||||
border: none;
|
|
||||||
background: transparent;
|
|
||||||
|
|
||||||
&:focus {
|
|
||||||
background: white;
|
|
||||||
border: @input-border;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.header-actions {
|
|
||||||
.flex-row();
|
|
||||||
gap: @spacing-base;
|
|
||||||
|
|
||||||
button {
|
|
||||||
padding: @spacing-small @spacing-base;
|
|
||||||
font-size: @font-size-small;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.sheet-body {
|
|
||||||
padding: @spacing-medium;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Predilections section
|
|
||||||
.predilections-list {
|
|
||||||
.predilection-item {
|
|
||||||
padding: @spacing-base;
|
|
||||||
margin-bottom: @spacing-small;
|
|
||||||
border: 1px solid lighten(@color-border, 15%);
|
|
||||||
border-radius: @input-border-radius;
|
|
||||||
|
|
||||||
.predilection-header {
|
|
||||||
.flex-row();
|
|
||||||
margin-bottom: @spacing-small;
|
|
||||||
|
|
||||||
input[type="text"] {
|
|
||||||
flex: 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
input[type="checkbox"] {
|
|
||||||
margin: 0 @spacing-small;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.predilection-description {
|
|
||||||
textarea {
|
|
||||||
width: 100%;
|
|
||||||
min-height: 40px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Automation section
|
|
||||||
.automation-item {
|
|
||||||
padding: @spacing-base;
|
|
||||||
margin-bottom: @spacing-small;
|
|
||||||
background: lighten(@color-secondary, 70%);
|
|
||||||
border-radius: @input-border-radius;
|
|
||||||
|
|
||||||
hr {
|
|
||||||
margin: @spacing-small 0;
|
|
||||||
border: none;
|
|
||||||
border-top: 1px solid @color-border;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,47 +0,0 @@
|
|||||||
// Item-related styles
|
|
||||||
|
|
||||||
.item-control {
|
|
||||||
flex: 0 0 24px;
|
|
||||||
height: 24px;
|
|
||||||
line-height: 24px;
|
|
||||||
text-align: center;
|
|
||||||
cursor: pointer;
|
|
||||||
border: none;
|
|
||||||
background: transparent;
|
|
||||||
|
|
||||||
i {
|
|
||||||
font-size: @font-size-base;
|
|
||||||
}
|
|
||||||
|
|
||||||
&:hover {
|
|
||||||
color: @color-primary;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.item-image {
|
|
||||||
flex: 0 0 36px;
|
|
||||||
height: 36px;
|
|
||||||
cursor: pointer;
|
|
||||||
|
|
||||||
img {
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
object-fit: cover;
|
|
||||||
border: 1px solid @color-border;
|
|
||||||
border-radius: @input-border-radius;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.item-name {
|
|
||||||
flex: 1;
|
|
||||||
cursor: pointer;
|
|
||||||
|
|
||||||
&:hover {
|
|
||||||
color: @color-primary;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.item-value {
|
|
||||||
flex: 0 0 60px;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
@@ -1,58 +0,0 @@
|
|||||||
// Mixins for Hawkmoon system
|
|
||||||
|
|
||||||
// Flexbox helpers
|
|
||||||
.flex-row {
|
|
||||||
display: flex;
|
|
||||||
flex-direction: row;
|
|
||||||
align-items: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.flex-column {
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
}
|
|
||||||
|
|
||||||
.flex-center {
|
|
||||||
display: flex;
|
|
||||||
justify-content: center;
|
|
||||||
align-items: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Common input styling
|
|
||||||
.input-base {
|
|
||||||
padding: @input-padding;
|
|
||||||
border: @input-border;
|
|
||||||
border-radius: @input-border-radius;
|
|
||||||
font-size: @font-size-base;
|
|
||||||
|
|
||||||
&:focus {
|
|
||||||
outline: none;
|
|
||||||
border-color: @color-primary;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Button styling
|
|
||||||
.button-base {
|
|
||||||
padding: @button-padding;
|
|
||||||
border: @input-border;
|
|
||||||
border-radius: @button-border-radius;
|
|
||||||
background: @color-background;
|
|
||||||
cursor: pointer;
|
|
||||||
font-family: @font-family-base;
|
|
||||||
|
|
||||||
&:hover {
|
|
||||||
background: lighten(@color-secondary, 60%);
|
|
||||||
}
|
|
||||||
|
|
||||||
&:active {
|
|
||||||
background: lighten(@color-secondary, 50%);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Label styling
|
|
||||||
.label-base {
|
|
||||||
font-family: @font-family-base;
|
|
||||||
font-size: @font-size-base;
|
|
||||||
font-weight: 700;
|
|
||||||
color: @color-text-dark;
|
|
||||||
}
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,39 +0,0 @@
|
|||||||
// Tabs navigation
|
|
||||||
|
|
||||||
.tabs {
|
|
||||||
.flex-row();
|
|
||||||
gap: 0;
|
|
||||||
border-bottom: 2px solid @color-border;
|
|
||||||
margin-bottom: @spacing-medium;
|
|
||||||
|
|
||||||
.item {
|
|
||||||
padding: @spacing-base @spacing-large;
|
|
||||||
font-family: @font-family-base;
|
|
||||||
font-size: @font-size-large;
|
|
||||||
font-weight: 700;
|
|
||||||
color: @color-secondary;
|
|
||||||
cursor: pointer;
|
|
||||||
border: none;
|
|
||||||
border-bottom: 3px solid transparent;
|
|
||||||
background: transparent;
|
|
||||||
transition: all 0.2s;
|
|
||||||
|
|
||||||
&:hover {
|
|
||||||
color: @color-primary;
|
|
||||||
background: lighten(@color-secondary, 70%);
|
|
||||||
}
|
|
||||||
|
|
||||||
&.active {
|
|
||||||
color: @color-primary;
|
|
||||||
border-bottom-color: @color-primary;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.tab {
|
|
||||||
display: none;
|
|
||||||
|
|
||||||
&.active {
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,36 +0,0 @@
|
|||||||
// Variables for Hawkmoon system
|
|
||||||
|
|
||||||
// =================== Fonts ===================
|
|
||||||
@font-family-base: Montserrat;
|
|
||||||
@font-family-decorative: Pfeffer;
|
|
||||||
|
|
||||||
// =================== Colors ===================
|
|
||||||
@color-primary: #4a0404;
|
|
||||||
@color-secondary: #403f3e;
|
|
||||||
@color-text-light: #f5f5f5;
|
|
||||||
@color-text-dark: #464331c4;
|
|
||||||
@color-border: #7a7971;
|
|
||||||
@color-background: #fff;
|
|
||||||
|
|
||||||
// =================== Sizes ===================
|
|
||||||
@font-size-small: 0.8rem;
|
|
||||||
@font-size-base: 0.9rem;
|
|
||||||
@font-size-medium: 0.95rem;
|
|
||||||
@font-size-large: 1rem;
|
|
||||||
|
|
||||||
@spacing-small: 2px;
|
|
||||||
@spacing-base: 4px;
|
|
||||||
@spacing-medium: 8px;
|
|
||||||
@spacing-large: 12px;
|
|
||||||
|
|
||||||
// =================== Form Elements ===================
|
|
||||||
@input-padding: 2px 4px;
|
|
||||||
@input-border-radius: 3px;
|
|
||||||
@input-border: 1px solid @color-border;
|
|
||||||
|
|
||||||
// =================== Buttons ===================
|
|
||||||
@button-padding: 4px 8px;
|
|
||||||
@button-border-radius: 3px;
|
|
||||||
|
|
||||||
// =================== Windows ===================
|
|
||||||
@window-header-height: 28px;
|
|
||||||
@@ -1,70 +0,0 @@
|
|||||||
// Window and sheet styles
|
|
||||||
|
|
||||||
.window-app {
|
|
||||||
.window-header {
|
|
||||||
font-family: @font-family-base;
|
|
||||||
|
|
||||||
.window-title {
|
|
||||||
font-size: @font-size-medium;
|
|
||||||
font-weight: normal;
|
|
||||||
color: @color-text-light;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.window-content {
|
|
||||||
background: @color-background;
|
|
||||||
padding: @spacing-medium;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Sheet sections
|
|
||||||
.sheet-header {
|
|
||||||
.flex-row();
|
|
||||||
padding: @spacing-medium;
|
|
||||||
border-bottom: 2px solid @color-primary;
|
|
||||||
margin-bottom: @spacing-medium;
|
|
||||||
|
|
||||||
img.profile-img {
|
|
||||||
flex: 0 0 100px;
|
|
||||||
height: 100px;
|
|
||||||
object-fit: cover;
|
|
||||||
border: 2px solid @color-border;
|
|
||||||
border-radius: @input-border-radius;
|
|
||||||
cursor: pointer;
|
|
||||||
|
|
||||||
&:hover {
|
|
||||||
border-color: @color-primary;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.header-fields {
|
|
||||||
flex: 1;
|
|
||||||
padding-left: @spacing-medium;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.sheet-body {
|
|
||||||
overflow-y: auto;
|
|
||||||
|
|
||||||
section {
|
|
||||||
margin-bottom: @spacing-large;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Edit/Play mode toggle
|
|
||||||
.sheet-mode-toggle {
|
|
||||||
position: absolute;
|
|
||||||
top: @spacing-base;
|
|
||||||
right: 80px;
|
|
||||||
z-index: 10;
|
|
||||||
|
|
||||||
button {
|
|
||||||
padding: @spacing-small @spacing-base;
|
|
||||||
font-size: @font-size-small;
|
|
||||||
|
|
||||||
&.active {
|
|
||||||
background: @color-primary;
|
|
||||||
color: @color-text-light;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
177
modules/applications/hawkmoon-roll-dialog.mjs
Normal file
177
modules/applications/hawkmoon-roll-dialog.mjs
Normal file
@@ -0,0 +1,177 @@
|
|||||||
|
import { HawkmoonUtility } from "../hawkmoon-utility.js"
|
||||||
|
import { HAWKMOON_CONFIG } from "../hawkmoon-config.js"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Dialogue de jet de dé pour Hawkmoon - Version DialogV2
|
||||||
|
*/
|
||||||
|
export class HawkmoonRollDialog {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create and display the roll dialog
|
||||||
|
* @param {HawkmoonActor} actor - The actor making the roll
|
||||||
|
* @param {Object} rollData - Data for the roll
|
||||||
|
* @returns {Promise<HawkmoonRollDialog>}
|
||||||
|
*/
|
||||||
|
static async create(actor, rollData) {
|
||||||
|
// Préparer le contexte pour le template
|
||||||
|
const context = {
|
||||||
|
...rollData,
|
||||||
|
difficulte: String(rollData.difficulte || 0), // Convertir en string pour matcher les options du select
|
||||||
|
img: actor.img,
|
||||||
|
name: actor.name,
|
||||||
|
config: HAWKMOON_CONFIG,
|
||||||
|
}
|
||||||
|
|
||||||
|
// Si attrKey est "tochoose", préparer la liste des attributs sélectionnables
|
||||||
|
if (rollData.attrKey === "tochoose") {
|
||||||
|
context.selectableAttributes = actor.system.attributs
|
||||||
|
// Ne pas changer attrKey ni attr - l'utilisateur doit choisir
|
||||||
|
}
|
||||||
|
|
||||||
|
// Rendre le template en HTML
|
||||||
|
const content = await foundry.applications.handlebars.renderTemplate(
|
||||||
|
"systems/fvtt-hawkmoon-cyd/templates/roll-dialog-generic.hbs",
|
||||||
|
context
|
||||||
|
)
|
||||||
|
|
||||||
|
// Utiliser DialogV2.wait avec le HTML rendu
|
||||||
|
return foundry.applications.api.DialogV2.wait({
|
||||||
|
window: { title: "Test de Capacité", icon: "fa-solid fa-dice-d20" },
|
||||||
|
classes: ["hawkmoon-roll-dialog"],
|
||||||
|
position: { width: 480 },
|
||||||
|
modal: false, // Permettre l'interaction avec le canvas pour garder la cible sélectionnée
|
||||||
|
content,
|
||||||
|
buttons: [
|
||||||
|
{
|
||||||
|
action: "rolld10",
|
||||||
|
label: "Lancer 1d10",
|
||||||
|
icon: "fa-solid fa-dice-d10",
|
||||||
|
default: true,
|
||||||
|
callback: (event, button, dialog) => {
|
||||||
|
this._updateRollDataFromForm(rollData, button.form.elements, actor)
|
||||||
|
rollData.mainDice = "d10"
|
||||||
|
HawkmoonUtility.rollHawkmoon(rollData)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
action: "rolld20",
|
||||||
|
label: "Lancer 1d20",
|
||||||
|
icon: "fa-solid fa-dice-d20",
|
||||||
|
callback: (event, button, dialog) => {
|
||||||
|
this._updateRollDataFromForm(rollData, button.form.elements, actor)
|
||||||
|
rollData.mainDice = "d20"
|
||||||
|
HawkmoonUtility.rollHawkmoon(rollData)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
],
|
||||||
|
rejectClose: false,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Mettre à jour rollData avec les valeurs du formulaire
|
||||||
|
* @param {Object} rollData - L'objet rollData à mettre à jour
|
||||||
|
* @param {HTMLFormControlsCollection} formElements - Les éléments du formulaire
|
||||||
|
* @param {HawkmoonActor} actor - L'acteur pour récupérer les attributs
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
static _updateRollDataFromForm(rollData, formElements, actor) {
|
||||||
|
// Attributs
|
||||||
|
if (formElements.attrKey) {
|
||||||
|
rollData.attrKey = formElements.attrKey.value
|
||||||
|
// Si l'attribut a changé, mettre à jour rollData.attr
|
||||||
|
if (rollData.attrKey !== "tochoose" && rollData.attrKey !== "none" && actor) {
|
||||||
|
rollData.attr = foundry.utils.duplicate(actor.system.attributs[rollData.attrKey])
|
||||||
|
rollData.actionImg = "systems/fvtt-hawkmoon-cyd/assets/icons/" + actor.system.attributs[rollData.attrKey].labelnorm + ".webp"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (formElements.attrKey2) {
|
||||||
|
rollData.attrKey2 = formElements.attrKey2.value
|
||||||
|
}
|
||||||
|
|
||||||
|
// Modificateurs de base
|
||||||
|
if (formElements.difficulte) {
|
||||||
|
rollData.difficulte = Number(formElements.difficulte.value)
|
||||||
|
}
|
||||||
|
if (formElements.modificateur) {
|
||||||
|
rollData.modificateur = Number(formElements.modificateur.value)
|
||||||
|
}
|
||||||
|
if (formElements.soutiens) {
|
||||||
|
rollData.soutiens = Number(formElements.soutiens.value)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Compétence
|
||||||
|
if (formElements.maitrise) {
|
||||||
|
rollData.maitriseId = formElements.maitrise.value
|
||||||
|
}
|
||||||
|
if (formElements.talents) {
|
||||||
|
// Récupérer toutes les options sélectionnées (select multiple)
|
||||||
|
const selectedOptions = Array.from(formElements.talents.selectedOptions)
|
||||||
|
rollData.selectedTalents = selectedOptions.map(opt => opt.value)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Modificateurs de tir
|
||||||
|
if (formElements.tailleCible) {
|
||||||
|
rollData.tailleCible = formElements.tailleCible.value
|
||||||
|
}
|
||||||
|
if (formElements.tireurDeplacement) {
|
||||||
|
rollData.tireurDeplacement = formElements.tireurDeplacement.value
|
||||||
|
}
|
||||||
|
if (formElements.cibleCouvert) {
|
||||||
|
rollData.cibleCouvert = formElements.cibleCouvert.value
|
||||||
|
}
|
||||||
|
if (formElements.distanceTir) {
|
||||||
|
rollData.distanceTir = formElements.distanceTir.value
|
||||||
|
}
|
||||||
|
if (formElements.cibleDeplace) {
|
||||||
|
rollData.cibleDeplace = formElements.cibleDeplace.checked
|
||||||
|
}
|
||||||
|
if (formElements.cibleCaC) {
|
||||||
|
rollData.cibleCaC = formElements.cibleCaC.checked
|
||||||
|
}
|
||||||
|
|
||||||
|
// Modificateurs de combat (checkboxes)
|
||||||
|
if (formElements.defenseurAuSol) {
|
||||||
|
rollData.defenseurAuSol = formElements.defenseurAuSol.checked
|
||||||
|
}
|
||||||
|
if (formElements.ambidextre1) {
|
||||||
|
rollData.ambidextre1 = formElements.ambidextre1.checked
|
||||||
|
}
|
||||||
|
if (formElements.ambidextre2) {
|
||||||
|
rollData.ambidextre2 = formElements.ambidextre2.checked
|
||||||
|
}
|
||||||
|
if (formElements.attaqueMonte) {
|
||||||
|
rollData.attaqueMonte = formElements.attaqueMonte.checked
|
||||||
|
}
|
||||||
|
if (formElements.defenseurAveugle) {
|
||||||
|
rollData.defenseurAveugle = formElements.defenseurAveugle.checked
|
||||||
|
}
|
||||||
|
if (formElements.defenseurDeDos) {
|
||||||
|
rollData.defenseurDeDos = formElements.defenseurDeDos.checked
|
||||||
|
}
|
||||||
|
if (formElements.defenseurRestreint) {
|
||||||
|
rollData.defenseurRestreint = formElements.defenseurRestreint.checked
|
||||||
|
}
|
||||||
|
if (formElements.defenseurImmobilise) {
|
||||||
|
rollData.defenseurImmobilise = formElements.defenseurImmobilise.checked
|
||||||
|
}
|
||||||
|
if (formElements.attaqueCharge) {
|
||||||
|
rollData.attaqueCharge = formElements.attaqueCharge.checked
|
||||||
|
}
|
||||||
|
if (formElements.chargeCavalerie) {
|
||||||
|
rollData.chargeCavalerie = formElements.chargeCavalerie.checked
|
||||||
|
}
|
||||||
|
if (formElements.attaquantsMultiple) {
|
||||||
|
rollData.attaquantsMultiple = formElements.attaquantsMultiple.checked
|
||||||
|
}
|
||||||
|
if (formElements.feinte) {
|
||||||
|
rollData.feinte = formElements.feinte.checked
|
||||||
|
}
|
||||||
|
if (formElements.contenir) {
|
||||||
|
rollData.contenir = formElements.contenir.checked
|
||||||
|
}
|
||||||
|
if (formElements.attaqueDesarme) {
|
||||||
|
rollData.attaqueDesarme = formElements.attaqueDesarme.checked
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -10,3 +10,8 @@ export { default as HawkmoonArtefactSheet } from "./artefact-sheet.mjs"
|
|||||||
export { default as HawkmoonRessourceSheet } from "./ressource-sheet.mjs"
|
export { default as HawkmoonRessourceSheet } from "./ressource-sheet.mjs"
|
||||||
export { default as HawkmoonContactSheet } from "./contact-sheet.mjs"
|
export { default as HawkmoonContactSheet } from "./contact-sheet.mjs"
|
||||||
export { default as HawkmoonMutationSheet } from "./mutation-sheet.mjs"
|
export { default as HawkmoonMutationSheet } from "./mutation-sheet.mjs"
|
||||||
|
|
||||||
|
// Actor sheets
|
||||||
|
export { default as HawkmoonPersonnageSheet } from "./personnage-sheet.mjs"
|
||||||
|
export { default as HawkmoonCreatureSheet } from "./creature-sheet.mjs"
|
||||||
|
export { default as HawkmoonCelluleSheet } from "./cellule-sheet.mjs"
|
||||||
|
|||||||
547
modules/applications/sheets/base-actor-sheet.mjs
Normal file
547
modules/applications/sheets/base-actor-sheet.mjs
Normal file
@@ -0,0 +1,547 @@
|
|||||||
|
const { HandlebarsApplicationMixin } = foundry.applications.api
|
||||||
|
|
||||||
|
import { HawkmoonUtility } from "../../hawkmoon-utility.js"
|
||||||
|
import { HawkmoonAutomation } from "../../hawkmoon-automation.js"
|
||||||
|
|
||||||
|
export default class HawkmoonActorSheet extends HandlebarsApplicationMixin(foundry.applications.sheets.ActorSheetV2) {
|
||||||
|
/**
|
||||||
|
* Different sheet modes.
|
||||||
|
* @enum {number}
|
||||||
|
*/
|
||||||
|
static SHEET_MODES = { EDIT: 0, PLAY: 1 }
|
||||||
|
|
||||||
|
constructor(options = {}) {
|
||||||
|
super(options)
|
||||||
|
this.#dragDrop = this.#createDragDropHandlers()
|
||||||
|
this._sheetMode = this.constructor.SHEET_MODES.PLAY // Commencer en mode visualisation
|
||||||
|
}
|
||||||
|
|
||||||
|
#dragDrop
|
||||||
|
|
||||||
|
/** @override */
|
||||||
|
static DEFAULT_OPTIONS = {
|
||||||
|
classes: ["fvtt-hawkmoon-cyd", "sheet", "actor"],
|
||||||
|
position: {
|
||||||
|
width: 640,
|
||||||
|
height: 720,
|
||||||
|
},
|
||||||
|
window: {
|
||||||
|
resizable: true,
|
||||||
|
},
|
||||||
|
form: {
|
||||||
|
submitOnChange: true,
|
||||||
|
closeOnSubmit: false,
|
||||||
|
},
|
||||||
|
dragDrop: [{ dragSelector: ".item-list .item", dropSelector: "form" }],
|
||||||
|
actions: {
|
||||||
|
editImage: HawkmoonActorSheet.#onEditImage,
|
||||||
|
toggleSheet: HawkmoonActorSheet.#onToggleSheet,
|
||||||
|
editItem: HawkmoonActorSheet.#onEditItem,
|
||||||
|
deleteItem: HawkmoonActorSheet.#onDeleteItem,
|
||||||
|
createItem: HawkmoonActorSheet.#onCreateItem,
|
||||||
|
equipItem: HawkmoonActorSheet.#onEquipItem,
|
||||||
|
modifyQuantity: HawkmoonActorSheet.#onModifyQuantity,
|
||||||
|
modifyAdversite: HawkmoonActorSheet.#onModifyAdversite,
|
||||||
|
rollInitiative: HawkmoonActorSheet.#onRollInitiative,
|
||||||
|
rollAttribut: HawkmoonActorSheet.#onRollAttribut,
|
||||||
|
rollCompetence: HawkmoonActorSheet.#onRollCompetence,
|
||||||
|
rollArmeOffensif: HawkmoonActorSheet.#onRollArmeOffensif,
|
||||||
|
rollArmeDegats: HawkmoonActorSheet.#onRollArmeDegats,
|
||||||
|
rollAssommer: HawkmoonActorSheet.#onRollAssommer,
|
||||||
|
rollCoupBas: HawkmoonActorSheet.#onRollCoupBas,
|
||||||
|
rollImmobiliser: HawkmoonActorSheet.#onRollImmobiliser,
|
||||||
|
rollRepousser: HawkmoonActorSheet.#onRollRepousser,
|
||||||
|
rollDesengager: HawkmoonActorSheet.#onRollDesengager,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Is the sheet currently in 'Play' mode?
|
||||||
|
* @type {boolean}
|
||||||
|
*/
|
||||||
|
get isPlayMode() {
|
||||||
|
// Initialize if not set
|
||||||
|
if (this._sheetMode === undefined) this._sheetMode = this.constructor.SHEET_MODES.PLAY
|
||||||
|
return this._sheetMode === this.constructor.SHEET_MODES.PLAY
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Is the sheet currently in 'Edit' mode?
|
||||||
|
* @type {boolean}
|
||||||
|
*/
|
||||||
|
get isEditMode() {
|
||||||
|
// Initialize if not set
|
||||||
|
if (this._sheetMode === undefined) this._sheetMode = this.constructor.SHEET_MODES.PLAY
|
||||||
|
return this._sheetMode === this.constructor.SHEET_MODES.EDIT
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tab groups state
|
||||||
|
* @type {object}
|
||||||
|
*/
|
||||||
|
tabGroups = { primary: "principal" }
|
||||||
|
|
||||||
|
/** @override */
|
||||||
|
async _prepareContext() {
|
||||||
|
const actor = this.document
|
||||||
|
|
||||||
|
const context = {
|
||||||
|
actor: actor,
|
||||||
|
system: actor.system,
|
||||||
|
source: actor.toObject(),
|
||||||
|
fields: actor.schema.fields,
|
||||||
|
systemFields: actor.system.schema.fields,
|
||||||
|
isEditable: this.isEditable,
|
||||||
|
isEditMode: this.isEditMode,
|
||||||
|
isPlayMode: this.isPlayMode,
|
||||||
|
isGM: game.user.isGM,
|
||||||
|
config: CONFIG.HAWKMOON,
|
||||||
|
enrichedDescription: await foundry.applications.ux.TextEditor.implementation.enrichHTML(actor.system.biodata?.description || "", { async: true }),
|
||||||
|
enrichedHabitat: await foundry.applications.ux.TextEditor.implementation.enrichHTML(actor.system.biodata?.habitat || "", { async: true }),
|
||||||
|
}
|
||||||
|
|
||||||
|
return context
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @override */
|
||||||
|
_onRender(context, options) {
|
||||||
|
super._onRender(context, options)
|
||||||
|
|
||||||
|
// Activate drag & drop handlers
|
||||||
|
this.#dragDrop.forEach(d => d.bind(this.element))
|
||||||
|
|
||||||
|
// Manual tab navigation
|
||||||
|
const html = this.element
|
||||||
|
const tabLinks = html.querySelectorAll('a.item[data-tab]')
|
||||||
|
const tabContents = html.querySelectorAll('.tab[data-tab]')
|
||||||
|
|
||||||
|
// Hide all tabs initially
|
||||||
|
tabContents.forEach(tab => {
|
||||||
|
tab.classList.remove('active')
|
||||||
|
tab.style.display = 'none'
|
||||||
|
})
|
||||||
|
|
||||||
|
// Show active tab
|
||||||
|
const activeTab = this.tabGroups.primary
|
||||||
|
const activeTabContent = html.querySelector(`.tab[data-tab="${activeTab}"]`)
|
||||||
|
if (activeTabContent) {
|
||||||
|
activeTabContent.classList.add('active')
|
||||||
|
activeTabContent.style.display = 'block'
|
||||||
|
}
|
||||||
|
|
||||||
|
// Activate the corresponding nav link
|
||||||
|
tabLinks.forEach(link => {
|
||||||
|
if (link.dataset.tab === activeTab) {
|
||||||
|
link.classList.add('active')
|
||||||
|
} else {
|
||||||
|
link.classList.remove('active')
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
// Tab click handler
|
||||||
|
tabLinks.forEach(link => {
|
||||||
|
link.addEventListener('click', (event) => {
|
||||||
|
event.preventDefault()
|
||||||
|
const tab = link.dataset.tab
|
||||||
|
|
||||||
|
// Update state
|
||||||
|
this.tabGroups.primary = tab
|
||||||
|
|
||||||
|
// Hide all tabs
|
||||||
|
tabContents.forEach(t => {
|
||||||
|
t.classList.remove('active')
|
||||||
|
t.style.display = 'none'
|
||||||
|
})
|
||||||
|
|
||||||
|
// Show selected tab
|
||||||
|
const selectedTab = html.querySelector(`.tab[data-tab="${tab}"]`)
|
||||||
|
if (selectedTab) {
|
||||||
|
selectedTab.classList.add('active')
|
||||||
|
selectedTab.style.display = 'block'
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update nav links
|
||||||
|
tabLinks.forEach(l => {
|
||||||
|
if (l.dataset.tab === tab) {
|
||||||
|
l.classList.add('active')
|
||||||
|
} else {
|
||||||
|
l.classList.remove('active')
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
// Inline item editing
|
||||||
|
html.querySelectorAll('.edit-item-data').forEach(input => {
|
||||||
|
input.addEventListener('change', (event) => {
|
||||||
|
const li = event.target.closest('.item')
|
||||||
|
const itemId = li.dataset.itemId
|
||||||
|
const itemType = li.dataset.itemType
|
||||||
|
const itemField = event.target.dataset.itemField
|
||||||
|
const dataType = event.target.dataset.dtype
|
||||||
|
const value = event.target.value
|
||||||
|
this.actor.editItemField(itemId, itemType, itemField, dataType, value)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// #region Drag & Drop
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create drag-and-drop workflow handlers for this Application
|
||||||
|
* @returns {DragDrop[]} An array of DragDrop handlers
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
#createDragDropHandlers() {
|
||||||
|
return this.options.dragDrop.map((d) => {
|
||||||
|
d.permissions = {
|
||||||
|
dragstart: this._canDragStart.bind(this),
|
||||||
|
drop: this._canDragDrop.bind(this),
|
||||||
|
}
|
||||||
|
d.callbacks = {
|
||||||
|
dragstart: this._onDragStart.bind(this),
|
||||||
|
drop: this._onDrop.bind(this),
|
||||||
|
}
|
||||||
|
return new foundry.applications.ux.DragDrop(d)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Define whether a user is able to begin a dragstart workflow for a given drag selector
|
||||||
|
* @param {string} selector The candidate HTML selector for dragging
|
||||||
|
* @returns {boolean} Can the current user drag this selector?
|
||||||
|
* @protected
|
||||||
|
*/
|
||||||
|
_canDragStart(selector) {
|
||||||
|
return this.isEditable
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Define whether a user is able to conclude a drag-and-drop workflow for a given drop selector
|
||||||
|
* @param {string} selector The candidate HTML selector for the drop target
|
||||||
|
* @returns {boolean} Can the current user drop on this selector?
|
||||||
|
* @protected
|
||||||
|
*/
|
||||||
|
_canDragDrop(selector) {
|
||||||
|
return this.isEditable
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Callback actions which occur at the beginning of a drag start workflow.
|
||||||
|
* @param {DragEvent} event The originating DragEvent
|
||||||
|
* @protected
|
||||||
|
*/
|
||||||
|
_onDragStart(event) {
|
||||||
|
const li = event.currentTarget.closest(".item")
|
||||||
|
if (!li?.dataset.itemId) return
|
||||||
|
const item = this.actor.items.get(li.dataset.itemId)
|
||||||
|
if (!item) return
|
||||||
|
|
||||||
|
const dragData = item.toDragData()
|
||||||
|
event.dataTransfer.setData("text/plain", JSON.stringify(dragData))
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Callback actions which occur when a dragged element is dropped on a target.
|
||||||
|
* @param {DragEvent} event The originating DragEvent
|
||||||
|
* @protected
|
||||||
|
*/
|
||||||
|
async _onDrop(event) {
|
||||||
|
const data = foundry.applications.ux.TextEditor.implementation.getDragEventData(event)
|
||||||
|
const actor = this.actor
|
||||||
|
|
||||||
|
// Handle different data types
|
||||||
|
switch (data.type) {
|
||||||
|
case "Item":
|
||||||
|
return this._onDropItem(event, data)
|
||||||
|
case "Actor":
|
||||||
|
return this._onDropActor(event, data)
|
||||||
|
case "ActiveEffect":
|
||||||
|
return this._onDropActiveEffect(event, data)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle dropping an Item on the actor sheet
|
||||||
|
* @param {DragEvent} event
|
||||||
|
* @param {object} data
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
async _onDropItem(event, data) {
|
||||||
|
if (!this.actor.isOwner) return false
|
||||||
|
|
||||||
|
let item = await fromUuid(data.uuid)
|
||||||
|
if (item.pack) {
|
||||||
|
item = await HawkmoonUtility.searchItem(item)
|
||||||
|
}
|
||||||
|
|
||||||
|
const autoresult = HawkmoonAutomation.processAutomations("on-drop", item, this.actor)
|
||||||
|
if (autoresult.isValid) {
|
||||||
|
// In AppV2, we need to get the item data differently
|
||||||
|
const itemData = item.toObject ? item.toObject() : item
|
||||||
|
return this.actor.createEmbeddedDocuments("Item", [itemData])
|
||||||
|
} else {
|
||||||
|
ui.notifications.warn(autoresult.warningMessage)
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle dropping an Actor on the sheet
|
||||||
|
* @param {DragEvent} event
|
||||||
|
* @param {object} data
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
async _onDropActor(event, data) {
|
||||||
|
// To be implemented by subclasses if needed
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle dropping an ActiveEffect on the sheet
|
||||||
|
* @param {DragEvent} event
|
||||||
|
* @param {object} data
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
async _onDropActiveEffect(event, data) {
|
||||||
|
// To be implemented by subclasses if needed
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// #endregion
|
||||||
|
|
||||||
|
// #region Action Handlers
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Toggle between edit and play mode
|
||||||
|
* @param {Event} event
|
||||||
|
* @param {HTMLElement} target
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
static #onToggleSheet(event, target) {
|
||||||
|
console.log("Toggle sheet clicked", this)
|
||||||
|
const wasEditMode = this.isEditMode
|
||||||
|
console.log("Current mode:", this._sheetMode, "isEditMode:", wasEditMode, "isPlayMode:", this.isPlayMode)
|
||||||
|
this._sheetMode = wasEditMode ? this.constructor.SHEET_MODES.PLAY : this.constructor.SHEET_MODES.EDIT
|
||||||
|
console.log("New mode set to:", this._sheetMode, "(", wasEditMode ? "PLAY" : "EDIT", ")")
|
||||||
|
console.log("After change - isEditMode:", this.isEditMode, "isPlayMode:", this.isPlayMode)
|
||||||
|
this.render({ force: true })
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Edit the actor image
|
||||||
|
* @param {Event} event
|
||||||
|
* @param {HTMLElement} target
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
static async #onEditImage(event, target) {
|
||||||
|
const fp = new FilePicker({
|
||||||
|
type: "image",
|
||||||
|
current: this.actor.img,
|
||||||
|
callback: (path) => {
|
||||||
|
this.actor.update({ img: path })
|
||||||
|
},
|
||||||
|
})
|
||||||
|
return fp.browse()
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Edit an item
|
||||||
|
* @param {Event} event
|
||||||
|
* @param {HTMLElement} target
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
static async #onEditItem(event, target) {
|
||||||
|
const li = target.closest(".item")
|
||||||
|
const itemId = li?.dataset.itemId
|
||||||
|
if (!itemId) return
|
||||||
|
const item = this.actor.items.get(itemId)
|
||||||
|
if (item) item.sheet.render(true)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Delete an item
|
||||||
|
* @param {Event} event
|
||||||
|
* @param {HTMLElement} target
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
static async #onDeleteItem(event, target) {
|
||||||
|
const li = target.closest(".item")
|
||||||
|
await HawkmoonUtility.confirmDelete(this, li)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new item
|
||||||
|
* @param {Event} event
|
||||||
|
* @param {HTMLElement} target
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
static async #onCreateItem(event, target) {
|
||||||
|
const itemType = target.dataset.type
|
||||||
|
await this.actor.createEmbeddedDocuments("Item", [{ name: `Nouveau ${itemType}`, type: itemType }], { renderSheet: true })
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Equip/unequip an item
|
||||||
|
* @param {Event} event
|
||||||
|
* @param {HTMLElement} target
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
static async #onEquipItem(event, target) {
|
||||||
|
const li = target.closest(".item")
|
||||||
|
const itemId = li?.dataset.itemId
|
||||||
|
if (itemId) {
|
||||||
|
await this.actor.equipItem(itemId)
|
||||||
|
this.render()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Modify item quantity
|
||||||
|
* @param {Event} event
|
||||||
|
* @param {HTMLElement} target
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
static async #onModifyQuantity(event, target) {
|
||||||
|
const li = target.closest(".item")
|
||||||
|
const itemId = li?.dataset.itemId
|
||||||
|
const value = Number(target.dataset.quantiteValue)
|
||||||
|
if (itemId) {
|
||||||
|
await this.actor.incDecQuantity(itemId, value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Modify adversité
|
||||||
|
* @param {Event} event
|
||||||
|
* @param {HTMLElement} target
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
static async #onModifyAdversite(event, target) {
|
||||||
|
const li = target.closest(".item")
|
||||||
|
const adv = li?.dataset.adversite
|
||||||
|
const value = Number(target.dataset.adversiteValue)
|
||||||
|
if (adv) {
|
||||||
|
await this.actor.incDecAdversite(adv, value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Roll initiative
|
||||||
|
* @param {Event} event
|
||||||
|
* @param {HTMLElement} target
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
static async #onRollInitiative(event, target) {
|
||||||
|
await this.actor.rollAttribut("adr", true)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Roll attribut
|
||||||
|
* @param {Event} event
|
||||||
|
* @param {HTMLElement} target
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
static async #onRollAttribut(event, target) {
|
||||||
|
const li = target.closest(".item")
|
||||||
|
const attrKey = li?.dataset.attrKey
|
||||||
|
if (attrKey) {
|
||||||
|
await this.actor.rollAttribut(attrKey, false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Roll competence
|
||||||
|
* @param {Event} event
|
||||||
|
* @param {HTMLElement} target
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
static async #onRollCompetence(event, target) {
|
||||||
|
const li = target.closest(".item")
|
||||||
|
const attrKey = target.dataset.attrKey
|
||||||
|
const compId = li?.dataset.itemId
|
||||||
|
if (attrKey && compId) {
|
||||||
|
await this.actor.rollCompetence(attrKey, compId)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Roll arme offensif
|
||||||
|
* @param {Event} event
|
||||||
|
* @param {HTMLElement} target
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
static async #onRollArmeOffensif(event, target) {
|
||||||
|
const li = target.closest(".item")
|
||||||
|
const armeId = li?.dataset.itemId
|
||||||
|
if (armeId) {
|
||||||
|
await this.actor.rollArmeOffensif(armeId)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Roll arme degats
|
||||||
|
* @param {Event} event
|
||||||
|
* @param {HTMLElement} target
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
static async #onRollArmeDegats(event, target) {
|
||||||
|
const li = target.closest(".item")
|
||||||
|
const armeId = li?.dataset.itemId
|
||||||
|
if (armeId) {
|
||||||
|
await this.actor.rollArmeDegats(armeId)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Roll assommer
|
||||||
|
* @param {Event} event
|
||||||
|
* @param {HTMLElement} target
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
static async #onRollAssommer(event, target) {
|
||||||
|
await this.actor.rollAssommer()
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Roll coup bas
|
||||||
|
* @param {Event} event
|
||||||
|
* @param {HTMLElement} target
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
static async #onRollCoupBas(event, target) {
|
||||||
|
await this.actor.rollCoupBas()
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Roll immobiliser
|
||||||
|
* @param {Event} event
|
||||||
|
* @param {HTMLElement} target
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
static async #onRollImmobiliser(event, target) {
|
||||||
|
await this.actor.rollImmobiliser()
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Roll repousser
|
||||||
|
* @param {Event} event
|
||||||
|
* @param {HTMLElement} target
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
static async #onRollRepousser(event, target) {
|
||||||
|
await this.actor.rollRepousser()
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Roll désengager
|
||||||
|
* @param {Event} event
|
||||||
|
* @param {HTMLElement} target
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
static async #onRollDesengager(event, target) {
|
||||||
|
await this.actor.rollDesengager()
|
||||||
|
}
|
||||||
|
|
||||||
|
// #endregion
|
||||||
|
}
|
||||||
@@ -1,12 +1,6 @@
|
|||||||
const { HandlebarsApplicationMixin } = foundry.applications.api
|
const { HandlebarsApplicationMixin } = foundry.applications.api
|
||||||
|
|
||||||
export default class HawkmoonItemSheet extends HandlebarsApplicationMixin(foundry.applications.sheets.ItemSheetV2) {
|
export default class HawkmoonItemSheet extends HandlebarsApplicationMixin(foundry.applications.sheets.ItemSheetV2) {
|
||||||
/**
|
|
||||||
* Different sheet modes.
|
|
||||||
* @enum {number}
|
|
||||||
*/
|
|
||||||
static SHEET_MODES = { EDIT: 0, PLAY: 1 }
|
|
||||||
|
|
||||||
constructor(options = {}) {
|
constructor(options = {}) {
|
||||||
super(options)
|
super(options)
|
||||||
this.#dragDrop = this.#createDragDropHandlers()
|
this.#dragDrop = this.#createDragDropHandlers()
|
||||||
@@ -19,7 +13,7 @@ export default class HawkmoonItemSheet extends HandlebarsApplicationMixin(foundr
|
|||||||
classes: ["fvtt-hawkmoon-cyd", "item"],
|
classes: ["fvtt-hawkmoon-cyd", "item"],
|
||||||
position: {
|
position: {
|
||||||
width: 620,
|
width: 620,
|
||||||
height: "auto",
|
height: 600,
|
||||||
},
|
},
|
||||||
form: {
|
form: {
|
||||||
submitOnChange: true,
|
submitOnChange: true,
|
||||||
@@ -36,7 +30,6 @@ export default class HawkmoonItemSheet extends HandlebarsApplicationMixin(foundr
|
|||||||
],
|
],
|
||||||
dragDrop: [{ dragSelector: "[data-drag]", dropSelector: null }],
|
dragDrop: [{ dragSelector: "[data-drag]", dropSelector: null }],
|
||||||
actions: {
|
actions: {
|
||||||
toggleSheet: HawkmoonItemSheet.#onToggleSheet,
|
|
||||||
editImage: HawkmoonItemSheet.#onEditImage,
|
editImage: HawkmoonItemSheet.#onEditImage,
|
||||||
postItem: HawkmoonItemSheet.#onPostItem,
|
postItem: HawkmoonItemSheet.#onPostItem,
|
||||||
addPredilection: HawkmoonItemSheet.#onAddPredilection,
|
addPredilection: HawkmoonItemSheet.#onAddPredilection,
|
||||||
@@ -46,12 +39,6 @@ export default class HawkmoonItemSheet extends HandlebarsApplicationMixin(foundr
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* The current sheet mode.
|
|
||||||
* @type {number}
|
|
||||||
*/
|
|
||||||
_sheetMode = this.constructor.SHEET_MODES.PLAY
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tab groups state
|
* Tab groups state
|
||||||
* @type {object}
|
* @type {object}
|
||||||
@@ -62,18 +49,6 @@ export default class HawkmoonItemSheet extends HandlebarsApplicationMixin(foundr
|
|||||||
* Is the sheet currently in 'Play' mode?
|
* Is the sheet currently in 'Play' mode?
|
||||||
* @type {boolean}
|
* @type {boolean}
|
||||||
*/
|
*/
|
||||||
get isPlayMode() {
|
|
||||||
return this._sheetMode === this.constructor.SHEET_MODES.PLAY
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Is the sheet currently in 'Edit' mode?
|
|
||||||
* @type {boolean}
|
|
||||||
*/
|
|
||||||
get isEditMode() {
|
|
||||||
return this._sheetMode === this.constructor.SHEET_MODES.EDIT
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @override */
|
/** @override */
|
||||||
async _prepareContext() {
|
async _prepareContext() {
|
||||||
const context = {
|
const context = {
|
||||||
@@ -83,8 +58,7 @@ export default class HawkmoonItemSheet extends HandlebarsApplicationMixin(foundr
|
|||||||
system: this.document.system,
|
system: this.document.system,
|
||||||
source: this.document.toObject(),
|
source: this.document.toObject(),
|
||||||
enrichedDescription: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.description, { async: true }),
|
enrichedDescription: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.description, { async: true }),
|
||||||
isEditMode: this.isEditMode,
|
isEditMode: true,
|
||||||
isPlayMode: this.isPlayMode,
|
|
||||||
isEditable: this.isEditable,
|
isEditable: this.isEditable,
|
||||||
isGM: game.user.isGM,
|
isGM: game.user.isGM,
|
||||||
config: CONFIG.HAWKMOON,
|
config: CONFIG.HAWKMOON,
|
||||||
@@ -198,17 +172,6 @@ export default class HawkmoonItemSheet extends HandlebarsApplicationMixin(foundr
|
|||||||
// #endregion
|
// #endregion
|
||||||
|
|
||||||
// #region Action Handlers
|
// #region Action Handlers
|
||||||
/**
|
|
||||||
* Toggle between Edit and Play mode
|
|
||||||
* @param {Event} event The triggering event
|
|
||||||
* @param {HTMLElement} target The target element
|
|
||||||
* @private
|
|
||||||
*/
|
|
||||||
static #onToggleSheet(event, target) {
|
|
||||||
this._sheetMode = this.isEditMode ? this.constructor.SHEET_MODES.PLAY : this.constructor.SHEET_MODES.EDIT
|
|
||||||
this.render()
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Edit the item image
|
* Edit the item image
|
||||||
* @param {Event} event The triggering event
|
* @param {Event} event The triggering event
|
||||||
|
|||||||
142
modules/applications/sheets/cellule-sheet.mjs
Normal file
142
modules/applications/sheets/cellule-sheet.mjs
Normal file
@@ -0,0 +1,142 @@
|
|||||||
|
import HawkmoonActorSheet from "./base-actor-sheet.mjs"
|
||||||
|
|
||||||
|
const __ALLOWED_ITEM_CELLULE = { talent: 1, ressource: 1, contact: 1, equipement: 1, protection: 1, artefact: 1, arme: 1, monnaie: 1 }
|
||||||
|
|
||||||
|
export default class HawkmoonCelluleSheet extends HawkmoonActorSheet {
|
||||||
|
/** @override */
|
||||||
|
static DEFAULT_OPTIONS = {
|
||||||
|
...super.DEFAULT_OPTIONS,
|
||||||
|
classes: [...super.DEFAULT_OPTIONS.classes],
|
||||||
|
window: {
|
||||||
|
...super.DEFAULT_OPTIONS.window,
|
||||||
|
title: "SHEETS.Actor.cellule",
|
||||||
|
},
|
||||||
|
actions: {
|
||||||
|
...super.DEFAULT_OPTIONS.actions,
|
||||||
|
editActor: HawkmoonCelluleSheet.#onEditActor,
|
||||||
|
deleteActor: HawkmoonCelluleSheet.#onDeleteActor,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @override */
|
||||||
|
static PARTS = {
|
||||||
|
sheet: {
|
||||||
|
template: "systems/fvtt-hawkmoon-cyd/templates/cellule-sheet.hbs",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @override */
|
||||||
|
tabGroups = { primary: "talents" }
|
||||||
|
|
||||||
|
/** @override */
|
||||||
|
async _prepareContext() {
|
||||||
|
const context = await super._prepareContext()
|
||||||
|
const actor = this.document
|
||||||
|
|
||||||
|
// Add cellule-specific data
|
||||||
|
context.talents = foundry.utils.duplicate(actor.getTalents() || {})
|
||||||
|
context.ressources = foundry.utils.duplicate(actor.getRessources ? actor.getRessources() : [])
|
||||||
|
context.contacts = foundry.utils.duplicate(actor.getContacts ? actor.getContacts() : [])
|
||||||
|
context.members = this.#getMembers()
|
||||||
|
context.equipements = foundry.utils.duplicate(actor.getEquipments ? actor.getEquipments() : [])
|
||||||
|
context.artefacts = foundry.utils.duplicate(actor.getArtefacts ? actor.getArtefacts() : [])
|
||||||
|
context.armes = foundry.utils.duplicate(actor.getWeapons ? actor.getWeapons() : [])
|
||||||
|
context.monnaies = foundry.utils.duplicate(actor.getMonnaies ? actor.getMonnaies() : [])
|
||||||
|
context.protections = foundry.utils.duplicate(actor.getArmors ? actor.getArmors() : [])
|
||||||
|
context.richesse = actor.computeRichesse ? actor.computeRichesse() : 0
|
||||||
|
context.valeurEquipement = actor.computeValeurEquipement ? actor.computeValeurEquipement() : 0
|
||||||
|
context.enrichedDescription = await foundry.applications.ux.TextEditor.implementation.enrichHTML(actor.system.description || "", { async: true })
|
||||||
|
|
||||||
|
return context
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get members of the cellule with full actor data
|
||||||
|
* @returns {Array}
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
#getMembers() {
|
||||||
|
let membersFull = []
|
||||||
|
for (let memberId of this.actor.system.members) {
|
||||||
|
let actor = game.actors.get(memberId)
|
||||||
|
if (actor) {
|
||||||
|
membersFull.push({ name: actor.name, id: actor.id, img: actor.img })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return membersFull
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Override _onDropItem to filter allowed item types for cellule
|
||||||
|
* @override
|
||||||
|
*/
|
||||||
|
async _onDropItem(event, data) {
|
||||||
|
const item = await fromUuid(data.uuid)
|
||||||
|
|
||||||
|
// Check if item type is allowed for cellule
|
||||||
|
if (!__ALLOWED_ITEM_CELLULE[item.type]) {
|
||||||
|
ui.notifications.warn(`Le type d'item ${item.type} n'est pas autorisé pour une cellule`)
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
return super._onDropItem(event, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Override _onDropActor to handle adding members
|
||||||
|
* @override
|
||||||
|
*/
|
||||||
|
async _onDropActor(event, data) {
|
||||||
|
const droppedActor = await fromUuid(data.uuid)
|
||||||
|
|
||||||
|
if (droppedActor.type !== "personnage") {
|
||||||
|
ui.notifications.warn("Seuls les personnages peuvent être ajoutés à une cellule")
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if already a member
|
||||||
|
const isMember = this.actor.system.members.includes(droppedActor.id)
|
||||||
|
if (isMember) {
|
||||||
|
ui.notifications.warn("Ce personnage est déjà membre de cette cellule")
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add member ID
|
||||||
|
const members = [...this.actor.system.members, droppedActor.id]
|
||||||
|
await this.actor.update({ "system.members": members })
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
// #region Cellule-specific Actions
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Edit an actor (member)
|
||||||
|
* @param {Event} event
|
||||||
|
* @param {HTMLElement} target
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
static async #onEditActor(event, target) {
|
||||||
|
const li = target.closest(".item")
|
||||||
|
const actorId = li?.dataset.actorId
|
||||||
|
if (!actorId) return
|
||||||
|
const actor = game.actors.get(actorId)
|
||||||
|
if (actor) actor.sheet.render(true)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Delete an actor (remove member)
|
||||||
|
* @param {Event} event
|
||||||
|
* @param {HTMLElement} target
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
static async #onDeleteActor(event, target) {
|
||||||
|
const li = target.closest(".item")
|
||||||
|
const actorId = li?.dataset.actorId
|
||||||
|
if (actorId) {
|
||||||
|
const members = this.actor.system.members.filter(id => id !== actorId)
|
||||||
|
await this.actor.update({ "system.members": members })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// #endregion
|
||||||
|
}
|
||||||
60
modules/applications/sheets/creature-sheet.mjs
Normal file
60
modules/applications/sheets/creature-sheet.mjs
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
import HawkmoonActorSheet from "./base-actor-sheet.mjs"
|
||||||
|
import { HawkmoonUtility } from "../../hawkmoon-utility.js"
|
||||||
|
|
||||||
|
export default class HawkmoonCreatureSheet extends HawkmoonActorSheet {
|
||||||
|
/** @override */
|
||||||
|
static DEFAULT_OPTIONS = {
|
||||||
|
...super.DEFAULT_OPTIONS,
|
||||||
|
classes: [...super.DEFAULT_OPTIONS.classes],
|
||||||
|
window: {
|
||||||
|
...super.DEFAULT_OPTIONS.window,
|
||||||
|
title: "SHEETS.Actor.creature",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @override */
|
||||||
|
static PARTS = {
|
||||||
|
sheet: {
|
||||||
|
template: "systems/fvtt-hawkmoon-cyd/templates/creature-sheet.hbs",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @override */
|
||||||
|
tabGroups = { primary: "principal" }
|
||||||
|
|
||||||
|
/** @override */
|
||||||
|
async _prepareContext() {
|
||||||
|
const context = await super._prepareContext()
|
||||||
|
const actor = this.document
|
||||||
|
|
||||||
|
// Add creature-specific data
|
||||||
|
context.skills = actor.getSkills ? actor.getSkills() : []
|
||||||
|
context.armes = foundry.utils.duplicate(actor.getWeapons ? actor.getWeapons() : [])
|
||||||
|
context.protections = foundry.utils.duplicate(actor.getArmors ? actor.getArmors() : [])
|
||||||
|
context.combat = actor.getCombatValues ? actor.getCombatValues() : {}
|
||||||
|
context.equipements = foundry.utils.duplicate(actor.getEquipments ? actor.getEquipments() : [])
|
||||||
|
context.talents = foundry.utils.duplicate(actor.getTalents ? actor.getTalents() : [])
|
||||||
|
context.talentsCell = this.#getCelluleTalents()
|
||||||
|
context.nbCombativite = actor.system.sante?.nbcombativite || 0
|
||||||
|
context.combativiteList = HawkmoonUtility.getCombativiteList(actor.system.sante?.nbcombativite || 0)
|
||||||
|
context.initiative = actor.getFlag("world", "last-initiative") || -1
|
||||||
|
context.enrichedDescription = await foundry.applications.ux.TextEditor.implementation.enrichHTML(actor.system.biodata?.description || "", { async: true })
|
||||||
|
context.enrichedHabitat = await foundry.applications.ux.TextEditor.implementation.enrichHTML(actor.system.biodata?.habitat || "", { async: true })
|
||||||
|
|
||||||
|
return context
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get talents from attached cellule
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
#getCelluleTalents() {
|
||||||
|
const celluleId = this.actor.system?.details?.celluleid
|
||||||
|
if (!celluleId) return []
|
||||||
|
|
||||||
|
const cellule = game.actors.get(celluleId)
|
||||||
|
if (!cellule) return []
|
||||||
|
|
||||||
|
return foundry.utils.duplicate(cellule.getTalents?.() || [])
|
||||||
|
}
|
||||||
|
}
|
||||||
104
modules/applications/sheets/personnage-sheet.mjs
Normal file
104
modules/applications/sheets/personnage-sheet.mjs
Normal file
@@ -0,0 +1,104 @@
|
|||||||
|
import HawkmoonActorSheet from "./base-actor-sheet.mjs"
|
||||||
|
import { HawkmoonUtility } from "../../hawkmoon-utility.js"
|
||||||
|
|
||||||
|
export default class HawkmoonPersonnageSheet extends HawkmoonActorSheet {
|
||||||
|
/** @override */
|
||||||
|
static DEFAULT_OPTIONS = {
|
||||||
|
...super.DEFAULT_OPTIONS,
|
||||||
|
classes: [...super.DEFAULT_OPTIONS.classes],
|
||||||
|
window: {
|
||||||
|
...super.DEFAULT_OPTIONS.window,
|
||||||
|
title: "SHEETS.Actor.personnage",
|
||||||
|
},
|
||||||
|
actions: {
|
||||||
|
...super.DEFAULT_OPTIONS.actions,
|
||||||
|
openCellule: HawkmoonPersonnageSheet.#onOpenCellule,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @override */
|
||||||
|
static PARTS = {
|
||||||
|
sheet: {
|
||||||
|
template: "systems/fvtt-hawkmoon-cyd/templates/actor-sheet.hbs",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @override */
|
||||||
|
tabGroups = { primary: "principal" }
|
||||||
|
|
||||||
|
/** @override */
|
||||||
|
async _prepareContext() {
|
||||||
|
const context = await super._prepareContext()
|
||||||
|
const actor = this.document
|
||||||
|
|
||||||
|
// Add personnage-specific data
|
||||||
|
context.skills = actor.getSkills()
|
||||||
|
context.armes = foundry.utils.duplicate(actor.getWeapons())
|
||||||
|
context.monnaies = foundry.utils.duplicate(actor.getMonnaies())
|
||||||
|
context.protections = foundry.utils.duplicate(actor.getArmors())
|
||||||
|
context.historiques = foundry.utils.duplicate(actor.getHistoriques() || [])
|
||||||
|
context.talents = foundry.utils.duplicate(actor.getTalents() || [])
|
||||||
|
context.mutations = foundry.utils.duplicate(actor.getMutations() || [])
|
||||||
|
context.talentsCell = this.#getCelluleTalents()
|
||||||
|
context.celluleId = this.#getCelluleId()
|
||||||
|
context.profils = foundry.utils.duplicate(actor.getProfils() || [])
|
||||||
|
context.combat = actor.getCombatValues()
|
||||||
|
context.equipements = foundry.utils.duplicate(actor.getEquipments())
|
||||||
|
context.artefacts = foundry.utils.duplicate(actor.getArtefacts())
|
||||||
|
context.richesse = actor.computeRichesse()
|
||||||
|
context.coupDevastateur = actor.items.find(it => it.type == "talent" && it.name.toLowerCase() == "coup devastateur" && !it.system.used)
|
||||||
|
context.valeurEquipement = actor.computeValeurEquipement()
|
||||||
|
context.nbCombativite = actor.system.sante.nbcombativite
|
||||||
|
context.combativiteList = HawkmoonUtility.getCombativiteList(actor.system.sante.nbcombativite)
|
||||||
|
context.initiative = actor.getFlag("world", "last-initiative") || -1
|
||||||
|
|
||||||
|
return context
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get talents from cellules this actor is a member of
|
||||||
|
* @returns {Array}
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
#getCelluleTalents() {
|
||||||
|
let talents = []
|
||||||
|
for (let cellule of game.actors) {
|
||||||
|
if (cellule.type == "cellule") {
|
||||||
|
let found = cellule.system.members.includes(this.actor.id)
|
||||||
|
if (found) {
|
||||||
|
talents = talents.concat(cellule.getTalents())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return talents
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the ID of the cellule this actor is a member of
|
||||||
|
* @returns {string|null}
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
#getCelluleId() {
|
||||||
|
for (let cellule of game.actors) {
|
||||||
|
if (cellule.type == "cellule") {
|
||||||
|
if (cellule.system.members.includes(this.actor.id)) {
|
||||||
|
return cellule.id
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Open cellule sheet
|
||||||
|
* @param {Event} event
|
||||||
|
* @param {HTMLElement} target
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
static async #onOpenCellule(event, target) {
|
||||||
|
const celluleId = target.dataset.celluleId
|
||||||
|
if (!celluleId) return
|
||||||
|
const cellule = game.actors.get(celluleId)
|
||||||
|
if (cellule) cellule.sheet.render(true)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -36,6 +36,7 @@ export class HawkmoonActorSheet extends foundry.appv1.sheets.ActorSheet {
|
|||||||
editable: this.isEditable,
|
editable: this.isEditable,
|
||||||
cssClass: this.isEditable ? "editable" : "locked",
|
cssClass: this.isEditable ? "editable" : "locked",
|
||||||
system: objectData.system,
|
system: objectData.system,
|
||||||
|
systemFields: this.document.system.schema.fields,
|
||||||
effects: this.object.effects.map(e => foundry.utils.deepClone(e.data)),
|
effects: this.object.effects.map(e => foundry.utils.deepClone(e.data)),
|
||||||
limited: this.object.limited,
|
limited: this.object.limited,
|
||||||
skills: this.actor.getSkills(),
|
skills: this.actor.getSkills(),
|
||||||
@@ -56,7 +57,7 @@ export class HawkmoonActorSheet extends foundry.appv1.sheets.ActorSheet {
|
|||||||
nbCombativite: this.actor.system.sante.nbcombativite,
|
nbCombativite: this.actor.system.sante.nbcombativite,
|
||||||
combativiteList: HawkmoonUtility.getCombativiteList(this.actor.system.sante.nbcombativite),
|
combativiteList: HawkmoonUtility.getCombativiteList(this.actor.system.sante.nbcombativite),
|
||||||
initiative: this.actor.getFlag("world", "last-initiative") || -1,
|
initiative: this.actor.getFlag("world", "last-initiative") || -1,
|
||||||
description: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.biodata.description, {async: true}),
|
enrichedDescription: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.biodata.description, {async: true}),
|
||||||
habitat: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.biodata.habitat, {async: true}),
|
habitat: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.biodata.habitat, {async: true}),
|
||||||
options: this.options,
|
options: this.options,
|
||||||
owner: this.document.isOwner,
|
owner: this.document.isOwner,
|
||||||
@@ -66,7 +67,6 @@ export class HawkmoonActorSheet extends foundry.appv1.sheets.ActorSheet {
|
|||||||
}
|
}
|
||||||
this.formData = formData;
|
this.formData = formData;
|
||||||
|
|
||||||
console.log("PC : ", formData, this.object);
|
|
||||||
return formData;
|
return formData;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
import { HawkmoonUtility } from "./hawkmoon-utility.js";
|
import { HawkmoonUtility } from "./hawkmoon-utility.js";
|
||||||
import { HawkmoonRollDialog } from "./hawkmoon-roll-dialog.js";
|
import { HawkmoonRollDialog } from "./applications/hawkmoon-roll-dialog.mjs";
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
const __degatsBonus = [-2, -2, -1, -1, 0, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 8, 8, 9, 9, 10, 10]
|
const __degatsBonus = [-2, -2, -1, -1, 0, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 8, 8, 9, 9, 10, 10]
|
||||||
@@ -655,8 +655,7 @@ export class HawkmoonActor extends Actor {
|
|||||||
let rollData = this.getCommonRollData(attrKey)
|
let rollData = this.getCommonRollData(attrKey)
|
||||||
rollData.multiplier = (isInit) ? 1 : 2
|
rollData.multiplier = (isInit) ? 1 : 2
|
||||||
rollData.isInit = isInit
|
rollData.isInit = isInit
|
||||||
let rollDialog = await HawkmoonRollDialog.create(this, rollData)
|
await HawkmoonRollDialog.create(this, rollData)
|
||||||
rollDialog.render(true)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
@@ -664,22 +663,30 @@ export class HawkmoonActor extends Actor {
|
|||||||
let rollData = this.getCommonRollData(attrKey, compId)
|
let rollData = this.getCommonRollData(attrKey, compId)
|
||||||
rollData.multiplier = 1 // Attr multiplier, always 1 in competence mode
|
rollData.multiplier = 1 // Attr multiplier, always 1 in competence mode
|
||||||
console.log("RollDatra", rollData)
|
console.log("RollDatra", rollData)
|
||||||
let rollDialog = await HawkmoonRollDialog.create(this, rollData)
|
await HawkmoonRollDialog.create(this, rollData)
|
||||||
rollDialog.render(true)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async rollArmeOffensif(armeId) {
|
async rollArmeOffensif(armeId) {
|
||||||
let arme = this.items.get(armeId)
|
let arme = this.items.get(armeId)
|
||||||
|
if (!arme.system.equipped) {
|
||||||
|
ui.notifications.warn("Cette arme doit être équipée pour pouvoir attaquer !")
|
||||||
|
return
|
||||||
|
}
|
||||||
if (arme.type == "arme") {
|
if (arme.type == "arme") {
|
||||||
arme = this.prepareArme(arme)
|
arme = this.prepareArme(arme)
|
||||||
}
|
}
|
||||||
|
if (!arme.system.competence) {
|
||||||
|
ui.notifications.warn("Aucune compétence trouvée pour cette arme !")
|
||||||
|
return
|
||||||
|
}
|
||||||
let rollData = this.getCommonRollData(arme.system.attrKey, arme.system.competence._id)
|
let rollData = this.getCommonRollData(arme.system.attrKey, arme.system.competence._id)
|
||||||
rollData.arme = arme
|
rollData.arme = arme
|
||||||
|
rollData.isCombat = true
|
||||||
|
rollData.isTir = arme.system.isDistance || false
|
||||||
HawkmoonUtility.updateWithTarget(rollData)
|
HawkmoonUtility.updateWithTarget(rollData)
|
||||||
console.log("ARME!", rollData)
|
console.log("ARME!", rollData)
|
||||||
let rollDialog = await HawkmoonRollDialog.create(this, rollData)
|
await HawkmoonRollDialog.create(this, rollData)
|
||||||
rollDialog.render(true)
|
|
||||||
}
|
}
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async rollAssommer() {
|
async rollAssommer() {
|
||||||
@@ -687,8 +694,7 @@ export class HawkmoonActor extends Actor {
|
|||||||
rollData.assomer = true
|
rollData.assomer = true
|
||||||
rollData.conditionsCommunes = true
|
rollData.conditionsCommunes = true
|
||||||
HawkmoonUtility.updateWithTarget(rollData)
|
HawkmoonUtility.updateWithTarget(rollData)
|
||||||
let rollDialog = await HawkmoonRollDialog.create(this, rollData)
|
await HawkmoonRollDialog.create(this, rollData)
|
||||||
rollDialog.render(true)
|
|
||||||
}
|
}
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async rollCoupBas() {
|
async rollCoupBas() {
|
||||||
@@ -696,8 +702,7 @@ export class HawkmoonActor extends Actor {
|
|||||||
rollData.coupBas = true
|
rollData.coupBas = true
|
||||||
rollData.conditionsCommunes = true
|
rollData.conditionsCommunes = true
|
||||||
HawkmoonUtility.updateWithTarget(rollData)
|
HawkmoonUtility.updateWithTarget(rollData)
|
||||||
let rollDialog = await HawkmoonRollDialog.create(this, rollData)
|
await HawkmoonRollDialog.create(this, rollData)
|
||||||
rollDialog.render(true)
|
|
||||||
}
|
}
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async rollImmobiliser() {
|
async rollImmobiliser() {
|
||||||
@@ -706,8 +711,7 @@ export class HawkmoonActor extends Actor {
|
|||||||
rollData.conditionsCommunes = true
|
rollData.conditionsCommunes = true
|
||||||
rollData.cibleconsciente = true
|
rollData.cibleconsciente = true
|
||||||
HawkmoonUtility.updateWithTarget(rollData)
|
HawkmoonUtility.updateWithTarget(rollData)
|
||||||
let rollDialog = await HawkmoonRollDialog.create(this, rollData)
|
await HawkmoonRollDialog.create(this, rollData)
|
||||||
rollDialog.render(true)
|
|
||||||
}
|
}
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async rollRepousser() {
|
async rollRepousser() {
|
||||||
@@ -716,8 +720,7 @@ export class HawkmoonActor extends Actor {
|
|||||||
rollData.conditionsCommunes = true
|
rollData.conditionsCommunes = true
|
||||||
rollData.cibleconsciente = true
|
rollData.cibleconsciente = true
|
||||||
HawkmoonUtility.updateWithTarget(rollData)
|
HawkmoonUtility.updateWithTarget(rollData)
|
||||||
let rollDialog = await HawkmoonRollDialog.create(this, rollData)
|
await HawkmoonRollDialog.create(this, rollData)
|
||||||
rollDialog.render(true)
|
|
||||||
}
|
}
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async rollDesengager() {
|
async rollDesengager() {
|
||||||
@@ -725,13 +728,16 @@ export class HawkmoonActor extends Actor {
|
|||||||
rollData.desengager = true
|
rollData.desengager = true
|
||||||
rollData.conditionsCommunes = true
|
rollData.conditionsCommunes = true
|
||||||
HawkmoonUtility.updateWithTarget(rollData)
|
HawkmoonUtility.updateWithTarget(rollData)
|
||||||
let rollDialog = await HawkmoonRollDialog.create(this, rollData)
|
await HawkmoonRollDialog.create(this, rollData)
|
||||||
rollDialog.render(true)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async rollArmeDegats(armeId, targetVigueur = undefined, rollDataInput = undefined) {
|
async rollArmeDegats(armeId, targetVigueur = undefined, rollDataInput = undefined) {
|
||||||
let arme = this.items.get(armeId)
|
let arme = this.items.get(armeId)
|
||||||
|
if (!arme.system.equipped) {
|
||||||
|
ui.notifications.warn("Cette arme doit être équipée pour pouvoir infliger des dégâts !")
|
||||||
|
return
|
||||||
|
}
|
||||||
if (arme.type == "arme") {
|
if (arme.type == "arme") {
|
||||||
arme = this.prepareArme(arme)
|
arme = this.prepareArme(arme)
|
||||||
}
|
}
|
||||||
@@ -782,7 +788,7 @@ export class HawkmoonActor extends Actor {
|
|||||||
nbEtatPerdus: nbEtatPerdus
|
nbEtatPerdus: nbEtatPerdus
|
||||||
}
|
}
|
||||||
HawkmoonUtility.createChatWithRollMode(rollData.alias, {
|
HawkmoonUtility.createChatWithRollMode(rollData.alias, {
|
||||||
content: await renderTemplate(`systems/fvtt-hawkmoon-cyd/templates/chat-degats-result.html`, rollData)
|
content: await foundry.applications.handlebars.renderTemplate(`systems/fvtt-hawkmoon-cyd/templates/chat-degats-result.html`, rollData)
|
||||||
})
|
})
|
||||||
|
|
||||||
if (rollDataInput?.defenderTokenId && nbEtatPerdus) {
|
if (rollDataInput?.defenderTokenId && nbEtatPerdus) {
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
|
|
||||||
import { HawkmoonUtility } from "./hawkmoon-utility.js";
|
import { HawkmoonUtility } from "./hawkmoon-utility.js";
|
||||||
import { HawkmoonRollDialog } from "./hawkmoon-roll-dialog.js";
|
import { HawkmoonRollDialog } from "./applications/hawkmoon-roll-dialog.mjs";
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
export class HawkmoonCommands {
|
export class HawkmoonCommands {
|
||||||
@@ -106,18 +106,17 @@ export class HawkmoonCommands {
|
|||||||
static _chatAnswer(msg, content) {
|
static _chatAnswer(msg, content) {
|
||||||
msg.whisper = [game.user.id];
|
msg.whisper = [game.user.id];
|
||||||
msg.content = content;
|
msg.content = content;
|
||||||
ChatMessage.create(msg);
|
ChatMessage.create(msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async poolRoll( msg) {
|
async poolRoll( msg) {
|
||||||
let rollData = HawkmoonUtility.getBasicRollData()
|
let rollData = HawkmoonUtility.getBasicRollData()
|
||||||
rollData.alias = "Dice Pool Roll",
|
rollData.alias = "Dice Pool Roll",
|
||||||
rollData.mode = "generic"
|
rollData.mode = "generic"
|
||||||
rollData.title = `Dice Pool Roll`;
|
rollData.title = `Dice Pool Roll`;
|
||||||
|
|
||||||
let rollDialog = await HawkmoonRollDialog.create( this, rollData);
|
await HawkmoonRollDialog.create( this, rollData);
|
||||||
rollDialog.render( true );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -89,9 +89,9 @@ Hooks.once("init", async function () {
|
|||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
// Register sheet application classes
|
// Register sheet application classes
|
||||||
foundry.documents.collections.Actors.unregisterSheet("core", foundry.appv1.sheets.ActorSheet);
|
foundry.documents.collections.Actors.unregisterSheet("core", foundry.appv1.sheets.ActorSheet);
|
||||||
foundry.documents.collections.Actors.registerSheet("fvtt-hawkmoon-cyd", HawkmoonActorSheet, { types: ["personnage"], makeDefault: true })
|
foundry.documents.collections.Actors.registerSheet("fvtt-hawkmoon-cyd", sheets.HawkmoonPersonnageSheet, { types: ["personnage"], makeDefault: true })
|
||||||
foundry.documents.collections.Actors.registerSheet("fvtt-hawkmoon-cyd", HawkmoonCreatureSheet, { types: ["creature"], makeDefault: true })
|
foundry.documents.collections.Actors.registerSheet("fvtt-hawkmoon-cyd", sheets.HawkmoonCreatureSheet, { types: ["creature"], makeDefault: true })
|
||||||
foundry.documents.collections.Actors.registerSheet("fvtt-hawkmoon-cyd", HawkmoonCelluleSheet, { types: ["cellule"], makeDefault: true });
|
foundry.documents.collections.Actors.registerSheet("fvtt-hawkmoon-cyd", sheets.HawkmoonCelluleSheet, { types: ["cellule"], makeDefault: true });
|
||||||
|
|
||||||
// Register AppV2 Item Sheets
|
// Register AppV2 Item Sheets
|
||||||
foundry.documents.collections.Items.unregisterSheet("core", foundry.appv1.sheets.ItemSheet);
|
foundry.documents.collections.Items.unregisterSheet("core", foundry.appv1.sheets.ItemSheet);
|
||||||
@@ -119,12 +119,39 @@ function welcomeMessage() {
|
|||||||
ChatMessage.create({
|
ChatMessage.create({
|
||||||
user: game.user.id,
|
user: game.user.id,
|
||||||
whisper: [game.user.id],
|
whisper: [game.user.id],
|
||||||
content: `<div id="welcome-message-Hawkmoon"><span class="rdd-roll-part">
|
content: `
|
||||||
<strong>Bienvenue dans Hawkmoon et le troisième Millénaire !</strong>
|
<div class="hawkmoon-chat-result">
|
||||||
<p>Les livres de Hawkmoon sont nécessaires pour jouer : https://www.titam-france.fr</p>
|
<div class="chat-result-header">
|
||||||
<p>Hawkmoon est jeu de rôle publié par Titam France/Sombres projets, tout les droits leur appartiennent.</p>
|
<img class="actor-icon" src="systems/fvtt-hawkmoon-cyd/assets/logos/hawkmoon_logo.webp" alt="Hawkmoon" />
|
||||||
<p>Système développé par LeRatierBretonnien, support sur le <a href="https://discord.gg/pPSDNJk">Discord FR de Foundry</a>.</p>
|
<div class="header-info">
|
||||||
` });
|
<h4 class="actor-name">Bienvenue dans Hawkmoon !</h4>
|
||||||
|
<div class="action-title">
|
||||||
|
<i class="fas fa-book-open"></i>
|
||||||
|
Le Troisième Millénaire
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="result-details">
|
||||||
|
<div class="details-section">
|
||||||
|
<h5 class="section-title"><i class="fas fa-info-circle"></i> Informations importantes</h5>
|
||||||
|
<div class="description-content">
|
||||||
|
<p><strong>Les livres de Hawkmoon sont nécessaires pour jouer.</strong></p>
|
||||||
|
<p>Hawkmoon est un jeu de rôle publié par <strong>Titam France / Sombres projets</strong>, tous les droits leur appartiennent.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="details-section">
|
||||||
|
<h5 class="section-title"><i class="fas fa-users"></i> Support & Communauté</h5>
|
||||||
|
<div class="description-content">
|
||||||
|
<p>Système développé par <strong>LeRatierBretonnien</strong></p>
|
||||||
|
<p>Support disponible sur le <a href="https://discord.gg/pPSDNJk" target="_blank" style="color: #d4af37; text-decoration: underline;">Discord FR de Foundry VTT</a></p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
`
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
|
|||||||
@@ -265,11 +265,14 @@ export class HawkmoonUtility {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static getTarget() {
|
static getTarget() {
|
||||||
if (game.user.targets && game.user.targets.size == 1) {
|
console.log("getTarget - targets size:", game.user.targets?.size)
|
||||||
|
if (game.user.targets && game.user.targets.size >= 1) {
|
||||||
for (let target of game.user.targets) {
|
for (let target of game.user.targets) {
|
||||||
return target;
|
console.log("getTarget - Returning target:", target.id)
|
||||||
|
return target; // Prendre la première cible si plusieurs
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
console.log("getTarget - No target found")
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -443,11 +446,10 @@ export class HawkmoonUtility {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
rollData.diceFormula += `+${rollData.bonusMalusContext}`
|
|
||||||
} else if (rollData.attr2) {
|
} else if (rollData.attr2) {
|
||||||
rollData.diceFormula += `+${rollData.attr.value}+${rollData.attr2.value}+${rollData.modificateur}+${rollData.bonusMalusContext}`
|
rollData.diceFormula += `+${rollData.attr.value}+${rollData.attr2.value}+${rollData.modificateur}`
|
||||||
} else {
|
} else {
|
||||||
rollData.diceFormula += `+${rollData.attr.value}*${rollData.multiplier}+${rollData.modificateur}+${rollData.bonusMalusContext}`
|
rollData.diceFormula += `+${rollData.attr.value}*${rollData.multiplier}+${rollData.modificateur}`
|
||||||
}
|
}
|
||||||
|
|
||||||
// Bonus arme naturelle en défense
|
// Bonus arme naturelle en défense
|
||||||
@@ -651,9 +653,13 @@ export class HawkmoonUtility {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
chatOptions.alias = chatOptions.alias || name
|
chatOptions.alias = chatOptions.alias || name
|
||||||
|
|
||||||
|
// Ajouter le flag directement dans les options pour éviter les problèmes de timing
|
||||||
|
if (rollData) {
|
||||||
|
chatOptions.flags = { world: { "hawkmoon-roll": rollData } }
|
||||||
|
}
|
||||||
|
|
||||||
let msg = await ChatMessage.create(chatOptions)
|
let msg = await ChatMessage.create(chatOptions)
|
||||||
console.log("=======>", rollData)
|
|
||||||
msg.setFlag("world", "hawkmoon-roll", rollData)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
@@ -664,8 +670,7 @@ export class HawkmoonUtility {
|
|||||||
modificateursOptions: this.getModificateurOptions(),
|
modificateursOptions: this.getModificateurOptions(),
|
||||||
pointAmeOptions: this.getPointAmeOptions(),
|
pointAmeOptions: this.getPointAmeOptions(),
|
||||||
difficulte: 0,
|
difficulte: 0,
|
||||||
modificateur: 0,
|
modificateur: "0",
|
||||||
bonusMalusContext: 0,
|
|
||||||
bonusArmeNaturelle: 0,
|
bonusArmeNaturelle: 0,
|
||||||
defenseurAveugle: false,
|
defenseurAveugle: false,
|
||||||
defenseurDeDos: false,
|
defenseurDeDos: false,
|
||||||
@@ -676,6 +681,8 @@ export class HawkmoonUtility {
|
|||||||
tireurDeplacement: "immobile",
|
tireurDeplacement: "immobile",
|
||||||
cibleCouvert: "aucun",
|
cibleCouvert: "aucun",
|
||||||
distanceTir: "porteemoyenne",
|
distanceTir: "porteemoyenne",
|
||||||
|
cibleDeplace: false,
|
||||||
|
cibleCaC: false,
|
||||||
attaqueCharge: false,
|
attaqueCharge: false,
|
||||||
attaqueDesarme: false,
|
attaqueDesarme: false,
|
||||||
attaqueAmbidextre1: false,
|
attaqueAmbidextre1: false,
|
||||||
@@ -690,10 +697,18 @@ export class HawkmoonUtility {
|
|||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static updateWithTarget(rollData) {
|
static updateWithTarget(rollData) {
|
||||||
let target = HawkmoonUtility.getTarget()
|
let target = HawkmoonUtility.getTarget()
|
||||||
|
console.log("updateWithTarget - Current target:", target)
|
||||||
|
console.log("updateWithTarget - Existing defenderTokenId:", rollData.defenderTokenId)
|
||||||
if (target) {
|
if (target) {
|
||||||
rollData.defenderTokenId = target.id
|
rollData.defenderTokenId = target.id
|
||||||
|
console.log("updateWithTarget - Set defenderTokenId to:", rollData.defenderTokenId)
|
||||||
|
}
|
||||||
|
// Utiliser la cible déjà enregistrée si aucune cible n'est actuellement sélectionnée
|
||||||
|
if (rollData.defenderTokenId) {
|
||||||
let defender = game.canvas.tokens.get(rollData.defenderTokenId).actor
|
let defender = game.canvas.tokens.get(rollData.defenderTokenId).actor
|
||||||
|
console.log("updateWithTarget - Defender actor:", defender.name)
|
||||||
rollData.armeDefense = defender.getBestDefenseValue()
|
rollData.armeDefense = defender.getBestDefenseValue()
|
||||||
|
console.log("updateWithTarget - armeDefense:", rollData.armeDefense)
|
||||||
rollData.armeAttaqueDefenseur = defender.getBestAttackValue()
|
rollData.armeAttaqueDefenseur = defender.getBestAttackValue()
|
||||||
rollData.targetVigueur = defender.getVigueur()
|
rollData.targetVigueur = defender.getVigueur()
|
||||||
rollData.protectionDefenseur = defender.getProtection()
|
rollData.protectionDefenseur = defender.getProtection()
|
||||||
@@ -709,14 +724,23 @@ export class HawkmoonUtility {
|
|||||||
rollData.difficulte = rollData.armeAttaqueDefenseur?.system?.totalOffensif || 0;
|
rollData.difficulte = rollData.armeAttaqueDefenseur?.system?.totalOffensif || 0;
|
||||||
} else if (rollData.armeDefense) {
|
} else if (rollData.armeDefense) {
|
||||||
rollData.difficulte = rollData.armeDefense.system.totalDefensif
|
rollData.difficulte = rollData.armeDefense.system.totalDefensif
|
||||||
if (!rollData.desengager && !rollData.arme.system.armenaturelle && !rollData.arme.system.armefortune) {
|
console.log("updateWithTarget - Calculated difficulte from armeDefense:", rollData.difficulte)
|
||||||
|
if (rollData.arme && !rollData.desengager && !rollData.arme.system.armenaturelle && !rollData.arme.system.armefortune) {
|
||||||
if (rollData.armeDefense.system.armenaturelle || rollData.armeDefense.system.armefortune) {
|
if (rollData.armeDefense.system.armenaturelle || rollData.armeDefense.system.armefortune) {
|
||||||
rollData.bonusArmeNaturelle = 3
|
rollData.bonusArmeNaturelle = 3
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else if (rollData.arme?.system.isDistance) {
|
||||||
|
// Pour les armes à distance, calculer la difficulté de base (protection + distance par défaut)
|
||||||
|
const distanceValues = { "porteecourte": 5, "porteemoyenne": 9, "porteelongue": 14 }
|
||||||
|
rollData.difficulte = rollData.protectionDefenseur + distanceValues[rollData.distanceTir || "porteemoyenne"]
|
||||||
|
console.log("updateWithTarget - Calculated difficulte for ranged:", rollData.difficulte, "= protection", rollData.protectionDefenseur, "+ distance", distanceValues[rollData.distanceTir || "porteemoyenne"])
|
||||||
} else {
|
} else {
|
||||||
|
console.log("updateWithTarget - No armeDefense found!")
|
||||||
ui.notifications.warn("Aucune arme de défense équipée, difficulté manuelle à positionner.")
|
ui.notifications.warn("Aucune arme de défense équipée, difficulté manuelle à positionner.")
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
console.log("updateWithTarget - No defenderTokenId, skipping target calculations")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -807,7 +831,7 @@ export class HawkmoonUtility {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static async confirmDelete(actorSheet, li) {
|
static async confirmDelete(actorSheet, li) {
|
||||||
let itemId = li.data("item-id");
|
let itemId = li.dataset.itemId;
|
||||||
let msgTxt = "<p>Etes vous certain de vouloir supprimer cet item ?";
|
let msgTxt = "<p>Etes vous certain de vouloir supprimer cet item ?";
|
||||||
let buttons = {
|
let buttons = {
|
||||||
delete: {
|
delete: {
|
||||||
@@ -815,7 +839,7 @@ export class HawkmoonUtility {
|
|||||||
label: "Oui !",
|
label: "Oui !",
|
||||||
callback: () => {
|
callback: () => {
|
||||||
actorSheet.actor.deleteEmbeddedDocuments("Item", [itemId]);
|
actorSheet.actor.deleteEmbeddedDocuments("Item", [itemId]);
|
||||||
li.slideUp(200, () => actorSheet.render(false));
|
actorSheet.render(false);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
cancel: {
|
cancel: {
|
||||||
|
|||||||
@@ -14,11 +14,11 @@ export default class CreatureDataModel extends foundry.abstract.TypeDataModel {
|
|||||||
cheveux: new fields.StringField({ initial: "" }),
|
cheveux: new fields.StringField({ initial: "" }),
|
||||||
sexe: new fields.StringField({ initial: "" }),
|
sexe: new fields.StringField({ initial: "" }),
|
||||||
yeux: new fields.StringField({ initial: "" }),
|
yeux: new fields.StringField({ initial: "" }),
|
||||||
description: new fields.StringField({ initial: "" }),
|
description: new fields.HTMLField({ initial: "" }),
|
||||||
habitat: new fields.StringField({ initial: "" }),
|
habitat: new fields.HTMLField({ initial: "" }),
|
||||||
notes: new fields.StringField({ initial: "" }),
|
notes: new fields.HTMLField({ initial: "" }),
|
||||||
statut: new fields.StringField({ initial: "" }),
|
statut: new fields.StringField({ initial: "" }),
|
||||||
gmnotes: new fields.StringField({ initial: "" }),
|
gmnotes: new fields.HTMLField({ initial: "" }),
|
||||||
statutresistant: new fields.StringField({ initial: "commun" })
|
statutresistant: new fields.StringField({ initial: "commun" })
|
||||||
}),
|
}),
|
||||||
// Template core
|
// Template core
|
||||||
|
|||||||
@@ -14,11 +14,11 @@ export default class PersonnageDataModel extends foundry.abstract.TypeDataModel
|
|||||||
cheveux: new fields.StringField({ initial: "" }),
|
cheveux: new fields.StringField({ initial: "" }),
|
||||||
sexe: new fields.StringField({ initial: "" }),
|
sexe: new fields.StringField({ initial: "" }),
|
||||||
yeux: new fields.StringField({ initial: "" }),
|
yeux: new fields.StringField({ initial: "" }),
|
||||||
description: new fields.StringField({ initial: "" }),
|
description: new fields.HTMLField({ initial: "" }),
|
||||||
habitat: new fields.StringField({ initial: "" }),
|
habitat: new fields.HTMLField({ initial: "" }),
|
||||||
notes: new fields.StringField({ initial: "" }),
|
notes: new fields.HTMLField({ initial: "" }),
|
||||||
statut: new fields.StringField({ initial: "" }),
|
statut: new fields.StringField({ initial: "" }),
|
||||||
gmnotes: new fields.StringField({ initial: "" }),
|
gmnotes: new fields.HTMLField({ initial: "" }),
|
||||||
statutresistant: new fields.StringField({ initial: "commun" })
|
statutresistant: new fields.StringField({ initial: "commun" })
|
||||||
}),
|
}),
|
||||||
// Template core
|
// Template core
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
MANIFEST-000349
|
MANIFEST-000369
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
2026/01/06-08:51:42.969110 7f93eaffd6c0 Recovering log #347
|
2026/01/08-07:36:58.887148 7f93eb7fe6c0 Recovering log #367
|
||||||
2026/01/06-08:51:42.979018 7f93eaffd6c0 Delete type=3 #345
|
2026/01/08-07:36:58.939639 7f93eb7fe6c0 Delete type=3 #365
|
||||||
2026/01/06-08:51:42.979076 7f93eaffd6c0 Delete type=0 #347
|
2026/01/08-07:36:58.939724 7f93eb7fe6c0 Delete type=0 #367
|
||||||
2026/01/06-16:09:35.226231 7f93e9ffb6c0 Level-0 table #352: started
|
2026/01/08-07:52:47.457502 7f93e9ffb6c0 Level-0 table #372: started
|
||||||
2026/01/06-16:09:35.226274 7f93e9ffb6c0 Level-0 table #352: 0 bytes OK
|
2026/01/08-07:52:47.457539 7f93e9ffb6c0 Level-0 table #372: 0 bytes OK
|
||||||
2026/01/06-16:09:35.266431 7f93e9ffb6c0 Delete type=0 #350
|
2026/01/08-07:52:47.463768 7f93e9ffb6c0 Delete type=0 #370
|
||||||
2026/01/06-16:09:35.363828 7f93e9ffb6c0 Manual compaction at level-0 from '!journal!MUbViCE2PkVxlzqe' @ 72057594037927935 : 1 .. '!journal.pages!gVybbv17TFY8o3Y4.fQidyqfF1TbsZKHM' @ 0 : 0; will stop at (end)
|
2026/01/08-07:52:47.491927 7f93e9ffb6c0 Manual compaction at level-0 from '!journal!MUbViCE2PkVxlzqe' @ 72057594037927935 : 1 .. '!journal.pages!gVybbv17TFY8o3Y4.fQidyqfF1TbsZKHM' @ 0 : 0; will stop at (end)
|
||||||
2026/01/06-16:09:35.363849 7f93e9ffb6c0 Manual compaction at level-1 from '!journal!MUbViCE2PkVxlzqe' @ 72057594037927935 : 1 .. '!journal.pages!gVybbv17TFY8o3Y4.fQidyqfF1TbsZKHM' @ 0 : 0; will stop at (end)
|
2026/01/08-07:52:47.491984 7f93e9ffb6c0 Manual compaction at level-1 from '!journal!MUbViCE2PkVxlzqe' @ 72057594037927935 : 1 .. '!journal.pages!gVybbv17TFY8o3Y4.fQidyqfF1TbsZKHM' @ 0 : 0; will stop at (end)
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
2026/01/06-08:47:47.731237 7f93eaffd6c0 Recovering log #343
|
2026/01/08-00:15:43.227596 7f93ea7fc6c0 Recovering log #363
|
||||||
2026/01/06-08:47:47.748574 7f93eaffd6c0 Delete type=3 #341
|
2026/01/08-00:15:43.238114 7f93ea7fc6c0 Delete type=3 #361
|
||||||
2026/01/06-08:47:47.748681 7f93eaffd6c0 Delete type=0 #343
|
2026/01/08-00:15:43.238181 7f93ea7fc6c0 Delete type=0 #363
|
||||||
2026/01/06-08:50:51.064497 7f93e9ffb6c0 Level-0 table #348: started
|
2026/01/08-00:20:54.710727 7f93e9ffb6c0 Level-0 table #368: started
|
||||||
2026/01/06-08:50:51.064533 7f93e9ffb6c0 Level-0 table #348: 0 bytes OK
|
2026/01/08-00:20:54.710756 7f93e9ffb6c0 Level-0 table #368: 0 bytes OK
|
||||||
2026/01/06-08:50:51.071294 7f93e9ffb6c0 Delete type=0 #346
|
2026/01/08-00:20:54.717840 7f93e9ffb6c0 Delete type=0 #366
|
||||||
2026/01/06-08:50:51.077656 7f93e9ffb6c0 Manual compaction at level-0 from '!journal!MUbViCE2PkVxlzqe' @ 72057594037927935 : 1 .. '!journal.pages!gVybbv17TFY8o3Y4.fQidyqfF1TbsZKHM' @ 0 : 0; will stop at (end)
|
2026/01/08-00:20:54.740889 7f93e9ffb6c0 Manual compaction at level-0 from '!journal!MUbViCE2PkVxlzqe' @ 72057594037927935 : 1 .. '!journal.pages!gVybbv17TFY8o3Y4.fQidyqfF1TbsZKHM' @ 0 : 0; will stop at (end)
|
||||||
2026/01/06-08:50:51.077786 7f93e9ffb6c0 Manual compaction at level-1 from '!journal!MUbViCE2PkVxlzqe' @ 72057594037927935 : 1 .. '!journal.pages!gVybbv17TFY8o3Y4.fQidyqfF1TbsZKHM' @ 0 : 0; will stop at (end)
|
2026/01/08-00:20:54.740935 7f93e9ffb6c0 Manual compaction at level-1 from '!journal!MUbViCE2PkVxlzqe' @ 72057594037927935 : 1 .. '!journal.pages!gVybbv17TFY8o3Y4.fQidyqfF1TbsZKHM' @ 0 : 0; will stop at (end)
|
||||||
|
|||||||
Binary file not shown.
@@ -1 +1 @@
|
|||||||
MANIFEST-000348
|
MANIFEST-000368
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
2026/01/06-08:51:42.867692 7f93eb7fe6c0 Recovering log #346
|
2026/01/08-07:36:58.419332 7f93ea7fc6c0 Recovering log #366
|
||||||
2026/01/06-08:51:42.877316 7f93eb7fe6c0 Delete type=3 #344
|
2026/01/08-07:36:58.495209 7f93ea7fc6c0 Delete type=3 #364
|
||||||
2026/01/06-08:51:42.877391 7f93eb7fe6c0 Delete type=0 #346
|
2026/01/08-07:36:58.495282 7f93ea7fc6c0 Delete type=0 #366
|
||||||
2026/01/06-16:09:34.742312 7f93e9ffb6c0 Level-0 table #351: started
|
2026/01/08-07:52:47.416941 7f93e9ffb6c0 Level-0 table #371: started
|
||||||
2026/01/06-16:09:34.742344 7f93e9ffb6c0 Level-0 table #351: 0 bytes OK
|
2026/01/08-07:52:47.416983 7f93e9ffb6c0 Level-0 table #371: 0 bytes OK
|
||||||
2026/01/06-16:09:34.776378 7f93e9ffb6c0 Delete type=0 #349
|
2026/01/08-07:52:47.423347 7f93e9ffb6c0 Delete type=0 #369
|
||||||
2026/01/06-16:09:34.843192 7f93e9ffb6c0 Manual compaction at level-0 from '!items!0fit7HelSjaFtXcW' @ 72057594037927935 : 1 .. '!items!wxrzP3NyiHiYnAMJ' @ 0 : 0; will stop at (end)
|
2026/01/08-07:52:47.430847 7f93e9ffb6c0 Manual compaction at level-0 from '!items!0fit7HelSjaFtXcW' @ 72057594037927935 : 1 .. '!items!wxrzP3NyiHiYnAMJ' @ 0 : 0; will stop at (end)
|
||||||
2026/01/06-16:09:34.843219 7f93e9ffb6c0 Manual compaction at level-1 from '!items!0fit7HelSjaFtXcW' @ 72057594037927935 : 1 .. '!items!wxrzP3NyiHiYnAMJ' @ 0 : 0; will stop at (end)
|
2026/01/08-07:52:47.430914 7f93e9ffb6c0 Manual compaction at level-1 from '!items!0fit7HelSjaFtXcW' @ 72057594037927935 : 1 .. '!items!wxrzP3NyiHiYnAMJ' @ 0 : 0; will stop at (end)
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
2026/01/06-08:47:47.583230 7f93ebfff6c0 Recovering log #342
|
2026/01/08-00:15:43.127007 7f93ebfff6c0 Recovering log #362
|
||||||
2026/01/06-08:47:47.597749 7f93ebfff6c0 Delete type=3 #340
|
2026/01/08-00:15:43.137018 7f93ebfff6c0 Delete type=3 #360
|
||||||
2026/01/06-08:47:47.597804 7f93ebfff6c0 Delete type=0 #342
|
2026/01/08-00:15:43.137102 7f93ebfff6c0 Delete type=0 #362
|
||||||
2026/01/06-08:50:51.011547 7f93e9ffb6c0 Level-0 table #347: started
|
2026/01/08-00:20:54.637728 7f93e9ffb6c0 Level-0 table #367: started
|
||||||
2026/01/06-08:50:51.011573 7f93e9ffb6c0 Level-0 table #347: 0 bytes OK
|
2026/01/08-00:20:54.637769 7f93e9ffb6c0 Level-0 table #367: 0 bytes OK
|
||||||
2026/01/06-08:50:51.018121 7f93e9ffb6c0 Delete type=0 #345
|
2026/01/08-00:20:54.644136 7f93e9ffb6c0 Delete type=0 #365
|
||||||
2026/01/06-08:50:51.024541 7f93e9ffb6c0 Manual compaction at level-0 from '!items!0fit7HelSjaFtXcW' @ 72057594037927935 : 1 .. '!items!wxrzP3NyiHiYnAMJ' @ 0 : 0; will stop at (end)
|
2026/01/08-00:20:54.657608 7f93e9ffb6c0 Manual compaction at level-0 from '!items!0fit7HelSjaFtXcW' @ 72057594037927935 : 1 .. '!items!wxrzP3NyiHiYnAMJ' @ 0 : 0; will stop at (end)
|
||||||
2026/01/06-08:50:51.024585 7f93e9ffb6c0 Manual compaction at level-1 from '!items!0fit7HelSjaFtXcW' @ 72057594037927935 : 1 .. '!items!wxrzP3NyiHiYnAMJ' @ 0 : 0; will stop at (end)
|
2026/01/08-00:20:54.657649 7f93e9ffb6c0 Manual compaction at level-1 from '!items!0fit7HelSjaFtXcW' @ 72057594037927935 : 1 .. '!items!wxrzP3NyiHiYnAMJ' @ 0 : 0; will stop at (end)
|
||||||
|
|||||||
Binary file not shown.
@@ -1 +1 @@
|
|||||||
MANIFEST-000348
|
MANIFEST-000368
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
2026/01/06-08:51:42.843104 7f93ea7fc6c0 Recovering log #346
|
2026/01/08-07:36:58.297781 7f93eb7fe6c0 Recovering log #366
|
||||||
2026/01/06-08:51:42.853684 7f93ea7fc6c0 Delete type=3 #344
|
2026/01/08-07:36:58.339606 7f93eb7fe6c0 Delete type=3 #364
|
||||||
2026/01/06-08:51:42.853733 7f93ea7fc6c0 Delete type=0 #346
|
2026/01/08-07:36:58.339662 7f93eb7fe6c0 Delete type=0 #366
|
||||||
2026/01/06-16:09:34.776538 7f93e9ffb6c0 Level-0 table #351: started
|
2026/01/08-07:52:47.389616 7f93e9ffb6c0 Level-0 table #371: started
|
||||||
2026/01/06-16:09:34.776572 7f93e9ffb6c0 Level-0 table #351: 0 bytes OK
|
2026/01/08-07:52:47.389651 7f93e9ffb6c0 Level-0 table #371: 0 bytes OK
|
||||||
2026/01/06-16:09:34.805072 7f93e9ffb6c0 Delete type=0 #349
|
2026/01/08-07:52:47.396000 7f93e9ffb6c0 Delete type=0 #369
|
||||||
2026/01/06-16:09:34.843202 7f93e9ffb6c0 Manual compaction at level-0 from '!items!0nhTxujlIUB63Aqt' @ 72057594037927935 : 1 .. '!items!tFU5yISK6spdNWco' @ 0 : 0; will stop at (end)
|
2026/01/08-07:52:47.403297 7f93e9ffb6c0 Manual compaction at level-0 from '!items!0nhTxujlIUB63Aqt' @ 72057594037927935 : 1 .. '!items!tFU5yISK6spdNWco' @ 0 : 0; will stop at (end)
|
||||||
2026/01/06-16:09:34.843241 7f93e9ffb6c0 Manual compaction at level-1 from '!items!0nhTxujlIUB63Aqt' @ 72057594037927935 : 1 .. '!items!tFU5yISK6spdNWco' @ 0 : 0; will stop at (end)
|
2026/01/08-07:52:47.403348 7f93e9ffb6c0 Manual compaction at level-1 from '!items!0nhTxujlIUB63Aqt' @ 72057594037927935 : 1 .. '!items!tFU5yISK6spdNWco' @ 0 : 0; will stop at (end)
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
2026/01/06-08:47:47.547301 7f93ea7fc6c0 Recovering log #342
|
2026/01/08-00:15:43.102456 7f93ea7fc6c0 Recovering log #362
|
||||||
2026/01/06-08:47:47.562777 7f93ea7fc6c0 Delete type=3 #340
|
2026/01/08-00:15:43.111903 7f93ea7fc6c0 Delete type=3 #360
|
||||||
2026/01/06-08:47:47.562845 7f93ea7fc6c0 Delete type=0 #342
|
2026/01/08-00:15:43.111977 7f93ea7fc6c0 Delete type=0 #362
|
||||||
2026/01/06-08:50:50.979616 7f93e9ffb6c0 Level-0 table #347: started
|
2026/01/08-00:20:54.630969 7f93e9ffb6c0 Level-0 table #367: started
|
||||||
2026/01/06-08:50:50.979656 7f93e9ffb6c0 Level-0 table #347: 0 bytes OK
|
2026/01/08-00:20:54.631025 7f93e9ffb6c0 Level-0 table #367: 0 bytes OK
|
||||||
2026/01/06-08:50:50.986028 7f93e9ffb6c0 Delete type=0 #345
|
2026/01/08-00:20:54.637541 7f93e9ffb6c0 Delete type=0 #365
|
||||||
2026/01/06-08:50:50.999008 7f93e9ffb6c0 Manual compaction at level-0 from '!items!0nhTxujlIUB63Aqt' @ 72057594037927935 : 1 .. '!items!tFU5yISK6spdNWco' @ 0 : 0; will stop at (end)
|
2026/01/08-00:20:54.657589 7f93e9ffb6c0 Manual compaction at level-0 from '!items!0nhTxujlIUB63Aqt' @ 72057594037927935 : 1 .. '!items!tFU5yISK6spdNWco' @ 0 : 0; will stop at (end)
|
||||||
2026/01/06-08:50:50.999044 7f93e9ffb6c0 Manual compaction at level-1 from '!items!0nhTxujlIUB63Aqt' @ 72057594037927935 : 1 .. '!items!tFU5yISK6spdNWco' @ 0 : 0; will stop at (end)
|
2026/01/08-00:20:54.657642 7f93e9ffb6c0 Manual compaction at level-1 from '!items!0nhTxujlIUB63Aqt' @ 72057594037927935 : 1 .. '!items!tFU5yISK6spdNWco' @ 0 : 0; will stop at (end)
|
||||||
|
|||||||
Binary file not shown.
@@ -1 +1 @@
|
|||||||
MANIFEST-000348
|
MANIFEST-000368
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
2026/01/06-08:51:42.818447 7f93eb7fe6c0 Recovering log #346
|
2026/01/08-07:36:58.185756 7f93ebfff6c0 Recovering log #366
|
||||||
2026/01/06-08:51:42.829009 7f93eb7fe6c0 Delete type=3 #344
|
2026/01/08-07:36:58.236514 7f93ebfff6c0 Delete type=3 #364
|
||||||
2026/01/06-08:51:42.829068 7f93eb7fe6c0 Delete type=0 #346
|
2026/01/08-07:36:58.236596 7f93ebfff6c0 Delete type=0 #366
|
||||||
2026/01/06-16:09:34.705519 7f93e9ffb6c0 Level-0 table #351: started
|
2026/01/08-07:52:47.383145 7f93e9ffb6c0 Level-0 table #371: started
|
||||||
2026/01/06-16:09:34.705598 7f93e9ffb6c0 Level-0 table #351: 0 bytes OK
|
2026/01/08-07:52:47.383188 7f93e9ffb6c0 Level-0 table #371: 0 bytes OK
|
||||||
2026/01/06-16:09:34.742153 7f93e9ffb6c0 Delete type=0 #349
|
2026/01/08-07:52:47.389423 7f93e9ffb6c0 Delete type=0 #369
|
||||||
2026/01/06-16:09:34.843178 7f93e9ffb6c0 Manual compaction at level-0 from '!items!15IDGG6JoZnRCQtY' @ 72057594037927935 : 1 .. '!items!yI1zY5k8mAdx9wHK' @ 0 : 0; will stop at (end)
|
2026/01/08-07:52:47.403275 7f93e9ffb6c0 Manual compaction at level-0 from '!items!15IDGG6JoZnRCQtY' @ 72057594037927935 : 1 .. '!items!yI1zY5k8mAdx9wHK' @ 0 : 0; will stop at (end)
|
||||||
2026/01/06-16:09:34.843227 7f93e9ffb6c0 Manual compaction at level-1 from '!items!15IDGG6JoZnRCQtY' @ 72057594037927935 : 1 .. '!items!yI1zY5k8mAdx9wHK' @ 0 : 0; will stop at (end)
|
2026/01/08-07:52:47.403328 7f93e9ffb6c0 Manual compaction at level-1 from '!items!15IDGG6JoZnRCQtY' @ 72057594037927935 : 1 .. '!items!yI1zY5k8mAdx9wHK' @ 0 : 0; will stop at (end)
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
2026/01/06-08:47:47.509458 7f93eb7fe6c0 Recovering log #342
|
2026/01/08-00:15:43.076162 7f93ebfff6c0 Recovering log #362
|
||||||
2026/01/06-08:47:47.527407 7f93eb7fe6c0 Delete type=3 #340
|
2026/01/08-00:15:43.086316 7f93ebfff6c0 Delete type=3 #360
|
||||||
2026/01/06-08:47:47.527473 7f93eb7fe6c0 Delete type=0 #342
|
2026/01/08-00:15:43.086363 7f93ebfff6c0 Delete type=0 #362
|
||||||
2026/01/06-08:50:50.973158 7f93e9ffb6c0 Level-0 table #347: started
|
2026/01/08-00:20:54.664620 7f93e9ffb6c0 Level-0 table #367: started
|
||||||
2026/01/06-08:50:50.973217 7f93e9ffb6c0 Level-0 table #347: 0 bytes OK
|
2026/01/08-00:20:54.664662 7f93e9ffb6c0 Level-0 table #367: 0 bytes OK
|
||||||
2026/01/06-08:50:50.979461 7f93e9ffb6c0 Delete type=0 #345
|
2026/01/08-00:20:54.670908 7f93e9ffb6c0 Delete type=0 #365
|
||||||
2026/01/06-08:50:50.998993 7f93e9ffb6c0 Manual compaction at level-0 from '!items!15IDGG6JoZnRCQtY' @ 72057594037927935 : 1 .. '!items!yI1zY5k8mAdx9wHK' @ 0 : 0; will stop at (end)
|
2026/01/08-00:20:54.684304 7f93e9ffb6c0 Manual compaction at level-0 from '!items!15IDGG6JoZnRCQtY' @ 72057594037927935 : 1 .. '!items!yI1zY5k8mAdx9wHK' @ 0 : 0; will stop at (end)
|
||||||
2026/01/06-08:50:50.999032 7f93e9ffb6c0 Manual compaction at level-1 from '!items!15IDGG6JoZnRCQtY' @ 72057594037927935 : 1 .. '!items!yI1zY5k8mAdx9wHK' @ 0 : 0; will stop at (end)
|
2026/01/08-00:20:54.684350 7f93e9ffb6c0 Manual compaction at level-1 from '!items!15IDGG6JoZnRCQtY' @ 72057594037927935 : 1 .. '!items!yI1zY5k8mAdx9wHK' @ 0 : 0; will stop at (end)
|
||||||
|
|||||||
Binary file not shown.
@@ -1 +1 @@
|
|||||||
MANIFEST-000348
|
MANIFEST-000368
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
2026/01/06-08:51:42.891971 7f93eaffd6c0 Recovering log #346
|
2026/01/08-07:36:58.549013 7f93eaffd6c0 Recovering log #366
|
||||||
2026/01/06-08:51:42.902249 7f93eaffd6c0 Delete type=3 #344
|
2026/01/08-07:36:58.605339 7f93eaffd6c0 Delete type=3 #364
|
||||||
2026/01/06-08:51:42.902316 7f93eaffd6c0 Delete type=0 #346
|
2026/01/08-07:36:58.605416 7f93eaffd6c0 Delete type=0 #366
|
||||||
2026/01/06-16:09:34.843339 7f93e9ffb6c0 Level-0 table #351: started
|
2026/01/08-07:52:47.403436 7f93e9ffb6c0 Level-0 table #371: started
|
||||||
2026/01/06-16:09:34.843371 7f93e9ffb6c0 Level-0 table #351: 0 bytes OK
|
2026/01/08-07:52:47.403471 7f93e9ffb6c0 Level-0 table #371: 0 bytes OK
|
||||||
2026/01/06-16:09:34.879730 7f93e9ffb6c0 Delete type=0 #349
|
2026/01/08-07:52:47.409670 7f93e9ffb6c0 Delete type=0 #369
|
||||||
2026/01/06-16:09:35.030293 7f93e9ffb6c0 Manual compaction at level-0 from '!items!0BopmCu8vGK2923j' @ 72057594037927935 : 1 .. '!items!zYx0Ak2y1LNTcKlO' @ 0 : 0; will stop at (end)
|
2026/01/08-07:52:47.430786 7f93e9ffb6c0 Manual compaction at level-0 from '!items!0BopmCu8vGK2923j' @ 72057594037927935 : 1 .. '!items!zYx0Ak2y1LNTcKlO' @ 0 : 0; will stop at (end)
|
||||||
2026/01/06-16:09:35.030334 7f93e9ffb6c0 Manual compaction at level-1 from '!items!0BopmCu8vGK2923j' @ 72057594037927935 : 1 .. '!items!zYx0Ak2y1LNTcKlO' @ 0 : 0; will stop at (end)
|
2026/01/08-07:52:47.430926 7f93e9ffb6c0 Manual compaction at level-1 from '!items!0BopmCu8vGK2923j' @ 72057594037927935 : 1 .. '!items!zYx0Ak2y1LNTcKlO' @ 0 : 0; will stop at (end)
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
2026/01/06-08:47:47.618387 7f93eaffd6c0 Recovering log #342
|
2026/01/08-00:15:43.151338 7f93ea7fc6c0 Recovering log #362
|
||||||
2026/01/06-08:47:47.634155 7f93eaffd6c0 Delete type=3 #340
|
2026/01/08-00:15:43.161997 7f93ea7fc6c0 Delete type=3 #360
|
||||||
2026/01/06-08:47:47.634258 7f93eaffd6c0 Delete type=0 #342
|
2026/01/08-00:15:43.162053 7f93ea7fc6c0 Delete type=0 #362
|
||||||
2026/01/06-08:50:51.005416 7f93e9ffb6c0 Level-0 table #347: started
|
2026/01/08-00:20:54.657819 7f93e9ffb6c0 Level-0 table #367: started
|
||||||
2026/01/06-08:50:51.005447 7f93e9ffb6c0 Level-0 table #347: 0 bytes OK
|
2026/01/08-00:20:54.657846 7f93e9ffb6c0 Level-0 table #367: 0 bytes OK
|
||||||
2026/01/06-08:50:51.011462 7f93e9ffb6c0 Delete type=0 #345
|
2026/01/08-00:20:54.664450 7f93e9ffb6c0 Delete type=0 #365
|
||||||
2026/01/06-08:50:51.024529 7f93e9ffb6c0 Manual compaction at level-0 from '!items!0BopmCu8vGK2923j' @ 72057594037927935 : 1 .. '!items!zYx0Ak2y1LNTcKlO' @ 0 : 0; will stop at (end)
|
2026/01/08-00:20:54.684285 7f93e9ffb6c0 Manual compaction at level-0 from '!items!0BopmCu8vGK2923j' @ 72057594037927935 : 1 .. '!items!zYx0Ak2y1LNTcKlO' @ 0 : 0; will stop at (end)
|
||||||
2026/01/06-08:50:51.024571 7f93e9ffb6c0 Manual compaction at level-1 from '!items!0BopmCu8vGK2923j' @ 72057594037927935 : 1 .. '!items!zYx0Ak2y1LNTcKlO' @ 0 : 0; will stop at (end)
|
2026/01/08-00:20:54.684340 7f93e9ffb6c0 Manual compaction at level-1 from '!items!0BopmCu8vGK2923j' @ 72057594037927935 : 1 .. '!items!zYx0Ak2y1LNTcKlO' @ 0 : 0; will stop at (end)
|
||||||
|
|||||||
Binary file not shown.
@@ -1 +1 @@
|
|||||||
MANIFEST-000348
|
MANIFEST-000368
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
2026/01/06-08:51:42.855440 7f93eaffd6c0 Recovering log #346
|
2026/01/08-07:36:58.341692 7f93eaffd6c0 Recovering log #366
|
||||||
2026/01/06-08:51:42.865357 7f93eaffd6c0 Delete type=3 #344
|
2026/01/08-07:36:58.417040 7f93eaffd6c0 Delete type=3 #364
|
||||||
2026/01/06-08:51:42.865405 7f93eaffd6c0 Delete type=0 #346
|
2026/01/08-07:36:58.417114 7f93eaffd6c0 Delete type=0 #366
|
||||||
2026/01/06-16:09:34.990584 7f93e9ffb6c0 Level-0 table #351: started
|
2026/01/08-07:52:47.396242 7f93e9ffb6c0 Level-0 table #371: started
|
||||||
2026/01/06-16:09:34.990612 7f93e9ffb6c0 Level-0 table #351: 0 bytes OK
|
2026/01/08-07:52:47.396291 7f93e9ffb6c0 Level-0 table #371: 0 bytes OK
|
||||||
2026/01/06-16:09:35.030140 7f93e9ffb6c0 Delete type=0 #349
|
2026/01/08-07:52:47.403127 7f93e9ffb6c0 Delete type=0 #369
|
||||||
2026/01/06-16:09:35.030326 7f93e9ffb6c0 Manual compaction at level-0 from '!items!15foLG7y3LUXNzkK' @ 72057594037927935 : 1 .. '!items!z1HtkvazCGHut7cz' @ 0 : 0; will stop at (end)
|
2026/01/08-07:52:47.403310 7f93e9ffb6c0 Manual compaction at level-0 from '!items!15foLG7y3LUXNzkK' @ 72057594037927935 : 1 .. '!items!z1HtkvazCGHut7cz' @ 0 : 0; will stop at (end)
|
||||||
2026/01/06-16:09:35.030340 7f93e9ffb6c0 Manual compaction at level-1 from '!items!15foLG7y3LUXNzkK' @ 72057594037927935 : 1 .. '!items!z1HtkvazCGHut7cz' @ 0 : 0; will stop at (end)
|
2026/01/08-07:52:47.403338 7f93e9ffb6c0 Manual compaction at level-1 from '!items!15foLG7y3LUXNzkK' @ 72057594037927935 : 1 .. '!items!z1HtkvazCGHut7cz' @ 0 : 0; will stop at (end)
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
2026/01/06-08:47:47.564985 7f93eb7fe6c0 Recovering log #342
|
2026/01/08-00:15:43.114666 7f93eaffd6c0 Recovering log #362
|
||||||
2026/01/06-08:47:47.580878 7f93eb7fe6c0 Delete type=3 #340
|
2026/01/08-00:15:43.125226 7f93eaffd6c0 Delete type=3 #360
|
||||||
2026/01/06-08:47:47.580952 7f93eb7fe6c0 Delete type=0 #342
|
2026/01/08-00:15:43.125286 7f93eaffd6c0 Delete type=0 #362
|
||||||
2026/01/06-08:50:50.986188 7f93e9ffb6c0 Level-0 table #347: started
|
2026/01/08-00:20:54.644380 7f93e9ffb6c0 Level-0 table #367: started
|
||||||
2026/01/06-08:50:50.986224 7f93e9ffb6c0 Level-0 table #347: 0 bytes OK
|
2026/01/08-00:20:54.644418 7f93e9ffb6c0 Level-0 table #367: 0 bytes OK
|
||||||
2026/01/06-08:50:50.992304 7f93e9ffb6c0 Delete type=0 #345
|
2026/01/08-00:20:54.650881 7f93e9ffb6c0 Delete type=0 #365
|
||||||
2026/01/06-08:50:50.999018 7f93e9ffb6c0 Manual compaction at level-0 from '!items!15foLG7y3LUXNzkK' @ 72057594037927935 : 1 .. '!items!z1HtkvazCGHut7cz' @ 0 : 0; will stop at (end)
|
2026/01/08-00:20:54.657622 7f93e9ffb6c0 Manual compaction at level-0 from '!items!15foLG7y3LUXNzkK' @ 72057594037927935 : 1 .. '!items!z1HtkvazCGHut7cz' @ 0 : 0; will stop at (end)
|
||||||
2026/01/06-08:50:50.999038 7f93e9ffb6c0 Manual compaction at level-1 from '!items!15foLG7y3LUXNzkK' @ 72057594037927935 : 1 .. '!items!z1HtkvazCGHut7cz' @ 0 : 0; will stop at (end)
|
2026/01/08-00:20:54.657712 7f93e9ffb6c0 Manual compaction at level-1 from '!items!15foLG7y3LUXNzkK' @ 72057594037927935 : 1 .. '!items!z1HtkvazCGHut7cz' @ 0 : 0; will stop at (end)
|
||||||
|
|||||||
Binary file not shown.
@@ -1 +1 @@
|
|||||||
MANIFEST-000258
|
MANIFEST-000278
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
2026/01/06-08:51:42.830647 7f93ebfff6c0 Recovering log #256
|
2026/01/08-07:36:58.238796 7f93ea7fc6c0 Recovering log #276
|
||||||
2026/01/06-08:51:42.840435 7f93ebfff6c0 Delete type=3 #254
|
2026/01/08-07:36:58.294556 7f93ea7fc6c0 Delete type=3 #274
|
||||||
2026/01/06-08:51:42.840519 7f93ebfff6c0 Delete type=0 #256
|
2026/01/08-07:36:58.294621 7f93ea7fc6c0 Delete type=0 #276
|
||||||
2026/01/06-16:09:34.805232 7f93e9ffb6c0 Level-0 table #261: started
|
2026/01/08-07:52:47.375523 7f93e9ffb6c0 Level-0 table #281: started
|
||||||
2026/01/06-16:09:34.805271 7f93e9ffb6c0 Level-0 table #261: 0 bytes OK
|
2026/01/08-07:52:47.375602 7f93e9ffb6c0 Level-0 table #281: 0 bytes OK
|
||||||
2026/01/06-16:09:34.843002 7f93e9ffb6c0 Delete type=0 #259
|
2026/01/08-07:52:47.382951 7f93e9ffb6c0 Delete type=0 #279
|
||||||
2026/01/06-16:09:34.843211 7f93e9ffb6c0 Manual compaction at level-0 from '!folders!5d4Zn28TUcPxRyXd' @ 72057594037927935 : 1 .. '!items!zttESycGKltfwCzJ' @ 0 : 0; will stop at (end)
|
2026/01/08-07:52:47.403260 7f93e9ffb6c0 Manual compaction at level-0 from '!folders!5d4Zn28TUcPxRyXd' @ 72057594037927935 : 1 .. '!items!zttESycGKltfwCzJ' @ 0 : 0; will stop at (end)
|
||||||
2026/01/06-16:09:34.843234 7f93e9ffb6c0 Manual compaction at level-1 from '!folders!5d4Zn28TUcPxRyXd' @ 72057594037927935 : 1 .. '!items!zttESycGKltfwCzJ' @ 0 : 0; will stop at (end)
|
2026/01/08-07:52:47.403319 7f93e9ffb6c0 Manual compaction at level-1 from '!folders!5d4Zn28TUcPxRyXd' @ 72057594037927935 : 1 .. '!items!zttESycGKltfwCzJ' @ 0 : 0; will stop at (end)
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
2026/01/06-08:47:47.529585 7f93ebfff6c0 Recovering log #252
|
2026/01/08-00:15:43.088399 7f93eb7fe6c0 Recovering log #272
|
||||||
2026/01/06-08:47:47.544280 7f93ebfff6c0 Delete type=3 #250
|
2026/01/08-00:15:43.099521 7f93eb7fe6c0 Delete type=3 #270
|
||||||
2026/01/06-08:47:47.544346 7f93ebfff6c0 Delete type=0 #252
|
2026/01/08-00:15:43.099596 7f93eb7fe6c0 Delete type=0 #272
|
||||||
2026/01/06-08:50:50.992474 7f93e9ffb6c0 Level-0 table #257: started
|
2026/01/08-00:20:54.651065 7f93e9ffb6c0 Level-0 table #277: started
|
||||||
2026/01/06-08:50:50.992510 7f93e9ffb6c0 Level-0 table #257: 0 bytes OK
|
2026/01/08-00:20:54.651103 7f93e9ffb6c0 Level-0 table #277: 0 bytes OK
|
||||||
2026/01/06-08:50:50.998885 7f93e9ffb6c0 Delete type=0 #255
|
2026/01/08-00:20:54.657432 7f93e9ffb6c0 Delete type=0 #275
|
||||||
2026/01/06-08:50:50.999026 7f93e9ffb6c0 Manual compaction at level-0 from '!folders!5d4Zn28TUcPxRyXd' @ 72057594037927935 : 1 .. '!items!zttESycGKltfwCzJ' @ 0 : 0; will stop at (end)
|
2026/01/08-00:20:54.657633 7f93e9ffb6c0 Manual compaction at level-0 from '!folders!5d4Zn28TUcPxRyXd' @ 72057594037927935 : 1 .. '!items!zttESycGKltfwCzJ' @ 0 : 0; will stop at (end)
|
||||||
2026/01/06-08:50:50.999050 7f93e9ffb6c0 Manual compaction at level-1 from '!folders!5d4Zn28TUcPxRyXd' @ 72057594037927935 : 1 .. '!items!zttESycGKltfwCzJ' @ 0 : 0; will stop at (end)
|
2026/01/08-00:20:54.657657 7f93e9ffb6c0 Manual compaction at level-1 from '!folders!5d4Zn28TUcPxRyXd' @ 72057594037927935 : 1 .. '!items!zttESycGKltfwCzJ' @ 0 : 0; will stop at (end)
|
||||||
|
|||||||
Binary file not shown.
@@ -1 +1 @@
|
|||||||
MANIFEST-000348
|
MANIFEST-000368
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
2026/01/06-08:51:42.904420 7f93ea7fc6c0 Recovering log #346
|
2026/01/08-07:36:58.607815 7f93ebfff6c0 Recovering log #366
|
||||||
2026/01/06-08:51:42.914401 7f93ea7fc6c0 Delete type=3 #344
|
2026/01/08-07:36:58.660478 7f93ebfff6c0 Delete type=3 #364
|
||||||
2026/01/06-08:51:42.914460 7f93ea7fc6c0 Delete type=0 #346
|
2026/01/08-07:36:58.660531 7f93ebfff6c0 Delete type=0 #366
|
||||||
2026/01/06-16:09:34.944982 7f93e9ffb6c0 Level-0 table #351: started
|
2026/01/08-07:52:47.423537 7f93e9ffb6c0 Level-0 table #371: started
|
||||||
2026/01/06-16:09:34.945015 7f93e9ffb6c0 Level-0 table #351: 0 bytes OK
|
2026/01/08-07:52:47.423575 7f93e9ffb6c0 Level-0 table #371: 0 bytes OK
|
||||||
2026/01/06-16:09:34.990460 7f93e9ffb6c0 Delete type=0 #349
|
2026/01/08-07:52:47.430547 7f93e9ffb6c0 Delete type=0 #369
|
||||||
2026/01/06-16:09:35.030317 7f93e9ffb6c0 Manual compaction at level-0 from '!items!26mRstKhCJoXkhu1' @ 72057594037927935 : 1 .. '!items!tFQqcxmkS3MT6ASE' @ 0 : 0; will stop at (end)
|
2026/01/08-07:52:47.430902 7f93e9ffb6c0 Manual compaction at level-0 from '!items!26mRstKhCJoXkhu1' @ 72057594037927935 : 1 .. '!items!tFQqcxmkS3MT6ASE' @ 0 : 0; will stop at (end)
|
||||||
2026/01/06-16:09:35.030352 7f93e9ffb6c0 Manual compaction at level-1 from '!items!26mRstKhCJoXkhu1' @ 72057594037927935 : 1 .. '!items!tFQqcxmkS3MT6ASE' @ 0 : 0; will stop at (end)
|
2026/01/08-07:52:47.430939 7f93e9ffb6c0 Manual compaction at level-1 from '!items!26mRstKhCJoXkhu1' @ 72057594037927935 : 1 .. '!items!tFQqcxmkS3MT6ASE' @ 0 : 0; will stop at (end)
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
2026/01/06-08:47:47.638458 7f93eb7fe6c0 Recovering log #342
|
2026/01/08-00:15:43.164110 7f93eaffd6c0 Recovering log #362
|
||||||
2026/01/06-08:47:47.653642 7f93eb7fe6c0 Delete type=3 #340
|
2026/01/08-00:15:43.174399 7f93eaffd6c0 Delete type=3 #360
|
||||||
2026/01/06-08:47:47.653699 7f93eb7fe6c0 Delete type=0 #342
|
2026/01/08-00:15:43.174504 7f93eaffd6c0 Delete type=0 #362
|
||||||
2026/01/06-08:50:51.044605 7f93e9ffb6c0 Level-0 table #347: started
|
2026/01/08-00:20:54.690953 7f93e9ffb6c0 Level-0 table #367: started
|
||||||
2026/01/06-08:50:51.044630 7f93e9ffb6c0 Level-0 table #347: 0 bytes OK
|
2026/01/08-00:20:54.690990 7f93e9ffb6c0 Level-0 table #367: 0 bytes OK
|
||||||
2026/01/06-08:50:51.051730 7f93e9ffb6c0 Delete type=0 #345
|
2026/01/08-00:20:54.697638 7f93e9ffb6c0 Delete type=0 #365
|
||||||
2026/01/06-08:50:51.051919 7f93e9ffb6c0 Manual compaction at level-0 from '!items!26mRstKhCJoXkhu1' @ 72057594037927935 : 1 .. '!items!tFQqcxmkS3MT6ASE' @ 0 : 0; will stop at (end)
|
2026/01/08-00:20:54.710594 7f93e9ffb6c0 Manual compaction at level-0 from '!items!26mRstKhCJoXkhu1' @ 72057594037927935 : 1 .. '!items!tFQqcxmkS3MT6ASE' @ 0 : 0; will stop at (end)
|
||||||
2026/01/06-08:50:51.051949 7f93e9ffb6c0 Manual compaction at level-1 from '!items!26mRstKhCJoXkhu1' @ 72057594037927935 : 1 .. '!items!tFQqcxmkS3MT6ASE' @ 0 : 0; will stop at (end)
|
2026/01/08-00:20:54.710643 7f93e9ffb6c0 Manual compaction at level-1 from '!items!26mRstKhCJoXkhu1' @ 72057594037927935 : 1 .. '!items!tFQqcxmkS3MT6ASE' @ 0 : 0; will stop at (end)
|
||||||
|
|||||||
Binary file not shown.
@@ -1 +1 @@
|
|||||||
MANIFEST-000348
|
MANIFEST-000368
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
2026/01/06-08:51:42.879502 7f93ebfff6c0 Recovering log #346
|
2026/01/08-07:36:58.497400 7f93eb7fe6c0 Recovering log #366
|
||||||
2026/01/06-08:51:42.890237 7f93ebfff6c0 Delete type=3 #344
|
2026/01/08-07:36:58.547161 7f93eb7fe6c0 Delete type=3 #364
|
||||||
2026/01/06-08:51:42.890307 7f93ebfff6c0 Delete type=0 #346
|
2026/01/08-07:36:58.547214 7f93eb7fe6c0 Delete type=0 #366
|
||||||
2026/01/06-16:09:34.879868 7f93e9ffb6c0 Level-0 table #351: started
|
2026/01/08-07:52:47.409880 7f93e9ffb6c0 Level-0 table #371: started
|
||||||
2026/01/06-16:09:34.879907 7f93e9ffb6c0 Level-0 table #351: 0 bytes OK
|
2026/01/08-07:52:47.409913 7f93e9ffb6c0 Level-0 table #371: 0 bytes OK
|
||||||
2026/01/06-16:09:34.944833 7f93e9ffb6c0 Delete type=0 #349
|
2026/01/08-07:52:47.416763 7f93e9ffb6c0 Delete type=0 #369
|
||||||
2026/01/06-16:09:35.030307 7f93e9ffb6c0 Manual compaction at level-0 from '!items!16iPa2yIzB0V3pxb' @ 72057594037927935 : 1 .. '!items!yszkersMTE4p9VzP' @ 0 : 0; will stop at (end)
|
2026/01/08-07:52:47.430823 7f93e9ffb6c0 Manual compaction at level-0 from '!items!16iPa2yIzB0V3pxb' @ 72057594037927935 : 1 .. '!items!yszkersMTE4p9VzP' @ 0 : 0; will stop at (end)
|
||||||
2026/01/06-16:09:35.030345 7f93e9ffb6c0 Manual compaction at level-1 from '!items!16iPa2yIzB0V3pxb' @ 72057594037927935 : 1 .. '!items!yszkersMTE4p9VzP' @ 0 : 0; will stop at (end)
|
2026/01/08-07:52:47.430891 7f93e9ffb6c0 Manual compaction at level-1 from '!items!16iPa2yIzB0V3pxb' @ 72057594037927935 : 1 .. '!items!yszkersMTE4p9VzP' @ 0 : 0; will stop at (end)
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
2026/01/06-08:47:47.600139 7f93ea7fc6c0 Recovering log #342
|
2026/01/08-00:15:43.139435 7f93eb7fe6c0 Recovering log #362
|
||||||
2026/01/06-08:47:47.616201 7f93ea7fc6c0 Delete type=3 #340
|
2026/01/08-00:15:43.149526 7f93eb7fe6c0 Delete type=3 #360
|
||||||
2026/01/06-08:47:47.616278 7f93ea7fc6c0 Delete type=0 #342
|
2026/01/08-00:15:43.149593 7f93eb7fe6c0 Delete type=0 #362
|
||||||
2026/01/06-08:50:50.999146 7f93e9ffb6c0 Level-0 table #347: started
|
2026/01/08-00:20:54.671087 7f93e9ffb6c0 Level-0 table #367: started
|
||||||
2026/01/06-08:50:50.999191 7f93e9ffb6c0 Level-0 table #347: 0 bytes OK
|
2026/01/08-00:20:54.671124 7f93e9ffb6c0 Level-0 table #367: 0 bytes OK
|
||||||
2026/01/06-08:50:51.005300 7f93e9ffb6c0 Delete type=0 #345
|
2026/01/08-00:20:54.677235 7f93e9ffb6c0 Delete type=0 #365
|
||||||
2026/01/06-08:50:51.024514 7f93e9ffb6c0 Manual compaction at level-0 from '!items!16iPa2yIzB0V3pxb' @ 72057594037927935 : 1 .. '!items!yszkersMTE4p9VzP' @ 0 : 0; will stop at (end)
|
2026/01/08-00:20:54.684319 7f93e9ffb6c0 Manual compaction at level-0 from '!items!16iPa2yIzB0V3pxb' @ 72057594037927935 : 1 .. '!items!yszkersMTE4p9VzP' @ 0 : 0; will stop at (end)
|
||||||
2026/01/06-08:50:51.024562 7f93e9ffb6c0 Manual compaction at level-1 from '!items!16iPa2yIzB0V3pxb' @ 72057594037927935 : 1 .. '!items!yszkersMTE4p9VzP' @ 0 : 0; will stop at (end)
|
2026/01/08-00:20:54.684358 7f93e9ffb6c0 Manual compaction at level-1 from '!items!16iPa2yIzB0V3pxb' @ 72057594037927935 : 1 .. '!items!yszkersMTE4p9VzP' @ 0 : 0; will stop at (end)
|
||||||
|
|||||||
Binary file not shown.
@@ -1 +1 @@
|
|||||||
MANIFEST-000187
|
MANIFEST-000207
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
2026/01/06-08:51:42.955411 7f93eb7fe6c0 Recovering log #185
|
2026/01/08-07:36:58.830191 7f93eaffd6c0 Recovering log #205
|
||||||
2026/01/06-08:51:42.966311 7f93eb7fe6c0 Delete type=3 #183
|
2026/01/08-07:36:58.883702 7f93eaffd6c0 Delete type=3 #203
|
||||||
2026/01/06-08:51:42.966372 7f93eb7fe6c0 Delete type=0 #185
|
2026/01/08-07:36:58.883764 7f93eaffd6c0 Delete type=0 #205
|
||||||
2026/01/06-16:09:35.146583 7f93e9ffb6c0 Level-0 table #190: started
|
2026/01/08-07:52:47.451250 7f93e9ffb6c0 Level-0 table #210: started
|
||||||
2026/01/06-16:09:35.146626 7f93e9ffb6c0 Level-0 table #190: 0 bytes OK
|
2026/01/08-07:52:47.451280 7f93e9ffb6c0 Level-0 table #210: 0 bytes OK
|
||||||
2026/01/06-16:09:35.183379 7f93e9ffb6c0 Delete type=0 #188
|
2026/01/08-07:52:47.457272 7f93e9ffb6c0 Delete type=0 #208
|
||||||
2026/01/06-16:09:35.183567 7f93e9ffb6c0 Manual compaction at level-0 from '!scenes!VOzC5ey4qi1C34MY' @ 72057594037927935 : 1 .. '!scenes!mfosNsLsHN5Pf4TO' @ 0 : 0; will stop at (end)
|
2026/01/08-07:52:47.457390 7f93e9ffb6c0 Manual compaction at level-0 from '!scenes!VOzC5ey4qi1C34MY' @ 72057594037927935 : 1 .. '!scenes!mfosNsLsHN5Pf4TO' @ 0 : 0; will stop at (end)
|
||||||
2026/01/06-16:09:35.183590 7f93e9ffb6c0 Manual compaction at level-1 from '!scenes!VOzC5ey4qi1C34MY' @ 72057594037927935 : 1 .. '!scenes!mfosNsLsHN5Pf4TO' @ 0 : 0; will stop at (end)
|
2026/01/08-07:52:47.457403 7f93e9ffb6c0 Manual compaction at level-1 from '!scenes!VOzC5ey4qi1C34MY' @ 72057594037927935 : 1 .. '!scenes!mfosNsLsHN5Pf4TO' @ 0 : 0; will stop at (end)
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
2026/01/06-08:47:47.712749 7f93eb7fe6c0 Recovering log #181
|
2026/01/08-00:15:43.214587 7f93eb7fe6c0 Recovering log #201
|
||||||
2026/01/06-08:47:47.728095 7f93eb7fe6c0 Delete type=3 #179
|
2026/01/08-00:15:43.225132 7f93eb7fe6c0 Delete type=3 #199
|
||||||
2026/01/06-08:47:47.728172 7f93eb7fe6c0 Delete type=0 #181
|
2026/01/08-00:15:43.225182 7f93eb7fe6c0 Delete type=0 #201
|
||||||
2026/01/06-08:50:51.038567 7f93e9ffb6c0 Level-0 table #186: started
|
2026/01/08-00:20:54.704423 7f93e9ffb6c0 Level-0 table #206: started
|
||||||
2026/01/06-08:50:51.038599 7f93e9ffb6c0 Level-0 table #186: 0 bytes OK
|
2026/01/08-00:20:54.704452 7f93e9ffb6c0 Level-0 table #206: 0 bytes OK
|
||||||
2026/01/06-08:50:51.044519 7f93e9ffb6c0 Delete type=0 #184
|
2026/01/08-00:20:54.710454 7f93e9ffb6c0 Delete type=0 #204
|
||||||
2026/01/06-08:50:51.051910 7f93e9ffb6c0 Manual compaction at level-0 from '!scenes!VOzC5ey4qi1C34MY' @ 72057594037927935 : 1 .. '!scenes!mfosNsLsHN5Pf4TO' @ 0 : 0; will stop at (end)
|
2026/01/08-00:20:54.710619 7f93e9ffb6c0 Manual compaction at level-0 from '!scenes!VOzC5ey4qi1C34MY' @ 72057594037927935 : 1 .. '!scenes!mfosNsLsHN5Pf4TO' @ 0 : 0; will stop at (end)
|
||||||
2026/01/06-08:50:51.051933 7f93e9ffb6c0 Manual compaction at level-1 from '!scenes!VOzC5ey4qi1C34MY' @ 72057594037927935 : 1 .. '!scenes!mfosNsLsHN5Pf4TO' @ 0 : 0; will stop at (end)
|
2026/01/08-00:20:54.710656 7f93e9ffb6c0 Manual compaction at level-1 from '!scenes!VOzC5ey4qi1C34MY' @ 72057594037927935 : 1 .. '!scenes!mfosNsLsHN5Pf4TO' @ 0 : 0; will stop at (end)
|
||||||
|
|||||||
Binary file not shown.
@@ -1 +1 @@
|
|||||||
MANIFEST-000344
|
MANIFEST-000364
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
2026/01/06-08:51:42.942425 7f93ea7fc6c0 Recovering log #342
|
2026/01/08-07:36:58.774502 7f93ebfff6c0 Recovering log #362
|
||||||
2026/01/06-08:51:42.952983 7f93ea7fc6c0 Delete type=3 #340
|
2026/01/08-07:36:58.827829 7f93ebfff6c0 Delete type=3 #360
|
||||||
2026/01/06-08:51:42.953043 7f93ea7fc6c0 Delete type=0 #342
|
2026/01/08-07:36:58.827920 7f93ebfff6c0 Delete type=0 #362
|
||||||
2026/01/06-16:09:35.067151 7f93e9ffb6c0 Level-0 table #347: started
|
2026/01/08-07:52:47.437834 7f93e9ffb6c0 Level-0 table #367: started
|
||||||
2026/01/06-16:09:35.067186 7f93e9ffb6c0 Level-0 table #347: 0 bytes OK
|
2026/01/08-07:52:47.437856 7f93e9ffb6c0 Level-0 table #367: 0 bytes OK
|
||||||
2026/01/06-16:09:35.104060 7f93e9ffb6c0 Delete type=0 #345
|
2026/01/08-07:52:47.443805 7f93e9ffb6c0 Delete type=0 #365
|
||||||
2026/01/06-16:09:35.183546 7f93e9ffb6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)
|
2026/01/08-07:52:47.457374 7f93e9ffb6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
2026/01/06-08:47:47.694947 7f93ea7fc6c0 Recovering log #338
|
2026/01/08-00:15:43.202222 7f93ea7fc6c0 Recovering log #358
|
||||||
2026/01/06-08:47:47.710886 7f93ea7fc6c0 Delete type=3 #336
|
2026/01/08-00:15:43.212157 7f93ea7fc6c0 Delete type=3 #356
|
||||||
2026/01/06-08:47:47.710964 7f93ea7fc6c0 Delete type=0 #338
|
2026/01/08-00:15:43.212206 7f93ea7fc6c0 Delete type=0 #358
|
||||||
2026/01/06-08:50:51.031305 7f93e9ffb6c0 Level-0 table #343: started
|
2026/01/08-00:20:54.697737 7f93e9ffb6c0 Level-0 table #363: started
|
||||||
2026/01/06-08:50:51.031341 7f93e9ffb6c0 Level-0 table #343: 0 bytes OK
|
2026/01/08-00:20:54.697766 7f93e9ffb6c0 Level-0 table #363: 0 bytes OK
|
||||||
2026/01/06-08:50:51.038444 7f93e9ffb6c0 Delete type=0 #341
|
2026/01/08-00:20:54.704300 7f93e9ffb6c0 Delete type=0 #361
|
||||||
2026/01/06-08:50:51.051898 7f93e9ffb6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)
|
2026/01/08-00:20:54.710607 7f93e9ffb6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)
|
||||||
|
|||||||
Binary file not shown.
BIN
packs/tables/MANIFEST-000364
Normal file
BIN
packs/tables/MANIFEST-000364
Normal file
Binary file not shown.
@@ -1 +1 @@
|
|||||||
MANIFEST-000348
|
MANIFEST-000368
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
2026/01/06-08:51:42.930439 7f93eaffd6c0 Recovering log #346
|
2026/01/08-07:36:58.717283 7f93eb7fe6c0 Recovering log #366
|
||||||
2026/01/06-08:51:42.940486 7f93eaffd6c0 Delete type=3 #344
|
2026/01/08-07:36:58.772444 7f93eb7fe6c0 Delete type=3 #364
|
||||||
2026/01/06-08:51:42.940554 7f93eaffd6c0 Delete type=0 #346
|
2026/01/08-07:36:58.772520 7f93eb7fe6c0 Delete type=0 #366
|
||||||
2026/01/06-16:09:35.104217 7f93e9ffb6c0 Level-0 table #351: started
|
2026/01/08-07:52:47.431155 7f93e9ffb6c0 Level-0 table #371: started
|
||||||
2026/01/06-16:09:35.104251 7f93e9ffb6c0 Level-0 table #351: 0 bytes OK
|
2026/01/08-07:52:47.431201 7f93e9ffb6c0 Level-0 table #371: 0 bytes OK
|
||||||
2026/01/06-16:09:35.146416 7f93e9ffb6c0 Delete type=0 #349
|
2026/01/08-07:52:47.437721 7f93e9ffb6c0 Delete type=0 #369
|
||||||
2026/01/06-16:09:35.183557 7f93e9ffb6c0 Manual compaction at level-0 from '!items!0jRgc9a9L8i7j1Uk' @ 72057594037927935 : 1 .. '!items!yRTYaNKyXBX9wHhb' @ 0 : 0; will stop at (end)
|
2026/01/08-07:52:47.457361 7f93e9ffb6c0 Manual compaction at level-0 from '!items!0jRgc9a9L8i7j1Uk' @ 72057594037927935 : 1 .. '!items!yRTYaNKyXBX9wHhb' @ 0 : 0; will stop at (end)
|
||||||
2026/01/06-16:09:35.183582 7f93e9ffb6c0 Manual compaction at level-1 from '!items!0jRgc9a9L8i7j1Uk' @ 72057594037927935 : 1 .. '!items!yRTYaNKyXBX9wHhb' @ 0 : 0; will stop at (end)
|
2026/01/08-07:52:47.457396 7f93e9ffb6c0 Manual compaction at level-1 from '!items!0jRgc9a9L8i7j1Uk' @ 72057594037927935 : 1 .. '!items!yRTYaNKyXBX9wHhb' @ 0 : 0; will stop at (end)
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
2026/01/06-08:47:47.671595 7f93eaffd6c0 Recovering log #342
|
2026/01/08-00:15:43.189361 7f93ebfff6c0 Recovering log #362
|
||||||
2026/01/06-08:47:47.692464 7f93eaffd6c0 Delete type=3 #340
|
2026/01/08-00:15:43.200185 7f93ebfff6c0 Delete type=3 #360
|
||||||
2026/01/06-08:47:47.692528 7f93eaffd6c0 Delete type=0 #342
|
2026/01/08-00:15:43.200255 7f93ebfff6c0 Delete type=0 #362
|
||||||
2026/01/06-08:50:51.024710 7f93e9ffb6c0 Level-0 table #347: started
|
2026/01/08-00:20:54.684478 7f93e9ffb6c0 Level-0 table #367: started
|
||||||
2026/01/06-08:50:51.024753 7f93e9ffb6c0 Level-0 table #347: 0 bytes OK
|
2026/01/08-00:20:54.684512 7f93e9ffb6c0 Level-0 table #367: 0 bytes OK
|
||||||
2026/01/06-08:50:51.031167 7f93e9ffb6c0 Delete type=0 #345
|
2026/01/08-00:20:54.690795 7f93e9ffb6c0 Delete type=0 #365
|
||||||
2026/01/06-08:50:51.051881 7f93e9ffb6c0 Manual compaction at level-0 from '!items!0jRgc9a9L8i7j1Uk' @ 72057594037927935 : 1 .. '!items!yRTYaNKyXBX9wHhb' @ 0 : 0; will stop at (end)
|
2026/01/08-00:20:54.710576 7f93e9ffb6c0 Manual compaction at level-0 from '!items!0jRgc9a9L8i7j1Uk' @ 72057594037927935 : 1 .. '!items!yRTYaNKyXBX9wHhb' @ 0 : 0; will stop at (end)
|
||||||
2026/01/06-08:50:51.051926 7f93e9ffb6c0 Manual compaction at level-1 from '!items!0jRgc9a9L8i7j1Uk' @ 72057594037927935 : 1 .. '!items!yRTYaNKyXBX9wHhb' @ 0 : 0; will stop at (end)
|
2026/01/08-00:20:54.710630 7f93e9ffb6c0 Manual compaction at level-1 from '!items!0jRgc9a9L8i7j1Uk' @ 72057594037927935 : 1 .. '!items!yRTYaNKyXBX9wHhb' @ 0 : 0; will stop at (end)
|
||||||
|
|||||||
Binary file not shown.
@@ -1 +1 @@
|
|||||||
MANIFEST-000350
|
MANIFEST-000370
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
2026/01/06-08:51:42.916450 7f93ebfff6c0 Recovering log #348
|
2026/01/08-07:36:58.662555 7f93ea7fc6c0 Recovering log #368
|
||||||
2026/01/06-08:51:42.927518 7f93ebfff6c0 Delete type=3 #346
|
2026/01/08-07:36:58.713987 7f93ea7fc6c0 Delete type=3 #366
|
||||||
2026/01/06-08:51:42.927580 7f93ebfff6c0 Delete type=0 #348
|
2026/01/08-07:36:58.714081 7f93ea7fc6c0 Delete type=0 #368
|
||||||
2026/01/06-16:09:35.030447 7f93e9ffb6c0 Level-0 table #353: started
|
2026/01/08-07:52:47.443909 7f93e9ffb6c0 Level-0 table #373: started
|
||||||
2026/01/06-16:09:35.030472 7f93e9ffb6c0 Level-0 table #353: 0 bytes OK
|
2026/01/08-07:52:47.443932 7f93e9ffb6c0 Level-0 table #373: 0 bytes OK
|
||||||
2026/01/06-16:09:35.066996 7f93e9ffb6c0 Delete type=0 #351
|
2026/01/08-07:52:47.451059 7f93e9ffb6c0 Delete type=0 #371
|
||||||
2026/01/06-16:09:35.183534 7f93e9ffb6c0 Manual compaction at level-0 from '!items!07bq0fsbn653i81y' @ 72057594037927935 : 1 .. '!items!zKvlDHBalR4UdwUx' @ 0 : 0; will stop at (end)
|
2026/01/08-07:52:47.457383 7f93e9ffb6c0 Manual compaction at level-0 from '!items!07bq0fsbn653i81y' @ 72057594037927935 : 1 .. '!items!zKvlDHBalR4UdwUx' @ 0 : 0; will stop at (end)
|
||||||
2026/01/06-16:09:35.183574 7f93e9ffb6c0 Manual compaction at level-1 from '!items!07bq0fsbn653i81y' @ 72057594037927935 : 1 .. '!items!zKvlDHBalR4UdwUx' @ 0 : 0; will stop at (end)
|
2026/01/08-07:52:47.457437 7f93e9ffb6c0 Manual compaction at level-1 from '!items!07bq0fsbn653i81y' @ 72057594037927935 : 1 .. '!items!zKvlDHBalR4UdwUx' @ 0 : 0; will stop at (end)
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
2026/01/06-08:47:47.655576 7f93ebfff6c0 Recovering log #344
|
2026/01/08-00:15:43.176710 7f93eb7fe6c0 Recovering log #364
|
||||||
2026/01/06-08:47:47.669164 7f93ebfff6c0 Delete type=3 #342
|
2026/01/08-00:15:43.186491 7f93eb7fe6c0 Delete type=3 #362
|
||||||
2026/01/06-08:47:47.669230 7f93ebfff6c0 Delete type=0 #344
|
2026/01/08-00:15:43.186547 7f93eb7fe6c0 Delete type=0 #364
|
||||||
2026/01/06-08:50:51.018281 7f93e9ffb6c0 Level-0 table #349: started
|
2026/01/08-00:20:54.677442 7f93e9ffb6c0 Level-0 table #369: started
|
||||||
2026/01/06-08:50:51.018314 7f93e9ffb6c0 Level-0 table #349: 0 bytes OK
|
2026/01/08-00:20:54.677488 7f93e9ffb6c0 Level-0 table #369: 0 bytes OK
|
||||||
2026/01/06-08:50:51.024380 7f93e9ffb6c0 Delete type=0 #347
|
2026/01/08-00:20:54.684133 7f93e9ffb6c0 Delete type=0 #367
|
||||||
2026/01/06-08:50:51.024553 7f93e9ffb6c0 Manual compaction at level-0 from '!items!07bq0fsbn653i81y' @ 72057594037927935 : 1 .. '!items!zKvlDHBalR4UdwUx' @ 0 : 0; will stop at (end)
|
2026/01/08-00:20:54.684329 7f93e9ffb6c0 Manual compaction at level-0 from '!items!07bq0fsbn653i81y' @ 72057594037927935 : 1 .. '!items!zKvlDHBalR4UdwUx' @ 0 : 0; will stop at (end)
|
||||||
2026/01/06-08:50:51.024577 7f93e9ffb6c0 Manual compaction at level-1 from '!items!07bq0fsbn653i81y' @ 72057594037927935 : 1 .. '!items!zKvlDHBalR4UdwUx' @ 0 : 0; will stop at (end)
|
2026/01/08-00:20:54.684366 7f93e9ffb6c0 Manual compaction at level-1 from '!items!07bq0fsbn653i81y' @ 72057594037927935 : 1 .. '!items!zKvlDHBalR4UdwUx' @ 0 : 0; will stop at (end)
|
||||||
|
|||||||
Binary file not shown.
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
121
system.json
121
system.json
@@ -1,11 +1,12 @@
|
|||||||
{
|
{
|
||||||
"id": "fvtt-hawkmoon-cyd",
|
"id": "fvtt-hawkmoon-cyd",
|
||||||
|
"title": "Hawkmoon - CYD System",
|
||||||
"description": "Hawkmoon RPG for FoundryVTT (CYD system - French)",
|
"description": "Hawkmoon RPG for FoundryVTT (CYD system - French)",
|
||||||
|
"manifest": "https://www.uberwald.me/gitea/public/fvtt-hawkmoon-cyd/raw/branch/master/system.json",
|
||||||
|
"download": "https://www.uberwald.me/gitea/public/fvtt-hawkmoon-cyd/archive/fvtt-hawkmoon-cyd-13.0.7.zip",
|
||||||
|
"url": "https://www.uberwald.me/gitea/public/fvtt-hawkmoon-cyd",
|
||||||
|
"license": "LICENSE.txt",
|
||||||
"version": "13.0.7",
|
"version": "13.0.7",
|
||||||
"grid": {
|
|
||||||
"distance": 2,
|
|
||||||
"units": "m"
|
|
||||||
},
|
|
||||||
"authors": [
|
"authors": [
|
||||||
{
|
{
|
||||||
"name": "Uberwald/LeRatierBretonnien",
|
"name": "Uberwald/LeRatierBretonnien",
|
||||||
@@ -32,12 +33,16 @@
|
|||||||
"flags": {}
|
"flags": {}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"compatibility": {
|
||||||
|
"minimum": "13",
|
||||||
|
"verified": "13"
|
||||||
|
},
|
||||||
"esmodules": [
|
"esmodules": [
|
||||||
"modules/hawkmoon-main.js"
|
"modules/hawkmoon-main.js"
|
||||||
],
|
],
|
||||||
"license": "LICENSE.txt",
|
"styles": [
|
||||||
"manifest": "https://www.uberwald.me/gitea/public/fvtt-hawkmoon-cyd/raw/branch/master/system.json",
|
"styles/hawkmoon.css"
|
||||||
"download": "https://www.uberwald.me/gitea/public/fvtt-hawkmoon-cyd/archive/fvtt-hawkmoon-cyd-13.0.7.zip",
|
],
|
||||||
"languages": [
|
"languages": [
|
||||||
{
|
{
|
||||||
"lang": "fr",
|
"lang": "fr",
|
||||||
@@ -46,6 +51,93 @@
|
|||||||
"flags": {}
|
"flags": {}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"documentTypes": {
|
||||||
|
"Actor": {
|
||||||
|
"personnage": {
|
||||||
|
"htmlFields": [
|
||||||
|
"biodata.description",
|
||||||
|
"biodata.habitat",
|
||||||
|
"biodata.notes",
|
||||||
|
"biodata.gmnotes"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"cellule": {
|
||||||
|
"htmlFields": [
|
||||||
|
"description"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"creature": {
|
||||||
|
"htmlFields": [
|
||||||
|
"biodata.description",
|
||||||
|
"biodata.habitat",
|
||||||
|
"biodata.notes",
|
||||||
|
"biodata.gmnotes"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Item": {
|
||||||
|
"talent": {
|
||||||
|
"htmlFields": [
|
||||||
|
"description"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"historique": {
|
||||||
|
"htmlFields": [
|
||||||
|
"description"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"profil": {
|
||||||
|
"htmlFields": [
|
||||||
|
"description"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"competence": {
|
||||||
|
"htmlFields": [
|
||||||
|
"description"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"arme": {
|
||||||
|
"htmlFields": [
|
||||||
|
"description"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"protection": {
|
||||||
|
"htmlFields": [
|
||||||
|
"description"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"monnaie": {
|
||||||
|
"htmlFields": [
|
||||||
|
"description"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"equipement": {
|
||||||
|
"htmlFields": [
|
||||||
|
"description"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"artefact": {
|
||||||
|
"htmlFields": [
|
||||||
|
"description"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ressource": {
|
||||||
|
"htmlFields": [
|
||||||
|
"description"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"contact": {
|
||||||
|
"htmlFields": [
|
||||||
|
"description"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"mutation": {
|
||||||
|
"htmlFields": [
|
||||||
|
"description"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"packFolders": [
|
"packFolders": [
|
||||||
{
|
{
|
||||||
"name": "Hawkmoon",
|
"name": "Hawkmoon",
|
||||||
@@ -251,17 +343,12 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"grid": {
|
||||||
|
"distance": 2,
|
||||||
|
"units": "m"
|
||||||
|
},
|
||||||
"primaryTokenAttribute": "sante.vigueur",
|
"primaryTokenAttribute": "sante.vigueur",
|
||||||
"secondaryTokenAttribute": "bonneaventure.actuelle",
|
"secondaryTokenAttribute": "bonneaventure.actuelle",
|
||||||
"socket": true,
|
"socket": true,
|
||||||
"styles": [
|
"background": "systems/fvtt-hawkmoon-cyd/assets/ui/fond_hawkmoon.webp"
|
||||||
"styles/hawkmoon.css"
|
|
||||||
],
|
|
||||||
"title": "Hawkmoon - CYD System",
|
|
||||||
"url": "https://www.uberwald.me/gitea/public/fvtt-hawkmoon-cyd",
|
|
||||||
"background": "systems/fvtt-hawkmoon-cyd/assets/ui/fond_hawkmoon.webp",
|
|
||||||
"compatibility": {
|
|
||||||
"minimum": "13",
|
|
||||||
"verified": "13"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user