From 9ccdf0cb35856ad6de12ab7dc7538bd582df3aa2 Mon Sep 17 00:00:00 2001 From: Gambit Date: Thu, 17 Oct 2024 21:39:57 -0400 Subject: [PATCH] 0.5.64 --- .github/workflows/main.yml | 7 +- .../{001441.log => 001465.log} | 0 packs/gps-3rd-party-features/CURRENT | 2 +- packs/gps-3rd-party-features/LOG | 16 +- packs/gps-3rd-party-features/LOG.old | 16 +- .../{MANIFEST-001439 => MANIFEST-001463} | Bin 201 -> 201 bytes .../{001444.log => 001468.log} | 0 packs/gps-3rd-party-items/CURRENT | 2 +- packs/gps-3rd-party-items/LOG | 16 +- packs/gps-3rd-party-items/LOG.old | 16 +- .../{MANIFEST-001442 => MANIFEST-001466} | Bin 258 -> 258 bytes .../{001461.log => 001485.log} | 0 packs/gps-3rd-party-spells/CURRENT | 2 +- packs/gps-3rd-party-spells/LOG | 16 +- packs/gps-3rd-party-spells/LOG.old | 16 +- .../{MANIFEST-001459 => MANIFEST-001483} | Bin 260 -> 260 bytes packs/gps-actors/{001907.log => 001931.log} | 0 packs/gps-actors/CURRENT | 2 +- packs/gps-actors/LOG | 16 +- packs/gps-actors/LOG.old | 16 +- .../{MANIFEST-001905 => MANIFEST-001929} | Bin 272 -> 272 bytes .../{003125.log => 003149.log} | 0 packs/gps-class-features/CURRENT | 2 +- packs/gps-class-features/LOG | 16 +- packs/gps-class-features/LOG.old | 16 +- .../{MANIFEST-003123 => MANIFEST-003147} | Bin 262 -> 262 bytes .../{003174.log => 003198.log} | 0 packs/gps-generic-features/CURRENT | 2 +- packs/gps-generic-features/LOG | 16 +- packs/gps-generic-features/LOG.old | 16 +- .../{MANIFEST-003172 => MANIFEST-003196} | Bin 235 -> 235 bytes .../{003076.log => 003100.log} | 0 packs/gps-homebrew-features/CURRENT | 2 +- packs/gps-homebrew-features/LOG | 16 +- packs/gps-homebrew-features/LOG.old | 16 +- .../{MANIFEST-003074 => MANIFEST-003098} | Bin 262 -> 262 bytes .../{003081.log => 003105.log} | 0 packs/gps-homebrew-items/CURRENT | 2 +- packs/gps-homebrew-items/LOG | 16 +- packs/gps-homebrew-items/LOG.old | 16 +- .../{MANIFEST-003079 => MANIFEST-003103} | Bin 260 -> 260 bytes .../{002741.log => 002765.log} | 0 packs/gps-homebrew-spells/CURRENT | 2 +- packs/gps-homebrew-spells/LOG | 16 +- packs/gps-homebrew-spells/LOG.old | 16 +- .../{MANIFEST-002739 => MANIFEST-002763} | Bin 225 -> 225 bytes packs/gps-items/{003080.log => 003104.log} | 0 packs/gps-items/CURRENT | 2 +- packs/gps-items/LOG | 16 +- packs/gps-items/LOG.old | 16 +- .../{MANIFEST-003078 => MANIFEST-003102} | Bin 201 -> 201 bytes .../{003076.log => 003102.log} | 0 .../{003027.ldb => 003104.ldb} | Bin 49460 -> 50320 bytes packs/gps-monster-features/CURRENT | 2 +- packs/gps-monster-features/LOG | 23 +- packs/gps-monster-features/LOG.old | 16 +- packs/gps-monster-features/MANIFEST-003074 | Bin 287 -> 0 bytes packs/gps-monster-features/MANIFEST-003100 | Bin 0 -> 490 bytes .../{000780.log => 000804.log} | 0 packs/gps-race-features/CURRENT | 2 +- packs/gps-race-features/LOG | 16 +- packs/gps-race-features/LOG.old | 16 +- .../{MANIFEST-000778 => MANIFEST-000802} | Bin 200 -> 200 bytes packs/gps-spells/{003175.ldb => 003188.ldb} | Bin 167656 -> 169008 bytes packs/gps-spells/{003173.log => 003199.log} | 0 packs/gps-spells/CURRENT | 2 +- packs/gps-spells/LOG | 23 +- packs/gps-spells/LOG.old | 23 +- packs/gps-spells/MANIFEST-003171 | Bin 461 -> 0 bytes packs/gps-spells/MANIFEST-003197 | Bin 0 -> 235 bytes scripts/helpers.js | 83 +++++-- scripts/macros/burstOfIngenuity.js | 128 ++++++++++ scripts/macros/counterspell.js | 26 +- scripts/macros/cuttingWords.js | 25 +- scripts/macros/silveryBarbs.js | 7 +- scripts/macros/temporalShunt.js | 229 ++++++++++++++++++ scripts/module.js | 14 +- scripts/settings.js | 108 ++++++++- templates/classFeaturesSettingsMenu.html | 17 +- templates/monsterFeaturesSettingsMenu.html | 141 +++++++++++ templates/spellSettingsMenu.html | 15 ++ 81 files changed, 971 insertions(+), 292 deletions(-) rename packs/gps-3rd-party-features/{001441.log => 001465.log} (100%) rename packs/gps-3rd-party-features/{MANIFEST-001439 => MANIFEST-001463} (68%) rename packs/gps-3rd-party-items/{001444.log => 001468.log} (100%) rename packs/gps-3rd-party-items/{MANIFEST-001442 => MANIFEST-001466} (75%) rename packs/gps-3rd-party-spells/{001461.log => 001485.log} (100%) rename packs/gps-3rd-party-spells/{MANIFEST-001459 => MANIFEST-001483} (75%) rename packs/gps-actors/{001907.log => 001931.log} (100%) rename packs/gps-actors/{MANIFEST-001905 => MANIFEST-001929} (70%) rename packs/gps-class-features/{003125.log => 003149.log} (100%) rename packs/gps-class-features/{MANIFEST-003123 => MANIFEST-003147} (73%) rename packs/gps-generic-features/{003174.log => 003198.log} (100%) rename packs/gps-generic-features/{MANIFEST-003172 => MANIFEST-003196} (81%) rename packs/gps-homebrew-features/{003076.log => 003100.log} (100%) rename packs/gps-homebrew-features/{MANIFEST-003074 => MANIFEST-003098} (73%) rename packs/gps-homebrew-items/{003081.log => 003105.log} (100%) rename packs/gps-homebrew-items/{MANIFEST-003079 => MANIFEST-003103} (75%) rename packs/gps-homebrew-spells/{002741.log => 002765.log} (100%) rename packs/gps-homebrew-spells/{MANIFEST-002739 => MANIFEST-002763} (56%) rename packs/gps-items/{003080.log => 003104.log} (100%) rename packs/gps-items/{MANIFEST-003078 => MANIFEST-003102} (63%) rename packs/gps-monster-features/{003076.log => 003102.log} (100%) rename packs/gps-monster-features/{003027.ldb => 003104.ldb} (77%) delete mode 100644 packs/gps-monster-features/MANIFEST-003074 create mode 100644 packs/gps-monster-features/MANIFEST-003100 rename packs/gps-race-features/{000780.log => 000804.log} (100%) rename packs/gps-race-features/{MANIFEST-000778 => MANIFEST-000802} (64%) rename packs/gps-spells/{003175.ldb => 003188.ldb} (70%) rename packs/gps-spells/{003173.log => 003199.log} (100%) delete mode 100644 packs/gps-spells/MANIFEST-003171 create mode 100644 packs/gps-spells/MANIFEST-003197 create mode 100644 scripts/macros/burstOfIngenuity.js create mode 100644 scripts/macros/temporalShunt.js create mode 100644 templates/monsterFeaturesSettingsMenu.html diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 688d8c09..6f04e6e1 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 498f6d9a..2ebaba50 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 0962a9f4..7567dbe3 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 7e14ae7d..8fdff1a6 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 37c55ad23fece55908261e8a3d57d1511916d55c..4f9e342a9e67474eaf6518b2b1e1e54726baf6ad 100644 GIT binary patch delta 41 scmX@fc#?6#a;4nO*Pn7RFf#4n=44>r$<5;S&%@IjB(M`Cup1}<03hxQdjJ3c delta 41 scmX@fc#?6#a-~0E-;QxHFfuLR=44=A$j#!G|1_ltB(M-9uox%+048<|od5s; 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 f8ee61cb..378ea140 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 f05ff9c5..9e51b5e7 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 b4f24397..f7dff19f 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 eaf314bee0d4c237cb2b1483185babd33ac7c900..8e06e1cefa31c93313b5fff9b0503ae39abe219f 100644 GIT binary patch delta 41 rcmZo-YGRu3K#9GWw}*>?k!d$KCj;{yZkFsHN%mJk0((FL`+x!ftf9k!dkECj;{mZkFuK<8nVh0!u&w%YXs^*g6TE 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 9ddda28f..94e2f52e 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 357e77eb..fcf417fa 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 a9a2b9ff..bfc3c2d2 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 6f6496ea78b993f71fff795bc2c4fb4ca0bcb384..41165293685c3b2b19173608e27a59f18c9a0c0f 100644 GIT binary patch delta 43 tcmZo+YGIo2K&9yEoj7g=My4~|oD9roxmi{-dzY)u0EwIhiJS+C001Op3#tGB delta 43 tcmZo+YGIo2K!x?9y%;wGBhwacP6p6j7)zeI2oA#Nw7?3eK-5G2uS1~NTfj$C;|XBnG9?I delta 43 tcmaFO_?mITaTRU*wsLL;My96{oD9s*Bv_`ihFJ#80Es*UiM#-b001DT3!eZ0 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 f9112872..4fbc0302 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 01c5913a..b3fab152 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 c5d14aa8..25a8239b 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 781999553fb1bdf0da4de14f67bb1c6ed825d2e7..e6c6f55dc4d7d6f074fbbc6b37331a1b5e8539ce 100644 GIT binary patch delta 43 tcmZo;YGa!4NG0gSt0Zm)MyA;koD9r!Bv{rnF1VJ#0uq@65}5}Q0RSQ*3w!_o delta 43 scmZo;YGa!4NQLc{ryw^2BU7^kCj)bf1j~BHk}JmxK_V?6kv5PB0Q$cQegFUf 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 b2dcc8e5..189c9288 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 84ab464f..7ffd4884 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 0b2915f8..f4243bff 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 b7a49f60afb5ad4f96adfb86f15880fcf5f48fb7..3449f77f6539eb8daf3f43bc54d7e5113a0c7b89 100644 GIT binary patch delta 43 scmZo+YGIo2K&6V|<3w%-My3T4oD9qhC0JTnl>H<;K_Ux5B8x#H0Qn~gq5uE@ delta 43 scmZo+YGIo2Kqa2}!(?s-My3u4P6p;q36@qCw@ArokVq#;q#Gmx0Q3V1YybcN 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 ccc3a087..99b1ae22 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 187365d3..80ce2f8a 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 dd2e0ad7..41368ce8 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 309ac885a31f1a75db6d70b3232b77154e230ef4..ac776c278aee6672f6e53dc16b9840cfb458fea8 100644 GIT binary patch delta 43 tcmaFJ_>ghJUX`s==V@~@FfyGH_}FGDzesNaQ?71OPGw3>N?Z delta 43 tcmaFJ_>ghJUKOW>jW4+w7@4++axyS)6=m7Z7`?hT`NMt)m1OPmQ43_`^ 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 83271a74..7090b943 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 9c4b7aa8..850d0929 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 22a7a190..04dc49a6 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 f1f220c77fe1dfb6d41dbf6a1914b106f4d710da..0d7e0dfa131662829f4e702f8cec607c3a5f15c1 100644 GIT binary patch delta 43 tcmX@fc#?6#QWdY?7j|+pFfz@T;ACK4Ai?s2`Q`L~(jbuqAdy8N5dcZN4M+e0 delta 43 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 T7#}n0l?y9$_kv0HEfD_)i-oVa delta 3790 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 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 609c7746..b18f5bef 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 031b03646d77a0c3729b361b8569637e7e523f65..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 287 zcmWd(JCXW@fss)vC$%g!CnZVGsj?)sJhM2}IX|}`u_&=5zlfE=LNT)>HMdwVH7zYQ zxujSzFx4mB$G;-ItSUS&B-5Z&&)+}Gq{Kfx#iPW_HMJxpgRz?d3|JY_wN|7AdM8%q z2UeDPRhp(4MCv)^W#k8El}32EeZ)A-WBf1qPm;rDesg*0xko1B mF^I+qQ>T96W?*D$mf&PyZjoSl!~AHO@HCJ}3rM65Bmw~UUsss` diff --git a/packs/gps-monster-features/MANIFEST-003100 b/packs/gps-monster-features/MANIFEST-003100 new file mode 100644 index 0000000000000000000000000000000000000000..bb6838ccaf990be1412ef6f561c9e809d3628671 GIT binary patch literal 490 zcmdnc_^$Id10$nUPHI_dPD+xVQ)NkNd1i5{bAE0?Vo_pAei18!g<@t&YHqP!YFb)q za!IjbV5(2LkAFpaSygymNTxxlp1*&VNr``Yibsi;YidbI24gn^7_c(RL$oTomxr30 z`?*_0MuZw0o0MlTeqaQvU}u^vajb(`Q86t)CndG0Skc5J$IHaWyrMEVEHbLf)rD~h zL?OBxDhmueJxj}qU9-JX%)GtB^}=&1g9BWEEMHIm{Bn;>#$ynTHxE9#&&|NdG*^O? zfq9+;%SYyA0qge$0!8M5L>5S}d}3y2oG-DS7pGf4K};efAHJ{s>U5a73qj`M@jui| UHlWRHz%XEES|Bl@la}EC0Qr!PD*ylh literal 0 HcmV?d00001 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 2d7d47f1..a3daeab7 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 5dac5cb7..f6c41e5f 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 785ea2e0..bc671ff6 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 3e8c0ba84b1517ff7db5170226b6513c64c904b4..762b2530b53025306352a1bb68009c22bc06ec79 100644 GIT binary patch delta 41 scmX@Xc!F`lGNm)I+zMO_j7*E!I2o9iu(9Z0&UN$z2`m8#ECUJv0O!C7N&o-= delta 41 rcmX@Xc!F`lGNtSF&9}K27@4}+I2o9G*jV&W`0s213G{#j`hWre6;le- 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 6b334390d04078880b8744eba1581bc1f46d3c14..bf9ca4db52bfe87cff638f2ff469af68f03b3fe9 100644 GIT binary patch delta 14426 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 hB+cEV&`L^M+R}p_7AOUoCet>MCM8MB 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 F{{wLS#>)Tz 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 9a890f66..a73b9ee5 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 4bc1d5ba..1fc2e6d1 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 66086959..30b83f03 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 f4e50bf969e1fea14356bddd209daa775c85fab1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 461 zcmX@9|0nGL10$nUPHI_dPD+xVQ)NkNd1i5{bAE0?Vo_pAei18!ykcfaYHqP&VVS>2 zo}YP8aBh-Upjl=h<5D&T5MX75sR*@<@(eR7EA%feDGR6y&1bY`2diLbdL*%+hYP06 zAl)_1uP8mL)Ul#0&&Sk*F@hDW%mQMOUTRueYH~@jVpWnsl1GH4X2 zo}YP8aBh-Upjl=h<5D&T5MX75si?}&GYu~C3Cy)j5AvvVbzw|k2diLb`XaGm1s6=2 zLAq<2Ur~BgsbfW1o{y;qV=6?M1;iq~)U>qJ-Q6pTsIJJ)@AY zd^aaci>Q*k%pi*>bH>RmVDod+fAw-RFf#p<;ACL_FTwJf@9y&47Ldq)kVvB>Py_(e CHALh9 literal 0 HcmV?d00001 diff --git a/scripts/helpers.js b/scripts/helpers.js index 3e6c21e7..a9a415a9 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 00000000..3a564bc1 --- /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 = ` +

+ `; + + 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 c9eb970a..e3de069a 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 772d2ff9..f515b5ca 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 fd14d3e3..f2dd4706 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 00000000..fbec2931 --- /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 03298432..c8e7e51b 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 ec170b46..c94964fa 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 100e6af9..5c2e8921 100644 --- a/templates/classFeaturesSettingsMenu.html +++ b/templates/classFeaturesSettingsMenu.html @@ -131,9 +131,9 @@ - + -