Compare commits
6 Commits
2.3.0
...
8882cf8ee2
| Author | SHA1 | Date | |
|---|---|---|---|
| 8882cf8ee2 | |||
| 00bcc775fe | |||
| 5a4d4c45dc | |||
| 7fc8d2c09c | |||
| bfe24812bd | |||
| 746f9e23bb |
+5
-1
@@ -7,18 +7,22 @@
|
||||
"verified": "13",
|
||||
"maximum": "14"
|
||||
},
|
||||
"socket": "true",
|
||||
"description": "Module de compendium et d'outils Mongoose Traveller 2e pour FoundryVTT écrit par JdR.Ninja.\nInclut les commandes /commerce, /pnj, /rencontre et /mission pour automatiser le commerce, les PNJ rapides, les rencontres et les contrats aléatoires. La fenêtre /pnj inclut un onglet 'PNJ Détaillé' pour la génération de PNJ Traveller selon les règles du générateur officiel, en s'appuyant sur les compétences natives des fiches.",
|
||||
"esmodules": [
|
||||
"scripts/batchNpcCreator.js",
|
||||
"scripts/commerce.js",
|
||||
"scripts/npc.js",
|
||||
"scripts/sector.js",
|
||||
"scripts/sectorSocket.js",
|
||||
"scripts/utils/travellerNpcUtils.js",
|
||||
"scripts/data/travellerNpcGenerator.js",
|
||||
"scripts/travellerNpcGenerator.js",
|
||||
"scripts/TravellerNpcDialog.js",
|
||||
"scripts/mgt2eMigration.js",
|
||||
"scripts/npcRollTableSync.js",
|
||||
"scripts/mgt2eSkills.js"
|
||||
"scripts/mgt2eSkills.js",
|
||||
"scripts/imperialCalendar.js"
|
||||
],
|
||||
"styles": [
|
||||
"styles/commerce.css",
|
||||
|
||||
+1
-1
@@ -1 +1 @@
|
||||
MANIFEST-000132
|
||||
MANIFEST-000172
|
||||
|
||||
+8
-8
@@ -1,8 +1,8 @@
|
||||
2026/06/12-20:52:58.023135 7fc410ffe6c0 Recovering log #130
|
||||
2026/06/12-20:52:58.033792 7fc410ffe6c0 Delete type=3 #128
|
||||
2026/06/12-20:52:58.033845 7fc410ffe6c0 Delete type=0 #130
|
||||
2026/06/12-20:53:22.703483 7fc3c11be6c0 Level-0 table #135: started
|
||||
2026/06/12-20:53:22.703533 7fc3c11be6c0 Level-0 table #135: 0 bytes OK
|
||||
2026/06/12-20:53:22.710309 7fc3c11be6c0 Delete type=0 #133
|
||||
2026/06/12-20:53:22.717089 7fc3c11be6c0 Manual compaction at level-0 from '!folders!673DRfEBYUliGnKJ' @ 72057594037927935 : 1 .. '!items!yoIqL0RQEnzNVJB6' @ 0 : 0; will stop at (end)
|
||||
2026/06/12-20:53:22.724385 7fc3c11be6c0 Manual compaction at level-1 from '!folders!673DRfEBYUliGnKJ' @ 72057594037927935 : 1 .. '!items!yoIqL0RQEnzNVJB6' @ 0 : 0; will stop at (end)
|
||||
2026/07/23-23:13:20.342427 7fb3977fe6c0 Recovering log #170
|
||||
2026/07/23-23:13:20.352394 7fb3977fe6c0 Delete type=3 #168
|
||||
2026/07/23-23:13:20.352478 7fb3977fe6c0 Delete type=0 #170
|
||||
2026/07/23-23:28:58.848551 7fb394b4f6c0 Level-0 table #175: started
|
||||
2026/07/23-23:28:58.848570 7fb394b4f6c0 Level-0 table #175: 0 bytes OK
|
||||
2026/07/23-23:28:58.855420 7fb394b4f6c0 Delete type=0 #173
|
||||
2026/07/23-23:28:58.862569 7fb394b4f6c0 Manual compaction at level-0 from '!folders!673DRfEBYUliGnKJ' @ 72057594037927935 : 1 .. '!items!yoIqL0RQEnzNVJB6' @ 0 : 0; will stop at (end)
|
||||
2026/07/23-23:28:58.876595 7fb394b4f6c0 Manual compaction at level-1 from '!folders!673DRfEBYUliGnKJ' @ 72057594037927935 : 1 .. '!items!yoIqL0RQEnzNVJB6' @ 0 : 0; will stop at (end)
|
||||
|
||||
+8
-8
@@ -1,8 +1,8 @@
|
||||
2026/06/12-20:51:44.594732 7fc3c3fff6c0 Recovering log #126
|
||||
2026/06/12-20:51:44.605104 7fc3c3fff6c0 Delete type=3 #124
|
||||
2026/06/12-20:51:44.605163 7fc3c3fff6c0 Delete type=0 #126
|
||||
2026/06/12-20:52:05.597166 7fc3c11be6c0 Level-0 table #131: started
|
||||
2026/06/12-20:52:05.597184 7fc3c11be6c0 Level-0 table #131: 0 bytes OK
|
||||
2026/06/12-20:52:05.604422 7fc3c11be6c0 Delete type=0 #129
|
||||
2026/06/12-20:52:05.618860 7fc3c11be6c0 Manual compaction at level-0 from '!folders!673DRfEBYUliGnKJ' @ 72057594037927935 : 1 .. '!items!yoIqL0RQEnzNVJB6' @ 0 : 0; will stop at (end)
|
||||
2026/06/12-20:52:05.619120 7fc3c11be6c0 Manual compaction at level-1 from '!folders!673DRfEBYUliGnKJ' @ 72057594037927935 : 1 .. '!items!yoIqL0RQEnzNVJB6' @ 0 : 0; will stop at (end)
|
||||
2026/07/09-07:47:54.209328 7f050a7fc6c0 Recovering log #166
|
||||
2026/07/09-07:47:54.260960 7f050a7fc6c0 Delete type=3 #164
|
||||
2026/07/09-07:47:54.261047 7f050a7fc6c0 Delete type=0 #166
|
||||
2026/07/09-07:48:38.285484 7f0509bff6c0 Level-0 table #171: started
|
||||
2026/07/09-07:48:38.285523 7f0509bff6c0 Level-0 table #171: 0 bytes OK
|
||||
2026/07/09-07:48:38.322960 7f0509bff6c0 Delete type=0 #169
|
||||
2026/07/09-07:48:38.360389 7f0509bff6c0 Manual compaction at level-0 from '!folders!673DRfEBYUliGnKJ' @ 72057594037927935 : 1 .. '!items!yoIqL0RQEnzNVJB6' @ 0 : 0; will stop at (end)
|
||||
2026/07/09-07:48:38.398070 7f0509bff6c0 Manual compaction at level-1 from '!folders!673DRfEBYUliGnKJ' @ 72057594037927935 : 1 .. '!items!yoIqL0RQEnzNVJB6' @ 0 : 0; will stop at (end)
|
||||
|
||||
Binary file not shown.
@@ -1 +1 @@
|
||||
MANIFEST-000231
|
||||
MANIFEST-000271
|
||||
|
||||
+8
-8
@@ -1,8 +1,8 @@
|
||||
2026/06/12-20:52:57.899810 7fc3c37fe6c0 Recovering log #229
|
||||
2026/06/12-20:52:57.911135 7fc3c37fe6c0 Delete type=3 #227
|
||||
2026/06/12-20:52:57.911180 7fc3c37fe6c0 Delete type=0 #229
|
||||
2026/06/12-20:53:22.642554 7fc3c11be6c0 Level-0 table #234: started
|
||||
2026/06/12-20:53:22.642590 7fc3c11be6c0 Level-0 table #234: 0 bytes OK
|
||||
2026/06/12-20:53:22.648801 7fc3c11be6c0 Delete type=0 #232
|
||||
2026/06/12-20:53:22.649072 7fc3c11be6c0 Manual compaction at level-0 from '!items!8xqChkoKK7i0c9M1' @ 72057594037927935 : 1 .. '!items!wpBopoosZiWXjlKD' @ 0 : 0; will stop at (end)
|
||||
2026/06/12-20:53:22.649091 7fc3c11be6c0 Manual compaction at level-1 from '!items!8xqChkoKK7i0c9M1' @ 72057594037927935 : 1 .. '!items!wpBopoosZiWXjlKD' @ 0 : 0; will stop at (end)
|
||||
2026/07/23-23:13:20.211553 7fb3977fe6c0 Recovering log #269
|
||||
2026/07/23-23:13:20.223303 7fb3977fe6c0 Delete type=3 #267
|
||||
2026/07/23-23:13:20.223383 7fb3977fe6c0 Delete type=0 #269
|
||||
2026/07/23-23:28:58.785832 7fb394b4f6c0 Level-0 table #274: started
|
||||
2026/07/23-23:28:58.785870 7fb394b4f6c0 Level-0 table #274: 0 bytes OK
|
||||
2026/07/23-23:28:58.792980 7fb394b4f6c0 Delete type=0 #272
|
||||
2026/07/23-23:28:58.799738 7fb394b4f6c0 Manual compaction at level-0 from '!items!8xqChkoKK7i0c9M1' @ 72057594037927935 : 1 .. '!items!wpBopoosZiWXjlKD' @ 0 : 0; will stop at (end)
|
||||
2026/07/23-23:28:58.799884 7fb394b4f6c0 Manual compaction at level-1 from '!items!8xqChkoKK7i0c9M1' @ 72057594037927935 : 1 .. '!items!wpBopoosZiWXjlKD' @ 0 : 0; will stop at (end)
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
2026/06/12-20:51:44.470883 7fc3c37fe6c0 Recovering log #225
|
||||
2026/06/12-20:51:44.481326 7fc3c37fe6c0 Delete type=3 #223
|
||||
2026/06/12-20:51:44.481382 7fc3c37fe6c0 Delete type=0 #225
|
||||
2026/06/12-20:52:05.534179 7fc3c11be6c0 Level-0 table #230: started
|
||||
2026/06/12-20:52:05.534214 7fc3c11be6c0 Level-0 table #230: 0 bytes OK
|
||||
2026/06/12-20:52:05.540979 7fc3c11be6c0 Delete type=0 #228
|
||||
2026/06/12-20:52:05.541333 7fc3c11be6c0 Manual compaction at level-0 from '!items!8xqChkoKK7i0c9M1' @ 72057594037927935 : 1 .. '!items!wpBopoosZiWXjlKD' @ 0 : 0; will stop at (end)
|
||||
2026/06/12-20:52:05.562210 7fc3c11be6c0 Manual compaction at level-1 from '!items!8xqChkoKK7i0c9M1' @ 72057594037927935 : 1 .. '!items!wpBopoosZiWXjlKD' @ 0 : 0; will stop at (end)
|
||||
2026/07/09-07:47:53.705532 7f050a7fc6c0 Recovering log #265
|
||||
2026/07/09-07:47:53.770870 7f050a7fc6c0 Delete type=3 #263
|
||||
2026/07/09-07:47:53.770946 7f050a7fc6c0 Delete type=0 #265
|
||||
2026/07/09-07:48:37.982535 7f0509bff6c0 Level-0 table #270: started
|
||||
2026/07/09-07:48:37.982591 7f0509bff6c0 Level-0 table #270: 0 bytes OK
|
||||
2026/07/09-07:48:38.024733 7f0509bff6c0 Delete type=0 #268
|
||||
2026/07/09-07:48:38.059906 7f0509bff6c0 Manual compaction at level-0 from '!items!8xqChkoKK7i0c9M1' @ 72057594037927935 : 1 .. '!items!wpBopoosZiWXjlKD' @ 0 : 0; will stop at (end)
|
||||
2026/07/09-07:48:38.060367 7f0509bff6c0 Manual compaction at level-1 from '!items!8xqChkoKK7i0c9M1' @ 72057594037927935 : 1 .. '!items!wpBopoosZiWXjlKD' @ 0 : 0; will stop at (end)
|
||||
|
||||
Binary file not shown.
@@ -1 +1 @@
|
||||
MANIFEST-000115
|
||||
MANIFEST-000155
|
||||
|
||||
+8
-8
@@ -1,8 +1,8 @@
|
||||
2026/06/12-20:52:58.051634 7fc410ffe6c0 Recovering log #113
|
||||
2026/06/12-20:52:58.062421 7fc410ffe6c0 Delete type=3 #111
|
||||
2026/06/12-20:52:58.062480 7fc410ffe6c0 Delete type=0 #113
|
||||
2026/06/12-20:53:22.717098 7fc3c11be6c0 Level-0 table #118: started
|
||||
2026/06/12-20:53:22.717122 7fc3c11be6c0 Level-0 table #118: 0 bytes OK
|
||||
2026/06/12-20:53:22.724248 7fc3c11be6c0 Delete type=0 #116
|
||||
2026/06/12-20:53:22.822698 7fc3c11be6c0 Manual compaction at level-0 from '!items!57vgsVVCy9MRKM2M' @ 72057594037927935 : 1 .. '!items!vJInnoigCTJzuY2S' @ 0 : 0; will stop at (end)
|
||||
2026/06/12-20:53:22.829756 7fc3c11be6c0 Manual compaction at level-1 from '!items!57vgsVVCy9MRKM2M' @ 72057594037927935 : 1 .. '!items!vJInnoigCTJzuY2S' @ 0 : 0; will stop at (end)
|
||||
2026/07/23-23:13:20.371043 7fb397fff6c0 Recovering log #153
|
||||
2026/07/23-23:13:20.382506 7fb397fff6c0 Delete type=3 #151
|
||||
2026/07/23-23:13:20.382608 7fb397fff6c0 Delete type=0 #153
|
||||
2026/07/23-23:28:58.862587 7fb394b4f6c0 Level-0 table #158: started
|
||||
2026/07/23-23:28:58.862604 7fb394b4f6c0 Level-0 table #158: 0 bytes OK
|
||||
2026/07/23-23:28:58.869670 7fb394b4f6c0 Delete type=0 #156
|
||||
2026/07/23-23:28:58.876613 7fb394b4f6c0 Manual compaction at level-0 from '!items!57vgsVVCy9MRKM2M' @ 72057594037927935 : 1 .. '!items!vJInnoigCTJzuY2S' @ 0 : 0; will stop at (end)
|
||||
2026/07/23-23:28:58.876906 7fb394b4f6c0 Manual compaction at level-1 from '!items!57vgsVVCy9MRKM2M' @ 72057594037927935 : 1 .. '!items!vJInnoigCTJzuY2S' @ 0 : 0; will stop at (end)
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
2026/06/12-20:51:44.625465 7fc3c37fe6c0 Recovering log #109
|
||||
2026/06/12-20:51:44.635539 7fc3c37fe6c0 Delete type=3 #107
|
||||
2026/06/12-20:51:44.635595 7fc3c37fe6c0 Delete type=0 #109
|
||||
2026/06/12-20:52:05.611307 7fc3c11be6c0 Level-0 table #114: started
|
||||
2026/06/12-20:52:05.611325 7fc3c11be6c0 Level-0 table #114: 0 bytes OK
|
||||
2026/06/12-20:52:05.618732 7fc3c11be6c0 Delete type=0 #112
|
||||
2026/06/12-20:52:05.619090 7fc3c11be6c0 Manual compaction at level-0 from '!items!57vgsVVCy9MRKM2M' @ 72057594037927935 : 1 .. '!items!vJInnoigCTJzuY2S' @ 0 : 0; will stop at (end)
|
||||
2026/06/12-20:52:05.619279 7fc3c11be6c0 Manual compaction at level-1 from '!items!57vgsVVCy9MRKM2M' @ 72057594037927935 : 1 .. '!items!vJInnoigCTJzuY2S' @ 0 : 0; will stop at (end)
|
||||
2026/07/09-07:47:54.321155 7f050a7fc6c0 Recovering log #149
|
||||
2026/07/09-07:47:54.377672 7f050a7fc6c0 Delete type=3 #147
|
||||
2026/07/09-07:47:54.377740 7f050a7fc6c0 Delete type=0 #149
|
||||
2026/07/09-07:48:38.398090 7f0509bff6c0 Level-0 table #154: started
|
||||
2026/07/09-07:48:38.398123 7f0509bff6c0 Level-0 table #154: 0 bytes OK
|
||||
2026/07/09-07:48:38.434275 7f0509bff6c0 Delete type=0 #152
|
||||
2026/07/09-07:48:38.666470 7f0509bff6c0 Manual compaction at level-0 from '!items!57vgsVVCy9MRKM2M' @ 72057594037927935 : 1 .. '!items!vJInnoigCTJzuY2S' @ 0 : 0; will stop at (end)
|
||||
2026/07/09-07:48:38.666636 7f0509bff6c0 Manual compaction at level-1 from '!items!57vgsVVCy9MRKM2M' @ 72057594037927935 : 1 .. '!items!vJInnoigCTJzuY2S' @ 0 : 0; will stop at (end)
|
||||
|
||||
Binary file not shown.
@@ -1 +1 @@
|
||||
MANIFEST-000234
|
||||
MANIFEST-000274
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
2026/06/12-20:52:57.913632 7fc410ffe6c0 Recovering log #232
|
||||
2026/06/12-20:52:57.923055 7fc410ffe6c0 Delete type=3 #230
|
||||
2026/06/12-20:52:57.923103 7fc410ffe6c0 Delete type=0 #232
|
||||
2026/06/12-20:53:22.662427 7fc3c11be6c0 Level-0 table #237: started
|
||||
2026/06/12-20:53:22.662456 7fc3c11be6c0 Level-0 table #237: 0 bytes OK
|
||||
2026/06/12-20:53:22.669591 7fc3c11be6c0 Delete type=0 #235
|
||||
2026/06/12-20:53:22.676441 7fc3c11be6c0 Manual compaction at level-0 from '!items!04MdBSzwkYWUMJBC' @ 72057594037927935 : 1 .. '!items!yqjKyTCgpclCuHyK' @ 0 : 0; will stop at (end)
|
||||
2026/06/12-20:53:22.676637 7fc3c11be6c0 Manual compaction at level-1 from '!items!04MdBSzwkYWUMJBC' @ 72057594037927935 : 1 .. '!items!yqjKyTCgpclCuHyK' @ 0 : 0; will stop at (end)
|
||||
2026/07/23-23:13:20.226719 7fb397fff6c0 Recovering log #272
|
||||
2026/07/23-23:13:20.237906 7fb397fff6c0 Delete type=3 #270
|
||||
2026/07/23-23:13:20.238024 7fb397fff6c0 Delete type=0 #272
|
||||
2026/07/23-23:28:58.793098 7fb394b4f6c0 Level-0 table #277: started
|
||||
2026/07/23-23:28:58.793122 7fb394b4f6c0 Level-0 table #277: 0 bytes OK
|
||||
2026/07/23-23:28:58.799598 7fb394b4f6c0 Delete type=0 #275
|
||||
2026/07/23-23:28:58.799893 7fb394b4f6c0 Manual compaction at level-0 from '!items!04MdBSzwkYWUMJBC' @ 72057594037927935 : 1 .. '!items!yqjKyTCgpclCuHyK' @ 0 : 0; will stop at (end)
|
||||
2026/07/23-23:28:58.799917 7fb394b4f6c0 Manual compaction at level-1 from '!items!04MdBSzwkYWUMJBC' @ 72057594037927935 : 1 .. '!items!yqjKyTCgpclCuHyK' @ 0 : 0; will stop at (end)
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
2026/06/12-20:51:44.484787 7fc410ffe6c0 Recovering log #228
|
||||
2026/06/12-20:51:44.494717 7fc410ffe6c0 Delete type=3 #226
|
||||
2026/06/12-20:51:44.494769 7fc410ffe6c0 Delete type=0 #228
|
||||
2026/06/12-20:52:05.541367 7fc3c11be6c0 Level-0 table #233: started
|
||||
2026/06/12-20:52:05.541402 7fc3c11be6c0 Level-0 table #233: 0 bytes OK
|
||||
2026/06/12-20:52:05.548343 7fc3c11be6c0 Delete type=0 #231
|
||||
2026/06/12-20:52:05.562225 7fc3c11be6c0 Manual compaction at level-0 from '!items!04MdBSzwkYWUMJBC' @ 72057594037927935 : 1 .. '!items!yqjKyTCgpclCuHyK' @ 0 : 0; will stop at (end)
|
||||
2026/06/12-20:52:05.562411 7fc3c11be6c0 Manual compaction at level-1 from '!items!04MdBSzwkYWUMJBC' @ 72057594037927935 : 1 .. '!items!yqjKyTCgpclCuHyK' @ 0 : 0; will stop at (end)
|
||||
2026/07/09-07:47:53.773960 7f050b7fe6c0 Recovering log #268
|
||||
2026/07/09-07:47:53.821289 7f050b7fe6c0 Delete type=3 #266
|
||||
2026/07/09-07:47:53.821386 7f050b7fe6c0 Delete type=0 #268
|
||||
2026/07/09-07:48:38.024951 7f0509bff6c0 Level-0 table #273: started
|
||||
2026/07/09-07:48:38.024989 7f0509bff6c0 Level-0 table #273: 0 bytes OK
|
||||
2026/07/09-07:48:38.059685 7f0509bff6c0 Delete type=0 #271
|
||||
2026/07/09-07:48:38.059971 7f0509bff6c0 Manual compaction at level-0 from '!items!04MdBSzwkYWUMJBC' @ 72057594037927935 : 1 .. '!items!yqjKyTCgpclCuHyK' @ 0 : 0; will stop at (end)
|
||||
2026/07/09-07:48:38.060328 7f0509bff6c0 Manual compaction at level-1 from '!items!04MdBSzwkYWUMJBC' @ 72057594037927935 : 1 .. '!items!yqjKyTCgpclCuHyK' @ 0 : 0; will stop at (end)
|
||||
|
||||
Binary file not shown.
@@ -1 +1 @@
|
||||
MANIFEST-000168
|
||||
MANIFEST-000208
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
2026/06/12-20:52:57.981469 7fc410ffe6c0 Recovering log #166
|
||||
2026/06/12-20:52:57.992240 7fc410ffe6c0 Delete type=3 #164
|
||||
2026/06/12-20:52:57.992286 7fc410ffe6c0 Delete type=0 #166
|
||||
2026/06/12-20:53:22.676645 7fc3c11be6c0 Level-0 table #171: started
|
||||
2026/06/12-20:53:22.676670 7fc3c11be6c0 Level-0 table #171: 0 bytes OK
|
||||
2026/06/12-20:53:22.683046 7fc3c11be6c0 Delete type=0 #169
|
||||
2026/06/12-20:53:22.703339 7fc3c11be6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)
|
||||
2026/07/23-23:13:20.299129 7fb3977fe6c0 Recovering log #206
|
||||
2026/07/23-23:13:20.309987 7fb3977fe6c0 Delete type=3 #204
|
||||
2026/07/23-23:13:20.310082 7fb3977fe6c0 Delete type=0 #206
|
||||
2026/07/23-23:28:58.827990 7fb394b4f6c0 Level-0 table #211: started
|
||||
2026/07/23-23:28:58.828009 7fb394b4f6c0 Level-0 table #211: 0 bytes OK
|
||||
2026/07/23-23:28:58.834717 7fb394b4f6c0 Delete type=0 #209
|
||||
2026/07/23-23:28:58.848539 7fb394b4f6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
2026/06/12-20:51:44.553830 7fc3c37fe6c0 Recovering log #162
|
||||
2026/06/12-20:51:44.563465 7fc3c37fe6c0 Delete type=3 #160
|
||||
2026/06/12-20:51:44.563519 7fc3c37fe6c0 Delete type=0 #162
|
||||
2026/06/12-20:52:05.576474 7fc3c11be6c0 Level-0 table #167: started
|
||||
2026/06/12-20:52:05.576496 7fc3c11be6c0 Level-0 table #167: 0 bytes OK
|
||||
2026/06/12-20:52:05.583147 7fc3c11be6c0 Delete type=0 #165
|
||||
2026/06/12-20:52:05.590265 7fc3c11be6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)
|
||||
2026/07/09-07:47:54.050067 7f050b7fe6c0 Recovering log #202
|
||||
2026/07/09-07:47:54.099565 7f050b7fe6c0 Delete type=3 #200
|
||||
2026/07/09-07:47:54.099699 7f050b7fe6c0 Delete type=0 #202
|
||||
2026/07/09-07:48:38.167794 7f0509bff6c0 Level-0 table #207: started
|
||||
2026/07/09-07:48:38.167822 7f0509bff6c0 Level-0 table #207: 0 bytes OK
|
||||
2026/07/09-07:48:38.205849 7f0509bff6c0 Delete type=0 #205
|
||||
2026/07/09-07:48:38.206313 7f0509bff6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@@ -1 +1 @@
|
||||
MANIFEST-000176
|
||||
MANIFEST-000216
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
2026/06/12-20:52:57.954396 7fc410ffe6c0 Recovering log #174
|
||||
2026/06/12-20:52:57.964106 7fc410ffe6c0 Delete type=3 #172
|
||||
2026/06/12-20:52:57.964146 7fc410ffe6c0 Delete type=0 #174
|
||||
2026/06/12-20:53:22.669694 7fc3c11be6c0 Level-0 table #179: started
|
||||
2026/06/12-20:53:22.669720 7fc3c11be6c0 Level-0 table #179: 0 bytes OK
|
||||
2026/06/12-20:53:22.676299 7fc3c11be6c0 Delete type=0 #177
|
||||
2026/06/12-20:53:22.676452 7fc3c11be6c0 Manual compaction at level-0 from '!folders!8swFcTr6RH7BnGiu' @ 72057594037927935 : 1 .. '!items!zRJfxioYBRq4iSBR' @ 0 : 0; will stop at (end)
|
||||
2026/06/12-20:53:22.676473 7fc3c11be6c0 Manual compaction at level-1 from '!folders!8swFcTr6RH7BnGiu' @ 72057594037927935 : 1 .. '!items!zRJfxioYBRq4iSBR' @ 0 : 0; will stop at (end)
|
||||
2026/07/23-23:13:20.270613 7fb3977fe6c0 Recovering log #214
|
||||
2026/07/23-23:13:20.281127 7fb3977fe6c0 Delete type=3 #212
|
||||
2026/07/23-23:13:20.281195 7fb3977fe6c0 Delete type=0 #214
|
||||
2026/07/23-23:28:58.814280 7fb394b4f6c0 Level-0 table #219: started
|
||||
2026/07/23-23:28:58.814303 7fb394b4f6c0 Level-0 table #219: 0 bytes OK
|
||||
2026/07/23-23:28:58.820924 7fb394b4f6c0 Delete type=0 #217
|
||||
2026/07/23-23:28:58.827855 7fb394b4f6c0 Manual compaction at level-0 from '!folders!8swFcTr6RH7BnGiu' @ 72057594037927935 : 1 .. '!items!zRJfxioYBRq4iSBR' @ 0 : 0; will stop at (end)
|
||||
2026/07/23-23:28:58.834845 7fb394b4f6c0 Manual compaction at level-1 from '!folders!8swFcTr6RH7BnGiu' @ 72057594037927935 : 1 .. '!items!zRJfxioYBRq4iSBR' @ 0 : 0; will stop at (end)
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
2026/06/12-20:51:44.524826 7fc3c37fe6c0 Recovering log #170
|
||||
2026/06/12-20:51:44.535451 7fc3c37fe6c0 Delete type=3 #168
|
||||
2026/06/12-20:51:44.535506 7fc3c37fe6c0 Delete type=0 #170
|
||||
2026/06/12-20:52:05.562430 7fc3c11be6c0 Level-0 table #175: started
|
||||
2026/06/12-20:52:05.562454 7fc3c11be6c0 Level-0 table #175: 0 bytes OK
|
||||
2026/06/12-20:52:05.569802 7fc3c11be6c0 Delete type=0 #173
|
||||
2026/06/12-20:52:05.590244 7fc3c11be6c0 Manual compaction at level-0 from '!folders!8swFcTr6RH7BnGiu' @ 72057594037927935 : 1 .. '!items!zRJfxioYBRq4iSBR' @ 0 : 0; will stop at (end)
|
||||
2026/06/12-20:52:05.590432 7fc3c11be6c0 Manual compaction at level-1 from '!folders!8swFcTr6RH7BnGiu' @ 72057594037927935 : 1 .. '!items!zRJfxioYBRq4iSBR' @ 0 : 0; will stop at (end)
|
||||
2026/07/09-07:47:53.935957 7f050b7fe6c0 Recovering log #210
|
||||
2026/07/09-07:47:53.985176 7f050b7fe6c0 Delete type=3 #208
|
||||
2026/07/09-07:47:53.985278 7f050b7fe6c0 Delete type=0 #210
|
||||
2026/07/09-07:48:38.131413 7f0509bff6c0 Level-0 table #215: started
|
||||
2026/07/09-07:48:38.131448 7f0509bff6c0 Level-0 table #215: 0 bytes OK
|
||||
2026/07/09-07:48:38.167610 7f0509bff6c0 Delete type=0 #213
|
||||
2026/07/09-07:48:38.206192 7f0509bff6c0 Manual compaction at level-0 from '!folders!8swFcTr6RH7BnGiu' @ 72057594037927935 : 1 .. '!items!zRJfxioYBRq4iSBR' @ 0 : 0; will stop at (end)
|
||||
2026/07/09-07:48:38.206346 7f0509bff6c0 Manual compaction at level-1 from '!folders!8swFcTr6RH7BnGiu' @ 72057594037927935 : 1 .. '!items!zRJfxioYBRq4iSBR' @ 0 : 0; will stop at (end)
|
||||
|
||||
Binary file not shown.
@@ -1 +1 @@
|
||||
MANIFEST-000168
|
||||
MANIFEST-000208
|
||||
|
||||
+7
-7
@@ -1,7 +1,7 @@
|
||||
2026/06/12-20:52:57.995403 7fc3c37fe6c0 Recovering log #166
|
||||
2026/06/12-20:52:58.005793 7fc3c37fe6c0 Delete type=3 #164
|
||||
2026/06/12-20:52:58.005851 7fc3c37fe6c0 Delete type=0 #166
|
||||
2026/06/12-20:53:22.683153 7fc3c11be6c0 Level-0 table #171: started
|
||||
2026/06/12-20:53:22.683178 7fc3c11be6c0 Level-0 table #171: 0 bytes OK
|
||||
2026/06/12-20:53:22.690078 7fc3c11be6c0 Delete type=0 #169
|
||||
2026/06/12-20:53:22.703354 7fc3c11be6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)
|
||||
2026/07/23-23:13:20.312789 7fb3e4fff6c0 Recovering log #206
|
||||
2026/07/23-23:13:20.323973 7fb3e4fff6c0 Delete type=3 #204
|
||||
2026/07/23-23:13:20.324072 7fb3e4fff6c0 Delete type=0 #206
|
||||
2026/07/23-23:28:58.834856 7fb394b4f6c0 Level-0 table #211: started
|
||||
2026/07/23-23:28:58.834878 7fb394b4f6c0 Level-0 table #211: 0 bytes OK
|
||||
2026/07/23-23:28:58.840987 7fb394b4f6c0 Delete type=0 #209
|
||||
2026/07/23-23:28:58.855551 7fb394b4f6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
2026/06/12-20:51:44.566595 7fc410ffe6c0 Recovering log #162
|
||||
2026/06/12-20:51:44.577675 7fc410ffe6c0 Delete type=3 #160
|
||||
2026/06/12-20:51:44.577730 7fc410ffe6c0 Delete type=0 #162
|
||||
2026/06/12-20:52:05.583251 7fc3c11be6c0 Level-0 table #167: started
|
||||
2026/06/12-20:52:05.583269 7fc3c11be6c0 Level-0 table #167: 0 bytes OK
|
||||
2026/06/12-20:52:05.590142 7fc3c11be6c0 Delete type=0 #165
|
||||
2026/06/12-20:52:05.590369 7fc3c11be6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)
|
||||
2026/07/09-07:47:54.102814 7f050affd6c0 Recovering log #202
|
||||
2026/07/09-07:47:54.154259 7f050affd6c0 Delete type=3 #200
|
||||
2026/07/09-07:47:54.154356 7f050affd6c0 Delete type=0 #202
|
||||
2026/07/09-07:48:38.323204 7f0509bff6c0 Level-0 table #207: started
|
||||
2026/07/09-07:48:38.323240 7f0509bff6c0 Level-0 table #207: 0 bytes OK
|
||||
2026/07/09-07:48:38.360093 7f0509bff6c0 Delete type=0 #205
|
||||
2026/07/09-07:48:38.360539 7f0509bff6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@@ -1 +1 @@
|
||||
MANIFEST-000149
|
||||
MANIFEST-000189
|
||||
|
||||
+8
-8
@@ -1,8 +1,8 @@
|
||||
2026/06/12-20:52:58.008917 7fc3c3fff6c0 Recovering log #147
|
||||
2026/06/12-20:52:58.019530 7fc3c3fff6c0 Delete type=3 #145
|
||||
2026/06/12-20:52:58.019585 7fc3c3fff6c0 Delete type=0 #147
|
||||
2026/06/12-20:53:22.690192 7fc3c11be6c0 Level-0 table #152: started
|
||||
2026/06/12-20:53:22.690216 7fc3c11be6c0 Level-0 table #152: 0 bytes OK
|
||||
2026/06/12-20:53:22.696652 7fc3c11be6c0 Delete type=0 #150
|
||||
2026/06/12-20:53:22.703367 7fc3c11be6c0 Manual compaction at level-0 from '!journal!26ZqV9BvS47hrLmV' @ 72057594037927935 : 1 .. '!journal.pages!26ZqV9BvS47hrLmV.ZS4936SEQUT9IA8i' @ 0 : 0; will stop at (end)
|
||||
2026/06/12-20:53:22.717074 7fc3c11be6c0 Manual compaction at level-1 from '!journal!26ZqV9BvS47hrLmV' @ 72057594037927935 : 1 .. '!journal.pages!26ZqV9BvS47hrLmV.ZS4936SEQUT9IA8i' @ 0 : 0; will stop at (end)
|
||||
2026/07/23-23:13:20.327415 7fb396ffd6c0 Recovering log #187
|
||||
2026/07/23-23:13:20.338557 7fb396ffd6c0 Delete type=3 #185
|
||||
2026/07/23-23:13:20.338661 7fb396ffd6c0 Delete type=0 #187
|
||||
2026/07/23-23:28:58.841114 7fb394b4f6c0 Level-0 table #192: started
|
||||
2026/07/23-23:28:58.841135 7fb394b4f6c0 Level-0 table #192: 0 bytes OK
|
||||
2026/07/23-23:28:58.848420 7fb394b4f6c0 Delete type=0 #190
|
||||
2026/07/23-23:28:58.855565 7fb394b4f6c0 Manual compaction at level-0 from '!journal!26ZqV9BvS47hrLmV' @ 72057594037927935 : 1 .. '!journal.pages!26ZqV9BvS47hrLmV.ZS4936SEQUT9IA8i' @ 0 : 0; will stop at (end)
|
||||
2026/07/23-23:28:58.862579 7fb394b4f6c0 Manual compaction at level-1 from '!journal!26ZqV9BvS47hrLmV' @ 72057594037927935 : 1 .. '!journal.pages!26ZqV9BvS47hrLmV.ZS4936SEQUT9IA8i' @ 0 : 0; will stop at (end)
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
2026/06/12-20:51:44.581216 7fc3c37fe6c0 Recovering log #143
|
||||
2026/06/12-20:51:44.591542 7fc3c37fe6c0 Delete type=3 #141
|
||||
2026/06/12-20:51:44.591593 7fc3c37fe6c0 Delete type=0 #143
|
||||
2026/06/12-20:52:05.590481 7fc3c11be6c0 Level-0 table #148: started
|
||||
2026/06/12-20:52:05.590505 7fc3c11be6c0 Level-0 table #148: 0 bytes OK
|
||||
2026/06/12-20:52:05.597069 7fc3c11be6c0 Delete type=0 #146
|
||||
2026/06/12-20:52:05.618846 7fc3c11be6c0 Manual compaction at level-0 from '!journal!26ZqV9BvS47hrLmV' @ 72057594037927935 : 1 .. '!journal.pages!26ZqV9BvS47hrLmV.ZS4936SEQUT9IA8i' @ 0 : 0; will stop at (end)
|
||||
2026/06/12-20:52:05.619137 7fc3c11be6c0 Manual compaction at level-1 from '!journal!26ZqV9BvS47hrLmV' @ 72057594037927935 : 1 .. '!journal.pages!26ZqV9BvS47hrLmV.ZS4936SEQUT9IA8i' @ 0 : 0; will stop at (end)
|
||||
2026/07/09-07:47:54.157744 7f050b7fe6c0 Recovering log #183
|
||||
2026/07/09-07:47:54.205288 7f050b7fe6c0 Delete type=3 #181
|
||||
2026/07/09-07:47:54.205375 7f050b7fe6c0 Delete type=0 #183
|
||||
2026/07/09-07:48:38.206467 7f0509bff6c0 Level-0 table #188: started
|
||||
2026/07/09-07:48:38.206514 7f0509bff6c0 Level-0 table #188: 0 bytes OK
|
||||
2026/07/09-07:48:38.247875 7f0509bff6c0 Delete type=0 #186
|
||||
2026/07/09-07:48:38.360346 7f0509bff6c0 Manual compaction at level-0 from '!journal!26ZqV9BvS47hrLmV' @ 72057594037927935 : 1 .. '!journal.pages!26ZqV9BvS47hrLmV.ZS4936SEQUT9IA8i' @ 0 : 0; will stop at (end)
|
||||
2026/07/09-07:48:38.360529 7f0509bff6c0 Manual compaction at level-1 from '!journal!26ZqV9BvS47hrLmV' @ 72057594037927935 : 1 .. '!journal.pages!26ZqV9BvS47hrLmV.ZS4936SEQUT9IA8i' @ 0 : 0; will stop at (end)
|
||||
|
||||
Binary file not shown.
@@ -1 +1 @@
|
||||
MANIFEST-000176
|
||||
MANIFEST-000216
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
2026/06/12-20:52:57.926432 7fc3c37fe6c0 Recovering log #174
|
||||
2026/06/12-20:52:57.936438 7fc3c37fe6c0 Delete type=3 #172
|
||||
2026/06/12-20:52:57.936485 7fc3c37fe6c0 Delete type=0 #174
|
||||
2026/06/12-20:53:22.649158 7fc3c11be6c0 Level-0 table #179: started
|
||||
2026/06/12-20:53:22.649178 7fc3c11be6c0 Level-0 table #179: 0 bytes OK
|
||||
2026/06/12-20:53:22.655504 7fc3c11be6c0 Delete type=0 #177
|
||||
2026/06/12-20:53:22.676414 7fc3c11be6c0 Manual compaction at level-0 from '!items!QHovFMj93BC7bqBu' @ 72057594037927935 : 1 .. '!items!yleVHgRqGoYLvzxT' @ 0 : 0; will stop at (end)
|
||||
2026/06/12-20:53:22.676616 7fc3c11be6c0 Manual compaction at level-1 from '!items!QHovFMj93BC7bqBu' @ 72057594037927935 : 1 .. '!items!yleVHgRqGoYLvzxT' @ 0 : 0; will stop at (end)
|
||||
2026/07/23-23:13:20.241560 7fb3977fe6c0 Recovering log #214
|
||||
2026/07/23-23:13:20.252073 7fb3977fe6c0 Delete type=3 #212
|
||||
2026/07/23-23:13:20.252157 7fb3977fe6c0 Delete type=0 #214
|
||||
2026/07/23-23:28:58.800005 7fb394b4f6c0 Level-0 table #219: started
|
||||
2026/07/23-23:28:58.800025 7fb394b4f6c0 Level-0 table #219: 0 bytes OK
|
||||
2026/07/23-23:28:58.806410 7fb394b4f6c0 Delete type=0 #217
|
||||
2026/07/23-23:28:58.827830 7fb394b4f6c0 Manual compaction at level-0 from '!items!QHovFMj93BC7bqBu' @ 72057594037927935 : 1 .. '!items!yleVHgRqGoYLvzxT' @ 0 : 0; will stop at (end)
|
||||
2026/07/23-23:28:58.827948 7fb394b4f6c0 Manual compaction at level-1 from '!items!QHovFMj93BC7bqBu' @ 72057594037927935 : 1 .. '!items!yleVHgRqGoYLvzxT' @ 0 : 0; will stop at (end)
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
2026/06/12-20:51:44.497744 7fc3c3fff6c0 Recovering log #170
|
||||
2026/06/12-20:51:44.508610 7fc3c3fff6c0 Delete type=3 #168
|
||||
2026/06/12-20:51:44.508662 7fc3c3fff6c0 Delete type=0 #170
|
||||
2026/06/12-20:52:05.548467 7fc3c11be6c0 Level-0 table #175: started
|
||||
2026/06/12-20:52:05.548492 7fc3c11be6c0 Level-0 table #175: 0 bytes OK
|
||||
2026/06/12-20:52:05.555571 7fc3c11be6c0 Delete type=0 #173
|
||||
2026/06/12-20:52:05.562235 7fc3c11be6c0 Manual compaction at level-0 from '!items!QHovFMj93BC7bqBu' @ 72057594037927935 : 1 .. '!items!yleVHgRqGoYLvzxT' @ 0 : 0; will stop at (end)
|
||||
2026/06/12-20:52:05.562402 7fc3c11be6c0 Manual compaction at level-1 from '!items!QHovFMj93BC7bqBu' @ 72057594037927935 : 1 .. '!items!yleVHgRqGoYLvzxT' @ 0 : 0; will stop at (end)
|
||||
2026/07/09-07:47:53.824918 7f050bfff6c0 Recovering log #210
|
||||
2026/07/09-07:47:53.877561 7f050bfff6c0 Delete type=3 #208
|
||||
2026/07/09-07:47:53.877656 7f050bfff6c0 Delete type=0 #210
|
||||
2026/07/09-07:48:38.060381 7f0509bff6c0 Level-0 table #215: started
|
||||
2026/07/09-07:48:38.060435 7f0509bff6c0 Level-0 table #215: 0 bytes OK
|
||||
2026/07/09-07:48:38.094447 7f0509bff6c0 Delete type=0 #213
|
||||
2026/07/09-07:48:38.206140 7f0509bff6c0 Manual compaction at level-0 from '!items!QHovFMj93BC7bqBu' @ 72057594037927935 : 1 .. '!items!yleVHgRqGoYLvzxT' @ 0 : 0; will stop at (end)
|
||||
2026/07/09-07:48:38.206298 7f0509bff6c0 Manual compaction at level-1 from '!items!QHovFMj93BC7bqBu' @ 72057594037927935 : 1 .. '!items!yleVHgRqGoYLvzxT' @ 0 : 0; will stop at (end)
|
||||
|
||||
BIN
Binary file not shown.
+1
-1
@@ -1 +1 @@
|
||||
MANIFEST-000168
|
||||
MANIFEST-000208
|
||||
|
||||
+7
-7
@@ -1,7 +1,7 @@
|
||||
2026/06/12-20:52:57.939847 7fc4117ff6c0 Recovering log #166
|
||||
2026/06/12-20:52:57.951112 7fc4117ff6c0 Delete type=3 #164
|
||||
2026/06/12-20:52:57.951166 7fc4117ff6c0 Delete type=0 #166
|
||||
2026/06/12-20:53:22.655606 7fc3c11be6c0 Level-0 table #171: started
|
||||
2026/06/12-20:53:22.655631 7fc3c11be6c0 Level-0 table #171: 0 bytes OK
|
||||
2026/06/12-20:53:22.662292 7fc3c11be6c0 Delete type=0 #169
|
||||
2026/06/12-20:53:22.676430 7fc3c11be6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)
|
||||
2026/07/23-23:13:20.255880 7fb397fff6c0 Recovering log #206
|
||||
2026/07/23-23:13:20.267231 7fb397fff6c0 Delete type=3 #204
|
||||
2026/07/23-23:13:20.267325 7fb397fff6c0 Delete type=0 #206
|
||||
2026/07/23-23:28:58.806539 7fb394b4f6c0 Level-0 table #211: started
|
||||
2026/07/23-23:28:58.806563 7fb394b4f6c0 Level-0 table #211: 0 bytes OK
|
||||
2026/07/23-23:28:58.814154 7fb394b4f6c0 Delete type=0 #209
|
||||
2026/07/23-23:28:58.827845 7fb394b4f6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)
|
||||
|
||||
+7
-7
@@ -1,7 +1,7 @@
|
||||
2026/06/12-20:51:44.511682 7fc410ffe6c0 Recovering log #162
|
||||
2026/06/12-20:51:44.521666 7fc410ffe6c0 Delete type=3 #160
|
||||
2026/06/12-20:51:44.521720 7fc410ffe6c0 Delete type=0 #162
|
||||
2026/06/12-20:52:05.555691 7fc3c11be6c0 Level-0 table #167: started
|
||||
2026/06/12-20:52:05.555716 7fc3c11be6c0 Level-0 table #167: 0 bytes OK
|
||||
2026/06/12-20:52:05.562097 7fc3c11be6c0 Delete type=0 #165
|
||||
2026/06/12-20:52:05.562305 7fc3c11be6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)
|
||||
2026/07/09-07:47:53.881056 7f050affd6c0 Recovering log #202
|
||||
2026/07/09-07:47:53.932822 7f050affd6c0 Delete type=3 #200
|
||||
2026/07/09-07:47:53.932920 7f050affd6c0 Delete type=0 #202
|
||||
2026/07/09-07:48:38.094630 7f0509bff6c0 Level-0 table #207: started
|
||||
2026/07/09-07:48:38.094656 7f0509bff6c0 Level-0 table #207: 0 bytes OK
|
||||
2026/07/09-07:48:38.131201 7f0509bff6c0 Delete type=0 #205
|
||||
2026/07/09-07:48:38.206170 7f0509bff6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@@ -1 +1 @@
|
||||
MANIFEST-000176
|
||||
MANIFEST-000216
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
2026/06/12-20:52:57.967451 7fc4117ff6c0 Recovering log #174
|
||||
2026/06/12-20:52:57.978196 7fc4117ff6c0 Delete type=3 #172
|
||||
2026/06/12-20:52:57.978251 7fc4117ff6c0 Delete type=0 #174
|
||||
2026/06/12-20:53:22.696764 7fc3c11be6c0 Level-0 table #179: started
|
||||
2026/06/12-20:53:22.696789 7fc3c11be6c0 Level-0 table #179: 0 bytes OK
|
||||
2026/06/12-20:53:22.703214 7fc3c11be6c0 Delete type=0 #177
|
||||
2026/06/12-20:53:22.703379 7fc3c11be6c0 Manual compaction at level-0 from '!folders!qrqRBmTP6UuS30DF' @ 72057594037927935 : 1 .. '!items!yFvuDyV00NdojxGt' @ 0 : 0; will stop at (end)
|
||||
2026/06/12-20:53:22.710437 7fc3c11be6c0 Manual compaction at level-1 from '!folders!qrqRBmTP6UuS30DF' @ 72057594037927935 : 1 .. '!items!yFvuDyV00NdojxGt' @ 0 : 0; will stop at (end)
|
||||
2026/07/23-23:13:20.284848 7fb3e4fff6c0 Recovering log #214
|
||||
2026/07/23-23:13:20.295603 7fb3e4fff6c0 Delete type=3 #212
|
||||
2026/07/23-23:13:20.295699 7fb3e4fff6c0 Delete type=0 #214
|
||||
2026/07/23-23:28:58.821039 7fb394b4f6c0 Level-0 table #219: started
|
||||
2026/07/23-23:28:58.821061 7fb394b4f6c0 Level-0 table #219: 0 bytes OK
|
||||
2026/07/23-23:28:58.827699 7fb394b4f6c0 Delete type=0 #217
|
||||
2026/07/23-23:28:58.827863 7fb394b4f6c0 Manual compaction at level-0 from '!folders!qrqRBmTP6UuS30DF' @ 72057594037927935 : 1 .. '!items!yFvuDyV00NdojxGt' @ 0 : 0; will stop at (end)
|
||||
2026/07/23-23:28:58.827882 7fb394b4f6c0 Manual compaction at level-1 from '!folders!qrqRBmTP6UuS30DF' @ 72057594037927935 : 1 .. '!items!yFvuDyV00NdojxGt' @ 0 : 0; will stop at (end)
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
2026/06/12-20:51:44.538990 7fc410ffe6c0 Recovering log #170
|
||||
2026/06/12-20:51:44.550083 7fc410ffe6c0 Delete type=3 #168
|
||||
2026/06/12-20:51:44.550141 7fc410ffe6c0 Delete type=0 #170
|
||||
2026/06/12-20:52:05.569908 7fc3c11be6c0 Level-0 table #175: started
|
||||
2026/06/12-20:52:05.569929 7fc3c11be6c0 Level-0 table #175: 0 bytes OK
|
||||
2026/06/12-20:52:05.576375 7fc3c11be6c0 Delete type=0 #173
|
||||
2026/06/12-20:52:05.590256 7fc3c11be6c0 Manual compaction at level-0 from '!folders!qrqRBmTP6UuS30DF' @ 72057594037927935 : 1 .. '!items!yFvuDyV00NdojxGt' @ 0 : 0; will stop at (end)
|
||||
2026/06/12-20:52:05.590425 7fc3c11be6c0 Manual compaction at level-1 from '!folders!qrqRBmTP6UuS30DF' @ 72057594037927935 : 1 .. '!items!yFvuDyV00NdojxGt' @ 0 : 0; will stop at (end)
|
||||
2026/07/09-07:47:53.990492 7f050affd6c0 Recovering log #210
|
||||
2026/07/09-07:47:54.046515 7f050affd6c0 Delete type=3 #208
|
||||
2026/07/09-07:47:54.046608 7f050affd6c0 Delete type=0 #210
|
||||
2026/07/09-07:48:38.248094 7f0509bff6c0 Level-0 table #215: started
|
||||
2026/07/09-07:48:38.248127 7f0509bff6c0 Level-0 table #215: 0 bytes OK
|
||||
2026/07/09-07:48:38.285238 7f0509bff6c0 Delete type=0 #213
|
||||
2026/07/09-07:48:38.360368 7f0509bff6c0 Manual compaction at level-0 from '!folders!qrqRBmTP6UuS30DF' @ 72057594037927935 : 1 .. '!items!yFvuDyV00NdojxGt' @ 0 : 0; will stop at (end)
|
||||
2026/07/09-07:48:38.360421 7f0509bff6c0 Manual compaction at level-1 from '!folders!qrqRBmTP6UuS30DF' @ 72057594037927935 : 1 .. '!items!yFvuDyV00NdojxGt' @ 0 : 0; will stop at (end)
|
||||
|
||||
Binary file not shown.
+1
-1
@@ -1 +1 @@
|
||||
MANIFEST-000014
|
||||
MANIFEST-000054
|
||||
|
||||
+8
-8
@@ -1,8 +1,8 @@
|
||||
2026/06/12-20:52:58.209985 7fc3c3fff6c0 Recovering log #12
|
||||
2026/06/12-20:52:58.222276 7fc3c3fff6c0 Delete type=3 #10
|
||||
2026/06/12-20:52:58.222315 7fc3c3fff6c0 Delete type=0 #12
|
||||
2026/06/12-20:53:22.822733 7fc3c11be6c0 Level-0 table #17: started
|
||||
2026/06/12-20:53:22.822761 7fc3c11be6c0 Level-0 table #17: 0 bytes OK
|
||||
2026/06/12-20:53:22.829641 7fc3c11be6c0 Delete type=0 #15
|
||||
2026/06/12-20:53:22.836426 7fc3c11be6c0 Manual compaction at level-0 from '!actors!DL3zXfXxWMOQhXJY' @ 72057594037927935 : 1 .. '!actors.items!JAHYXFedTxNlGYX8.nmIgA3CQkOSEpCSP' @ 0 : 0; will stop at (end)
|
||||
2026/06/12-20:53:22.960032 7fc3c11be6c0 Manual compaction at level-1 from '!actors!DL3zXfXxWMOQhXJY' @ 72057594037927935 : 1 .. '!actors.items!JAHYXFedTxNlGYX8.nmIgA3CQkOSEpCSP' @ 0 : 0; will stop at (end)
|
||||
2026/07/23-23:13:20.623767 7fb397fff6c0 Recovering log #52
|
||||
2026/07/23-23:13:20.635887 7fb397fff6c0 Delete type=3 #50
|
||||
2026/07/23-23:13:20.635964 7fb397fff6c0 Delete type=0 #52
|
||||
2026/07/23-23:28:59.127268 7fb394b4f6c0 Level-0 table #57: started
|
||||
2026/07/23-23:28:59.127288 7fb394b4f6c0 Level-0 table #57: 0 bytes OK
|
||||
2026/07/23-23:28:59.133948 7fb394b4f6c0 Delete type=0 #55
|
||||
2026/07/23-23:28:59.152862 7fb394b4f6c0 Manual compaction at level-0 from '!actors!DL3zXfXxWMOQhXJY' @ 72057594037927935 : 1 .. '!actors.items!JAHYXFedTxNlGYX8.nmIgA3CQkOSEpCSP' @ 0 : 0; will stop at (end)
|
||||
2026/07/23-23:28:59.192641 7fb394b4f6c0 Manual compaction at level-1 from '!actors!DL3zXfXxWMOQhXJY' @ 72057594037927935 : 1 .. '!actors.items!JAHYXFedTxNlGYX8.nmIgA3CQkOSEpCSP' @ 0 : 0; will stop at (end)
|
||||
|
||||
+8
-8
@@ -1,8 +1,8 @@
|
||||
2026/06/12-20:51:44.772467 7fc3c37fe6c0 Recovering log #8
|
||||
2026/06/12-20:51:44.784739 7fc3c37fe6c0 Delete type=3 #6
|
||||
2026/06/12-20:51:44.784799 7fc3c37fe6c0 Delete type=0 #8
|
||||
2026/06/12-20:52:05.700099 7fc3c11be6c0 Level-0 table #13: started
|
||||
2026/06/12-20:52:05.700122 7fc3c11be6c0 Level-0 table #13: 0 bytes OK
|
||||
2026/06/12-20:52:05.707051 7fc3c11be6c0 Delete type=0 #11
|
||||
2026/06/12-20:52:05.714022 7fc3c11be6c0 Manual compaction at level-0 from '!actors!DL3zXfXxWMOQhXJY' @ 72057594037927935 : 1 .. '!actors.items!JAHYXFedTxNlGYX8.nmIgA3CQkOSEpCSP' @ 0 : 0; will stop at (end)
|
||||
2026/06/12-20:52:05.714257 7fc3c11be6c0 Manual compaction at level-1 from '!actors!DL3zXfXxWMOQhXJY' @ 72057594037927935 : 1 .. '!actors.items!JAHYXFedTxNlGYX8.nmIgA3CQkOSEpCSP' @ 0 : 0; will stop at (end)
|
||||
2026/07/09-07:47:54.696879 7f050b7fe6c0 Recovering log #48
|
||||
2026/07/09-07:47:54.748540 7f050b7fe6c0 Delete type=3 #46
|
||||
2026/07/09-07:47:54.748653 7f050b7fe6c0 Delete type=0 #48
|
||||
2026/07/09-07:48:38.622656 7f0509bff6c0 Level-0 table #53: started
|
||||
2026/07/09-07:48:38.622702 7f0509bff6c0 Level-0 table #53: 0 bytes OK
|
||||
2026/07/09-07:48:38.666188 7f0509bff6c0 Delete type=0 #51
|
||||
2026/07/09-07:48:38.666530 7f0509bff6c0 Manual compaction at level-0 from '!actors!DL3zXfXxWMOQhXJY' @ 72057594037927935 : 1 .. '!actors.items!JAHYXFedTxNlGYX8.nmIgA3CQkOSEpCSP' @ 0 : 0; will stop at (end)
|
||||
2026/07/09-07:48:38.924791 7f0509bff6c0 Manual compaction at level-1 from '!actors!DL3zXfXxWMOQhXJY' @ 72057594037927935 : 1 .. '!actors.items!JAHYXFedTxNlGYX8.nmIgA3CQkOSEpCSP' @ 0 : 0; will stop at (end)
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1 +1 @@
|
||||
MANIFEST-000291
|
||||
MANIFEST-000496
|
||||
|
||||
+55
-19
@@ -1,19 +1,55 @@
|
||||
2026/06/12-20:52:58.065673 7fc3c3fff6c0 Recovering log #286
|
||||
2026/06/12-20:52:58.076152 7fc3c3fff6c0 Delete type=3 #284
|
||||
2026/06/12-20:52:58.076196 7fc3c3fff6c0 Delete type=0 #286
|
||||
2026/06/12-20:53:22.724394 7fc3c11be6c0 Level-0 table #294: started
|
||||
2026/06/12-20:53:22.813324 7fc3c11be6c0 Level-0 table #294: 5029605 bytes OK
|
||||
2026/06/12-20:53:22.820890 7fc3c11be6c0 Delete type=0 #292
|
||||
2026/06/12-20:53:22.829771 7fc3c11be6c0 Manual compaction at level-0 from '!tables!BbXMbmHKcLJrBCmk' @ 72057594037927935 : 1 .. '!tables.results!xe7x4qufBpzLaEby.zzqLG98O4eFQZHp0' @ 0 : 0; will stop at (end)
|
||||
2026/06/12-20:53:22.836453 7fc3c11be6c0 Manual compaction at level-1 from '!tables!BbXMbmHKcLJrBCmk' @ 72057594037927935 : 1 .. '!tables.results!xe7x4qufBpzLaEby.zzqLG98O4eFQZHp0' @ 0 : 0; will stop at '!tables.results!xe7x4qufBpzLaEby.zzqLG98O4eFQZHp0' @ 1617840 : 1
|
||||
2026/06/12-20:53:22.836460 7fc3c11be6c0 Compacting 1@1 + 3@2 files
|
||||
2026/06/12-20:53:22.873874 7fc3c11be6c0 Generated table #295@1: 10562 keys, 2142429 bytes
|
||||
2026/06/12-20:53:22.924542 7fc3c11be6c0 Generated table #296@1: 16816 keys, 2164017 bytes
|
||||
2026/06/12-20:53:22.944331 7fc3c11be6c0 Generated table #297@1: 5500 keys, 721026 bytes
|
||||
2026/06/12-20:53:22.944361 7fc3c11be6c0 Compacted 1@1 + 3@2 files => 5027472 bytes
|
||||
2026/06/12-20:53:22.951445 7fc3c11be6c0 compacted to: files[ 0 0 3 0 0 0 0 ]
|
||||
2026/06/12-20:53:22.951933 7fc3c11be6c0 Delete type=2 #288
|
||||
2026/06/12-20:53:22.952420 7fc3c11be6c0 Delete type=2 #289
|
||||
2026/06/12-20:53:22.952708 7fc3c11be6c0 Delete type=2 #290
|
||||
2026/06/12-20:53:22.953103 7fc3c11be6c0 Delete type=2 #294
|
||||
2026/06/12-20:53:22.960065 7fc3c11be6c0 Manual compaction at level-1 from '!tables.results!xe7x4qufBpzLaEby.zzqLG98O4eFQZHp0' @ 1617840 : 1 .. '!tables.results!xe7x4qufBpzLaEby.zzqLG98O4eFQZHp0' @ 0 : 0; will stop at (end)
|
||||
2026/07/23-23:13:20.386580 7fb3e4fff6c0 Recovering log #490
|
||||
2026/07/23-23:13:20.397323 7fb3e4fff6c0 Delete type=3 #488
|
||||
2026/07/23-23:13:20.397433 7fb3e4fff6c0 Delete type=0 #490
|
||||
2026/07/23-23:23:15.326958 7fb394b4f6c0 Level-0 table #499: started
|
||||
2026/07/23-23:23:15.448595 7fb394b4f6c0 Level-0 table #499: 7834230 bytes OK
|
||||
2026/07/23-23:23:15.478227 7fb394b4f6c0 Delete type=0 #497
|
||||
2026/07/23-23:28:58.884492 7fb394b4f6c0 Level-0 table #501: started
|
||||
2026/07/23-23:28:58.977768 7fb394b4f6c0 Level-0 table #501: 7889604 bytes OK
|
||||
2026/07/23-23:28:58.985219 7fb394b4f6c0 Delete type=0 #498
|
||||
2026/07/23-23:28:59.005051 7fb394b4f6c0 Manual compaction at level-0 from '!tables!BbXMbmHKcLJrBCmk' @ 72057594037927935 : 1 .. '!tables.results!xe7x4qufBpzLaEby.zzqLG98O4eFQZHp0' @ 0 : 0; will stop at '!tables.results!xe7x4qufBpzLaEby.zzqLG98O4eFQZHp0' @ 3820202 : 1
|
||||
2026/07/23-23:28:59.005065 7fb394b4f6c0 Compacting 1@0 + 1@1 files
|
||||
2026/07/23-23:28:59.027797 7fb394b4f6c0 Generated table #502@0: 8029 keys, 2133424 bytes
|
||||
2026/07/23-23:28:59.060873 7fb394b4f6c0 Generated table #503@0: 15581 keys, 2160339 bytes
|
||||
2026/07/23-23:28:59.093860 7fb394b4f6c0 Generated table #504@0: 16197 keys, 2162627 bytes
|
||||
2026/07/23-23:28:59.118458 7fb394b4f6c0 Generated table #505@0: 10667 keys, 1429523 bytes
|
||||
2026/07/23-23:28:59.118487 7fb394b4f6c0 Compacted 1@0 + 1@1 files => 7885913 bytes
|
||||
2026/07/23-23:28:59.125206 7fb394b4f6c0 compacted to: files[ 0 4 4 0 0 0 0 ]
|
||||
2026/07/23-23:28:59.125746 7fb394b4f6c0 Delete type=2 #499
|
||||
2026/07/23-23:28:59.126653 7fb394b4f6c0 Delete type=2 #501
|
||||
2026/07/23-23:28:59.146200 7fb394b4f6c0 Manual compaction at level-0 from '!tables.results!xe7x4qufBpzLaEby.zzqLG98O4eFQZHp0' @ 3820202 : 1 .. '!tables.results!xe7x4qufBpzLaEby.zzqLG98O4eFQZHp0' @ 0 : 0; will stop at (end)
|
||||
2026/07/23-23:28:59.152887 7fb394b4f6c0 Manual compaction at level-1 from '!tables!BbXMbmHKcLJrBCmk' @ 72057594037927935 : 1 .. '!tables.results!xe7x4qufBpzLaEby.zzqLG98O4eFQZHp0' @ 0 : 0; will stop at '!tables.results!Eg3PdOfCx9R54Tm6.T0efyp9R4iVnw6sH' @ 3849743 : 1
|
||||
2026/07/23-23:28:59.152892 7fb394b4f6c0 Compacting 1@1 + 1@2 files
|
||||
2026/07/23-23:28:59.180484 7fb394b4f6c0 Generated table #506@1: 8029 keys, 2133424 bytes
|
||||
2026/07/23-23:28:59.185650 7fb394b4f6c0 Generated table #507@1: 194 keys, 31125 bytes
|
||||
2026/07/23-23:28:59.185674 7fb394b4f6c0 Compacted 1@1 + 1@2 files => 2164549 bytes
|
||||
2026/07/23-23:28:59.191764 7fb394b4f6c0 compacted to: files[ 0 3 5 0 0 0 0 ]
|
||||
2026/07/23-23:28:59.192080 7fb394b4f6c0 Delete type=2 #492
|
||||
2026/07/23-23:28:59.192445 7fb394b4f6c0 Delete type=2 #502
|
||||
2026/07/23-23:28:59.192765 7fb394b4f6c0 Manual compaction at level-1 from '!tables.results!Eg3PdOfCx9R54Tm6.T0efyp9R4iVnw6sH' @ 3849743 : 1 .. '!tables.results!xe7x4qufBpzLaEby.zzqLG98O4eFQZHp0' @ 0 : 0; will stop at '!tables.results!bQ64721XzgOetD2v.Iel5jZzA6un4CIln' @ 3857121 : 1
|
||||
2026/07/23-23:28:59.192769 7fb394b4f6c0 Compacting 1@1 + 2@2 files
|
||||
2026/07/23-23:28:59.224987 7fb394b4f6c0 Generated table #508@1: 15581 keys, 2160339 bytes
|
||||
2026/07/23-23:28:59.228694 7fb394b4f6c0 Generated table #509@1: 380 keys, 55475 bytes
|
||||
2026/07/23-23:28:59.228705 7fb394b4f6c0 Compacted 1@1 + 2@2 files => 2215814 bytes
|
||||
2026/07/23-23:28:59.234758 7fb394b4f6c0 compacted to: files[ 0 2 5 0 0 0 0 ]
|
||||
2026/07/23-23:28:59.235102 7fb394b4f6c0 Delete type=2 #493
|
||||
2026/07/23-23:28:59.235444 7fb394b4f6c0 Delete type=2 #503
|
||||
2026/07/23-23:28:59.235643 7fb394b4f6c0 Delete type=2 #507
|
||||
2026/07/23-23:28:59.265883 7fb394b4f6c0 Manual compaction at level-1 from '!tables.results!bQ64721XzgOetD2v.Iel5jZzA6un4CIln' @ 3857121 : 1 .. '!tables.results!xe7x4qufBpzLaEby.zzqLG98O4eFQZHp0' @ 0 : 0; will stop at '!tables.results!jup6vzXHR8WYariQ.GxWFsOxdtOvL2L1G' @ 3832544 : 1
|
||||
2026/07/23-23:28:59.265898 7fb394b4f6c0 Compacting 1@1 + 2@2 files
|
||||
2026/07/23-23:28:59.300050 7fb394b4f6c0 Generated table #510@1: 16197 keys, 2162627 bytes
|
||||
2026/07/23-23:28:59.304730 7fb394b4f6c0 Generated table #511@1: 582 keys, 78853 bytes
|
||||
2026/07/23-23:28:59.304750 7fb394b4f6c0 Compacted 1@1 + 2@2 files => 2241480 bytes
|
||||
2026/07/23-23:28:59.310780 7fb394b4f6c0 compacted to: files[ 0 1 5 0 0 0 0 ]
|
||||
2026/07/23-23:28:59.311077 7fb394b4f6c0 Delete type=2 #494
|
||||
2026/07/23-23:28:59.311410 7fb394b4f6c0 Delete type=2 #504
|
||||
2026/07/23-23:28:59.311639 7fb394b4f6c0 Delete type=2 #509
|
||||
2026/07/23-23:28:59.311850 7fb394b4f6c0 Manual compaction at level-1 from '!tables.results!jup6vzXHR8WYariQ.GxWFsOxdtOvL2L1G' @ 3832544 : 1 .. '!tables.results!xe7x4qufBpzLaEby.zzqLG98O4eFQZHp0' @ 0 : 0; will stop at '!tables.results!xe7x4qufBpzLaEby.zzqLG98O4eFQZHp0' @ 3820202 : 1
|
||||
2026/07/23-23:28:59.311854 7fb394b4f6c0 Compacting 1@1 + 2@2 files
|
||||
2026/07/23-23:28:59.335767 7fb394b4f6c0 Generated table #512@1: 10667 keys, 1429523 bytes
|
||||
2026/07/23-23:28:59.335802 7fb394b4f6c0 Compacted 1@1 + 2@2 files => 1429523 bytes
|
||||
2026/07/23-23:28:59.342236 7fb394b4f6c0 compacted to: files[ 0 0 4 0 0 0 0 ]
|
||||
2026/07/23-23:28:59.342363 7fb394b4f6c0 Delete type=2 #495
|
||||
2026/07/23-23:28:59.342654 7fb394b4f6c0 Delete type=2 #505
|
||||
2026/07/23-23:28:59.342949 7fb394b4f6c0 Delete type=2 #511
|
||||
2026/07/23-23:28:59.365378 7fb394b4f6c0 Manual compaction at level-1 from '!tables.results!xe7x4qufBpzLaEby.zzqLG98O4eFQZHp0' @ 3820202 : 1 .. '!tables.results!xe7x4qufBpzLaEby.zzqLG98O4eFQZHp0' @ 0 : 0; will stop at (end)
|
||||
|
||||
+21
-19
@@ -1,19 +1,21 @@
|
||||
2026/06/12-20:51:44.638713 7fc410ffe6c0 Recovering log #279
|
||||
2026/06/12-20:51:44.649235 7fc410ffe6c0 Delete type=3 #277
|
||||
2026/06/12-20:51:44.649296 7fc410ffe6c0 Delete type=0 #279
|
||||
2026/06/12-20:52:05.627084 7fc3c11be6c0 Level-0 table #287: started
|
||||
2026/06/12-20:52:05.691136 7fc3c11be6c0 Level-0 table #287: 4971536 bytes OK
|
||||
2026/06/12-20:52:05.698145 7fc3c11be6c0 Delete type=0 #285
|
||||
2026/06/12-20:52:05.714008 7fc3c11be6c0 Manual compaction at level-0 from '!tables!BbXMbmHKcLJrBCmk' @ 72057594037927935 : 1 .. '!tables.results!xe7x4qufBpzLaEby.zzqLG98O4eFQZHp0' @ 0 : 0; will stop at (end)
|
||||
2026/06/12-20:52:05.714299 7fc3c11be6c0 Manual compaction at level-1 from '!tables!BbXMbmHKcLJrBCmk' @ 72057594037927935 : 1 .. '!tables.results!xe7x4qufBpzLaEby.zzqLG98O4eFQZHp0' @ 0 : 0; will stop at '!tables.results!xe7x4qufBpzLaEby.zzqLG98O4eFQZHp0' @ 1585250 : 1
|
||||
2026/06/12-20:52:05.714307 7fc3c11be6c0 Compacting 1@1 + 3@2 files
|
||||
2026/06/12-20:52:05.744344 7fc3c11be6c0 Generated table #288@1: 10660 keys, 2142130 bytes
|
||||
2026/06/12-20:52:05.781422 7fc3c11be6c0 Generated table #289@1: 16841 keys, 2165292 bytes
|
||||
2026/06/12-20:52:05.794598 7fc3c11be6c0 Generated table #290@1: 5045 keys, 662072 bytes
|
||||
2026/06/12-20:52:05.794618 7fc3c11be6c0 Compacted 1@1 + 3@2 files => 4969494 bytes
|
||||
2026/06/12-20:52:05.801998 7fc3c11be6c0 compacted to: files[ 0 0 3 0 0 0 0 ]
|
||||
2026/06/12-20:52:05.802346 7fc3c11be6c0 Delete type=2 #281
|
||||
2026/06/12-20:52:05.802678 7fc3c11be6c0 Delete type=2 #282
|
||||
2026/06/12-20:52:05.802871 7fc3c11be6c0 Delete type=2 #283
|
||||
2026/06/12-20:52:05.803095 7fc3c11be6c0 Delete type=2 #287
|
||||
2026/06/12-20:52:05.821244 7fc3c11be6c0 Manual compaction at level-1 from '!tables.results!xe7x4qufBpzLaEby.zzqLG98O4eFQZHp0' @ 1585250 : 1 .. '!tables.results!xe7x4qufBpzLaEby.zzqLG98O4eFQZHp0' @ 0 : 0; will stop at (end)
|
||||
2026/07/09-07:47:54.381539 7f050b7fe6c0 Recovering log #482
|
||||
2026/07/09-07:47:54.449522 7f050b7fe6c0 Delete type=3 #480
|
||||
2026/07/09-07:47:54.449639 7f050b7fe6c0 Delete type=0 #482
|
||||
2026/07/09-07:48:38.434501 7f0509bff6c0 Level-0 table #491: started
|
||||
2026/07/09-07:48:38.581067 7f0509bff6c0 Level-0 table #491: 7799304 bytes OK
|
||||
2026/07/09-07:48:38.618635 7f0509bff6c0 Delete type=0 #489
|
||||
2026/07/09-07:48:38.666492 7f0509bff6c0 Manual compaction at level-0 from '!tables!BbXMbmHKcLJrBCmk' @ 72057594037927935 : 1 .. '!tables.results!xe7x4qufBpzLaEby.zzqLG98O4eFQZHp0' @ 0 : 0; will stop at (end)
|
||||
2026/07/09-07:48:38.666799 7f0509bff6c0 Manual compaction at level-1 from '!tables!BbXMbmHKcLJrBCmk' @ 72057594037927935 : 1 .. '!tables.results!xe7x4qufBpzLaEby.zzqLG98O4eFQZHp0' @ 0 : 0; will stop at '!tables.results!xe7x4qufBpzLaEby.zzqLG98O4eFQZHp0' @ 3720162 : 1
|
||||
2026/07/09-07:48:38.666823 7f0509bff6c0 Compacting 1@1 + 4@2 files
|
||||
2026/07/09-07:48:38.720439 7f0509bff6c0 Generated table #492@1: 8118 keys, 2133880 bytes
|
||||
2026/07/09-07:48:38.784916 7f0509bff6c0 Generated table #493@1: 15560 keys, 2160741 bytes
|
||||
2026/07/09-07:48:38.845800 7f0509bff6c0 Generated table #494@1: 16194 keys, 2162194 bytes
|
||||
2026/07/09-07:48:38.885126 7f0509bff6c0 Generated table #495@1: 9938 keys, 1338663 bytes
|
||||
2026/07/09-07:48:38.885173 7f0509bff6c0 Compacted 1@1 + 4@2 files => 7795478 bytes
|
||||
2026/07/09-07:48:38.921695 7f0509bff6c0 compacted to: files[ 0 0 4 0 0 0 0 ]
|
||||
2026/07/09-07:48:38.922132 7f0509bff6c0 Delete type=2 #484
|
||||
2026/07/09-07:48:38.922665 7f0509bff6c0 Delete type=2 #485
|
||||
2026/07/09-07:48:38.923013 7f0509bff6c0 Delete type=2 #486
|
||||
2026/07/09-07:48:38.923358 7f0509bff6c0 Delete type=2 #487
|
||||
2026/07/09-07:48:38.923944 7f0509bff6c0 Delete type=2 #491
|
||||
2026/07/09-07:48:39.004029 7f0509bff6c0 Manual compaction at level-1 from '!tables.results!xe7x4qufBpzLaEby.zzqLG98O4eFQZHp0' @ 3720162 : 1 .. '!tables.results!xe7x4qufBpzLaEby.zzqLG98O4eFQZHp0' @ 0 : 0; will stop at (end)
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@@ -1 +1 @@
|
||||
MANIFEST-000122
|
||||
MANIFEST-000162
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
2026/06/12-20:52:58.037556 7fc3c3fff6c0 Recovering log #120
|
||||
2026/06/12-20:52:58.047938 7fc3c3fff6c0 Delete type=3 #118
|
||||
2026/06/12-20:52:58.048005 7fc3c3fff6c0 Delete type=0 #120
|
||||
2026/06/12-20:53:22.710451 7fc3c11be6c0 Level-0 table #125: started
|
||||
2026/06/12-20:53:22.710474 7fc3c11be6c0 Level-0 table #125: 0 bytes OK
|
||||
2026/06/12-20:53:22.716951 7fc3c11be6c0 Delete type=0 #123
|
||||
2026/06/12-20:53:22.724368 7fc3c11be6c0 Manual compaction at level-0 from '!items!0ZfAXacF6oWS120o' @ 72057594037927935 : 1 .. '!items!xFUyR7XECD8QJcIw' @ 0 : 0; will stop at (end)
|
||||
2026/06/12-20:53:22.822717 7fc3c11be6c0 Manual compaction at level-1 from '!items!0ZfAXacF6oWS120o' @ 72057594037927935 : 1 .. '!items!xFUyR7XECD8QJcIw' @ 0 : 0; will stop at (end)
|
||||
2026/07/23-23:13:20.355723 7fb3e4fff6c0 Recovering log #160
|
||||
2026/07/23-23:13:20.367231 7fb3e4fff6c0 Delete type=3 #158
|
||||
2026/07/23-23:13:20.367336 7fb3e4fff6c0 Delete type=0 #160
|
||||
2026/07/23-23:28:58.855573 7fb394b4f6c0 Level-0 table #165: started
|
||||
2026/07/23-23:28:58.855593 7fb394b4f6c0 Level-0 table #165: 0 bytes OK
|
||||
2026/07/23-23:28:58.862452 7fb394b4f6c0 Delete type=0 #163
|
||||
2026/07/23-23:28:58.869797 7fb394b4f6c0 Manual compaction at level-0 from '!items!0ZfAXacF6oWS120o' @ 72057594037927935 : 1 .. '!items!xFUyR7XECD8QJcIw' @ 0 : 0; will stop at (end)
|
||||
2026/07/23-23:28:58.876623 7fb394b4f6c0 Manual compaction at level-1 from '!items!0ZfAXacF6oWS120o' @ 72057594037927935 : 1 .. '!items!xFUyR7XECD8QJcIw' @ 0 : 0; will stop at (end)
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
2026/06/12-20:51:44.607543 7fc410ffe6c0 Recovering log #116
|
||||
2026/06/12-20:51:44.622157 7fc410ffe6c0 Delete type=3 #114
|
||||
2026/06/12-20:51:44.622215 7fc410ffe6c0 Delete type=0 #116
|
||||
2026/06/12-20:52:05.604539 7fc3c11be6c0 Level-0 table #121: started
|
||||
2026/06/12-20:52:05.604563 7fc3c11be6c0 Level-0 table #121: 0 bytes OK
|
||||
2026/06/12-20:52:05.611212 7fc3c11be6c0 Delete type=0 #119
|
||||
2026/06/12-20:52:05.618870 7fc3c11be6c0 Manual compaction at level-0 from '!items!0ZfAXacF6oWS120o' @ 72057594037927935 : 1 .. '!items!xFUyR7XECD8QJcIw' @ 0 : 0; will stop at (end)
|
||||
2026/06/12-20:52:05.619129 7fc3c11be6c0 Manual compaction at level-1 from '!items!0ZfAXacF6oWS120o' @ 72057594037927935 : 1 .. '!items!xFUyR7XECD8QJcIw' @ 0 : 0; will stop at (end)
|
||||
2026/07/09-07:47:54.264845 7f050affd6c0 Recovering log #156
|
||||
2026/07/09-07:47:54.317032 7f050affd6c0 Delete type=3 #154
|
||||
2026/07/09-07:47:54.317136 7f050affd6c0 Delete type=0 #156
|
||||
2026/07/09-07:48:38.360596 7f0509bff6c0 Level-0 table #161: started
|
||||
2026/07/09-07:48:38.360657 7f0509bff6c0 Level-0 table #161: 0 bytes OK
|
||||
2026/07/09-07:48:38.397839 7f0509bff6c0 Delete type=0 #159
|
||||
2026/07/09-07:48:38.622627 7f0509bff6c0 Manual compaction at level-0 from '!items!0ZfAXacF6oWS120o' @ 72057594037927935 : 1 .. '!items!xFUyR7XECD8QJcIw' @ 0 : 0; will stop at (end)
|
||||
2026/07/09-07:48:38.666513 7f0509bff6c0 Manual compaction at level-1 from '!items!0ZfAXacF6oWS120o' @ 72057594037927935 : 1 .. '!items!xFUyR7XECD8QJcIw' @ 0 : 0; will stop at (end)
|
||||
|
||||
Binary file not shown.
@@ -0,0 +1,62 @@
|
||||
import { formatImperialDate } from './calendarDate.js';
|
||||
|
||||
const { ApplicationV2, HandlebarsApplicationMixin } = foundry.applications.api;
|
||||
const MODULE_ID = 'mgt2-compendium-amiral-denisov';
|
||||
|
||||
export class CalendarApp extends HandlebarsApplicationMixin(ApplicationV2) {
|
||||
static DEFAULT_OPTIONS = {
|
||||
id: 'mgt2-calendar',
|
||||
classes: ['mgt2-calendar'],
|
||||
position: { width: 260, height: 'auto' },
|
||||
window: {
|
||||
icon: 'fas fa-calendar-alt',
|
||||
title: 'Calendrier Impérial',
|
||||
resizable: false,
|
||||
},
|
||||
};
|
||||
|
||||
static PARTS = {
|
||||
main: {
|
||||
template: `modules/${MODULE_ID}/templates/calendar-app.hbs`,
|
||||
root: true,
|
||||
},
|
||||
};
|
||||
|
||||
constructor({ onConfig, onClose } = {}) {
|
||||
super();
|
||||
this._onConfig = onConfig;
|
||||
this._onClose = onClose;
|
||||
this._data = { year: 1116, day: 1, hour: 12, minute: 0, planet: '' };
|
||||
}
|
||||
|
||||
get title() {
|
||||
return 'Calendrier Impérial';
|
||||
}
|
||||
|
||||
async _prepareContext() {
|
||||
return {
|
||||
dateLabel: formatImperialDate(this._data),
|
||||
isGM: game.user?.isGM ?? false,
|
||||
};
|
||||
}
|
||||
|
||||
async _onRender(context, options) {
|
||||
await super._onRender(context, options);
|
||||
const html = $(this.element);
|
||||
html.find('.mgt2-cal-config-btn').on('click', () => {
|
||||
this._onConfig?.();
|
||||
});
|
||||
}
|
||||
|
||||
updateDisplay(data) {
|
||||
this._data = { ...this._data, ...data };
|
||||
this.render();
|
||||
}
|
||||
|
||||
close() {
|
||||
this._onConfig = null;
|
||||
this._onClose?.();
|
||||
this._onClose = null;
|
||||
return super.close();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,116 @@
|
||||
import { getDayLabel, computeConversions } from './calendarDate.js';
|
||||
|
||||
const { ApplicationV2, HandlebarsApplicationMixin } = foundry.applications.api;
|
||||
const MODULE_ID = 'mgt2-compendium-amiral-denisov';
|
||||
|
||||
export class CalendarConfigDialog extends HandlebarsApplicationMixin(ApplicationV2) {
|
||||
static DEFAULT_OPTIONS = {
|
||||
id: 'mgt2-calendar-config',
|
||||
classes: ['mgt2-calendar'],
|
||||
position: { width: 300, height: 'auto' },
|
||||
window: {
|
||||
icon: 'fas fa-cog',
|
||||
title: 'Configurer le calendrier',
|
||||
resizable: false,
|
||||
},
|
||||
};
|
||||
|
||||
static PARTS = {
|
||||
main: {
|
||||
template: `modules/${MODULE_ID}/templates/calendar-config.hbs`,
|
||||
root: true,
|
||||
},
|
||||
};
|
||||
|
||||
constructor({ data, onApply } = {}) {
|
||||
super();
|
||||
this._data = { ...data };
|
||||
this._onApply = onApply;
|
||||
}
|
||||
|
||||
get title() {
|
||||
return 'Configurer le calendrier';
|
||||
}
|
||||
|
||||
async _prepareContext() {
|
||||
return {
|
||||
year: this._data.year,
|
||||
day: this._data.day,
|
||||
hour: this._data.hour,
|
||||
minute: this._data.minute,
|
||||
planet: this._data.planet ?? '',
|
||||
dayLabel: getDayLabel(this._data.day),
|
||||
conversions: computeConversions(this._data.year),
|
||||
};
|
||||
}
|
||||
|
||||
async _onRender(context, options) {
|
||||
await super._onRender(context, options);
|
||||
const html = $(this.element);
|
||||
|
||||
html.find('[name="day"]').on('input', () => {
|
||||
const day = parseInt(html.find('[name="day"]').val(), 10);
|
||||
if (day >= 1 && day <= 365) {
|
||||
html.find('.mgt2-cal-day-label').text(getDayLabel(day));
|
||||
}
|
||||
});
|
||||
|
||||
html.find('[name="year"]').on('input', () => {
|
||||
const year = parseInt(html.find('[name="year"]').val(), 10) || 0;
|
||||
const conv = computeConversions(year);
|
||||
html.find('.mgt2-cal-conv-val[data-cal="solomani"]').text(conv.solomani);
|
||||
html.find('.mgt2-cal-conv-val[data-cal="vilani"]').text(conv.vilani);
|
||||
html.find('.mgt2-cal-conv-val[data-cal="zhodani"]').text(conv.zhodani);
|
||||
html.find('.mgt2-cal-conv-val[data-cal="aslan"]').text(conv.aslan);
|
||||
html.find('.mgt2-cal-conv-val[data-cal="kkree"]').text(conv.kkree);
|
||||
html.find('.mgt2-cal-conv-val[data-cal="hiver"]').text(conv.hiver);
|
||||
});
|
||||
|
||||
html.find('[data-action="day-inc"]').on('click', () => {
|
||||
const input = html.find('[name="day"]');
|
||||
let day = parseInt(input.val(), 10) || 1;
|
||||
day = day >= 365 ? 1 : day + 1;
|
||||
input.val(day);
|
||||
html.find('.mgt2-cal-day-label').text(getDayLabel(day));
|
||||
});
|
||||
|
||||
html.find('[data-action="hour-inc"]').on('click', () => {
|
||||
const dayInput = html.find('[name="day"]');
|
||||
const hourInput = html.find('[name="hour"]');
|
||||
const minuteInput = html.find('[name="minute"]');
|
||||
let day = parseInt(dayInput.val(), 10) || 1;
|
||||
let hour = parseInt(hourInput.val(), 10) || 0;
|
||||
let minute = parseInt(minuteInput.val(), 10) || 0;
|
||||
|
||||
hour += 1;
|
||||
if (hour >= 24) {
|
||||
hour = 0;
|
||||
day = day >= 365 ? 1 : day + 1;
|
||||
}
|
||||
|
||||
hourInput.val(hour);
|
||||
dayInput.val(day);
|
||||
html.find('.mgt2-cal-day-label').text(getDayLabel(day));
|
||||
});
|
||||
|
||||
html.find('[data-action="apply"]').on('click', () => {
|
||||
this._readAndApply(html);
|
||||
});
|
||||
}
|
||||
|
||||
_readAndApply(html) {
|
||||
const year = parseInt(html.find('[name="year"]').val(), 10) || 1116;
|
||||
const day = Math.min(365, Math.max(1, parseInt(html.find('[name="day"]').val(), 10) || 1));
|
||||
const hour = Math.min(23, Math.max(0, parseInt(html.find('[name="hour"]').val(), 10) || 0));
|
||||
const minute = Math.min(59, Math.max(0, parseInt(html.find('[name="minute"]').val(), 10) || 0));
|
||||
const planet = html.find('[name="planet"]').val()?.trim() ?? '';
|
||||
|
||||
const data = { year, day, hour, minute, planet };
|
||||
this._onApply?.(data);
|
||||
}
|
||||
|
||||
close() {
|
||||
this._onApply = null;
|
||||
return super.close();
|
||||
}
|
||||
}
|
||||
+113
-39
@@ -19,12 +19,15 @@ export class SectorMapApp extends ApplicationV2 {
|
||||
window: { icon: 'fas fa-map', resizable: true, controls: [] },
|
||||
};
|
||||
|
||||
constructor(sector, subsector) {
|
||||
constructor(sector, subsector, { readOnly = false } = {}) {
|
||||
super();
|
||||
this._sector = sector;
|
||||
this._subsector = subsector;
|
||||
this._readOnly = readOnly;
|
||||
this._handler = null;
|
||||
this._mapHex = null;
|
||||
this._mapCenter = null;
|
||||
this._mapScale = null;
|
||||
this._searchTimeout = null;
|
||||
}
|
||||
|
||||
@@ -37,13 +40,16 @@ export class SectorMapApp extends ApplicationV2 {
|
||||
|
||||
get _mapUrl() {
|
||||
const base = 'https://travellermap.com';
|
||||
const cb = this._readOnly ? '' : '&callback=postmessage';
|
||||
if (!this._sector) return `${base}/?style=mongoose&hideui=1`;
|
||||
if (this._subsector) {
|
||||
return `${base}/?sector=${encodeURIComponent(this._sector)}&subsector=${encodeURIComponent(this._subsector)}&style=mongoose&hideui=1`;
|
||||
return `${base}/?sector=${encodeURIComponent(this._sector)}&subsector=${encodeURIComponent(this._subsector)}&style=mongoose&hideui=1${cb}`;
|
||||
}
|
||||
let url = `${base}/go/${encodeURIComponent(this._sector)}?style=mongoose`;
|
||||
let url = `${base}/?sector=${encodeURIComponent(this._sector)}&style=mongoose&hideui=1${cb}`;
|
||||
if (this._mapHex) {
|
||||
url += `&hex=${this._mapHex}&scale=512`;
|
||||
} else if (this._mapCenter && this._mapScale) {
|
||||
url += `¢er=${this._mapCenter}&scale=${this._mapScale}`;
|
||||
}
|
||||
return url;
|
||||
}
|
||||
@@ -58,6 +64,20 @@ export class SectorMapApp extends ApplicationV2 {
|
||||
}
|
||||
|
||||
_renderHTML() {
|
||||
if (this._readOnly) {
|
||||
return `<div class="mgt2-sector-map-outer">
|
||||
<div class="mgt2-sector-map-toolbar mgt2-sector-map-toolbar--ro">
|
||||
<span class="mgt2-sector-map-label">${SectorMapApp._escapeAttr(this.title)}</span>
|
||||
<span class="mgt2-sector-map-hint">Carte partagée par le MJ</span>
|
||||
</div>
|
||||
<iframe
|
||||
src="${this._mapUrl}"
|
||||
class="mgt2-sector-map-frame"
|
||||
allow="clipboard-write"
|
||||
referrerpolicy="no-referrer">
|
||||
</iframe>
|
||||
</div>`;
|
||||
}
|
||||
return `<div class="mgt2-sector-map-outer">
|
||||
<div class="mgt2-sector-map-toolbar">
|
||||
<div class="mgt2-sector-map-search">
|
||||
@@ -66,8 +86,7 @@ export class SectorMapApp extends ApplicationV2 {
|
||||
</div>
|
||||
<span class="mgt2-sector-map-label">${this._sector ? `${this._sector}${this._subsector ? ` — ss.${this._subsector}` : ''}` : 'Toute la carte'}</span>
|
||||
<span class="mgt2-sector-map-hint">Cliquez sur un hex pour voir les détails du monde</span>
|
||||
<button type="button" class="mgt2-sector-map-share" title="Partager une image fixe dans le chat"><i class="fas fa-image"></i> Partager</button>
|
||||
<button type="button" class="mgt2-sector-map-sync" title="Ouvrir la carte interactive chez tous les joueurs"><i class="fas fa-users"></i> Synchroniser</button>
|
||||
<button type="button" class="mgt2-sector-map-sync" disabled title="Cliquez d'abord sur un hex pour définir la position à synchroniser"><i class="fas fa-users"></i> Synchroniser</button>
|
||||
<button type="button" class="mgt2-sector-map-travel" title="Planifier un voyage"><i class="fas fa-route"></i> Voyage</button>
|
||||
</div>
|
||||
<iframe
|
||||
@@ -80,10 +99,11 @@ export class SectorMapApp extends ApplicationV2 {
|
||||
}
|
||||
|
||||
async _onRender(context, options) {
|
||||
if (this._readOnly) {
|
||||
this._listen();
|
||||
return;
|
||||
}
|
||||
this._listen();
|
||||
this.element?.querySelector('.mgt2-sector-map-share')?.addEventListener('click', () => {
|
||||
this._shareMap();
|
||||
});
|
||||
this.element?.querySelector('.mgt2-sector-map-sync')?.addEventListener('click', () => {
|
||||
this._syncAll();
|
||||
});
|
||||
@@ -112,16 +132,24 @@ export class SectorMapApp extends ApplicationV2 {
|
||||
_listen() {
|
||||
if (this._handler) return;
|
||||
this._handler = (event) => {
|
||||
// Accept messages from travellermap or any origin (for testing)
|
||||
const d = event.data || {};
|
||||
if (d.type === 'viewport') {
|
||||
this._sector = d.sector || this._sector;
|
||||
this._subsector = d.subsector || this._subsector;
|
||||
this._mapHex = d.hex || null;
|
||||
this._mapCenter = (d.x != null && d.y != null) ? `${d.x},${d.y}` : null;
|
||||
this._mapScale = d.scale || null;
|
||||
return;
|
||||
}
|
||||
|
||||
// Click on map
|
||||
const wx = d.x ?? d.location?.x;
|
||||
const wy = d.y ?? d.location?.y;
|
||||
if (wx == null || wy == null) return;
|
||||
const x = Number(wx);
|
||||
const y = Number(wy);
|
||||
if (isNaN(x) || isNaN(y)) return;
|
||||
console.log('SectorMapApp | click at', x, y, 'from', event.origin);
|
||||
this._onMapClick({x, y}).catch(err => {
|
||||
this._onMapClick({ x, y }).catch(err => {
|
||||
console.error('SectorMapApp | click handler failed:', err);
|
||||
});
|
||||
};
|
||||
@@ -149,6 +177,13 @@ export class SectorMapApp extends ApplicationV2 {
|
||||
const sectorName = meta.Names?.[0]?.Text;
|
||||
if (!sectorName) { console.error('SectorMapApp | no Names[0].Text in metadata', meta); return; }
|
||||
|
||||
// Store click position for sync
|
||||
this._sector = sectorName;
|
||||
this._subsector = null;
|
||||
this._mapHex = String(hx).padStart(2, '0') + String(hy).padStart(2, '0');
|
||||
this._mapCenter = `${wx},${wy}`;
|
||||
this._mapScale = loc.scale || 512;
|
||||
|
||||
const hex = String(hx).padStart(2, '0') + String(hy).padStart(2, '0');
|
||||
const resp = await fetch(
|
||||
`https://travellermap.com/data/${encodeURIComponent(sectorName)}/${hex}`
|
||||
@@ -159,9 +194,19 @@ export class SectorMapApp extends ApplicationV2 {
|
||||
const world = data.Worlds?.[0];
|
||||
if (!world) { console.error('SectorMapApp | no Worlds in data', data); return; }
|
||||
|
||||
this._enableSyncButton(world.Name || hex);
|
||||
|
||||
this._postWorldCard(world);
|
||||
}
|
||||
|
||||
_enableSyncButton(worldName) {
|
||||
const btn = this.element?.querySelector('.mgt2-sector-map-sync');
|
||||
if (btn) {
|
||||
btn.disabled = false;
|
||||
btn.title = worldName ? `Synchroniser la vue sur ${worldName}` : 'Ouvrir la carte interactive chez tous les joueurs';
|
||||
}
|
||||
}
|
||||
|
||||
/* ───── Carte de chat ───── */
|
||||
|
||||
static _STARPORT = { A:'Excellent', B:'Bon', C:'Routinier', D:'Médiocre', E:'Frontière', X:'Aucun' };
|
||||
@@ -508,6 +553,9 @@ export class SectorMapApp extends ApplicationV2 {
|
||||
this._sector = sector;
|
||||
this._subsector = null;
|
||||
this._mapHex = hex;
|
||||
this._mapCenter = null;
|
||||
this._mapScale = null;
|
||||
this._enableSyncButton(name);
|
||||
|
||||
const iframe = this.element?.querySelector('.mgt2-sector-map-frame');
|
||||
if (iframe) iframe.src = this._mapUrl;
|
||||
@@ -517,41 +565,67 @@ export class SectorMapApp extends ApplicationV2 {
|
||||
|
||||
/* ───── Partage ───── */
|
||||
|
||||
_shareMap() {
|
||||
if (!this._sector) {
|
||||
ui.notifications.warn('Aucun secteur sélectionné — utilisez la recherche pour centrer sur un secteur');
|
||||
async _syncAll() {
|
||||
if (!game.socket?.emit) {
|
||||
ui.notifications.warn('Socket indisponible — impossible de synchroniser');
|
||||
return;
|
||||
}
|
||||
const posterUrl = `https://travellermap.com/api/poster?sector=${encodeURIComponent(this._sector)}${this._subsector ? `&subsector=${encodeURIComponent(this._subsector)}` : ''}&style=mongoose&scale=128&dpr=2`;
|
||||
const label = this._subsector
|
||||
? `Sous-secteur ${this._subsector} — ${this._sector}`
|
||||
: `Secteur ${this._sector}`;
|
||||
try {
|
||||
// Tentative de récupération du zoom via getViewport
|
||||
const viewport = await new Promise((resolve) => {
|
||||
const handler = (event) => {
|
||||
if (event.data?.type === 'viewport') {
|
||||
window.removeEventListener('message', handler);
|
||||
resolve(event.data);
|
||||
}
|
||||
};
|
||||
window.addEventListener('message', handler);
|
||||
const iframe = this.element?.querySelector('.mgt2-sector-map-frame');
|
||||
if (iframe?.contentWindow) {
|
||||
iframe.contentWindow.postMessage(
|
||||
{ source: 'travellermap', type: 'getViewport' },
|
||||
'*'
|
||||
);
|
||||
}
|
||||
setTimeout(() => {
|
||||
window.removeEventListener('message', handler);
|
||||
resolve(null);
|
||||
}, 1000);
|
||||
});
|
||||
|
||||
const html = `<section class="mgt2-shared-map">
|
||||
<div class="mgt2-world-card-header">
|
||||
<span class="mgt2-world-name">${label}</span>
|
||||
</div>
|
||||
<div class="mgt2-shared-map-image">
|
||||
<img src="${posterUrl}" alt="${label}">
|
||||
</div>
|
||||
<div class="mgt2-shared-map-footer">
|
||||
<a href="https://travellermap.com/go/${encodeURIComponent(this._sector)}" target="_blank" rel="noopener">
|
||||
Ouvrir sur Traveller Map <i class="fas fa-external-link-alt"></i>
|
||||
</a>
|
||||
</div>
|
||||
</section>`;
|
||||
|
||||
ChatMessage.create({ content: html, rollMode: 'public' });
|
||||
ui.notifications.info(`Carte partagée avec les joueurs`);
|
||||
if (viewport) {
|
||||
this._sector = viewport.sector || this._sector;
|
||||
this._subsector = viewport.subsector || this._subsector;
|
||||
this._mapHex = viewport.hex || this._mapHex;
|
||||
this._mapCenter = (viewport.x != null && viewport.y != null) ? `${viewport.x},${viewport.y}` : this._mapCenter;
|
||||
this._mapScale = viewport.scale || this._mapScale;
|
||||
}
|
||||
|
||||
_syncAll() {
|
||||
game.socket.emit(`module.${MODULE_ID}`, {
|
||||
type: 'sectorMapSync',
|
||||
const payload = {
|
||||
_type: 'sectorMapSync',
|
||||
sector: this._sector,
|
||||
subsector: this._subsector,
|
||||
});
|
||||
ui.notifications.info(`Carte synchronisée chez tous les joueurs`);
|
||||
mapHex: this._mapHex,
|
||||
mapCenter: this._mapCenter,
|
||||
mapScale: this._mapScale,
|
||||
};
|
||||
const players = game.users.filter(u => !u.isGM && u.active);
|
||||
for (const player of players) {
|
||||
game.socket.emit(`module.${MODULE_ID}`, payload);
|
||||
}
|
||||
ui.notifications.info(`Vue synchronisée chez ${players.length} joueur(s)`);
|
||||
} catch (err) {
|
||||
console.error(`${MODULE_ID} | Erreur socket sync:`, err);
|
||||
ui.notifications.error('Erreur lors de la synchronisation');
|
||||
}
|
||||
}
|
||||
|
||||
updatePosition(sector, subsector, mapHex, mapUrl) {
|
||||
this._sector = sector;
|
||||
this._subsector = subsector;
|
||||
this._mapHex = mapHex || null;
|
||||
const iframe = this.element?.querySelector('.mgt2-sector-map-frame');
|
||||
if (iframe) iframe.src = mapUrl || this._mapUrl;
|
||||
}
|
||||
|
||||
_openTravelDialog() {
|
||||
|
||||
@@ -0,0 +1,300 @@
|
||||
import { CommerceDialog } from './CommerceDialog.js';
|
||||
import { NpcDialog } from './NpcDialog.js';
|
||||
import { SectorMapApp } from './SectorMapApp.js';
|
||||
|
||||
const MODULE_ID = 'mgt2-compendium-amiral-denisov';
|
||||
const { ApplicationV2, HandlebarsApplicationMixin } = foundry.applications.api;
|
||||
|
||||
const IMAGE_EXTENSIONS = new Set(['png', 'webp', 'jpg', 'jpeg', 'gif', 'svg', 'avif', 'bmp', 'tiff', 'tif']);
|
||||
|
||||
class BatchNpcDialog extends HandlebarsApplicationMixin(ApplicationV2) {
|
||||
static DEFAULT_OPTIONS = {
|
||||
id: 'mgt2-batch-npc',
|
||||
classes: ['mgt2-npc-dialog'],
|
||||
position: { width: 540, height: 'auto' },
|
||||
window: { title: 'Création de PNJs par lots', resizable: true },
|
||||
form: { submitOnClose: false, closeOnSubmit: false },
|
||||
};
|
||||
|
||||
static PARTS = {
|
||||
main: {
|
||||
template: `modules/${MODULE_ID}/templates/batch-npc-dialog.hbs`,
|
||||
root: true,
|
||||
},
|
||||
};
|
||||
|
||||
constructor(options = {}) {
|
||||
super(options);
|
||||
this._formData = {
|
||||
batch: {
|
||||
directory: '',
|
||||
folderName: 'PNJs importés',
|
||||
openSheets: false,
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
async _prepareContext() {
|
||||
return { ...this._formData };
|
||||
}
|
||||
|
||||
async _onRender(context, options) {
|
||||
await super._onRender(context, options);
|
||||
const html = $('#' + this.id).find('.window-content');
|
||||
|
||||
this._applyTheme(html);
|
||||
|
||||
html.find('[data-action="browse-directory"]').on('click', async () => {
|
||||
// Foundry v14: FilePicker avec pickFolders pour sélectionner un répertoire
|
||||
try {
|
||||
const fp = new FilePicker({
|
||||
type: 'folder',
|
||||
current: this._formData.batch.directory || '',
|
||||
callback: (path) => {
|
||||
this._formData.batch.directory = path;
|
||||
html.find('[name="batch.directory"]').val(path);
|
||||
},
|
||||
pickFolders: true,
|
||||
field: null,
|
||||
button: null,
|
||||
});
|
||||
fp.render(true);
|
||||
return;
|
||||
} catch (_e) { /* fallback v13 */ }
|
||||
// Fallback v13: selection d'un fichier → extraction du dossier parent
|
||||
const fp = new FilePicker({
|
||||
type: 'image',
|
||||
current: this._formData.batch.directory || '',
|
||||
callback: (path) => {
|
||||
const dir = path.split('/').slice(0, -1).join('/');
|
||||
this._formData.batch.directory = dir;
|
||||
html.find('[name="batch.directory"]').val(dir);
|
||||
},
|
||||
});
|
||||
fp.render(true);
|
||||
});
|
||||
|
||||
html.find('[data-action="batch-create"]').on('click', async () => {
|
||||
this._readForm(html);
|
||||
await this._executeBatch(html);
|
||||
});
|
||||
}
|
||||
|
||||
_readForm(html) {
|
||||
this._formData.batch.directory = (html.find('[name="batch.directory"]').val()?.trim() || '').replace(/\/+$/, '');
|
||||
this._formData.batch.folderName = html.find('[name="batch.folderName"]').val()?.trim() || 'PNJs importés';
|
||||
this._formData.batch.openSheets = html.find('[name="batch.openSheets"]').is(':checked');
|
||||
}
|
||||
|
||||
_applyTheme(html) {
|
||||
html.find('h3').css({ color: '#5f4300', 'border-bottom-color': '#b78f26', 'text-shadow': 'none' });
|
||||
html.find('legend').css({ color: '#7a5c00', 'text-shadow': 'none' });
|
||||
}
|
||||
|
||||
async _executeBatch(html) {
|
||||
const { directory, folderName, openSheets } = this._formData.batch;
|
||||
|
||||
if (!directory) {
|
||||
ui.notifications.warn('Veuillez spécifier un répertoire source.');
|
||||
return;
|
||||
}
|
||||
|
||||
const $progress = html.find('#batch-progress');
|
||||
const $fill = html.find('#batch-progress-fill');
|
||||
const $text = html.find('#batch-progress-text');
|
||||
$progress.show();
|
||||
|
||||
try {
|
||||
$text.text('Analyse du répertoire...');
|
||||
|
||||
let files;
|
||||
try {
|
||||
const result = await FilePicker.browse('data', directory);
|
||||
files = result.files || [];
|
||||
} catch (e) {
|
||||
$progress.hide();
|
||||
ui.notifications.error(`Impossible de lire le répertoire « ${directory} » : ${e.message}`);
|
||||
return;
|
||||
}
|
||||
|
||||
const imageFiles = files.filter(f => {
|
||||
const ext = f.split('.').pop()?.toLowerCase();
|
||||
return ext && IMAGE_EXTENSIONS.has(ext);
|
||||
});
|
||||
|
||||
if (imageFiles.length === 0) {
|
||||
$progress.hide();
|
||||
ui.notifications.warn(`Aucune image trouvée dans « ${directory} ».`);
|
||||
return;
|
||||
}
|
||||
|
||||
$text.text(`${imageFiles.length} image(s) trouvée(s). Vérification des doublons...`);
|
||||
|
||||
const normalizePath = (p) => p.replace(/^[\\/]+/, '').replace(/[\\/]+/g, '/').toLowerCase();
|
||||
|
||||
const existingImages = new Set();
|
||||
for (const actor of game.actors) {
|
||||
if (actor.img && actor.img !== 'icons/svg/mystery-man.svg') {
|
||||
existingImages.add(normalizePath(actor.img));
|
||||
}
|
||||
}
|
||||
|
||||
const toCreate = imageFiles.filter(f => !existingImages.has(normalizePath(f)));
|
||||
|
||||
if (toCreate.length === 0) {
|
||||
$progress.hide();
|
||||
ui.notifications.info('Tous les PNJs existent déjà (aucune nouvelle image à traiter).');
|
||||
return;
|
||||
}
|
||||
|
||||
let folder = null;
|
||||
if (folderName) {
|
||||
folder = game.folders.find(f => f.name === folderName && f.type === 'Actor');
|
||||
if (!folder) {
|
||||
folder = await Folder.create({ name: folderName, type: 'Actor', parent: null });
|
||||
}
|
||||
}
|
||||
|
||||
$text.text(`Création de ${toCreate.length} PNJ(s)...`);
|
||||
|
||||
const chunkSize = 10;
|
||||
let created = 0;
|
||||
const allCreated = [];
|
||||
|
||||
for (let i = 0; i < toCreate.length; i += chunkSize) {
|
||||
const chunk = toCreate.slice(i, i + chunkSize);
|
||||
const actorsData = chunk.map(path => {
|
||||
const name = path.split('/').pop().replace(/\.[^/.]+$/, '');
|
||||
return {
|
||||
name,
|
||||
type: 'npc',
|
||||
img: path,
|
||||
folder: folder?.id || null,
|
||||
token: {
|
||||
name,
|
||||
img: path,
|
||||
actorLink: true,
|
||||
disposition: 0,
|
||||
sight: { enabled: false },
|
||||
},
|
||||
system: {
|
||||
settings: { hideUntrained: true, lockCharacteristics: true },
|
||||
characteristics: {},
|
||||
hits: {},
|
||||
skills: {},
|
||||
},
|
||||
flags: {
|
||||
[MODULE_ID]: { batchImported: true, sourceImage: path },
|
||||
},
|
||||
};
|
||||
});
|
||||
|
||||
const actors = await Actor.create(actorsData, { renderSheet: false });
|
||||
allCreated.push(...actors);
|
||||
created += actors.length;
|
||||
|
||||
const pct = Math.min(100, Math.round((i + chunkSize) / toCreate.length * 100));
|
||||
$fill.css('width', pct + '%');
|
||||
$text.text(`${created}/${toCreate.length} PNJ(s) créé(s)...`);
|
||||
}
|
||||
|
||||
ui.actors?.render(false);
|
||||
|
||||
$fill.css('width', '100%');
|
||||
$text.text(`${created} PNJ(s) créé(s) avec succès dans le dossier « ${folderName} » !`);
|
||||
ui.notifications.info(`${created} PNJ(s) créé(s) à partir des images.`);
|
||||
|
||||
if (openSheets && allCreated.length > 0) {
|
||||
const lastActor = allCreated[allCreated.length - 1];
|
||||
if (lastActor) lastActor.sheet?.render(true);
|
||||
}
|
||||
|
||||
} catch (error) {
|
||||
console.error(`${MODULE_ID} | Batch NPC creation error:`, error);
|
||||
$text.text(`Erreur : ${error.message}`);
|
||||
ui.notifications.error(`Erreur lors de la création : ${error.message}`);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Hooks.on('renderActorDirectory', (app, html, data) => {
|
||||
if (!game.user?.isGM) return;
|
||||
const $html = html instanceof jQuery ? html : $(html);
|
||||
if ($html.find('.mgt2-batch-npc-btn').length) return;
|
||||
|
||||
const btn = $(`<button class="mgt2-batch-npc-btn" style="margin:4px 8px;flex:0;background:#2c2c3e;color:#d9b24c;border:1px solid #c9a227;">
|
||||
<i class="fas fa-users"></i> Importer PNJs par lots
|
||||
</button>`);
|
||||
|
||||
const shortcuts = [
|
||||
{ icon: 'fa-balance-scale', label: 'Commerce', abbr: 'Commerce', action: 'commerce', cls: 'mgt2-shortcut-commerce', title: 'Ouvrir le commerce' },
|
||||
{ icon: 'fa-user', label: 'PNJ rapide', abbr: 'PNJ', action: 'npc', cls: 'mgt2-shortcut-pnj', title: 'Générer un PNJ rapide' },
|
||||
{ icon: 'fa-random', label: 'Rencontre', abbr: 'Rencontre', action: 'encounter', cls: 'mgt2-shortcut-rencontre', title: 'Générer une rencontre' },
|
||||
{ icon: 'fa-briefcase', label: 'Mission', abbr: 'Mission', action: 'mission', cls: 'mgt2-shortcut-mission', title: 'Générer une mission' },
|
||||
{ icon: 'fa-image', label: 'Fermer portraits', abbr: 'Fermer img', action: 'closePortraits', cls: 'mgt2-shortcut-closeimg', title: 'Fermer les portraits affichés aux joueurs' },
|
||||
];
|
||||
|
||||
const grid = $(`<div style="display:grid;grid-template-columns:1fr 1fr;gap:4px;margin:4px 8px;"></div>`);
|
||||
shortcuts.forEach(s => {
|
||||
const b = $(`<button class="${s.cls}" title="${s.title}" style="background:#2c2c3e;color:#d9b24c;border:1px solid #c9a227;padding:4px 6px;font-size:0.78em;cursor:pointer;border-radius:3px;text-align:center;">
|
||||
<i class="fas ${s.icon}"></i> ${s.abbr}
|
||||
</button>`).on('click', () => {
|
||||
if (s.action === 'commerce') new CommerceDialog().render({ force: true });
|
||||
else if (s.action === 'closePortraits') {
|
||||
game.socket.emit(`module.${MODULE_ID}`, { _type: 'closeImagePopout' });
|
||||
ui.notifications.info('Fermeture des portraits envoyée aux joueurs');
|
||||
}
|
||||
else new NpcDialog({ initialTab: s.action }).render({ force: true });
|
||||
});
|
||||
grid.append(b);
|
||||
});
|
||||
|
||||
const footer = $html.find('.directory-footer');
|
||||
if (footer.length) {
|
||||
footer.append(btn);
|
||||
footer.append(grid);
|
||||
} else {
|
||||
$html.find('.directory-header').after(btn);
|
||||
$html.find('.directory-header').after(grid);
|
||||
}
|
||||
|
||||
btn.on('click', () => {
|
||||
new BatchNpcDialog().render({ force: true });
|
||||
});
|
||||
});
|
||||
|
||||
Hooks.on('renderSceneDirectory', (app, html, data) => {
|
||||
if (!game.user?.isGM) return;
|
||||
const $html = html instanceof jQuery ? html : $(html);
|
||||
if ($html.find('.mgt2-sector-btn').length) return;
|
||||
|
||||
const sectorBtn = $(`<button class="mgt2-sector-btn" style="margin:4px 8px;flex:0;background:#2c2c3e;color:#d9b24c;border:1px solid #c9a227;cursor:pointer;">
|
||||
<i class="fas fa-map"></i> Traveller Map
|
||||
</button>`).on('click', () => {
|
||||
new SectorMapApp().render({ force: true });
|
||||
});
|
||||
|
||||
const canvasBtn = $(`<button class="mgt2-canvas-sync-btn" style="margin:4px 8px;flex:0;background:#2c2c3e;color:#d9b24c;border:1px solid #c9a227;cursor:pointer;">
|
||||
<i class="fas fa-eye"></i> Sync vue MJ
|
||||
</button>`).on('click', () => {
|
||||
const pivot = canvas.stage?.pivot;
|
||||
const scale = canvas.stage?.scale?.x;
|
||||
if (!pivot || !scale) { ui.notifications.warn('Canvas pas encore prêt'); return; }
|
||||
const players = game.users.filter(u => !u.isGM && u.active).map(u => u.id);
|
||||
if (!players.length) { ui.notifications.warn('Aucun joueur connecté'); return; }
|
||||
game.socket.emit(`module.${MODULE_ID}`, {
|
||||
_type: 'canvasSync',
|
||||
x: pivot.x,
|
||||
y: pivot.y,
|
||||
scale,
|
||||
});
|
||||
ui.notifications.info(`Vue synchronisée chez ${players.length} joueur(s)`);
|
||||
});
|
||||
|
||||
const grid = $(`<div style="display:grid;grid-template-columns:1fr 1fr;gap:4px;margin:4px 8px;"></div>`);
|
||||
grid.append(sectorBtn, canvasBtn);
|
||||
|
||||
const footer = $html.find('.directory-footer');
|
||||
if (footer.length) footer.append(grid);
|
||||
else $html.find('.directory-header').after(grid);
|
||||
});
|
||||
@@ -0,0 +1,95 @@
|
||||
const MODULE_ID = 'mgt2-compendium-amiral-denisov';
|
||||
|
||||
export function imperialToSolomani(impYear) {
|
||||
return Math.round(impYear * 1.0006644 + 4521);
|
||||
}
|
||||
|
||||
export function imperialToVilani(impYear) {
|
||||
return Math.round((impYear + 4045) / 1.312);
|
||||
}
|
||||
|
||||
export function imperialToZhodani(impYear) {
|
||||
const raw = (impYear + 6731) / 2.26;
|
||||
const olympiad = Math.floor(raw);
|
||||
const frac = raw - olympiad;
|
||||
const year = Math.min(3, Math.max(1, Math.round(frac * 3)));
|
||||
return { olympiad, year, label: `${olympiad}.${year}` };
|
||||
}
|
||||
|
||||
export function imperialToAslan(impYear) {
|
||||
return Math.round((impYear + 2083) / 0.877);
|
||||
}
|
||||
|
||||
export function imperialToKkree(impYear) {
|
||||
return Math.round((impYear + 8145) / 1.2);
|
||||
}
|
||||
|
||||
export function imperialToHiver(impYear) {
|
||||
return Math.round((impYear - 410) * 2);
|
||||
}
|
||||
|
||||
export function computeConversions(impYear) {
|
||||
const y = impYear ?? 1116;
|
||||
const z = imperialToZhodani(y);
|
||||
return {
|
||||
solomani: `${imperialToSolomani(y)} AD`,
|
||||
vilani: `${imperialToVilani(y)} VI`,
|
||||
zhodani: z.label,
|
||||
aslan: `${imperialToAslan(y)}`,
|
||||
kkree: `${imperialToKkree(y)}`,
|
||||
hiver: `${imperialToHiver(y)} HF`,
|
||||
};
|
||||
}
|
||||
|
||||
export const DAY_NAMES = [
|
||||
'Holiday',
|
||||
'Wonday',
|
||||
'Tuday',
|
||||
'Thirday',
|
||||
'Forday',
|
||||
'Fiday',
|
||||
'Sixday',
|
||||
'Senday',
|
||||
];
|
||||
|
||||
export const DAY_LABELS_FR = {
|
||||
Holiday: 'Holiday',
|
||||
Wonday: 'Wonday',
|
||||
Tuday: 'Tuday',
|
||||
Thirday: 'Thirday',
|
||||
Forday: 'Forday',
|
||||
Fiday: 'Fiday',
|
||||
Sixday: 'Sixday',
|
||||
Senday: 'Senday',
|
||||
};
|
||||
|
||||
export function getDayLabel(day) {
|
||||
if (day < 1 || day > 365) return '?';
|
||||
if (day === 1) return DAY_NAMES[0];
|
||||
return DAY_NAMES[((day - 2) % 7) + 1];
|
||||
}
|
||||
|
||||
export function getWeekday(day) {
|
||||
if (day < 1 || day > 365) return -1;
|
||||
if (day === 1) return -1;
|
||||
return (day - 2) % 7;
|
||||
}
|
||||
|
||||
export function formatImperialDate({ year, day, hour, minute, planet } = {}) {
|
||||
const y = year ?? 1116;
|
||||
const d = day ?? 1;
|
||||
const dayLabel = getDayLabel(d);
|
||||
const dayStr = String(d).padStart(3, '0');
|
||||
let label = `${dayLabel}, ${dayStr}-${y} IC`;
|
||||
if (hour != null && minute != null) {
|
||||
const h = String(Math.round(hour)).padStart(2, '0');
|
||||
const m = String(Math.round(minute)).padStart(2, '0');
|
||||
label += ` ─ ${h}:${m}`;
|
||||
if (planet) label += ` (${planet})`;
|
||||
}
|
||||
return label;
|
||||
}
|
||||
|
||||
export function getDefaultCalendar() {
|
||||
return { year: 1116, day: 1, hour: 12, minute: 0, planet: '' };
|
||||
}
|
||||
@@ -0,0 +1,208 @@
|
||||
import { CalendarApp } from './CalendarApp.js';
|
||||
import { CalendarConfigDialog } from './CalendarConfigDialog.js';
|
||||
import { getDefaultCalendar } from './calendarDate.js';
|
||||
|
||||
const MODULE_ID = 'mgt2-compendium-amiral-denisov';
|
||||
const ChatLogV2 = foundry.applications.sidebar.tabs.ChatLog;
|
||||
|
||||
let _calendarApp = null;
|
||||
|
||||
function readCalendar() {
|
||||
return {
|
||||
year: game.settings.get(MODULE_ID, 'calendarYear'),
|
||||
day: game.settings.get(MODULE_ID, 'calendarDay'),
|
||||
hour: game.settings.get(MODULE_ID, 'calendarHour'),
|
||||
minute: game.settings.get(MODULE_ID, 'calendarMinute'),
|
||||
planet: game.settings.get(MODULE_ID, 'calendarPlanet'),
|
||||
};
|
||||
}
|
||||
|
||||
async function writeCalendar(data) {
|
||||
await game.settings.set(MODULE_ID, 'calendarYear', data.year);
|
||||
await game.settings.set(MODULE_ID, 'calendarDay', data.day);
|
||||
await game.settings.set(MODULE_ID, 'calendarHour', data.hour);
|
||||
await game.settings.set(MODULE_ID, 'calendarMinute', data.minute);
|
||||
await game.settings.set(MODULE_ID, 'calendarPlanet', data.planet);
|
||||
}
|
||||
|
||||
function applyCalendar(data) {
|
||||
if (_calendarApp) {
|
||||
_calendarApp.updateDisplay(data);
|
||||
}
|
||||
}
|
||||
|
||||
async function broadcastCalendar(data) {
|
||||
if (!game.socket?.emit) return;
|
||||
game.socket.emit(`module.${MODULE_ID}`, {
|
||||
_type: 'calendarSync',
|
||||
...data,
|
||||
});
|
||||
}
|
||||
|
||||
function openCalendarApp() {
|
||||
if (_calendarApp) {
|
||||
_calendarApp.bringToTop();
|
||||
return;
|
||||
}
|
||||
const data = readCalendar();
|
||||
_calendarApp = new CalendarApp({
|
||||
onConfig: () => openCalendarConfig(),
|
||||
onClose: () => { _calendarApp = null; },
|
||||
});
|
||||
_calendarApp.updateDisplay(data);
|
||||
_calendarApp.render({ force: true });
|
||||
}
|
||||
|
||||
function openCalendarConfig() {
|
||||
const data = readCalendar();
|
||||
const dialog = new CalendarConfigDialog({
|
||||
data,
|
||||
onApply: async (newData) => {
|
||||
await writeCalendar(newData);
|
||||
applyCalendar(newData);
|
||||
broadcastCalendar(newData);
|
||||
dialog.close();
|
||||
},
|
||||
});
|
||||
dialog.render({ force: true });
|
||||
}
|
||||
|
||||
function registerCalCommand() {
|
||||
if (!ChatLogV2?.CHAT_COMMANDS) return;
|
||||
ChatLogV2.CHAT_COMMANDS.cal = {
|
||||
rgx: /^\/cal(?:\s+(.*))?$/i,
|
||||
fn: () => {
|
||||
openCalendarApp();
|
||||
return false;
|
||||
},
|
||||
};
|
||||
console.log(`${MODULE_ID} | Commande /cal enregistrée via ChatLog.CHAT_COMMANDS`);
|
||||
}
|
||||
|
||||
Hooks.once('init', () => {
|
||||
const def = getDefaultCalendar();
|
||||
|
||||
game.settings.register(MODULE_ID, 'calendarYear', {
|
||||
name: 'Année impériale',
|
||||
scope: 'world',
|
||||
config: false,
|
||||
type: Number,
|
||||
default: def.year,
|
||||
});
|
||||
game.settings.register(MODULE_ID, 'calendarDay', {
|
||||
name: 'Jour impérial (1-365)',
|
||||
scope: 'world',
|
||||
config: false,
|
||||
type: Number,
|
||||
default: def.day,
|
||||
});
|
||||
game.settings.register(MODULE_ID, 'calendarHour', {
|
||||
name: 'Heure locale',
|
||||
scope: 'world',
|
||||
config: false,
|
||||
type: Number,
|
||||
default: def.hour,
|
||||
});
|
||||
game.settings.register(MODULE_ID, 'calendarMinute', {
|
||||
name: 'Minute locale',
|
||||
scope: 'world',
|
||||
config: false,
|
||||
type: Number,
|
||||
default: def.minute,
|
||||
});
|
||||
game.settings.register(MODULE_ID, 'calendarPlanet', {
|
||||
name: 'Planète',
|
||||
scope: 'world',
|
||||
config: false,
|
||||
type: String,
|
||||
default: def.planet,
|
||||
});
|
||||
game.settings.register(MODULE_ID, 'calendarAutoOpen', {
|
||||
name: 'Calendrier impérial : auto-ouverture',
|
||||
hint: 'Ouvre automatiquement la fenêtre du calendrier au démarrage',
|
||||
scope: 'world',
|
||||
config: true,
|
||||
type: Boolean,
|
||||
default: true,
|
||||
});
|
||||
|
||||
const loadTemplatesFn = foundry.applications?.handlebars?.loadTemplates || loadTemplates;
|
||||
if (loadTemplatesFn) {
|
||||
loadTemplatesFn([
|
||||
`modules/${MODULE_ID}/templates/calendar-app.hbs`,
|
||||
`modules/${MODULE_ID}/templates/calendar-config.hbs`,
|
||||
]);
|
||||
}
|
||||
|
||||
registerCalCommand();
|
||||
console.log(`${MODULE_ID} | Calendrier impérial initialisé`);
|
||||
});
|
||||
|
||||
Hooks.once('ready', () => {
|
||||
game.socket.on(`module.${MODULE_ID}`, (data) => {
|
||||
if (game.user?.isGM) return;
|
||||
if (data?._type !== 'calendarSync') return;
|
||||
if (!_calendarApp) {
|
||||
const { year, day, hour, minute, planet } = data;
|
||||
_calendarApp = new CalendarApp({
|
||||
onClose: () => { _calendarApp = null; },
|
||||
});
|
||||
_calendarApp.updateDisplay({ year, day, hour, minute, planet });
|
||||
_calendarApp.render({ force: true });
|
||||
return;
|
||||
}
|
||||
_calendarApp.updateDisplay(data);
|
||||
});
|
||||
|
||||
if (game.settings.get(MODULE_ID, 'calendarAutoOpen')) {
|
||||
openCalendarApp();
|
||||
}
|
||||
});
|
||||
|
||||
Hooks.on('preCreateChatMessage', (message, data, options) => {
|
||||
const content = message.content?.trim()?.toLowerCase();
|
||||
if (content === '/cal' || content?.startsWith('/cal ')) {
|
||||
openCalendarApp();
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
Hooks.on('chatMessage', (...args) => {
|
||||
let message;
|
||||
if (args[0]?.content !== undefined) {
|
||||
message = args[0].content;
|
||||
} else if (typeof args[1] === 'string') {
|
||||
message = args[1];
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
const trimmed = message?.trim()?.toLowerCase();
|
||||
if (trimmed === '/cal' || trimmed?.startsWith('/cal ')) {
|
||||
openCalendarApp();
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
Hooks.on('renderChatInput', (app, html, data) => {
|
||||
let input;
|
||||
if (html?.element) {
|
||||
input = $(html.element).find('textarea[name="content"]');
|
||||
} else if (html?.find) {
|
||||
input = html.find('textarea[name="content"]');
|
||||
} else {
|
||||
input = $(html).find('textarea[name="content"]');
|
||||
}
|
||||
if (input.data('mgt2-cal-listener')) return;
|
||||
input.data('mgt2-cal-listener', true);
|
||||
input.on('keydown', (event) => {
|
||||
if (event.key === 'Enter' && !event.shiftKey) {
|
||||
const content = input.val()?.trim();
|
||||
if (content === '/cal' || content?.startsWith('/cal ')) {
|
||||
event.preventDefault();
|
||||
event.stopImmediatePropagation();
|
||||
openCalendarApp();
|
||||
input.val('');
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
@@ -38,6 +38,8 @@ Hooks.once('init', () => {
|
||||
`modules/${MODULE_ID}/templates/traveller-npc-dialog.hbs`,
|
||||
`modules/${MODULE_ID}/templates/traveller-npc-result.hbs`,
|
||||
`modules/${MODULE_ID}/templates/ally-enemy-result.hbs`,
|
||||
`modules/${MODULE_ID}/templates/batch-npc-dialog.hbs`,
|
||||
`modules/${MODULE_ID}/templates/player-map.hbs`,
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
+4
-10
@@ -16,9 +16,10 @@ let _pendingHandle = false;
|
||||
|
||||
/* ───── Fonctions partagées ───── */
|
||||
|
||||
async function openMap(sector, subsector) {
|
||||
const app = new SectorMapApp(sector, subsector);
|
||||
async function openMap(sector, subsector, { readOnly = false } = {}) {
|
||||
const app = new SectorMapApp(sector, subsector, { readOnly });
|
||||
await app.render({ force: true });
|
||||
return app;
|
||||
}
|
||||
|
||||
async function handleSectorCommand(sector, subsector) {
|
||||
@@ -139,16 +140,9 @@ Hooks.on('preCreateChatMessage', (message, data, options) => {
|
||||
}
|
||||
});
|
||||
|
||||
/* ───── Socket (synchronisation MJ → joueurs) ───── */
|
||||
/* ───── Socket (synchronisation MJ → joueurs) ───── voir sectorSocket.js ───── */
|
||||
|
||||
Hooks.once('ready', () => {
|
||||
game.socket.on(`module.${MODULE_ID}`, (data) => {
|
||||
if (data?.type !== 'sectorMapSync') return;
|
||||
if (game.user?.isGM) return;
|
||||
openMap(data.sector, data.subsector);
|
||||
});
|
||||
|
||||
// Clics sur les liens de monde dans les journals de trajet
|
||||
document.addEventListener('click', (event) => {
|
||||
const link = event.target.closest('.mgt2-world-link');
|
||||
if (!link) return;
|
||||
|
||||
@@ -0,0 +1,108 @@
|
||||
const MODULE_ID = 'mgt2-compendium-amiral-denisov';
|
||||
const { ApplicationV2, HandlebarsApplicationMixin } = foundry.applications.api;
|
||||
|
||||
let _playerDialog = null;
|
||||
|
||||
class PlayerMapDialog extends HandlebarsApplicationMixin(ApplicationV2) {
|
||||
static DEFAULT_OPTIONS = {
|
||||
id: 'mgt2-sector-map-player',
|
||||
classes: ['mgt2-sector-map'],
|
||||
position: { width: 960, height: 720 },
|
||||
window: { icon: 'fas fa-map', resizable: true },
|
||||
};
|
||||
|
||||
static PARTS = {
|
||||
main: {
|
||||
template: `modules/${MODULE_ID}/templates/player-map.hbs`,
|
||||
},
|
||||
};
|
||||
|
||||
constructor(url, sector) {
|
||||
super();
|
||||
this._mapUrl = url;
|
||||
this._sectorLabel = sector ? `Secteur ${sector}` : 'Carte stellaire';
|
||||
}
|
||||
|
||||
get title() { return this._sectorLabel; }
|
||||
|
||||
async _prepareContext() {
|
||||
return { url: this._mapUrl };
|
||||
}
|
||||
|
||||
updateMap(url) {
|
||||
this._mapUrl = url;
|
||||
const iframe = this.element?.querySelector('iframe');
|
||||
if (iframe) iframe.src = url;
|
||||
}
|
||||
}
|
||||
|
||||
function buildMapUrl(sector, subsector, mapHex, mapCenter, mapScale) {
|
||||
const base = 'https://travellermap.com';
|
||||
if (!sector) return `${base}/?style=mongoose&hideui=1`;
|
||||
if (subsector) {
|
||||
let url = `${base}/?sector=${encodeURIComponent(sector)}&subsector=${encodeURIComponent(subsector)}&style=mongoose&hideui=1`;
|
||||
if (mapCenter && mapScale) url += `¢er=${mapCenter}&scale=${mapScale}`;
|
||||
return url;
|
||||
}
|
||||
let url = `${base}/?sector=${encodeURIComponent(sector)}&style=mongoose&hideui=1`;
|
||||
if (mapHex) {
|
||||
url += `&hex=${mapHex}&scale=512`;
|
||||
} else if (mapCenter && mapScale) {
|
||||
url += `¢er=${mapCenter}&scale=${mapScale}`;
|
||||
}
|
||||
return url;
|
||||
}
|
||||
|
||||
Hooks.once('ready', () => {
|
||||
console.log(`${MODULE_ID} | sectorSocket pret`);
|
||||
|
||||
game.socket.on(`module.${MODULE_ID}`, (data) => {
|
||||
if (game.user?.isGM) return;
|
||||
|
||||
if (data?._type === 'sectorMapSync') {
|
||||
try {
|
||||
const url = buildMapUrl(data.sector, data.subsector, data.mapHex, data.mapCenter, data.mapScale);
|
||||
if (_playerDialog) {
|
||||
_playerDialog.updateMap(url);
|
||||
_playerDialog.bringToTop?.();
|
||||
console.log(`${MODULE_ID} | Carte mise a jour`);
|
||||
return;
|
||||
}
|
||||
|
||||
_playerDialog = new PlayerMapDialog(url, data.sector);
|
||||
_playerDialog.render({ force: true }).then(() => {
|
||||
console.log(`${MODULE_ID} | Dialog affiche`);
|
||||
}).catch(err => {
|
||||
console.error(`${MODULE_ID} | Erreur render:`, err);
|
||||
});
|
||||
} catch (err) {
|
||||
console.error(`${MODULE_ID} | Erreur:`, err);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (data?._type === 'canvasSync') {
|
||||
try {
|
||||
const { x, y, scale } = data;
|
||||
console.log(`${MODULE_ID} | Canvas sync recu:`, x, y, scale);
|
||||
canvas.animatePan({ x, y, scale, duration: 0 });
|
||||
} catch (err) {
|
||||
console.error(`${MODULE_ID} | Erreur canvas sync:`, err);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (data?._type === 'closeImagePopout') {
|
||||
try {
|
||||
let closed = 0;
|
||||
document.querySelectorAll('.image-popout, [class*="image-popout"], [id*="image-popout"]').forEach(el => {
|
||||
el.remove(); closed++;
|
||||
});
|
||||
console.log(`${MODULE_ID} | ${closed} portrait(s) fermé(s)`);
|
||||
} catch (err) {
|
||||
console.error(`${MODULE_ID} | Erreur close portraits:`, err);
|
||||
}
|
||||
return;
|
||||
}
|
||||
});
|
||||
});
|
||||
@@ -12,7 +12,7 @@ function buildStartupNoticeHtml() {
|
||||
<div style="padding:6px 8px;border-left:4px solid #c9a227;background:#f5f0e8;color:#2c2c3e;line-height:1.45;">
|
||||
<strong>MgT2e – outils</strong>
|
||||
<span style="color:#6a5422;">·</span>
|
||||
<code>/commerce</code> <code>/pnj</code> <code>/rencontre</code> <code>/mission</code>
|
||||
<code>/cal</code> <code>/commerce</code> <code>/pnj</code> <code>/rencontre</code> <code>/mission</code> <code>/sector</code>
|
||||
<div style="margin-top:2px;font-size:0.92em;color:#6a5422;">
|
||||
par <a href="https://www.uberwald.me" target="_blank" rel="noopener noreferrer">LeRatierBretonnien / Uberwald</a>
|
||||
</div>
|
||||
|
||||
+245
-6
@@ -414,6 +414,14 @@ button.btn-calculate:hover,
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.mgt2-sector-map-toolbar--ro {
|
||||
justify-content: center;
|
||||
gap: 8px;
|
||||
padding: 6px 12px;
|
||||
background: #1e2833;
|
||||
border-bottom: 1px solid #5f7a99;
|
||||
}
|
||||
|
||||
.mgt2-sector-map-label {
|
||||
color: #d9b24c;
|
||||
font-weight: bold;
|
||||
@@ -508,7 +516,6 @@ button.btn-calculate:hover,
|
||||
font-size: 0.9em;
|
||||
}
|
||||
|
||||
.mgt2-sector-map-share,
|
||||
.mgt2-sector-map-sync,
|
||||
.mgt2-sector-map-travel {
|
||||
background: #c9a227;
|
||||
@@ -522,7 +529,6 @@ button.btn-calculate:hover,
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.mgt2-sector-map-share:hover,
|
||||
.mgt2-sector-map-sync:hover,
|
||||
.mgt2-sector-map-travel:hover {
|
||||
background: #d9b24c;
|
||||
@@ -766,10 +772,6 @@ button.btn-calculate:hover,
|
||||
color: #222;
|
||||
}
|
||||
|
||||
.mgt2-shared-map .mgt2-sector-map-share {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.mgt2-shared-map-image {
|
||||
line-height: 0;
|
||||
}
|
||||
@@ -1113,3 +1115,240 @@ a.mgt2-world-link {
|
||||
a.mgt2-world-link:hover {
|
||||
color: #8a4aaa;
|
||||
}
|
||||
|
||||
/* === Batch NPC Creator =================================================== */
|
||||
|
||||
.mgt2-batch-npc-form {
|
||||
gap: 10px;
|
||||
padding: 14px 16px 12px;
|
||||
}
|
||||
|
||||
.mgt2-batch-npc-form .input-group {
|
||||
display: flex;
|
||||
gap: 4px;
|
||||
}
|
||||
|
||||
.mgt2-batch-npc-form .input-group input {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.mgt2-batch-npc-form .input-group .btn-small {
|
||||
flex: 0 0 32px;
|
||||
padding: 4px 6px;
|
||||
line-height: 1;
|
||||
}
|
||||
|
||||
.batch-progress {
|
||||
margin: 8px 0;
|
||||
}
|
||||
|
||||
.batch-progress-bar {
|
||||
height: 8px;
|
||||
background: #ddd;
|
||||
border-radius: 4px;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.batch-progress-fill {
|
||||
height: 100%;
|
||||
width: 0%;
|
||||
background: linear-gradient(90deg, #b78f26, #d9b24c);
|
||||
border-radius: 4px;
|
||||
transition: width 0.3s;
|
||||
}
|
||||
|
||||
.batch-progress-text {
|
||||
font-size: 0.85em;
|
||||
color: #555;
|
||||
margin-top: 4px;
|
||||
}
|
||||
|
||||
/* === Calendrier Impérial =================================================== */
|
||||
|
||||
.mgt2-calendar .window-header {
|
||||
background: linear-gradient(180deg, rgba(44, 44, 62, 0.96) 0%, rgba(30, 30, 43, 0.96) 100%);
|
||||
border-bottom: 1px solid #c9a227;
|
||||
}
|
||||
|
||||
.mgt2-calendar .window-title {
|
||||
color: #d9b24c;
|
||||
text-shadow: none;
|
||||
}
|
||||
|
||||
.mgt2-calendar .window-content {
|
||||
padding: 4px 8px;
|
||||
background: #1a1a2e;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.mgt2-cal-window {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
gap: 8px;
|
||||
min-height: 28px;
|
||||
}
|
||||
|
||||
.mgt2-cal-display {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.mgt2-cal-date {
|
||||
color: #d8c79a;
|
||||
font-size: 0.95em;
|
||||
font-family: 'Roboto', sans-serif;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.mgt2-cal-config-btn {
|
||||
flex: 0 0 auto;
|
||||
width: 22px;
|
||||
height: 22px;
|
||||
padding: 0;
|
||||
border: none;
|
||||
background: transparent;
|
||||
color: #8a7a5a;
|
||||
cursor: pointer;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
font-size: 0.85em;
|
||||
border-radius: 3px;
|
||||
transition: color 0.15s, background 0.15s;
|
||||
}
|
||||
|
||||
.mgt2-cal-config-btn:hover {
|
||||
color: #d9b24c;
|
||||
background: rgba(201, 162, 39, 0.15);
|
||||
}
|
||||
|
||||
/* Config dialog */
|
||||
|
||||
.mgt2-cal-config {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 8px;
|
||||
padding: 8px;
|
||||
background: #1a1a2e;
|
||||
color: #d8c79a;
|
||||
}
|
||||
|
||||
.mgt2-cal-config-row {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
.mgt2-cal-config-row label {
|
||||
flex: 0 0 80px;
|
||||
font-size: 0.85em;
|
||||
color: #b8a87a;
|
||||
}
|
||||
|
||||
.mgt2-cal-config-row input[type="number"],
|
||||
.mgt2-cal-config-row input[type="text"] {
|
||||
flex: 1;
|
||||
padding: 3px 6px;
|
||||
border: 1px solid #3a3a4e;
|
||||
border-radius: 3px;
|
||||
background: #252540;
|
||||
color: #d8c79a;
|
||||
font-size: 0.85em;
|
||||
}
|
||||
|
||||
.mgt2-cal-config-row input:focus {
|
||||
outline: none;
|
||||
border-color: #c9a227;
|
||||
}
|
||||
|
||||
.mgt2-cal-day-group {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 6px;
|
||||
}
|
||||
|
||||
.mgt2-cal-day-group input {
|
||||
flex: 0 0 60px;
|
||||
}
|
||||
|
||||
.mgt2-cal-day-label {
|
||||
font-size: 0.85em;
|
||||
color: #d9b24c;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.mgt2-cal-config-actions {
|
||||
display: flex;
|
||||
gap: 6px;
|
||||
justify-content: flex-end;
|
||||
margin-top: 4px;
|
||||
}
|
||||
|
||||
.mgt2-cal-btn {
|
||||
padding: 4px 10px;
|
||||
border: 1px solid #3a3a4e;
|
||||
border-radius: 3px;
|
||||
background: #252540;
|
||||
color: #d8c79a;
|
||||
font-size: 0.82em;
|
||||
cursor: pointer;
|
||||
transition: background 0.15s, border-color 0.15s;
|
||||
}
|
||||
|
||||
.mgt2-cal-btn:hover {
|
||||
background: #303050;
|
||||
border-color: #c9a227;
|
||||
}
|
||||
|
||||
.mgt2-cal-btn-primary {
|
||||
background: linear-gradient(180deg, #c9a227 0%, #a8881e 100%);
|
||||
color: #1a1a2e;
|
||||
border-color: #c9a227;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.mgt2-cal-btn-primary:hover {
|
||||
background: linear-gradient(180deg, #d9b24c 0%, #c9a227 100%);
|
||||
}
|
||||
|
||||
.mgt2-cal-conversions {
|
||||
margin-top: 8px;
|
||||
border: 1px solid #3a3a4e;
|
||||
border-radius: 3px;
|
||||
background: #1e1e32;
|
||||
}
|
||||
|
||||
.mgt2-cal-conversions summary {
|
||||
padding: 4px 8px;
|
||||
color: #b8a87a;
|
||||
font-size: 0.82em;
|
||||
cursor: pointer;
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
.mgt2-cal-conversions summary:hover {
|
||||
color: #d9b24c;
|
||||
}
|
||||
|
||||
.mgt2-cal-conv-note {
|
||||
font-size: 0.85em;
|
||||
color: #6a6a7e;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.mgt2-cal-conv-row {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
padding: 2px 8px;
|
||||
font-size: 0.82em;
|
||||
color: #d8c79a;
|
||||
}
|
||||
|
||||
.mgt2-cal-conv-row:nth-child(even) {
|
||||
background: rgba(255,255,255,0.03);
|
||||
}
|
||||
|
||||
.mgt2-cal-conv-label {
|
||||
color: #8a7a5a;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
<form class="mgt2-npc-form mgt2-batch-npc-form">
|
||||
|
||||
<fieldset style="padding:8px 10px;margin:0 0 6px">
|
||||
<div class="form-group-row" style="gap:8px">
|
||||
<div class="form-group" style="flex:1;min-width:0">
|
||||
<label for="batch-directory" style="font-size:0.88em">Répertoire des images</label>
|
||||
<div class="input-group">
|
||||
<input id="batch-directory" name="batch.directory" type="text" value="{{batch.directory}}" placeholder="worlds/mon-monde/images">
|
||||
<button type="button" class="btn-small" data-action="browse-directory" title="Parcourir" style="flex:0 0 28px;padding:2px 4px"><i class="fas fa-folder-open"></i></button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group" style="flex:0 0 180px">
|
||||
<label for="batch-folderName" style="font-size:0.88em">Dossier Acteur</label>
|
||||
<input id="batch-folderName" name="batch.folderName" type="text" value="{{batch.folderName}}" placeholder="PNJs importés">
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<div class="form-group checkbox-group" style="margin:0 0 6px;padding:0 10px">
|
||||
<label>
|
||||
<input type="checkbox" name="batch.openSheets" {{#if batch.openSheets}}checked{{/if}}>
|
||||
Ouvrir la dernière fiche
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div id="batch-progress" class="batch-progress" style="display:none;margin:0 10px 6px">
|
||||
<div class="batch-progress-bar"><div class="batch-progress-fill" id="batch-progress-fill"></div></div>
|
||||
<div class="batch-progress-text" id="batch-progress-text" style="font-size:0.78em">Initialisation...</div>
|
||||
</div>
|
||||
|
||||
<div class="form-footer" style="padding:6px 10px">
|
||||
<button type="button" class="btn-calculate" data-action="batch-create" style="padding:4px 12px;font-size:0.85em">
|
||||
<i class="fas fa-dice-d6"></i> Créer les PNJs
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
@@ -0,0 +1,10 @@
|
||||
<div class="mgt2-cal-window">
|
||||
<div class="mgt2-cal-display">
|
||||
<span class="mgt2-cal-date">{{dateLabel}}</span>
|
||||
</div>
|
||||
{{#if isGM}}
|
||||
<button type="button" class="mgt2-cal-config-btn" title="Configurer le calendrier">
|
||||
<i class="fas fa-cog"></i>
|
||||
</button>
|
||||
{{/if}}
|
||||
</div>
|
||||
@@ -0,0 +1,39 @@
|
||||
<form class="mgt2-cal-config">
|
||||
<div class="mgt2-cal-config-row">
|
||||
<label for="cal-year">Année</label>
|
||||
<input type="number" id="cal-year" name="year" value="{{year}}" min="0" max="9999">
|
||||
</div>
|
||||
<div class="mgt2-cal-config-row">
|
||||
<label for="cal-day">Jour</label>
|
||||
<div class="mgt2-cal-day-group">
|
||||
<input type="number" id="cal-day" name="day" value="{{day}}" min="1" max="365">
|
||||
<span class="mgt2-cal-day-label">{{dayLabel}}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mgt2-cal-config-row">
|
||||
<label for="cal-hour">Heure</label>
|
||||
<input type="number" id="cal-hour" name="hour" value="{{hour}}" min="0" max="23">
|
||||
</div>
|
||||
<div class="mgt2-cal-config-row">
|
||||
<label for="cal-minute">Minute</label>
|
||||
<input type="number" id="cal-minute" name="minute" value="{{minute}}" min="0" max="59">
|
||||
</div>
|
||||
<div class="mgt2-cal-config-row">
|
||||
<label for="cal-planet">Planète</label>
|
||||
<input type="text" id="cal-planet" name="planet" value="{{planet}}" placeholder="p. ex. Terra">
|
||||
</div>
|
||||
<div class="mgt2-cal-config-actions">
|
||||
<button type="button" class="mgt2-cal-btn" data-action="day-inc"><i class="fas fa-plus"></i> +1 jour</button>
|
||||
<button type="button" class="mgt2-cal-btn" data-action="hour-inc"><i class="fas fa-plus"></i> +1 heure</button>
|
||||
<button type="button" class="mgt2-cal-btn mgt2-cal-btn-primary" data-action="apply">Appliquer</button>
|
||||
</div>
|
||||
<details class="mgt2-cal-conversions">
|
||||
<summary>Conversions calendaires <span class="mgt2-cal-conv-note">(approximatif)</span></summary>
|
||||
<div class="mgt2-cal-conv-row"><span class="mgt2-cal-conv-label">Solomani</span><span class="mgt2-cal-conv-val" data-cal="solomani">{{conversions.solomani}}</span></div>
|
||||
<div class="mgt2-cal-conv-row"><span class="mgt2-cal-conv-label">Vilani</span><span class="mgt2-cal-conv-val" data-cal="vilani">{{conversions.vilani}}</span></div>
|
||||
<div class="mgt2-cal-conv-row"><span class="mgt2-cal-conv-label">Zhodani</span><span class="mgt2-cal-conv-val" data-cal="zhodani">{{conversions.zhodani}}</span></div>
|
||||
<div class="mgt2-cal-conv-row"><span class="mgt2-cal-conv-label">Aslan</span><span class="mgt2-cal-conv-val" data-cal="aslan">{{conversions.aslan}}</span></div>
|
||||
<div class="mgt2-cal-conv-row"><span class="mgt2-cal-conv-label">K'Kree</span><span class="mgt2-cal-conv-val" data-cal="kkree">{{conversions.kkree}}</span></div>
|
||||
<div class="mgt2-cal-conv-row"><span class="mgt2-cal-conv-label">Hiver</span><span class="mgt2-cal-conv-val" data-cal="hiver">{{conversions.hiver}}</span></div>
|
||||
</details>
|
||||
</form>
|
||||
@@ -0,0 +1,3 @@
|
||||
<div style="display:flex;flex-direction:column;height:100%;padding:0;overflow:hidden">
|
||||
<iframe src="{{url}}" width="100%" height="100%" style="border:none" allow="clipboard-write" referrerpolicy="no-referrer"></iframe>
|
||||
</div>
|
||||
Reference in New Issue
Block a user