From c11ac527967600a56cef2a9c5504220cfd338b70 Mon Sep 17 00:00:00 2001 From: Gambit Date: Thu, 30 May 2024 11:33:43 -0400 Subject: [PATCH] 0.1.53 --- .github/workflows/main.yml | 8 +- module.json | 2 +- .../{000494.log => 000503.log} | 0 packs/gps-3rd-party-features/CURRENT | 2 +- packs/gps-3rd-party-features/LOG | 23 +-- packs/gps-3rd-party-features/LOG.old | 16 +- packs/gps-3rd-party-features/MANIFEST-000492 | Bin 476 -> 0 bytes packs/gps-3rd-party-features/MANIFEST-000501 | Bin 0 -> 225 bytes .../{000492.log => 000500.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-000490 => MANIFEST-000498} | Bin 224 -> 224 bytes .../{000499.log => 000507.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-000497 => MANIFEST-000505} | Bin 233 -> 233 bytes packs/gps-actors/{000964.log => 000972.log} | 0 packs/gps-actors/CURRENT | 2 +- packs/gps-actors/LOG | 16 +- packs/gps-actors/LOG.old | 16 +- .../{MANIFEST-000962 => MANIFEST-000970} | Bin 272 -> 272 bytes .../{002140.log => 002148.log} | 0 packs/gps-class-features/CURRENT | 2 +- packs/gps-class-features/LOG | 16 +- packs/gps-class-features/LOG.old | 16 +- .../{MANIFEST-002138 => MANIFEST-002146} | Bin 287 -> 287 bytes packs/gps-generic-features/002219.ldb | Bin 29789 -> 0 bytes .../{002217.log => 002227.log} | 0 packs/gps-generic-features/002229.ldb | Bin 0 -> 9581 bytes packs/gps-generic-features/CURRENT | 2 +- packs/gps-generic-features/LOG | 30 +-- packs/gps-generic-features/LOG.old | 23 ++- packs/gps-generic-features/MANIFEST-002215 | Bin 512 -> 0 bytes packs/gps-generic-features/MANIFEST-002225 | Bin 0 -> 510 bytes .../{002120.log => 002128.log} | 0 packs/gps-homebrew-features/CURRENT | 2 +- packs/gps-homebrew-features/LOG | 16 +- packs/gps-homebrew-features/LOG.old | 16 +- .../{MANIFEST-002118 => MANIFEST-002126} | Bin 285 -> 285 bytes .../{002129.log => 002137.log} | 0 packs/gps-homebrew-items/CURRENT | 2 +- packs/gps-homebrew-items/LOG | 16 +- packs/gps-homebrew-items/LOG.old | 16 +- .../{MANIFEST-002127 => MANIFEST-002135} | Bin 235 -> 235 bytes .../{001797.log => 001805.log} | 0 packs/gps-homebrew-spells/CURRENT | 2 +- packs/gps-homebrew-spells/LOG | 16 +- packs/gps-homebrew-spells/LOG.old | 16 +- .../{MANIFEST-001795 => MANIFEST-001803} | Bin 225 -> 225 bytes packs/gps-items/{002122.log => 002130.log} | 0 packs/gps-items/CURRENT | 2 +- packs/gps-items/LOG | 16 +- packs/gps-items/LOG.old | 16 +- .../{MANIFEST-002120 => MANIFEST-002128} | Bin 201 -> 201 bytes .../{002120.log => 002128.log} | 0 packs/gps-monster-features/CURRENT | 2 +- packs/gps-monster-features/LOG | 16 +- packs/gps-monster-features/LOG.old | 16 +- .../{MANIFEST-002118 => MANIFEST-002126} | Bin 285 -> 285 bytes packs/gps-spells/{002168.log => 002176.log} | 0 packs/gps-spells/CURRENT | 2 +- packs/gps-spells/LOG | 16 +- packs/gps-spells/LOG.old | 16 +- .../{MANIFEST-002166 => MANIFEST-002174} | Bin 235 -> 235 bytes scripts/macros/opportunityAttack.js | 193 +++++++++++++----- scripts/module.js | 1 - 68 files changed, 362 insertions(+), 278 deletions(-) rename packs/gps-3rd-party-features/{000494.log => 000503.log} (100%) delete mode 100644 packs/gps-3rd-party-features/MANIFEST-000492 create mode 100644 packs/gps-3rd-party-features/MANIFEST-000501 rename packs/gps-3rd-party-items/{000492.log => 000500.log} (100%) rename packs/gps-3rd-party-items/{MANIFEST-000490 => MANIFEST-000498} (57%) rename packs/gps-3rd-party-spells/{000499.log => 000507.log} (100%) rename packs/gps-3rd-party-spells/{MANIFEST-000497 => MANIFEST-000505} (82%) rename packs/gps-actors/{000964.log => 000972.log} (100%) rename packs/gps-actors/{MANIFEST-000962 => MANIFEST-000970} (70%) rename packs/gps-class-features/{002140.log => 002148.log} (100%) rename packs/gps-class-features/{MANIFEST-002138 => MANIFEST-002146} (66%) delete mode 100644 packs/gps-generic-features/002219.ldb rename packs/gps-generic-features/{002217.log => 002227.log} (100%) create mode 100644 packs/gps-generic-features/002229.ldb delete mode 100644 packs/gps-generic-features/MANIFEST-002215 create mode 100644 packs/gps-generic-features/MANIFEST-002225 rename packs/gps-homebrew-features/{002120.log => 002128.log} (100%) rename packs/gps-homebrew-features/{MANIFEST-002118 => MANIFEST-002126} (67%) rename packs/gps-homebrew-items/{002129.log => 002137.log} (100%) rename packs/gps-homebrew-items/{MANIFEST-002127 => MANIFEST-002135} (81%) rename packs/gps-homebrew-spells/{001797.log => 001805.log} (100%) rename packs/gps-homebrew-spells/{MANIFEST-001795 => MANIFEST-001803} (56%) rename packs/gps-items/{002122.log => 002130.log} (100%) rename packs/gps-items/{MANIFEST-002120 => MANIFEST-002128} (63%) rename packs/gps-monster-features/{002120.log => 002128.log} (100%) rename packs/gps-monster-features/{MANIFEST-002118 => MANIFEST-002126} (67%) rename packs/gps-spells/{002168.log => 002176.log} (100%) rename packs/gps-spells/{MANIFEST-002166 => MANIFEST-002174} (81%) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 0346265f..98ce4f0d 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -18,14 +18,8 @@ jobs: - name: Set Release Notes for Github id: set-release-notes-github run: | - echo "- General:" >> release_notes.txt - echo " - Settings: Reworked settings implementation so that a browser refresh is no longer needed when updating a given setting." >> release_notes.txt - echo "- Additions:" >> release_notes.txt - echo " - Hex: Automation for the Witch classes Hexing 3rd party reaction. Required changing the name of the item to Witches Hex in order to avoid unwanted crossover with the Hex spell." >> release_notes.txt echo "- Updates:" >> release_notes.txt - echo " - Opportunity Attack: Big update. Re-worked the deployment implementation. Canvas freezing has been resolved, template outlines displaying until the ruler is clicked has been resolved. Deployment should be much faster." >> release_notes.txt - echo "- Bugfixes:" >> release_notes.txt - echo " - Poetry in Misery: Add additional validation check for rogue save hooks firing." >> release_notes.txt + echo " - Opportunity Attack: Second big update. Removed need for an Opportunity Attack item which has been removed. Updated deployment to finally fix canvas freezing on combat start definitivelyTM. Fix bug when selecting a favorited weapon for the first time where the attack would not process. Fix bug with Walled Templates display template on token hover suppression flag. Hugely increase speed of deployment. Most instances should now be looking at a couple seconds of additional processing time max when starting combat." >> release_notes.txt echo "release-notes-github<> $GITHUB_ENV cat release_notes.txt >> $GITHUB_ENV echo "EOF" >> $GITHUB_ENV diff --git a/module.json b/module.json index 431ee74d..f3f7bd2a 100644 --- a/module.json +++ b/module.json @@ -7,7 +7,7 @@ "name": "Gambit" } ], - "version": "0.1.52", + "version": "0.1.53", "compatibility": { "minimum": "11", "verified": "11", diff --git a/packs/gps-3rd-party-features/000494.log b/packs/gps-3rd-party-features/000503.log similarity index 100% rename from packs/gps-3rd-party-features/000494.log rename to packs/gps-3rd-party-features/000503.log diff --git a/packs/gps-3rd-party-features/CURRENT b/packs/gps-3rd-party-features/CURRENT index b6a0fcf0..b9260078 100644 --- a/packs/gps-3rd-party-features/CURRENT +++ b/packs/gps-3rd-party-features/CURRENT @@ -1 +1 @@ -MANIFEST-000492 +MANIFEST-000501 diff --git a/packs/gps-3rd-party-features/LOG b/packs/gps-3rd-party-features/LOG index ff168b88..f84f8648 100644 --- a/packs/gps-3rd-party-features/LOG +++ b/packs/gps-3rd-party-features/LOG @@ -1,15 +1,8 @@ -2024/05/29-20:37:30.274 6aa0 Recovering log #490 -2024/05/29-20:37:30.285 6aa0 Delete type=0 #490 -2024/05/29-20:37:30.286 6aa0 Delete type=3 #488 -2024/05/29-23:45:18.365 5698 Level-0 table #495: started -2024/05/29-23:45:18.373 5698 Level-0 table #495: 10865 bytes OK -2024/05/29-23:45:18.376 5698 Delete type=0 #493 -2024/05/29-23:45:18.380 5698 Manual compaction at level-0 from '!folders!4Ecsdk7k1FvMs9OF' @ 72057594037927935 : 1 .. '!items.effects!G2IDv711EWrOF7ef.kE7T0D7E6CnMvjvr' @ 0 : 0; will stop at (end) -2024/05/29-23:45:18.380 5698 Manual compaction at level-1 from '!folders!4Ecsdk7k1FvMs9OF' @ 72057594037927935 : 1 .. '!items.effects!G2IDv711EWrOF7ef.kE7T0D7E6CnMvjvr' @ 0 : 0; will stop at '!items.effects!y6y7B3DSHbduxFDF.qKj7KcuvbZ2tAJ5t' @ 17 : 1 -2024/05/29-23:45:18.380 5698 Compacting 1@1 + 1@2 files -2024/05/29-23:45:18.393 5698 Generated table #496@1: 7 keys, 12359 bytes -2024/05/29-23:45:18.393 5698 Compacted 1@1 + 1@2 files => 12359 bytes -2024/05/29-23:45:18.397 5698 compacted to: files[ 0 0 1 0 0 0 0 ] -2024/05/29-23:45:18.397 5698 Delete type=2 #439 -2024/05/29-23:45:18.397 5698 Delete type=2 #495 -2024/05/29-23:45:18.404 5698 Manual compaction at level-1 from '!items.effects!y6y7B3DSHbduxFDF.qKj7KcuvbZ2tAJ5t' @ 17 : 1 .. '!items.effects!G2IDv711EWrOF7ef.kE7T0D7E6CnMvjvr' @ 0 : 0; will stop at (end) +2024/05/30-00:06:21.465 6b00 Recovering log #499 +2024/05/30-00:06:21.476 6b00 Delete type=0 #499 +2024/05/30-00:06:21.476 6b00 Delete type=3 #497 +2024/05/30-11:29:13.361 5698 Level-0 table #504: started +2024/05/30-11:29:13.361 5698 Level-0 table #504: 0 bytes OK +2024/05/30-11:29:13.366 5698 Delete type=0 #502 +2024/05/30-11:29:13.366 5698 Manual compaction at level-0 from '!folders!4Ecsdk7k1FvMs9OF' @ 72057594037927935 : 1 .. '!items.effects!G2IDv711EWrOF7ef.kE7T0D7E6CnMvjvr' @ 0 : 0; will stop at (end) +2024/05/30-11:29:13.367 5698 Manual compaction at level-1 from '!folders!4Ecsdk7k1FvMs9OF' @ 72057594037927935 : 1 .. '!items.effects!G2IDv711EWrOF7ef.kE7T0D7E6CnMvjvr' @ 0 : 0; will stop at (end) diff --git a/packs/gps-3rd-party-features/LOG.old b/packs/gps-3rd-party-features/LOG.old index d3013883..458dc114 100644 --- a/packs/gps-3rd-party-features/LOG.old +++ b/packs/gps-3rd-party-features/LOG.old @@ -1,8 +1,8 @@ -2024/05/29-10:23:20.558 6aa0 Recovering log #486 -2024/05/29-10:23:20.564 6aa0 Delete type=0 #486 -2024/05/29-10:23:20.564 6aa0 Delete type=3 #484 -2024/05/29-20:37:15.382 5698 Level-0 table #491: started -2024/05/29-20:37:15.382 5698 Level-0 table #491: 0 bytes OK -2024/05/29-20:37:15.384 5698 Delete type=0 #489 -2024/05/29-20:37:15.387 5698 Manual compaction at level-0 from '!folders!4Ecsdk7k1FvMs9OF' @ 72057594037927935 : 1 .. '!items.effects!G2IDv711EWrOF7ef.kE7T0D7E6CnMvjvr' @ 0 : 0; will stop at (end) -2024/05/29-20:37:15.388 5698 Manual compaction at level-1 from '!folders!4Ecsdk7k1FvMs9OF' @ 72057594037927935 : 1 .. '!items.effects!G2IDv711EWrOF7ef.kE7T0D7E6CnMvjvr' @ 0 : 0; will stop at (end) +2024/05/30-00:00:46.366 6b00 Recovering log #494 +2024/05/30-00:00:46.372 6b00 Delete type=0 #494 +2024/05/30-00:00:46.372 6b00 Delete type=3 #492 +2024/05/30-00:05:36.002 5698 Level-0 table #500: started +2024/05/30-00:05:36.002 5698 Level-0 table #500: 0 bytes OK +2024/05/30-00:05:36.006 5698 Delete type=0 #498 +2024/05/30-00:05:36.015 5698 Manual compaction at level-0 from '!folders!4Ecsdk7k1FvMs9OF' @ 72057594037927935 : 1 .. '!items.effects!G2IDv711EWrOF7ef.kE7T0D7E6CnMvjvr' @ 0 : 0; will stop at (end) +2024/05/30-00:05:36.015 5698 Manual compaction at level-1 from '!folders!4Ecsdk7k1FvMs9OF' @ 72057594037927935 : 1 .. '!items.effects!G2IDv711EWrOF7ef.kE7T0D7E6CnMvjvr' @ 0 : 0; will stop at (end) diff --git a/packs/gps-3rd-party-features/MANIFEST-000492 b/packs/gps-3rd-party-features/MANIFEST-000492 deleted file mode 100644 index b3fd384994468081165a4fe3982962c224d564a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 476 zcmaFyd8gle21Z7yoYb<^oRlOzr^=Gl^338?=ltA)#G=HK{32FHdBx0<)ZAi4H>pF)cqQCAFwn(Zn^mI3?RW+t97dx7gC(jgcLq z&H`eNUTRueYH~@jqPvl&OPRT$p=)@Nzngh#nqIc6d5D3FxvQCTo^M%JSrH=#MB|j? zPxf34j7)EtIT@JWF|!DKyS$ep6DaTwB=CWmMTVX6J@dy9m_sYgD$SjYU4lK5Qc5e_ zT-+FCusZ-qJ z- literal 0 HcmV?d00001 diff --git a/packs/gps-3rd-party-items/000492.log b/packs/gps-3rd-party-items/000500.log similarity index 100% rename from packs/gps-3rd-party-items/000492.log rename to packs/gps-3rd-party-items/000500.log diff --git a/packs/gps-3rd-party-items/CURRENT b/packs/gps-3rd-party-items/CURRENT index 3b626eef..b8caea65 100644 --- a/packs/gps-3rd-party-items/CURRENT +++ b/packs/gps-3rd-party-items/CURRENT @@ -1 +1 @@ -MANIFEST-000490 +MANIFEST-000498 diff --git a/packs/gps-3rd-party-items/LOG b/packs/gps-3rd-party-items/LOG index 51b0007a..6ca83f1a 100644 --- a/packs/gps-3rd-party-items/LOG +++ b/packs/gps-3rd-party-items/LOG @@ -1,8 +1,8 @@ -2024/05/29-20:37:30.301 6b00 Recovering log #488 -2024/05/29-20:37:30.313 6b00 Delete type=0 #488 -2024/05/29-20:37:30.313 6b00 Delete type=3 #486 -2024/05/29-23:45:18.361 5698 Level-0 table #493: started -2024/05/29-23:45:18.361 5698 Level-0 table #493: 0 bytes OK -2024/05/29-23:45:18.365 5698 Delete type=0 #491 -2024/05/29-23:45:18.380 5698 Manual compaction at level-0 from '!items!A4JIbc14vM5IKbuT' @ 72057594037927935 : 1 .. '!items.effects!qHY9RXV48OmvCrw1.UNiU6zoPTpbrxoIA' @ 0 : 0; will stop at (end) -2024/05/29-23:45:18.398 5698 Manual compaction at level-1 from '!items!A4JIbc14vM5IKbuT' @ 72057594037927935 : 1 .. '!items.effects!qHY9RXV48OmvCrw1.UNiU6zoPTpbrxoIA' @ 0 : 0; will stop at (end) +2024/05/30-00:06:21.479 6834 Recovering log #496 +2024/05/30-00:06:21.489 6834 Delete type=0 #496 +2024/05/30-00:06:21.489 6834 Delete type=3 #494 +2024/05/30-11:29:13.377 5698 Level-0 table #501: started +2024/05/30-11:29:13.377 5698 Level-0 table #501: 0 bytes OK +2024/05/30-11:29:13.382 5698 Delete type=0 #499 +2024/05/30-11:29:13.395 5698 Manual compaction at level-0 from '!items!A4JIbc14vM5IKbuT' @ 72057594037927935 : 1 .. '!items.effects!qHY9RXV48OmvCrw1.UNiU6zoPTpbrxoIA' @ 0 : 0; will stop at (end) +2024/05/30-11:29:13.395 5698 Manual compaction at level-1 from '!items!A4JIbc14vM5IKbuT' @ 72057594037927935 : 1 .. '!items.effects!qHY9RXV48OmvCrw1.UNiU6zoPTpbrxoIA' @ 0 : 0; will stop at (end) diff --git a/packs/gps-3rd-party-items/LOG.old b/packs/gps-3rd-party-items/LOG.old index 7c45bdfa..2db8e31c 100644 --- a/packs/gps-3rd-party-items/LOG.old +++ b/packs/gps-3rd-party-items/LOG.old @@ -1,8 +1,8 @@ -2024/05/29-10:23:20.569 683c Recovering log #484 -2024/05/29-10:23:20.574 683c Delete type=0 #484 -2024/05/29-10:23:20.574 683c Delete type=3 #482 -2024/05/29-20:37:15.398 5698 Level-0 table #489: started -2024/05/29-20:37:15.398 5698 Level-0 table #489: 0 bytes OK -2024/05/29-20:37:15.400 5698 Delete type=0 #487 -2024/05/29-20:37:15.400 5698 Manual compaction at level-0 from '!items!A4JIbc14vM5IKbuT' @ 72057594037927935 : 1 .. '!items.effects!qHY9RXV48OmvCrw1.UNiU6zoPTpbrxoIA' @ 0 : 0; will stop at (end) -2024/05/29-20:37:15.400 5698 Manual compaction at level-1 from '!items!A4JIbc14vM5IKbuT' @ 72057594037927935 : 1 .. '!items.effects!qHY9RXV48OmvCrw1.UNiU6zoPTpbrxoIA' @ 0 : 0; will stop at (end) +2024/05/30-00:00:46.374 683c Recovering log #492 +2024/05/30-00:00:46.379 683c Delete type=0 #492 +2024/05/30-00:00:46.380 683c Delete type=3 #490 +2024/05/30-00:05:36.011 5698 Level-0 table #497: started +2024/05/30-00:05:36.011 5698 Level-0 table #497: 0 bytes OK +2024/05/30-00:05:36.015 5698 Delete type=0 #495 +2024/05/30-00:05:36.015 5698 Manual compaction at level-0 from '!items!A4JIbc14vM5IKbuT' @ 72057594037927935 : 1 .. '!items.effects!qHY9RXV48OmvCrw1.UNiU6zoPTpbrxoIA' @ 0 : 0; will stop at (end) +2024/05/30-00:05:36.016 5698 Manual compaction at level-1 from '!items!A4JIbc14vM5IKbuT' @ 72057594037927935 : 1 .. '!items.effects!qHY9RXV48OmvCrw1.UNiU6zoPTpbrxoIA' @ 0 : 0; will stop at (end) diff --git a/packs/gps-3rd-party-items/MANIFEST-000490 b/packs/gps-3rd-party-items/MANIFEST-000498 similarity index 57% rename from packs/gps-3rd-party-items/MANIFEST-000490 rename to packs/gps-3rd-party-items/MANIFEST-000498 index 524cd67f06a243cc9b69a6017ecf22895a97fc23..ed2acd3ec0114a77dbe104c0f98547586feb2548 100644 GIT binary patch delta 41 scmaFB_<(W3J|*_0r?+u2Ffx5+=44?0!ptK3!-TO2B=7|!@C_&c02&+%Pyhe` delta 41 scmaFB_<(W3KBY3wPoi85j7+bYIT@JWFtf;J-n`=l5_kg=cn1^!01vebQUCw| diff --git a/packs/gps-3rd-party-spells/000499.log b/packs/gps-3rd-party-spells/000507.log similarity index 100% rename from packs/gps-3rd-party-spells/000499.log rename to packs/gps-3rd-party-spells/000507.log diff --git a/packs/gps-3rd-party-spells/CURRENT b/packs/gps-3rd-party-spells/CURRENT index 4dc67d5c..ee7cf6d2 100644 --- a/packs/gps-3rd-party-spells/CURRENT +++ b/packs/gps-3rd-party-spells/CURRENT @@ -1 +1 @@ -MANIFEST-000497 +MANIFEST-000505 diff --git a/packs/gps-3rd-party-spells/LOG b/packs/gps-3rd-party-spells/LOG index 5e8fd0b6..04b2e551 100644 --- a/packs/gps-3rd-party-spells/LOG +++ b/packs/gps-3rd-party-spells/LOG @@ -1,8 +1,8 @@ -2024/05/29-20:37:30.331 6aa0 Recovering log #495 -2024/05/29-20:37:30.344 6aa0 Delete type=0 #495 -2024/05/29-20:37:30.345 6aa0 Delete type=3 #493 -2024/05/29-23:45:18.398 5698 Level-0 table #500: started -2024/05/29-23:45:18.398 5698 Level-0 table #500: 0 bytes OK -2024/05/29-23:45:18.404 5698 Delete type=0 #498 -2024/05/29-23:45:18.412 5698 Manual compaction at level-0 from '!items!2YNbYocBRdEDgO4Q' @ 72057594037927935 : 1 .. '!items.effects!sR2IAM3IQAq6m4xU.N6BqEfnUtgKmw2xw' @ 0 : 0; will stop at (end) -2024/05/29-23:45:18.415 5698 Manual compaction at level-1 from '!items!2YNbYocBRdEDgO4Q' @ 72057594037927935 : 1 .. '!items.effects!sR2IAM3IQAq6m4xU.N6BqEfnUtgKmw2xw' @ 0 : 0; will stop at (end) +2024/05/30-00:06:21.493 6b00 Recovering log #503 +2024/05/30-00:06:21.500 6b00 Delete type=0 #503 +2024/05/30-00:06:21.500 6b00 Delete type=3 #501 +2024/05/30-11:29:13.383 5698 Level-0 table #508: started +2024/05/30-11:29:13.383 5698 Level-0 table #508: 0 bytes OK +2024/05/30-11:29:13.389 5698 Delete type=0 #506 +2024/05/30-11:29:13.395 5698 Manual compaction at level-0 from '!items!2YNbYocBRdEDgO4Q' @ 72057594037927935 : 1 .. '!items.effects!sR2IAM3IQAq6m4xU.N6BqEfnUtgKmw2xw' @ 0 : 0; will stop at (end) +2024/05/30-11:29:13.395 5698 Manual compaction at level-1 from '!items!2YNbYocBRdEDgO4Q' @ 72057594037927935 : 1 .. '!items.effects!sR2IAM3IQAq6m4xU.N6BqEfnUtgKmw2xw' @ 0 : 0; will stop at (end) diff --git a/packs/gps-3rd-party-spells/LOG.old b/packs/gps-3rd-party-spells/LOG.old index e83db9a0..5bde1478 100644 --- a/packs/gps-3rd-party-spells/LOG.old +++ b/packs/gps-3rd-party-spells/LOG.old @@ -1,8 +1,8 @@ -2024/05/29-10:23:20.580 6aa0 Recovering log #489 -2024/05/29-10:23:20.585 6aa0 Delete type=0 #489 -2024/05/29-10:23:20.585 6aa0 Delete type=3 #486 -2024/05/29-20:37:15.389 5698 Level-0 table #496: started -2024/05/29-20:37:15.389 5698 Level-0 table #496: 0 bytes OK -2024/05/29-20:37:15.392 5698 Delete type=0 #494 -2024/05/29-20:37:15.400 5698 Manual compaction at level-0 from '!items!2YNbYocBRdEDgO4Q' @ 72057594037927935 : 1 .. '!items.effects!sR2IAM3IQAq6m4xU.N6BqEfnUtgKmw2xw' @ 0 : 0; will stop at (end) -2024/05/29-20:37:15.400 5698 Manual compaction at level-1 from '!items!2YNbYocBRdEDgO4Q' @ 72057594037927935 : 1 .. '!items.effects!sR2IAM3IQAq6m4xU.N6BqEfnUtgKmw2xw' @ 0 : 0; will stop at (end) +2024/05/30-00:00:46.382 6b00 Recovering log #499 +2024/05/30-00:00:46.388 6b00 Delete type=0 #499 +2024/05/30-00:00:46.388 6b00 Delete type=3 #497 +2024/05/30-00:05:36.019 5698 Level-0 table #504: started +2024/05/30-00:05:36.019 5698 Level-0 table #504: 0 bytes OK +2024/05/30-00:05:36.025 5698 Delete type=0 #502 +2024/05/30-00:05:36.042 5698 Manual compaction at level-0 from '!items!2YNbYocBRdEDgO4Q' @ 72057594037927935 : 1 .. '!items.effects!sR2IAM3IQAq6m4xU.N6BqEfnUtgKmw2xw' @ 0 : 0; will stop at (end) +2024/05/30-00:05:36.042 5698 Manual compaction at level-1 from '!items!2YNbYocBRdEDgO4Q' @ 72057594037927935 : 1 .. '!items.effects!sR2IAM3IQAq6m4xU.N6BqEfnUtgKmw2xw' @ 0 : 0; will stop at (end) diff --git a/packs/gps-3rd-party-spells/MANIFEST-000497 b/packs/gps-3rd-party-spells/MANIFEST-000505 similarity index 82% rename from packs/gps-3rd-party-spells/MANIFEST-000497 rename to packs/gps-3rd-party-spells/MANIFEST-000505 index bd1a9987a7d892ef7d7d6fe6749066d0d9ea8569..a4f2854e6ec9a68e90029ebe7a8eb82ee6459894 100644 GIT binary patch delta 41 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 Q$v<`9t-C#=XZET81(l=6*8l(j diff --git a/packs/gps-generic-features/002217.log b/packs/gps-generic-features/002227.log similarity index 100% rename from packs/gps-generic-features/002217.log rename to packs/gps-generic-features/002227.log diff --git a/packs/gps-generic-features/002229.ldb b/packs/gps-generic-features/002229.ldb new file mode 100644 index 0000000000000000000000000000000000000000..b9009ffac3141cff0b27514c64a2ed8035fa3dcd GIT binary patch literal 9581 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 literal 0 HcmV?d00001 diff --git a/packs/gps-generic-features/CURRENT b/packs/gps-generic-features/CURRENT index 3d871d98..ac2827ec 100644 --- a/packs/gps-generic-features/CURRENT +++ b/packs/gps-generic-features/CURRENT @@ -1 +1 @@ -MANIFEST-002215 +MANIFEST-002225 diff --git a/packs/gps-generic-features/LOG b/packs/gps-generic-features/LOG index d63a84ce..6c93d048 100644 --- a/packs/gps-generic-features/LOG +++ b/packs/gps-generic-features/LOG @@ -1,15 +1,15 @@ -2024/05/29-20:37:30.138 6aa0 Recovering log #2213 -2024/05/29-20:37:30.148 6aa0 Delete type=0 #2213 -2024/05/29-20:37:30.148 6aa0 Delete type=3 #2211 -2024/05/29-23:45:18.303 5698 Level-0 table #2218: started -2024/05/29-23:45:18.318 5698 Level-0 table #2218: 20347 bytes OK -2024/05/29-23:45:18.321 5698 Delete type=0 #2216 -2024/05/29-23:45:18.322 5698 Manual compaction at level-0 from '!items!0XoQ7lGPSwjM8Gw4' @ 72057594037927935 : 1 .. '!items.effects!svKaRfNtOXMOXoW6.NcYMpQ7B3RwBuLC7' @ 0 : 0; will stop at (end) -2024/05/29-23:45:18.323 5698 Manual compaction at level-1 from '!items!0XoQ7lGPSwjM8Gw4' @ 72057594037927935 : 1 .. '!items.effects!svKaRfNtOXMOXoW6.NcYMpQ7B3RwBuLC7' @ 0 : 0; will stop at '!items.effects!dTFcLHRsLxw4R7PQ.1IkBgxOFEYJd4z53' @ 574 : 0 -2024/05/29-23:45:18.323 5698 Compacting 1@1 + 1@2 files -2024/05/29-23:45:18.337 5698 Generated table #2219@1: 12 keys, 29789 bytes -2024/05/29-23:45:18.337 5698 Compacted 1@1 + 1@2 files => 29789 bytes -2024/05/29-23:45:18.340 5698 compacted to: files[ 0 0 1 0 0 0 0 ] -2024/05/29-23:45:18.341 5698 Delete type=2 #2210 -2024/05/29-23:45:18.341 5698 Delete type=2 #2218 -2024/05/29-23:45:18.353 5698 Manual compaction at level-1 from '!items.effects!dTFcLHRsLxw4R7PQ.1IkBgxOFEYJd4z53' @ 574 : 0 .. '!items.effects!svKaRfNtOXMOXoW6.NcYMpQ7B3RwBuLC7' @ 0 : 0; will stop at (end) +2024/05/30-00:06:21.385 6b00 Recovering log #2222 +2024/05/30-00:06:21.397 6b00 Delete type=0 #2222 +2024/05/30-00:06:21.397 6b00 Delete type=3 #2220 +2024/05/30-11:29:13.295 5698 Level-0 table #2228: started +2024/05/30-11:29:13.314 5698 Level-0 table #2228: 237 bytes OK +2024/05/30-11:29:13.318 5698 Delete type=0 #2226 +2024/05/30-11:29:13.329 5698 Manual compaction at level-0 from '!items!0XoQ7lGPSwjM8Gw4' @ 72057594037927935 : 1 .. '!items.effects!svKaRfNtOXMOXoW6.NcYMpQ7B3RwBuLC7' @ 0 : 0; will stop at (end) +2024/05/30-11:29:13.329 5698 Manual compaction at level-1 from '!items!0XoQ7lGPSwjM8Gw4' @ 72057594037927935 : 1 .. '!items.effects!svKaRfNtOXMOXoW6.NcYMpQ7B3RwBuLC7' @ 0 : 0; will stop at '!items.effects!YWXTlGDKC2GH5VAS.1IkBgxOFEYJd4z53' @ 580 : 0 +2024/05/30-11:29:13.329 5698 Compacting 1@1 + 1@2 files +2024/05/30-11:29:13.341 5698 Generated table #2229@1: 10 keys, 9581 bytes +2024/05/30-11:29:13.341 5698 Compacted 1@1 + 1@2 files => 9581 bytes +2024/05/30-11:29:13.345 5698 compacted to: files[ 0 0 1 0 0 0 0 ] +2024/05/30-11:29:13.345 5698 Delete type=2 #2224 +2024/05/30-11:29:13.346 5698 Delete type=2 #2228 +2024/05/30-11:29:13.351 5698 Manual compaction at level-1 from '!items.effects!YWXTlGDKC2GH5VAS.1IkBgxOFEYJd4z53' @ 580 : 0 .. '!items.effects!svKaRfNtOXMOXoW6.NcYMpQ7B3RwBuLC7' @ 0 : 0; will stop at (end) diff --git a/packs/gps-generic-features/LOG.old b/packs/gps-generic-features/LOG.old index 90253d89..91d8b6fd 100644 --- a/packs/gps-generic-features/LOG.old +++ b/packs/gps-generic-features/LOG.old @@ -1,8 +1,15 @@ -2024/05/29-10:23:20.486 6aa0 Recovering log #2207 -2024/05/29-10:23:20.491 6aa0 Delete type=0 #2207 -2024/05/29-10:23:20.491 6aa0 Delete type=3 #2204 -2024/05/29-20:37:15.365 5698 Level-0 table #2214: started -2024/05/29-20:37:15.365 5698 Level-0 table #2214: 0 bytes OK -2024/05/29-20:37:15.367 5698 Delete type=0 #2212 -2024/05/29-20:37:15.375 5698 Manual compaction at level-0 from '!items!0XoQ7lGPSwjM8Gw4' @ 72057594037927935 : 1 .. '!items.effects!svKaRfNtOXMOXoW6.NcYMpQ7B3RwBuLC7' @ 0 : 0; will stop at (end) -2024/05/29-20:37:15.375 5698 Manual compaction at level-1 from '!items!0XoQ7lGPSwjM8Gw4' @ 72057594037927935 : 1 .. '!items.effects!svKaRfNtOXMOXoW6.NcYMpQ7B3RwBuLC7' @ 0 : 0; will stop at (end) +2024/05/30-00:00:46.316 6b00 Recovering log #2217 +2024/05/30-00:00:46.322 6b00 Delete type=0 #2217 +2024/05/30-00:00:46.322 6b00 Delete type=3 #2215 +2024/05/30-00:05:35.954 5698 Level-0 table #2223: started +2024/05/30-00:05:35.962 5698 Level-0 table #2223: 34431 bytes OK +2024/05/30-00:05:35.966 5698 Delete type=0 #2221 +2024/05/30-00:05:35.967 5698 Manual compaction at level-0 from '!items!0XoQ7lGPSwjM8Gw4' @ 72057594037927935 : 1 .. '!items.effects!svKaRfNtOXMOXoW6.NcYMpQ7B3RwBuLC7' @ 0 : 0; will stop at (end) +2024/05/30-00:05:35.967 5698 Manual compaction at level-1 from '!items!0XoQ7lGPSwjM8Gw4' @ 72057594037927935 : 1 .. '!items.effects!svKaRfNtOXMOXoW6.NcYMpQ7B3RwBuLC7' @ 0 : 0; will stop at '!items!YWXTlGDKC2GH5VAS' @ 578 : 1 +2024/05/30-00:05:35.967 5698 Compacting 1@1 + 1@2 files +2024/05/30-00:05:35.976 5698 Generated table #2224@1: 12 keys, 29831 bytes +2024/05/30-00:05:35.976 5698 Compacted 1@1 + 1@2 files => 29831 bytes +2024/05/30-00:05:35.978 5698 compacted to: files[ 0 0 1 0 0 0 0 ] +2024/05/30-00:05:35.978 5698 Delete type=2 #2219 +2024/05/30-00:05:35.978 5698 Delete type=2 #2223 +2024/05/30-00:05:35.992 5698 Manual compaction at level-1 from '!items!YWXTlGDKC2GH5VAS' @ 578 : 1 .. '!items.effects!svKaRfNtOXMOXoW6.NcYMpQ7B3RwBuLC7' @ 0 : 0; will stop at (end) diff --git a/packs/gps-generic-features/MANIFEST-002215 b/packs/gps-generic-features/MANIFEST-002215 deleted file mode 100644 index 7b3d5e11ffa5f633bed57938a9d5d7867d7c9dfd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 512 zcmdnDXLZ*B21Z7yoYb<^oRlOzr^=Gl^338?=ltA)#G=HK{32EcdBx0<)ZAjlln}RM zACI77pNevmAoGAgMq4HZ5MX5_q=KDkk>H)9aAgJ&`GMv+?g7E&S-uwTY-3{oT)-&|Xc1o}CcXN&ON-?Q2HD<7bXmprYCA1D^;~J2Stc+wE#s+jO T8!*t=nN|zleF1kg)dLOyK(vva diff --git a/packs/gps-generic-features/MANIFEST-002225 b/packs/gps-generic-features/MANIFEST-002225 new file mode 100644 index 0000000000000000000000000000000000000000..fc797930e4b14171e29da8acd643e16bd8f3c68d GIT binary patch literal 510 zcmXRs^Va$R10$nUPHI_dPD+xVQ)NkNd1i5{bAE0?Vo_pAei18!ykcfaYHqP&N{Cys zk4I3kPer*&ka<8Lqb(By2(U83R78eHgygupcsm=pdzgkf1~WQARIoE`5Nv-5S7s2A zA84NA9uQofjev4ss|eYUJ{Kr literal 0 HcmV?d00001 diff --git a/packs/gps-homebrew-features/002120.log b/packs/gps-homebrew-features/002128.log similarity index 100% rename from packs/gps-homebrew-features/002120.log rename to packs/gps-homebrew-features/002128.log diff --git a/packs/gps-homebrew-features/CURRENT b/packs/gps-homebrew-features/CURRENT index 7cb1b04c..e2d3744f 100644 --- a/packs/gps-homebrew-features/CURRENT +++ b/packs/gps-homebrew-features/CURRENT @@ -1 +1 @@ -MANIFEST-002118 +MANIFEST-002126 diff --git a/packs/gps-homebrew-features/LOG b/packs/gps-homebrew-features/LOG index 96d1d898..b63e9488 100644 --- a/packs/gps-homebrew-features/LOG +++ b/packs/gps-homebrew-features/LOG @@ -1,8 +1,8 @@ -2024/05/29-20:37:30.152 6b00 Recovering log #2116 -2024/05/29-20:37:30.163 6b00 Delete type=0 #2116 -2024/05/29-20:37:30.163 6b00 Delete type=3 #2114 -2024/05/29-23:45:18.349 5698 Level-0 table #2121: started -2024/05/29-23:45:18.349 5698 Level-0 table #2121: 0 bytes OK -2024/05/29-23:45:18.353 5698 Delete type=0 #2119 -2024/05/29-23:45:18.354 5698 Manual compaction at level-0 from '!folders!4OzV9QdsPgTyK99q' @ 72057594037927935 : 1 .. '!items.effects!ba3fwkX1XMdyqBaE.hPR9ii2vho7FqWlZ' @ 0 : 0; will stop at (end) -2024/05/29-23:45:18.354 5698 Manual compaction at level-1 from '!folders!4OzV9QdsPgTyK99q' @ 72057594037927935 : 1 .. '!items.effects!ba3fwkX1XMdyqBaE.hPR9ii2vho7FqWlZ' @ 0 : 0; will stop at (end) +2024/05/30-00:06:21.399 6834 Recovering log #2124 +2024/05/30-00:06:21.408 6834 Delete type=0 #2124 +2024/05/30-00:06:21.409 6834 Delete type=3 #2122 +2024/05/30-11:29:13.318 5698 Level-0 table #2129: started +2024/05/30-11:29:13.318 5698 Level-0 table #2129: 0 bytes OK +2024/05/30-11:29:13.324 5698 Delete type=0 #2127 +2024/05/30-11:29:13.329 5698 Manual compaction at level-0 from '!folders!4OzV9QdsPgTyK99q' @ 72057594037927935 : 1 .. '!items.effects!ba3fwkX1XMdyqBaE.hPR9ii2vho7FqWlZ' @ 0 : 0; will stop at (end) +2024/05/30-11:29:13.346 5698 Manual compaction at level-1 from '!folders!4OzV9QdsPgTyK99q' @ 72057594037927935 : 1 .. '!items.effects!ba3fwkX1XMdyqBaE.hPR9ii2vho7FqWlZ' @ 0 : 0; will stop at (end) diff --git a/packs/gps-homebrew-features/LOG.old b/packs/gps-homebrew-features/LOG.old index 69198aa2..f612b6d7 100644 --- a/packs/gps-homebrew-features/LOG.old +++ b/packs/gps-homebrew-features/LOG.old @@ -1,8 +1,8 @@ -2024/05/29-10:23:20.494 683c Recovering log #2112 -2024/05/29-10:23:20.499 683c Delete type=0 #2112 -2024/05/29-10:23:20.499 683c Delete type=3 #2110 -2024/05/29-20:37:15.367 5698 Level-0 table #2117: started -2024/05/29-20:37:15.367 5698 Level-0 table #2117: 0 bytes OK -2024/05/29-20:37:15.370 5698 Delete type=0 #2115 -2024/05/29-20:37:15.375 5698 Manual compaction at level-0 from '!folders!4OzV9QdsPgTyK99q' @ 72057594037927935 : 1 .. '!items.effects!ba3fwkX1XMdyqBaE.hPR9ii2vho7FqWlZ' @ 0 : 0; will stop at (end) -2024/05/29-20:37:15.375 5698 Manual compaction at level-1 from '!folders!4OzV9QdsPgTyK99q' @ 72057594037927935 : 1 .. '!items.effects!ba3fwkX1XMdyqBaE.hPR9ii2vho7FqWlZ' @ 0 : 0; will stop at (end) +2024/05/30-00:00:46.323 683c Recovering log #2120 +2024/05/30-00:00:46.329 683c Delete type=0 #2120 +2024/05/30-00:00:46.329 683c Delete type=3 #2118 +2024/05/30-00:05:35.983 5698 Level-0 table #2125: started +2024/05/30-00:05:35.983 5698 Level-0 table #2125: 0 bytes OK +2024/05/30-00:05:35.987 5698 Delete type=0 #2123 +2024/05/30-00:05:35.992 5698 Manual compaction at level-0 from '!folders!4OzV9QdsPgTyK99q' @ 72057594037927935 : 1 .. '!items.effects!ba3fwkX1XMdyqBaE.hPR9ii2vho7FqWlZ' @ 0 : 0; will stop at (end) +2024/05/30-00:05:35.992 5698 Manual compaction at level-1 from '!folders!4OzV9QdsPgTyK99q' @ 72057594037927935 : 1 .. '!items.effects!ba3fwkX1XMdyqBaE.hPR9ii2vho7FqWlZ' @ 0 : 0; will stop at (end) diff --git a/packs/gps-homebrew-features/MANIFEST-002118 b/packs/gps-homebrew-features/MANIFEST-002126 similarity index 67% rename from packs/gps-homebrew-features/MANIFEST-002118 rename to packs/gps-homebrew-features/MANIFEST-002126 index 890d55baf79ae9b40db1d0ce33b91940d7a2b730..d0ac6542f21cb97e8e9f6a16315f004d07e37cab 100644 GIT binary patch delta 41 scmbQsG?!_@ZzXZlnT1>oj7;YRI2o8P2(YBh;5MlQ30wdPTmlLJ0PR)^82|tP delta 41 rcmbQsG?!_@Z>7Tbf<{~nj7-M`I2o8v2(YAi=1Ycv1WteiP5}h~^eGA( diff --git a/packs/gps-homebrew-items/002129.log b/packs/gps-homebrew-items/002137.log similarity index 100% rename from packs/gps-homebrew-items/002129.log rename to packs/gps-homebrew-items/002137.log diff --git a/packs/gps-homebrew-items/CURRENT b/packs/gps-homebrew-items/CURRENT index ed675cc1..966b72be 100644 --- a/packs/gps-homebrew-items/CURRENT +++ b/packs/gps-homebrew-items/CURRENT @@ -1 +1 @@ -MANIFEST-002127 +MANIFEST-002135 diff --git a/packs/gps-homebrew-items/LOG b/packs/gps-homebrew-items/LOG index bac4b74e..1b1bc08c 100644 --- a/packs/gps-homebrew-items/LOG +++ b/packs/gps-homebrew-items/LOG @@ -1,8 +1,8 @@ -2024/05/29-20:37:30.175 6aa0 Recovering log #2125 -2024/05/29-20:37:30.181 6aa0 Delete type=0 #2125 -2024/05/29-20:37:30.182 6aa0 Delete type=3 #2123 -2024/05/29-23:45:18.342 5698 Level-0 table #2130: started -2024/05/29-23:45:18.342 5698 Level-0 table #2130: 0 bytes OK -2024/05/29-23:45:18.346 5698 Delete type=0 #2128 -2024/05/29-23:45:18.354 5698 Manual compaction at level-0 from '!items!1WSJjnpLJhilXEgO' @ 72057594037927935 : 1 .. '!items.effects!zEXJxqsAmVM7Pohu.eA3jhjz26f35OLfw' @ 0 : 0; will stop at (end) -2024/05/29-23:45:18.354 5698 Manual compaction at level-1 from '!items!1WSJjnpLJhilXEgO' @ 72057594037927935 : 1 .. '!items.effects!zEXJxqsAmVM7Pohu.eA3jhjz26f35OLfw' @ 0 : 0; will stop at (end) +2024/05/30-00:06:21.412 6b00 Recovering log #2133 +2024/05/30-00:06:21.420 6b00 Delete type=0 #2133 +2024/05/30-00:06:21.420 6b00 Delete type=3 #2131 +2024/05/30-11:29:13.346 5698 Level-0 table #2138: started +2024/05/30-11:29:13.346 5698 Level-0 table #2138: 0 bytes OK +2024/05/30-11:29:13.351 5698 Delete type=0 #2136 +2024/05/30-11:29:13.360 5698 Manual compaction at level-0 from '!items!1WSJjnpLJhilXEgO' @ 72057594037927935 : 1 .. '!items.effects!zEXJxqsAmVM7Pohu.eA3jhjz26f35OLfw' @ 0 : 0; will stop at (end) +2024/05/30-11:29:13.366 5698 Manual compaction at level-1 from '!items!1WSJjnpLJhilXEgO' @ 72057594037927935 : 1 .. '!items.effects!zEXJxqsAmVM7Pohu.eA3jhjz26f35OLfw' @ 0 : 0; will stop at (end) diff --git a/packs/gps-homebrew-items/LOG.old b/packs/gps-homebrew-items/LOG.old index 3c87a972..a6557f44 100644 --- a/packs/gps-homebrew-items/LOG.old +++ b/packs/gps-homebrew-items/LOG.old @@ -1,8 +1,8 @@ -2024/05/29-10:23:20.506 6aa0 Recovering log #2121 -2024/05/29-10:23:20.512 6aa0 Delete type=0 #2121 -2024/05/29-10:23:20.512 6aa0 Delete type=3 #2119 -2024/05/29-20:37:15.370 5698 Level-0 table #2126: started -2024/05/29-20:37:15.370 5698 Level-0 table #2126: 0 bytes OK -2024/05/29-20:37:15.372 5698 Delete type=0 #2124 -2024/05/29-20:37:15.375 5698 Manual compaction at level-0 from '!items!1WSJjnpLJhilXEgO' @ 72057594037927935 : 1 .. '!items.effects!zEXJxqsAmVM7Pohu.eA3jhjz26f35OLfw' @ 0 : 0; will stop at (end) -2024/05/29-20:37:15.376 5698 Manual compaction at level-1 from '!items!1WSJjnpLJhilXEgO' @ 72057594037927935 : 1 .. '!items.effects!zEXJxqsAmVM7Pohu.eA3jhjz26f35OLfw' @ 0 : 0; will stop at (end) +2024/05/30-00:00:46.332 6b00 Recovering log #2129 +2024/05/30-00:00:46.338 6b00 Delete type=0 #2129 +2024/05/30-00:00:46.338 6b00 Delete type=3 #2127 +2024/05/30-00:05:35.978 5698 Level-0 table #2134: started +2024/05/30-00:05:35.978 5698 Level-0 table #2134: 0 bytes OK +2024/05/30-00:05:35.983 5698 Delete type=0 #2132 +2024/05/30-00:05:35.992 5698 Manual compaction at level-0 from '!items!1WSJjnpLJhilXEgO' @ 72057594037927935 : 1 .. '!items.effects!zEXJxqsAmVM7Pohu.eA3jhjz26f35OLfw' @ 0 : 0; will stop at (end) +2024/05/30-00:05:35.992 5698 Manual compaction at level-1 from '!items!1WSJjnpLJhilXEgO' @ 72057594037927935 : 1 .. '!items.effects!zEXJxqsAmVM7Pohu.eA3jhjz26f35OLfw' @ 0 : 0; will stop at (end) diff --git a/packs/gps-homebrew-items/MANIFEST-002127 b/packs/gps-homebrew-items/MANIFEST-002135 similarity index 81% rename from packs/gps-homebrew-items/MANIFEST-002127 rename to packs/gps-homebrew-items/MANIFEST-002135 index d872a53a380b64669abe82c66ace106588de9688..200a7ec4947cfaf6715a05bdb96b59801fef5e9c 100644 GIT binary patch delta 43 tcmaFO_?mITah33nyxH6gj7&EKI2o943a~6-%DXl>7$kBNByt-h0suM442u8& delta 43 tcmaFO_?mITag{qQ;di(h7?~~za56Ao6ku7vboBZrA&|&LkjQ0_2mn)q4NL$4 diff --git a/packs/gps-homebrew-spells/001797.log b/packs/gps-homebrew-spells/001805.log similarity index 100% rename from packs/gps-homebrew-spells/001797.log rename to packs/gps-homebrew-spells/001805.log diff --git a/packs/gps-homebrew-spells/CURRENT b/packs/gps-homebrew-spells/CURRENT index 1d443462..370665aa 100644 --- a/packs/gps-homebrew-spells/CURRENT +++ b/packs/gps-homebrew-spells/CURRENT @@ -1 +1 @@ -MANIFEST-001795 +MANIFEST-001803 diff --git a/packs/gps-homebrew-spells/LOG b/packs/gps-homebrew-spells/LOG index 365f7108..284ff621 100644 --- a/packs/gps-homebrew-spells/LOG +++ b/packs/gps-homebrew-spells/LOG @@ -1,8 +1,8 @@ -2024/05/29-20:37:30.191 6b00 Recovering log #1793 -2024/05/29-20:37:30.201 6b00 Delete type=0 #1793 -2024/05/29-20:37:30.201 6b00 Delete type=3 #1791 -2024/05/29-23:45:18.346 5698 Level-0 table #1798: started -2024/05/29-23:45:18.346 5698 Level-0 table #1798: 0 bytes OK -2024/05/29-23:45:18.349 5698 Delete type=0 #1796 -2024/05/29-23:45:18.354 5698 Manual compaction at level-0 from '!items!iVqgFn89rGOnPTK4' @ 72057594037927935 : 1 .. '!items.effects!iVqgFn89rGOnPTK4.fAK9x7lIORqSnaz1' @ 0 : 0; will stop at (end) -2024/05/29-23:45:18.354 5698 Manual compaction at level-1 from '!items!iVqgFn89rGOnPTK4' @ 72057594037927935 : 1 .. '!items.effects!iVqgFn89rGOnPTK4.fAK9x7lIORqSnaz1' @ 0 : 0; will stop at (end) +2024/05/30-00:06:21.423 6834 Recovering log #1801 +2024/05/30-00:06:21.431 6834 Delete type=0 #1801 +2024/05/30-00:06:21.432 6834 Delete type=3 #1799 +2024/05/30-11:29:13.369 5698 Level-0 table #1806: started +2024/05/30-11:29:13.369 5698 Level-0 table #1806: 0 bytes OK +2024/05/30-11:29:13.377 5698 Delete type=0 #1804 +2024/05/30-11:29:13.395 5698 Manual compaction at level-0 from '!items!iVqgFn89rGOnPTK4' @ 72057594037927935 : 1 .. '!items.effects!iVqgFn89rGOnPTK4.fAK9x7lIORqSnaz1' @ 0 : 0; will stop at (end) +2024/05/30-11:29:13.395 5698 Manual compaction at level-1 from '!items!iVqgFn89rGOnPTK4' @ 72057594037927935 : 1 .. '!items.effects!iVqgFn89rGOnPTK4.fAK9x7lIORqSnaz1' @ 0 : 0; will stop at (end) diff --git a/packs/gps-homebrew-spells/LOG.old b/packs/gps-homebrew-spells/LOG.old index a0f924f7..a14d7632 100644 --- a/packs/gps-homebrew-spells/LOG.old +++ b/packs/gps-homebrew-spells/LOG.old @@ -1,8 +1,8 @@ -2024/05/29-10:23:20.518 683c Recovering log #1789 -2024/05/29-10:23:20.524 683c Delete type=0 #1789 -2024/05/29-10:23:20.524 683c Delete type=3 #1787 -2024/05/29-20:37:15.372 5698 Level-0 table #1794: started -2024/05/29-20:37:15.372 5698 Level-0 table #1794: 0 bytes OK -2024/05/29-20:37:15.375 5698 Delete type=0 #1792 -2024/05/29-20:37:15.375 5698 Manual compaction at level-0 from '!items!iVqgFn89rGOnPTK4' @ 72057594037927935 : 1 .. '!items.effects!iVqgFn89rGOnPTK4.fAK9x7lIORqSnaz1' @ 0 : 0; will stop at (end) -2024/05/29-20:37:15.376 5698 Manual compaction at level-1 from '!items!iVqgFn89rGOnPTK4' @ 72057594037927935 : 1 .. '!items.effects!iVqgFn89rGOnPTK4.fAK9x7lIORqSnaz1' @ 0 : 0; will stop at (end) +2024/05/30-00:00:46.340 683c Recovering log #1797 +2024/05/30-00:00:46.346 683c Delete type=0 #1797 +2024/05/30-00:00:46.346 683c Delete type=3 #1795 +2024/05/30-00:05:35.987 5698 Level-0 table #1802: started +2024/05/30-00:05:35.987 5698 Level-0 table #1802: 0 bytes OK +2024/05/30-00:05:35.992 5698 Delete type=0 #1800 +2024/05/30-00:05:35.992 5698 Manual compaction at level-0 from '!items!iVqgFn89rGOnPTK4' @ 72057594037927935 : 1 .. '!items.effects!iVqgFn89rGOnPTK4.fAK9x7lIORqSnaz1' @ 0 : 0; will stop at (end) +2024/05/30-00:05:35.992 5698 Manual compaction at level-1 from '!items!iVqgFn89rGOnPTK4' @ 72057594037927935 : 1 .. '!items.effects!iVqgFn89rGOnPTK4.fAK9x7lIORqSnaz1' @ 0 : 0; will stop at (end) diff --git a/packs/gps-homebrew-spells/MANIFEST-001795 b/packs/gps-homebrew-spells/MANIFEST-001803 similarity index 56% rename from packs/gps-homebrew-spells/MANIFEST-001795 rename to packs/gps-homebrew-spells/MANIFEST-001803 index f2847e4a1ed64fe20ed110d1ee5e003a9deb92f5..fe0f71c0b0155ff3edda455e59a19aada2e6f7fd 100644 GIT binary patch delta 43 scmaFJ_>ghJUKQP639{S_j7&XzoD9spd@PF@r=+a73KHoBiS&a+035mtKmY&$ delta 43 scmaFJ_>ghJUKO^_$#L8aj7%+joD9sZd@PF@=V#8H0upHjiL`@602!PL`Tzg` diff --git a/packs/gps-items/002122.log b/packs/gps-items/002130.log similarity index 100% rename from packs/gps-items/002122.log rename to packs/gps-items/002130.log diff --git a/packs/gps-items/CURRENT b/packs/gps-items/CURRENT index 918bd753..9f34405b 100644 --- a/packs/gps-items/CURRENT +++ b/packs/gps-items/CURRENT @@ -1 +1 @@ -MANIFEST-002120 +MANIFEST-002128 diff --git a/packs/gps-items/LOG b/packs/gps-items/LOG index 3d39bc23..b8fc29a5 100644 --- a/packs/gps-items/LOG +++ b/packs/gps-items/LOG @@ -1,8 +1,8 @@ -2024/05/29-20:37:30.105 6aa0 Recovering log #2118 -2024/05/29-20:37:30.112 6aa0 Delete type=0 #2118 -2024/05/29-20:37:30.113 6aa0 Delete type=3 #2116 -2024/05/29-23:45:18.289 5698 Level-0 table #2123: started -2024/05/29-23:45:18.289 5698 Level-0 table #2123: 0 bytes OK -2024/05/29-23:45:18.296 5698 Delete type=0 #2121 -2024/05/29-23:45:18.322 5698 Manual compaction at level-0 from '!items!0qTQDQ2Cipf15JGW' @ 72057594037927935 : 1 .. '!items.effects!wds22ulA8PSTvYWP.ZrTNMwai89gqFKJo' @ 0 : 0; will stop at (end) -2024/05/29-23:45:18.322 5698 Manual compaction at level-1 from '!items!0qTQDQ2Cipf15JGW' @ 72057594037927935 : 1 .. '!items.effects!wds22ulA8PSTvYWP.ZrTNMwai89gqFKJo' @ 0 : 0; will stop at (end) +2024/05/30-00:06:21.361 6b00 Recovering log #2126 +2024/05/30-00:06:21.371 6b00 Delete type=0 #2126 +2024/05/30-00:06:21.371 6b00 Delete type=3 #2124 +2024/05/30-11:29:13.288 5698 Level-0 table #2131: started +2024/05/30-11:29:13.289 5698 Level-0 table #2131: 0 bytes OK +2024/05/30-11:29:13.294 5698 Delete type=0 #2129 +2024/05/30-11:29:13.329 5698 Manual compaction at level-0 from '!items!0qTQDQ2Cipf15JGW' @ 72057594037927935 : 1 .. '!items.effects!wds22ulA8PSTvYWP.ZrTNMwai89gqFKJo' @ 0 : 0; will stop at (end) +2024/05/30-11:29:13.329 5698 Manual compaction at level-1 from '!items!0qTQDQ2Cipf15JGW' @ 72057594037927935 : 1 .. '!items.effects!wds22ulA8PSTvYWP.ZrTNMwai89gqFKJo' @ 0 : 0; will stop at (end) diff --git a/packs/gps-items/LOG.old b/packs/gps-items/LOG.old index d9ecc466..4b6ab76c 100644 --- a/packs/gps-items/LOG.old +++ b/packs/gps-items/LOG.old @@ -1,8 +1,8 @@ -2024/05/29-10:23:20.466 6aa0 Recovering log #2114 -2024/05/29-10:23:20.471 6aa0 Delete type=0 #2114 -2024/05/29-10:23:20.471 6aa0 Delete type=3 #2112 -2024/05/29-20:37:15.356 5698 Level-0 table #2119: started -2024/05/29-20:37:15.356 5698 Level-0 table #2119: 0 bytes OK -2024/05/29-20:37:15.358 5698 Delete type=0 #2117 -2024/05/29-20:37:15.363 5698 Manual compaction at level-0 from '!items!0qTQDQ2Cipf15JGW' @ 72057594037927935 : 1 .. '!items.effects!wds22ulA8PSTvYWP.ZrTNMwai89gqFKJo' @ 0 : 0; will stop at (end) -2024/05/29-20:37:15.363 5698 Manual compaction at level-1 from '!items!0qTQDQ2Cipf15JGW' @ 72057594037927935 : 1 .. '!items.effects!wds22ulA8PSTvYWP.ZrTNMwai89gqFKJo' @ 0 : 0; will stop at (end) +2024/05/30-00:00:46.301 6b00 Recovering log #2122 +2024/05/30-00:00:46.306 6b00 Delete type=0 #2122 +2024/05/30-00:00:46.306 6b00 Delete type=3 #2120 +2024/05/30-00:05:35.942 5698 Level-0 table #2127: started +2024/05/30-00:05:35.942 5698 Level-0 table #2127: 0 bytes OK +2024/05/30-00:05:35.947 5698 Delete type=0 #2125 +2024/05/30-00:05:35.966 5698 Manual compaction at level-0 from '!items!0qTQDQ2Cipf15JGW' @ 72057594037927935 : 1 .. '!items.effects!wds22ulA8PSTvYWP.ZrTNMwai89gqFKJo' @ 0 : 0; will stop at (end) +2024/05/30-00:05:35.967 5698 Manual compaction at level-1 from '!items!0qTQDQ2Cipf15JGW' @ 72057594037927935 : 1 .. '!items.effects!wds22ulA8PSTvYWP.ZrTNMwai89gqFKJo' @ 0 : 0; will stop at (end) diff --git a/packs/gps-items/MANIFEST-002120 b/packs/gps-items/MANIFEST-002128 similarity index 63% rename from packs/gps-items/MANIFEST-002120 rename to packs/gps-items/MANIFEST-002128 index d5c589e8db96f0a93642bae785b27bb8ce9f9aec..f59404a592a5c50022d132d06468e013924d1730 100644 GIT binary patch delta 43 tcmX@fc#?6#QWcrAS97=-7?~~#a56Ao5@6|JtdDhC01~+b61f5r0RSgh3$*|M delta 43 tcmX@fc#?6#Qk55{%GkLX7@1BAa56BT5@6|JJRQC8D@f!NNaPGi1OPY<4441_ diff --git a/packs/gps-monster-features/002120.log b/packs/gps-monster-features/002128.log similarity index 100% rename from packs/gps-monster-features/002120.log rename to packs/gps-monster-features/002128.log diff --git a/packs/gps-monster-features/CURRENT b/packs/gps-monster-features/CURRENT index 7cb1b04c..e2d3744f 100644 --- a/packs/gps-monster-features/CURRENT +++ b/packs/gps-monster-features/CURRENT @@ -1 +1 @@ -MANIFEST-002118 +MANIFEST-002126 diff --git a/packs/gps-monster-features/LOG b/packs/gps-monster-features/LOG index 927869fd..01021b27 100644 --- a/packs/gps-monster-features/LOG +++ b/packs/gps-monster-features/LOG @@ -1,8 +1,8 @@ -2024/05/29-20:37:30.119 6b00 Recovering log #2116 -2024/05/29-20:37:30.129 6b00 Delete type=0 #2116 -2024/05/29-20:37:30.129 6b00 Delete type=3 #2114 -2024/05/29-23:45:18.297 5698 Level-0 table #2121: started -2024/05/29-23:45:18.297 5698 Level-0 table #2121: 0 bytes OK -2024/05/29-23:45:18.299 5698 Delete type=0 #2119 -2024/05/29-23:45:18.322 5698 Manual compaction at level-0 from '!folders!44lJ4L7xySVYZzED' @ 72057594037927935 : 1 .. '!items.effects!yp0IIuvsEkJd6KKW.WlySPDKKWMIOowHi' @ 0 : 0; will stop at (end) -2024/05/29-23:45:18.322 5698 Manual compaction at level-1 from '!folders!44lJ4L7xySVYZzED' @ 72057594037927935 : 1 .. '!items.effects!yp0IIuvsEkJd6KKW.WlySPDKKWMIOowHi' @ 0 : 0; will stop at (end) +2024/05/30-00:06:21.373 6834 Recovering log #2124 +2024/05/30-00:06:21.383 6834 Delete type=0 #2124 +2024/05/30-00:06:21.383 6834 Delete type=3 #2122 +2024/05/30-11:29:13.324 5698 Level-0 table #2129: started +2024/05/30-11:29:13.324 5698 Level-0 table #2129: 0 bytes OK +2024/05/30-11:29:13.329 5698 Delete type=0 #2127 +2024/05/30-11:29:13.329 5698 Manual compaction at level-0 from '!folders!44lJ4L7xySVYZzED' @ 72057594037927935 : 1 .. '!items.effects!yp0IIuvsEkJd6KKW.WlySPDKKWMIOowHi' @ 0 : 0; will stop at (end) +2024/05/30-11:29:13.346 5698 Manual compaction at level-1 from '!folders!44lJ4L7xySVYZzED' @ 72057594037927935 : 1 .. '!items.effects!yp0IIuvsEkJd6KKW.WlySPDKKWMIOowHi' @ 0 : 0; will stop at (end) diff --git a/packs/gps-monster-features/LOG.old b/packs/gps-monster-features/LOG.old index 51d4ab81..4f40ffca 100644 --- a/packs/gps-monster-features/LOG.old +++ b/packs/gps-monster-features/LOG.old @@ -1,8 +1,8 @@ -2024/05/29-10:23:20.476 683c Recovering log #2112 -2024/05/29-10:23:20.481 683c Delete type=0 #2112 -2024/05/29-10:23:20.481 683c Delete type=3 #2110 -2024/05/29-20:37:15.379 5698 Level-0 table #2117: started -2024/05/29-20:37:15.379 5698 Level-0 table #2117: 0 bytes OK -2024/05/29-20:37:15.382 5698 Delete type=0 #2115 -2024/05/29-20:37:15.387 5698 Manual compaction at level-0 from '!folders!44lJ4L7xySVYZzED' @ 72057594037927935 : 1 .. '!items.effects!yp0IIuvsEkJd6KKW.WlySPDKKWMIOowHi' @ 0 : 0; will stop at (end) -2024/05/29-20:37:15.388 5698 Manual compaction at level-1 from '!folders!44lJ4L7xySVYZzED' @ 72057594037927935 : 1 .. '!items.effects!yp0IIuvsEkJd6KKW.WlySPDKKWMIOowHi' @ 0 : 0; will stop at (end) +2024/05/30-00:00:46.309 683c Recovering log #2120 +2024/05/30-00:00:46.314 683c Delete type=0 #2120 +2024/05/30-00:00:46.314 683c Delete type=3 #2118 +2024/05/30-00:05:35.947 5698 Level-0 table #2125: started +2024/05/30-00:05:35.948 5698 Level-0 table #2125: 0 bytes OK +2024/05/30-00:05:35.953 5698 Delete type=0 #2123 +2024/05/30-00:05:35.966 5698 Manual compaction at level-0 from '!folders!44lJ4L7xySVYZzED' @ 72057594037927935 : 1 .. '!items.effects!yp0IIuvsEkJd6KKW.WlySPDKKWMIOowHi' @ 0 : 0; will stop at (end) +2024/05/30-00:05:35.967 5698 Manual compaction at level-1 from '!folders!44lJ4L7xySVYZzED' @ 72057594037927935 : 1 .. '!items.effects!yp0IIuvsEkJd6KKW.WlySPDKKWMIOowHi' @ 0 : 0; will stop at (end) diff --git a/packs/gps-monster-features/MANIFEST-002118 b/packs/gps-monster-features/MANIFEST-002126 similarity index 67% rename from packs/gps-monster-features/MANIFEST-002118 rename to packs/gps-monster-features/MANIFEST-002126 index d86efc0c398c5579535b9a410b882d799bb6a3ba..10dca3e8e6ff15e46fb4372abd3024aefedf3526 100644 GIT binary patch delta 41 scmbQsG?!_@Z>6v~;b~k9j7;YRI2o8P2(Uy&9{W}U61V^oxC9gc01KK6n*aa+ delta 41 scmbQsG?!_@Z>0^dE~s)bFftt%;ACJvA;1#Fk##*DBya*Ga0(~@02p-(asU7T diff --git a/packs/gps-spells/002168.log b/packs/gps-spells/002176.log similarity index 100% rename from packs/gps-spells/002168.log rename to packs/gps-spells/002176.log diff --git a/packs/gps-spells/CURRENT b/packs/gps-spells/CURRENT index b1363aac..24977640 100644 --- a/packs/gps-spells/CURRENT +++ b/packs/gps-spells/CURRENT @@ -1 +1 @@ -MANIFEST-002166 +MANIFEST-002174 diff --git a/packs/gps-spells/LOG b/packs/gps-spells/LOG index 9e712d31..7e17ac52 100644 --- a/packs/gps-spells/LOG +++ b/packs/gps-spells/LOG @@ -1,8 +1,8 @@ -2024/05/29-20:37:30.068 6aa0 Recovering log #2164 -2024/05/29-20:37:30.078 6aa0 Delete type=0 #2164 -2024/05/29-20:37:30.078 6aa0 Delete type=3 #2162 -2024/05/29-23:45:18.299 5698 Level-0 table #2169: started -2024/05/29-23:45:18.299 5698 Level-0 table #2169: 0 bytes OK -2024/05/29-23:45:18.303 5698 Delete type=0 #2167 -2024/05/29-23:45:18.322 5698 Manual compaction at level-0 from '!items!0gEfNrgZuAxvnL5H' @ 72057594037927935 : 1 .. '!items.effects!vxrggTopkxhq3MAn.T70VAw9NbZZUV7tZ' @ 0 : 0; will stop at (end) -2024/05/29-23:45:18.323 5698 Manual compaction at level-1 from '!items!0gEfNrgZuAxvnL5H' @ 72057594037927935 : 1 .. '!items.effects!vxrggTopkxhq3MAn.T70VAw9NbZZUV7tZ' @ 0 : 0; will stop at (end) +2024/05/30-00:06:21.339 6b00 Recovering log #2172 +2024/05/30-00:06:21.346 6b00 Delete type=0 #2172 +2024/05/30-00:06:21.346 6b00 Delete type=3 #2170 +2024/05/30-11:29:13.281 5698 Level-0 table #2177: started +2024/05/30-11:29:13.281 5698 Level-0 table #2177: 0 bytes OK +2024/05/30-11:29:13.285 5698 Delete type=0 #2175 +2024/05/30-11:29:13.285 5698 Manual compaction at level-0 from '!items!0gEfNrgZuAxvnL5H' @ 72057594037927935 : 1 .. '!items.effects!vxrggTopkxhq3MAn.T70VAw9NbZZUV7tZ' @ 0 : 0; will stop at (end) +2024/05/30-11:29:13.285 5698 Manual compaction at level-1 from '!items!0gEfNrgZuAxvnL5H' @ 72057594037927935 : 1 .. '!items.effects!vxrggTopkxhq3MAn.T70VAw9NbZZUV7tZ' @ 0 : 0; will stop at (end) diff --git a/packs/gps-spells/LOG.old b/packs/gps-spells/LOG.old index 9c003e88..e04dcbb0 100644 --- a/packs/gps-spells/LOG.old +++ b/packs/gps-spells/LOG.old @@ -1,8 +1,8 @@ -2024/05/29-10:23:20.445 6aa0 Recovering log #2158 -2024/05/29-10:23:20.450 6aa0 Delete type=0 #2158 -2024/05/29-10:23:20.450 6aa0 Delete type=3 #2155 -2024/05/29-20:37:15.361 5698 Level-0 table #2165: started -2024/05/29-20:37:15.361 5698 Level-0 table #2165: 0 bytes OK -2024/05/29-20:37:15.363 5698 Delete type=0 #2163 -2024/05/29-20:37:15.363 5698 Manual compaction at level-0 from '!items!0gEfNrgZuAxvnL5H' @ 72057594037927935 : 1 .. '!items.effects!vxrggTopkxhq3MAn.T70VAw9NbZZUV7tZ' @ 0 : 0; will stop at (end) -2024/05/29-20:37:15.363 5698 Manual compaction at level-1 from '!items!0gEfNrgZuAxvnL5H' @ 72057594037927935 : 1 .. '!items.effects!vxrggTopkxhq3MAn.T70VAw9NbZZUV7tZ' @ 0 : 0; will stop at (end) +2024/05/30-00:00:46.285 6b00 Recovering log #2168 +2024/05/30-00:00:46.290 6b00 Delete type=0 #2168 +2024/05/30-00:00:46.290 6b00 Delete type=3 #2166 +2024/05/30-00:05:35.915 5698 Level-0 table #2173: started +2024/05/30-00:05:35.915 5698 Level-0 table #2173: 0 bytes OK +2024/05/30-00:05:35.921 5698 Delete type=0 #2171 +2024/05/30-00:05:35.929 5698 Manual compaction at level-0 from '!items!0gEfNrgZuAxvnL5H' @ 72057594037927935 : 1 .. '!items.effects!vxrggTopkxhq3MAn.T70VAw9NbZZUV7tZ' @ 0 : 0; will stop at (end) +2024/05/30-00:05:35.929 5698 Manual compaction at level-1 from '!items!0gEfNrgZuAxvnL5H' @ 72057594037927935 : 1 .. '!items.effects!vxrggTopkxhq3MAn.T70VAw9NbZZUV7tZ' @ 0 : 0; will stop at (end) diff --git a/packs/gps-spells/MANIFEST-002166 b/packs/gps-spells/MANIFEST-002174 similarity index 81% rename from packs/gps-spells/MANIFEST-002166 rename to packs/gps-spells/MANIFEST-002174 index d1c88db3e9055540ff45b2cf20948d8876f2a146..072a71a61552b0019ab54bf165cbe1b6292c1489 100644 GIT binary patch delta 43 tcmaFO_?mITah1&Jm1f)wj7 item.name === itemName); + const { token } = combatant; - if(existingOA.length > 0 && existingOA[0].system.source?.custom === newItem.system.source?.custom && existingOA.length === 1) { - if(browserUser.id !== game.users?.activeGM.id) { - await socket.executeAsUser("chooseUseItemUser", browserUser.id, { itemUuid: existingOA[0].uuid }); - } - else { - await socket.executeAsGM("chooseUseItemUser", { itemUuid: existingOA[0].uuid }); - } - return; - } - const itemIdsToDelete = existingOA.map(item => item.id); - let templateFlag = await actor.getFlag("midi-qol", "opportunityAttackTemplate"); - let checkBraceFlag = await actor.getFlag("midi-qol", "checkBraceDecision"); + //Keep some cleanup in place for a bit while I get people switched to the non-item version + const existingOA = actor.items.find(item => item.name === 'Opportunity Attack'); + if(existingOA) await existingOA.delete(); - if (itemIdsToDelete.length > 0) { - await actor.deleteEmbeddedDocuments("Item", itemIdsToDelete); - } + if (actor.type === 'npc' || actor.type === 'character') { - let effectNames = ["Opportunity Attack", "Opportunity Attack Reaction", "Maneuvers: Brace Opportunity Attack"]; - let effectIdsToDelete = actor.effects - .filter(effect => effectNames.includes(effect.name)) - .map(effect => effect.id); - - if (effectIdsToDelete.length > 0) { - await actor.deleteEmbeddedDocuments("ActiveEffect", effectIdsToDelete); + let gameVersion = parseInt(game.system.version.split('.')[0], 10); + + let hasWarCaster = actor.items.find(i => i.name.toLowerCase() === "war caster"); + let overrideItems = ["Booming Blade"]; + let validWeapons = actor.items.filter(item => + ((item.system?.actionType === "mwak" && item.system?.equipped === true) || (item.system?.type?.value === "monster" && item?.type === "feat" && (item.system?.actionType === "mwak" || item.system?.actionType === "msak")) || (item?.type === "weapon" && item.system?.actionType === "msak"))); + + let validSpells = actor.items.filter(item => + (hasWarCaster && (item.type === "spell" && item.system?.activation?.type === "action" && (item.system?.actionType === "msak" || item.system?.actionType === "rsak" || item.system?.actionType === "save") && (item.system?.preparation?.prepared === true || item.system?.preparation?.mode !== 'prepared' || !item.system?.preparation) && (item.system?.target?.type === "creature" || item.system?.target?.type === "enemy")) || overrideItems.includes(item.name))); + + let oaDisabled; + if (!validWeapons.length && !validSpells.length) { + ui.notifications.warn(`No Valid Melee options found, cancelling Opportunity Attack options for ${actor.name}`); + oaDisabled = true; } - - if(templateFlag) await actor.unsetFlag("midi-qol", "opportunityAttackTemplate"); - if(checkBraceFlag) await actor.unsetFlag("midi-qol", "checkBraceDecision"); - - let newOA = await actor.createEmbeddedDocuments("Item", [newItem.toObject()]); - - if(browserUser.id !== game.users?.activeGM.id) { - await socket.executeAsUser("chooseUseItemUser", browserUser.id, { itemUuid: newOA[0].uuid }); + + // Check 5e system version, item.system.properties is a Set in v3 but an array in v2 + let onlyThrownWeapons; + if(gameVersion >= 3) { + onlyThrownWeapons = validWeapons.length > 0 && validWeapons.every(item => item.system.properties.has('thr')); } else { - await socket.executeAsGM("chooseUseItemUser", { itemUuid: newOA[0].uuid }); + onlyThrownWeapons = validWeapons.length > 0 && validWeapons.every(item => 'thr' in item.system.properties && item.system.properties.thr); + } + + const units = canvas.scene.grid.units; + let conversionFactor; + if (units === "feet" || units === "f" || units === "ft") { + conversionFactor = 1; + } else if (units === "meters" || units === "m" || units === "mt") { + conversionFactor = 0.3; } + + let maxRange; + + if (onlyThrownWeapons || (validSpells && !validWeapons)) { + // Set maxRange to 5 if only thrown weapons are available or the user only has War Caster with no valid melee weapons + maxRange = 5; + } else { + maxRange = validWeapons.reduce((max, item) => { + let rangeValue = item.system.range?.value; + let noThr = gameVersion >= 3 ? !item.system.properties?.has('thr') : !item.system.properties?.thr; + if (rangeValue && !isNaN(rangeValue) && noThr) { + return Math.max(max, rangeValue); + } + return max; + }, 0); + } + + if (token.width === 1 && maxRange === 10) maxRange += 1.7; + else if (token.width === 2 && maxRange === 5) maxRange += 0.7; + else if (token.width === 3 && maxRange === 5) maxRange += 1.7; + else if (token.width === 3 && maxRange === 10) maxRange += 0.7; + else if (token.width === 4 && maxRange === 10) maxRange += 1.6; + + //Hacky workaround to get correct distance + const tokenSizeOffset = Math.max(token.width, token.height) * 0.5 * canvas.scene.dimensions.distance; + maxRange = (maxRange * conversionFactor) + tokenSizeOffset; + + let mwakRange = actor.flags["midi-qol"]?.range?.mwak; + if (mwakRange) maxRange += (mwakRange * conversionFactor); + + if(oaDisabled) maxRange = 1; + + const tokenCenterX = token.x + token.object.w / 2; + const tokenCenterY = token.y + token.object.h / 2; + let templateData = { + 't': "circle", + 'user': game.user.id, + 'x': tokenCenterX, + 'y': tokenCenterY, + 'texture': "modules/gambits-premades/assets/images/transparentImage.webp", + 'distance': maxRange, + 'direction': 0, + 'fillColor': game.user.color, + 'flags': { + 'dnd5e': { + 'origin': actor.uuid + }, + 'midi-qol': { + 'originUuid': actor.uuid, + 'actorUuid': actor.uuid, + 'opportunityAttackSet': true, + 'opportunityAttackTemplateValidWeapons': validWeapons, + 'opportunityAttackTemplateValidSpells': validSpells, + 'opportunityAttackTemplateMwakRange': mwakRange, + 'opportunityAttackTemplateTokenSize': Math.max(token.width, token.height), + 'opportunityAttackTemplateConFac': conversionFactor + }, + 'walledtemplates': { + 'hideBorder': 'alwaysHide', + 'hideHighlighting': 'alwaysHide', + 'showOnHover': 'alwaysHide' + }, + "templatemacro": { + "never": { + "asGM": false, + "command": "let { dialogTitle,effectOriginToken,effectOriginActor,token,braceItem } = this;\nasync function wait(ms) { return new Promise(resolve => { setTimeout(resolve, ms); }); }\nlet gameVersion = parseInt(game.system.version.split('.')[0], 10);\nlet hasSentinel = effectOriginActor.items.some(i => i.name.toLowerCase() === \"sentinel\");\n\n// Check if origin token can see token moving\nif(!MidiQOL.canSee(effectOriginToken, token)) return;\n\n// Check if same disposition token\nif(token.document.disposition === effectOriginToken.document.disposition) return;\n\n// Check if origin tokens reaction is already used or a spell effect is preventing reactions\nconst effectNamesOrigin = [\"Reaction\", \"Confusion\", \"Arms of Hadar\", \"Shocking Grasp\", \"Slow\", \"Staggering Smite\"];\nlet hasEffectOrigin = (gameVersion >= 3 ? effectOriginActor.appliedEffects : effectOriginActor.effects)\n .some(effect => effectNamesOrigin.includes(effect.name));\nif(hasEffectOrigin) return;\n\n// Check if origin token is incapacitated\nlet isIncapacitated = await MidiQOL.checkIncapacitated(effectOriginToken);\nif(isIncapacitated) return;\n\n//Check if token is disengaged and origin token does not have Sentinel\nlet isDisengaged = token.actor.effects.some(e => e.name.toLowerCase() === \"disengage\");\nif(isDisengaged && !hasSentinel) return;\n\n//Check if token activated mobile feat attack feature\nlet isMobileFeat = await token.actor.getFlag(\"midi-qol\", \"oaMobileFeatAttack\");\nif (isMobileFeat && isMobileFeat.includes(effectOriginToken.id)) return;\n\n//Check if token activated fancy footwork attack feature\nlet isFancyFootwork = await token.actor.getFlag(\"midi-qol\", \"oaFancyFootworkAttack\");\nif (isFancyFootwork && isFancyFootwork.includes(effectOriginToken.id)) return;\n\n//Check if origin token is Charmed by initiating token\nlet isCharmed = (gameVersion >= 3 ? effectOriginActor.appliedEffects : effectOriginActor.effects)\n .find(e => e.name.toLowerCase() === \"charmed\");\nif(isCharmed) {\n let charmerItem = await fromUuid(isCharmed.origin);\n let charmer;\n if(charmerItem) charmer = charmerItem.parent.id;\n if(charmer === token.actor.id) return;\n}\n\n// Check if the token has used an effect to prevent opportunity attacks against them, or the generic immunity effect has been applied\nconst effectNamesToken = [\"Kinetic Jaunt\", \"Zephyr Strike\", \"Opportunity Attack Immunity\", \"Ashardalon's Stride\"];\nlet hasEffectToken = (gameVersion >= 3 ? token.actor.appliedEffects : token.actor.effects)\n .some(effect => effectNamesToken.includes(effect.name));\nif(hasEffectToken) return;\n\nlet hasFlyby = token.actor.items.find(i => i.name.toLowerCase().includes(\"flyby\"));\nif(hasFlyby) return;\n\nlet originDisadvantage = token.actor.items.some(i => i.name.toLowerCase().includes(\"escape the hoard\"));\n\n// Check valid weapons\nlet hasWarCaster = effectOriginActor.items.find(i => i.name.toLowerCase() === \"war caster\");\nlet hasWarCasterConfigDialog = effectOriginActor.items.some(i => i.name.toLowerCase() === \"war caster\");\nlet overrideItems = [\"Booming Blade\"];\n\nlet validWeapons = effectOriginActor.items.filter(item => {\n return (((item.system?.actionType === \"mwak\" && item.system?.equipped === true) || (item.system?.type?.value === \"monster\" && item?.type === \"feat\" && (item.system?.actionType === \"mwak\" || item.system?.actionType === \"msak\")) || (item?.type === \"weapon\" && item.system?.actionType === \"msak\")) || \n (hasWarCaster && ((item.type === \"spell\" && item.system?.activation?.type === \"action\" && \n (item.system?.actionType === \"msak\" || item.system?.actionType === \"rsak\" || \n item.system?.actionType === \"save\") && (item.system?.preparation?.prepared === true || item.system?.preparation?.mode !== 'prepared' || !item.system?.preparation) &&\n (item.system?.target?.type === \"creature\" || item.system?.target?.type === \"enemy\")) || overrideItems.includes(item.name))));\n});\nif (!validWeapons.length) return;\n\n// Find 'Unarmed Strike' and remove it to re-add at the end\nconst unarmedIndex = validWeapons.findIndex(item => item.name.toLowerCase() === \"unarmed strike\");\nlet unarmedStrike;\nif (unarmedIndex > -1) {\n unarmedStrike = validWeapons.splice(unarmedIndex, 1)[0];\n}\n\n// Sort the weapons alphabetically\nvalidWeapons.sort((a, b) => a.name.localeCompare(b.name));\n\nlet favoriteWeaponUuid = null;\n// Check for favorite weapon and put it on top\nconst favoriteWeapon = validWeapons.find(item => item.flags?.['midi-qol']?.oaFavoriteAttack);\nif (favoriteWeapon) {\n favoriteWeaponUuid = favoriteWeapon.uuid;\n validWeapons.unshift(favoriteWeapon);\n}\n\nif (unarmedStrike) {\n validWeapons.push(unarmedStrike);\n}\n\nlet initialTimeLeft = Number(game.settings.get('gambits-premades', 'Opportunity Attack Timeout'));\n\nlet optionData = validWeapons.map(item => ``).join(\"\");\nlet dialogContent = `\n
\n
\n

Would you like to use your reaction to attack?

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

Time Remaining

\n

${initialTimeLeft} seconds

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

Time remaining

\n\t\t\t

${initialTimeLeft} seconds

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