diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 688d8c0..6f04e6e 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -18,8 +18,11 @@ jobs: - name: Set Release Notes for Github id: set-release-notes-github run: | - echo "- Bugfixes:" >> release_notes.txt - echo " - Counterspell: Couple fixes for last update" >> release_notes.txt + echo "- Additions:" >> release_notes.txt + echo " - Burst of Ingenuity: Adds the 2024 Sphinx of Wonder familiars reaction" >> release_notes.txt + echo " - Temporal Shunt: Adds the Wildemount spell Temporal Shunt. Animation is configurable if used with CPRs medkit." >> release_notes.txt + echo "- Updates:" >> release_notes.txt + echo " - Cutting Words: Add homebrew option to only allow attack dialog if max bardic die is able to successfully influence the roll." >> release_notes.txt echo "release-notes-github<> $GITHUB_ENV cat release_notes.txt >> $GITHUB_ENV echo "EOF" >> $GITHUB_ENV diff --git a/packs/gps-3rd-party-features/001441.log b/packs/gps-3rd-party-features/001465.log similarity index 100% rename from packs/gps-3rd-party-features/001441.log rename to packs/gps-3rd-party-features/001465.log diff --git a/packs/gps-3rd-party-features/CURRENT b/packs/gps-3rd-party-features/CURRENT index 498f6d9..2ebaba5 100644 --- a/packs/gps-3rd-party-features/CURRENT +++ b/packs/gps-3rd-party-features/CURRENT @@ -1 +1 @@ -MANIFEST-001439 +MANIFEST-001463 diff --git a/packs/gps-3rd-party-features/LOG b/packs/gps-3rd-party-features/LOG index 0962a9f..7567dbe 100644 --- a/packs/gps-3rd-party-features/LOG +++ b/packs/gps-3rd-party-features/LOG @@ -1,8 +1,8 @@ -2024/10/14-21:36:40.265 2190 Recovering log #1437 -2024/10/14-21:36:40.271 2190 Delete type=0 #1437 -2024/10/14-21:36:40.272 2190 Delete type=3 #1435 -2024/10/15-01:37:25.760 2e38 Level-0 table #1442: started -2024/10/15-01:37:25.760 2e38 Level-0 table #1442: 0 bytes OK -2024/10/15-01:37:25.763 2e38 Delete type=0 #1440 -2024/10/15-01:37:25.774 2e38 Manual compaction at level-0 from '!folders!4Ecsdk7k1FvMs9OF' @ 72057594037927935 : 1 .. '!items.effects!G2IDv711EWrOF7ef.kE7T0D7E6CnMvjvr' @ 0 : 0; will stop at (end) -2024/10/15-01:37:25.774 2e38 Manual compaction at level-1 from '!folders!4Ecsdk7k1FvMs9OF' @ 72057594037927935 : 1 .. '!items.effects!G2IDv711EWrOF7ef.kE7T0D7E6CnMvjvr' @ 0 : 0; will stop at (end) +2024/10/17-19:10:20.023 27c0 Recovering log #1461 +2024/10/17-19:10:20.029 27c0 Delete type=0 #1461 +2024/10/17-19:10:20.029 27c0 Delete type=3 #1459 +2024/10/17-21:34:16.788 2e38 Level-0 table #1466: started +2024/10/17-21:34:16.788 2e38 Level-0 table #1466: 0 bytes OK +2024/10/17-21:34:16.790 2e38 Delete type=0 #1464 +2024/10/17-21:34:16.795 2e38 Manual compaction at level-0 from '!folders!4Ecsdk7k1FvMs9OF' @ 72057594037927935 : 1 .. '!items.effects!G2IDv711EWrOF7ef.kE7T0D7E6CnMvjvr' @ 0 : 0; will stop at (end) +2024/10/17-21:34:16.796 2e38 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 7e14ae7..8fdff1a 100644 --- a/packs/gps-3rd-party-features/LOG.old +++ b/packs/gps-3rd-party-features/LOG.old @@ -1,8 +1,8 @@ -2024/10/12-23:53:48.882 25e8 Recovering log #1433 -2024/10/12-23:53:48.893 25e8 Delete type=0 #1433 -2024/10/12-23:53:48.894 25e8 Delete type=3 #1431 -2024/10/14-21:21:49.037 2e38 Level-0 table #1438: started -2024/10/14-21:21:49.037 2e38 Level-0 table #1438: 0 bytes OK -2024/10/14-21:21:49.041 2e38 Delete type=0 #1436 -2024/10/14-21:21:49.046 2e38 Manual compaction at level-0 from '!folders!4Ecsdk7k1FvMs9OF' @ 72057594037927935 : 1 .. '!items.effects!G2IDv711EWrOF7ef.kE7T0D7E6CnMvjvr' @ 0 : 0; will stop at (end) -2024/10/14-21:21:49.047 2e38 Manual compaction at level-1 from '!folders!4Ecsdk7k1FvMs9OF' @ 72057594037927935 : 1 .. '!items.effects!G2IDv711EWrOF7ef.kE7T0D7E6CnMvjvr' @ 0 : 0; will stop at (end) +2024/10/17-13:58:54.965 25e8 Recovering log #1457 +2024/10/17-13:58:54.973 25e8 Delete type=0 #1457 +2024/10/17-13:58:54.974 25e8 Delete type=3 #1455 +2024/10/17-19:07:46.607 2e38 Level-0 table #1462: started +2024/10/17-19:07:46.607 2e38 Level-0 table #1462: 0 bytes OK +2024/10/17-19:07:46.613 2e38 Delete type=0 #1460 +2024/10/17-19:07:46.622 2e38 Manual compaction at level-0 from '!folders!4Ecsdk7k1FvMs9OF' @ 72057594037927935 : 1 .. '!items.effects!G2IDv711EWrOF7ef.kE7T0D7E6CnMvjvr' @ 0 : 0; will stop at (end) +2024/10/17-19:07:46.622 2e38 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-001439 b/packs/gps-3rd-party-features/MANIFEST-001463 similarity index 68% rename from packs/gps-3rd-party-features/MANIFEST-001439 rename to packs/gps-3rd-party-features/MANIFEST-001463 index 37c55ad..4f9e342 100644 Binary files a/packs/gps-3rd-party-features/MANIFEST-001439 and b/packs/gps-3rd-party-features/MANIFEST-001463 differ diff --git a/packs/gps-3rd-party-items/001444.log b/packs/gps-3rd-party-items/001468.log similarity index 100% rename from packs/gps-3rd-party-items/001444.log rename to packs/gps-3rd-party-items/001468.log diff --git a/packs/gps-3rd-party-items/CURRENT b/packs/gps-3rd-party-items/CURRENT index f8ee61c..378ea14 100644 --- a/packs/gps-3rd-party-items/CURRENT +++ b/packs/gps-3rd-party-items/CURRENT @@ -1 +1 @@ -MANIFEST-001442 +MANIFEST-001466 diff --git a/packs/gps-3rd-party-items/LOG b/packs/gps-3rd-party-items/LOG index f05ff9c..9e51b5e 100644 --- a/packs/gps-3rd-party-items/LOG +++ b/packs/gps-3rd-party-items/LOG @@ -1,8 +1,8 @@ -2024/10/14-21:36:40.291 1dfc Recovering log #1440 -2024/10/14-21:36:40.298 1dfc Delete type=0 #1440 -2024/10/14-21:36:40.298 1dfc Delete type=3 #1438 -2024/10/15-01:37:25.764 2e38 Level-0 table #1445: started -2024/10/15-01:37:25.764 2e38 Level-0 table #1445: 0 bytes OK -2024/10/15-01:37:25.766 2e38 Delete type=0 #1443 -2024/10/15-01:37:25.774 2e38 Manual compaction at level-0 from '!items!A4JIbc14vM5IKbuT' @ 72057594037927935 : 1 .. '!items.effects!qHY9RXV48OmvCrw1.UNiU6zoPTpbrxoIA' @ 0 : 0; will stop at (end) -2024/10/15-01:37:25.774 2e38 Manual compaction at level-1 from '!items!A4JIbc14vM5IKbuT' @ 72057594037927935 : 1 .. '!items.effects!qHY9RXV48OmvCrw1.UNiU6zoPTpbrxoIA' @ 0 : 0; will stop at (end) +2024/10/17-19:10:20.035 2190 Recovering log #1464 +2024/10/17-19:10:20.042 2190 Delete type=0 #1464 +2024/10/17-19:10:20.042 2190 Delete type=3 #1462 +2024/10/17-21:34:16.783 2e38 Level-0 table #1469: started +2024/10/17-21:34:16.783 2e38 Level-0 table #1469: 0 bytes OK +2024/10/17-21:34:16.788 2e38 Delete type=0 #1467 +2024/10/17-21:34:16.795 2e38 Manual compaction at level-0 from '!items!A4JIbc14vM5IKbuT' @ 72057594037927935 : 1 .. '!items.effects!qHY9RXV48OmvCrw1.UNiU6zoPTpbrxoIA' @ 0 : 0; will stop at (end) +2024/10/17-21:34:16.795 2e38 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 b4f2439..f7dff19 100644 --- a/packs/gps-3rd-party-items/LOG.old +++ b/packs/gps-3rd-party-items/LOG.old @@ -1,8 +1,8 @@ -2024/10/12-23:53:48.917 2190 Recovering log #1436 -2024/10/12-23:53:48.931 2190 Delete type=0 #1436 -2024/10/12-23:53:48.931 2190 Delete type=3 #1434 -2024/10/14-21:21:49.042 2e38 Level-0 table #1441: started -2024/10/14-21:21:49.042 2e38 Level-0 table #1441: 0 bytes OK -2024/10/14-21:21:49.044 2e38 Delete type=0 #1439 -2024/10/14-21:21:49.046 2e38 Manual compaction at level-0 from '!items!A4JIbc14vM5IKbuT' @ 72057594037927935 : 1 .. '!items.effects!qHY9RXV48OmvCrw1.UNiU6zoPTpbrxoIA' @ 0 : 0; will stop at (end) -2024/10/14-21:21:49.047 2e38 Manual compaction at level-1 from '!items!A4JIbc14vM5IKbuT' @ 72057594037927935 : 1 .. '!items.effects!qHY9RXV48OmvCrw1.UNiU6zoPTpbrxoIA' @ 0 : 0; will stop at (end) +2024/10/17-13:58:54.982 1dfc Recovering log #1460 +2024/10/17-13:58:54.988 1dfc Delete type=0 #1460 +2024/10/17-13:58:54.988 1dfc Delete type=3 #1458 +2024/10/17-19:07:46.616 2e38 Level-0 table #1465: started +2024/10/17-19:07:46.616 2e38 Level-0 table #1465: 0 bytes OK +2024/10/17-19:07:46.619 2e38 Delete type=0 #1463 +2024/10/17-19:07:46.622 2e38 Manual compaction at level-0 from '!items!A4JIbc14vM5IKbuT' @ 72057594037927935 : 1 .. '!items.effects!qHY9RXV48OmvCrw1.UNiU6zoPTpbrxoIA' @ 0 : 0; will stop at (end) +2024/10/17-19:07:46.622 2e38 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-001442 b/packs/gps-3rd-party-items/MANIFEST-001466 similarity index 75% rename from packs/gps-3rd-party-items/MANIFEST-001442 rename to packs/gps-3rd-party-items/MANIFEST-001466 index eaf314b..8e06e1c 100644 Binary files a/packs/gps-3rd-party-items/MANIFEST-001442 and b/packs/gps-3rd-party-items/MANIFEST-001466 differ diff --git a/packs/gps-3rd-party-spells/001461.log b/packs/gps-3rd-party-spells/001485.log similarity index 100% rename from packs/gps-3rd-party-spells/001461.log rename to packs/gps-3rd-party-spells/001485.log diff --git a/packs/gps-3rd-party-spells/CURRENT b/packs/gps-3rd-party-spells/CURRENT index 9ddda28..94e2f52 100644 --- a/packs/gps-3rd-party-spells/CURRENT +++ b/packs/gps-3rd-party-spells/CURRENT @@ -1 +1 @@ -MANIFEST-001459 +MANIFEST-001483 diff --git a/packs/gps-3rd-party-spells/LOG b/packs/gps-3rd-party-spells/LOG index 357e77e..fcf417f 100644 --- a/packs/gps-3rd-party-spells/LOG +++ b/packs/gps-3rd-party-spells/LOG @@ -1,8 +1,8 @@ -2024/10/14-21:36:40.307 27c0 Recovering log #1457 -2024/10/14-21:36:40.313 27c0 Delete type=0 #1457 -2024/10/14-21:36:40.314 27c0 Delete type=3 #1455 -2024/10/15-01:37:25.771 2e38 Level-0 table #1462: started -2024/10/15-01:37:25.771 2e38 Level-0 table #1462: 0 bytes OK -2024/10/15-01:37:25.774 2e38 Delete type=0 #1460 -2024/10/15-01:37:25.774 2e38 Manual compaction at level-0 from '!items!2YNbYocBRdEDgO4Q' @ 72057594037927935 : 1 .. '!items.effects!qBnx0VU4WBSLrGeK.zhzkM83QyjS4pBGp' @ 0 : 0; will stop at (end) -2024/10/15-01:37:25.774 2e38 Manual compaction at level-1 from '!items!2YNbYocBRdEDgO4Q' @ 72057594037927935 : 1 .. '!items.effects!qBnx0VU4WBSLrGeK.zhzkM83QyjS4pBGp' @ 0 : 0; will stop at (end) +2024/10/17-19:10:20.047 1dfc Recovering log #1481 +2024/10/17-19:10:20.053 1dfc Delete type=0 #1481 +2024/10/17-19:10:20.053 1dfc Delete type=3 #1479 +2024/10/17-21:34:16.793 2e38 Level-0 table #1486: started +2024/10/17-21:34:16.793 2e38 Level-0 table #1486: 0 bytes OK +2024/10/17-21:34:16.795 2e38 Delete type=0 #1484 +2024/10/17-21:34:16.795 2e38 Manual compaction at level-0 from '!items!2YNbYocBRdEDgO4Q' @ 72057594037927935 : 1 .. '!items.effects!qBnx0VU4WBSLrGeK.zhzkM83QyjS4pBGp' @ 0 : 0; will stop at (end) +2024/10/17-21:34:16.796 2e38 Manual compaction at level-1 from '!items!2YNbYocBRdEDgO4Q' @ 72057594037927935 : 1 .. '!items.effects!qBnx0VU4WBSLrGeK.zhzkM83QyjS4pBGp' @ 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 a9a2b9f..bfc3c2d 100644 --- a/packs/gps-3rd-party-spells/LOG.old +++ b/packs/gps-3rd-party-spells/LOG.old @@ -1,8 +1,8 @@ -2024/10/12-23:53:48.941 27c0 Recovering log #1453 -2024/10/12-23:53:48.953 27c0 Delete type=0 #1453 -2024/10/12-23:53:48.954 27c0 Delete type=3 #1451 -2024/10/14-21:21:49.054 2e38 Level-0 table #1458: started -2024/10/14-21:21:49.055 2e38 Level-0 table #1458: 0 bytes OK -2024/10/14-21:21:49.059 2e38 Delete type=0 #1456 -2024/10/14-21:21:49.069 2e38 Manual compaction at level-0 from '!items!2YNbYocBRdEDgO4Q' @ 72057594037927935 : 1 .. '!items.effects!qBnx0VU4WBSLrGeK.zhzkM83QyjS4pBGp' @ 0 : 0; will stop at (end) -2024/10/14-21:21:49.069 2e38 Manual compaction at level-1 from '!items!2YNbYocBRdEDgO4Q' @ 72057594037927935 : 1 .. '!items.effects!qBnx0VU4WBSLrGeK.zhzkM83QyjS4pBGp' @ 0 : 0; will stop at (end) +2024/10/17-13:58:55.018 27c0 Recovering log #1477 +2024/10/17-13:58:55.026 27c0 Delete type=0 #1477 +2024/10/17-13:58:55.026 27c0 Delete type=3 #1475 +2024/10/17-19:07:46.613 2e38 Level-0 table #1482: started +2024/10/17-19:07:46.613 2e38 Level-0 table #1482: 0 bytes OK +2024/10/17-19:07:46.616 2e38 Delete type=0 #1480 +2024/10/17-19:07:46.622 2e38 Manual compaction at level-0 from '!items!2YNbYocBRdEDgO4Q' @ 72057594037927935 : 1 .. '!items.effects!qBnx0VU4WBSLrGeK.zhzkM83QyjS4pBGp' @ 0 : 0; will stop at (end) +2024/10/17-19:07:46.622 2e38 Manual compaction at level-1 from '!items!2YNbYocBRdEDgO4Q' @ 72057594037927935 : 1 .. '!items.effects!qBnx0VU4WBSLrGeK.zhzkM83QyjS4pBGp' @ 0 : 0; will stop at (end) diff --git a/packs/gps-3rd-party-spells/MANIFEST-001459 b/packs/gps-3rd-party-spells/MANIFEST-001483 similarity index 75% rename from packs/gps-3rd-party-spells/MANIFEST-001459 rename to packs/gps-3rd-party-spells/MANIFEST-001483 index 6f6496e..4116529 100644 Binary files a/packs/gps-3rd-party-spells/MANIFEST-001459 and b/packs/gps-3rd-party-spells/MANIFEST-001483 differ diff --git a/packs/gps-actors/001907.log b/packs/gps-actors/001931.log similarity index 100% rename from packs/gps-actors/001907.log rename to packs/gps-actors/001931.log diff --git a/packs/gps-actors/CURRENT b/packs/gps-actors/CURRENT index 74b3e64..6041573 100644 --- a/packs/gps-actors/CURRENT +++ b/packs/gps-actors/CURRENT @@ -1 +1 @@ -MANIFEST-001905 +MANIFEST-001929 diff --git a/packs/gps-actors/LOG b/packs/gps-actors/LOG index 8f65cc5..83809d8 100644 --- a/packs/gps-actors/LOG +++ b/packs/gps-actors/LOG @@ -1,8 +1,8 @@ -2024/10/14-21:36:40.228 25e8 Recovering log #1903 -2024/10/14-21:36:40.236 25e8 Delete type=0 #1903 -2024/10/14-21:36:40.236 25e8 Delete type=3 #1901 -2024/10/15-01:37:25.755 2e38 Level-0 table #1908: started -2024/10/15-01:37:25.755 2e38 Level-0 table #1908: 0 bytes OK -2024/10/15-01:37:25.758 2e38 Delete type=0 #1906 -2024/10/15-01:37:25.758 2e38 Manual compaction at level-0 from '!actors!2Q055cZ4Q4eMWCQT' @ 72057594037927935 : 1 .. '!actors.items.effects!2Q055cZ4Q4eMWCQT.icorevoMIkBVXL37.jFKhp34XZd32ryYT' @ 0 : 0; will stop at (end) -2024/10/15-01:37:25.758 2e38 Manual compaction at level-1 from '!actors!2Q055cZ4Q4eMWCQT' @ 72057594037927935 : 1 .. '!actors.items.effects!2Q055cZ4Q4eMWCQT.icorevoMIkBVXL37.jFKhp34XZd32ryYT' @ 0 : 0; will stop at (end) +2024/10/17-19:10:20.007 25e8 Recovering log #1927 +2024/10/17-19:10:20.016 25e8 Delete type=0 #1927 +2024/10/17-19:10:20.016 25e8 Delete type=3 #1925 +2024/10/17-21:34:16.790 2e38 Level-0 table #1932: started +2024/10/17-21:34:16.790 2e38 Level-0 table #1932: 0 bytes OK +2024/10/17-21:34:16.793 2e38 Delete type=0 #1930 +2024/10/17-21:34:16.795 2e38 Manual compaction at level-0 from '!actors!2Q055cZ4Q4eMWCQT' @ 72057594037927935 : 1 .. '!actors.items.effects!2Q055cZ4Q4eMWCQT.icorevoMIkBVXL37.jFKhp34XZd32ryYT' @ 0 : 0; will stop at (end) +2024/10/17-21:34:16.796 2e38 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 40b4a74..77582b9 100644 --- a/packs/gps-actors/LOG.old +++ b/packs/gps-actors/LOG.old @@ -1,8 +1,8 @@ -2024/10/12-23:53:48.840 1dfc Recovering log #1899 -2024/10/12-23:53:48.855 1dfc Delete type=0 #1899 -2024/10/12-23:53:48.856 1dfc Delete type=3 #1897 -2024/10/14-21:21:49.034 2e38 Level-0 table #1904: started -2024/10/14-21:21:49.034 2e38 Level-0 table #1904: 0 bytes OK -2024/10/14-21:21:49.037 2e38 Delete type=0 #1902 -2024/10/14-21:21:49.046 2e38 Manual compaction at level-0 from '!actors!2Q055cZ4Q4eMWCQT' @ 72057594037927935 : 1 .. '!actors.items.effects!2Q055cZ4Q4eMWCQT.icorevoMIkBVXL37.jFKhp34XZd32ryYT' @ 0 : 0; will stop at (end) -2024/10/14-21:21:49.046 2e38 Manual compaction at level-1 from '!actors!2Q055cZ4Q4eMWCQT' @ 72057594037927935 : 1 .. '!actors.items.effects!2Q055cZ4Q4eMWCQT.icorevoMIkBVXL37.jFKhp34XZd32ryYT' @ 0 : 0; will stop at (end) +2024/10/17-13:58:54.933 2190 Recovering log #1923 +2024/10/17-13:58:54.938 2190 Delete type=0 #1923 +2024/10/17-13:58:54.939 2190 Delete type=3 #1921 +2024/10/17-19:07:46.601 2e38 Level-0 table #1928: started +2024/10/17-19:07:46.601 2e38 Level-0 table #1928: 0 bytes OK +2024/10/17-19:07:46.605 2e38 Delete type=0 #1926 +2024/10/17-19:07:46.605 2e38 Manual compaction at level-0 from '!actors!2Q055cZ4Q4eMWCQT' @ 72057594037927935 : 1 .. '!actors.items.effects!2Q055cZ4Q4eMWCQT.icorevoMIkBVXL37.jFKhp34XZd32ryYT' @ 0 : 0; will stop at (end) +2024/10/17-19:07:46.605 2e38 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-001905 b/packs/gps-actors/MANIFEST-001929 similarity index 70% rename from packs/gps-actors/MANIFEST-001905 rename to packs/gps-actors/MANIFEST-001929 index 978c768..7e6ddeb 100644 Binary files a/packs/gps-actors/MANIFEST-001905 and b/packs/gps-actors/MANIFEST-001929 differ diff --git a/packs/gps-class-features/003125.log b/packs/gps-class-features/003149.log similarity index 100% rename from packs/gps-class-features/003125.log rename to packs/gps-class-features/003149.log diff --git a/packs/gps-class-features/CURRENT b/packs/gps-class-features/CURRENT index 37e6e66..c9d039e 100644 --- a/packs/gps-class-features/CURRENT +++ b/packs/gps-class-features/CURRENT @@ -1 +1 @@ -MANIFEST-003123 +MANIFEST-003147 diff --git a/packs/gps-class-features/LOG b/packs/gps-class-features/LOG index 1f1650f..9d96442 100644 --- a/packs/gps-class-features/LOG +++ b/packs/gps-class-features/LOG @@ -1,8 +1,8 @@ -2024/10/14-21:36:39.931 25e8 Recovering log #3121 -2024/10/14-21:36:39.938 25e8 Delete type=0 #3121 -2024/10/14-21:36:39.939 25e8 Delete type=3 #3119 -2024/10/15-01:37:25.696 2e38 Level-0 table #3126: started -2024/10/15-01:37:25.697 2e38 Level-0 table #3126: 0 bytes OK -2024/10/15-01:37:25.705 2e38 Delete type=0 #3124 -2024/10/15-01:37:25.720 2e38 Manual compaction at level-0 from '!folders!89rvrtGjpBsZz1Tr' @ 72057594037927935 : 1 .. '!items.effects!ugNmjDFbPNnpG0CG.Z6aK5JHacSpklffP' @ 0 : 0; will stop at (end) -2024/10/15-01:37:25.720 2e38 Manual compaction at level-1 from '!folders!89rvrtGjpBsZz1Tr' @ 72057594037927935 : 1 .. '!items.effects!ugNmjDFbPNnpG0CG.Z6aK5JHacSpklffP' @ 0 : 0; will stop at (end) +2024/10/17-19:10:19.730 25e8 Recovering log #3145 +2024/10/17-19:10:19.736 25e8 Delete type=0 #3145 +2024/10/17-19:10:19.736 25e8 Delete type=3 #3143 +2024/10/17-21:34:16.731 2e38 Level-0 table #3150: started +2024/10/17-21:34:16.731 2e38 Level-0 table #3150: 0 bytes OK +2024/10/17-21:34:16.735 2e38 Delete type=0 #3148 +2024/10/17-21:34:16.735 2e38 Manual compaction at level-0 from '!folders!89rvrtGjpBsZz1Tr' @ 72057594037927935 : 1 .. '!items.effects!ugNmjDFbPNnpG0CG.Z6aK5JHacSpklffP' @ 0 : 0; will stop at (end) +2024/10/17-21:34:16.736 2e38 Manual compaction at level-1 from '!folders!89rvrtGjpBsZz1Tr' @ 72057594037927935 : 1 .. '!items.effects!ugNmjDFbPNnpG0CG.Z6aK5JHacSpklffP' @ 0 : 0; will stop at (end) diff --git a/packs/gps-class-features/LOG.old b/packs/gps-class-features/LOG.old index 7af34b6..ec7b5d8 100644 --- a/packs/gps-class-features/LOG.old +++ b/packs/gps-class-features/LOG.old @@ -1,8 +1,8 @@ -2024/10/12-23:53:48.584 1dfc Recovering log #3117 -2024/10/12-23:53:48.601 1dfc Delete type=0 #3117 -2024/10/12-23:53:48.602 1dfc Delete type=3 #3115 -2024/10/14-21:21:48.949 2e38 Level-0 table #3122: started -2024/10/14-21:21:48.949 2e38 Level-0 table #3122: 0 bytes OK -2024/10/14-21:21:48.952 2e38 Delete type=0 #3120 -2024/10/14-21:21:48.963 2e38 Manual compaction at level-0 from '!folders!89rvrtGjpBsZz1Tr' @ 72057594037927935 : 1 .. '!items.effects!ugNmjDFbPNnpG0CG.Z6aK5JHacSpklffP' @ 0 : 0; will stop at (end) -2024/10/14-21:21:48.963 2e38 Manual compaction at level-1 from '!folders!89rvrtGjpBsZz1Tr' @ 72057594037927935 : 1 .. '!items.effects!ugNmjDFbPNnpG0CG.Z6aK5JHacSpklffP' @ 0 : 0; will stop at (end) +2024/10/17-13:58:54.662 2190 Recovering log #3141 +2024/10/17-13:58:54.673 2190 Delete type=0 #3141 +2024/10/17-13:58:54.674 2190 Delete type=3 #3139 +2024/10/17-19:07:46.561 2e38 Level-0 table #3146: started +2024/10/17-19:07:46.561 2e38 Level-0 table #3146: 0 bytes OK +2024/10/17-19:07:46.564 2e38 Delete type=0 #3144 +2024/10/17-19:07:46.564 2e38 Manual compaction at level-0 from '!folders!89rvrtGjpBsZz1Tr' @ 72057594037927935 : 1 .. '!items.effects!ugNmjDFbPNnpG0CG.Z6aK5JHacSpklffP' @ 0 : 0; will stop at (end) +2024/10/17-19:07:46.565 2e38 Manual compaction at level-1 from '!folders!89rvrtGjpBsZz1Tr' @ 72057594037927935 : 1 .. '!items.effects!ugNmjDFbPNnpG0CG.Z6aK5JHacSpklffP' @ 0 : 0; will stop at (end) diff --git a/packs/gps-class-features/MANIFEST-003123 b/packs/gps-class-features/MANIFEST-003147 similarity index 73% rename from packs/gps-class-features/MANIFEST-003123 rename to packs/gps-class-features/MANIFEST-003147 index 8af8380..94593d4 100644 Binary files a/packs/gps-class-features/MANIFEST-003123 and b/packs/gps-class-features/MANIFEST-003147 differ diff --git a/packs/gps-generic-features/003174.log b/packs/gps-generic-features/003198.log similarity index 100% rename from packs/gps-generic-features/003174.log rename to packs/gps-generic-features/003198.log diff --git a/packs/gps-generic-features/CURRENT b/packs/gps-generic-features/CURRENT index a6ff303..7005500 100644 --- a/packs/gps-generic-features/CURRENT +++ b/packs/gps-generic-features/CURRENT @@ -1 +1 @@ -MANIFEST-003172 +MANIFEST-003196 diff --git a/packs/gps-generic-features/LOG b/packs/gps-generic-features/LOG index bb96454..595205e 100644 --- a/packs/gps-generic-features/LOG +++ b/packs/gps-generic-features/LOG @@ -1,8 +1,8 @@ -2024/10/14-21:36:40.047 25e8 Recovering log #3170 -2024/10/14-21:36:40.054 25e8 Delete type=0 #3170 -2024/10/14-21:36:40.055 25e8 Delete type=3 #3168 -2024/10/15-01:37:25.740 2e38 Level-0 table #3175: started -2024/10/15-01:37:25.740 2e38 Level-0 table #3175: 0 bytes OK -2024/10/15-01:37:25.743 2e38 Delete type=0 #3173 -2024/10/15-01:37:25.743 2e38 Manual compaction at level-0 from '!items!0XoQ7lGPSwjM8Gw4' @ 72057594037927935 : 1 .. '!items.effects!svKaRfNtOXMOXoW6.NcYMpQ7B3RwBuLC7' @ 0 : 0; will stop at (end) -2024/10/15-01:37:25.743 2e38 Manual compaction at level-1 from '!items!0XoQ7lGPSwjM8Gw4' @ 72057594037927935 : 1 .. '!items.effects!svKaRfNtOXMOXoW6.NcYMpQ7B3RwBuLC7' @ 0 : 0; will stop at (end) +2024/10/17-19:10:19.905 1dfc Recovering log #3194 +2024/10/17-19:10:19.913 1dfc Delete type=0 #3194 +2024/10/17-19:10:19.913 1dfc Delete type=3 #3192 +2024/10/17-21:34:16.757 2e38 Level-0 table #3199: started +2024/10/17-21:34:16.757 2e38 Level-0 table #3199: 0 bytes OK +2024/10/17-21:34:16.760 2e38 Delete type=0 #3197 +2024/10/17-21:34:16.760 2e38 Manual compaction at level-0 from '!items!0XoQ7lGPSwjM8Gw4' @ 72057594037927935 : 1 .. '!items.effects!svKaRfNtOXMOXoW6.NcYMpQ7B3RwBuLC7' @ 0 : 0; will stop at (end) +2024/10/17-21:34:16.768 2e38 Manual compaction at level-1 from '!items!0XoQ7lGPSwjM8Gw4' @ 72057594037927935 : 1 .. '!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 91a2e4f..af378b6 100644 --- a/packs/gps-generic-features/LOG.old +++ b/packs/gps-generic-features/LOG.old @@ -1,8 +1,8 @@ -2024/10/12-23:53:48.700 27c0 Recovering log #3166 -2024/10/12-23:53:48.711 27c0 Delete type=0 #3166 -2024/10/12-23:53:48.711 27c0 Delete type=3 #3164 -2024/10/14-21:21:49.005 2e38 Level-0 table #3171: started -2024/10/14-21:21:49.005 2e38 Level-0 table #3171: 0 bytes OK -2024/10/14-21:21:49.009 2e38 Delete type=0 #3169 -2024/10/14-21:21:49.024 2e38 Manual compaction at level-0 from '!items!0XoQ7lGPSwjM8Gw4' @ 72057594037927935 : 1 .. '!items.effects!svKaRfNtOXMOXoW6.NcYMpQ7B3RwBuLC7' @ 0 : 0; will stop at (end) -2024/10/14-21:21:49.024 2e38 Manual compaction at level-1 from '!items!0XoQ7lGPSwjM8Gw4' @ 72057594037927935 : 1 .. '!items.effects!svKaRfNtOXMOXoW6.NcYMpQ7B3RwBuLC7' @ 0 : 0; will stop at (end) +2024/10/17-13:58:54.763 27c0 Recovering log #3190 +2024/10/17-13:58:54.772 27c0 Delete type=0 #3190 +2024/10/17-13:58:54.772 27c0 Delete type=3 #3188 +2024/10/17-19:07:46.576 2e38 Level-0 table #3195: started +2024/10/17-19:07:46.577 2e38 Level-0 table #3195: 0 bytes OK +2024/10/17-19:07:46.581 2e38 Delete type=0 #3193 +2024/10/17-19:07:46.584 2e38 Manual compaction at level-0 from '!items!0XoQ7lGPSwjM8Gw4' @ 72057594037927935 : 1 .. '!items.effects!svKaRfNtOXMOXoW6.NcYMpQ7B3RwBuLC7' @ 0 : 0; will stop at (end) +2024/10/17-19:07:46.585 2e38 Manual compaction at level-1 from '!items!0XoQ7lGPSwjM8Gw4' @ 72057594037927935 : 1 .. '!items.effects!svKaRfNtOXMOXoW6.NcYMpQ7B3RwBuLC7' @ 0 : 0; will stop at (end) diff --git a/packs/gps-generic-features/MANIFEST-003172 b/packs/gps-generic-features/MANIFEST-003196 similarity index 81% rename from packs/gps-generic-features/MANIFEST-003172 rename to packs/gps-generic-features/MANIFEST-003196 index 43a11ea..507c229 100644 Binary files a/packs/gps-generic-features/MANIFEST-003172 and b/packs/gps-generic-features/MANIFEST-003196 differ diff --git a/packs/gps-homebrew-features/003076.log b/packs/gps-homebrew-features/003100.log similarity index 100% rename from packs/gps-homebrew-features/003076.log rename to packs/gps-homebrew-features/003100.log diff --git a/packs/gps-homebrew-features/CURRENT b/packs/gps-homebrew-features/CURRENT index f911287..4fbc030 100644 --- a/packs/gps-homebrew-features/CURRENT +++ b/packs/gps-homebrew-features/CURRENT @@ -1 +1 @@ -MANIFEST-003074 +MANIFEST-003098 diff --git a/packs/gps-homebrew-features/LOG b/packs/gps-homebrew-features/LOG index 01c5913..b3fab15 100644 --- a/packs/gps-homebrew-features/LOG +++ b/packs/gps-homebrew-features/LOG @@ -1,8 +1,8 @@ -2024/10/14-21:36:40.089 2190 Recovering log #3072 -2024/10/14-21:36:40.096 2190 Delete type=0 #3072 -2024/10/14-21:36:40.096 2190 Delete type=3 #3070 -2024/10/15-01:37:25.750 2e38 Level-0 table #3077: started -2024/10/15-01:37:25.750 2e38 Level-0 table #3077: 0 bytes OK -2024/10/15-01:37:25.753 2e38 Delete type=0 #3075 -2024/10/15-01:37:25.758 2e38 Manual compaction at level-0 from '!folders!4OzV9QdsPgTyK99q' @ 72057594037927935 : 1 .. '!items.effects!fwJjg1xtQFZupjbV.vhj7xJmCiTIagALN' @ 0 : 0; will stop at (end) -2024/10/15-01:37:25.758 2e38 Manual compaction at level-1 from '!folders!4OzV9QdsPgTyK99q' @ 72057594037927935 : 1 .. '!items.effects!fwJjg1xtQFZupjbV.vhj7xJmCiTIagALN' @ 0 : 0; will stop at (end) +2024/10/17-19:10:19.920 27c0 Recovering log #3096 +2024/10/17-19:10:19.927 27c0 Delete type=0 #3096 +2024/10/17-19:10:19.927 27c0 Delete type=3 #3094 +2024/10/17-21:34:16.768 2e38 Level-0 table #3101: started +2024/10/17-21:34:16.768 2e38 Level-0 table #3101: 0 bytes OK +2024/10/17-21:34:16.772 2e38 Delete type=0 #3099 +2024/10/17-21:34:16.779 2e38 Manual compaction at level-0 from '!folders!4OzV9QdsPgTyK99q' @ 72057594037927935 : 1 .. '!items.effects!fwJjg1xtQFZupjbV.vhj7xJmCiTIagALN' @ 0 : 0; will stop at (end) +2024/10/17-21:34:16.781 2e38 Manual compaction at level-1 from '!folders!4OzV9QdsPgTyK99q' @ 72057594037927935 : 1 .. '!items.effects!fwJjg1xtQFZupjbV.vhj7xJmCiTIagALN' @ 0 : 0; will stop at (end) diff --git a/packs/gps-homebrew-features/LOG.old b/packs/gps-homebrew-features/LOG.old index c5d14aa..25a8239 100644 --- a/packs/gps-homebrew-features/LOG.old +++ b/packs/gps-homebrew-features/LOG.old @@ -1,8 +1,8 @@ -2024/10/12-23:53:48.716 25e8 Recovering log #3068 -2024/10/12-23:53:48.728 25e8 Delete type=0 #3068 -2024/10/12-23:53:48.728 25e8 Delete type=3 #3066 -2024/10/14-21:21:49.013 2e38 Level-0 table #3073: started -2024/10/14-21:21:49.013 2e38 Level-0 table #3073: 0 bytes OK -2024/10/14-21:21:49.018 2e38 Delete type=0 #3071 -2024/10/14-21:21:49.024 2e38 Manual compaction at level-0 from '!folders!4OzV9QdsPgTyK99q' @ 72057594037927935 : 1 .. '!items.effects!fwJjg1xtQFZupjbV.vhj7xJmCiTIagALN' @ 0 : 0; will stop at (end) -2024/10/14-21:21:49.024 2e38 Manual compaction at level-1 from '!folders!4OzV9QdsPgTyK99q' @ 72057594037927935 : 1 .. '!items.effects!fwJjg1xtQFZupjbV.vhj7xJmCiTIagALN' @ 0 : 0; will stop at (end) +2024/10/17-13:58:54.806 25e8 Recovering log #3092 +2024/10/17-13:58:54.818 25e8 Delete type=0 #3092 +2024/10/17-13:58:54.818 25e8 Delete type=3 #3090 +2024/10/17-19:07:46.581 2e38 Level-0 table #3097: started +2024/10/17-19:07:46.581 2e38 Level-0 table #3097: 0 bytes OK +2024/10/17-19:07:46.584 2e38 Delete type=0 #3095 +2024/10/17-19:07:46.584 2e38 Manual compaction at level-0 from '!folders!4OzV9QdsPgTyK99q' @ 72057594037927935 : 1 .. '!items.effects!fwJjg1xtQFZupjbV.vhj7xJmCiTIagALN' @ 0 : 0; will stop at (end) +2024/10/17-19:07:46.586 2e38 Manual compaction at level-1 from '!folders!4OzV9QdsPgTyK99q' @ 72057594037927935 : 1 .. '!items.effects!fwJjg1xtQFZupjbV.vhj7xJmCiTIagALN' @ 0 : 0; will stop at (end) diff --git a/packs/gps-homebrew-features/MANIFEST-003074 b/packs/gps-homebrew-features/MANIFEST-003098 similarity index 73% rename from packs/gps-homebrew-features/MANIFEST-003074 rename to packs/gps-homebrew-features/MANIFEST-003098 index 7819995..e6c6f55 100644 Binary files a/packs/gps-homebrew-features/MANIFEST-003074 and b/packs/gps-homebrew-features/MANIFEST-003098 differ diff --git a/packs/gps-homebrew-items/003081.log b/packs/gps-homebrew-items/003105.log similarity index 100% rename from packs/gps-homebrew-items/003081.log rename to packs/gps-homebrew-items/003105.log diff --git a/packs/gps-homebrew-items/CURRENT b/packs/gps-homebrew-items/CURRENT index b2dcc8e..189c928 100644 --- a/packs/gps-homebrew-items/CURRENT +++ b/packs/gps-homebrew-items/CURRENT @@ -1 +1 @@ -MANIFEST-003079 +MANIFEST-003103 diff --git a/packs/gps-homebrew-items/LOG b/packs/gps-homebrew-items/LOG index 84ab464..7ffd488 100644 --- a/packs/gps-homebrew-items/LOG +++ b/packs/gps-homebrew-items/LOG @@ -1,8 +1,8 @@ -2024/10/14-21:36:40.122 27c0 Recovering log #3077 -2024/10/14-21:36:40.128 27c0 Delete type=0 #3077 -2024/10/14-21:36:40.128 27c0 Delete type=3 #3075 -2024/10/15-01:37:25.738 2e38 Level-0 table #3082: started -2024/10/15-01:37:25.738 2e38 Level-0 table #3082: 0 bytes OK -2024/10/15-01:37:25.740 2e38 Delete type=0 #3080 -2024/10/15-01:37:25.743 2e38 Manual compaction at level-0 from '!items!1WSJjnpLJhilXEgO' @ 72057594037927935 : 1 .. '!items.effects!zEXJxqsAmVM7Pohu.v3j3orDGcbQyk7ZI' @ 0 : 0; will stop at (end) -2024/10/15-01:37:25.743 2e38 Manual compaction at level-1 from '!items!1WSJjnpLJhilXEgO' @ 72057594037927935 : 1 .. '!items.effects!zEXJxqsAmVM7Pohu.v3j3orDGcbQyk7ZI' @ 0 : 0; will stop at (end) +2024/10/17-19:10:19.935 25e8 Recovering log #3101 +2024/10/17-19:10:19.941 25e8 Delete type=0 #3101 +2024/10/17-19:10:19.941 25e8 Delete type=3 #3099 +2024/10/17-21:34:16.775 2e38 Level-0 table #3106: started +2024/10/17-21:34:16.776 2e38 Level-0 table #3106: 0 bytes OK +2024/10/17-21:34:16.779 2e38 Delete type=0 #3104 +2024/10/17-21:34:16.781 2e38 Manual compaction at level-0 from '!items!1WSJjnpLJhilXEgO' @ 72057594037927935 : 1 .. '!items.effects!zEXJxqsAmVM7Pohu.v3j3orDGcbQyk7ZI' @ 0 : 0; will stop at (end) +2024/10/17-21:34:16.781 2e38 Manual compaction at level-1 from '!items!1WSJjnpLJhilXEgO' @ 72057594037927935 : 1 .. '!items.effects!zEXJxqsAmVM7Pohu.v3j3orDGcbQyk7ZI' @ 0 : 0; will stop at (end) diff --git a/packs/gps-homebrew-items/LOG.old b/packs/gps-homebrew-items/LOG.old index 0b2915f..f4243bf 100644 --- a/packs/gps-homebrew-items/LOG.old +++ b/packs/gps-homebrew-items/LOG.old @@ -1,8 +1,8 @@ -2024/10/12-23:53:48.748 1dfc Recovering log #3073 -2024/10/12-23:53:48.760 1dfc Delete type=0 #3073 -2024/10/12-23:53:48.760 1dfc Delete type=3 #3071 -2024/10/14-21:21:49.019 2e38 Level-0 table #3078: started -2024/10/14-21:21:49.020 2e38 Level-0 table #3078: 0 bytes OK -2024/10/14-21:21:49.023 2e38 Delete type=0 #3076 -2024/10/14-21:21:49.024 2e38 Manual compaction at level-0 from '!items!1WSJjnpLJhilXEgO' @ 72057594037927935 : 1 .. '!items.effects!zEXJxqsAmVM7Pohu.v3j3orDGcbQyk7ZI' @ 0 : 0; will stop at (end) -2024/10/14-21:21:49.024 2e38 Manual compaction at level-1 from '!items!1WSJjnpLJhilXEgO' @ 72057594037927935 : 1 .. '!items.effects!zEXJxqsAmVM7Pohu.v3j3orDGcbQyk7ZI' @ 0 : 0; will stop at (end) +2024/10/17-13:58:54.842 2190 Recovering log #3097 +2024/10/17-13:58:54.849 2190 Delete type=0 #3097 +2024/10/17-13:58:54.849 2190 Delete type=3 #3095 +2024/10/17-19:07:46.599 2e38 Level-0 table #3102: started +2024/10/17-19:07:46.599 2e38 Level-0 table #3102: 0 bytes OK +2024/10/17-19:07:46.601 2e38 Delete type=0 #3100 +2024/10/17-19:07:46.605 2e38 Manual compaction at level-0 from '!items!1WSJjnpLJhilXEgO' @ 72057594037927935 : 1 .. '!items.effects!zEXJxqsAmVM7Pohu.v3j3orDGcbQyk7ZI' @ 0 : 0; will stop at (end) +2024/10/17-19:07:46.605 2e38 Manual compaction at level-1 from '!items!1WSJjnpLJhilXEgO' @ 72057594037927935 : 1 .. '!items.effects!zEXJxqsAmVM7Pohu.v3j3orDGcbQyk7ZI' @ 0 : 0; will stop at (end) diff --git a/packs/gps-homebrew-items/MANIFEST-003079 b/packs/gps-homebrew-items/MANIFEST-003103 similarity index 75% rename from packs/gps-homebrew-items/MANIFEST-003079 rename to packs/gps-homebrew-items/MANIFEST-003103 index b7a49f6..3449f77 100644 Binary files a/packs/gps-homebrew-items/MANIFEST-003079 and b/packs/gps-homebrew-items/MANIFEST-003103 differ diff --git a/packs/gps-homebrew-spells/002741.log b/packs/gps-homebrew-spells/002765.log similarity index 100% rename from packs/gps-homebrew-spells/002741.log rename to packs/gps-homebrew-spells/002765.log diff --git a/packs/gps-homebrew-spells/CURRENT b/packs/gps-homebrew-spells/CURRENT index ccc3a08..99b1ae2 100644 --- a/packs/gps-homebrew-spells/CURRENT +++ b/packs/gps-homebrew-spells/CURRENT @@ -1 +1 @@ -MANIFEST-002739 +MANIFEST-002763 diff --git a/packs/gps-homebrew-spells/LOG b/packs/gps-homebrew-spells/LOG index 187365d..80ce2f8 100644 --- a/packs/gps-homebrew-spells/LOG +++ b/packs/gps-homebrew-spells/LOG @@ -1,8 +1,8 @@ -2024/10/14-21:36:40.144 27c0 Recovering log #2737 -2024/10/14-21:36:40.151 27c0 Delete type=0 #2737 -2024/10/14-21:36:40.151 27c0 Delete type=3 #2735 -2024/10/15-01:37:25.744 2e38 Level-0 table #2742: started -2024/10/15-01:37:25.744 2e38 Level-0 table #2742: 0 bytes OK -2024/10/15-01:37:25.750 2e38 Delete type=0 #2740 -2024/10/15-01:37:25.758 2e38 Manual compaction at level-0 from '!items!iVqgFn89rGOnPTK4' @ 72057594037927935 : 1 .. '!items.effects!iVqgFn89rGOnPTK4.Ka4crf96KPf0p7Uc' @ 0 : 0; will stop at (end) -2024/10/15-01:37:25.758 2e38 Manual compaction at level-1 from '!items!iVqgFn89rGOnPTK4' @ 72057594037927935 : 1 .. '!items.effects!iVqgFn89rGOnPTK4.Ka4crf96KPf0p7Uc' @ 0 : 0; will stop at (end) +2024/10/17-19:10:19.960 1dfc Recovering log #2761 +2024/10/17-19:10:19.965 1dfc Delete type=0 #2761 +2024/10/17-19:10:19.966 1dfc Delete type=3 #2759 +2024/10/17-21:34:16.772 2e38 Level-0 table #2766: started +2024/10/17-21:34:16.772 2e38 Level-0 table #2766: 0 bytes OK +2024/10/17-21:34:16.775 2e38 Delete type=0 #2764 +2024/10/17-21:34:16.781 2e38 Manual compaction at level-0 from '!items!iVqgFn89rGOnPTK4' @ 72057594037927935 : 1 .. '!items.effects!iVqgFn89rGOnPTK4.Ka4crf96KPf0p7Uc' @ 0 : 0; will stop at (end) +2024/10/17-21:34:16.781 2e38 Manual compaction at level-1 from '!items!iVqgFn89rGOnPTK4' @ 72057594037927935 : 1 .. '!items.effects!iVqgFn89rGOnPTK4.Ka4crf96KPf0p7Uc' @ 0 : 0; will stop at (end) diff --git a/packs/gps-homebrew-spells/LOG.old b/packs/gps-homebrew-spells/LOG.old index dd2e0ad..41368ce 100644 --- a/packs/gps-homebrew-spells/LOG.old +++ b/packs/gps-homebrew-spells/LOG.old @@ -1,8 +1,8 @@ -2024/10/12-23:53:48.771 27c0 Recovering log #2733 -2024/10/12-23:53:48.784 27c0 Delete type=0 #2733 -2024/10/12-23:53:48.784 27c0 Delete type=3 #2731 -2024/10/14-21:21:49.010 2e38 Level-0 table #2738: started -2024/10/14-21:21:49.010 2e38 Level-0 table #2738: 0 bytes OK -2024/10/14-21:21:49.012 2e38 Delete type=0 #2736 -2024/10/14-21:21:49.024 2e38 Manual compaction at level-0 from '!items!iVqgFn89rGOnPTK4' @ 72057594037927935 : 1 .. '!items.effects!iVqgFn89rGOnPTK4.Ka4crf96KPf0p7Uc' @ 0 : 0; will stop at (end) -2024/10/14-21:21:49.024 2e38 Manual compaction at level-1 from '!items!iVqgFn89rGOnPTK4' @ 72057594037927935 : 1 .. '!items.effects!iVqgFn89rGOnPTK4.Ka4crf96KPf0p7Uc' @ 0 : 0; will stop at (end) +2024/10/17-13:58:54.863 27c0 Recovering log #2757 +2024/10/17-13:58:54.870 27c0 Delete type=0 #2757 +2024/10/17-13:58:54.870 27c0 Delete type=3 #2755 +2024/10/17-19:07:46.587 2e38 Level-0 table #2762: started +2024/10/17-19:07:46.587 2e38 Level-0 table #2762: 0 bytes OK +2024/10/17-19:07:46.593 2e38 Delete type=0 #2760 +2024/10/17-19:07:46.605 2e38 Manual compaction at level-0 from '!items!iVqgFn89rGOnPTK4' @ 72057594037927935 : 1 .. '!items.effects!iVqgFn89rGOnPTK4.Ka4crf96KPf0p7Uc' @ 0 : 0; will stop at (end) +2024/10/17-19:07:46.605 2e38 Manual compaction at level-1 from '!items!iVqgFn89rGOnPTK4' @ 72057594037927935 : 1 .. '!items.effects!iVqgFn89rGOnPTK4.Ka4crf96KPf0p7Uc' @ 0 : 0; will stop at (end) diff --git a/packs/gps-homebrew-spells/MANIFEST-002739 b/packs/gps-homebrew-spells/MANIFEST-002763 similarity index 56% rename from packs/gps-homebrew-spells/MANIFEST-002739 rename to packs/gps-homebrew-spells/MANIFEST-002763 index 309ac88..ac776c2 100644 Binary files a/packs/gps-homebrew-spells/MANIFEST-002739 and b/packs/gps-homebrew-spells/MANIFEST-002763 differ diff --git a/packs/gps-items/003080.log b/packs/gps-items/003104.log similarity index 100% rename from packs/gps-items/003080.log rename to packs/gps-items/003104.log diff --git a/packs/gps-items/CURRENT b/packs/gps-items/CURRENT index 83271a7..7090b94 100644 --- a/packs/gps-items/CURRENT +++ b/packs/gps-items/CURRENT @@ -1 +1 @@ -MANIFEST-003078 +MANIFEST-003102 diff --git a/packs/gps-items/LOG b/packs/gps-items/LOG index 9c4b7aa..850d092 100644 --- a/packs/gps-items/LOG +++ b/packs/gps-items/LOG @@ -1,8 +1,8 @@ -2024/10/14-21:36:39.982 2190 Recovering log #3076 -2024/10/14-21:36:39.991 2190 Delete type=0 #3076 -2024/10/14-21:36:39.992 2190 Delete type=3 #3074 -2024/10/15-01:37:25.710 2e38 Level-0 table #3081: started -2024/10/15-01:37:25.710 2e38 Level-0 table #3081: 0 bytes OK -2024/10/15-01:37:25.713 2e38 Delete type=0 #3079 -2024/10/15-01:37:25.720 2e38 Manual compaction at level-0 from '!items!0qTQDQ2Cipf15JGW' @ 72057594037927935 : 1 .. '!items.effects!wds22ulA8PSTvYWP.ZrTNMwai89gqFKJo' @ 0 : 0; will stop at (end) -2024/10/15-01:37:25.720 2e38 Manual compaction at level-1 from '!items!0qTQDQ2Cipf15JGW' @ 72057594037927935 : 1 .. '!items.effects!wds22ulA8PSTvYWP.ZrTNMwai89gqFKJo' @ 0 : 0; will stop at (end) +2024/10/17-19:10:19.768 27c0 Recovering log #3100 +2024/10/17-19:10:19.775 27c0 Delete type=0 #3100 +2024/10/17-19:10:19.780 27c0 Delete type=3 #3098 +2024/10/17-21:34:16.755 2e38 Level-0 table #3105: started +2024/10/17-21:34:16.755 2e38 Level-0 table #3105: 0 bytes OK +2024/10/17-21:34:16.757 2e38 Delete type=0 #3103 +2024/10/17-21:34:16.760 2e38 Manual compaction at level-0 from '!items!0qTQDQ2Cipf15JGW' @ 72057594037927935 : 1 .. '!items.effects!wds22ulA8PSTvYWP.ZrTNMwai89gqFKJo' @ 0 : 0; will stop at (end) +2024/10/17-21:34:16.768 2e38 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 22a7a19..04dc49a 100644 --- a/packs/gps-items/LOG.old +++ b/packs/gps-items/LOG.old @@ -1,8 +1,8 @@ -2024/10/12-23:53:48.630 25e8 Recovering log #3072 -2024/10/12-23:53:48.643 25e8 Delete type=0 #3072 -2024/10/12-23:53:48.644 25e8 Delete type=3 #3070 -2024/10/14-21:21:48.995 2e38 Level-0 table #3077: started -2024/10/14-21:21:48.995 2e38 Level-0 table #3077: 0 bytes OK -2024/10/14-21:21:48.998 2e38 Delete type=0 #3075 -2024/10/14-21:21:49.003 2e38 Manual compaction at level-0 from '!items!0qTQDQ2Cipf15JGW' @ 72057594037927935 : 1 .. '!items.effects!wds22ulA8PSTvYWP.ZrTNMwai89gqFKJo' @ 0 : 0; will stop at (end) -2024/10/14-21:21:49.003 2e38 Manual compaction at level-1 from '!items!0qTQDQ2Cipf15JGW' @ 72057594037927935 : 1 .. '!items.effects!wds22ulA8PSTvYWP.ZrTNMwai89gqFKJo' @ 0 : 0; will stop at (end) +2024/10/17-13:58:54.699 25e8 Recovering log #3096 +2024/10/17-13:58:54.705 25e8 Delete type=0 #3096 +2024/10/17-13:58:54.705 25e8 Delete type=3 #3094 +2024/10/17-19:07:46.572 2e38 Level-0 table #3101: started +2024/10/17-19:07:46.572 2e38 Level-0 table #3101: 0 bytes OK +2024/10/17-19:07:46.576 2e38 Delete type=0 #3099 +2024/10/17-19:07:46.584 2e38 Manual compaction at level-0 from '!items!0qTQDQ2Cipf15JGW' @ 72057594037927935 : 1 .. '!items.effects!wds22ulA8PSTvYWP.ZrTNMwai89gqFKJo' @ 0 : 0; will stop at (end) +2024/10/17-19:07:46.585 2e38 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-003078 b/packs/gps-items/MANIFEST-003102 similarity index 63% rename from packs/gps-items/MANIFEST-003078 rename to packs/gps-items/MANIFEST-003102 index f1f220c..0d7e0df 100644 Binary files a/packs/gps-items/MANIFEST-003078 and b/packs/gps-items/MANIFEST-003102 differ diff --git a/packs/gps-monster-features/003076.log b/packs/gps-monster-features/003102.log similarity index 100% rename from packs/gps-monster-features/003076.log rename to packs/gps-monster-features/003102.log diff --git a/packs/gps-monster-features/003027.ldb b/packs/gps-monster-features/003104.ldb similarity index 77% rename from packs/gps-monster-features/003027.ldb rename to packs/gps-monster-features/003104.ldb index a807e5b..3bf3c4a 100644 Binary files a/packs/gps-monster-features/003027.ldb and b/packs/gps-monster-features/003104.ldb differ diff --git a/packs/gps-monster-features/CURRENT b/packs/gps-monster-features/CURRENT index f911287..6268e85 100644 --- a/packs/gps-monster-features/CURRENT +++ b/packs/gps-monster-features/CURRENT @@ -1 +1 @@ -MANIFEST-003074 +MANIFEST-003100 diff --git a/packs/gps-monster-features/LOG b/packs/gps-monster-features/LOG index ec9feea..98c66cc 100644 --- a/packs/gps-monster-features/LOG +++ b/packs/gps-monster-features/LOG @@ -1,8 +1,15 @@ -2024/10/14-21:36:40.009 27c0 Recovering log #3072 -2024/10/14-21:36:40.019 27c0 Delete type=0 #3072 -2024/10/14-21:36:40.020 27c0 Delete type=3 #3070 -2024/10/15-01:37:25.735 2e38 Level-0 table #3077: started -2024/10/15-01:37:25.735 2e38 Level-0 table #3077: 0 bytes OK -2024/10/15-01:37:25.737 2e38 Delete type=0 #3075 -2024/10/15-01:37:25.743 2e38 Manual compaction at level-0 from '!folders!44lJ4L7xySVYZzED' @ 72057594037927935 : 1 .. '!items.effects!yp0IIuvsEkJd6KKW.WlySPDKKWMIOowHi' @ 0 : 0; will stop at (end) -2024/10/15-01:37:25.743 2e38 Manual compaction at level-1 from '!folders!44lJ4L7xySVYZzED' @ 72057594037927935 : 1 .. '!items.effects!yp0IIuvsEkJd6KKW.WlySPDKKWMIOowHi' @ 0 : 0; will stop at (end) +2024/10/17-19:10:19.845 2190 Recovering log #3098 +2024/10/17-19:10:19.857 2190 Delete type=0 #3098 +2024/10/17-19:10:19.858 2190 Delete type=3 #3096 +2024/10/17-21:34:16.738 2e38 Level-0 table #3103: started +2024/10/17-21:34:16.748 2e38 Level-0 table #3103: 1711 bytes OK +2024/10/17-21:34:16.751 2e38 Delete type=0 #3101 +2024/10/17-21:34:16.760 2e38 Manual compaction at level-0 from '!folders!44lJ4L7xySVYZzED' @ 72057594037927935 : 1 .. '!items.effects!yp0IIuvsEkJd6KKW.WlySPDKKWMIOowHi' @ 0 : 0; will stop at (end) +2024/10/17-21:34:16.760 2e38 Manual compaction at level-1 from '!folders!44lJ4L7xySVYZzED' @ 72057594037927935 : 1 .. '!items.effects!yp0IIuvsEkJd6KKW.WlySPDKKWMIOowHi' @ 0 : 0; will stop at '!items!GwU77NG8YXU334wh' @ 498 : 1 +2024/10/17-21:34:16.760 2e38 Compacting 1@1 + 1@2 files +2024/10/17-21:34:16.765 2e38 Generated table #3104@1: 43 keys, 50320 bytes +2024/10/17-21:34:16.765 2e38 Compacted 1@1 + 1@2 files => 50320 bytes +2024/10/17-21:34:16.767 2e38 compacted to: files[ 0 0 1 0 0 0 0 ] +2024/10/17-21:34:16.767 2e38 Delete type=2 #3091 +2024/10/17-21:34:16.767 2e38 Delete type=2 #3103 +2024/10/17-21:34:16.772 2e38 Manual compaction at level-1 from '!items!GwU77NG8YXU334wh' @ 498 : 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 609c774..b18f5be 100644 --- a/packs/gps-monster-features/LOG.old +++ b/packs/gps-monster-features/LOG.old @@ -1,8 +1,8 @@ -2024/10/12-23:53:48.667 2190 Recovering log #3068 -2024/10/12-23:53:48.678 2190 Delete type=0 #3068 -2024/10/12-23:53:48.678 2190 Delete type=3 #3066 -2024/10/14-21:21:48.998 2e38 Level-0 table #3073: started -2024/10/14-21:21:48.999 2e38 Level-0 table #3073: 0 bytes OK -2024/10/14-21:21:49.002 2e38 Delete type=0 #3071 -2024/10/14-21:21:49.003 2e38 Manual compaction at level-0 from '!folders!44lJ4L7xySVYZzED' @ 72057594037927935 : 1 .. '!items.effects!yp0IIuvsEkJd6KKW.WlySPDKKWMIOowHi' @ 0 : 0; will stop at (end) -2024/10/14-21:21:49.004 2e38 Manual compaction at level-1 from '!folders!44lJ4L7xySVYZzED' @ 72057594037927935 : 1 .. '!items.effects!yp0IIuvsEkJd6KKW.WlySPDKKWMIOowHi' @ 0 : 0; will stop at (end) +2024/10/17-13:58:54.739 1dfc Recovering log #3094 +2024/10/17-13:58:54.750 1dfc Delete type=0 #3094 +2024/10/17-13:58:54.750 1dfc Delete type=3 #3092 +2024/10/17-19:07:46.567 2e38 Level-0 table #3099: started +2024/10/17-19:07:46.567 2e38 Level-0 table #3099: 0 bytes OK +2024/10/17-19:07:46.572 2e38 Delete type=0 #3097 +2024/10/17-19:07:46.584 2e38 Manual compaction at level-0 from '!folders!44lJ4L7xySVYZzED' @ 72057594037927935 : 1 .. '!items.effects!yp0IIuvsEkJd6KKW.WlySPDKKWMIOowHi' @ 0 : 0; will stop at (end) +2024/10/17-19:07:46.585 2e38 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-003074 b/packs/gps-monster-features/MANIFEST-003074 deleted file mode 100644 index 031b036..0000000 Binary files a/packs/gps-monster-features/MANIFEST-003074 and /dev/null differ diff --git a/packs/gps-monster-features/MANIFEST-003100 b/packs/gps-monster-features/MANIFEST-003100 new file mode 100644 index 0000000..bb6838c Binary files /dev/null and b/packs/gps-monster-features/MANIFEST-003100 differ diff --git a/packs/gps-race-features/000780.log b/packs/gps-race-features/000804.log similarity index 100% rename from packs/gps-race-features/000780.log rename to packs/gps-race-features/000804.log diff --git a/packs/gps-race-features/CURRENT b/packs/gps-race-features/CURRENT index 2d7d47f..a3daeab 100644 --- a/packs/gps-race-features/CURRENT +++ b/packs/gps-race-features/CURRENT @@ -1 +1 @@ -MANIFEST-000778 +MANIFEST-000802 diff --git a/packs/gps-race-features/LOG b/packs/gps-race-features/LOG index 5dac5cb..f6c41e5 100644 --- a/packs/gps-race-features/LOG +++ b/packs/gps-race-features/LOG @@ -1,8 +1,8 @@ -2024/10/14-21:36:40.324 2190 Recovering log #776 -2024/10/14-21:36:40.331 2190 Delete type=0 #776 -2024/10/14-21:36:40.331 2190 Delete type=3 #774 -2024/10/15-01:37:25.767 2e38 Level-0 table #781: started -2024/10/15-01:37:25.767 2e38 Level-0 table #781: 0 bytes OK -2024/10/15-01:37:25.770 2e38 Delete type=0 #779 -2024/10/15-01:37:25.774 2e38 Manual compaction at level-0 from '!folders!62e2gLQ8cttarHZ8' @ 72057594037927935 : 1 .. '!items.effects!wNuwXPqCsshIcO2V.nGhKXGlzLbZGIsKu' @ 0 : 0; will stop at (end) -2024/10/15-01:37:25.774 2e38 Manual compaction at level-1 from '!folders!62e2gLQ8cttarHZ8' @ 72057594037927935 : 1 .. '!items.effects!wNuwXPqCsshIcO2V.nGhKXGlzLbZGIsKu' @ 0 : 0; will stop at (end) +2024/10/17-19:10:20.068 1dfc Recovering log #800 +2024/10/17-19:10:20.075 1dfc Delete type=0 #800 +2024/10/17-19:10:20.075 1dfc Delete type=3 #798 +2024/10/17-21:34:16.806 2e38 Level-0 table #805: started +2024/10/17-21:34:16.806 2e38 Level-0 table #805: 0 bytes OK +2024/10/17-21:34:16.811 2e38 Delete type=0 #803 +2024/10/17-21:34:16.818 2e38 Manual compaction at level-0 from '!folders!62e2gLQ8cttarHZ8' @ 72057594037927935 : 1 .. '!items.effects!wNuwXPqCsshIcO2V.nGhKXGlzLbZGIsKu' @ 0 : 0; will stop at (end) +2024/10/17-21:34:16.819 2e38 Manual compaction at level-1 from '!folders!62e2gLQ8cttarHZ8' @ 72057594037927935 : 1 .. '!items.effects!wNuwXPqCsshIcO2V.nGhKXGlzLbZGIsKu' @ 0 : 0; will stop at (end) diff --git a/packs/gps-race-features/LOG.old b/packs/gps-race-features/LOG.old index 785ea2e..bc671ff 100644 --- a/packs/gps-race-features/LOG.old +++ b/packs/gps-race-features/LOG.old @@ -1,8 +1,8 @@ -2024/10/12-23:53:48.965 25e8 Recovering log #772 -2024/10/12-23:53:48.973 25e8 Delete type=0 #772 -2024/10/12-23:53:48.973 25e8 Delete type=3 #770 -2024/10/14-21:21:49.060 2e38 Level-0 table #777: started -2024/10/14-21:21:49.060 2e38 Level-0 table #777: 0 bytes OK -2024/10/14-21:21:49.063 2e38 Delete type=0 #775 -2024/10/14-21:21:49.069 2e38 Manual compaction at level-0 from '!folders!62e2gLQ8cttarHZ8' @ 72057594037927935 : 1 .. '!items.effects!wNuwXPqCsshIcO2V.nGhKXGlzLbZGIsKu' @ 0 : 0; will stop at (end) -2024/10/14-21:21:49.069 2e38 Manual compaction at level-1 from '!folders!62e2gLQ8cttarHZ8' @ 72057594037927935 : 1 .. '!items.effects!wNuwXPqCsshIcO2V.nGhKXGlzLbZGIsKu' @ 0 : 0; will stop at (end) +2024/10/17-13:58:55.076 25e8 Recovering log #796 +2024/10/17-13:58:55.085 25e8 Delete type=0 #796 +2024/10/17-13:58:55.085 25e8 Delete type=3 #794 +2024/10/17-19:07:46.628 2e38 Level-0 table #801: started +2024/10/17-19:07:46.628 2e38 Level-0 table #801: 0 bytes OK +2024/10/17-19:07:46.631 2e38 Delete type=0 #799 +2024/10/17-19:07:46.637 2e38 Manual compaction at level-0 from '!folders!62e2gLQ8cttarHZ8' @ 72057594037927935 : 1 .. '!items.effects!wNuwXPqCsshIcO2V.nGhKXGlzLbZGIsKu' @ 0 : 0; will stop at (end) +2024/10/17-19:07:46.637 2e38 Manual compaction at level-1 from '!folders!62e2gLQ8cttarHZ8' @ 72057594037927935 : 1 .. '!items.effects!wNuwXPqCsshIcO2V.nGhKXGlzLbZGIsKu' @ 0 : 0; will stop at (end) diff --git a/packs/gps-race-features/MANIFEST-000778 b/packs/gps-race-features/MANIFEST-000802 similarity index 64% rename from packs/gps-race-features/MANIFEST-000778 rename to packs/gps-race-features/MANIFEST-000802 index 3e8c0ba..762b253 100644 Binary files a/packs/gps-race-features/MANIFEST-000778 and b/packs/gps-race-features/MANIFEST-000802 differ diff --git a/packs/gps-spells/003175.ldb b/packs/gps-spells/003188.ldb similarity index 70% rename from packs/gps-spells/003175.ldb rename to packs/gps-spells/003188.ldb index 6b33439..bf9ca4d 100644 Binary files a/packs/gps-spells/003175.ldb and b/packs/gps-spells/003188.ldb differ diff --git a/packs/gps-spells/003173.log b/packs/gps-spells/003199.log similarity index 100% rename from packs/gps-spells/003173.log rename to packs/gps-spells/003199.log diff --git a/packs/gps-spells/CURRENT b/packs/gps-spells/CURRENT index 9a890f6..a73b9ee 100644 --- a/packs/gps-spells/CURRENT +++ b/packs/gps-spells/CURRENT @@ -1 +1 @@ -MANIFEST-003171 +MANIFEST-003197 diff --git a/packs/gps-spells/LOG b/packs/gps-spells/LOG index 4bc1d5b..1fc2e6d 100644 --- a/packs/gps-spells/LOG +++ b/packs/gps-spells/LOG @@ -1,15 +1,8 @@ -2024/10/14-21:36:39.909 27c0 Recovering log #3168 -2024/10/14-21:36:39.918 27c0 Delete type=0 #3168 -2024/10/14-21:36:39.918 27c0 Delete type=3 #3166 -2024/10/15-01:37:25.713 2e38 Level-0 table #3174: started -2024/10/15-01:37:25.716 2e38 Level-0 table #3174: 13292 bytes OK -2024/10/15-01:37:25.720 2e38 Delete type=0 #3172 -2024/10/15-01:37:25.720 2e38 Manual compaction at level-0 from '!items!0gEfNrgZuAxvnL5H' @ 72057594037927935 : 1 .. '!items.effects!zb0bHX95fRFILazJ.2TVoFB98ZtniR8Z7' @ 0 : 0; will stop at (end) -2024/10/15-01:37:25.720 2e38 Manual compaction at level-1 from '!items!0gEfNrgZuAxvnL5H' @ 72057594037927935 : 1 .. '!items.effects!zb0bHX95fRFILazJ.2TVoFB98ZtniR8Z7' @ 0 : 0; will stop at '!items!48jgMDu3yyO73wfR' @ 1854 : 1 -2024/10/15-01:37:25.720 2e38 Compacting 1@1 + 1@2 files -2024/10/15-01:37:25.733 2e38 Generated table #3175@1: 55 keys, 167656 bytes -2024/10/15-01:37:25.733 2e38 Compacted 1@1 + 1@2 files => 167656 bytes -2024/10/15-01:37:25.735 2e38 compacted to: files[ 0 0 1 0 0 0 0 ] -2024/10/15-01:37:25.735 2e38 Delete type=2 #3170 -2024/10/15-01:37:25.735 2e38 Delete type=2 #3174 -2024/10/15-01:37:25.743 2e38 Manual compaction at level-1 from '!items!48jgMDu3yyO73wfR' @ 1854 : 1 .. '!items.effects!zb0bHX95fRFILazJ.2TVoFB98ZtniR8Z7' @ 0 : 0; will stop at (end) +2024/10/17-19:10:19.688 2190 Recovering log #3195 +2024/10/17-19:10:19.693 2190 Delete type=0 #3195 +2024/10/17-19:10:19.693 2190 Delete type=3 #3193 +2024/10/17-21:34:16.723 2e38 Level-0 table #3200: started +2024/10/17-21:34:16.723 2e38 Level-0 table #3200: 0 bytes OK +2024/10/17-21:34:16.726 2e38 Delete type=0 #3198 +2024/10/17-21:34:16.735 2e38 Manual compaction at level-0 from '!items!0gEfNrgZuAxvnL5H' @ 72057594037927935 : 1 .. '!items.effects!zb0bHX95fRFILazJ.2TVoFB98ZtniR8Z7' @ 0 : 0; will stop at (end) +2024/10/17-21:34:16.735 2e38 Manual compaction at level-1 from '!items!0gEfNrgZuAxvnL5H' @ 72057594037927935 : 1 .. '!items.effects!zb0bHX95fRFILazJ.2TVoFB98ZtniR8Z7' @ 0 : 0; will stop at (end) diff --git a/packs/gps-spells/LOG.old b/packs/gps-spells/LOG.old index 6608695..30b83f0 100644 --- a/packs/gps-spells/LOG.old +++ b/packs/gps-spells/LOG.old @@ -1,15 +1,8 @@ -2024/10/12-23:53:48.564 2190 Recovering log #3164 -2024/10/12-23:53:48.575 2190 Delete type=0 #3164 -2024/10/12-23:53:48.576 2190 Delete type=3 #3162 -2024/10/14-21:21:48.955 2e38 Level-0 table #3169: started -2024/10/14-21:21:48.959 2e38 Level-0 table #3169: 14509 bytes OK -2024/10/14-21:21:48.962 2e38 Delete type=0 #3167 -2024/10/14-21:21:48.963 2e38 Manual compaction at level-0 from '!items!0gEfNrgZuAxvnL5H' @ 72057594037927935 : 1 .. '!items.effects!zb0bHX95fRFILazJ.2TVoFB98ZtniR8Z7' @ 0 : 0; will stop at (end) -2024/10/14-21:21:48.963 2e38 Manual compaction at level-1 from '!items!0gEfNrgZuAxvnL5H' @ 72057594037927935 : 1 .. '!items.effects!zb0bHX95fRFILazJ.2TVoFB98ZtniR8Z7' @ 0 : 0; will stop at '!items!U9ZIV2vqOstvPzUo' @ 1851 : 1 -2024/10/14-21:21:48.964 2e38 Compacting 1@1 + 1@2 files -2024/10/14-21:21:48.991 2e38 Generated table #3170@1: 55 keys, 165408 bytes -2024/10/14-21:21:48.991 2e38 Compacted 1@1 + 1@2 files => 165408 bytes -2024/10/14-21:21:48.993 2e38 compacted to: files[ 0 0 1 0 0 0 0 ] -2024/10/14-21:21:48.993 2e38 Delete type=2 #3159 -2024/10/14-21:21:48.993 2e38 Delete type=2 #3169 -2024/10/14-21:21:49.003 2e38 Manual compaction at level-1 from '!items!U9ZIV2vqOstvPzUo' @ 1851 : 1 .. '!items.effects!zb0bHX95fRFILazJ.2TVoFB98ZtniR8Z7' @ 0 : 0; will stop at (end) +2024/10/17-13:58:54.625 1dfc Recovering log #3191 +2024/10/17-13:58:54.631 1dfc Delete type=0 #3191 +2024/10/17-13:58:54.632 1dfc Delete type=3 #3189 +2024/10/17-19:07:46.557 2e38 Level-0 table #3196: started +2024/10/17-19:07:46.557 2e38 Level-0 table #3196: 0 bytes OK +2024/10/17-19:07:46.561 2e38 Delete type=0 #3194 +2024/10/17-19:07:46.564 2e38 Manual compaction at level-0 from '!items!0gEfNrgZuAxvnL5H' @ 72057594037927935 : 1 .. '!items.effects!zb0bHX95fRFILazJ.2TVoFB98ZtniR8Z7' @ 0 : 0; will stop at (end) +2024/10/17-19:07:46.564 2e38 Manual compaction at level-1 from '!items!0gEfNrgZuAxvnL5H' @ 72057594037927935 : 1 .. '!items.effects!zb0bHX95fRFILazJ.2TVoFB98ZtniR8Z7' @ 0 : 0; will stop at (end) diff --git a/packs/gps-spells/MANIFEST-003171 b/packs/gps-spells/MANIFEST-003171 deleted file mode 100644 index f4e50bf..0000000 Binary files a/packs/gps-spells/MANIFEST-003171 and /dev/null differ diff --git a/packs/gps-spells/MANIFEST-003197 b/packs/gps-spells/MANIFEST-003197 new file mode 100644 index 0000000..6c022aa Binary files /dev/null and b/packs/gps-spells/MANIFEST-003197 differ diff --git a/scripts/helpers.js b/scripts/helpers.js index 3e6c21e..a9a415a 100644 --- a/scripts/helpers.js +++ b/scripts/helpers.js @@ -337,7 +337,7 @@ export function findValidTokens({initiatingToken, targetedToken, itemName, itemT return validTokens; } -export async function process3rdPartyReactionDialog({ dialogTitle, dialogContent, dialogId, initialTimeLeft, validTokenPrimaryUuid, source, type, notificationId }) { +export async function process3rdPartyReactionDialog({ dialogTitle, dialogContent, dialogId, initialTimeLeft, validTokenPrimaryUuid, source, type, notificationId, numTargets }) { const module = await import('./module.js'); const socket = module.socket; let validTokenPrimary = await fromUuid(validTokenPrimaryUuid); @@ -353,21 +353,22 @@ export async function process3rdPartyReactionDialog({ dialogTitle, dialogContent const itemSelect = dialogElement?.querySelector(`#item-select_${dialogId}`); const weaponImg = dialogElement?.querySelector(`#weapon-img_${dialogId}`); const damageList = dialogElement?.querySelector(`#damage-list`); + const enemyTokens = dialogElement?.querySelectorAll('input.enemy-tokens'); let draggedItem = null; - + function handleFocusIn(event) { validTokenPrimary.object.control({ releaseOthers: true }); } - + function handleFocusOut(event) { validTokenPrimary.object.release(); } - + function handleMouseDown(event) { setTimeout(() => dialogElement.focus(), 0); validTokenPrimary.object.control({ releaseOthers: true }); } - + function handlePauseButtonClick() { dialog.isPaused = !dialog.isPaused; if (dialog.isPaused) { @@ -377,7 +378,7 @@ export async function process3rdPartyReactionDialog({ dialogTitle, dialogContent requestAnimationFrame(animate); } dialog.updateTimer(dialog.timeLeft, dialog.isPaused); - + const pauseState = { dialogId: dialogId, timeLeft: dialog.timeLeft, isPaused: dialog.isPaused }; if (source === "user" && type === "multiDialog") { socket.executeAsUser("pauseDialogById", getPrimaryGM(), pauseState); @@ -385,18 +386,18 @@ export async function process3rdPartyReactionDialog({ dialogTitle, dialogContent socket.executeAsUser("pauseDialogById", browserUser, pauseState); } } - + function handleItemSelectChange(event) { const selectedOption = event.target.options[event.target.selectedIndex]; weaponImg.src = selectedOption.getAttribute('name'); } - + function handleDragStart(event) { event.dataTransfer.setData('text/plain', event.target.innerText); event.dataTransfer.effectAllowed = 'move'; draggedItem = event.target; } - + function handleDragOver(event) { event.preventDefault(); event.dataTransfer.dropEffect = 'move'; @@ -407,31 +408,40 @@ export async function process3rdPartyReactionDialog({ dialogTitle, dialogContent damageList.insertBefore(draggedItem, next && target.nextSibling || target); } } - + function handleDragEnd() { draggedItem = null; } - + + function handleCheckboxChange(event) { + const checkedBoxes = dialogElement.querySelectorAll('input.enemy-tokens:checked'); + + if (checkedBoxes.length > numTargets) { + event.target.checked = false; + ui.notifications.warn(`You can only select up to ${numTargets} targets.`); + } + } + if (windowTitle) { windowTitle.addEventListener('focusin', handleFocusIn); windowTitle.addEventListener('focusout', handleFocusOut); windowTitle.addEventListener('mousedown', handleMouseDown); } - + if (pauseButton) { pauseButton.addEventListener('click', handlePauseButtonClick); - + if (source === "gm" && type === "multiDialog") { pauseButton.setAttribute("autofocus", "true"); pauseButton.focus(); } } - + if (itemSelect && itemSelect.options.length > 0 && weaponImg) { weaponImg.src = itemSelect.options[0].getAttribute('name'); itemSelect.addEventListener('change', handleItemSelectChange); } - + if (damageList) { const damageListItems = damageList.querySelectorAll('li'); damageListItems.forEach(item => { @@ -440,12 +450,32 @@ export async function process3rdPartyReactionDialog({ dialogTitle, dialogContent damageList.addEventListener('dragover', handleDragOver); damageList.addEventListener('dragend', handleDragEnd); } - - return { windowTitle, pauseButton, itemSelect, damageList, handleFocusIn, handleFocusOut, handleMouseDown, handlePauseButtonClick, handleItemSelectChange, handleDragStart, handleDragOver, handleDragEnd }; + + if (enemyTokens && enemyTokens.length > 0) { + enemyTokens.forEach(checkbox => { + checkbox.addEventListener('change', handleCheckboxChange); + }); + } + + return { + windowTitle, + pauseButton, + itemSelect, + damageList, + handleFocusIn, + handleFocusOut, + handleMouseDown, + handlePauseButtonClick, + handleItemSelectChange, + handleDragStart, + handleDragOver, + handleDragEnd, + handleCheckboxChange + }; } function cleanupEventListeners(listeners) { - const { windowTitle, pauseButton, itemSelect, damageList, handleFocusIn, handleFocusOut, handleMouseDown, handlePauseButtonClick, handleItemSelectChange, handleDragStart, handleDragOver, handleDragEnd } = listeners; + const { windowTitle, pauseButton, itemSelect, damageList, enemyTokens, handleFocusIn, handleFocusOut, handleMouseDown, handlePauseButtonClick, handleItemSelectChange, handleDragStart, handleDragOver, handleDragEnd, handleCheckboxChange } = listeners; if (windowTitle) { windowTitle.removeEventListener('focusin', handleFocusIn); @@ -469,6 +499,12 @@ export async function process3rdPartyReactionDialog({ dialogTitle, dialogContent damageList.removeEventListener('dragover', handleDragOver); damageList.removeEventListener('dragend', handleDragEnd); } + + if (enemyTokens && enemyTokens.length > 0) { + enemyTokens.forEach(checkbox => { + checkbox.removeEventListener('change', handleCheckboxChange); + }); + } } await foundry.applications.api.DialogV2.wait({ @@ -498,7 +534,7 @@ export async function process3rdPartyReactionDialog({ dialogTitle, dialogContent } let damageChosen = []; - let damageListItems = document.querySelectorAll(`#damage-list li .damage-type`); + let damageListItems = document?.querySelectorAll(`#damage-list li .damage-type`); if (damageListItems?.length > 0) { damageListItems.forEach(item => damageChosen.push(item.textContent.trim())); } @@ -506,7 +542,10 @@ export async function process3rdPartyReactionDialog({ dialogTitle, dialogContent let selectedItemUuid = button.form?.elements[`item-select_${dialogId}`]?.value ?? false; let favoriteCheck = button.form?.elements["gps-favorite-checkbox"]?.checked ?? false; - result = ({ userDecision: true, enemyTokenUuid, allyTokenUuid, damageChosen, selectedItemUuid, favoriteCheck, abilityCheck, programmaticallyClosed: false, source, type }); + let enemyTokenUuids = document?.querySelectorAll('input.enemy-tokens:checked') ?? false; + if(enemyTokenUuids) enemyTokenUuids = Array.from(enemyTokenUuids).map(checkbox => checkbox.value); + + result = ({ userDecision: true, enemyTokenUuid, allyTokenUuid, damageChosen, selectedItemUuid, favoriteCheck, abilityCheck, enemyTokenUuids, programmaticallyClosed: false, source, type }); } }, { @@ -1111,9 +1150,9 @@ export async function remoteCompleteItemUse({itemUuid, actorUuid, options}) { itemData.applyActiveEffects(); let remoteCIU = await MidiQOL.completeItemUse(itemData, {actorUuid}, options); - let checkHits = remoteCIU.hitTargets.first() ? true : false; + let checkHits = remoteCIU?.hitTargets?.first() ? true : false; - return {castLevel: remoteCIU.castData.castLevel, checkHits: checkHits}; + return {castLevel: remoteCIU?.castData?.castLevel, checkHits: checkHits}; } export async function remoteAbilityTest({spellcasting, actorUuid}) { diff --git a/scripts/macros/burstOfIngenuity.js b/scripts/macros/burstOfIngenuity.js new file mode 100644 index 0000000..3a564bc --- /dev/null +++ b/scripts/macros/burstOfIngenuity.js @@ -0,0 +1,128 @@ +export async function burstOfIngenuity({ workflowData,workflowType,workflowCombat }) { + const module = await import('../module.js'); + const socket = module.socket; + const helpers = await import('../helpers.js'); + const workflow = await MidiQOL.Workflow.getWorkflow(`${workflowData}`); + if(!workflow) return; + const gpsUuid = "e63afca6-62d3-4896-850f-afefd1d8ce0a"; + if(workflow.item.flags["gambits-premades"]?.gpsUuid === gpsUuid) return; + let itemName = "Burst of Ingenuity"; + let dialogId = gpsUuid; + let gmUser = helpers.getPrimaryGM(); + let itemRoll; + + const initialTimeLeft = Number(MidiQOL.safeGetGameSetting('gambits-premades', `${itemName} Timeout`)); + const optionBackground = (document.body.classList.contains("theme-dark")) ? 'black' : 'var(--color-bg)'; + let target = workflow.token; + let browserUser; + + let findValidTokens = helpers.findValidTokens({initiatingToken: target, targetedToken: null, itemName: itemName, itemType: "feature", itemChecked: null, reactionCheck: false, sightCheck: false, rangeCheck: false, rangeTotal: null, dispositionCheck: true, dispositionCheckType: "enemy", workflowType: workflowType, workflowCombat: workflowCombat, gpsUuid: gpsUuid}); + + if(findValidTokens.length === 0 || !findValidTokens) return; + + for (const validTokenPrimary of findValidTokens) { + let targets = Array.from(workflow.targets).filter(t => t.document.disposition === validTokenPrimary.document.disposition && MidiQOL.computeDistance(validTokenPrimary, t, true) <= 30); + + if(targets.length === 0) continue; + + const targetUuids = targets.map(t => t.document.uuid); + const targetNames = targets.map(t => t.document.name); + + let targetOptions = targetUuids.map((uuid, index) => + `` + ).join(''); + + let chosenItem = validTokenPrimary.actor.items.find(i => i.flags["gambits-premades"]?.gpsUuid === gpsUuid); + let itemProperName = chosenItem?.name; + const dialogTitlePrimary = `${validTokenPrimary.actor.name} | ${itemProperName}`; + const dialogTitleGM = `Waiting for ${validTokenPrimary.actor.name}'s selection | ${itemProperName}`; + browserUser = helpers.getBrowserUser({ actorUuid: validTokenPrimary.actor.uuid }); + + let dialogContent = ` +
+
+
+

Would you like to use your reaction to cast ${itemProperName} and add 2 to this saving throw? Choose an ally below.

+
+
+ + +
+ +
+
+
+
+
+
+ +
+
+ `; + + let content = ` ${validTokenPrimary.actor.name} has a reaction available for a save triggering ${itemProperName}.`; + let chatData = { user: gmUser, content: content, roll: false, whisper: gmUser }; + let notificationMessage = await MidiQOL.socket().executeAsUser("createChatMessage", gmUser, { chatData }); + + let result; + + if (MidiQOL.safeGetGameSetting('gambits-premades', 'Mirror 3rd Party Dialog for GMs') && browserUser !== gmUser) { + let userDialogArgs = { dialogTitle:dialogTitlePrimary,dialogContent,dialogId,initialTimeLeft,validTokenPrimaryUuid: validTokenPrimary.document.uuid,source: "user",type: "multiDialog", browserUser: browserUser, notificationId: notificationMessage._id }; + + let gmDialogArgs = { dialogTitle:dialogTitleGM,dialogContent,dialogId,initialTimeLeft,validTokenPrimaryUuid: validTokenPrimary.document.uuid,source: "gm",type: "multiDialog", notificationId: notificationMessage._id }; + + result = await socket.executeAsUser("handleDialogPromises", gmUser, {userDialogArgs, gmDialogArgs}); + } else { + result = await socket.executeAsUser("process3rdPartyReactionDialog", browserUser, {dialogTitle:dialogTitlePrimary,dialogContent,dialogId,initialTimeLeft,validTokenPrimaryUuid: validTokenPrimary.document.uuid,source: gmUser === browserUser ? "gm" : "user",type:"singleDialog", notificationId: notificationMessage._id}); + } + + const { userDecision, enemyTokenUuid, allyTokenUuid, damageChosen, source, type } = result; + + if (!userDecision) { + continue; + } + else if (userDecision) { + let allyToken; + if(allyTokenUuid) allyToken = await fromUuid(allyTokenUuid); + allyToken = allyToken.object; + + const options = { + showFullCard: false, + createWorkflow: true, + versatile: false, + configureDialog: false, + targetUuids: [allyToken.document.uuid] + }; + + if(source && source === "user") itemRoll = await socket.executeAsUser("remoteCompleteItemUse", browserUser, { itemUuid: chosenItem.uuid, actorUuid: validTokenPrimary.actor.uuid, options: options }); + else if(source && source === "gm") itemRoll = await socket.executeAsUser("remoteCompleteItemUse", gmUser, { itemUuid: chosenItem.uuid, actorUuid: validTokenPrimary.actor.uuid, options: options }); + + if(!itemRoll) continue; + + let rollFound = workflow.saveRolls.find(roll => roll.data.actorUuid === allyToken.actor.uuid); + + let saveBonus = await new CONFIG.Dice.DamageRoll(`2`).evaluate(); + let newRoll; + if(rollFound) newRoll = await MidiQOL.addRollTo(rollFound, saveBonus); + let saveDC = workflow.saveItem.system.save.dc; + let chatContent; + if(newRoll.total >= saveDC && rollFound.total < saveDC) { + workflow.failedSaves.delete(allyToken); + workflow.saves.add(allyToken); + chatContent = `You added a +2 bonus to ${allyToken.actor.name}'s roll and caused them to succeed their save.
`; + } + else if(rollFound.total < saveDC){ + chatContent = `You added a +2 bonus to ${allyToken.actor.name}'s roll but did not cause them to succeed their save.
`; + } + else if(rollFound.total >= saveDC){ + chatContent = `You added a +2 bonus to ${allyToken.actor.name}'s roll but they had already succeeded their save.
`; + } + + await socket.executeAsUser("replaceChatCard", gmUser, {actorUuid: validTokenPrimary.actor.uuid, itemUuid: chosenItem.uuid, chatContent: chatContent, rollData: newRoll}); + } + } +} \ No newline at end of file diff --git a/scripts/macros/counterspell.js b/scripts/macros/counterspell.js index c9eb970..e3de069 100644 --- a/scripts/macros/counterspell.js +++ b/scripts/macros/counterspell.js @@ -5,7 +5,7 @@ export async function counterspell({ workflowData,workflowType,workflowCombat }) const workflow = await MidiQOL.Workflow.getWorkflow(`${workflowData}`); if(!workflow) return; const gpsUuid = "a3992a10-f36a-4416-a995-f83d444c3c0a"; - if(workflow.item.type !== "spell" || workflow.item.flags["gambits-premades"]?.gpsUuid === gpsUuid) return; + if(workflow.item.flags["gambits-premades"]?.gpsUuid === gpsUuid) return; let itemName = "Counterspell"; let dialogId = gpsUuid; const lastMessage = game.messages.contents[game.messages.contents.length - 1]; // Use to hide initial spell message @@ -108,9 +108,7 @@ export async function counterspell({ workflowData,workflowType,workflowCombat }) else if (userDecision) { if(lastMessage && validTokenPrimary.actor.type === "character") lastMessage.update({ whisper: [] }); - let chosenSpell = validTokenPrimary.actor.items.find(i => i.name === itemProperName); - - hasVSMProperty = castProperties.some(prop => chosenSpell.system.properties.has(prop)); + hasVSMProperty = castProperties.some(prop => chosenItem.system.properties.has(prop)); const options = { showFullCard: false, @@ -120,8 +118,8 @@ export async function counterspell({ workflowData,workflowType,workflowCombat }) targetUuids: [selectedToken.document.uuid] }; - if(source && source === "user") itemRoll = await socket.executeAsUser("remoteCompleteItemUse", browserUser, { itemUuid: chosenSpell.uuid, actorUuid: validTokenPrimary.actor.uuid, options: options }); - else if(source && source === "gm") itemRoll = await socket.executeAsUser("remoteCompleteItemUse", gmUser, { itemUuid: chosenSpell.uuid, actorUuid: validTokenPrimary.actor.uuid, options: options }); + if(source && source === "user") itemRoll = await socket.executeAsUser("remoteCompleteItemUse", browserUser, { itemUuid: chosenItem.uuid, actorUuid: validTokenPrimary.actor.uuid, options: options }); + else if(source && source === "gm") itemRoll = await socket.executeAsUser("remoteCompleteItemUse", gmUser, { itemUuid: chosenItem.uuid, actorUuid: validTokenPrimary.actor.uuid, options: options }); if(!itemRoll) continue; @@ -167,11 +165,11 @@ export async function counterspell({ workflowData,workflowType,workflowCombat }) await helpers.addReaction({actorUuid: `${validTokenPrimary.actor.uuid}`}); - await socket.executeAsUser("replaceChatCard", gmUser, {actorUuid: validTokenPrimary.actor.uuid, itemUuid: chosenSpell.uuid, chatContent: chatContent, rollData: skillRoll}); + await socket.executeAsUser("replaceChatCard", gmUser, {actorUuid: validTokenPrimary.actor.uuid, itemUuid: chosenItem.uuid, chatContent: chatContent, rollData: skillRoll}); if(csFailure === true) continue; - let cprConfig = helpers.getCprConfig({itemUuid: chosenSpell.uuid}); + let cprConfig = helpers.getCprConfig({itemUuid: chosenItem.uuid}); const { animEnabled } = cprConfig; if(animEnabled) { new Sequence() @@ -261,9 +259,7 @@ export async function counterspell({ workflowData,workflowType,workflowCombat }) else if (userDecision) { if(lastMessage && validTokenPrimary.actor.type === "character") lastMessage.update({ whisper: [] }); - let chosenSpell = validTokenSecondary.actor.items.find(i => i.name === itemProperName); - - hasVSMProperty = castProperties.some(prop => chosenSpell.system.properties.has(prop)); + hasVSMProperty = castProperties.some(prop => chosenItem.system.properties.has(prop)); const options = { showFullCard: false, @@ -273,8 +269,8 @@ export async function counterspell({ workflowData,workflowType,workflowCombat }) targetUuids: [validTokenPrimary.document.uuid] }; - if(source && source === "user") itemRoll = await socket.executeAsUser("remoteCompleteItemUse", browserUser, { itemUuid: chosenSpell.uuid, actorUuid: validTokenSecondary.actor.uuid, options: options }); - else if(source && source === "gm") itemRoll = await socket.executeAsUser("remoteCompleteItemUse", gmUser, { itemUuid: chosenSpell.uuid, actorUuid: validTokenSecondary.actor.uuid, options: options }); + if(source && source === "user") itemRoll = await socket.executeAsUser("remoteCompleteItemUse", browserUser, { itemUuid: chosenItem.uuid, actorUuid: validTokenSecondary.actor.uuid, options: options }); + else if(source && source === "gm") itemRoll = await socket.executeAsUser("remoteCompleteItemUse", gmUser, { itemUuid: chosenItem.uuid, actorUuid: validTokenSecondary.actor.uuid, options: options }); if(!itemRoll) continue; @@ -320,12 +316,12 @@ export async function counterspell({ workflowData,workflowType,workflowCombat }) await helpers.addReaction({actorUuid: `${validTokenSecondary.actor.uuid}`}); - await socket.executeAsUser("replaceChatCard", gmUser, {actorUuid: validTokenSecondary.actor.uuid, itemUuid: chosenSpell.uuid, chatContent: chatContent, rollData: skillRoll}); + await socket.executeAsUser("replaceChatCard", gmUser, {actorUuid: validTokenSecondary.actor.uuid, itemUuid: chosenItem.uuid, chatContent: chatContent, rollData: skillRoll}); if(csFailure === true) continue; - let cprConfig = helpers.getCprConfig({itemUuid: chosenSpell.uuid}); + let cprConfig = helpers.getCprConfig({itemUuid: chosenItem.uuid}); const { animEnabled } = cprConfig; if(animEnabled) { new Sequence() diff --git a/scripts/macros/cuttingWords.js b/scripts/macros/cuttingWords.js index 772d2ff..f515b5c 100644 --- a/scripts/macros/cuttingWords.js +++ b/scripts/macros/cuttingWords.js @@ -9,21 +9,24 @@ export async function cuttingWords({workflowData,workflowType,workflowCombat}) { let itemName = "Cutting Words"; let dialogId = gpsUuid; let gmUser = helpers.getPrimaryGM(); + let homebrewDisableMaxMiss = MidiQOL.safeGetGameSetting('gambits-premades', 'disableCuttingWordsMaxMiss'); + let debugEnabled = MidiQOL.safeGetGameSetting('gambits-premades', 'debugEnabled'); let findValidTokens = helpers.findValidTokens({initiatingToken: workflow.token, targetedToken: null, itemName: itemName, itemType: "feature", itemChecked: ["bardic inspiration"], reactionCheck: true, sightCheck: true, rangeCheck: true, rangeTotal: 60, dispositionCheck: true, dispositionCheckType: "enemy", workflowType: workflowType, workflowCombat: workflowCombat, gpsUuid: gpsUuid}); let browserUser; for (const validTokenPrimary of findValidTokens) { - let chosenItem = validTokenPrimary.actor.items.find(i => i.flags["gambits-premades"]?.gpsUuid === gpsUuid); - let itemProperName = chosenItem?.name; - const dialogTitlePrimary = `${validTokenPrimary.actor.name} | ${itemProperName}`; - const dialogTitleGM = `Waiting for ${validTokenPrimary.actor.name}'s selection | ${itemProperName}`; let bardicDie = validTokenPrimary.actor.system.scale?.bard["bardic-inspiration"]?.die; if(!bardicDie) { ui.notifications.error("You must have a Bard scale for this actor named 'bardic-inspiration'") continue; } + let bardicNum = validTokenPrimary.actor.system.scale?.bard["bardic-inspiration"]?.faces; + let chosenItem = validTokenPrimary.actor.items.find(i => i.flags["gambits-premades"]?.gpsUuid === gpsUuid); + let itemProperName = chosenItem?.name; + const dialogTitlePrimary = `${validTokenPrimary.actor.name} | ${itemProperName}`; + const dialogTitleGM = `Waiting for ${validTokenPrimary.actor.name}'s selection | ${itemProperName}`; browserUser = helpers.getBrowserUser({ actorUuid: validTokenPrimary.actor.uuid }); let dialogContent; @@ -68,7 +71,14 @@ export async function cuttingWords({workflowData,workflowType,workflowCombat}) { `; } else if(workflowType === "attack") { - if(workflow.token.document.disposition === validTokenPrimary.document.disposition) continue; + if(workflow.token.document.disposition === validTokenPrimary.document.disposition) { + if(debugEnabled) console.error(`${itemName} for ${validTokenPrimary.actor.name} failed at failed at token disposition check`); + continue; + } + if(((workflow.attackTotal - bardicNum) >= workflow.targets.first()?.actor.system.attributes.ac.value) && homebrewDisableMaxMiss) { + if(debugEnabled) console.error(`${itemName} for ${validTokenPrimary.actor.name} failed at homebrew max bardic die would not effect hit`); + continue; + } dialogContent = `
@@ -93,7 +103,7 @@ export async function cuttingWords({workflowData,workflowType,workflowCombat}) { `; } - let content = ` ${validTokenPrimary.actor.name} has a reaction available for a save triggering ${itemProperName}.`; + let content = ` ${validTokenPrimary.actor.name} has a reaction available for a ${workflowType} triggering ${itemProperName}.`; let chatData = { user: gmUser, content: content, roll: false, whisper: gmUser }; let notificationMessage = await MidiQOL.socket().executeAsUser("createChatMessage", gmUser, { chatData }); @@ -199,7 +209,8 @@ export async function cuttingWords({workflowData,workflowType,workflowCombat}) { } else if(workflowType === "attack") { - let targetAC = workflow.hitTargets.first().actor.system.attributes.ac.value; + + let targetAC = workflow.targets.first()?.actor.system.attributes.ac.value; const saveSetting = workflow.options.noOnUseMacro; workflow.options.noOnUseMacro = true; let reroll; diff --git a/scripts/macros/silveryBarbs.js b/scripts/macros/silveryBarbs.js index fd14d3e..f2dd470 100644 --- a/scripts/macros/silveryBarbs.js +++ b/scripts/macros/silveryBarbs.js @@ -47,19 +47,14 @@ export async function silveryBarbs({workflowData,workflowType,workflowCombat}) { const optionBackground = (document.body.classList.contains("theme-dark")) ? 'black' : 'var(--color-bg)'; if(workflowType === "save") { - console.log(workflow, "silverybarbs workflow") let targets = Array.from(workflow.saves).filter(t => t.document.disposition !== validTokenPrimary.document.disposition && MidiQOL.canSee(validTokenPrimary, t) && MidiQOL.computeDistance(validTokenPrimary, t, true) <= 60); if(homebrewDisableNat20) targets = targets.filter(t => workflow.saveRolls.find(roll => roll.data.actorUuid === t.actor.uuid && !roll.isCritical)); if(homebrewEnableNat20) targets = targets.filter(t => workflow.saveRolls.find(roll => roll.data.actorUuid === t.actor.uuid && roll.isCritical)); - if(targets.length === 0) return; + if(targets.length === 0) continue; const targetUuids = targets.map(t => t.document.uuid); const targetNames = targets.map(t => t.document.name); - - targetUuids.map((uuid, index) => - `` - ).join(''); dialogContent = `
diff --git a/scripts/macros/temporalShunt.js b/scripts/macros/temporalShunt.js new file mode 100644 index 0000000..fbec293 --- /dev/null +++ b/scripts/macros/temporalShunt.js @@ -0,0 +1,229 @@ +export async function temporalShunt({ workflowData,workflowType,workflowCombat }) { + const module = await import('../module.js'); + const socket = module.socket; + const helpers = await import('../helpers.js'); + const workflow = await MidiQOL.Workflow.getWorkflow(`${workflowData}`); + if(!workflow) return; + const gpsUuid = "294601e8-ce2f-42e2-b9a0-8e1050f8c78e"; + if(workflow.item.flags["gambits-premades"]?.gpsUuid === gpsUuid) return; + let itemName = "Temporal Shunt"; + let dialogId = gpsUuid; + let gmUser = helpers.getPrimaryGM(); + let itemRoll; + + const initialTimeLeft = Number(MidiQOL.safeGetGameSetting('gambits-premades', `${itemName} Timeout`)); + let initialTarget = workflow.token; + let targets = [workflow.token.document.uuid]; + let browserUser; + + let findValidTokens = helpers.findValidTokens({initiatingToken: initialTarget, targetedToken: null, itemName: itemName, itemType: "spell", itemChecked: null, reactionCheck: true, sightCheck: true, rangeCheck: true, rangeTotal: 120, dispositionCheck: true, dispositionCheckType: "enemy", workflowType: workflowType, workflowCombat: workflowCombat, gpsUuid: gpsUuid}); + + if(findValidTokens.length === 0 || !findValidTokens) return; + + for (const validTokenPrimary of findValidTokens) { + let chosenItem = validTokenPrimary.actor.items.find(i => i.flags["gambits-premades"]?.gpsUuid === gpsUuid); + let itemProperName = chosenItem?.name; + const dialogTitlePrimary = `${validTokenPrimary.actor.name} | ${itemProperName}`; + const dialogTitleGM = `Waiting for ${validTokenPrimary.actor.name}'s selection | ${itemProperName}`; + browserUser = helpers.getBrowserUser({ actorUuid: validTokenPrimary.actor.uuid }); + + let dialogContent = ` +
+
+
+
+
+

Would you like to use your reaction to use ${itemProperName}?

+
+ +
+
+
+
+
+
+ +
+
+ `; + + let content = ` ${validTokenPrimary.actor.name} has a reaction available for a spell or attack triggering ${itemProperName}.`; + let chatData = { user: gmUser, content: content, roll: false, whisper: gmUser }; + let notificationMessage = await MidiQOL.socket().executeAsUser("createChatMessage", gmUser, { chatData }); + + let result; + + if (MidiQOL.safeGetGameSetting('gambits-premades', 'Mirror 3rd Party Dialog for GMs') && browserUser !== gmUser) { + let userDialogArgs = { dialogTitle:dialogTitlePrimary,dialogContent,dialogId,initialTimeLeft,validTokenPrimaryUuid: validTokenPrimary.document.uuid,source: "user",type: "multiDialog", browserUser: browserUser, notificationId: notificationMessage._id }; + + let gmDialogArgs = { dialogTitle:dialogTitleGM,dialogContent,dialogId,initialTimeLeft,validTokenPrimaryUuid: validTokenPrimary.document.uuid,source: "gm",type: "multiDialog", notificationId: notificationMessage._id }; + + result = await socket.executeAsUser("handleDialogPromises", gmUser, {userDialogArgs, gmDialogArgs}); + } else { + result = await socket.executeAsUser("process3rdPartyReactionDialog", browserUser, {dialogTitle:dialogTitlePrimary,dialogContent,dialogId,initialTimeLeft,validTokenPrimaryUuid: validTokenPrimary.document.uuid,source: gmUser === browserUser ? "gm" : "user",type:"singleDialog", notificationId: notificationMessage._id}); + } + + const { userDecision, enemyTokenUuid, allyTokenUuid, damageChosen, source, type } = result; + + if (!userDecision) { + continue; + } + else if (userDecision) { + const options = { + showFullCard: false, + createWorkflow: true, + versatile: false, + configureDialog: true, + targetUuids: [initialTarget.document.uuid] + }; + + if(source && source === "user") itemRoll = await socket.executeAsUser("remoteCompleteItemUse", browserUser, { itemUuid: chosenItem.uuid, actorUuid: validTokenPrimary.actor.uuid, options: options }); + else if(source && source === "gm") itemRoll = await socket.executeAsUser("remoteCompleteItemUse", gmUser, { itemUuid: chosenItem.uuid, actorUuid: validTokenPrimary.actor.uuid, options: options }); + + if(!itemRoll) continue; + + let itemRollCastLevel = itemRoll.castLevel; + let numTargets = itemRollCastLevel - 5; + let targetsNearby; + + if(itemRollCastLevel > 5) targetsNearby = MidiQOL.findNearby(null, initialTarget, 30, { includeToken: false })?.filter(t => t.document.disposition !== validTokenPrimary.document.disposition); + + if(itemRollCastLevel > 5 && targetsNearby.length !== 0) { + const targetUuids = targetsNearby.map(t => t.document.uuid); + const targetNames = targetsNearby.map(t => t.document.name); + + let targetRows = targetUuids.map((uuid, index) => + ` + + ${targetNames[index]} + + ` + ).join(''); + + let dialogContent = ` +
+
+
+

What other targets would you like to be effected by ${itemProperName}? You can select up to ${numTargets} additional ${numTargets === 1 ? 'target' : 'targets'} below.

+
+
+ ${targetRows}
+
+ +
+
+
+
+
+
+ +
+
+ `; + + let result; + + if (MidiQOL.safeGetGameSetting('gambits-premades', 'Mirror 3rd Party Dialog for GMs') && browserUser !== gmUser) { + let userDialogArgs = { dialogTitle:dialogTitlePrimary,dialogContent,dialogId: `${dialogId}-1`,initialTimeLeft,validTokenPrimaryUuid: validTokenPrimary.document.uuid,numTargets: numTargets, source: "user",type: "multiDialog", browserUser: browserUser }; + + let gmDialogArgs = { dialogTitle:dialogTitleGM,dialogContent,dialogId: `${dialogId}-1`,initialTimeLeft,validTokenPrimaryUuid: validTokenPrimary.document.uuid,numTargets: numTargets, source: "gm",type: "multiDialog" }; + + result = await socket.executeAsUser("handleDialogPromises", gmUser, {userDialogArgs, gmDialogArgs}); + } else { + result = await socket.executeAsUser("process3rdPartyReactionDialog", browserUser, {dialogTitle:dialogTitlePrimary,dialogContent,dialogId: `${dialogId}-1`,initialTimeLeft,validTokenPrimaryUuid: validTokenPrimary.document.uuid,numTargets: numTargets, source: gmUser === browserUser ? "gm" : "user",type:"singleDialog"}); + } + + const { userDecision, enemyTokenUuid, enemyTokenUuids, allyTokenUuid, damageChosen, source, type } = result; + + targets.push(...enemyTokenUuids); + + } + + const itemData = { + name: `${itemProperName}`, + img: chosenItem.img, + type: "feat", + effects: [], + flags: { + "midiProperties": { + magiceffect: true + }, + "autoanimations": { + killAnim: true + } + }, + system: { + equipped: true, + actionType: "save", + save: { dc: validTokenPrimary.actor.system.attributes.spelldc, ability: "wis", scaling: "flat" }, + components: { concentration: false, material: false, ritual: false, somatic: false, value: "", vocal: false }, + duration: { units: "inst", value: undefined }, + } + }; + + let chatContent; + + const itemUpdate = new CONFIG.Item.documentClass(itemData, { parent: validTokenPrimary.actor }); + const optionsSave = { showFullCard: false, createWorkflow: true, versatile: false, configureDialog: false, targetUuids: targets }; + const saveResult = await MidiQOL.completeItemUse(itemUpdate, {}, optionsSave); + + for(let failedTarget of saveResult.failedSaves) { + failedTarget = await fromUuid(failedTarget.document.uuid); + failedTarget = failedTarget.object; + + let effectData = [{ + "icon": `${chosenItem.img}`, + "origin": `${validTokenPrimary.actor.uuid}`, + "duration": { + "seconds": 12 + }, + "disabled": false, + "name": `${itemProperName}: Vanish`, + "type": "base", + "changes": [{ + "key": "ATL.hidden", + "mode": 0, + "value": "true", + "priority": 20 + }], + "transfer": false, + "flags": { + "dae": { + "specialDuration": [ + "turnStart" + ] + } + } + }]; + + await MidiQOL.socket().executeAsUser("createEffects", gmUser, { actorUuid: failedTarget.actor.uuid, effects: effectData }); + chatContent = `The targets ${workflowType} roll was successfully interrupted and they disappear.
`; + + await socket.executeAsUser("replaceChatCard", gmUser, {actorUuid: validTokenPrimary.actor.uuid, itemUuid: chosenItem.uuid, chatContent: chatContent}); + + let cprConfig = helpers.getCprConfig({itemUuid: chosenItem.uuid}); + const { animEnabled } = cprConfig; + if(animEnabled) { + for(let target of targets) { + target = await fromUuid(target); + target = target.object; + new Sequence() + .effect() + .file("jb2a.portals.horizontal.vortex.black") + .fadeIn(500) + .fadeOut(500) + .atLocation(target) + .scaleToObject(2) + .play() + } + } + } + + workflow.aborted = true; + } + } +} \ No newline at end of file diff --git a/scripts/module.js b/scripts/module.js index 0329843..c8e7e51 100644 --- a/scripts/module.js +++ b/scripts/module.js @@ -22,6 +22,8 @@ import { rainOfCinders } from './macros/rainOfCinders.js'; import { biohazard } from './macros/biohazard.js'; import { restoreBalance } from './macros/restoreBalance.js'; import { legendaryResistance } from './macros/legendaryResistance.js'; +import { burstOfIngenuity } from './macros/burstOfIngenuity.js'; +import { temporalShunt } from './macros/temporalShunt.js'; import { enableOpportunityAttack, disableOpportunityAttack, opportunityAttackScenarios } from './macros/opportunityAttack.js'; import { deleteChatMessage, gmIdentifyItem, closeDialogById, handleDialogPromises, rollAsUser, convertFromFeet, gmUpdateTemplateSize, findValidTokens, pauseDialogById, freeSpellUse, process3rdPartyReactionDialog, moveTokenByCardinal, moveTokenByOriginPoint, addReaction, gmUpdateDisposition, gmToggleStatus, replaceChatCard, validateRegionMovement, ritualSpellUse, getBrowserUser, getPrimaryGM, gmDeleteItem, getCprConfig, remoteCompleteItemUse, remoteAbilityTest } from './helpers.js'; export let socket; @@ -160,6 +162,8 @@ Hooks.once('socketlib.ready', async function() { socket.register("gmDeleteItem", gmDeleteItem); socket.register("remoteCompleteItemUse", remoteCompleteItemUse); socket.register("remoteAbilityTest", remoteAbilityTest); + socket.register("burstOfIngenuity", burstOfIngenuity); + socket.register("temporalShunt", temporalShunt); }) Hooks.once('ready', async function() { @@ -206,7 +210,9 @@ Hooks.once('ready', async function() { Hooks.on("midi-qol.prePreambleComplete", async (workflow) => { let workflowItemUuid = workflow.itemUuid; - if (game.gpsSettings.counterspellEnabled) await executeWorkflow({ workflowItem: "counterspell", workflowData: workflowItemUuid, workflowType: "attack", workflowCombat: true }); + let workflowType = (workflow.item.hasSave) ? "save" : (workflow.item.hasAttack) ? "attack" : "item"; + if (game.gpsSettings.counterspellEnabled && workflow.item.type === "spell") await executeWorkflow({ workflowItem: "counterspell", workflowData: workflowItemUuid, workflowType: workflowType, workflowCombat: true }); + if (game.gpsSettings.temporalShuntEnabled && (workflow.item.type === "spell" || workflow.item.hasAttack)) await executeWorkflow({ workflowItem: "temporalShunt", workflowData: workflowItemUuid, workflowType: workflowType, workflowCombat: true }); }); Hooks.on("midi-qol.preCheckHits", async (workflow) => { @@ -256,6 +262,7 @@ Hooks.once('ready', async function() { if (game.gpsSettings.indomitableEnabled) await executeWorkflow({ workflowItem: "indomitable", workflowData: workflowItemUuid, workflowType: "save", workflowCombat: true }); if (game.gpsSettings.witchesHexEnabled) await executeWorkflow({ workflowItem: "witchesHex", workflowData: workflowItemUuid, workflowType: "save", workflowCombat: true }); if (game.gpsSettings.legendaryResistanceEnabled) await executeWorkflow({ workflowItem: "legendaryResistance", workflowData: workflowItemUuid, workflowType: "save", workflowCombat: true }); + if (game.gpsSettings.burstOfIngenuityEnabled) await executeWorkflow({ workflowItem: "burstOfIngenuity", workflowData: workflowItemUuid, workflowType: "save", workflowCombat: true }); }); Hooks.on("midi-qol.postSavesComplete", async (workflow) => { @@ -364,7 +371,10 @@ async function updateSettings(settingKey = null) { 'enableRainOfCinders': 'rainOfCindersEnabled', 'Enable Opportunity Attack': 'opportunityAttackEnabled', 'enableRestoreBalance': 'restoreBalanceEnabled', - 'enableLegendaryResistance': 'legendaryResistanceEnabled' + 'enableLegendaryResistance': 'legendaryResistanceEnabled', + 'enableBurstOfIngenuity': 'burstOfIngenuityEnabled', + 'enableTemporalShunt': 'temporalShuntEnabled', + 'disableCuttingWordsMaxMiss': 'disableCuttingWordsMaxMiss' }; if (settingKey === null) { diff --git a/scripts/settings.js b/scripts/settings.js index ec170b4..c94964f 100644 --- a/scripts/settings.js +++ b/scripts/settings.js @@ -616,6 +616,65 @@ function registerSettings() { } }); + game.settings.register("gambits-premades", "enableBurstOfIngenuity", { + name: "enableBurstOfIngenuity", + scope: "world", + config: false, + type: Boolean, + default: false, + type: Boolean + }); + + game.settings.register('gambits-premades', 'Burst of Ingenuity Timeout', { + name: "Burst of Ingenuity Timeout", + hint: "Enter custom number (in seconds). Default timeout value is 15 seconds.", + scope: 'world', + config: false, + type: String, + default: "15", + onChange: value => { + const numericValue = Number(value); + if (!isNaN(numericValue)) { + } else { + console.error("Invalid input for Numeric Setting Example: Not a number."); + } + } + }); + + game.settings.register("gambits-premades", "enableTemporalShunt", { + name: "enableTemporalShunt", + scope: "world", + config: false, + type: Boolean, + default: false, + type: Boolean + }); + + game.settings.register('gambits-premades', 'Temporal Shunt Timeout', { + name: "Temporal Shunt Timeout", + hint: "Enter custom number (in seconds). Default timeout value is 15 seconds.", + scope: 'world', + config: false, + type: String, + default: "15", + onChange: value => { + const numericValue = Number(value); + if (!isNaN(numericValue)) { + } else { + console.error("Invalid input for Numeric Setting Example: Not a number."); + } + } + }); + + game.settings.register("gambits-premades", "disableCuttingWordsMaxMiss", { + name: "disableCuttingWordsMaxMiss", + scope: "world", + config: false, + type: Boolean, + default: false, + type: Boolean + }); + game.settings.register("gambits-premades", "enableRegionWrapping", { name: "enableRegionWrapping", scope: "world", @@ -677,6 +736,18 @@ function registerSettings() { type: genericFeatureSettingsMenu, restricted: true }); + + + game.settings.registerMenu('gambits-premades', 'monsterFeatures', { + name: game.i18n.localize("Monster Features"), + label: game.i18n.localize("Enable Monster Features"), + hint: game.i18n.localize("Monster Features"), + icon: 'fas fa-dragon', + scope: 'world', + config: true, + type: monsterFeaturesSettingsMenu, + restricted: true + }); } class BaseSettingsMenu extends FormApplication { @@ -752,6 +823,13 @@ class BaseSettingsMenu extends FormApplication { counterspellContent.addClass('show'); } } + + if (data.enableCuttingWords && data.disableCuttingWordsMaxMiss) { + const cuttingWordsContent = html.find('#collapsible-content-cuttingwords'); + if (cuttingWordsContent.length) { + cuttingWordsContent.addClass('show'); + } + } } toggleCollapsibleContent(event, contentId) { @@ -837,6 +915,7 @@ class classFeaturesSettingsMenu extends BaseSettingsMenu { const data = { enableCuttingWords: game.settings.get("gambits-premades", "Enable Cutting Words"), cuttingWordsTimeout: game.settings.get("gambits-premades", "Cutting Words Timeout"), + disableCuttingWordsMaxMiss: game.settings.get("gambits-premades", "disableCuttingWordsMaxMiss"), enableInterception: game.settings.get("gambits-premades", "Enable Interception"), interceptionTimeout: game.settings.get("gambits-premades", "Interception Timeout"), enableInterceptionCustomDice: game.settings.get("gambits-premades", "enableInterceptionCustomDice"), @@ -872,6 +951,7 @@ class classFeaturesSettingsMenu extends BaseSettingsMenu { async _updateObject(event, formData) { await game.settings.set("gambits-premades", "Enable Cutting Words", formData.enableCuttingWords); await game.settings.set("gambits-premades", "Cutting Words Timeout", formData.cuttingWordsTimeout); + await game.settings.set("gambits-premades", "disableCuttingWordsMaxMiss", formData.disableCuttingWordsMaxMiss); await game.settings.set("gambits-premades", "Enable Interception", formData.enableInterception); await game.settings.set("gambits-premades", "Interception Timeout", formData.interceptionTimeout); await game.settings.set("gambits-premades", "enableInterceptionCustomDice", formData.enableInterceptionCustomDice); @@ -961,7 +1041,9 @@ class spellSettingsMenu extends BaseSettingsMenu { disableSilveryBarbsOnNat20: game.settings.get("gambits-premades", "disableSilveryBarbsOnNat20"), enableSilveryBarbsOnNat20: game.settings.get("gambits-premades", "enableSilveryBarbsOnNat20"), enablePowerWordRebound: game.settings.get("gambits-premades", "Enable Power Word Rebound"), - powerWordReboundTimeout: game.settings.get("gambits-premades", "Power Word Rebound Timeout") + powerWordReboundTimeout: game.settings.get("gambits-premades", "Power Word Rebound Timeout"), + enableTemporalShunt: game.settings.get("gambits-premades", "enableTemporalShunt"), + temporalShuntTimeout: game.settings.get("gambits-premades", "Temporal Shunt Timeout") }; } @@ -975,6 +1057,8 @@ class spellSettingsMenu extends BaseSettingsMenu { await game.settings.set("gambits-premades", "enableSilveryBarbsOnNat20", formData.enableSilveryBarbsOnNat20); await game.settings.set("gambits-premades", "Enable Power Word Rebound", formData.enablePowerWordRebound); await game.settings.set("gambits-premades", "Power Word Rebound Timeout", formData.powerWordReboundTimeout); + await game.settings.set("gambits-premades", "enableTemporalShunt", formData.enableTemporalShunt); + await game.settings.set("gambits-premades", "Temporal Shunt Timeout", formData.temporalShuntTimeout); } } @@ -1012,4 +1096,26 @@ class generalSettingsMenu extends BaseSettingsMenu { await game.settings.set("gambits-premades", "enableRegionWrapping", formData.enableRegionWrapping); await game.settings.set("gambits-premades", "primaryGM", formData.primaryGM); } +} + +class monsterFeaturesSettingsMenu extends BaseSettingsMenu { + static get defaultOptions() { + return foundry.utils.mergeObject(super.defaultOptions, { + id: "monsterFeatureSettingsMenu", + title: "Enable Monster Features", + template: "modules/gambits-premades/templates/monsterFeaturesSettingsMenu.html", + }); + } + + getData() { + return { + enableBurstOfIngenuity: game.settings.get("gambits-premades", "enableBurstOfIngenuity"), + burstOfIngenuityTimeout: game.settings.get("gambits-premades", "Burst of Ingenuity Timeout") + }; + } + + async _updateObject(event, formData) { + await game.settings.set("gambits-premades", "enableBurstOfIngenuity", formData.enableBurstOfIngenuity); + await game.settings.set("gambits-premades", "Burst of Ingenuity Timeout", formData.burstOfIngenuityTimeout); + } } \ No newline at end of file diff --git a/templates/classFeaturesSettingsMenu.html b/templates/classFeaturesSettingsMenu.html index 100e6af..5c2e892 100644 --- a/templates/classFeaturesSettingsMenu.html +++ b/templates/classFeaturesSettingsMenu.html @@ -131,9 +131,9 @@ - + -