diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 0346265f..98ce4f0d 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -18,14 +18,8 @@ jobs: - name: Set Release Notes for Github id: set-release-notes-github run: | - echo "- General:" >> release_notes.txt - echo " - Settings: Reworked settings implementation so that a browser refresh is no longer needed when updating a given setting." >> release_notes.txt - echo "- Additions:" >> release_notes.txt - echo " - Hex: Automation for the Witch classes Hexing 3rd party reaction. Required changing the name of the item to Witches Hex in order to avoid unwanted crossover with the Hex spell." >> release_notes.txt echo "- Updates:" >> release_notes.txt - echo " - Opportunity Attack: Big update. Re-worked the deployment implementation. Canvas freezing has been resolved, template outlines displaying until the ruler is clicked has been resolved. Deployment should be much faster." >> release_notes.txt - echo "- Bugfixes:" >> release_notes.txt - echo " - Poetry in Misery: Add additional validation check for rogue save hooks firing." >> release_notes.txt + echo " - Opportunity Attack: Second big update. Removed need for an Opportunity Attack item which has been removed. Updated deployment to finally fix canvas freezing on combat start definitivelyTM. Fix bug when selecting a favorited weapon for the first time where the attack would not process. Fix bug with Walled Templates display template on token hover suppression flag. Hugely increase speed of deployment. Most instances should now be looking at a couple seconds of additional processing time max when starting combat." >> release_notes.txt echo "release-notes-github<> $GITHUB_ENV cat release_notes.txt >> $GITHUB_ENV echo "EOF" >> $GITHUB_ENV diff --git a/module.json b/module.json index 431ee74d..f3f7bd2a 100644 --- a/module.json +++ b/module.json @@ -7,7 +7,7 @@ "name": "Gambit" } ], - "version": "0.1.52", + "version": "0.1.53", "compatibility": { "minimum": "11", "verified": "11", diff --git a/packs/gps-3rd-party-features/000494.log b/packs/gps-3rd-party-features/000503.log similarity index 100% rename from packs/gps-3rd-party-features/000494.log rename to packs/gps-3rd-party-features/000503.log diff --git a/packs/gps-3rd-party-features/CURRENT b/packs/gps-3rd-party-features/CURRENT index b6a0fcf0..b9260078 100644 --- a/packs/gps-3rd-party-features/CURRENT +++ b/packs/gps-3rd-party-features/CURRENT @@ -1 +1 @@ -MANIFEST-000492 +MANIFEST-000501 diff --git a/packs/gps-3rd-party-features/LOG b/packs/gps-3rd-party-features/LOG index ff168b88..f84f8648 100644 --- a/packs/gps-3rd-party-features/LOG +++ b/packs/gps-3rd-party-features/LOG @@ -1,15 +1,8 @@ -2024/05/29-20:37:30.274 6aa0 Recovering log #490 -2024/05/29-20:37:30.285 6aa0 Delete type=0 #490 -2024/05/29-20:37:30.286 6aa0 Delete type=3 #488 -2024/05/29-23:45:18.365 5698 Level-0 table #495: started -2024/05/29-23:45:18.373 5698 Level-0 table #495: 10865 bytes OK -2024/05/29-23:45:18.376 5698 Delete type=0 #493 -2024/05/29-23:45:18.380 5698 Manual compaction at level-0 from '!folders!4Ecsdk7k1FvMs9OF' @ 72057594037927935 : 1 .. '!items.effects!G2IDv711EWrOF7ef.kE7T0D7E6CnMvjvr' @ 0 : 0; will stop at (end) -2024/05/29-23:45:18.380 5698 Manual compaction at level-1 from '!folders!4Ecsdk7k1FvMs9OF' @ 72057594037927935 : 1 .. '!items.effects!G2IDv711EWrOF7ef.kE7T0D7E6CnMvjvr' @ 0 : 0; will stop at '!items.effects!y6y7B3DSHbduxFDF.qKj7KcuvbZ2tAJ5t' @ 17 : 1 -2024/05/29-23:45:18.380 5698 Compacting 1@1 + 1@2 files -2024/05/29-23:45:18.393 5698 Generated table #496@1: 7 keys, 12359 bytes -2024/05/29-23:45:18.393 5698 Compacted 1@1 + 1@2 files => 12359 bytes -2024/05/29-23:45:18.397 5698 compacted to: files[ 0 0 1 0 0 0 0 ] -2024/05/29-23:45:18.397 5698 Delete type=2 #439 -2024/05/29-23:45:18.397 5698 Delete type=2 #495 -2024/05/29-23:45:18.404 5698 Manual compaction at level-1 from '!items.effects!y6y7B3DSHbduxFDF.qKj7KcuvbZ2tAJ5t' @ 17 : 1 .. '!items.effects!G2IDv711EWrOF7ef.kE7T0D7E6CnMvjvr' @ 0 : 0; will stop at (end) +2024/05/30-00:06:21.465 6b00 Recovering log #499 +2024/05/30-00:06:21.476 6b00 Delete type=0 #499 +2024/05/30-00:06:21.476 6b00 Delete type=3 #497 +2024/05/30-11:29:13.361 5698 Level-0 table #504: started +2024/05/30-11:29:13.361 5698 Level-0 table #504: 0 bytes OK +2024/05/30-11:29:13.366 5698 Delete type=0 #502 +2024/05/30-11:29:13.366 5698 Manual compaction at level-0 from '!folders!4Ecsdk7k1FvMs9OF' @ 72057594037927935 : 1 .. '!items.effects!G2IDv711EWrOF7ef.kE7T0D7E6CnMvjvr' @ 0 : 0; will stop at (end) +2024/05/30-11:29:13.367 5698 Manual compaction at level-1 from '!folders!4Ecsdk7k1FvMs9OF' @ 72057594037927935 : 1 .. '!items.effects!G2IDv711EWrOF7ef.kE7T0D7E6CnMvjvr' @ 0 : 0; will stop at (end) diff --git a/packs/gps-3rd-party-features/LOG.old b/packs/gps-3rd-party-features/LOG.old index d3013883..458dc114 100644 --- a/packs/gps-3rd-party-features/LOG.old +++ b/packs/gps-3rd-party-features/LOG.old @@ -1,8 +1,8 @@ -2024/05/29-10:23:20.558 6aa0 Recovering log #486 -2024/05/29-10:23:20.564 6aa0 Delete type=0 #486 -2024/05/29-10:23:20.564 6aa0 Delete type=3 #484 -2024/05/29-20:37:15.382 5698 Level-0 table #491: started -2024/05/29-20:37:15.382 5698 Level-0 table #491: 0 bytes OK -2024/05/29-20:37:15.384 5698 Delete type=0 #489 -2024/05/29-20:37:15.387 5698 Manual compaction at level-0 from '!folders!4Ecsdk7k1FvMs9OF' @ 72057594037927935 : 1 .. '!items.effects!G2IDv711EWrOF7ef.kE7T0D7E6CnMvjvr' @ 0 : 0; will stop at (end) -2024/05/29-20:37:15.388 5698 Manual compaction at level-1 from '!folders!4Ecsdk7k1FvMs9OF' @ 72057594037927935 : 1 .. '!items.effects!G2IDv711EWrOF7ef.kE7T0D7E6CnMvjvr' @ 0 : 0; will stop at (end) +2024/05/30-00:00:46.366 6b00 Recovering log #494 +2024/05/30-00:00:46.372 6b00 Delete type=0 #494 +2024/05/30-00:00:46.372 6b00 Delete type=3 #492 +2024/05/30-00:05:36.002 5698 Level-0 table #500: started +2024/05/30-00:05:36.002 5698 Level-0 table #500: 0 bytes OK +2024/05/30-00:05:36.006 5698 Delete type=0 #498 +2024/05/30-00:05:36.015 5698 Manual compaction at level-0 from '!folders!4Ecsdk7k1FvMs9OF' @ 72057594037927935 : 1 .. '!items.effects!G2IDv711EWrOF7ef.kE7T0D7E6CnMvjvr' @ 0 : 0; will stop at (end) +2024/05/30-00:05:36.015 5698 Manual compaction at level-1 from '!folders!4Ecsdk7k1FvMs9OF' @ 72057594037927935 : 1 .. '!items.effects!G2IDv711EWrOF7ef.kE7T0D7E6CnMvjvr' @ 0 : 0; will stop at (end) diff --git a/packs/gps-3rd-party-features/MANIFEST-000492 b/packs/gps-3rd-party-features/MANIFEST-000492 deleted file mode 100644 index b3fd3849..00000000 Binary files a/packs/gps-3rd-party-features/MANIFEST-000492 and /dev/null differ diff --git a/packs/gps-3rd-party-features/MANIFEST-000501 b/packs/gps-3rd-party-features/MANIFEST-000501 new file mode 100644 index 00000000..75b63839 Binary files /dev/null and b/packs/gps-3rd-party-features/MANIFEST-000501 differ diff --git a/packs/gps-3rd-party-items/000492.log b/packs/gps-3rd-party-items/000500.log similarity index 100% rename from packs/gps-3rd-party-items/000492.log rename to packs/gps-3rd-party-items/000500.log diff --git a/packs/gps-3rd-party-items/CURRENT b/packs/gps-3rd-party-items/CURRENT index 3b626eef..b8caea65 100644 --- a/packs/gps-3rd-party-items/CURRENT +++ b/packs/gps-3rd-party-items/CURRENT @@ -1 +1 @@ -MANIFEST-000490 +MANIFEST-000498 diff --git a/packs/gps-3rd-party-items/LOG b/packs/gps-3rd-party-items/LOG index 51b0007a..6ca83f1a 100644 --- a/packs/gps-3rd-party-items/LOG +++ b/packs/gps-3rd-party-items/LOG @@ -1,8 +1,8 @@ -2024/05/29-20:37:30.301 6b00 Recovering log #488 -2024/05/29-20:37:30.313 6b00 Delete type=0 #488 -2024/05/29-20:37:30.313 6b00 Delete type=3 #486 -2024/05/29-23:45:18.361 5698 Level-0 table #493: started -2024/05/29-23:45:18.361 5698 Level-0 table #493: 0 bytes OK -2024/05/29-23:45:18.365 5698 Delete type=0 #491 -2024/05/29-23:45:18.380 5698 Manual compaction at level-0 from '!items!A4JIbc14vM5IKbuT' @ 72057594037927935 : 1 .. '!items.effects!qHY9RXV48OmvCrw1.UNiU6zoPTpbrxoIA' @ 0 : 0; will stop at (end) -2024/05/29-23:45:18.398 5698 Manual compaction at level-1 from '!items!A4JIbc14vM5IKbuT' @ 72057594037927935 : 1 .. '!items.effects!qHY9RXV48OmvCrw1.UNiU6zoPTpbrxoIA' @ 0 : 0; will stop at (end) +2024/05/30-00:06:21.479 6834 Recovering log #496 +2024/05/30-00:06:21.489 6834 Delete type=0 #496 +2024/05/30-00:06:21.489 6834 Delete type=3 #494 +2024/05/30-11:29:13.377 5698 Level-0 table #501: started +2024/05/30-11:29:13.377 5698 Level-0 table #501: 0 bytes OK +2024/05/30-11:29:13.382 5698 Delete type=0 #499 +2024/05/30-11:29:13.395 5698 Manual compaction at level-0 from '!items!A4JIbc14vM5IKbuT' @ 72057594037927935 : 1 .. '!items.effects!qHY9RXV48OmvCrw1.UNiU6zoPTpbrxoIA' @ 0 : 0; will stop at (end) +2024/05/30-11:29:13.395 5698 Manual compaction at level-1 from '!items!A4JIbc14vM5IKbuT' @ 72057594037927935 : 1 .. '!items.effects!qHY9RXV48OmvCrw1.UNiU6zoPTpbrxoIA' @ 0 : 0; will stop at (end) diff --git a/packs/gps-3rd-party-items/LOG.old b/packs/gps-3rd-party-items/LOG.old index 7c45bdfa..2db8e31c 100644 --- a/packs/gps-3rd-party-items/LOG.old +++ b/packs/gps-3rd-party-items/LOG.old @@ -1,8 +1,8 @@ -2024/05/29-10:23:20.569 683c Recovering log #484 -2024/05/29-10:23:20.574 683c Delete type=0 #484 -2024/05/29-10:23:20.574 683c Delete type=3 #482 -2024/05/29-20:37:15.398 5698 Level-0 table #489: started -2024/05/29-20:37:15.398 5698 Level-0 table #489: 0 bytes OK -2024/05/29-20:37:15.400 5698 Delete type=0 #487 -2024/05/29-20:37:15.400 5698 Manual compaction at level-0 from '!items!A4JIbc14vM5IKbuT' @ 72057594037927935 : 1 .. '!items.effects!qHY9RXV48OmvCrw1.UNiU6zoPTpbrxoIA' @ 0 : 0; will stop at (end) -2024/05/29-20:37:15.400 5698 Manual compaction at level-1 from '!items!A4JIbc14vM5IKbuT' @ 72057594037927935 : 1 .. '!items.effects!qHY9RXV48OmvCrw1.UNiU6zoPTpbrxoIA' @ 0 : 0; will stop at (end) +2024/05/30-00:00:46.374 683c Recovering log #492 +2024/05/30-00:00:46.379 683c Delete type=0 #492 +2024/05/30-00:00:46.380 683c Delete type=3 #490 +2024/05/30-00:05:36.011 5698 Level-0 table #497: started +2024/05/30-00:05:36.011 5698 Level-0 table #497: 0 bytes OK +2024/05/30-00:05:36.015 5698 Delete type=0 #495 +2024/05/30-00:05:36.015 5698 Manual compaction at level-0 from '!items!A4JIbc14vM5IKbuT' @ 72057594037927935 : 1 .. '!items.effects!qHY9RXV48OmvCrw1.UNiU6zoPTpbrxoIA' @ 0 : 0; will stop at (end) +2024/05/30-00:05:36.016 5698 Manual compaction at level-1 from '!items!A4JIbc14vM5IKbuT' @ 72057594037927935 : 1 .. '!items.effects!qHY9RXV48OmvCrw1.UNiU6zoPTpbrxoIA' @ 0 : 0; will stop at (end) diff --git a/packs/gps-3rd-party-items/MANIFEST-000490 b/packs/gps-3rd-party-items/MANIFEST-000498 similarity index 57% rename from packs/gps-3rd-party-items/MANIFEST-000490 rename to packs/gps-3rd-party-items/MANIFEST-000498 index 524cd67f..ed2acd3e 100644 Binary files a/packs/gps-3rd-party-items/MANIFEST-000490 and b/packs/gps-3rd-party-items/MANIFEST-000498 differ diff --git a/packs/gps-3rd-party-spells/000499.log b/packs/gps-3rd-party-spells/000507.log similarity index 100% rename from packs/gps-3rd-party-spells/000499.log rename to packs/gps-3rd-party-spells/000507.log diff --git a/packs/gps-3rd-party-spells/CURRENT b/packs/gps-3rd-party-spells/CURRENT index 4dc67d5c..ee7cf6d2 100644 --- a/packs/gps-3rd-party-spells/CURRENT +++ b/packs/gps-3rd-party-spells/CURRENT @@ -1 +1 @@ -MANIFEST-000497 +MANIFEST-000505 diff --git a/packs/gps-3rd-party-spells/LOG b/packs/gps-3rd-party-spells/LOG index 5e8fd0b6..04b2e551 100644 --- a/packs/gps-3rd-party-spells/LOG +++ b/packs/gps-3rd-party-spells/LOG @@ -1,8 +1,8 @@ -2024/05/29-20:37:30.331 6aa0 Recovering log #495 -2024/05/29-20:37:30.344 6aa0 Delete type=0 #495 -2024/05/29-20:37:30.345 6aa0 Delete type=3 #493 -2024/05/29-23:45:18.398 5698 Level-0 table #500: started -2024/05/29-23:45:18.398 5698 Level-0 table #500: 0 bytes OK -2024/05/29-23:45:18.404 5698 Delete type=0 #498 -2024/05/29-23:45:18.412 5698 Manual compaction at level-0 from '!items!2YNbYocBRdEDgO4Q' @ 72057594037927935 : 1 .. '!items.effects!sR2IAM3IQAq6m4xU.N6BqEfnUtgKmw2xw' @ 0 : 0; will stop at (end) -2024/05/29-23:45:18.415 5698 Manual compaction at level-1 from '!items!2YNbYocBRdEDgO4Q' @ 72057594037927935 : 1 .. '!items.effects!sR2IAM3IQAq6m4xU.N6BqEfnUtgKmw2xw' @ 0 : 0; will stop at (end) +2024/05/30-00:06:21.493 6b00 Recovering log #503 +2024/05/30-00:06:21.500 6b00 Delete type=0 #503 +2024/05/30-00:06:21.500 6b00 Delete type=3 #501 +2024/05/30-11:29:13.383 5698 Level-0 table #508: started +2024/05/30-11:29:13.383 5698 Level-0 table #508: 0 bytes OK +2024/05/30-11:29:13.389 5698 Delete type=0 #506 +2024/05/30-11:29:13.395 5698 Manual compaction at level-0 from '!items!2YNbYocBRdEDgO4Q' @ 72057594037927935 : 1 .. '!items.effects!sR2IAM3IQAq6m4xU.N6BqEfnUtgKmw2xw' @ 0 : 0; will stop at (end) +2024/05/30-11:29:13.395 5698 Manual compaction at level-1 from '!items!2YNbYocBRdEDgO4Q' @ 72057594037927935 : 1 .. '!items.effects!sR2IAM3IQAq6m4xU.N6BqEfnUtgKmw2xw' @ 0 : 0; will stop at (end) diff --git a/packs/gps-3rd-party-spells/LOG.old b/packs/gps-3rd-party-spells/LOG.old index e83db9a0..5bde1478 100644 --- a/packs/gps-3rd-party-spells/LOG.old +++ b/packs/gps-3rd-party-spells/LOG.old @@ -1,8 +1,8 @@ -2024/05/29-10:23:20.580 6aa0 Recovering log #489 -2024/05/29-10:23:20.585 6aa0 Delete type=0 #489 -2024/05/29-10:23:20.585 6aa0 Delete type=3 #486 -2024/05/29-20:37:15.389 5698 Level-0 table #496: started -2024/05/29-20:37:15.389 5698 Level-0 table #496: 0 bytes OK -2024/05/29-20:37:15.392 5698 Delete type=0 #494 -2024/05/29-20:37:15.400 5698 Manual compaction at level-0 from '!items!2YNbYocBRdEDgO4Q' @ 72057594037927935 : 1 .. '!items.effects!sR2IAM3IQAq6m4xU.N6BqEfnUtgKmw2xw' @ 0 : 0; will stop at (end) -2024/05/29-20:37:15.400 5698 Manual compaction at level-1 from '!items!2YNbYocBRdEDgO4Q' @ 72057594037927935 : 1 .. '!items.effects!sR2IAM3IQAq6m4xU.N6BqEfnUtgKmw2xw' @ 0 : 0; will stop at (end) +2024/05/30-00:00:46.382 6b00 Recovering log #499 +2024/05/30-00:00:46.388 6b00 Delete type=0 #499 +2024/05/30-00:00:46.388 6b00 Delete type=3 #497 +2024/05/30-00:05:36.019 5698 Level-0 table #504: started +2024/05/30-00:05:36.019 5698 Level-0 table #504: 0 bytes OK +2024/05/30-00:05:36.025 5698 Delete type=0 #502 +2024/05/30-00:05:36.042 5698 Manual compaction at level-0 from '!items!2YNbYocBRdEDgO4Q' @ 72057594037927935 : 1 .. '!items.effects!sR2IAM3IQAq6m4xU.N6BqEfnUtgKmw2xw' @ 0 : 0; will stop at (end) +2024/05/30-00:05:36.042 5698 Manual compaction at level-1 from '!items!2YNbYocBRdEDgO4Q' @ 72057594037927935 : 1 .. '!items.effects!sR2IAM3IQAq6m4xU.N6BqEfnUtgKmw2xw' @ 0 : 0; will stop at (end) diff --git a/packs/gps-3rd-party-spells/MANIFEST-000497 b/packs/gps-3rd-party-spells/MANIFEST-000505 similarity index 82% rename from packs/gps-3rd-party-spells/MANIFEST-000497 rename to packs/gps-3rd-party-spells/MANIFEST-000505 index bd1a9987..a4f2854e 100644 Binary files a/packs/gps-3rd-party-spells/MANIFEST-000497 and b/packs/gps-3rd-party-spells/MANIFEST-000505 differ diff --git a/packs/gps-actors/000964.log b/packs/gps-actors/000972.log similarity index 100% rename from packs/gps-actors/000964.log rename to packs/gps-actors/000972.log diff --git a/packs/gps-actors/CURRENT b/packs/gps-actors/CURRENT index 46235fba..ff619c7a 100644 --- a/packs/gps-actors/CURRENT +++ b/packs/gps-actors/CURRENT @@ -1 +1 @@ -MANIFEST-000962 +MANIFEST-000970 diff --git a/packs/gps-actors/LOG b/packs/gps-actors/LOG index 589a02e5..a83fb5d5 100644 --- a/packs/gps-actors/LOG +++ b/packs/gps-actors/LOG @@ -1,8 +1,8 @@ -2024/05/29-20:37:30.249 6b00 Recovering log #960 -2024/05/29-20:37:30.255 6b00 Delete type=0 #960 -2024/05/29-20:37:30.255 6b00 Delete type=3 #958 -2024/05/29-23:45:18.376 5698 Level-0 table #965: started -2024/05/29-23:45:18.376 5698 Level-0 table #965: 0 bytes OK -2024/05/29-23:45:18.379 5698 Delete type=0 #963 -2024/05/29-23:45:18.380 5698 Manual compaction at level-0 from '!actors!2Q055cZ4Q4eMWCQT' @ 72057594037927935 : 1 .. '!actors.items.effects!2Q055cZ4Q4eMWCQT.icorevoMIkBVXL37.jFKhp34XZd32ryYT' @ 0 : 0; will stop at (end) -2024/05/29-23:45:18.398 5698 Manual compaction at level-1 from '!actors!2Q055cZ4Q4eMWCQT' @ 72057594037927935 : 1 .. '!actors.items.effects!2Q055cZ4Q4eMWCQT.icorevoMIkBVXL37.jFKhp34XZd32ryYT' @ 0 : 0; will stop at (end) +2024/05/30-00:06:21.451 6834 Recovering log #968 +2024/05/30-00:06:21.462 6834 Delete type=0 #968 +2024/05/30-00:06:21.462 6834 Delete type=3 #966 +2024/05/30-11:29:13.351 5698 Level-0 table #973: started +2024/05/30-11:29:13.352 5698 Level-0 table #973: 0 bytes OK +2024/05/30-11:29:13.355 5698 Delete type=0 #971 +2024/05/30-11:29:13.366 5698 Manual compaction at level-0 from '!actors!2Q055cZ4Q4eMWCQT' @ 72057594037927935 : 1 .. '!actors.items.effects!2Q055cZ4Q4eMWCQT.icorevoMIkBVXL37.jFKhp34XZd32ryYT' @ 0 : 0; will stop at (end) +2024/05/30-11:29:13.367 5698 Manual compaction at level-1 from '!actors!2Q055cZ4Q4eMWCQT' @ 72057594037927935 : 1 .. '!actors.items.effects!2Q055cZ4Q4eMWCQT.icorevoMIkBVXL37.jFKhp34XZd32ryYT' @ 0 : 0; will stop at (end) diff --git a/packs/gps-actors/LOG.old b/packs/gps-actors/LOG.old index 88e1e163..bc18017a 100644 --- a/packs/gps-actors/LOG.old +++ b/packs/gps-actors/LOG.old @@ -1,8 +1,8 @@ -2024/05/29-10:23:20.548 683c Recovering log #956 -2024/05/29-10:23:20.553 683c Delete type=0 #956 -2024/05/29-10:23:20.553 683c Delete type=3 #954 -2024/05/29-20:37:15.384 5698 Level-0 table #961: started -2024/05/29-20:37:15.384 5698 Level-0 table #961: 0 bytes OK -2024/05/29-20:37:15.387 5698 Delete type=0 #959 -2024/05/29-20:37:15.387 5698 Manual compaction at level-0 from '!actors!2Q055cZ4Q4eMWCQT' @ 72057594037927935 : 1 .. '!actors.items.effects!2Q055cZ4Q4eMWCQT.icorevoMIkBVXL37.jFKhp34XZd32ryYT' @ 0 : 0; will stop at (end) -2024/05/29-20:37:15.388 5698 Manual compaction at level-1 from '!actors!2Q055cZ4Q4eMWCQT' @ 72057594037927935 : 1 .. '!actors.items.effects!2Q055cZ4Q4eMWCQT.icorevoMIkBVXL37.jFKhp34XZd32ryYT' @ 0 : 0; will stop at (end) +2024/05/30-00:00:46.358 683c Recovering log #964 +2024/05/30-00:00:46.364 683c Delete type=0 #964 +2024/05/30-00:00:46.364 683c Delete type=3 #962 +2024/05/30-00:05:36.006 5698 Level-0 table #969: started +2024/05/30-00:05:36.006 5698 Level-0 table #969: 0 bytes OK +2024/05/30-00:05:36.011 5698 Delete type=0 #967 +2024/05/30-00:05:36.015 5698 Manual compaction at level-0 from '!actors!2Q055cZ4Q4eMWCQT' @ 72057594037927935 : 1 .. '!actors.items.effects!2Q055cZ4Q4eMWCQT.icorevoMIkBVXL37.jFKhp34XZd32ryYT' @ 0 : 0; will stop at (end) +2024/05/30-00:05:36.015 5698 Manual compaction at level-1 from '!actors!2Q055cZ4Q4eMWCQT' @ 72057594037927935 : 1 .. '!actors.items.effects!2Q055cZ4Q4eMWCQT.icorevoMIkBVXL37.jFKhp34XZd32ryYT' @ 0 : 0; will stop at (end) diff --git a/packs/gps-actors/MANIFEST-000962 b/packs/gps-actors/MANIFEST-000970 similarity index 70% rename from packs/gps-actors/MANIFEST-000962 rename to packs/gps-actors/MANIFEST-000970 index c027906c..08e2c48c 100644 Binary files a/packs/gps-actors/MANIFEST-000962 and b/packs/gps-actors/MANIFEST-000970 differ diff --git a/packs/gps-class-features/002140.log b/packs/gps-class-features/002148.log similarity index 100% rename from packs/gps-class-features/002140.log rename to packs/gps-class-features/002148.log diff --git a/packs/gps-class-features/CURRENT b/packs/gps-class-features/CURRENT index f0b73dcc..c5c4ef77 100644 --- a/packs/gps-class-features/CURRENT +++ b/packs/gps-class-features/CURRENT @@ -1 +1 @@ -MANIFEST-002138 +MANIFEST-002146 diff --git a/packs/gps-class-features/LOG b/packs/gps-class-features/LOG index 81263ffc..e537ea7d 100644 --- a/packs/gps-class-features/LOG +++ b/packs/gps-class-features/LOG @@ -1,8 +1,8 @@ -2024/05/29-20:37:30.088 6b00 Recovering log #2136 -2024/05/29-20:37:30.097 6b00 Delete type=0 #2136 -2024/05/29-20:37:30.097 6b00 Delete type=3 #2134 -2024/05/29-23:45:18.277 5698 Level-0 table #2141: started -2024/05/29-23:45:18.277 5698 Level-0 table #2141: 0 bytes OK -2024/05/29-23:45:18.281 5698 Delete type=0 #2139 -2024/05/29-23:45:18.288 5698 Manual compaction at level-0 from '!folders!89rvrtGjpBsZz1Tr' @ 72057594037927935 : 1 .. '!items.effects!wLd8HBhcDcpEy0Gp.DWegiMAKX43CuDbS' @ 0 : 0; will stop at (end) -2024/05/29-23:45:18.288 5698 Manual compaction at level-1 from '!folders!89rvrtGjpBsZz1Tr' @ 72057594037927935 : 1 .. '!items.effects!wLd8HBhcDcpEy0Gp.DWegiMAKX43CuDbS' @ 0 : 0; will stop at (end) +2024/05/30-00:06:21.349 6834 Recovering log #2144 +2024/05/30-00:06:21.359 6834 Delete type=0 #2144 +2024/05/30-00:06:21.359 6834 Delete type=3 #2142 +2024/05/30-11:29:13.275 5698 Level-0 table #2149: started +2024/05/30-11:29:13.276 5698 Level-0 table #2149: 0 bytes OK +2024/05/30-11:29:13.280 5698 Delete type=0 #2147 +2024/05/30-11:29:13.285 5698 Manual compaction at level-0 from '!folders!89rvrtGjpBsZz1Tr' @ 72057594037927935 : 1 .. '!items.effects!wLd8HBhcDcpEy0Gp.DWegiMAKX43CuDbS' @ 0 : 0; will stop at (end) +2024/05/30-11:29:13.285 5698 Manual compaction at level-1 from '!folders!89rvrtGjpBsZz1Tr' @ 72057594037927935 : 1 .. '!items.effects!wLd8HBhcDcpEy0Gp.DWegiMAKX43CuDbS' @ 0 : 0; will stop at (end) diff --git a/packs/gps-class-features/LOG.old b/packs/gps-class-features/LOG.old index d4954139..661008d9 100644 --- a/packs/gps-class-features/LOG.old +++ b/packs/gps-class-features/LOG.old @@ -1,8 +1,8 @@ -2024/05/29-10:23:20.455 683c Recovering log #2132 -2024/05/29-10:23:20.460 683c Delete type=0 #2132 -2024/05/29-10:23:20.461 683c Delete type=3 #2130 -2024/05/29-20:37:15.358 5698 Level-0 table #2137: started -2024/05/29-20:37:15.358 5698 Level-0 table #2137: 0 bytes OK -2024/05/29-20:37:15.361 5698 Delete type=0 #2135 -2024/05/29-20:37:15.363 5698 Manual compaction at level-0 from '!folders!89rvrtGjpBsZz1Tr' @ 72057594037927935 : 1 .. '!items.effects!wLd8HBhcDcpEy0Gp.DWegiMAKX43CuDbS' @ 0 : 0; will stop at (end) -2024/05/29-20:37:15.363 5698 Manual compaction at level-1 from '!folders!89rvrtGjpBsZz1Tr' @ 72057594037927935 : 1 .. '!items.effects!wLd8HBhcDcpEy0Gp.DWegiMAKX43CuDbS' @ 0 : 0; will stop at (end) +2024/05/30-00:00:46.292 683c Recovering log #2140 +2024/05/30-00:00:46.298 683c Delete type=0 #2140 +2024/05/30-00:00:46.298 683c Delete type=3 #2138 +2024/05/30-00:05:35.932 5698 Level-0 table #2145: started +2024/05/30-00:05:35.932 5698 Level-0 table #2145: 0 bytes OK +2024/05/30-00:05:35.941 5698 Delete type=0 #2143 +2024/05/30-00:05:35.966 5698 Manual compaction at level-0 from '!folders!89rvrtGjpBsZz1Tr' @ 72057594037927935 : 1 .. '!items.effects!wLd8HBhcDcpEy0Gp.DWegiMAKX43CuDbS' @ 0 : 0; will stop at (end) +2024/05/30-00:05:35.967 5698 Manual compaction at level-1 from '!folders!89rvrtGjpBsZz1Tr' @ 72057594037927935 : 1 .. '!items.effects!wLd8HBhcDcpEy0Gp.DWegiMAKX43CuDbS' @ 0 : 0; will stop at (end) diff --git a/packs/gps-class-features/MANIFEST-002138 b/packs/gps-class-features/MANIFEST-002146 similarity index 66% rename from packs/gps-class-features/MANIFEST-002138 rename to packs/gps-class-features/MANIFEST-002146 index a6793eae..1694abfd 100644 Binary files a/packs/gps-class-features/MANIFEST-002138 and b/packs/gps-class-features/MANIFEST-002146 differ diff --git a/packs/gps-generic-features/002219.ldb b/packs/gps-generic-features/002219.ldb deleted file mode 100644 index 58a1aad1..00000000 Binary files a/packs/gps-generic-features/002219.ldb and /dev/null differ diff --git a/packs/gps-generic-features/002217.log b/packs/gps-generic-features/002227.log similarity index 100% rename from packs/gps-generic-features/002217.log rename to packs/gps-generic-features/002227.log diff --git a/packs/gps-generic-features/002229.ldb b/packs/gps-generic-features/002229.ldb new file mode 100644 index 00000000..b9009ffa Binary files /dev/null and b/packs/gps-generic-features/002229.ldb differ diff --git a/packs/gps-generic-features/CURRENT b/packs/gps-generic-features/CURRENT index 3d871d98..ac2827ec 100644 --- a/packs/gps-generic-features/CURRENT +++ b/packs/gps-generic-features/CURRENT @@ -1 +1 @@ -MANIFEST-002215 +MANIFEST-002225 diff --git a/packs/gps-generic-features/LOG b/packs/gps-generic-features/LOG index d63a84ce..6c93d048 100644 --- a/packs/gps-generic-features/LOG +++ b/packs/gps-generic-features/LOG @@ -1,15 +1,15 @@ -2024/05/29-20:37:30.138 6aa0 Recovering log #2213 -2024/05/29-20:37:30.148 6aa0 Delete type=0 #2213 -2024/05/29-20:37:30.148 6aa0 Delete type=3 #2211 -2024/05/29-23:45:18.303 5698 Level-0 table #2218: started -2024/05/29-23:45:18.318 5698 Level-0 table #2218: 20347 bytes OK -2024/05/29-23:45:18.321 5698 Delete type=0 #2216 -2024/05/29-23:45:18.322 5698 Manual compaction at level-0 from '!items!0XoQ7lGPSwjM8Gw4' @ 72057594037927935 : 1 .. '!items.effects!svKaRfNtOXMOXoW6.NcYMpQ7B3RwBuLC7' @ 0 : 0; will stop at (end) -2024/05/29-23:45:18.323 5698 Manual compaction at level-1 from '!items!0XoQ7lGPSwjM8Gw4' @ 72057594037927935 : 1 .. '!items.effects!svKaRfNtOXMOXoW6.NcYMpQ7B3RwBuLC7' @ 0 : 0; will stop at '!items.effects!dTFcLHRsLxw4R7PQ.1IkBgxOFEYJd4z53' @ 574 : 0 -2024/05/29-23:45:18.323 5698 Compacting 1@1 + 1@2 files -2024/05/29-23:45:18.337 5698 Generated table #2219@1: 12 keys, 29789 bytes -2024/05/29-23:45:18.337 5698 Compacted 1@1 + 1@2 files => 29789 bytes -2024/05/29-23:45:18.340 5698 compacted to: files[ 0 0 1 0 0 0 0 ] -2024/05/29-23:45:18.341 5698 Delete type=2 #2210 -2024/05/29-23:45:18.341 5698 Delete type=2 #2218 -2024/05/29-23:45:18.353 5698 Manual compaction at level-1 from '!items.effects!dTFcLHRsLxw4R7PQ.1IkBgxOFEYJd4z53' @ 574 : 0 .. '!items.effects!svKaRfNtOXMOXoW6.NcYMpQ7B3RwBuLC7' @ 0 : 0; will stop at (end) +2024/05/30-00:06:21.385 6b00 Recovering log #2222 +2024/05/30-00:06:21.397 6b00 Delete type=0 #2222 +2024/05/30-00:06:21.397 6b00 Delete type=3 #2220 +2024/05/30-11:29:13.295 5698 Level-0 table #2228: started +2024/05/30-11:29:13.314 5698 Level-0 table #2228: 237 bytes OK +2024/05/30-11:29:13.318 5698 Delete type=0 #2226 +2024/05/30-11:29:13.329 5698 Manual compaction at level-0 from '!items!0XoQ7lGPSwjM8Gw4' @ 72057594037927935 : 1 .. '!items.effects!svKaRfNtOXMOXoW6.NcYMpQ7B3RwBuLC7' @ 0 : 0; will stop at (end) +2024/05/30-11:29:13.329 5698 Manual compaction at level-1 from '!items!0XoQ7lGPSwjM8Gw4' @ 72057594037927935 : 1 .. '!items.effects!svKaRfNtOXMOXoW6.NcYMpQ7B3RwBuLC7' @ 0 : 0; will stop at '!items.effects!YWXTlGDKC2GH5VAS.1IkBgxOFEYJd4z53' @ 580 : 0 +2024/05/30-11:29:13.329 5698 Compacting 1@1 + 1@2 files +2024/05/30-11:29:13.341 5698 Generated table #2229@1: 10 keys, 9581 bytes +2024/05/30-11:29:13.341 5698 Compacted 1@1 + 1@2 files => 9581 bytes +2024/05/30-11:29:13.345 5698 compacted to: files[ 0 0 1 0 0 0 0 ] +2024/05/30-11:29:13.345 5698 Delete type=2 #2224 +2024/05/30-11:29:13.346 5698 Delete type=2 #2228 +2024/05/30-11:29:13.351 5698 Manual compaction at level-1 from '!items.effects!YWXTlGDKC2GH5VAS.1IkBgxOFEYJd4z53' @ 580 : 0 .. '!items.effects!svKaRfNtOXMOXoW6.NcYMpQ7B3RwBuLC7' @ 0 : 0; will stop at (end) diff --git a/packs/gps-generic-features/LOG.old b/packs/gps-generic-features/LOG.old index 90253d89..91d8b6fd 100644 --- a/packs/gps-generic-features/LOG.old +++ b/packs/gps-generic-features/LOG.old @@ -1,8 +1,15 @@ -2024/05/29-10:23:20.486 6aa0 Recovering log #2207 -2024/05/29-10:23:20.491 6aa0 Delete type=0 #2207 -2024/05/29-10:23:20.491 6aa0 Delete type=3 #2204 -2024/05/29-20:37:15.365 5698 Level-0 table #2214: started -2024/05/29-20:37:15.365 5698 Level-0 table #2214: 0 bytes OK -2024/05/29-20:37:15.367 5698 Delete type=0 #2212 -2024/05/29-20:37:15.375 5698 Manual compaction at level-0 from '!items!0XoQ7lGPSwjM8Gw4' @ 72057594037927935 : 1 .. '!items.effects!svKaRfNtOXMOXoW6.NcYMpQ7B3RwBuLC7' @ 0 : 0; will stop at (end) -2024/05/29-20:37:15.375 5698 Manual compaction at level-1 from '!items!0XoQ7lGPSwjM8Gw4' @ 72057594037927935 : 1 .. '!items.effects!svKaRfNtOXMOXoW6.NcYMpQ7B3RwBuLC7' @ 0 : 0; will stop at (end) +2024/05/30-00:00:46.316 6b00 Recovering log #2217 +2024/05/30-00:00:46.322 6b00 Delete type=0 #2217 +2024/05/30-00:00:46.322 6b00 Delete type=3 #2215 +2024/05/30-00:05:35.954 5698 Level-0 table #2223: started +2024/05/30-00:05:35.962 5698 Level-0 table #2223: 34431 bytes OK +2024/05/30-00:05:35.966 5698 Delete type=0 #2221 +2024/05/30-00:05:35.967 5698 Manual compaction at level-0 from '!items!0XoQ7lGPSwjM8Gw4' @ 72057594037927935 : 1 .. '!items.effects!svKaRfNtOXMOXoW6.NcYMpQ7B3RwBuLC7' @ 0 : 0; will stop at (end) +2024/05/30-00:05:35.967 5698 Manual compaction at level-1 from '!items!0XoQ7lGPSwjM8Gw4' @ 72057594037927935 : 1 .. '!items.effects!svKaRfNtOXMOXoW6.NcYMpQ7B3RwBuLC7' @ 0 : 0; will stop at '!items!YWXTlGDKC2GH5VAS' @ 578 : 1 +2024/05/30-00:05:35.967 5698 Compacting 1@1 + 1@2 files +2024/05/30-00:05:35.976 5698 Generated table #2224@1: 12 keys, 29831 bytes +2024/05/30-00:05:35.976 5698 Compacted 1@1 + 1@2 files => 29831 bytes +2024/05/30-00:05:35.978 5698 compacted to: files[ 0 0 1 0 0 0 0 ] +2024/05/30-00:05:35.978 5698 Delete type=2 #2219 +2024/05/30-00:05:35.978 5698 Delete type=2 #2223 +2024/05/30-00:05:35.992 5698 Manual compaction at level-1 from '!items!YWXTlGDKC2GH5VAS' @ 578 : 1 .. '!items.effects!svKaRfNtOXMOXoW6.NcYMpQ7B3RwBuLC7' @ 0 : 0; will stop at (end) diff --git a/packs/gps-generic-features/MANIFEST-002215 b/packs/gps-generic-features/MANIFEST-002215 deleted file mode 100644 index 7b3d5e11..00000000 Binary files a/packs/gps-generic-features/MANIFEST-002215 and /dev/null differ diff --git a/packs/gps-generic-features/MANIFEST-002225 b/packs/gps-generic-features/MANIFEST-002225 new file mode 100644 index 00000000..fc797930 Binary files /dev/null and b/packs/gps-generic-features/MANIFEST-002225 differ diff --git a/packs/gps-homebrew-features/002120.log b/packs/gps-homebrew-features/002128.log similarity index 100% rename from packs/gps-homebrew-features/002120.log rename to packs/gps-homebrew-features/002128.log diff --git a/packs/gps-homebrew-features/CURRENT b/packs/gps-homebrew-features/CURRENT index 7cb1b04c..e2d3744f 100644 --- a/packs/gps-homebrew-features/CURRENT +++ b/packs/gps-homebrew-features/CURRENT @@ -1 +1 @@ -MANIFEST-002118 +MANIFEST-002126 diff --git a/packs/gps-homebrew-features/LOG b/packs/gps-homebrew-features/LOG index 96d1d898..b63e9488 100644 --- a/packs/gps-homebrew-features/LOG +++ b/packs/gps-homebrew-features/LOG @@ -1,8 +1,8 @@ -2024/05/29-20:37:30.152 6b00 Recovering log #2116 -2024/05/29-20:37:30.163 6b00 Delete type=0 #2116 -2024/05/29-20:37:30.163 6b00 Delete type=3 #2114 -2024/05/29-23:45:18.349 5698 Level-0 table #2121: started -2024/05/29-23:45:18.349 5698 Level-0 table #2121: 0 bytes OK -2024/05/29-23:45:18.353 5698 Delete type=0 #2119 -2024/05/29-23:45:18.354 5698 Manual compaction at level-0 from '!folders!4OzV9QdsPgTyK99q' @ 72057594037927935 : 1 .. '!items.effects!ba3fwkX1XMdyqBaE.hPR9ii2vho7FqWlZ' @ 0 : 0; will stop at (end) -2024/05/29-23:45:18.354 5698 Manual compaction at level-1 from '!folders!4OzV9QdsPgTyK99q' @ 72057594037927935 : 1 .. '!items.effects!ba3fwkX1XMdyqBaE.hPR9ii2vho7FqWlZ' @ 0 : 0; will stop at (end) +2024/05/30-00:06:21.399 6834 Recovering log #2124 +2024/05/30-00:06:21.408 6834 Delete type=0 #2124 +2024/05/30-00:06:21.409 6834 Delete type=3 #2122 +2024/05/30-11:29:13.318 5698 Level-0 table #2129: started +2024/05/30-11:29:13.318 5698 Level-0 table #2129: 0 bytes OK +2024/05/30-11:29:13.324 5698 Delete type=0 #2127 +2024/05/30-11:29:13.329 5698 Manual compaction at level-0 from '!folders!4OzV9QdsPgTyK99q' @ 72057594037927935 : 1 .. '!items.effects!ba3fwkX1XMdyqBaE.hPR9ii2vho7FqWlZ' @ 0 : 0; will stop at (end) +2024/05/30-11:29:13.346 5698 Manual compaction at level-1 from '!folders!4OzV9QdsPgTyK99q' @ 72057594037927935 : 1 .. '!items.effects!ba3fwkX1XMdyqBaE.hPR9ii2vho7FqWlZ' @ 0 : 0; will stop at (end) diff --git a/packs/gps-homebrew-features/LOG.old b/packs/gps-homebrew-features/LOG.old index 69198aa2..f612b6d7 100644 --- a/packs/gps-homebrew-features/LOG.old +++ b/packs/gps-homebrew-features/LOG.old @@ -1,8 +1,8 @@ -2024/05/29-10:23:20.494 683c Recovering log #2112 -2024/05/29-10:23:20.499 683c Delete type=0 #2112 -2024/05/29-10:23:20.499 683c Delete type=3 #2110 -2024/05/29-20:37:15.367 5698 Level-0 table #2117: started -2024/05/29-20:37:15.367 5698 Level-0 table #2117: 0 bytes OK -2024/05/29-20:37:15.370 5698 Delete type=0 #2115 -2024/05/29-20:37:15.375 5698 Manual compaction at level-0 from '!folders!4OzV9QdsPgTyK99q' @ 72057594037927935 : 1 .. '!items.effects!ba3fwkX1XMdyqBaE.hPR9ii2vho7FqWlZ' @ 0 : 0; will stop at (end) -2024/05/29-20:37:15.375 5698 Manual compaction at level-1 from '!folders!4OzV9QdsPgTyK99q' @ 72057594037927935 : 1 .. '!items.effects!ba3fwkX1XMdyqBaE.hPR9ii2vho7FqWlZ' @ 0 : 0; will stop at (end) +2024/05/30-00:00:46.323 683c Recovering log #2120 +2024/05/30-00:00:46.329 683c Delete type=0 #2120 +2024/05/30-00:00:46.329 683c Delete type=3 #2118 +2024/05/30-00:05:35.983 5698 Level-0 table #2125: started +2024/05/30-00:05:35.983 5698 Level-0 table #2125: 0 bytes OK +2024/05/30-00:05:35.987 5698 Delete type=0 #2123 +2024/05/30-00:05:35.992 5698 Manual compaction at level-0 from '!folders!4OzV9QdsPgTyK99q' @ 72057594037927935 : 1 .. '!items.effects!ba3fwkX1XMdyqBaE.hPR9ii2vho7FqWlZ' @ 0 : 0; will stop at (end) +2024/05/30-00:05:35.992 5698 Manual compaction at level-1 from '!folders!4OzV9QdsPgTyK99q' @ 72057594037927935 : 1 .. '!items.effects!ba3fwkX1XMdyqBaE.hPR9ii2vho7FqWlZ' @ 0 : 0; will stop at (end) diff --git a/packs/gps-homebrew-features/MANIFEST-002118 b/packs/gps-homebrew-features/MANIFEST-002126 similarity index 67% rename from packs/gps-homebrew-features/MANIFEST-002118 rename to packs/gps-homebrew-features/MANIFEST-002126 index 890d55ba..d0ac6542 100644 Binary files a/packs/gps-homebrew-features/MANIFEST-002118 and b/packs/gps-homebrew-features/MANIFEST-002126 differ diff --git a/packs/gps-homebrew-items/002129.log b/packs/gps-homebrew-items/002137.log similarity index 100% rename from packs/gps-homebrew-items/002129.log rename to packs/gps-homebrew-items/002137.log diff --git a/packs/gps-homebrew-items/CURRENT b/packs/gps-homebrew-items/CURRENT index ed675cc1..966b72be 100644 --- a/packs/gps-homebrew-items/CURRENT +++ b/packs/gps-homebrew-items/CURRENT @@ -1 +1 @@ -MANIFEST-002127 +MANIFEST-002135 diff --git a/packs/gps-homebrew-items/LOG b/packs/gps-homebrew-items/LOG index bac4b74e..1b1bc08c 100644 --- a/packs/gps-homebrew-items/LOG +++ b/packs/gps-homebrew-items/LOG @@ -1,8 +1,8 @@ -2024/05/29-20:37:30.175 6aa0 Recovering log #2125 -2024/05/29-20:37:30.181 6aa0 Delete type=0 #2125 -2024/05/29-20:37:30.182 6aa0 Delete type=3 #2123 -2024/05/29-23:45:18.342 5698 Level-0 table #2130: started -2024/05/29-23:45:18.342 5698 Level-0 table #2130: 0 bytes OK -2024/05/29-23:45:18.346 5698 Delete type=0 #2128 -2024/05/29-23:45:18.354 5698 Manual compaction at level-0 from '!items!1WSJjnpLJhilXEgO' @ 72057594037927935 : 1 .. '!items.effects!zEXJxqsAmVM7Pohu.eA3jhjz26f35OLfw' @ 0 : 0; will stop at (end) -2024/05/29-23:45:18.354 5698 Manual compaction at level-1 from '!items!1WSJjnpLJhilXEgO' @ 72057594037927935 : 1 .. '!items.effects!zEXJxqsAmVM7Pohu.eA3jhjz26f35OLfw' @ 0 : 0; will stop at (end) +2024/05/30-00:06:21.412 6b00 Recovering log #2133 +2024/05/30-00:06:21.420 6b00 Delete type=0 #2133 +2024/05/30-00:06:21.420 6b00 Delete type=3 #2131 +2024/05/30-11:29:13.346 5698 Level-0 table #2138: started +2024/05/30-11:29:13.346 5698 Level-0 table #2138: 0 bytes OK +2024/05/30-11:29:13.351 5698 Delete type=0 #2136 +2024/05/30-11:29:13.360 5698 Manual compaction at level-0 from '!items!1WSJjnpLJhilXEgO' @ 72057594037927935 : 1 .. '!items.effects!zEXJxqsAmVM7Pohu.eA3jhjz26f35OLfw' @ 0 : 0; will stop at (end) +2024/05/30-11:29:13.366 5698 Manual compaction at level-1 from '!items!1WSJjnpLJhilXEgO' @ 72057594037927935 : 1 .. '!items.effects!zEXJxqsAmVM7Pohu.eA3jhjz26f35OLfw' @ 0 : 0; will stop at (end) diff --git a/packs/gps-homebrew-items/LOG.old b/packs/gps-homebrew-items/LOG.old index 3c87a972..a6557f44 100644 --- a/packs/gps-homebrew-items/LOG.old +++ b/packs/gps-homebrew-items/LOG.old @@ -1,8 +1,8 @@ -2024/05/29-10:23:20.506 6aa0 Recovering log #2121 -2024/05/29-10:23:20.512 6aa0 Delete type=0 #2121 -2024/05/29-10:23:20.512 6aa0 Delete type=3 #2119 -2024/05/29-20:37:15.370 5698 Level-0 table #2126: started -2024/05/29-20:37:15.370 5698 Level-0 table #2126: 0 bytes OK -2024/05/29-20:37:15.372 5698 Delete type=0 #2124 -2024/05/29-20:37:15.375 5698 Manual compaction at level-0 from '!items!1WSJjnpLJhilXEgO' @ 72057594037927935 : 1 .. '!items.effects!zEXJxqsAmVM7Pohu.eA3jhjz26f35OLfw' @ 0 : 0; will stop at (end) -2024/05/29-20:37:15.376 5698 Manual compaction at level-1 from '!items!1WSJjnpLJhilXEgO' @ 72057594037927935 : 1 .. '!items.effects!zEXJxqsAmVM7Pohu.eA3jhjz26f35OLfw' @ 0 : 0; will stop at (end) +2024/05/30-00:00:46.332 6b00 Recovering log #2129 +2024/05/30-00:00:46.338 6b00 Delete type=0 #2129 +2024/05/30-00:00:46.338 6b00 Delete type=3 #2127 +2024/05/30-00:05:35.978 5698 Level-0 table #2134: started +2024/05/30-00:05:35.978 5698 Level-0 table #2134: 0 bytes OK +2024/05/30-00:05:35.983 5698 Delete type=0 #2132 +2024/05/30-00:05:35.992 5698 Manual compaction at level-0 from '!items!1WSJjnpLJhilXEgO' @ 72057594037927935 : 1 .. '!items.effects!zEXJxqsAmVM7Pohu.eA3jhjz26f35OLfw' @ 0 : 0; will stop at (end) +2024/05/30-00:05:35.992 5698 Manual compaction at level-1 from '!items!1WSJjnpLJhilXEgO' @ 72057594037927935 : 1 .. '!items.effects!zEXJxqsAmVM7Pohu.eA3jhjz26f35OLfw' @ 0 : 0; will stop at (end) diff --git a/packs/gps-homebrew-items/MANIFEST-002127 b/packs/gps-homebrew-items/MANIFEST-002135 similarity index 81% rename from packs/gps-homebrew-items/MANIFEST-002127 rename to packs/gps-homebrew-items/MANIFEST-002135 index d872a53a..200a7ec4 100644 Binary files a/packs/gps-homebrew-items/MANIFEST-002127 and b/packs/gps-homebrew-items/MANIFEST-002135 differ diff --git a/packs/gps-homebrew-spells/001797.log b/packs/gps-homebrew-spells/001805.log similarity index 100% rename from packs/gps-homebrew-spells/001797.log rename to packs/gps-homebrew-spells/001805.log diff --git a/packs/gps-homebrew-spells/CURRENT b/packs/gps-homebrew-spells/CURRENT index 1d443462..370665aa 100644 --- a/packs/gps-homebrew-spells/CURRENT +++ b/packs/gps-homebrew-spells/CURRENT @@ -1 +1 @@ -MANIFEST-001795 +MANIFEST-001803 diff --git a/packs/gps-homebrew-spells/LOG b/packs/gps-homebrew-spells/LOG index 365f7108..284ff621 100644 --- a/packs/gps-homebrew-spells/LOG +++ b/packs/gps-homebrew-spells/LOG @@ -1,8 +1,8 @@ -2024/05/29-20:37:30.191 6b00 Recovering log #1793 -2024/05/29-20:37:30.201 6b00 Delete type=0 #1793 -2024/05/29-20:37:30.201 6b00 Delete type=3 #1791 -2024/05/29-23:45:18.346 5698 Level-0 table #1798: started -2024/05/29-23:45:18.346 5698 Level-0 table #1798: 0 bytes OK -2024/05/29-23:45:18.349 5698 Delete type=0 #1796 -2024/05/29-23:45:18.354 5698 Manual compaction at level-0 from '!items!iVqgFn89rGOnPTK4' @ 72057594037927935 : 1 .. '!items.effects!iVqgFn89rGOnPTK4.fAK9x7lIORqSnaz1' @ 0 : 0; will stop at (end) -2024/05/29-23:45:18.354 5698 Manual compaction at level-1 from '!items!iVqgFn89rGOnPTK4' @ 72057594037927935 : 1 .. '!items.effects!iVqgFn89rGOnPTK4.fAK9x7lIORqSnaz1' @ 0 : 0; will stop at (end) +2024/05/30-00:06:21.423 6834 Recovering log #1801 +2024/05/30-00:06:21.431 6834 Delete type=0 #1801 +2024/05/30-00:06:21.432 6834 Delete type=3 #1799 +2024/05/30-11:29:13.369 5698 Level-0 table #1806: started +2024/05/30-11:29:13.369 5698 Level-0 table #1806: 0 bytes OK +2024/05/30-11:29:13.377 5698 Delete type=0 #1804 +2024/05/30-11:29:13.395 5698 Manual compaction at level-0 from '!items!iVqgFn89rGOnPTK4' @ 72057594037927935 : 1 .. '!items.effects!iVqgFn89rGOnPTK4.fAK9x7lIORqSnaz1' @ 0 : 0; will stop at (end) +2024/05/30-11:29:13.395 5698 Manual compaction at level-1 from '!items!iVqgFn89rGOnPTK4' @ 72057594037927935 : 1 .. '!items.effects!iVqgFn89rGOnPTK4.fAK9x7lIORqSnaz1' @ 0 : 0; will stop at (end) diff --git a/packs/gps-homebrew-spells/LOG.old b/packs/gps-homebrew-spells/LOG.old index a0f924f7..a14d7632 100644 --- a/packs/gps-homebrew-spells/LOG.old +++ b/packs/gps-homebrew-spells/LOG.old @@ -1,8 +1,8 @@ -2024/05/29-10:23:20.518 683c Recovering log #1789 -2024/05/29-10:23:20.524 683c Delete type=0 #1789 -2024/05/29-10:23:20.524 683c Delete type=3 #1787 -2024/05/29-20:37:15.372 5698 Level-0 table #1794: started -2024/05/29-20:37:15.372 5698 Level-0 table #1794: 0 bytes OK -2024/05/29-20:37:15.375 5698 Delete type=0 #1792 -2024/05/29-20:37:15.375 5698 Manual compaction at level-0 from '!items!iVqgFn89rGOnPTK4' @ 72057594037927935 : 1 .. '!items.effects!iVqgFn89rGOnPTK4.fAK9x7lIORqSnaz1' @ 0 : 0; will stop at (end) -2024/05/29-20:37:15.376 5698 Manual compaction at level-1 from '!items!iVqgFn89rGOnPTK4' @ 72057594037927935 : 1 .. '!items.effects!iVqgFn89rGOnPTK4.fAK9x7lIORqSnaz1' @ 0 : 0; will stop at (end) +2024/05/30-00:00:46.340 683c Recovering log #1797 +2024/05/30-00:00:46.346 683c Delete type=0 #1797 +2024/05/30-00:00:46.346 683c Delete type=3 #1795 +2024/05/30-00:05:35.987 5698 Level-0 table #1802: started +2024/05/30-00:05:35.987 5698 Level-0 table #1802: 0 bytes OK +2024/05/30-00:05:35.992 5698 Delete type=0 #1800 +2024/05/30-00:05:35.992 5698 Manual compaction at level-0 from '!items!iVqgFn89rGOnPTK4' @ 72057594037927935 : 1 .. '!items.effects!iVqgFn89rGOnPTK4.fAK9x7lIORqSnaz1' @ 0 : 0; will stop at (end) +2024/05/30-00:05:35.992 5698 Manual compaction at level-1 from '!items!iVqgFn89rGOnPTK4' @ 72057594037927935 : 1 .. '!items.effects!iVqgFn89rGOnPTK4.fAK9x7lIORqSnaz1' @ 0 : 0; will stop at (end) diff --git a/packs/gps-homebrew-spells/MANIFEST-001795 b/packs/gps-homebrew-spells/MANIFEST-001803 similarity index 56% rename from packs/gps-homebrew-spells/MANIFEST-001795 rename to packs/gps-homebrew-spells/MANIFEST-001803 index f2847e4a..fe0f71c0 100644 Binary files a/packs/gps-homebrew-spells/MANIFEST-001795 and b/packs/gps-homebrew-spells/MANIFEST-001803 differ diff --git a/packs/gps-items/002122.log b/packs/gps-items/002130.log similarity index 100% rename from packs/gps-items/002122.log rename to packs/gps-items/002130.log diff --git a/packs/gps-items/CURRENT b/packs/gps-items/CURRENT index 918bd753..9f34405b 100644 --- a/packs/gps-items/CURRENT +++ b/packs/gps-items/CURRENT @@ -1 +1 @@ -MANIFEST-002120 +MANIFEST-002128 diff --git a/packs/gps-items/LOG b/packs/gps-items/LOG index 3d39bc23..b8fc29a5 100644 --- a/packs/gps-items/LOG +++ b/packs/gps-items/LOG @@ -1,8 +1,8 @@ -2024/05/29-20:37:30.105 6aa0 Recovering log #2118 -2024/05/29-20:37:30.112 6aa0 Delete type=0 #2118 -2024/05/29-20:37:30.113 6aa0 Delete type=3 #2116 -2024/05/29-23:45:18.289 5698 Level-0 table #2123: started -2024/05/29-23:45:18.289 5698 Level-0 table #2123: 0 bytes OK -2024/05/29-23:45:18.296 5698 Delete type=0 #2121 -2024/05/29-23:45:18.322 5698 Manual compaction at level-0 from '!items!0qTQDQ2Cipf15JGW' @ 72057594037927935 : 1 .. '!items.effects!wds22ulA8PSTvYWP.ZrTNMwai89gqFKJo' @ 0 : 0; will stop at (end) -2024/05/29-23:45:18.322 5698 Manual compaction at level-1 from '!items!0qTQDQ2Cipf15JGW' @ 72057594037927935 : 1 .. '!items.effects!wds22ulA8PSTvYWP.ZrTNMwai89gqFKJo' @ 0 : 0; will stop at (end) +2024/05/30-00:06:21.361 6b00 Recovering log #2126 +2024/05/30-00:06:21.371 6b00 Delete type=0 #2126 +2024/05/30-00:06:21.371 6b00 Delete type=3 #2124 +2024/05/30-11:29:13.288 5698 Level-0 table #2131: started +2024/05/30-11:29:13.289 5698 Level-0 table #2131: 0 bytes OK +2024/05/30-11:29:13.294 5698 Delete type=0 #2129 +2024/05/30-11:29:13.329 5698 Manual compaction at level-0 from '!items!0qTQDQ2Cipf15JGW' @ 72057594037927935 : 1 .. '!items.effects!wds22ulA8PSTvYWP.ZrTNMwai89gqFKJo' @ 0 : 0; will stop at (end) +2024/05/30-11:29:13.329 5698 Manual compaction at level-1 from '!items!0qTQDQ2Cipf15JGW' @ 72057594037927935 : 1 .. '!items.effects!wds22ulA8PSTvYWP.ZrTNMwai89gqFKJo' @ 0 : 0; will stop at (end) diff --git a/packs/gps-items/LOG.old b/packs/gps-items/LOG.old index d9ecc466..4b6ab76c 100644 --- a/packs/gps-items/LOG.old +++ b/packs/gps-items/LOG.old @@ -1,8 +1,8 @@ -2024/05/29-10:23:20.466 6aa0 Recovering log #2114 -2024/05/29-10:23:20.471 6aa0 Delete type=0 #2114 -2024/05/29-10:23:20.471 6aa0 Delete type=3 #2112 -2024/05/29-20:37:15.356 5698 Level-0 table #2119: started -2024/05/29-20:37:15.356 5698 Level-0 table #2119: 0 bytes OK -2024/05/29-20:37:15.358 5698 Delete type=0 #2117 -2024/05/29-20:37:15.363 5698 Manual compaction at level-0 from '!items!0qTQDQ2Cipf15JGW' @ 72057594037927935 : 1 .. '!items.effects!wds22ulA8PSTvYWP.ZrTNMwai89gqFKJo' @ 0 : 0; will stop at (end) -2024/05/29-20:37:15.363 5698 Manual compaction at level-1 from '!items!0qTQDQ2Cipf15JGW' @ 72057594037927935 : 1 .. '!items.effects!wds22ulA8PSTvYWP.ZrTNMwai89gqFKJo' @ 0 : 0; will stop at (end) +2024/05/30-00:00:46.301 6b00 Recovering log #2122 +2024/05/30-00:00:46.306 6b00 Delete type=0 #2122 +2024/05/30-00:00:46.306 6b00 Delete type=3 #2120 +2024/05/30-00:05:35.942 5698 Level-0 table #2127: started +2024/05/30-00:05:35.942 5698 Level-0 table #2127: 0 bytes OK +2024/05/30-00:05:35.947 5698 Delete type=0 #2125 +2024/05/30-00:05:35.966 5698 Manual compaction at level-0 from '!items!0qTQDQ2Cipf15JGW' @ 72057594037927935 : 1 .. '!items.effects!wds22ulA8PSTvYWP.ZrTNMwai89gqFKJo' @ 0 : 0; will stop at (end) +2024/05/30-00:05:35.967 5698 Manual compaction at level-1 from '!items!0qTQDQ2Cipf15JGW' @ 72057594037927935 : 1 .. '!items.effects!wds22ulA8PSTvYWP.ZrTNMwai89gqFKJo' @ 0 : 0; will stop at (end) diff --git a/packs/gps-items/MANIFEST-002120 b/packs/gps-items/MANIFEST-002128 similarity index 63% rename from packs/gps-items/MANIFEST-002120 rename to packs/gps-items/MANIFEST-002128 index d5c589e8..f59404a5 100644 Binary files a/packs/gps-items/MANIFEST-002120 and b/packs/gps-items/MANIFEST-002128 differ diff --git a/packs/gps-monster-features/002120.log b/packs/gps-monster-features/002128.log similarity index 100% rename from packs/gps-monster-features/002120.log rename to packs/gps-monster-features/002128.log diff --git a/packs/gps-monster-features/CURRENT b/packs/gps-monster-features/CURRENT index 7cb1b04c..e2d3744f 100644 --- a/packs/gps-monster-features/CURRENT +++ b/packs/gps-monster-features/CURRENT @@ -1 +1 @@ -MANIFEST-002118 +MANIFEST-002126 diff --git a/packs/gps-monster-features/LOG b/packs/gps-monster-features/LOG index 927869fd..01021b27 100644 --- a/packs/gps-monster-features/LOG +++ b/packs/gps-monster-features/LOG @@ -1,8 +1,8 @@ -2024/05/29-20:37:30.119 6b00 Recovering log #2116 -2024/05/29-20:37:30.129 6b00 Delete type=0 #2116 -2024/05/29-20:37:30.129 6b00 Delete type=3 #2114 -2024/05/29-23:45:18.297 5698 Level-0 table #2121: started -2024/05/29-23:45:18.297 5698 Level-0 table #2121: 0 bytes OK -2024/05/29-23:45:18.299 5698 Delete type=0 #2119 -2024/05/29-23:45:18.322 5698 Manual compaction at level-0 from '!folders!44lJ4L7xySVYZzED' @ 72057594037927935 : 1 .. '!items.effects!yp0IIuvsEkJd6KKW.WlySPDKKWMIOowHi' @ 0 : 0; will stop at (end) -2024/05/29-23:45:18.322 5698 Manual compaction at level-1 from '!folders!44lJ4L7xySVYZzED' @ 72057594037927935 : 1 .. '!items.effects!yp0IIuvsEkJd6KKW.WlySPDKKWMIOowHi' @ 0 : 0; will stop at (end) +2024/05/30-00:06:21.373 6834 Recovering log #2124 +2024/05/30-00:06:21.383 6834 Delete type=0 #2124 +2024/05/30-00:06:21.383 6834 Delete type=3 #2122 +2024/05/30-11:29:13.324 5698 Level-0 table #2129: started +2024/05/30-11:29:13.324 5698 Level-0 table #2129: 0 bytes OK +2024/05/30-11:29:13.329 5698 Delete type=0 #2127 +2024/05/30-11:29:13.329 5698 Manual compaction at level-0 from '!folders!44lJ4L7xySVYZzED' @ 72057594037927935 : 1 .. '!items.effects!yp0IIuvsEkJd6KKW.WlySPDKKWMIOowHi' @ 0 : 0; will stop at (end) +2024/05/30-11:29:13.346 5698 Manual compaction at level-1 from '!folders!44lJ4L7xySVYZzED' @ 72057594037927935 : 1 .. '!items.effects!yp0IIuvsEkJd6KKW.WlySPDKKWMIOowHi' @ 0 : 0; will stop at (end) diff --git a/packs/gps-monster-features/LOG.old b/packs/gps-monster-features/LOG.old index 51d4ab81..4f40ffca 100644 --- a/packs/gps-monster-features/LOG.old +++ b/packs/gps-monster-features/LOG.old @@ -1,8 +1,8 @@ -2024/05/29-10:23:20.476 683c Recovering log #2112 -2024/05/29-10:23:20.481 683c Delete type=0 #2112 -2024/05/29-10:23:20.481 683c Delete type=3 #2110 -2024/05/29-20:37:15.379 5698 Level-0 table #2117: started -2024/05/29-20:37:15.379 5698 Level-0 table #2117: 0 bytes OK -2024/05/29-20:37:15.382 5698 Delete type=0 #2115 -2024/05/29-20:37:15.387 5698 Manual compaction at level-0 from '!folders!44lJ4L7xySVYZzED' @ 72057594037927935 : 1 .. '!items.effects!yp0IIuvsEkJd6KKW.WlySPDKKWMIOowHi' @ 0 : 0; will stop at (end) -2024/05/29-20:37:15.388 5698 Manual compaction at level-1 from '!folders!44lJ4L7xySVYZzED' @ 72057594037927935 : 1 .. '!items.effects!yp0IIuvsEkJd6KKW.WlySPDKKWMIOowHi' @ 0 : 0; will stop at (end) +2024/05/30-00:00:46.309 683c Recovering log #2120 +2024/05/30-00:00:46.314 683c Delete type=0 #2120 +2024/05/30-00:00:46.314 683c Delete type=3 #2118 +2024/05/30-00:05:35.947 5698 Level-0 table #2125: started +2024/05/30-00:05:35.948 5698 Level-0 table #2125: 0 bytes OK +2024/05/30-00:05:35.953 5698 Delete type=0 #2123 +2024/05/30-00:05:35.966 5698 Manual compaction at level-0 from '!folders!44lJ4L7xySVYZzED' @ 72057594037927935 : 1 .. '!items.effects!yp0IIuvsEkJd6KKW.WlySPDKKWMIOowHi' @ 0 : 0; will stop at (end) +2024/05/30-00:05:35.967 5698 Manual compaction at level-1 from '!folders!44lJ4L7xySVYZzED' @ 72057594037927935 : 1 .. '!items.effects!yp0IIuvsEkJd6KKW.WlySPDKKWMIOowHi' @ 0 : 0; will stop at (end) diff --git a/packs/gps-monster-features/MANIFEST-002118 b/packs/gps-monster-features/MANIFEST-002126 similarity index 67% rename from packs/gps-monster-features/MANIFEST-002118 rename to packs/gps-monster-features/MANIFEST-002126 index d86efc0c..10dca3e8 100644 Binary files a/packs/gps-monster-features/MANIFEST-002118 and b/packs/gps-monster-features/MANIFEST-002126 differ diff --git a/packs/gps-spells/002168.log b/packs/gps-spells/002176.log similarity index 100% rename from packs/gps-spells/002168.log rename to packs/gps-spells/002176.log diff --git a/packs/gps-spells/CURRENT b/packs/gps-spells/CURRENT index b1363aac..24977640 100644 --- a/packs/gps-spells/CURRENT +++ b/packs/gps-spells/CURRENT @@ -1 +1 @@ -MANIFEST-002166 +MANIFEST-002174 diff --git a/packs/gps-spells/LOG b/packs/gps-spells/LOG index 9e712d31..7e17ac52 100644 --- a/packs/gps-spells/LOG +++ b/packs/gps-spells/LOG @@ -1,8 +1,8 @@ -2024/05/29-20:37:30.068 6aa0 Recovering log #2164 -2024/05/29-20:37:30.078 6aa0 Delete type=0 #2164 -2024/05/29-20:37:30.078 6aa0 Delete type=3 #2162 -2024/05/29-23:45:18.299 5698 Level-0 table #2169: started -2024/05/29-23:45:18.299 5698 Level-0 table #2169: 0 bytes OK -2024/05/29-23:45:18.303 5698 Delete type=0 #2167 -2024/05/29-23:45:18.322 5698 Manual compaction at level-0 from '!items!0gEfNrgZuAxvnL5H' @ 72057594037927935 : 1 .. '!items.effects!vxrggTopkxhq3MAn.T70VAw9NbZZUV7tZ' @ 0 : 0; will stop at (end) -2024/05/29-23:45:18.323 5698 Manual compaction at level-1 from '!items!0gEfNrgZuAxvnL5H' @ 72057594037927935 : 1 .. '!items.effects!vxrggTopkxhq3MAn.T70VAw9NbZZUV7tZ' @ 0 : 0; will stop at (end) +2024/05/30-00:06:21.339 6b00 Recovering log #2172 +2024/05/30-00:06:21.346 6b00 Delete type=0 #2172 +2024/05/30-00:06:21.346 6b00 Delete type=3 #2170 +2024/05/30-11:29:13.281 5698 Level-0 table #2177: started +2024/05/30-11:29:13.281 5698 Level-0 table #2177: 0 bytes OK +2024/05/30-11:29:13.285 5698 Delete type=0 #2175 +2024/05/30-11:29:13.285 5698 Manual compaction at level-0 from '!items!0gEfNrgZuAxvnL5H' @ 72057594037927935 : 1 .. '!items.effects!vxrggTopkxhq3MAn.T70VAw9NbZZUV7tZ' @ 0 : 0; will stop at (end) +2024/05/30-11:29:13.285 5698 Manual compaction at level-1 from '!items!0gEfNrgZuAxvnL5H' @ 72057594037927935 : 1 .. '!items.effects!vxrggTopkxhq3MAn.T70VAw9NbZZUV7tZ' @ 0 : 0; will stop at (end) diff --git a/packs/gps-spells/LOG.old b/packs/gps-spells/LOG.old index 9c003e88..e04dcbb0 100644 --- a/packs/gps-spells/LOG.old +++ b/packs/gps-spells/LOG.old @@ -1,8 +1,8 @@ -2024/05/29-10:23:20.445 6aa0 Recovering log #2158 -2024/05/29-10:23:20.450 6aa0 Delete type=0 #2158 -2024/05/29-10:23:20.450 6aa0 Delete type=3 #2155 -2024/05/29-20:37:15.361 5698 Level-0 table #2165: started -2024/05/29-20:37:15.361 5698 Level-0 table #2165: 0 bytes OK -2024/05/29-20:37:15.363 5698 Delete type=0 #2163 -2024/05/29-20:37:15.363 5698 Manual compaction at level-0 from '!items!0gEfNrgZuAxvnL5H' @ 72057594037927935 : 1 .. '!items.effects!vxrggTopkxhq3MAn.T70VAw9NbZZUV7tZ' @ 0 : 0; will stop at (end) -2024/05/29-20:37:15.363 5698 Manual compaction at level-1 from '!items!0gEfNrgZuAxvnL5H' @ 72057594037927935 : 1 .. '!items.effects!vxrggTopkxhq3MAn.T70VAw9NbZZUV7tZ' @ 0 : 0; will stop at (end) +2024/05/30-00:00:46.285 6b00 Recovering log #2168 +2024/05/30-00:00:46.290 6b00 Delete type=0 #2168 +2024/05/30-00:00:46.290 6b00 Delete type=3 #2166 +2024/05/30-00:05:35.915 5698 Level-0 table #2173: started +2024/05/30-00:05:35.915 5698 Level-0 table #2173: 0 bytes OK +2024/05/30-00:05:35.921 5698 Delete type=0 #2171 +2024/05/30-00:05:35.929 5698 Manual compaction at level-0 from '!items!0gEfNrgZuAxvnL5H' @ 72057594037927935 : 1 .. '!items.effects!vxrggTopkxhq3MAn.T70VAw9NbZZUV7tZ' @ 0 : 0; will stop at (end) +2024/05/30-00:05:35.929 5698 Manual compaction at level-1 from '!items!0gEfNrgZuAxvnL5H' @ 72057594037927935 : 1 .. '!items.effects!vxrggTopkxhq3MAn.T70VAw9NbZZUV7tZ' @ 0 : 0; will stop at (end) diff --git a/packs/gps-spells/MANIFEST-002166 b/packs/gps-spells/MANIFEST-002174 similarity index 81% rename from packs/gps-spells/MANIFEST-002166 rename to packs/gps-spells/MANIFEST-002174 index d1c88db3..072a71a6 100644 Binary files a/packs/gps-spells/MANIFEST-002166 and b/packs/gps-spells/MANIFEST-002174 differ diff --git a/scripts/macros/opportunityAttack.js b/scripts/macros/opportunityAttack.js index a9142d99..bd3c3089 100644 --- a/scripts/macros/opportunityAttack.js +++ b/scripts/macros/opportunityAttack.js @@ -1,73 +1,164 @@ export async function enableOpportunityAttack(combat, combatEvent) { - const module = await import('../module.js'); - const socket = module.socket; - const itemName = 'Opportunity Attack'; - let compendium = game.packs.get("gambits-premades.gps-generic-features"); - let compendiumIndex = await compendium.getIndex(); - let itemEntry = compendiumIndex.getName(itemName); - if (!itemEntry) return; //Item not found in compendium - - let newItem = await compendium.getDocument(itemEntry._id); - if (!newItem) return; //Failed to retrieve item from compendium - async function processCombatant(combatant) { + const { actor } = combatant; - let browserUser = MidiQOL.playerForActor(actor); - if (!browserUser.active) { - browserUser = game.users?.activeGM; - } - if (actor.type === 'npc' || actor.type === 'character') { - const existingOA = actor.items.filter(item => item.name === itemName); + const { token } = combatant; - if(existingOA.length > 0 && existingOA[0].system.source?.custom === newItem.system.source?.custom && existingOA.length === 1) { - if(browserUser.id !== game.users?.activeGM.id) { - await socket.executeAsUser("chooseUseItemUser", browserUser.id, { itemUuid: existingOA[0].uuid }); - } - else { - await socket.executeAsGM("chooseUseItemUser", { itemUuid: existingOA[0].uuid }); - } - return; - } - const itemIdsToDelete = existingOA.map(item => item.id); - let templateFlag = await actor.getFlag("midi-qol", "opportunityAttackTemplate"); - let checkBraceFlag = await actor.getFlag("midi-qol", "checkBraceDecision"); + //Keep some cleanup in place for a bit while I get people switched to the non-item version + const existingOA = actor.items.find(item => item.name === 'Opportunity Attack'); + if(existingOA) await existingOA.delete(); - if (itemIdsToDelete.length > 0) { - await actor.deleteEmbeddedDocuments("Item", itemIdsToDelete); - } + if (actor.type === 'npc' || actor.type === 'character') { - let effectNames = ["Opportunity Attack", "Opportunity Attack Reaction", "Maneuvers: Brace Opportunity Attack"]; - let effectIdsToDelete = actor.effects - .filter(effect => effectNames.includes(effect.name)) - .map(effect => effect.id); - - if (effectIdsToDelete.length > 0) { - await actor.deleteEmbeddedDocuments("ActiveEffect", effectIdsToDelete); + let gameVersion = parseInt(game.system.version.split('.')[0], 10); + + let hasWarCaster = actor.items.find(i => i.name.toLowerCase() === "war caster"); + let overrideItems = ["Booming Blade"]; + let validWeapons = actor.items.filter(item => + ((item.system?.actionType === "mwak" && item.system?.equipped === true) || (item.system?.type?.value === "monster" && item?.type === "feat" && (item.system?.actionType === "mwak" || item.system?.actionType === "msak")) || (item?.type === "weapon" && item.system?.actionType === "msak"))); + + let validSpells = actor.items.filter(item => + (hasWarCaster && (item.type === "spell" && item.system?.activation?.type === "action" && (item.system?.actionType === "msak" || item.system?.actionType === "rsak" || item.system?.actionType === "save") && (item.system?.preparation?.prepared === true || item.system?.preparation?.mode !== 'prepared' || !item.system?.preparation) && (item.system?.target?.type === "creature" || item.system?.target?.type === "enemy")) || overrideItems.includes(item.name))); + + let oaDisabled; + if (!validWeapons.length && !validSpells.length) { + ui.notifications.warn(`No Valid Melee options found, cancelling Opportunity Attack options for ${actor.name}`); + oaDisabled = true; } - - if(templateFlag) await actor.unsetFlag("midi-qol", "opportunityAttackTemplate"); - if(checkBraceFlag) await actor.unsetFlag("midi-qol", "checkBraceDecision"); - - let newOA = await actor.createEmbeddedDocuments("Item", [newItem.toObject()]); - - if(browserUser.id !== game.users?.activeGM.id) { - await socket.executeAsUser("chooseUseItemUser", browserUser.id, { itemUuid: newOA[0].uuid }); + + // Check 5e system version, item.system.properties is a Set in v3 but an array in v2 + let onlyThrownWeapons; + if(gameVersion >= 3) { + onlyThrownWeapons = validWeapons.length > 0 && validWeapons.every(item => item.system.properties.has('thr')); } else { - await socket.executeAsGM("chooseUseItemUser", { itemUuid: newOA[0].uuid }); + onlyThrownWeapons = validWeapons.length > 0 && validWeapons.every(item => 'thr' in item.system.properties && item.system.properties.thr); + } + + const units = canvas.scene.grid.units; + let conversionFactor; + if (units === "feet" || units === "f" || units === "ft") { + conversionFactor = 1; + } else if (units === "meters" || units === "m" || units === "mt") { + conversionFactor = 0.3; } + + let maxRange; + + if (onlyThrownWeapons || (validSpells && !validWeapons)) { + // Set maxRange to 5 if only thrown weapons are available or the user only has War Caster with no valid melee weapons + maxRange = 5; + } else { + maxRange = validWeapons.reduce((max, item) => { + let rangeValue = item.system.range?.value; + let noThr = gameVersion >= 3 ? !item.system.properties?.has('thr') : !item.system.properties?.thr; + if (rangeValue && !isNaN(rangeValue) && noThr) { + return Math.max(max, rangeValue); + } + return max; + }, 0); + } + + if (token.width === 1 && maxRange === 10) maxRange += 1.7; + else if (token.width === 2 && maxRange === 5) maxRange += 0.7; + else if (token.width === 3 && maxRange === 5) maxRange += 1.7; + else if (token.width === 3 && maxRange === 10) maxRange += 0.7; + else if (token.width === 4 && maxRange === 10) maxRange += 1.6; + + //Hacky workaround to get correct distance + const tokenSizeOffset = Math.max(token.width, token.height) * 0.5 * canvas.scene.dimensions.distance; + maxRange = (maxRange * conversionFactor) + tokenSizeOffset; + + let mwakRange = actor.flags["midi-qol"]?.range?.mwak; + if (mwakRange) maxRange += (mwakRange * conversionFactor); + + if(oaDisabled) maxRange = 1; + + const tokenCenterX = token.x + token.object.w / 2; + const tokenCenterY = token.y + token.object.h / 2; + let templateData = { + 't': "circle", + 'user': game.user.id, + 'x': tokenCenterX, + 'y': tokenCenterY, + 'texture': "modules/gambits-premades/assets/images/transparentImage.webp", + 'distance': maxRange, + 'direction': 0, + 'fillColor': game.user.color, + 'flags': { + 'dnd5e': { + 'origin': actor.uuid + }, + 'midi-qol': { + 'originUuid': actor.uuid, + 'actorUuid': actor.uuid, + 'opportunityAttackSet': true, + 'opportunityAttackTemplateValidWeapons': validWeapons, + 'opportunityAttackTemplateValidSpells': validSpells, + 'opportunityAttackTemplateMwakRange': mwakRange, + 'opportunityAttackTemplateTokenSize': Math.max(token.width, token.height), + 'opportunityAttackTemplateConFac': conversionFactor + }, + 'walledtemplates': { + 'hideBorder': 'alwaysHide', + 'hideHighlighting': 'alwaysHide', + 'showOnHover': 'alwaysHide' + }, + "templatemacro": { + "never": { + "asGM": false, + "command": "let { dialogTitle,effectOriginToken,effectOriginActor,token,braceItem } = this;\nasync function wait(ms) { return new Promise(resolve => { setTimeout(resolve, ms); }); }\nlet gameVersion = parseInt(game.system.version.split('.')[0], 10);\nlet hasSentinel = effectOriginActor.items.some(i => i.name.toLowerCase() === \"sentinel\");\n\n// Check if origin token can see token moving\nif(!MidiQOL.canSee(effectOriginToken, token)) return;\n\n// Check if same disposition token\nif(token.document.disposition === effectOriginToken.document.disposition) return;\n\n// Check if origin tokens reaction is already used or a spell effect is preventing reactions\nconst effectNamesOrigin = [\"Reaction\", \"Confusion\", \"Arms of Hadar\", \"Shocking Grasp\", \"Slow\", \"Staggering Smite\"];\nlet hasEffectOrigin = (gameVersion >= 3 ? effectOriginActor.appliedEffects : effectOriginActor.effects)\n .some(effect => effectNamesOrigin.includes(effect.name));\nif(hasEffectOrigin) return;\n\n// Check if origin token is incapacitated\nlet isIncapacitated = await MidiQOL.checkIncapacitated(effectOriginToken);\nif(isIncapacitated) return;\n\n//Check if token is disengaged and origin token does not have Sentinel\nlet isDisengaged = token.actor.effects.some(e => e.name.toLowerCase() === \"disengage\");\nif(isDisengaged && !hasSentinel) return;\n\n//Check if token activated mobile feat attack feature\nlet isMobileFeat = await token.actor.getFlag(\"midi-qol\", \"oaMobileFeatAttack\");\nif (isMobileFeat && isMobileFeat.includes(effectOriginToken.id)) return;\n\n//Check if token activated fancy footwork attack feature\nlet isFancyFootwork = await token.actor.getFlag(\"midi-qol\", \"oaFancyFootworkAttack\");\nif (isFancyFootwork && isFancyFootwork.includes(effectOriginToken.id)) return;\n\n//Check if origin token is Charmed by initiating token\nlet isCharmed = (gameVersion >= 3 ? effectOriginActor.appliedEffects : effectOriginActor.effects)\n .find(e => e.name.toLowerCase() === \"charmed\");\nif(isCharmed) {\n let charmerItem = await fromUuid(isCharmed.origin);\n let charmer;\n if(charmerItem) charmer = charmerItem.parent.id;\n if(charmer === token.actor.id) return;\n}\n\n// Check if the token has used an effect to prevent opportunity attacks against them, or the generic immunity effect has been applied\nconst effectNamesToken = [\"Kinetic Jaunt\", \"Zephyr Strike\", \"Opportunity Attack Immunity\", \"Ashardalon's Stride\"];\nlet hasEffectToken = (gameVersion >= 3 ? token.actor.appliedEffects : token.actor.effects)\n .some(effect => effectNamesToken.includes(effect.name));\nif(hasEffectToken) return;\n\nlet hasFlyby = token.actor.items.find(i => i.name.toLowerCase().includes(\"flyby\"));\nif(hasFlyby) return;\n\nlet originDisadvantage = token.actor.items.some(i => i.name.toLowerCase().includes(\"escape the hoard\"));\n\n// Check valid weapons\nlet hasWarCaster = effectOriginActor.items.find(i => i.name.toLowerCase() === \"war caster\");\nlet hasWarCasterConfigDialog = effectOriginActor.items.some(i => i.name.toLowerCase() === \"war caster\");\nlet overrideItems = [\"Booming Blade\"];\n\nlet validWeapons = effectOriginActor.items.filter(item => {\n return (((item.system?.actionType === \"mwak\" && item.system?.equipped === true) || (item.system?.type?.value === \"monster\" && item?.type === \"feat\" && (item.system?.actionType === \"mwak\" || item.system?.actionType === \"msak\")) || (item?.type === \"weapon\" && item.system?.actionType === \"msak\")) || \n (hasWarCaster && ((item.type === \"spell\" && item.system?.activation?.type === \"action\" && \n (item.system?.actionType === \"msak\" || item.system?.actionType === \"rsak\" || \n item.system?.actionType === \"save\") && (item.system?.preparation?.prepared === true || item.system?.preparation?.mode !== 'prepared' || !item.system?.preparation) &&\n (item.system?.target?.type === \"creature\" || item.system?.target?.type === \"enemy\")) || overrideItems.includes(item.name))));\n});\nif (!validWeapons.length) return;\n\n// Find 'Unarmed Strike' and remove it to re-add at the end\nconst unarmedIndex = validWeapons.findIndex(item => item.name.toLowerCase() === \"unarmed strike\");\nlet unarmedStrike;\nif (unarmedIndex > -1) {\n unarmedStrike = validWeapons.splice(unarmedIndex, 1)[0];\n}\n\n// Sort the weapons alphabetically\nvalidWeapons.sort((a, b) => a.name.localeCompare(b.name));\n\nlet favoriteWeaponUuid = null;\n// Check for favorite weapon and put it on top\nconst favoriteWeapon = validWeapons.find(item => item.flags?.['midi-qol']?.oaFavoriteAttack);\nif (favoriteWeapon) {\n favoriteWeaponUuid = favoriteWeapon.uuid;\n validWeapons.unshift(favoriteWeapon);\n}\n\nif (unarmedStrike) {\n validWeapons.push(unarmedStrike);\n}\n\nlet initialTimeLeft = Number(game.settings.get('gambits-premades', 'Opportunity Attack Timeout'));\n\nlet optionData = validWeapons.map(item => ``).join(\"\");\nlet dialogContent = `\n
\n
\n

Would you like to use your reaction to attack?

\n
\n \n \n
\n
\n \n \n
\n
\n
\n

Time Remaining

\n

${initialTimeLeft} seconds

\n
\n
\n\n`;\n\nlet dialogContentBrace = `\n\t
\n\t\t
\n Use your Brace Maneuver for an Opportunity Attack?\n\t\t
\n\t\t
\n\t\t\t

Time remaining

\n\t\t\t

${initialTimeLeft} seconds

\n\t\t
\n\t
`;\n\n// Let Active Auras recover - was needed when we were doing movement, may be needed again...\n//await wait(100);\n\nlet braceDecision = undefined;\n\nif(braceItem) {\n// Create temporary effect for dialog\nconst tempEffectDataBrace = [{\n\t\"icon\": \"icons/skills/melee/weapons-crossed-swords-yellow.webp\",\n\t\"name\": \"Maneuvers: Brace Opportunity Attack\",\n \"changes\": [],\n \"origin\": effectOriginActor.uuid,\n \"disabled\": false,\n \"duration\": {\n \"rounds\": 1\n },\n \"flags\": {\n \"dae\": {\n \"macroRepeat\": \"none\"\n },\n \"effectmacro\": {\n \"onCreate\": {\n \"script\": `\n let dialogInteraction = undefined;\n let timer;\n\n let dialog = new Dialog({\n title: \"Brace Maneuver\",\n content: \\`${dialogContentBrace}\\`,\n buttons: {\n yes: {\n label: \"Yes\",\n callback: async (html) => {\n dialogInteraction = true;\n let braceItem = await fromUuid(\\`${braceItem.uuid}\\`)\n await braceItem.use();\n await actor.setFlag(\"midi-qol\", \"checkBraceDecision\", true);\n }\n },\n no: {\n label: \"No\",\n callback: async () => {\n dialogInteraction = true;\n await actor.setFlag(\"midi-qol\", \"checkBraceDecision\", false);\n }\n },\n }, default: \"no\",\n render: (html) => {\n let timeLeft = ${initialTimeLeft};\n const countdownElement = html.find(\"#countdown\");\n timer = setInterval(() => {\n timeLeft--;\n countdownElement.text(timeLeft);\n if (timeLeft <= 0) {\n dialog.data.buttons.no.callback();\n dialog.close();\n }\n }, 1000);\n },\n close: async () => {\n clearInterval(timer);\n if (dialogInteraction === undefined) await actor.setFlag(\"midi-qol\", \"checkBraceDecision\", false);\n }\n });\n dialog.render(true);\n `\n },\n \"onDelete\": {\n \"script\": `await actor.unsetFlag(\"midi-qol\", \"checkBraceDecision\");`\n }\n }\n }\n }];\n\nawait MidiQOL.socket().executeAsGM(\"createEffects\", { actorUuid: effectOriginActor.uuid, effects: tempEffectDataBrace });\n\nwhile (braceDecision === undefined) {\n braceDecision = await effectOriginActor.getFlag(\"midi-qol\", \"checkBraceDecision\");\n if(braceDecision === undefined) {\n await new Promise(resolve => setTimeout(resolve, 1000));\n }\n}\n}\n\nconst tempEffectRemoveBrace = effectOriginActor.effects.getName(\"Maneuvers: Brace Opportunity Attack\");\nif(tempEffectRemoveBrace) await MidiQOL.socket().executeAsGM(\"removeEffects\", { actorUuid: effectOriginActor.uuid, effects: [tempEffectRemoveBrace.id] });\nif(braceDecision === false) return;\n\n// Create temporary effect for dialog\nconst tempEffectData = [{\n\t\"icon\": \"icons/weapons/swords/sword-guard-flanged-purple.webp\",\n\t\"name\": \"Opportunity Attack Reaction\",\n \"changes\": [],\n \"origin\": effectOriginActor.uuid,\n \"disabled\": false,\n \"duration\": {\n \"rounds\": 1\n },\n \"flags\": {\n \"dae\": {\n \"macroRepeat\": \"none\"\n },\n \"effectmacro\": {\n \"onCreate\": {\n \"script\": `\n let timer;\n\n let dialog = new Dialog({\n title: \"${dialogTitle}\",\n content: \\`${dialogContent}\\`,\n buttons: {\n yes: {\n label: \"Yes\",\n callback: async (html) => {\n // Logic for yes response\n\n let selectedItemUuid = html.find(\"#item-select\").val();\n if (!selectedItemUuid) {\n console.log(\"No weapon selected\");\n return;\n }\n\n let chosenWeapon = await fromUuid(selectedItemUuid);\n let rsakCheck = chosenWeapon.system.actionType === \"rsak\";\n let favoriteWeaponCheck = \\`${favoriteWeaponUuid}\\`;\n let favoriteWeapon;\n if(favoriteWeaponCheck !== \"null\") favoriteWeapon = await fromUuid(favoriteWeaponCheck);\n let favoriteSet = html.find(\"#favorite-checkbox\").is(':checked');\n if(favoriteSet && favoriteWeaponCheck !== \"null\") {\n await chosenWeapon.setFlag(\"midi-qol\", \"oaFavoriteAttack\", true);\n if (favoriteWeapon && favoriteWeapon?.uuid !== chosenWeapon.uuid) {\n await favoriteWeapon.unsetFlag(\"midi-qol\", \"oaFavoriteAttack\");\n }\n }\n else if(favoriteSet) {\n await chosenWeapon.setFlag(\"midi-qol\", \"oaFavoriteAttack\", true);\n }\n \n chosenWeapon = chosenWeapon.clone({\n system: {\n \"range\": {\n \"value\": null,\n \"long\": null,\n \"units\": \"\"\n }\n }\n }, { keepId: true });\n chosenWeapon.prepareData();\n chosenWeapon.prepareFinalAttributes();\n\n const options = {\n showFullCard: false,\n createWorkflow: true,\n versatile: false,\n configureDialog: ${hasWarCasterConfigDialog},\n targetUuids: [\\`${token.document.uuid}\\`],\n workflowOptions: {\n autoRollDamage: 'onHit',\n autoFastDamage: true,\n }\n };\n if (rsakCheck || ${originDisadvantage}) {\n options.workflowOptions.disadvantage = true;\n }\n const attackRoll = await MidiQOL.completeItemUse(chosenWeapon, {}, options);\n\t\t\t\t\t\t\t\t\t\tconst uuid = actor.uuid;\n\t\t\t\t\t\t\t\t\t\tconst hasEffectApplied = await game.dfreds.effectInterface.hasEffectApplied('Reaction', uuid);\n\t\t\t\t\t\t\t\t\t\tif (!hasEffectApplied) {\n\t\t\t\t\t\t\t\t\t\t await game.dfreds.effectInterface.addEffect({ effectName: 'Reaction', uuid });\n\t\t\t\t\t\t\t\t\t\t}\n await actor.unsetFlag(\"midi-qol\", \"dragonTurtleShieldOA\");\n }\n },\n no: {\n label: \"No\",\n callback: async () => {\n await actor.unsetFlag(\"midi-qol\", \"dragonTurtleShieldOA\");\n }\n },\n }, default: \"no\",\n render: (html) => {\n let timeLeft = ${initialTimeLeft};\n const countdownElement = html.find(\"#countdown\");\n timer = setInterval(() => {\n timeLeft--;\n countdownElement.text(timeLeft);\n if (timeLeft <= 0) {\n dialog.data.buttons.no.callback();\n dialog.close();\n }\n }, 1000);\n },\n close: () => {\n clearInterval(timer);\n }\n });\n dialog.render(true);\n `\n }\n }\n }\n }];\n\nawait MidiQOL.socket().executeAsGM(\"createEffects\", { actorUuid: effectOriginActor.uuid, effects: tempEffectData });\nawait wait(500);\nlet tempEffectRemoveOpp;\nif(gameVersion >= 3) {\n tempEffectRemoveOpp = effectOriginActor.appliedEffects.find(i => i.name.toLowerCase() === \"opportunity attack reaction\");\n}\nelse {\n tempEffectRemoveOpp = effectOriginActor.effects.getName(\"Opportunity Attack Reaction\");\n}\nawait MidiQOL.socket().executeAsGM(\"removeEffects\", { actorUuid: effectOriginActor.uuid, effects: [tempEffectRemoveOpp.id] });" + }, + "whenThrough": { + "asGM": false, + "command": "let oaDisabled = await template.getFlag(\"midi-qol\", \"opportunityAttackDisabled\");\nif(oaDisabled) return;\nif (this.hook.animate === false || (token.actor.type !== 'npc' && token.actor.type !== 'character')) return;\nlet gameVersion = parseInt(game.system.version.split('.')[0], 10);\n\nlet currentCombatant = canvas.tokens.get(game.combat.current.tokenId);\nif (currentCombatant.id !== token.id && currentCombatant.document.disposition === token.document.disposition) return; // Avoid initiating opportunity attack when it's not a token's turn if they are doing something like riding another allied token. This should allow for dialog to fire if forced movement via an enemy spell moves the token outside range outside of their turn but not when being moved as part of an allied unit\nconst effectNamesToken = [\"Dissonant Whispers\"];\nlet hasEffectToken = (gameVersion >= 3 ? token.actor.appliedEffects : token.actor.effects)\n .some(effect => effectNamesToken.includes(effect.name));\nif (currentCombatant.id !== token.id && !hasEffectToken) return;\n\nconst effectOriginActor = await fromUuid(template.flags[\"midi-qol\"].actorUuid);\nconst effectOriginToken = await MidiQOL.tokenForActor(effectOriginActor.uuid);\n\n//Simple elevation check in lieu of a more robust option for actually triggering OA on elevation change\nif((token.document.elevation > (effectOriginToken.document.elevation + template.distance)) || (token.document.elevation < (effectOriginToken.document.elevation - template.distance))) return;\n\nawait template.callMacro(\"never\", { dialogTitle: `${effectOriginActor.name} | Opportunity Attack`, effectOriginToken, effectOriginActor, token });" + }, + "whenLeft": { + "asGM": false, + "command": "let oaDisabled = await template.getFlag(\"midi-qol\", \"opportunityAttackDisabled\");\nif(oaDisabled) return;\nif (this.hook.animate === false || (token.actor.type !== 'npc' && token.actor.type !== 'character')) return;\nlet gameVersion = parseInt(game.system.version.split('.')[0], 10);\n\nlet currentCombatant = canvas.tokens.get(game.combat.current.tokenId);\nif (currentCombatant.id !== token.id && currentCombatant.document.disposition === token.document.disposition) return; // Avoid initiating opportunity attack when it's not a token's turn if they are doing something like riding another allied token. This should allow for dialog to fire if forced movement via an enemy spell moves the token outside range outside of their turn but not when being moved as part of an allied unit\nconst effectNamesToken = [\"Dissonant Whispers\"];\nlet hasEffectToken = (gameVersion >= 3 ? token.actor.appliedEffects : token.actor.effects)\n .some(effect => effectNamesToken.includes(effect.name));\nif (currentCombatant.id !== token.id && !hasEffectToken) return;\n\nconst effectOriginActor = await fromUuid(template.flags[\"midi-qol\"].actorUuid);\nconst effectOriginToken = await MidiQOL.tokenForActor(effectOriginActor.uuid);\n\n//Simple elevation check in lieu of a more robust option for actually triggering OA on elevation change\nif((token.document.elevation > (effectOriginToken.document.elevation + template.distance)) || (token.document.elevation < (effectOriginToken.document.elevation - template.distance))) return;\n\nlet dragonTurtleShield = effectOriginActor.items.getName(\"Dragon Turtle Dueling Shield\");\nif(dragonTurtleShield) await effectOriginActor.setFlag(\"midi-qol\", \"dragonTurtleShieldOA\", true)\n\nawait template.callMacro(\"never\", { dialogTitle: `${effectOriginActor.name} | Opportunity Attack`, effectOriginToken, effectOriginActor, token });" + }, + "whenEntered": { + "asGM": false, + "command": "let oaDisabled = await template.getFlag(\"midi-qol\", \"opportunityAttackDisabled\");\nif(oaDisabled) return;\nif (this.hook.animate === false || (token.actor.type !== 'npc' && token.actor.type !== 'character')) return;\nlet gameVersion = parseInt(game.system.version.split('.')[0], 10);\n\nlet currentCombatant = canvas.tokens.get(game.combat.current.tokenId);\nif (currentCombatant.id !== token.id && currentCombatant.document.disposition === token.document.disposition) return; //Avoid initiating opportunity attack when it's not a tokens turn if they are doing something like riding another allied token. This should allow for dialog to fire if forced movement via an enemy spell moves the token outside range outside of their turn but not when being moved as part of an allied unit\n\nconst effectOriginActor = await fromUuid(template.flags[\"midi-qol\"].actorUuid);\nconst effectOriginToken = await MidiQOL.tokenForActor(effectOriginActor.uuid);\n\n//Simple elevation check in lieu of a more robust option for actually triggering OA on elevation change\nif((token.document.elevation > (effectOriginToken.document.elevation + template.distance)) || (token.document.elevation < (effectOriginToken.document.elevation - template.distance))) return;\n\nlet hasPolearmReaction = effectOriginActor.items.find(i => i.name.toLowerCase() === \"polearm master\");\nif (hasPolearmReaction) {\nlet weaponNames = [\"glaive\",\"halberd\",\"pike\",\"quarterstaff\",\"spear\"];\nlet hasPolearmWeapon;\nif(gameVersion >= 3) {\n hasPolearmWeapon = effectOriginActor.items.some(item => item.system?.type?.baseItem && weaponNames.includes(item.system?.type?.baseItem.toLowerCase()) && item.system.equipped === true);\n}\nelse {\n hasPolearmWeapon = effectOriginActor.items.some(item => item.system?.baseItem && weaponNames.includes(item.system?.baseItem.toLowerCase()) && item.system.equipped === true);\n}\nif(!hasPolearmWeapon) return;\n\nawait template.callMacro(\"never\", { dialogTitle: `${effectOriginActor.name} | Polearm Opportunity Attack`, effectOriginToken, effectOriginActor, token });\n}\n\nif(effectOriginActor.classes?.fighter && effectOriginActor.classes?.fighter?.subclass?.name === \"Battle Master\") {\nlet hasBraceReactionCpr = false;\nif(game.modules.get(\"chris-premades\")?.active) {\n hasBraceReactionCpr = chrisPremades.helpers.getItem(effectOriginActor, 'Maneuvers: Brace');\n}\nlet hasBraceReaction = effectOriginActor.items.getName(\"Maneuvers: Brace\");\nlet braceItem;\n\nif(hasBraceReactionCpr) {\n braceItem = hasBraceReactionCpr;\n}\nelse if(hasBraceReaction) {\n braceItem = hasBraceReaction;\n}\nelse return;\n\nconst superiorityNames = [\"superiority dice\", \"superiority die\"];\n\nlet resourceExistsWithValue = [effectOriginActor.system.resources.primary, effectOriginActor.system.resources.secondary, effectOriginActor.system.resources.tertiary].some(resource =>\n superiorityNames.includes(resource?.label.toLowerCase()) && resource.value !== 0);\nlet itemExistsWithValue;\n\nif (!resourceExistsWithValue) {\n itemExistsWithValue = !!effectOriginActor.items.find(i => superiorityNames.includes(i.name.toLowerCase()) && i.system.uses.value !== 0);\n}\n\nif (!resourceExistsWithValue && !itemExistsWithValue) return;\n\nawait template.callMacro(\"never\", { dialogTitle: `${effectOriginActor.name} | Maneuvers: Brace Opportunity Attack`, effectOriginToken, effectOriginActor, token, braceItem });\n}\n\nlet hasDeadlyReachReaction = effectOriginActor.items.find(i => i.name.toLowerCase() === \"deadly reach\");\nif (hasDeadlyReachReaction) {\n await template.callMacro(\"never\", { dialogTitle: `${effectOriginActor.name} | Deadly Reach Opportunity Attack`, effectOriginToken, effectOriginActor, token });\n}" + }, + "whenDeleted": { + "asGM": false, + "command": "const effectOriginActor = await fromUuid(template.flags[\"midi-qol\"].actorUuid);\nlet effectOriginToken = await MidiQOL.tokenForActor(effectOriginActor.uuid);\nawait effectOriginActor.unsetFlag('midi-qol', 'opportunityAttackTemplate');" + }, + "whenTurnEnd": { + "asGM": true, + "command": "let gameVersion = parseInt(game.system.version.split('.')[0], 10);\nlet oaEnabled = MidiQOL.safeGetGameSetting('gambits-premades', 'Enable Opportunity Attack');\nif(!oaEnabled) return;\nlet legacy = MidiQOL.safeGetGameSetting('gambits-premades', 'Enable Opportunity Attack Legacy System');\n\nconst effectOriginActor = await fromUuid(template.flags[\"midi-qol\"].actorUuid);\nconst effectOriginToken = await MidiQOL.tokenForActor(effectOriginActor.uuid);\n\nlet recalculate = false;\nlet tokenSize = Math.max(effectOriginToken.document.width, effectOriginToken.document.height);\nlet validWeapons = effectOriginActor.items.filter(item => (item.system.actionType === \"mwak\" && item.system.equipped) || (item.system?.type?.value === \"monster\" && item?.type === \"feat\" && (item.system?.actionType === \"mwak\" || item.system?.actionType === \"msak\")) || (item?.type === \"weapon\" && item.system?.actionType === \"msak\"));\n\nrecalculate = await checkAndSetFlag(\"opportunityAttackTemplateValidWeapons\", validWeapons) || recalculate;\nrecalculate = await checkAndSetFlag(\"opportunityAttackTemplateTokenSize\", tokenSize) || recalculate;\nrecalculate = await handleMWAKRange() || recalculate;\n\nif (!recalculate) return;\n\nconst validSpells = template.flags[\"midi-qol\"].opportunityAttackTemplateValidSpells;\nlet maxRange = calculateMaxRange(validWeapons, validSpells, gameVersion, tokenSize);\n\nawait effectOriginActor.setFlag(\"midi-qol\", \"opportunityAttackTemplateValidOptions\", validWeapons.length > 0 || validSpells.length > 0);\n\n// Update the template with the new range\nawait template.update({\"distance\": maxRange});\nawait template.setFlag(\"midi-qol\", \"opportunityAttackDisabled\", false);\nawait tokenAttacher.attachElementsToToken([template], effectOriginToken, false);\n \nasync function checkAndSetFlag(property, newValue) {\n const oldValue = JSON.stringify(template.flags[\"midi-qol\"][property]);\n if (oldValue !== JSON.stringify(newValue)) {\n await template.setFlag(\"midi-qol\", property, newValue);\n return true;\n }\n return false;\n}\n\nasync function handleMWAKRange() {\n if (!effectOriginActor.flags[\"midi-qol\"]?.range?.mwak) return false;\n\n let mwakExpire = effectOriginActor.appliedEffects\n .filter(effect => effect.duration.turns == 1)\n .reduce((acc, effect) => {\n const change = effect.changes.find(change => change.key == \"flags.midi-qol.range.mwak\");\n return change ? acc + Number(change.value) : acc;\n }, 0);\n\n let mwakRange = effectOriginActor.flags[\"midi-qol\"].range.mwak - mwakExpire;\n return await checkAndSetFlag(\"opportunityAttackTemplateMwakRange\", mwakRange);\n}\n\nfunction calculateMaxRange(validWeapons, validSpells, gameVersion, tokenSize) {\n const units = canvas.scene.grid.units;\n let conversionFactor;\n if (units === \"feet\" || units === \"f\" || units === \"ft\") {\n conversionFactor = 1;\n } else if (units === \"meters\" || units === \"m\" || units === \"mt\") {\n conversionFactor = 0.3;\n }\n\n const tokenSizeOffset = tokenSize * 0.5 * canvas.scene.dimensions.distance;\n\n if (!validWeapons.length && !validSpells.length) return;\n\n let onlyThrownWeapons = validWeapons.length > 0 && validWeapons.every(item => {\n return gameVersion >= 3 ? item.system.properties.has('thr') : item.system.properties.thr;\n });\n\n let maxRange;\n\n if (onlyThrownWeapons || (validSpells.length && !validWeapons.length)) {\n maxRange = 5;\n } else {\n maxRange = validWeapons.reduce((max, item) => {\n let rangeValue = item.system.range?.value;\n let noThr = gameVersion >= 3 ? !item.system.properties?.has('thr') : !item.system.properties?.thr;\n if (rangeValue && !isNaN(rangeValue) && noThr) {\n return Math.max(max, rangeValue);\n }\n return max;\n }, 0);\n }\n\n if (effectOriginToken.document.width === 1 && maxRange === 10) maxRange += 1.7;\n if (effectOriginToken.document.width === 2 && maxRange === 5) maxRange += 0.7;\n if (effectOriginToken.document.width === 3 && maxRange === 5) maxRange += 1.7;\n if (effectOriginToken.document.width === 3 && maxRange === 10) maxRange += 0.7;\n if (effectOriginToken.document.width === 4 && maxRange === 10) maxRange += 1.6;\n\n maxRange = (maxRange * conversionFactor) + tokenSizeOffset;\n\n if (effectOriginActor.flags[\"midi-qol\"]?.range?.mwak) {\n maxRange += (template.flags[\"midi-qol\"].opportunityAttackTemplateMwakRange * conversionFactor);\n }\n return maxRange;\n}" + } + } + }, + 'angle': 0 + }; + + await canvas.scene.createEmbeddedDocuments('MeasuredTemplate', [templateData]) + .then(createdTemplates => { + const firstTemplate = createdTemplates[0]; + + try { + tokenAttacher.attachElementsToToken([firstTemplate], token.object, true); + //Handle rippers tooltip overlay + if(firstTemplate.object && firstTemplate.object.tooltip) firstTemplate.object.tooltip.visible = false; + actor.setFlag("midi-qol", "opportunityAttackTemplate", firstTemplate.uuid); + if(oaDisabled) firstTemplate.setFlag("midi-qol", "opportunityAttackDisabled", true); + } catch (error) { + console.error('Error during token attachment:', error); + } + }); } } if(combatEvent === "startCombat") { - console.log("startcombat") for (let combatant of combat.combatants.values()) { await processCombatant(combatant); } + await canvas.draw(); } if(combatEvent === "enterCombat") { - console.log("entercombat") let combatant = combat; await processCombatant(combatant); } @@ -82,7 +173,7 @@ export async function disableOpportunityAttack(combat, combatEvent) { let checkBraceFlag = await actor.getFlag("midi-qol", "checkBraceDecision"); let templateData = templateFlag ? await fromUuid(templateFlag) : null; - let effectNames = ["Opportunity Attack", "Opportunity Attack Reaction", "Maneuvers: Brace Opportunity Attack"]; + let effectNames = ["Opportunity Attack Reaction", "Maneuvers: Brace Opportunity Attack"]; let effectIdsToDelete = actor.effects .filter(effect => effectNames.includes(effect.name)) .map(effect => effect.id); diff --git a/scripts/module.js b/scripts/module.js index c325953c..3a4a5fb5 100644 --- a/scripts/module.js +++ b/scripts/module.js @@ -154,7 +154,6 @@ Hooks.on("preUpdateCombat", (combat, update, options) => { Hooks.on("updateCombat", async (combat, update, options) => { if(!game.user.isGM) return; - await new Promise(resolve => setTimeout(resolve, 1000)); const combatStarted = combat.started && !foundry.utils.getProperty(options, `gambits-premades.started`); const hasProcessedStart = await combat.getFlag('gambits-premades', `startProcessed-${combat.id}`); if(combatStarted && !hasProcessedStart && game.settings.get('gambits-premades', 'Enable Opportunity Attack') === true) {