From da6fe66887b431fb2e8cc67ae5eafe0c00e437aa Mon Sep 17 00:00:00 2001 From: LeRatierBretonnien Date: Thu, 6 Jun 2024 21:09:27 +0200 Subject: [PATCH] Sync to v7.2.0 --- fr.json | 79 ++++++++++++++++-- modules/babele-register.js | 10 +-- .../{000748.log => 000757.log} | 0 packs/aides-de-jeu-fr/CURRENT | 2 +- packs/aides-de-jeu-fr/LOG | 10 +-- packs/aides-de-jeu-fr/LOG.old | 14 ++-- .../{MANIFEST-000746 => MANIFEST-000756} | Bin 226 -> 209 bytes .../{000750.log => 000759.log} | 0 packs/antidotes-and-remedes/CURRENT | 2 +- packs/antidotes-and-remedes/LOG | 10 +-- packs/antidotes-and-remedes/LOG.old | 14 ++-- .../{MANIFEST-000748 => MANIFEST-000758} | Bin 178 -> 160 bytes packs/apothicarium/{000748.log => 000757.log} | 0 packs/apothicarium/CURRENT | 2 +- packs/apothicarium/LOG | 10 +-- packs/apothicarium/LOG.old | 14 ++-- .../{MANIFEST-000746 => MANIFEST-000756} | Bin 226 -> 209 bytes packs/dons-de-rhya/{000748.log => 000757.log} | 0 packs/dons-de-rhya/CURRENT | 2 +- packs/dons-de-rhya/LOG | 10 +-- packs/dons-de-rhya/LOG.old | 14 ++-- .../{MANIFEST-000746 => MANIFEST-000756} | Bin 226 -> 209 bytes .../{000748.log => 000757.log} | 0 packs/plats-dauberges/CURRENT | 2 +- packs/plats-dauberges/LOG | 10 +-- packs/plats-dauberges/LOG.old | 14 ++-- .../{MANIFEST-000746 => MANIFEST-000756} | Bin 229 -> 211 bytes .../{000391.log => 000400.log} | 0 packs/tables-des-traductions/CURRENT | 2 +- packs/tables-des-traductions/LOG | 11 +-- packs/tables-des-traductions/LOG.old | 16 ++-- .../{MANIFEST-000389 => MANIFEST-000399} | Bin 226 -> 209 bytes reference_scripts/18MeEQ0As3JvER71.js | 7 ++ reference_scripts/1LDSzXeO5CzXgTOc.js | 1 + reference_scripts/1jQq9v8fXK8zuEBU.js | 20 +++++ reference_scripts/2QB0LjueuJcIaHaC.js | 8 ++ reference_scripts/2W9uMTT6iJhfQ044.js | 9 +- reference_scripts/3CdYFcInQVCIBUiE.js | 3 + reference_scripts/3nTSOcCmNZpQWK8b.js | 1 + reference_scripts/4cumLUlcuJ7m8C6t.js | 4 + reference_scripts/4drWKXjMgasxY7Jy.js | 1 + reference_scripts/4otpLq2TnDdgzpvc.js | 1 + reference_scripts/4uAUUZmLgxBKSmXA.js | 2 + reference_scripts/5ScjIdRUOxblHdWS.js | 53 ++++++++++++ reference_scripts/5sYpJkT2WXIe0gIZ.js | 19 +++++ reference_scripts/6Ws3ieQ7pG5poUyT.js | 8 ++ reference_scripts/6gRixT3zIOAberJb.js | 5 ++ reference_scripts/6jp8slPU33oBQe1V.js | 1 + reference_scripts/6oSs8qKFNFz2lSmh.js | 2 + reference_scripts/6qJP0hpShEM43ohx.js | 31 +++++++ reference_scripts/6ubojp9zwbfJnosT.js | 1 + reference_scripts/7w7QA7GBhzZ98OS0.js | 32 +++++++ reference_scripts/86ivOsBQAuu0UmFg.js | 6 ++ reference_scripts/8xqYrBIf1Zhlwizg.js | 53 ++++++++++++ reference_scripts/9HWEDsnNxSykqbF5.js | 3 + reference_scripts/AFiB20FaOBmBv2Kz.js | 2 + reference_scripts/AaPPmnv7AtxsRVUs.js | 1 + reference_scripts/BVNKF9omCppWPLys.js | 28 +++++++ reference_scripts/BZETMpgrI5k1ol5b.js | 11 +++ reference_scripts/C69xngEMghfwUx13.js | 3 + reference_scripts/CD4RnDpXZ9hnqVPQ.js | 2 + reference_scripts/CS6O7UUjQcUJoOUP.js | 10 +++ reference_scripts/Dzi2CKpYapRGwNVr.js | 3 + reference_scripts/E3om295BMQojnM2F.js | 6 ++ reference_scripts/EBNrA6FNX4d05EUx.js | 1 + reference_scripts/EC8cZmqrE095cDc2.js | 31 +++++++ reference_scripts/EDAMEOzdBfkoKHxP.js | 1 + reference_scripts/F2u4L4o0r1LTWeWK.js | 8 ++ reference_scripts/FPYNcxm21678boLT.js | 18 ++++ reference_scripts/FtZf56VI6Qsspu0D.js | 53 ++++++++++++ reference_scripts/Fwk8WA8NfRivLFWJ.js | 1 + reference_scripts/GsAyB5xnK3ASeoah.js | 53 ++++++++++++ reference_scripts/H85k4L3yICm7cfIk.js | 53 ++++++++++++ reference_scripts/HUKzssLxeQo1wbx9.js | 11 +++ reference_scripts/HYrl5aNMm8BAdqH7.js | 8 ++ reference_scripts/HrOBAXsEX073ReKl.js | 5 +- reference_scripts/IOroJBqTsWvoakJN.js | 2 + reference_scripts/IrkWq7IiFS65bTvC.js | 7 ++ reference_scripts/IzoOmDywGLqLNljN.js | 19 +++++ reference_scripts/JBoKPBr27C3PMoSD.js | 1 + reference_scripts/JXBUE0XuJOJNG7zE.js | 18 ++++ reference_scripts/JhbZWZhOJ23yOBmG.js | 53 ++++++++++++ reference_scripts/LjfScVGBf0Egr70E.js | 9 ++ reference_scripts/MIhYSuJ6MI9B65UT.js | 4 + reference_scripts/MMv2B8TH7jxNCtdl.js | 52 ++++++++++++ reference_scripts/MMx8f5uJ15XOgJGg.js | 1 + reference_scripts/Me1wS5XdqUEy7OGt.js | 5 ++ reference_scripts/NI3ZzIAlpQfVSjvf.js | 8 ++ reference_scripts/O45vpR4jDbQQnmvJ.js | 13 +++ reference_scripts/OsLXutfXyQCAkhAf.js | 53 ++++++++++++ reference_scripts/Pn5fekTbkwlr61XU.js | 53 ++++++++++++ reference_scripts/PsO7aTdELJt35eHP.js | 10 +++ reference_scripts/Q5gh5Y9dCdclcwsD.js | 1 + reference_scripts/Q7eULXQ9AfDRmUGO.js | 53 ++++++++++++ reference_scripts/QHQ7XmFOjT9wXgw1.js | 4 + reference_scripts/QNxmImpLTou6WdMQ.js | 3 + reference_scripts/QfTBRGXVfwQSghmd.js | 18 ++++ reference_scripts/R8FBHZaaARA3z9pB.js | 53 ++++++++++++ reference_scripts/R8ecKGRzOr4ThvVa.js | 53 ++++++++++++ reference_scripts/RPqgRUkiLY5thVbC.js | 53 ++++++++++++ reference_scripts/RlhOAKfN0ghrrooR.js | 7 ++ reference_scripts/Rnpw6UQdJifLeuna.js | 1 + reference_scripts/RsWXCcYHONf3ANlD.js | 1 + reference_scripts/RwMw848y13Jq2L4f.js | 23 +++++ reference_scripts/SWIJjM2RCmzfr64u.js | 2 +- reference_scripts/SefcrhXsdYGFcCW6.js | 3 + reference_scripts/Ssn21dxoMQiqD1y4.js | 1 + reference_scripts/T3RfSt3VMEat3iDD.js | 1 + reference_scripts/UDPsaymtZf39UsMk.js | 7 ++ reference_scripts/UXdlnmwVgjc1QpF2.js | 2 + reference_scripts/UlRSaZG4ZUU6fMND.js | 53 ++++++++++++ reference_scripts/UtqUthabeQ4rHDLQ.js | 2 + reference_scripts/Uvk1X7sEhvv77YkD.js | 5 ++ reference_scripts/VINX6TBAJQznhVcN.js | 53 ++++++++++++ reference_scripts/VLdF2HPnCrNIgp7a.js | 13 +++ reference_scripts/VTS4RzbmReI87K9a.js | 1 + reference_scripts/VlHuDIAvPr8JM1P5.js | 1 + reference_scripts/Vns6WrafVq8NjX7t.js | 1 + reference_scripts/WJkwIrdj4NceOYe8.js | 1 + reference_scripts/WR0Kqn8CF5iwToak.js | 53 ++++++++++++ reference_scripts/WeTlTniskT3Ej6vg.js | 1 + reference_scripts/X08401eOhKJrhNf1.js | 9 ++ reference_scripts/X3vpmNUj9SL2CDnF.js | 2 + reference_scripts/XCAfy460IotarQek.js | 1 + reference_scripts/YySjPfSAPdMAfjsh.js | 11 +++ reference_scripts/Z41L3MwOpJdAjVaj.js | 2 + reference_scripts/ZCBcwbVFHFTFRntb.js | 53 ++++++++++++ reference_scripts/ZLspFT2I3ZdWWr2H.js | 1 + reference_scripts/ZOgtDW3mkTfeyc5M.js | 1 + reference_scripts/ZRoG7GiMDQWso6gN.js | 53 ++++++++++++ reference_scripts/ZuoIVv3nmlGhhdx0.js | 4 + reference_scripts/araS9qYWOAVrV8F7.js | 2 + reference_scripts/b8G4cjfn3RG2tEYX.js | 1 + reference_scripts/bL98Sr1TRLMPEdlk.js | 4 + reference_scripts/bRiFHPC1StKxqNIC.js | 6 ++ reference_scripts/cJFDnq1HI4gXWcJo.js | 2 +- reference_scripts/cTYNaKbepMwqYsZ8.js | 16 ++++ reference_scripts/ckKbPfaTiQ2qBZdR.js | 1 + reference_scripts/dULCkRxtisuzQyuK.js | 2 + reference_scripts/dWr3tkFoIzsAgelu.js | 11 +++ reference_scripts/dbHv7dAXgB2Oy1Fg.js | 3 + reference_scripts/dh5mAlaOOLCBC0YQ.js | 1 + reference_scripts/dsXGavzXLerXR8Xg.js | 1 + reference_scripts/dxxDFXNNqUsuMyUD.js | 1 + reference_scripts/e4HotRnEiyXR0pIu.js | 1 + reference_scripts/f29Pv6TQtgILxt1h.js | 11 +++ reference_scripts/fFi9JD4uCY9DPC5B.js | 4 + reference_scripts/fTw3mpSUOlkqVVUC.js | 1 + reference_scripts/g0SzfsLyW7aD2F19.js | 11 ++- reference_scripts/gMIenSmLklAkB2Zm.js | 8 ++ reference_scripts/gOm8utR3HLQBT5hA.js | 6 ++ reference_scripts/goz8yTlMozlsz3uY.js | 53 ++++++++++++ reference_scripts/groEX1wJ9l00PkDF.js | 75 +++++++++++++++++ reference_scripts/gxuBeGHwjZ7WfPeu.js | 2 + reference_scripts/hOgha3ir8K9TVphO.js | 1 + reference_scripts/hSImyYjL0CENTvXf.js | 23 +++++ reference_scripts/hWWvkPbgIN3lxz1u.js | 1 + reference_scripts/hYNWp75ggWSTht55.js | 7 ++ reference_scripts/hj7tI212neKIu9dh.js | 1 + reference_scripts/ht7csu1KImHzpzL5.js | 1 + reference_scripts/huJcVpVn6Q7sQkFC.js | 2 + reference_scripts/iO2hCDwyQ7v4qrOI.js | 10 +++ reference_scripts/iqUvV1Vu81M3WyZ4.js | 4 + reference_scripts/jOm7RxGFm1y6mCpN.js | 1 + reference_scripts/jXbrIGxznqf1SNxZ.js | 3 + reference_scripts/k0AkkBLtE8oZhBwn.js | 6 ++ reference_scripts/kbXDGAmWWD4CZJHB.js | 5 ++ reference_scripts/kvnZz8yqdTZbErkr.js | 3 + reference_scripts/lOIHiAIDtj91kllN.js | 6 ++ reference_scripts/lZuavewrJzOehrJQ.js | 14 ++++ reference_scripts/ljGX2w8hCTyLAjRp.js | 2 + reference_scripts/mGHKBkDp4omSaBlD.js | 12 +++ reference_scripts/mT7PDcjF3cJTDbjR.js | 2 + reference_scripts/mXvtf3qhJjshpopX.js | 1 + reference_scripts/mlulnXQo8XU8vKLD.js | 8 ++ reference_scripts/nIOeK0BrtdZeZW8X.js | 17 ++++ reference_scripts/nkSmu7v9WiAaK4vq.js | 53 ++++++++++++ reference_scripts/nlQA0shW8FCXjY7u.js | 1 + reference_scripts/pVSnn4Zw6y1EBDhv.js | 2 + reference_scripts/pkKpxVqRHIzywerL.js | 6 ++ reference_scripts/pvk5OhTNdVgwXoUa.js | 1 + reference_scripts/q8lOAWr2970sZeTw.js | 53 ++++++++++++ reference_scripts/qTcK1TSjLTi0jNQK.js | 8 ++ reference_scripts/qnJu82zgnfOsnqZV.js | 12 +++ reference_scripts/qzGPJflVW7c2Ciim.js | 1 + reference_scripts/rBAoyhzeU3Q8MVSk.js | 53 ++++++++++++ reference_scripts/rVRDoxiWILo7d8FF.js | 4 + reference_scripts/rX8FTinyTMj9WJri.js | 37 ++++++++ reference_scripts/rlTvhnDpj4lzfusf.js | 1 + reference_scripts/rly9iBUy8EX7NhQT.js | 27 ++++++ reference_scripts/rqTT8yOyK4bUwbdm.js | 15 ++++ reference_scripts/sHVLKIdPbzLVItCa.js | 2 + reference_scripts/sQDh3g11pWchxpW9.js | 1 + reference_scripts/tuIsytv3jl2yAIb2.js | 1 + reference_scripts/uhCq5NwjQ2a2idPn.js | 53 ++++++++++++ reference_scripts/v18mmwUmuKiVfwzQ.js | 6 ++ reference_scripts/vTebTUzXortx1Qut.js | 4 + reference_scripts/vUpMQlbwDiYfMCNS.js | 1 + reference_scripts/w4RuGIfseGoxXA3k.js | 53 ++++++++++++ reference_scripts/wRxgpGmlUpe7nwzJ.js | 12 +++ reference_scripts/xVYVegD692CCv8Yl.js | 12 +++ reference_scripts/xWPgIZOQLba5nZ23.js | 14 ++++ reference_scripts/xihniGjgqOhuaKWc.js | 9 ++ reference_scripts/z14Tb2YKCjiE5ZTU.js | 12 +++ reference_scripts/zL7ECmBBMAqf5Esn.js | 30 +++++++ reference_scripts/zXh8rgMxWoCLTxVd.js | 53 ++++++++++++ reference_scripts/zdGAvfL7zJ7wpYxG.js | 53 ++++++++++++ reference_scripts/zkc1gIPLj0VoAONT.js | 8 ++ reference_scripts/ztIkD5Zt6ko9D4Ca.js | 1 + scripts/2W9uMTT6iJhfQ044.js | 9 +- scripts/HrOBAXsEX073ReKl.js | 5 +- scripts/IzoOmDywGLqLNljN.js | 19 +++++ scripts/OGX4BneaYAnV25TO.js | 12 +-- scripts/SWIJjM2RCmzfr64u.js | 6 +- scripts/Uvk1X7sEhvv77YkD.js | 5 ++ scripts/mXvtf3qhJjshpopX.js | 1 + scripts/zXh8rgMxWoCLTxVd.js | 53 ++++++++++++ tools/test01.lua | 6 -- 218 files changed, 2680 insertions(+), 131 deletions(-) rename packs/aides-de-jeu-fr/{000748.log => 000757.log} (100%) rename packs/aides-de-jeu-fr/{MANIFEST-000746 => MANIFEST-000756} (84%) rename packs/antidotes-and-remedes/{000750.log => 000759.log} (100%) rename packs/antidotes-and-remedes/{MANIFEST-000748 => MANIFEST-000758} (71%) rename packs/apothicarium/{000748.log => 000757.log} (100%) rename packs/apothicarium/{MANIFEST-000746 => MANIFEST-000756} (84%) rename packs/dons-de-rhya/{000748.log => 000757.log} (100%) rename packs/dons-de-rhya/{MANIFEST-000746 => MANIFEST-000756} (84%) rename packs/plats-dauberges/{000748.log => 000757.log} (100%) rename packs/plats-dauberges/{MANIFEST-000746 => MANIFEST-000756} (83%) rename packs/tables-des-traductions/{000391.log => 000400.log} (100%) rename packs/tables-des-traductions/{MANIFEST-000389 => MANIFEST-000399} (84%) create mode 100644 reference_scripts/18MeEQ0As3JvER71.js create mode 100644 reference_scripts/1LDSzXeO5CzXgTOc.js create mode 100644 reference_scripts/1jQq9v8fXK8zuEBU.js create mode 100644 reference_scripts/2QB0LjueuJcIaHaC.js create mode 100644 reference_scripts/3CdYFcInQVCIBUiE.js create mode 100644 reference_scripts/3nTSOcCmNZpQWK8b.js create mode 100644 reference_scripts/4cumLUlcuJ7m8C6t.js create mode 100644 reference_scripts/4drWKXjMgasxY7Jy.js create mode 100644 reference_scripts/4otpLq2TnDdgzpvc.js create mode 100644 reference_scripts/4uAUUZmLgxBKSmXA.js create mode 100644 reference_scripts/5ScjIdRUOxblHdWS.js create mode 100644 reference_scripts/5sYpJkT2WXIe0gIZ.js create mode 100644 reference_scripts/6Ws3ieQ7pG5poUyT.js create mode 100644 reference_scripts/6gRixT3zIOAberJb.js create mode 100644 reference_scripts/6jp8slPU33oBQe1V.js create mode 100644 reference_scripts/6oSs8qKFNFz2lSmh.js create mode 100644 reference_scripts/6qJP0hpShEM43ohx.js create mode 100644 reference_scripts/6ubojp9zwbfJnosT.js create mode 100644 reference_scripts/7w7QA7GBhzZ98OS0.js create mode 100644 reference_scripts/86ivOsBQAuu0UmFg.js create mode 100644 reference_scripts/8xqYrBIf1Zhlwizg.js create mode 100644 reference_scripts/9HWEDsnNxSykqbF5.js create mode 100644 reference_scripts/AFiB20FaOBmBv2Kz.js create mode 100644 reference_scripts/AaPPmnv7AtxsRVUs.js create mode 100644 reference_scripts/BVNKF9omCppWPLys.js create mode 100644 reference_scripts/BZETMpgrI5k1ol5b.js create mode 100644 reference_scripts/C69xngEMghfwUx13.js create mode 100644 reference_scripts/CD4RnDpXZ9hnqVPQ.js create mode 100644 reference_scripts/CS6O7UUjQcUJoOUP.js create mode 100644 reference_scripts/Dzi2CKpYapRGwNVr.js create mode 100644 reference_scripts/E3om295BMQojnM2F.js create mode 100644 reference_scripts/EBNrA6FNX4d05EUx.js create mode 100644 reference_scripts/EC8cZmqrE095cDc2.js create mode 100644 reference_scripts/EDAMEOzdBfkoKHxP.js create mode 100644 reference_scripts/F2u4L4o0r1LTWeWK.js create mode 100644 reference_scripts/FPYNcxm21678boLT.js create mode 100644 reference_scripts/FtZf56VI6Qsspu0D.js create mode 100644 reference_scripts/Fwk8WA8NfRivLFWJ.js create mode 100644 reference_scripts/GsAyB5xnK3ASeoah.js create mode 100644 reference_scripts/H85k4L3yICm7cfIk.js create mode 100644 reference_scripts/HUKzssLxeQo1wbx9.js create mode 100644 reference_scripts/HYrl5aNMm8BAdqH7.js create mode 100644 reference_scripts/IOroJBqTsWvoakJN.js create mode 100644 reference_scripts/IrkWq7IiFS65bTvC.js create mode 100644 reference_scripts/IzoOmDywGLqLNljN.js create mode 100644 reference_scripts/JBoKPBr27C3PMoSD.js create mode 100644 reference_scripts/JXBUE0XuJOJNG7zE.js create mode 100644 reference_scripts/JhbZWZhOJ23yOBmG.js create mode 100644 reference_scripts/LjfScVGBf0Egr70E.js create mode 100644 reference_scripts/MIhYSuJ6MI9B65UT.js create mode 100644 reference_scripts/MMv2B8TH7jxNCtdl.js create mode 100644 reference_scripts/MMx8f5uJ15XOgJGg.js create mode 100644 reference_scripts/Me1wS5XdqUEy7OGt.js create mode 100644 reference_scripts/NI3ZzIAlpQfVSjvf.js create mode 100644 reference_scripts/O45vpR4jDbQQnmvJ.js create mode 100644 reference_scripts/OsLXutfXyQCAkhAf.js create mode 100644 reference_scripts/Pn5fekTbkwlr61XU.js create mode 100644 reference_scripts/PsO7aTdELJt35eHP.js create mode 100644 reference_scripts/Q5gh5Y9dCdclcwsD.js create mode 100644 reference_scripts/Q7eULXQ9AfDRmUGO.js create mode 100644 reference_scripts/QHQ7XmFOjT9wXgw1.js create mode 100644 reference_scripts/QNxmImpLTou6WdMQ.js create mode 100644 reference_scripts/QfTBRGXVfwQSghmd.js create mode 100644 reference_scripts/R8FBHZaaARA3z9pB.js create mode 100644 reference_scripts/R8ecKGRzOr4ThvVa.js create mode 100644 reference_scripts/RPqgRUkiLY5thVbC.js create mode 100644 reference_scripts/RlhOAKfN0ghrrooR.js create mode 100644 reference_scripts/Rnpw6UQdJifLeuna.js create mode 100644 reference_scripts/RsWXCcYHONf3ANlD.js create mode 100644 reference_scripts/RwMw848y13Jq2L4f.js create mode 100644 reference_scripts/SefcrhXsdYGFcCW6.js create mode 100644 reference_scripts/Ssn21dxoMQiqD1y4.js create mode 100644 reference_scripts/T3RfSt3VMEat3iDD.js create mode 100644 reference_scripts/UDPsaymtZf39UsMk.js create mode 100644 reference_scripts/UXdlnmwVgjc1QpF2.js create mode 100644 reference_scripts/UlRSaZG4ZUU6fMND.js create mode 100644 reference_scripts/UtqUthabeQ4rHDLQ.js create mode 100644 reference_scripts/Uvk1X7sEhvv77YkD.js create mode 100644 reference_scripts/VINX6TBAJQznhVcN.js create mode 100644 reference_scripts/VLdF2HPnCrNIgp7a.js create mode 100644 reference_scripts/VTS4RzbmReI87K9a.js create mode 100644 reference_scripts/VlHuDIAvPr8JM1P5.js create mode 100644 reference_scripts/Vns6WrafVq8NjX7t.js create mode 100644 reference_scripts/WJkwIrdj4NceOYe8.js create mode 100644 reference_scripts/WR0Kqn8CF5iwToak.js create mode 100644 reference_scripts/WeTlTniskT3Ej6vg.js create mode 100644 reference_scripts/X08401eOhKJrhNf1.js create mode 100644 reference_scripts/X3vpmNUj9SL2CDnF.js create mode 100644 reference_scripts/XCAfy460IotarQek.js create mode 100644 reference_scripts/YySjPfSAPdMAfjsh.js create mode 100644 reference_scripts/Z41L3MwOpJdAjVaj.js create mode 100644 reference_scripts/ZCBcwbVFHFTFRntb.js create mode 100644 reference_scripts/ZLspFT2I3ZdWWr2H.js create mode 100644 reference_scripts/ZOgtDW3mkTfeyc5M.js create mode 100644 reference_scripts/ZRoG7GiMDQWso6gN.js create mode 100644 reference_scripts/ZuoIVv3nmlGhhdx0.js create mode 100644 reference_scripts/araS9qYWOAVrV8F7.js create mode 100644 reference_scripts/b8G4cjfn3RG2tEYX.js create mode 100644 reference_scripts/bL98Sr1TRLMPEdlk.js create mode 100644 reference_scripts/bRiFHPC1StKxqNIC.js create mode 100644 reference_scripts/cTYNaKbepMwqYsZ8.js create mode 100644 reference_scripts/ckKbPfaTiQ2qBZdR.js create mode 100644 reference_scripts/dULCkRxtisuzQyuK.js create mode 100644 reference_scripts/dWr3tkFoIzsAgelu.js create mode 100644 reference_scripts/dbHv7dAXgB2Oy1Fg.js create mode 100644 reference_scripts/dh5mAlaOOLCBC0YQ.js create mode 100644 reference_scripts/dsXGavzXLerXR8Xg.js create mode 100644 reference_scripts/dxxDFXNNqUsuMyUD.js create mode 100644 reference_scripts/e4HotRnEiyXR0pIu.js create mode 100644 reference_scripts/f29Pv6TQtgILxt1h.js create mode 100644 reference_scripts/fFi9JD4uCY9DPC5B.js create mode 100644 reference_scripts/fTw3mpSUOlkqVVUC.js create mode 100644 reference_scripts/gMIenSmLklAkB2Zm.js create mode 100644 reference_scripts/gOm8utR3HLQBT5hA.js create mode 100644 reference_scripts/goz8yTlMozlsz3uY.js create mode 100644 reference_scripts/groEX1wJ9l00PkDF.js create mode 100644 reference_scripts/gxuBeGHwjZ7WfPeu.js create mode 100644 reference_scripts/hOgha3ir8K9TVphO.js create mode 100644 reference_scripts/hSImyYjL0CENTvXf.js create mode 100644 reference_scripts/hWWvkPbgIN3lxz1u.js create mode 100644 reference_scripts/hYNWp75ggWSTht55.js create mode 100644 reference_scripts/hj7tI212neKIu9dh.js create mode 100644 reference_scripts/ht7csu1KImHzpzL5.js create mode 100644 reference_scripts/huJcVpVn6Q7sQkFC.js create mode 100644 reference_scripts/iO2hCDwyQ7v4qrOI.js create mode 100644 reference_scripts/iqUvV1Vu81M3WyZ4.js create mode 100644 reference_scripts/jOm7RxGFm1y6mCpN.js create mode 100644 reference_scripts/jXbrIGxznqf1SNxZ.js create mode 100644 reference_scripts/k0AkkBLtE8oZhBwn.js create mode 100644 reference_scripts/kbXDGAmWWD4CZJHB.js create mode 100644 reference_scripts/kvnZz8yqdTZbErkr.js create mode 100644 reference_scripts/lOIHiAIDtj91kllN.js create mode 100644 reference_scripts/lZuavewrJzOehrJQ.js create mode 100644 reference_scripts/ljGX2w8hCTyLAjRp.js create mode 100644 reference_scripts/mGHKBkDp4omSaBlD.js create mode 100644 reference_scripts/mT7PDcjF3cJTDbjR.js create mode 100644 reference_scripts/mXvtf3qhJjshpopX.js create mode 100644 reference_scripts/mlulnXQo8XU8vKLD.js create mode 100644 reference_scripts/nIOeK0BrtdZeZW8X.js create mode 100644 reference_scripts/nkSmu7v9WiAaK4vq.js create mode 100644 reference_scripts/nlQA0shW8FCXjY7u.js create mode 100644 reference_scripts/pVSnn4Zw6y1EBDhv.js create mode 100644 reference_scripts/pkKpxVqRHIzywerL.js create mode 100644 reference_scripts/pvk5OhTNdVgwXoUa.js create mode 100644 reference_scripts/q8lOAWr2970sZeTw.js create mode 100644 reference_scripts/qTcK1TSjLTi0jNQK.js create mode 100644 reference_scripts/qnJu82zgnfOsnqZV.js create mode 100644 reference_scripts/qzGPJflVW7c2Ciim.js create mode 100644 reference_scripts/rBAoyhzeU3Q8MVSk.js create mode 100644 reference_scripts/rVRDoxiWILo7d8FF.js create mode 100644 reference_scripts/rX8FTinyTMj9WJri.js create mode 100644 reference_scripts/rlTvhnDpj4lzfusf.js create mode 100644 reference_scripts/rly9iBUy8EX7NhQT.js create mode 100644 reference_scripts/rqTT8yOyK4bUwbdm.js create mode 100644 reference_scripts/sHVLKIdPbzLVItCa.js create mode 100644 reference_scripts/sQDh3g11pWchxpW9.js create mode 100644 reference_scripts/tuIsytv3jl2yAIb2.js create mode 100644 reference_scripts/uhCq5NwjQ2a2idPn.js create mode 100644 reference_scripts/v18mmwUmuKiVfwzQ.js create mode 100644 reference_scripts/vTebTUzXortx1Qut.js create mode 100644 reference_scripts/vUpMQlbwDiYfMCNS.js create mode 100644 reference_scripts/w4RuGIfseGoxXA3k.js create mode 100644 reference_scripts/wRxgpGmlUpe7nwzJ.js create mode 100644 reference_scripts/xVYVegD692CCv8Yl.js create mode 100644 reference_scripts/xWPgIZOQLba5nZ23.js create mode 100644 reference_scripts/xihniGjgqOhuaKWc.js create mode 100644 reference_scripts/z14Tb2YKCjiE5ZTU.js create mode 100644 reference_scripts/zL7ECmBBMAqf5Esn.js create mode 100644 reference_scripts/zXh8rgMxWoCLTxVd.js create mode 100644 reference_scripts/zdGAvfL7zJ7wpYxG.js create mode 100644 reference_scripts/zkc1gIPLj0VoAONT.js create mode 100644 reference_scripts/ztIkD5Zt6ko9D4Ca.js create mode 100644 scripts/IzoOmDywGLqLNljN.js create mode 100644 scripts/Uvk1X7sEhvv77YkD.js create mode 100644 scripts/mXvtf3qhJjshpopX.js create mode 100644 scripts/zXh8rgMxWoCLTxVd.js delete mode 100644 tools/test01.lua diff --git a/fr.json b/fr.json index 41953ed..d993a56 100644 --- a/fr.json +++ b/fr.json @@ -365,7 +365,9 @@ "ITEM.Maximum":"Maximum", "ITEM.RandomVortex":"Vortex aléatoire", "ITEM.Ritual":"Rituel", - + "ITEM.Standard":"Standard", + "ITEM.TestSkill":"Test de compétence", + "BleedCrit":"L'hémorrage de {name} coagule un peu : 1 Hémorragie peut-être retirée.", "BleedFail":"{name} meur de sa perte de sang !", "BleedRoll":"Jet d'Hémmoragie", @@ -839,7 +841,10 @@ "CHARGEN.Trappings.Remove":"Supprimer", "CHARGEN.Career.LoadingCareers":"Chargement des carrières...", "CHARGEN.Message.RerolledDuplicateTalent":"

Relance du Talent dupliqué: {rolled}!

", - + "CHARGEN.Message.ReplacedTalent":"

Remplacement de {talent} par {replacement}!

", + "CHARGEN.SkillsTalents.ReplaceTalentDialog.Content":"

Voulez vous remplacer {talent} avec {replacement}?

", + "CHARGEN.SkillsTalents.ReplaceTalentDialog.Title":"Remplacer un Talent", + "CAREER.DifferentClass": "Entrée dans une nouvelle Classe", "CAREER.LeaveIncomplete": "Départ d'une carrière incomplète", "CAREER.LeaveComplete": "Départ d'une carrière complétée", @@ -920,6 +925,8 @@ "DIALOG.MemorizeSpell":"Mémoriser un Sort", "DIALOG.MemorizeSpellContent":"Mémoriser ce sort vous coutera {xp} XP.", "DIALOG.ErrorMustSelectItem":"Au moins 1 item doit être selectionné", + "DIALOG.ChooseActor":"Choisissez l'Acteur pour réaliser le test", + "DIALOG.ItemDialog":"Fenêtre d'Item", "CHAT.CareerChoose" : "Choisissez votre carrière", "CHAT.DamageError" : "Erreur de calcul des dégâts:", @@ -1073,7 +1080,16 @@ "CHAT.ApplyHack":"Appliquer Hack", "CHAT.ModifiersBreakdown":"Liste des modificateurs", "CHAT.Place":"Placer", - + "CHAT.AttackerTooSmallDamage":"Attacker is too small to damage this vehicle", + "CHAT.CrewTest":"Test d'équipage", + "CHAT.CrewTestVital":"Test d'équipage (Vital)", + "CHAT.NoCrewWithRole":"Aucun role d'équipage!", + "CHAT.RoleNotFound":"Le role {role} n'a pas été trouvé!", + "CHAT.TotalSL":"DR Totaux", + "CHAT.VehicleTBTooltipMultiply":"{number} × BE", + "CHAT.VehicleTBTooltipSubtract":"BE - {number}", + "CHAT.Vital":"Vital", + "Error.SpeciesSkills" : "Impossible d'ajouter des compétences pour les races", "Error.SpeciesTalents" : "Impossible d'ajouter des talents pour les races", "Error.CriticalWound" : "Erreur lors de l'application des blessures", @@ -1112,6 +1128,10 @@ "ERROR.PrayerAoEOvercast":"La zone d'effet des Prières ne peut être augemntée", "ERROR.AMMO_MODS":"La munition '{type}' ne peut pas être trouvée. Consultez la console (F12) pour les détails`", "ERROR.CannotUseArm":"Bras non utilisable!", + "ERROR.NoAvailableActors":"Aucun acteur disponible pour le choix!", + "ERROR.NoOwnedCrew":"Vous ne contrôlez aucun membre d'équipage qui possède ce rôle", + "ERROR.StandardTraitsOnVehicle":"Impossible d'ajouter des Trais standards à un Véhicule", + "ERROR.VehicleTraitsOnStandard":"Impossible d'ajouter des Traits de Véhicule à un Acteur", "WARNING.Target":"Sélectionnez une cible pour appliquer l'effet.", "WARNING.ActorTest":"Les classes de jet d'acteur ne sont plus utilisées. Appelez désormais `roll()` sur l'objet lui-même.", @@ -1735,6 +1755,7 @@ "NAME.Trade":"Métier", "NAME.Arcane":"Arcane", "NAME.Lingering":"Persistant", + "NAME.FearExtendedTest":"Test étendu de Peur", "SPEC.Tiny" : "Minuscule", "SPEC.Little" : "Très petite", @@ -1852,6 +1873,7 @@ "SHEET.Target":"Cible", "SHEET.ToggleTraits":"Basculer le(s) Trait(s) de Creature", "SHEET.SortItems":"Trier les items", + "SHEET.CannotDeleteCrewEffect":"Cet effet provient d'un véhicule dont cet acteur est membre d'équipage, et doit donc être effacé depuis le véhicule.", "DISEASE.IncubationFinished" : "Incubation de la maladie {disease} terminée. ", @@ -2060,6 +2082,24 @@ "VEHICLE.NoActorOnBoard": "Le personnage qui vous est assigné n'est pas dans le véhicule", "VEHICLE.TestNotPermitted": "Vous n'avez pas la permission de réaliser ce test", "VEHICLE.ft":"ft", + "VEHICLE.CollisionRating":"Mesure de Collision", + "VEHICLE.Crew":"Equipage", + "VEHICLE.CrewTests":"Tests d'équipage", + "VEHICLE.Custom":"Custom", + "VEHICLE.Enabled":"Activé", + "VEHICLE.Man":"Man.", + "VEHICLE.ManannsMood":"Manann's Mood", + "VEHICLE.Morale":"Moral", + "VEHICLE.MoraleEffects":"Effet du moral", + "VEHICLE.Oars":"Rames", + "VEHICLE.PrimaryMode":"Mode primaire", + "VEHICLE.Sail":"Voile", + "VEHICLE.SetValue":"Valeur", + "VEHICLE.SetValueToolTip":"Positionner une valeur particulière au lieu de lancer.", + "VEHICLE.Sources":"Moral", + "VEHICLE.Starting":"Démarre", + "VEHICLE.Type":"Type de véhicule", + "VEHICLE.WeekLabel":"Label de Semaine", "CONFIGURE.CalcTokenSize" : "Calculer automatiquement la taille des Tokens", "CONFIGURE.CalcRun" : "Calculer automatiquement la vitesse de course", @@ -2195,6 +2235,11 @@ "TRADE.Excellent": "Excellente", "TRADE.Topshelf": "Suprême", "TRADE.NoCargoFound":"Il n'y a pas de cargaison disponible à l'achat à {town}.", + "TRADE.Demand":"Demande", + "TRADE.Maritime":"Maritime", + "TRADE.MerchantTest":"Test de Marchand: {SL} DR (Résultat {roll})", + "TRADE.River":"Rivière", + "TRADE.Surplus":"Surplus", "RANDOMIZER.C":"Ca", "RANDOMIZER.S":"C", @@ -2267,6 +2312,9 @@ "ROLL.HitAnotherEngagedTarget":"Oops! Vous avez touche la mauvaise cible, sélectionnez aléatoirement un personnage et appliquez lui les dommages ", "Rounds":"rounds", "SHEET.NoCareers":"Aucune carrière trouvée", + "EFFECT.ShooterEngagedError":"Vous ne pouvez réaliser d'attaque à étant engagé, à moins que vous ne sooyez équipé d'une arme avec la qualité Pistolet", + "EffectApplication.RadiusHint":"Rayon du template (Note: si cet effet provient d'un sort, c'est son diamètre actuel)", + "EffectApplication.Type.Crew":"Equipage", "CHARGEN.AdditionalRandomTalent":"Talent aléatoire additionnel", "CHARGEN.Message.RerolledDuplicate":"

Relance de Talent dupliqué: {rolled}!

", @@ -2342,7 +2390,9 @@ "TYPES.Item.trapping":"Possession", "TYPES.Item.vehicleMod":"Modification de Véhicule", "TYPES.Item.weapon":"Arme", - + "TYPES.Item.vehicleRole":"Role de Véhicule", + "TYPES.Item.vehicleTest":"Test d'équipage de véhicule", + "Badger": "Blaireau", "Badgers": "Blaireaux", "Choose one": "A choisir", @@ -2425,5 +2475,24 @@ "Touch": "Toucher", "SOCKET.SendingSocketRequest":"Envoi d'une requête par Socket", - "UpdaterTitle":"Mise à jour du contenu {title}" + "UpdaterTitle":"Mise à jour du contenu {title}", + + "BREAKADOWN.UserEntry":"Saisie utilisateur", + "BEAKDOWN.UserEntry":"Saisie utilisateur", + "BREAKDOWN.AttackerBase":"Base Attaquant", + "BREAKDOWN.Base":"Base", + "BREAKDOWN.Dice":"Dé", + "BREAKDOWN.Ignored":"Ignoré", + "BREAKDOWN.Minimum1":"1 Blessure minimum", + "BREAKDOWN.Moo":"Règles maison de MooMan", + "BREAKDOWN.Multiplier":"Multiplieur", + "BREAKDOWN.OpposedSL":"DR Opposé", + "BREAKDOWN.Partial":"Partiel - Ignore {ignored} ({item})", + "BREAKDOWN.Penetrating":"Pénétrant - Ignore {ignored} ({item})", + "BREAKDOWN.PenetratingMoo":"Pénétrant - Ignore {ignored}", + "BREAKDOWN.ShieldMoo":"Défense échouée - Ignore Shield AP ({ignored})", + "BREAKDOWN.Undamaging":"Inoffensive: {originalAP} AP * 2 = {modifiedAP}", + "BREAKDOWN.Weakpoints":"Points faibles - Ignore {ignored} ({item})", + "BREAKDOWN.Zzap":"Zzap! - Ignore {ignored}" + } diff --git a/modules/babele-register.js b/modules/babele-register.js index d27ea08..4cffe8f 100644 --- a/modules/babele-register.js +++ b/modules/babele-register.js @@ -218,15 +218,15 @@ Hooks.once('init', () => { /*---------------------------------------------------------------------*/ // Converters area - if (typeof Babele !== 'undefined') { + if (game.babele !== 'undefined') { - Babele.get().register({ + game.babele.register({ module: 'wh4-fr-translation', lang: 'fr', dir: 'compendium' }) - Babele.get().registerConverters({ + game.babele.registerConverters({ "career_skills": (skills_list) => { let validCompendiums = game.wfrp4e.tags.getPacksWithTag("skill") @@ -294,13 +294,13 @@ Hooks.once('init', () => { let career = data.text.match(/{(.*)}/) //console.log(">>>>>", career) if (career && career[1]) { - let careerFR = Babele.instance.converters.career_careergroup(career[1]) + let careerFR = game.babele.converters.career_careergroup(career[1]) data.text = data.text.replace(career[1], careerFR) } } } if (results[0].documentCollection) { - return Babele.instance.converters.tableResults(results) + return game.babele.instance.converters.tableResults(results) } return results }, diff --git a/packs/aides-de-jeu-fr/000748.log b/packs/aides-de-jeu-fr/000757.log similarity index 100% rename from packs/aides-de-jeu-fr/000748.log rename to packs/aides-de-jeu-fr/000757.log diff --git a/packs/aides-de-jeu-fr/CURRENT b/packs/aides-de-jeu-fr/CURRENT index 6d50c3b..9d62470 100644 --- a/packs/aides-de-jeu-fr/CURRENT +++ b/packs/aides-de-jeu-fr/CURRENT @@ -1 +1 @@ -MANIFEST-000746 +MANIFEST-000756 diff --git a/packs/aides-de-jeu-fr/LOG b/packs/aides-de-jeu-fr/LOG index 360a5ea..b02330f 100644 --- a/packs/aides-de-jeu-fr/LOG +++ b/packs/aides-de-jeu-fr/LOG @@ -1,7 +1,3 @@ -2024/05/31-09:37:32.376772 7f19c7e006c0 Recovering log #744 -2024/05/31-09:37:32.432762 7f19c7e006c0 Delete type=3 #742 -2024/05/31-09:37:32.432815 7f19c7e006c0 Delete type=0 #744 -2024/05/31-10:40:01.792285 7f19c56006c0 Level-0 table #749: started -2024/05/31-10:40:01.792317 7f19c56006c0 Level-0 table #749: 0 bytes OK -2024/05/31-10:40:01.798878 7f19c56006c0 Delete type=0 #747 -2024/05/31-10:40:01.811597 7f19c56006c0 Manual compaction at level-0 from '!journal!3IgmiprzLB6Lwenc' @ 72057594037927935 : 1 .. '!journal.pages!suuYN87Al1ZZWtQQ.jhgNnhWhrkOpKs1B' @ 0 : 0; will stop at (end) +2024/06/06-20:54:36.421316 7fcfb2a006c0 Recovering log #754 +2024/06/06-20:54:36.431498 7fcfb2a006c0 Delete type=3 #752 +2024/06/06-20:54:36.431579 7fcfb2a006c0 Delete type=0 #754 diff --git a/packs/aides-de-jeu-fr/LOG.old b/packs/aides-de-jeu-fr/LOG.old index 72c813c..1209c1a 100644 --- a/packs/aides-de-jeu-fr/LOG.old +++ b/packs/aides-de-jeu-fr/LOG.old @@ -1,7 +1,7 @@ -2024/05/29-22:15:26.921445 7f5b0b8006c0 Recovering log #739 -2024/05/29-22:15:26.945868 7f5b0b8006c0 Delete type=3 #737 -2024/05/29-22:15:26.945925 7f5b0b8006c0 Delete type=0 #739 -2024/05/29-22:42:08.086719 7f5b0a8006c0 Level-0 table #745: started -2024/05/29-22:42:08.086744 7f5b0a8006c0 Level-0 table #745: 0 bytes OK -2024/05/29-22:42:08.093895 7f5b0a8006c0 Delete type=0 #743 -2024/05/29-22:42:08.114027 7f5b0a8006c0 Manual compaction at level-0 from '!journal!3IgmiprzLB6Lwenc' @ 72057594037927935 : 1 .. '!journal.pages!suuYN87Al1ZZWtQQ.jhgNnhWhrkOpKs1B' @ 0 : 0; will stop at (end) +2024/06/01-20:41:11.767917 7f47516006c0 Recovering log #751 +2024/06/01-20:41:11.778523 7f47516006c0 Delete type=0 #751 +2024/06/01-20:41:11.778570 7f47516006c0 Delete type=3 #750 +2024/06/01-20:41:56.329216 7f474f8006c0 Level-0 table #755: started +2024/06/01-20:41:56.329241 7f474f8006c0 Level-0 table #755: 0 bytes OK +2024/06/01-20:41:56.335388 7f474f8006c0 Delete type=0 #753 +2024/06/01-20:41:56.348176 7f474f8006c0 Manual compaction at level-0 from '!journal!3IgmiprzLB6Lwenc' @ 72057594037927935 : 1 .. '!journal.pages!suuYN87Al1ZZWtQQ.jhgNnhWhrkOpKs1B' @ 0 : 0; will stop at (end) diff --git a/packs/aides-de-jeu-fr/MANIFEST-000746 b/packs/aides-de-jeu-fr/MANIFEST-000756 similarity index 84% rename from packs/aides-de-jeu-fr/MANIFEST-000746 rename to packs/aides-de-jeu-fr/MANIFEST-000756 index 6cb7cb5da5e6354a956b7e6931bc0e296df2b9ab..145fbed81bc7b69f944a5f5b914962a6d031272b 100644 GIT binary patch delta 24 gcmaFFc#(0!0l`(rf>v=cFfx5*yfD0CklIrvLx| delta 41 scmcb}_=s`B0i~CLmv(Y7FfzSnpUStK=nifMMy9u{oD9tGSXuTn`4^h31c|%@iF^Qw001P&3Ab~d^fpn+a diff --git a/packs/plats-dauberges/000748.log b/packs/plats-dauberges/000757.log similarity index 100% rename from packs/plats-dauberges/000748.log rename to packs/plats-dauberges/000757.log diff --git a/packs/plats-dauberges/CURRENT b/packs/plats-dauberges/CURRENT index 6d50c3b..9d62470 100644 --- a/packs/plats-dauberges/CURRENT +++ b/packs/plats-dauberges/CURRENT @@ -1 +1 @@ -MANIFEST-000746 +MANIFEST-000756 diff --git a/packs/plats-dauberges/LOG b/packs/plats-dauberges/LOG index 8db030c..46baf52 100644 --- a/packs/plats-dauberges/LOG +++ b/packs/plats-dauberges/LOG @@ -1,7 +1,3 @@ -2024/05/31-09:37:32.229735 7f19c7e006c0 Recovering log #744 -2024/05/31-09:37:32.290900 7f19c7e006c0 Delete type=3 #742 -2024/05/31-09:37:32.290955 7f19c7e006c0 Delete type=0 #744 -2024/05/31-10:40:01.745865 7f19c56006c0 Level-0 table #749: started -2024/05/31-10:40:01.745898 7f19c56006c0 Level-0 table #749: 0 bytes OK -2024/05/31-10:40:01.752538 7f19c56006c0 Delete type=0 #747 -2024/05/31-10:40:01.759248 7f19c56006c0 Manual compaction at level-0 from '!tables!4l60Lxv8cpsyy2Cg' @ 72057594037927935 : 1 .. '!tables.results!tfaYKDZqu7kgZvRG.yvbwKursaixh2dby' @ 0 : 0; will stop at (end) +2024/06/06-20:54:36.390344 7fcfb2a006c0 Recovering log #754 +2024/06/06-20:54:36.401236 7fcfb2a006c0 Delete type=3 #752 +2024/06/06-20:54:36.401373 7fcfb2a006c0 Delete type=0 #754 diff --git a/packs/plats-dauberges/LOG.old b/packs/plats-dauberges/LOG.old index 7002622..763c1be 100644 --- a/packs/plats-dauberges/LOG.old +++ b/packs/plats-dauberges/LOG.old @@ -1,7 +1,7 @@ -2024/05/29-22:15:26.888481 7f5b0cc006c0 Recovering log #739 -2024/05/29-22:15:26.899481 7f5b0cc006c0 Delete type=3 #737 -2024/05/29-22:15:26.899538 7f5b0cc006c0 Delete type=0 #739 -2024/05/29-22:42:08.080368 7f5b0a8006c0 Level-0 table #745: started -2024/05/29-22:42:08.080405 7f5b0a8006c0 Level-0 table #745: 0 bytes OK -2024/05/29-22:42:08.086437 7f5b0a8006c0 Delete type=0 #743 -2024/05/29-22:42:08.086618 7f5b0a8006c0 Manual compaction at level-0 from '!tables!4l60Lxv8cpsyy2Cg' @ 72057594037927935 : 1 .. '!tables.results!tfaYKDZqu7kgZvRG.yvbwKursaixh2dby' @ 0 : 0; will stop at (end) +2024/06/01-20:41:11.741198 7f4750c006c0 Recovering log #751 +2024/06/01-20:41:11.752851 7f4750c006c0 Delete type=0 #751 +2024/06/01-20:41:11.752903 7f4750c006c0 Delete type=3 #750 +2024/06/01-20:41:56.304431 7f474f8006c0 Level-0 table #755: started +2024/06/01-20:41:56.304456 7f474f8006c0 Level-0 table #755: 0 bytes OK +2024/06/01-20:41:56.312191 7f474f8006c0 Delete type=0 #753 +2024/06/01-20:41:56.318536 7f474f8006c0 Manual compaction at level-0 from '!tables!4l60Lxv8cpsyy2Cg' @ 72057594037927935 : 1 .. '!tables.results!tfaYKDZqu7kgZvRG.yvbwKursaixh2dby' @ 0 : 0; will stop at (end) diff --git a/packs/plats-dauberges/MANIFEST-000746 b/packs/plats-dauberges/MANIFEST-000756 similarity index 83% rename from packs/plats-dauberges/MANIFEST-000746 rename to packs/plats-dauberges/MANIFEST-000756 index a0e124a41be1167568601a2b4b24dee86e022956..e6aadd835232bc16d95ff654445fa1c3beebb3ba 100644 GIT binary patch delta 25 hcmaFLc$sm+K_O|y&Bfddj7(oyIT@J0v9erY1^{hE2WkKS delta 43 tcmcc2_>^(NL6wK|ZlC66U}SpD%E`d|hLz metal += ((layer.metal && !layer.magical) ? layer.value : 0), 0) + +let APused = Math.max(0, APatLoc.value - metalAP); // remove metal AP at location; + +damage -= (APused + this.actor.system.characteristics.t.bonus) + +let msg = await this.actor.applyBasicDamage(damage, {suppressMsg : true, damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL}); +msg += ` (ignored ${metalAP} metal AP on ${game.wfrp4e.config.locations[loc]})` +this.script.scriptMessage(msg) + +let test = await this.actor.setupSkill("Endurance", {fields : {difficulty : "difficult"}, appendTitle : ` - ${this.effect.name}`}); +await test.roll(); +if (test.failed) + this.actor.addCondition("stunned"); \ No newline at end of file diff --git a/reference_scripts/2QB0LjueuJcIaHaC.js b/reference_scripts/2QB0LjueuJcIaHaC.js new file mode 100644 index 0000000..7fd2601 --- /dev/null +++ b/reference_scripts/2QB0LjueuJcIaHaC.js @@ -0,0 +1,8 @@ +if (isNaN(parseInt(this.item.system.specification.value))) +{ + let value = await ValueDialog.create("Enter Armour value", this.effect.name); + if (value) + { + this.item.updateSource({"system.specification.value" : value}); + } +} \ No newline at end of file diff --git a/reference_scripts/2W9uMTT6iJhfQ044.js b/reference_scripts/2W9uMTT6iJhfQ044.js index fb037b9..dd8d817 100644 --- a/reference_scripts/2W9uMTT6iJhfQ044.js +++ b/reference_scripts/2W9uMTT6iJhfQ044.js @@ -6,13 +6,14 @@ if (!currentCareer) return let inCurrentCareer = currentCareer.system.skills.includes(skill); -if (existingSkill && inCurrentCareer) +let craftsmanAdded = this.actor.getFlag("wfrp4e", "craftsmanAdded") || {}; +if (existingSkill && inCurrentCareer && !craftsmanAdded[existingSkill.name]) { existingSkill.system.advances.costModifier = -5; } else { + craftsmanAdded[skill] = true; currentCareer.system.skills.push(skill); -} - - + setProperty(this.actor, "flags.wfrp4e.craftsmanAdded", craftsmanAdded) +} \ No newline at end of file diff --git a/reference_scripts/3CdYFcInQVCIBUiE.js b/reference_scripts/3CdYFcInQVCIBUiE.js new file mode 100644 index 0000000..69af1ae --- /dev/null +++ b/reference_scripts/3CdYFcInQVCIBUiE.js @@ -0,0 +1,3 @@ +args.actor.system.details.move.value += 2; +args.actor.system.status.carries.max = Math.floor(args.actor.system.status.carries.max * 0.5); +args.actor.system.details.price.gc *= 1.1; \ No newline at end of file diff --git a/reference_scripts/3nTSOcCmNZpQWK8b.js b/reference_scripts/3nTSOcCmNZpQWK8b.js new file mode 100644 index 0000000..49dd61a --- /dev/null +++ b/reference_scripts/3nTSOcCmNZpQWK8b.js @@ -0,0 +1 @@ +this.actor.addCondition("blinded", 3); \ No newline at end of file diff --git a/reference_scripts/4cumLUlcuJ7m8C6t.js b/reference_scripts/4cumLUlcuJ7m8C6t.js new file mode 100644 index 0000000..ce8df65 --- /dev/null +++ b/reference_scripts/4cumLUlcuJ7m8C6t.js @@ -0,0 +1,4 @@ +let item = args.actor.items.find(i => i.name.includes("Smoothing")); +let smoothing = item?.effects.find(e => e.name === "Smoothing"); +if (smoothing) + smoothing.disabled = true; \ No newline at end of file diff --git a/reference_scripts/4drWKXjMgasxY7Jy.js b/reference_scripts/4drWKXjMgasxY7Jy.js new file mode 100644 index 0000000..313f7b5 --- /dev/null +++ b/reference_scripts/4drWKXjMgasxY7Jy.js @@ -0,0 +1 @@ +args.actor.system.details.price.gc += Math.floor(args.actor.system.details.price.gc * 0.1); \ No newline at end of file diff --git a/reference_scripts/4otpLq2TnDdgzpvc.js b/reference_scripts/4otpLq2TnDdgzpvc.js new file mode 100644 index 0000000..ce5c7f0 --- /dev/null +++ b/reference_scripts/4otpLq2TnDdgzpvc.js @@ -0,0 +1 @@ +args.actor.system.details.man -= 3; \ No newline at end of file diff --git a/reference_scripts/4uAUUZmLgxBKSmXA.js b/reference_scripts/4uAUUZmLgxBKSmXA.js new file mode 100644 index 0000000..42f8c77 --- /dev/null +++ b/reference_scripts/4uAUUZmLgxBKSmXA.js @@ -0,0 +1,2 @@ +if (args.totalWoundLoss > 0) + this.effect.delete(); \ No newline at end of file diff --git a/reference_scripts/5ScjIdRUOxblHdWS.js b/reference_scripts/5ScjIdRUOxblHdWS.js new file mode 100644 index 0000000..351ac87 --- /dev/null +++ b/reference_scripts/5ScjIdRUOxblHdWS.js @@ -0,0 +1,53 @@ +const repaired_message = `

Finished repairing ${this.item.name}.

`; +const test = 'Trade (Carpenter)'; +const difficulty = 'challenging'; +const target = 40; + +const extendedTestData = { + name: this.item.name, + type: "extendedTest", + img: this.item.img, + system: { + SL: { + current: 0, + target: target + }, + test: { + value: test + }, + completion: { + value: "remove" + }, + difficulty: { + value: difficulty + } + }, + effects: [ + { + name: `Repair the ${this.item.name}`, + icon: this.item.img, + flags: { + wfrp4e: { + applicationData: { + type: "document", + documentType: "Item" + }, + scriptData: [ + { + label: this.item.name, + script: ` + let id = this.item.flags.wfrp4e.fromEffect; + let effect = this.actor.appliedEffects.find(e => e.id === id); + this.script.scriptMessage("${repaired_message}"); + await effect.item.delete(); + `, + trigger: "deleteEffect" + } + ] + } + } + } + ] +}; + +await this.actor.createEmbeddedDocuments("Item", [extendedTestData], {fromEffect: this.effect.id}); diff --git a/reference_scripts/5sYpJkT2WXIe0gIZ.js b/reference_scripts/5sYpJkT2WXIe0gIZ.js new file mode 100644 index 0000000..c5b5bc6 --- /dev/null +++ b/reference_scripts/5sYpJkT2WXIe0gIZ.js @@ -0,0 +1,19 @@ +const rating = parseInt(this.effect.name.match(/\d+/)?.[0]) || 1; + +let crewList = foundry.utils.duplicate(this.actor.system.passengers.list); +let selectedCrew = []; + +while (selectedCrew.length < rating && crewList.length) { + selectedCrew.push(crewList.splice(crewList.length * Math.random() | 0, 1)[0]); +} + +for (let member of selectedCrew) { + let actor = game.actors.get(member.id); + actor.applyBasicDamage(9, { + damageType: game.wfrp4e.config.DAMAGE_TYPE.NORMAL, + minimumOne: true, + loc: "roll", + suppressMsg: false, + hideDSN: false + }); +} \ No newline at end of file diff --git a/reference_scripts/6Ws3ieQ7pG5poUyT.js b/reference_scripts/6Ws3ieQ7pG5poUyT.js new file mode 100644 index 0000000..b9ff46a --- /dev/null +++ b/reference_scripts/6Ws3ieQ7pG5poUyT.js @@ -0,0 +1,8 @@ +if (isNaN(parseInt(this.item.system.specification.value))) +{ + let value = await ValueDialog.create("Enter Spellcasting Lore", this.effect.name, "", Object.values(game.wfrp4e.config.magicLores)); + if (value) + { + this.item.updateSource({"system.specification.value" : value}); + } +} \ No newline at end of file diff --git a/reference_scripts/6gRixT3zIOAberJb.js b/reference_scripts/6gRixT3zIOAberJb.js new file mode 100644 index 0000000..09172e0 --- /dev/null +++ b/reference_scripts/6gRixT3zIOAberJb.js @@ -0,0 +1,5 @@ +const disease = await fromUuid("Compendium.wfrp4e-soc.items.Item.8Q9JYtR1y3B5J6UH"); +const data = disease.toObject(); +data.system.incubation.value = 0; +data.system.duration.active = true; +this.actor.createEmbeddedDocuments("Item", [data], {fromEffect: this.effect.id}); \ No newline at end of file diff --git a/reference_scripts/6jp8slPU33oBQe1V.js b/reference_scripts/6jp8slPU33oBQe1V.js new file mode 100644 index 0000000..e38825c --- /dev/null +++ b/reference_scripts/6jp8slPU33oBQe1V.js @@ -0,0 +1 @@ +return args.options.crewTest?.system.handling !== true; \ No newline at end of file diff --git a/reference_scripts/6oSs8qKFNFz2lSmh.js b/reference_scripts/6oSs8qKFNFz2lSmh.js new file mode 100644 index 0000000..a96cb59 --- /dev/null +++ b/reference_scripts/6oSs8qKFNFz2lSmh.js @@ -0,0 +1,2 @@ +if (args.actorsystem.details.move.sail.value > 0) + args.actor.system.details.move.sail.value = 0; diff --git a/reference_scripts/6qJP0hpShEM43ohx.js b/reference_scripts/6qJP0hpShEM43ohx.js new file mode 100644 index 0000000..437b672 --- /dev/null +++ b/reference_scripts/6qJP0hpShEM43ohx.js @@ -0,0 +1,31 @@ +const actor = args.actor; + +if (actor.itemTypes.skill.find(s => s.name === "Lore (Oceans)")) { + const loreTest = await actor.setupSkill('Lore (Oceans)', { + appendTitle: ` – ${this.effect.name}`, + skipTargets: true, + fields: {difficulty: 'hard'}, + characteristic: 'int', + }); + await loreTest.roll(); + + if (loreTest.succeeded) { + loreTest.result.other.push(`${actor.name} recognizes lure of the Leviathan.`); + loreTest.renderRollCard(); + return; + } +} + +let test = await actor.setupSkill('Cool', { + appendTitle: ` – ${this.effect.name}`, + skipTargets: true, + fields: {difficulty: 'easy'}, + characteristic: 'wp', +}); +await test.roll(); + +if (!test.succeeded) { + test.result.other.push(`${actor.name} became @Condition[Stunned] by the sight.`); + test.renderRollCard(); + actor.addCondition("stunned"); +} \ No newline at end of file diff --git a/reference_scripts/6ubojp9zwbfJnosT.js b/reference_scripts/6ubojp9zwbfJnosT.js new file mode 100644 index 0000000..0620aad --- /dev/null +++ b/reference_scripts/6ubojp9zwbfJnosT.js @@ -0,0 +1 @@ +args.actor.system.details.move.value += 1; \ No newline at end of file diff --git a/reference_scripts/7w7QA7GBhzZ98OS0.js b/reference_scripts/7w7QA7GBhzZ98OS0.js new file mode 100644 index 0000000..2227fc2 --- /dev/null +++ b/reference_scripts/7w7QA7GBhzZ98OS0.js @@ -0,0 +1,32 @@ +const sin = this.effect.sourceActor.system.status.sin.value; +const result = await WFRP_Tables.rollTable("manann-mood-made-meaningless", sin); +let match = result.text.match(/b>([^<]+)/i); +let key = match[1]; +let roll = new Roll("5d10"); +let value = undefined; + +await this.script.scriptMessage(result.text, {flavor: result.title}); + +switch (key) { + case 'Stromfels Triumphant!': + value = 0; + break; + case 'Stromfels Ascends!': + await roll.evaluate(); + if (this.actor.system.status.mood.value > 0) + value = -roll.total; + else if (this.actor.system.status.mood.value < 0) + value = roll.total; + break; + case 'No effect.': + break; + case 'Manann Provoked!': + await roll.evaluate(); + value = -roll.total; + break; +} + +if (roll._evaluated) + await roll.toMessage(); + +await this.effect.setFlag("wfrp4e-soc", "m4result", {result: key, value}); \ No newline at end of file diff --git a/reference_scripts/86ivOsBQAuu0UmFg.js b/reference_scripts/86ivOsBQAuu0UmFg.js new file mode 100644 index 0000000..e440e5a --- /dev/null +++ b/reference_scripts/86ivOsBQAuu0UmFg.js @@ -0,0 +1,6 @@ +let test = await this.actor.setupSkill(game.i18n.localize("NAME.Endurance"), {fields : {difficulty : "hard"}, appendTitle : ` - ${this.effect.name}`, skipTargets: true}); +await test.roll(); +if (test.failed) +{ + this.actor.addCondition("poisoned"); +} \ No newline at end of file diff --git a/reference_scripts/8xqYrBIf1Zhlwizg.js b/reference_scripts/8xqYrBIf1Zhlwizg.js new file mode 100644 index 0000000..941661b --- /dev/null +++ b/reference_scripts/8xqYrBIf1Zhlwizg.js @@ -0,0 +1,53 @@ +const repaired_message = `

Finished raisint the anchor.

`; +const test = 'Strength'; +const difficulty = 'vhard'; +const target = 20; + +const extendedTestData = { + name: this.item.name, + type: "extendedTest", + img: this.item.img, + system: { + SL: { + current: 0, + target: target + }, + test: { + value: test + }, + completion: { + value: "remove" + }, + difficulty: { + value: difficulty + } + }, + effects: [ + { + name: `Repair the ${this.item.name}`, + icon: this.item.img, + flags: { + wfrp4e: { + applicationData: { + type: "document", + documentType: "Item" + }, + scriptData: [ + { + label: this.item.name, + script: ` + let id = this.item.flags.wfrp4e.fromEffect; + let effect = this.actor.appliedEffects.find(e => e.id === id); + this.script.scriptMessage("${repaired_message}"); + await effect.item.delete(); + `, + trigger: "deleteEffect" + } + ] + } + } + } + ] +}; + +await this.actor.createEmbeddedDocuments("Item", [extendedTestData], {fromEffect: this.effect.id}); diff --git a/reference_scripts/9HWEDsnNxSykqbF5.js b/reference_scripts/9HWEDsnNxSykqbF5.js new file mode 100644 index 0000000..0ca9acf --- /dev/null +++ b/reference_scripts/9HWEDsnNxSykqbF5.js @@ -0,0 +1,3 @@ +args.actor.system.details.move.value += 3; +args.actor.system.status.carries.max = Math.floor(args.actor.system.status.carries.max * 0.25); +args.actor.system.details.price.gc *= 1.1; \ No newline at end of file diff --git a/reference_scripts/AFiB20FaOBmBv2Kz.js b/reference_scripts/AFiB20FaOBmBv2Kz.js new file mode 100644 index 0000000..9a000d5 --- /dev/null +++ b/reference_scripts/AFiB20FaOBmBv2Kz.js @@ -0,0 +1,2 @@ +if (args.actorsystem.details.move.sail.value > 0) + args.actor.system.details.move.sail.value = Math.floor(args.actor.system.details.move.sail.value * .5); diff --git a/reference_scripts/AaPPmnv7AtxsRVUs.js b/reference_scripts/AaPPmnv7AtxsRVUs.js new file mode 100644 index 0000000..18f4b61 --- /dev/null +++ b/reference_scripts/AaPPmnv7AtxsRVUs.js @@ -0,0 +1 @@ +args.actor.details.move.value = 1; \ No newline at end of file diff --git a/reference_scripts/BVNKF9omCppWPLys.js b/reference_scripts/BVNKF9omCppWPLys.js new file mode 100644 index 0000000..d01c1cf --- /dev/null +++ b/reference_scripts/BVNKF9omCppWPLys.js @@ -0,0 +1,28 @@ +let actor = game.user.character ?? canvas.tokens.controlled[0]?.actor; +if (!actor || !(actor.system instanceof StandardActorModel)) + return ui.notifications.warn("You must control an Actor capable of performing a Strength Test"); + +let test = await actor.setupCharacteristic("s", { + skipTargets: true, + appendTitle: " - Bailing Out", + fields: { + difficulty: "challenging" + }, + context: { + success: "Reduced the Holed rating!" + } +}); + +await test.roll(); +if (test.succeeded) { + let SL = parseInt(test.result.SL); + let name = this.effect.name.replace(/\d+/, rating => parseInt(rating) - SL); + await this.effect.update({name}); +} + +let rating = parseInt(this.effect.name.match(/\d+/)?.[0]); +if (rating <= 1) { + const scriptData = this.effect.flags.wfrp4e.scriptData; + scriptData[2].trigger = ''; + await this.effect.update({disabled: true, "flags.wfrp4e.scriptData": scriptData}); +} \ No newline at end of file diff --git a/reference_scripts/BZETMpgrI5k1ol5b.js b/reference_scripts/BZETMpgrI5k1ol5b.js new file mode 100644 index 0000000..5934888 --- /dev/null +++ b/reference_scripts/BZETMpgrI5k1ol5b.js @@ -0,0 +1,11 @@ +// If the creature currently has a Surprised, Unconscious, or Entangled Condition, it does not gain this Advantage. +const surprised = this.actor.hasCondition("surprised") +const unconscious = this.actor.hasCondition("unconscious") +const entangled = this.actor.hasCondition("entangled") +if (entangled || unconscious || surprised) return + +// If, at the beginning of its turn, this creature does not have at least Rating Advantage points, its Advantage pool immediately increases to Rating. +const grimRating = parseInt(this.item.specification.value) || 1 +if (grimRating > this.actor.status.advantage.value) { + this.actor.setAdvantage(grimRating) +} diff --git a/reference_scripts/C69xngEMghfwUx13.js b/reference_scripts/C69xngEMghfwUx13.js new file mode 100644 index 0000000..65f9299 --- /dev/null +++ b/reference_scripts/C69xngEMghfwUx13.js @@ -0,0 +1,3 @@ +let easier = ['challenging', 'average', 'easy', 'veasy']; +if (easier.includes(args.fields.difficulty)) + args.fields.difficulty = "difficult"; \ No newline at end of file diff --git a/reference_scripts/CD4RnDpXZ9hnqVPQ.js b/reference_scripts/CD4RnDpXZ9hnqVPQ.js new file mode 100644 index 0000000..d733e08 --- /dev/null +++ b/reference_scripts/CD4RnDpXZ9hnqVPQ.js @@ -0,0 +1,2 @@ +if (!this.actor.hasCondition("entangled")) + this.actor.addCondition("entangled"); \ No newline at end of file diff --git a/reference_scripts/CS6O7UUjQcUJoOUP.js b/reference_scripts/CS6O7UUjQcUJoOUP.js new file mode 100644 index 0000000..be5bc60 --- /dev/null +++ b/reference_scripts/CS6O7UUjQcUJoOUP.js @@ -0,0 +1,10 @@ +if (args.test.failed) + { + let SL = Number(args.test.result.SL) + if (SL <= -2 && SL > -4) + this.actor.addCondition("stunned") + else if (SL <= -4 && SL > -6) + this.script.scriptMessage(this.actor.prototypeToken.name + " must make a Willpower Test or fall @Condition[Prone].") + else if (SL <= -6) + this.actor.addCondition("unconscious") + } \ No newline at end of file diff --git a/reference_scripts/Dzi2CKpYapRGwNVr.js b/reference_scripts/Dzi2CKpYapRGwNVr.js new file mode 100644 index 0000000..b5561ad --- /dev/null +++ b/reference_scripts/Dzi2CKpYapRGwNVr.js @@ -0,0 +1,3 @@ +if (args.actor.system instanceof StandardActorModel) { + args.actor.addCondition("unconscious"); +} \ No newline at end of file diff --git a/reference_scripts/E3om295BMQojnM2F.js b/reference_scripts/E3om295BMQojnM2F.js new file mode 100644 index 0000000..4e0d9d6 --- /dev/null +++ b/reference_scripts/E3om295BMQojnM2F.js @@ -0,0 +1,6 @@ +let fatigued = this.actor.hasCondition("fatigued") +if (fatigued) +{ + fatigued.delete(); + this.script.scriptNotification("Removed Fatigued") +} \ No newline at end of file diff --git a/reference_scripts/EBNrA6FNX4d05EUx.js b/reference_scripts/EBNrA6FNX4d05EUx.js new file mode 100644 index 0000000..1ad25de --- /dev/null +++ b/reference_scripts/EBNrA6FNX4d05EUx.js @@ -0,0 +1 @@ +return !args.options.crewTest; \ No newline at end of file diff --git a/reference_scripts/EC8cZmqrE095cDc2.js b/reference_scripts/EC8cZmqrE095cDc2.js new file mode 100644 index 0000000..c5e0b3e --- /dev/null +++ b/reference_scripts/EC8cZmqrE095cDc2.js @@ -0,0 +1,31 @@ +const actor = args.actor; + +if (actor.itemTypes.skill.find(s => s.name === "Lore (Riverways)")) { + const loreTest = await actor.setupSkill('Lore (Riverways)', { + appendTitle: ` – ${this.effect.name}`, + skipTargets: true, + fields: {difficulty: 'hard'}, + characteristic: 'int', + }); + await loreTest.roll(); + + if (loreTest.succeeded) { + loreTest.result.other.push(`${actor.name} recognizes lures of Lurkerfish.`); + loreTest.renderRollCard(); + return; + } +} + +let test = await actor.setupSkill('Cool', { + appendTitle: ` – ${this.effect.name}`, + skipTargets: true, + fields: {difficulty: 'easy'}, + characteristic: 'wp', +}); +await test.roll(); + +if (!test.succeeded) { + test.result.other.push(`${actor.name} became beguiled by the sight and unable to perform any action except moving towards the light.`); + test.renderRollCard(); + actor.addCondition("unconscious"); +} \ No newline at end of file diff --git a/reference_scripts/EDAMEOzdBfkoKHxP.js b/reference_scripts/EDAMEOzdBfkoKHxP.js new file mode 100644 index 0000000..6b1f28e --- /dev/null +++ b/reference_scripts/EDAMEOzdBfkoKHxP.js @@ -0,0 +1 @@ +return args.skill?.name !== game.i18n.localize("NAME.Navigation"); \ No newline at end of file diff --git a/reference_scripts/F2u4L4o0r1LTWeWK.js b/reference_scripts/F2u4L4o0r1LTWeWK.js new file mode 100644 index 0000000..7f9ad7e --- /dev/null +++ b/reference_scripts/F2u4L4o0r1LTWeWK.js @@ -0,0 +1,8 @@ +if (isNaN(parseInt(this.item.system.specification.value))) +{ + let value = await ValueDialog.create("Enter Terror value", this.effect.name); + if (value) + { + this.item.updateSource({"system.specification.value" : value}); + } +} \ No newline at end of file diff --git a/reference_scripts/FPYNcxm21678boLT.js b/reference_scripts/FPYNcxm21678boLT.js new file mode 100644 index 0000000..f08a8e4 --- /dev/null +++ b/reference_scripts/FPYNcxm21678boLT.js @@ -0,0 +1,18 @@ +if (args.attackerTest.data.preData.rollClass !== "CharacteristicTest") return; +if (args.attackerTest.data.preData.characteristic !== "s") return; + +const SL = args.opposedTest.data.opposeResult.differenceSL; + +const targetId = this.effect.getFlag("wfrp4e", "target"); +const target = canvas.scene.tokens.get(targetId); + +if (SL > 4) { + args.opposedTest.data.opposeResult.other.push(`${args.defenderTest.actor.name} was forced to let go of ${target.name}.`); + return await this.effect.delete(); +} + +if (SL > 0) { + args.opposedTest.data.opposeResult.other.push(`${args.defenderTest.actor.name} was prevented from squeezing ${target.name} for one turn.`); + let turns = this.effect.getFlag("wfrp4e", "turns"); + this.effect.setFlag("wfrp4e", "turns", turns + 1); +} \ No newline at end of file diff --git a/reference_scripts/FtZf56VI6Qsspu0D.js b/reference_scripts/FtZf56VI6Qsspu0D.js new file mode 100644 index 0000000..9ae4c74 --- /dev/null +++ b/reference_scripts/FtZf56VI6Qsspu0D.js @@ -0,0 +1,53 @@ +const repaired_message = `

Finished repairing ${this.item.name}.

`; +const test = 'Trade (Carpenter)'; +const difficulty = 'difficult'; +const target = 20; + +const extendedTestData = { + name: this.item.name, + type: "extendedTest", + img: this.item.img, + system: { + SL: { + current: 0, + target: target + }, + test: { + value: test + }, + completion: { + value: "remove" + }, + difficulty: { + value: difficulty + } + }, + effects: [ + { + name: `Repair the ${this.item.name}`, + icon: this.item.img, + flags: { + wfrp4e: { + applicationData: { + type: "document", + documentType: "Item" + }, + scriptData: [ + { + label: this.item.name, + script: ` + let id = this.item.flags.wfrp4e.fromEffect; + let effect = this.actor.appliedEffects.find(e => e.id === id); + this.script.scriptMessage("${repaired_message}"); + await effect.item.delete(); + `, + trigger: "deleteEffect" + } + ] + } + } + } + ] +}; + +await this.actor.createEmbeddedDocuments("Item", [extendedTestData], {fromEffect: this.effect.id}); diff --git a/reference_scripts/Fwk8WA8NfRivLFWJ.js b/reference_scripts/Fwk8WA8NfRivLFWJ.js new file mode 100644 index 0000000..5073111 --- /dev/null +++ b/reference_scripts/Fwk8WA8NfRivLFWJ.js @@ -0,0 +1 @@ +return args.skill?.name === "Entertain (Singing)"; \ No newline at end of file diff --git a/reference_scripts/GsAyB5xnK3ASeoah.js b/reference_scripts/GsAyB5xnK3ASeoah.js new file mode 100644 index 0000000..d75b3ac --- /dev/null +++ b/reference_scripts/GsAyB5xnK3ASeoah.js @@ -0,0 +1,53 @@ +const repaired_message = `

Finished repairing ${this.item.name}.

`; +const test = 'Trade (Carpentry)'; +const difficulty = 'easy'; +const target = 20; + +const extendedTestData = { + name: this.item.name, + type: "extendedTest", + img: this.item.img, + system: { + SL: { + current: 0, + target: target + }, + test: { + value: test + }, + completion: { + value: "remove" + }, + difficulty: { + value: difficulty + } + }, + effects: [ + { + name: `Repair the ${this.item.name}`, + icon: this.item.img, + flags: { + wfrp4e: { + applicationData: { + type: "document", + documentType: "Item" + }, + scriptData: [ + { + label: this.item.name, + script: ` + let id = this.item.flags.wfrp4e.fromEffect; + let effect = this.actor.appliedEffects.find(e => e.id === id); + this.script.scriptMessage("${repaired_message}"); + await effect.item.delete(); + `, + trigger: "deleteEffect" + } + ] + } + } + } + ] +}; + +await this.actor.createEmbeddedDocuments("Item", [extendedTestData], {fromEffect: this.effect.id}); diff --git a/reference_scripts/H85k4L3yICm7cfIk.js b/reference_scripts/H85k4L3yICm7cfIk.js new file mode 100644 index 0000000..57f847c --- /dev/null +++ b/reference_scripts/H85k4L3yICm7cfIk.js @@ -0,0 +1,53 @@ +const repaired_message = `

Finished repairing ${this.item.name}.

`; +const test = 'Sail'; +const difficulty = 'easy'; +const target = 10; + +const extendedTestData = { + name: this.item.name, + type: "extendedTest", + img: this.item.img, + system: { + SL: { + current: 0, + target: target + }, + test: { + value: test + }, + completion: { + value: "remove" + }, + difficulty: { + value: difficulty + } + }, + effects: [ + { + name: `Repair the ${this.item.name}`, + icon: this.item.img, + flags: { + wfrp4e: { + applicationData: { + type: "document", + documentType: "Item" + }, + scriptData: [ + { + label: this.item.name, + script: ` + let id = this.item.flags.wfrp4e.fromEffect; + let effect = this.actor.appliedEffects.find(e => e.id === id); + this.script.scriptMessage("${repaired_message}"); + await effect.item.delete(); + `, + trigger: "deleteEffect" + } + ] + } + } + } + ] +}; + +await this.actor.createEmbeddedDocuments("Item", [extendedTestData], {fromEffect: this.effect.id}); diff --git a/reference_scripts/HUKzssLxeQo1wbx9.js b/reference_scripts/HUKzssLxeQo1wbx9.js new file mode 100644 index 0000000..f0ea092 --- /dev/null +++ b/reference_scripts/HUKzssLxeQo1wbx9.js @@ -0,0 +1,11 @@ + + let test = await this.actor.setupSkill(game.i18n.localize("NAME.Endurance"), {fields: {difficulty : "average"}, appendTitle : " - Wounded"}) + await test.roll(); + if (test.failed) + { + fromUuid("Compendium.wfrp4e-core.items.kKccDTGzWzSXCBOb").then(disease => { + this.actor.createEmbeddedDocuments("Item", [disease.toObject()]) + this.script.scriptNotification("Gained " + disease.name) + }) + } + \ No newline at end of file diff --git a/reference_scripts/HYrl5aNMm8BAdqH7.js b/reference_scripts/HYrl5aNMm8BAdqH7.js new file mode 100644 index 0000000..b628745 --- /dev/null +++ b/reference_scripts/HYrl5aNMm8BAdqH7.js @@ -0,0 +1,8 @@ + + let modifier = 0 + if (this.effect.name.includes("Moderate")) + modifier = -20 + else + modifier = -10 + args.fields.modifier += modifier + \ No newline at end of file diff --git a/reference_scripts/HrOBAXsEX073ReKl.js b/reference_scripts/HrOBAXsEX073ReKl.js index de65a28..89b90d3 100644 --- a/reference_scripts/HrOBAXsEX073ReKl.js +++ b/reference_scripts/HrOBAXsEX073ReKl.js @@ -6,13 +6,16 @@ if (!currentCareer) return let inCurrentCareer = currentCareer.system.skills.includes(skill); -if (existingSkill && inCurrentCareer) +let perfectPitchAdded = this.actor.getFlag("wfrp4e", "perfectPitchAdded") || {}; +if (existingSkill && inCurrentCareer && !perfectPitchAdded[existingSkill.name]) { existingSkill.system.advances.costModifier = -5; } else { + perfectPitchAdded[skill] = true; currentCareer.system.skills.push(skill); + setProperty(this.actor, "flags.wfrp4e.perfectPitchAdded", perfectPitchAdded) } diff --git a/reference_scripts/IOroJBqTsWvoakJN.js b/reference_scripts/IOroJBqTsWvoakJN.js new file mode 100644 index 0000000..504fa5a --- /dev/null +++ b/reference_scripts/IOroJBqTsWvoakJN.js @@ -0,0 +1,2 @@ +if (args.actorsystem.details.move.oars.value > 0) + args.actor.system.details.move.oars.value -= 2; diff --git a/reference_scripts/IrkWq7IiFS65bTvC.js b/reference_scripts/IrkWq7IiFS65bTvC.js new file mode 100644 index 0000000..d775da2 --- /dev/null +++ b/reference_scripts/IrkWq7IiFS65bTvC.js @@ -0,0 +1,7 @@ +if (this.actor.flags.holed.half !== true) return; +if (this.actor.flags.holed.reminded === true) return; + +const speaker = ChatMessage.getSpeaker({actor: this.actor}); +this.script.scriptMessage(`

${speaker.alias} sits heavily in the water. Unless the cargo is waterproof, it loses [[d10]]% of its value.

`); + +this.actor.flags.holed.reminded = true; \ No newline at end of file diff --git a/reference_scripts/IzoOmDywGLqLNljN.js b/reference_scripts/IzoOmDywGLqLNljN.js new file mode 100644 index 0000000..2dd5130 --- /dev/null +++ b/reference_scripts/IzoOmDywGLqLNljN.js @@ -0,0 +1,19 @@ +let skill = `Language (Magick)` +let currentCareer = this.actor.system.currentCareer; +let existingSkill = this.actor.itemTypes.skill.find(i => i.name == skill); + +if (!currentCareer) return + + +let inCurrentCareer = currentCareer.system.skills.includes(skill); +let witchAdded = actor.getFlag("wfrp4e", "witchAdded") || {}; +if (existingSkill && inCurrentCareer && !witchAdded[existingSkill.name]) +{ + existingSkill.system.advances.costModifier = -5; +} +else +{ + witchAdded[skill] = true; + currentCareer.system.skills.push(skill); + setProperty(this.actor, "flags.wfrp4e.witchAdded", witchAdded) +} \ No newline at end of file diff --git a/reference_scripts/JBoKPBr27C3PMoSD.js b/reference_scripts/JBoKPBr27C3PMoSD.js new file mode 100644 index 0000000..c1ae1c1 --- /dev/null +++ b/reference_scripts/JBoKPBr27C3PMoSD.js @@ -0,0 +1 @@ +return args.skill?.name === game.i18n.localize("NAME.Navigation"); \ No newline at end of file diff --git a/reference_scripts/JXBUE0XuJOJNG7zE.js b/reference_scripts/JXBUE0XuJOJNG7zE.js new file mode 100644 index 0000000..de285b5 --- /dev/null +++ b/reference_scripts/JXBUE0XuJOJNG7zE.js @@ -0,0 +1,18 @@ +if (args.totalWoundLoss <= 7) return; + +let options = { + appendTitle : " – " + this.effect.name, + skipTargets: true, + fields: {difficulty: 'average'}, + characteristic: 'wp', +} + +let test = await args.actor.setupSkill('Cool', options); +await test.roll(); + +if (!test.succeeded) { + const targetId = this.effect.getFlag("wfrp4e", "target"); + const target = canvas.scene.tokens.get(targetId); + await this.effect.delete(); + args.extraMessages.push(`${args.actor.name} lost ${args.totalWoundLoss} Wounds to an attack, which caused it to let go of ${target.name}.`); +} \ No newline at end of file diff --git a/reference_scripts/JhbZWZhOJ23yOBmG.js b/reference_scripts/JhbZWZhOJ23yOBmG.js new file mode 100644 index 0000000..3f7c65c --- /dev/null +++ b/reference_scripts/JhbZWZhOJ23yOBmG.js @@ -0,0 +1,53 @@ +const repaired_message = `

Finished repairing ${this.item.name}.

`; +const test = 'Trade (Carpentry)'; +const difficulty = 'hard'; +const target = 30; + +const extendedTestData = { + name: this.item.name, + type: "extendedTest", + img: this.item.img, + system: { + SL: { + current: 0, + target: target + }, + test: { + value: test + }, + completion: { + value: "remove" + }, + difficulty: { + value: difficulty + } + }, + effects: [ + { + name: `Repair the ${this.item.name}`, + icon: this.item.img, + flags: { + wfrp4e: { + applicationData: { + type: "document", + documentType: "Item" + }, + scriptData: [ + { + label: this.item.name, + script: ` + let id = this.item.flags.wfrp4e.fromEffect; + let effect = this.actor.appliedEffects.find(e => e.id === id); + this.script.scriptMessage("${repaired_message}"); + await effect.item.delete(); + `, + trigger: "deleteEffect" + } + ] + } + } + } + ] +}; + +await this.actor.createEmbeddedDocuments("Item", [extendedTestData], {fromEffect: this.effect.id}); diff --git a/reference_scripts/LjfScVGBf0Egr70E.js b/reference_scripts/LjfScVGBf0Egr70E.js new file mode 100644 index 0000000..07e1a29 --- /dev/null +++ b/reference_scripts/LjfScVGBf0Egr70E.js @@ -0,0 +1,9 @@ +let animalCare = this.actor.itemTypes.skill.find(s => s.name === game.i18n.localize("NAME.AnimalCare")); +let animalTrainings = this.actor.itemTypes.skill.filter(s => s.name.includes(game.i18n.localize("NAME.AnimalTraining"))); + +if (animalCare) + animalCare.system.modifier.value += 20; + +for (let training of animalTrainings) { + training.system.modifier.value += 30; +} \ No newline at end of file diff --git a/reference_scripts/MIhYSuJ6MI9B65UT.js b/reference_scripts/MIhYSuJ6MI9B65UT.js new file mode 100644 index 0000000..a1d2254 --- /dev/null +++ b/reference_scripts/MIhYSuJ6MI9B65UT.js @@ -0,0 +1,4 @@ +let specification = Number(this.item.specification.value) || 1; +args.actor.system.status.wounds.max += Math.floor(args.actor.system.status.wounds.max * 0.3 * specification); +args.actor.system.status.carries.max -= Math.floor(args.actor.system.status.carries.max * 0.1 * specification); +args.actor.system.details.price.gc += Math.floor(args.actor.system.details.price.gc * 0.2 * specification); \ No newline at end of file diff --git a/reference_scripts/MMv2B8TH7jxNCtdl.js b/reference_scripts/MMv2B8TH7jxNCtdl.js new file mode 100644 index 0000000..a366058 --- /dev/null +++ b/reference_scripts/MMv2B8TH7jxNCtdl.js @@ -0,0 +1,52 @@ +let actor = this.actor; + let effect = this.effect; + let bleedingAmt; + let bleedingRoll; + let msg = "" + + let damage = effect.conditionValue; + let scriptArgs = {msg, damage}; + await Promise.all(actor.runScripts("preApplyCondition", {effect, data : scriptArgs})) + msg = scriptArgs.msg; + damage = scriptArgs.damage; + msg += await actor.applyBasicDamage(damage, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, minimumOne : false, suppressMsg : true}) + + if (actor.status.wounds.value == 0 && !actor.hasCondition("unconscious")) + { + await actor.addCondition("unconscious") + msg += "
" + game.i18n.format("BleedUnc", {name: actor.prototypeToken.name }) + } + + if (actor.hasCondition("unconscious")) + { + bleedingAmt = effect.conditionValue; + bleedingRoll = (await new Roll("1d100").roll()).total; + if (bleedingRoll <= bleedingAmt * 10) + { + msg += "
" + game.i18n.format("BleedFail", {name: actor.prototypeToken.name}) + " (" + game.i18n.localize("Rolled") + " " + bleedingRoll + ")"; + await actor.addCondition("dead") + } + else if (bleedingRoll % 11 == 0) + { + msg += "
" + game.i18n.format("BleedCrit", { name: actor.prototypeToken.name } ) + " (" + game.i18n.localize("Rolled") + bleedingRoll + ")" + await actor.removeCondition("bleeding") + } + else + { + msg += "
" + game.i18n.localize("BleedRoll") + ": " + bleedingRoll; + } + } + + await Promise.all(actor.runScripts("applyCondition", {effect, data : {bleedingRoll}})) + if (args.suppressMessage) + { + let messageData = game.wfrp4e.utility.chatDataSetup(msg); + messageData.speaker = {alias: this.effect.name} + messageData.flavor = this.effect.name; + return messageData + } + else + { + return this.script.scriptMessage(msg) + } + \ No newline at end of file diff --git a/reference_scripts/MMx8f5uJ15XOgJGg.js b/reference_scripts/MMx8f5uJ15XOgJGg.js new file mode 100644 index 0000000..8146820 --- /dev/null +++ b/reference_scripts/MMx8f5uJ15XOgJGg.js @@ -0,0 +1 @@ +return args.skill?.name !== game.i18n.localize("NAME.Row") && args.skill?.name !== game.i18n.localize("NAME.Swim") && !args.skill?.name.includes(game.i18n.localize("NAME.Sail")); \ No newline at end of file diff --git a/reference_scripts/Me1wS5XdqUEy7OGt.js b/reference_scripts/Me1wS5XdqUEy7OGt.js new file mode 100644 index 0000000..42fc77d --- /dev/null +++ b/reference_scripts/Me1wS5XdqUEy7OGt.js @@ -0,0 +1,5 @@ +let loc = (await game.wfrp4e.tables.rollTable("hitloc")).result; +let critTable = `crit${this.generalizeTable(loc)`; +let crit = (await game.wfrp4e.tables.rollTable(critTable)).result; + +this.script.scriptMessage(`{this.actor.name} suffers a ${crit} (location : ${loc}). Do not apply bleeding or any additonnal wounds.`); \ No newline at end of file diff --git a/reference_scripts/NI3ZzIAlpQfVSjvf.js b/reference_scripts/NI3ZzIAlpQfVSjvf.js new file mode 100644 index 0000000..3955b1a --- /dev/null +++ b/reference_scripts/NI3ZzIAlpQfVSjvf.js @@ -0,0 +1,8 @@ +if (isNaN(parseInt(this.item.system.specification.value))) +{ + let value = await ValueDialog.create("Enter Fear value", this.item.name); + if (value) + { + this.item.updateSource({"system.specification.value" : value}); + } +} \ No newline at end of file diff --git a/reference_scripts/O45vpR4jDbQQnmvJ.js b/reference_scripts/O45vpR4jDbQQnmvJ.js new file mode 100644 index 0000000..dceb5f0 --- /dev/null +++ b/reference_scripts/O45vpR4jDbQQnmvJ.js @@ -0,0 +1,13 @@ +let items = []; + +let etiquette = (await fromUuid("Compendium.wfrp4e-core.items.Item.sYbgpSnRqSZWgwFP")).toObject(); +etiquette.name += " (Followers of Khorne)"; + +items.push(etiquette); + +let animosity = (await fromUuid("Compendium.wfrp4e-core.items.Item.Q2MCUrG2HppMcvN0")).toObject(); +animosity.name = animosity.name.replace("(Target)", "(Followers of Slaanesh)"); + +items.push(animosity); + +await this.actor.createEmbeddedDocuments("Item", items, {fromEffect : this.effect.id}); diff --git a/reference_scripts/OsLXutfXyQCAkhAf.js b/reference_scripts/OsLXutfXyQCAkhAf.js new file mode 100644 index 0000000..7d8b91f --- /dev/null +++ b/reference_scripts/OsLXutfXyQCAkhAf.js @@ -0,0 +1,53 @@ +const repaired_message = `

Finished repairing ${this.item.name}.

`; +const test = 'Sail'; +const difficulty = 'average'; +const target = 30; + +const extendedTestData = { + name: this.item.name, + type: "extendedTest", + img: this.item.img, + system: { + SL: { + current: 0, + target: target + }, + test: { + value: test + }, + completion: { + value: "remove" + }, + difficulty: { + value: difficulty + } + }, + effects: [ + { + name: `Repair the ${this.item.name}`, + icon: this.item.img, + flags: { + wfrp4e: { + applicationData: { + type: "document", + documentType: "Item" + }, + scriptData: [ + { + label: this.item.name, + script: ` + let id = this.item.flags.wfrp4e.fromEffect; + let effect = this.actor.appliedEffects.find(e => e.id === id); + this.script.scriptMessage("${repaired_message}"); + await effect.item.delete(); + `, + trigger: "deleteEffect" + } + ] + } + } + } + ] +}; + +await this.actor.createEmbeddedDocuments("Item", [extendedTestData], {fromEffect: this.effect.id}); diff --git a/reference_scripts/Pn5fekTbkwlr61XU.js b/reference_scripts/Pn5fekTbkwlr61XU.js new file mode 100644 index 0000000..63064a6 --- /dev/null +++ b/reference_scripts/Pn5fekTbkwlr61XU.js @@ -0,0 +1,53 @@ +const repaired_message = `

Finished repairing ${this.item.name}.

`; +const test = 'Trade (Engineer)'; +const difficulty = 'easy'; +const target = 10; + +const extendedTestData = { + name: this.item.name, + type: "extendedTest", + img: this.item.img, + system: { + SL: { + current: 0, + target: target + }, + test: { + value: test + }, + completion: { + value: "remove" + }, + difficulty: { + value: difficulty + } + }, + effects: [ + { + name: `Repair the ${this.item.name}`, + icon: this.item.img, + flags: { + wfrp4e: { + applicationData: { + type: "document", + documentType: "Item" + }, + scriptData: [ + { + label: this.item.name, + script: ` + let id = this.item.flags.wfrp4e.fromEffect; + let effect = this.actor.appliedEffects.find(e => e.id === id); + this.script.scriptMessage("${repaired_message}"); + await effect.item.delete(); + `, + trigger: "deleteEffect" + } + ] + } + } + } + ] +}; + +await this.actor.createEmbeddedDocuments("Item", [extendedTestData], {fromEffect: this.effect.id}); diff --git a/reference_scripts/PsO7aTdELJt35eHP.js b/reference_scripts/PsO7aTdELJt35eHP.js new file mode 100644 index 0000000..08dcbea --- /dev/null +++ b/reference_scripts/PsO7aTdELJt35eHP.js @@ -0,0 +1,10 @@ +let morale = await new Roll("-1d10").roll(); +let mood = await new Roll("-2d10").roll(); + +morale.toMessage(this.script.getChatData({flavor : "Morale"})); +mood.toMessage(this.script.getChatData({flavor : "Manann's Mood"})); + +await this.actor.system.status.morale.addEntry("Albatross Died", morale.total) +await this.actor.system.status.mood.addEntry("Albatross Died", mood.total); + +this.effect.delete(); \ No newline at end of file diff --git a/reference_scripts/Q5gh5Y9dCdclcwsD.js b/reference_scripts/Q5gh5Y9dCdclcwsD.js new file mode 100644 index 0000000..50f5352 --- /dev/null +++ b/reference_scripts/Q5gh5Y9dCdclcwsD.js @@ -0,0 +1 @@ +return !args.skill?.name.includes(game.i18n.localize("NAME.Channelling")) && args.skill?.name != `${game.i18n.localize("NAME.Language")} (${game.i18n.localize("SPEC.Magick")})` \ No newline at end of file diff --git a/reference_scripts/Q7eULXQ9AfDRmUGO.js b/reference_scripts/Q7eULXQ9AfDRmUGO.js new file mode 100644 index 0000000..233c0f9 --- /dev/null +++ b/reference_scripts/Q7eULXQ9AfDRmUGO.js @@ -0,0 +1,53 @@ +const repaired_message = `

Finished repairing ${this.item.name}.

`; +const test = 'Trade (Carpenter)'; +const difficulty = 'difficult'; +const target = 40; + +const extendedTestData = { + name: this.item.name, + type: "extendedTest", + img: this.item.img, + system: { + SL: { + current: 0, + target: target + }, + test: { + value: test + }, + completion: { + value: "remove" + }, + difficulty: { + value: difficulty + } + }, + effects: [ + { + name: `Repair the ${this.item.name}`, + icon: this.item.img, + flags: { + wfrp4e: { + applicationData: { + type: "document", + documentType: "Item" + }, + scriptData: [ + { + label: this.item.name, + script: ` + let id = this.item.flags.wfrp4e.fromEffect; + let effect = this.actor.appliedEffects.find(e => e.id === id); + this.script.scriptMessage("${repaired_message}"); + await effect.item.delete(); + `, + trigger: "deleteEffect" + } + ] + } + } + } + ] +}; + +await this.actor.createEmbeddedDocuments("Item", [extendedTestData], {fromEffect: this.effect.id}); diff --git a/reference_scripts/QHQ7XmFOjT9wXgw1.js b/reference_scripts/QHQ7XmFOjT9wXgw1.js new file mode 100644 index 0000000..3a516b8 --- /dev/null +++ b/reference_scripts/QHQ7XmFOjT9wXgw1.js @@ -0,0 +1,4 @@ +if (args.actorsystem.details.move.oars.value > 0) + args.actor.system.details.move.oars.value -= 1; + +args.actor.system.details.man -= 2; \ No newline at end of file diff --git a/reference_scripts/QNxmImpLTou6WdMQ.js b/reference_scripts/QNxmImpLTou6WdMQ.js new file mode 100644 index 0000000..0e082dd --- /dev/null +++ b/reference_scripts/QNxmImpLTou6WdMQ.js @@ -0,0 +1,3 @@ +let test = args.test +if (test.result.minormis || test.result.majormis || test.result.catastrophicmis) + test.result.other.push("Can make a Difficult (-10) Willpower Test to prevent the Miscast") \ No newline at end of file diff --git a/reference_scripts/QfTBRGXVfwQSghmd.js b/reference_scripts/QfTBRGXVfwQSghmd.js new file mode 100644 index 0000000..99a5992 --- /dev/null +++ b/reference_scripts/QfTBRGXVfwQSghmd.js @@ -0,0 +1,18 @@ +fromUuid(this.effect.origin).then(caster => { + if (caster) { + if (actor.items.find(it => it.name == game.i18n.localize("Bestial"))) { + let healed = caster.characteristics.wp.bonus + let wounds = duplicate(args.actor.status.wounds) + wounds.value += healed + + if (wounds.value > wounds.max) + wounds.value = wounds.max + + args.actor.update({ "system.status.wounds": wounds }) + ChatMessage.create({ content: `${this.actor.prototypeToken.name} regains ${healed} Wounds`, speaker: { alias: this.effect.name } }) + } else { + ui.notifications.warn("Target actor has no Bestial trait") + } + } +}) + diff --git a/reference_scripts/R8FBHZaaARA3z9pB.js b/reference_scripts/R8FBHZaaARA3z9pB.js new file mode 100644 index 0000000..29b9079 --- /dev/null +++ b/reference_scripts/R8FBHZaaARA3z9pB.js @@ -0,0 +1,53 @@ +const repaired_message = `

Finished repairing ${this.item.name}.

`; +const test = 'Trade (Carpenter)'; +const difficulty = 'hard'; +const target = 40; + +const extendedTestData = { + name: this.item.name, + type: "extendedTest", + img: this.item.img, + system: { + SL: { + current: 0, + target: target + }, + test: { + value: test + }, + completion: { + value: "remove" + }, + difficulty: { + value: difficulty + } + }, + effects: [ + { + name: `Repair the ${this.item.name}`, + icon: this.item.img, + flags: { + wfrp4e: { + applicationData: { + type: "document", + documentType: "Item" + }, + scriptData: [ + { + label: this.item.name, + script: ` + let id = this.item.flags.wfrp4e.fromEffect; + let effect = this.actor.appliedEffects.find(e => e.id === id); + this.script.scriptMessage("${repaired_message}"); + await effect.item.delete(); + `, + trigger: "deleteEffect" + } + ] + } + } + } + ] +}; + +await this.actor.createEmbeddedDocuments("Item", [extendedTestData], {fromEffect: this.effect.id}); diff --git a/reference_scripts/R8ecKGRzOr4ThvVa.js b/reference_scripts/R8ecKGRzOr4ThvVa.js new file mode 100644 index 0000000..875dec8 --- /dev/null +++ b/reference_scripts/R8ecKGRzOr4ThvVa.js @@ -0,0 +1,53 @@ +const repaired_message = `

Finished repairing ${this.item.name}.

`; +const test = 'Maintenance Crew Test'; +const difficulty = 'hard'; +const target = 80; + +const extendedTestData = { + name: this.item.name, + type: "extendedTest", + img: this.item.img, + system: { + SL: { + current: 0, + target: target + }, + test: { + value: test + }, + completion: { + value: "remove" + }, + difficulty: { + value: difficulty + } + }, + effects: [ + { + name: `Repair the ${this.item.name}`, + icon: this.item.img, + flags: { + wfrp4e: { + applicationData: { + type: "document", + documentType: "Item" + }, + scriptData: [ + { + label: this.item.name, + script: ` + let id = this.item.flags.wfrp4e.fromEffect; + let effect = this.actor.appliedEffects.find(e => e.id === id); + this.script.scriptMessage("${repaired_message}"); + await effect.item.delete(); + `, + trigger: "deleteEffect" + } + ] + } + } + } + ] +}; + +await this.actor.createEmbeddedDocuments("Item", [extendedTestData], {fromEffect: this.effect.id}); diff --git a/reference_scripts/RPqgRUkiLY5thVbC.js b/reference_scripts/RPqgRUkiLY5thVbC.js new file mode 100644 index 0000000..cc3928e --- /dev/null +++ b/reference_scripts/RPqgRUkiLY5thVbC.js @@ -0,0 +1,53 @@ +const repaired_message = `

Finished repairing ${this.item.name}.

`; +const test = 'Strength'; +const difficulty = 'average'; +const target = 10; + +const extendedTestData = { + name: this.item.name, + type: "extendedTest", + img: this.item.img, + system: { + SL: { + current: 0, + target: target + }, + test: { + value: test + }, + completion: { + value: "remove" + }, + difficulty: { + value: difficulty + } + }, + effects: [ + { + name: `Repair the ${this.item.name}`, + icon: this.item.img, + flags: { + wfrp4e: { + applicationData: { + type: "document", + documentType: "Item" + }, + scriptData: [ + { + label: this.item.name, + script: ` + let id = this.item.flags.wfrp4e.fromEffect; + let effect = this.actor.appliedEffects.find(e => e.id === id); + this.script.scriptMessage("${repaired_message}"); + await effect.item.delete(); + `, + trigger: "deleteEffect" + } + ] + } + } + } + ] +}; + +await this.actor.createEmbeddedDocuments("Item", [extendedTestData], {fromEffect: this.effect.id}); diff --git a/reference_scripts/RlhOAKfN0ghrrooR.js b/reference_scripts/RlhOAKfN0ghrrooR.js new file mode 100644 index 0000000..b0e5aae --- /dev/null +++ b/reference_scripts/RlhOAKfN0ghrrooR.js @@ -0,0 +1,7 @@ +let holed = this.actor.appliedEffects.filter(e => e.name.includes("Holed")); + +for (let effect of holed) { + await effect.update({name: effect.name.replace(/\d+/, rating => parseInt(rating) * 2)}); +} + +this.script.scriptNotification(`Holed Ratings of ${this.actor.name} have been doubled.`); \ No newline at end of file diff --git a/reference_scripts/Rnpw6UQdJifLeuna.js b/reference_scripts/Rnpw6UQdJifLeuna.js new file mode 100644 index 0000000..b9fc369 --- /dev/null +++ b/reference_scripts/Rnpw6UQdJifLeuna.js @@ -0,0 +1 @@ +this.effect.updateSource({"flags.wfrp4e.applicationData.type" : "crew"}) \ No newline at end of file diff --git a/reference_scripts/RsWXCcYHONf3ANlD.js b/reference_scripts/RsWXCcYHONf3ANlD.js new file mode 100644 index 0000000..8924600 --- /dev/null +++ b/reference_scripts/RsWXCcYHONf3ANlD.js @@ -0,0 +1 @@ +this.actor.addCondition("stunned", 1); diff --git a/reference_scripts/RwMw848y13Jq2L4f.js b/reference_scripts/RwMw848y13Jq2L4f.js new file mode 100644 index 0000000..d6186a0 --- /dev/null +++ b/reference_scripts/RwMw848y13Jq2L4f.js @@ -0,0 +1,23 @@ +let test = await this.actor.setupSkill("Endurance", {fields : {difficulty : "difficult"}, appendTitle : ` - ${this.effect.name}`}); +await test.roll(); +if (test.failed) +{ + await this.actor.addCondition("blinded"); +} + +let msg = `` +let armour = args.actor.itemTypes.armour.filter(i => i.system.isMetal && i.system.isEquipped); +for(let item of armour) +{ + for(let key in item.system.AP) + { + let AP = item.system.AP[key] + let damage = Math.floor(AP / 2); + await item.system.damageItem(damage, [key]); + } + msg += `

${item.name} AP reduced by half

` +} +if (msg) +{ + this.script.scriptMessage(msg, {speaker : {alias : args.actor.name}}); +} \ No newline at end of file diff --git a/reference_scripts/SWIJjM2RCmzfr64u.js b/reference_scripts/SWIJjM2RCmzfr64u.js index 5a07e2e..4f762e1 100644 --- a/reference_scripts/SWIJjM2RCmzfr64u.js +++ b/reference_scripts/SWIJjM2RCmzfr64u.js @@ -1,4 +1,4 @@ -if (args.test.result.hitloc.result == "head") +if (args.test.result.hitloc.result == "head" && args.test.result.critical) { args.test.result.critModifier = args.test.result.critModifier ? args.test.result.critModifier + 40 : 40 diff --git a/reference_scripts/SefcrhXsdYGFcCW6.js b/reference_scripts/SefcrhXsdYGFcCW6.js new file mode 100644 index 0000000..13bf563 --- /dev/null +++ b/reference_scripts/SefcrhXsdYGFcCW6.js @@ -0,0 +1,3 @@ +args.actor.system.details.move.value -= 3; +args.actor.system.details.man -= 2; +args.actor.system.status.carries.max *= 2; \ No newline at end of file diff --git a/reference_scripts/Ssn21dxoMQiqD1y4.js b/reference_scripts/Ssn21dxoMQiqD1y4.js new file mode 100644 index 0000000..6767d5a --- /dev/null +++ b/reference_scripts/Ssn21dxoMQiqD1y4.js @@ -0,0 +1 @@ +return args.type == "cast" && args.item.lore.value == "fire" \ No newline at end of file diff --git a/reference_scripts/T3RfSt3VMEat3iDD.js b/reference_scripts/T3RfSt3VMEat3iDD.js new file mode 100644 index 0000000..747d789 --- /dev/null +++ b/reference_scripts/T3RfSt3VMEat3iDD.js @@ -0,0 +1 @@ +return args.skill?.name !== game.i18n.localize("NAME.Perception"); \ No newline at end of file diff --git a/reference_scripts/UDPsaymtZf39UsMk.js b/reference_scripts/UDPsaymtZf39UsMk.js new file mode 100644 index 0000000..ba3519f --- /dev/null +++ b/reference_scripts/UDPsaymtZf39UsMk.js @@ -0,0 +1,7 @@ + + let fatigued = this.actor.hasCondition("fatigued") + if (!fatigued) + { + this.actor.addCondition("fatigued") + ui.notifications.notify("Fatigued added to " + this.actor.name + " which cannot be removed until the Malaise symptom is gone.") + } \ No newline at end of file diff --git a/reference_scripts/UXdlnmwVgjc1QpF2.js b/reference_scripts/UXdlnmwVgjc1QpF2.js new file mode 100644 index 0000000..999ec85 --- /dev/null +++ b/reference_scripts/UXdlnmwVgjc1QpF2.js @@ -0,0 +1,2 @@ +args.actor.system.details.move.value += 1; +args.actor.system.status.carries.max = Math.floor(args.actor.system.status.carries.max * 0.75); \ No newline at end of file diff --git a/reference_scripts/UlRSaZG4ZUU6fMND.js b/reference_scripts/UlRSaZG4ZUU6fMND.js new file mode 100644 index 0000000..7e0b3e6 --- /dev/null +++ b/reference_scripts/UlRSaZG4ZUU6fMND.js @@ -0,0 +1,53 @@ +const repaired_message = `

Finished repairing ${this.item.name}.

`; +const test = 'Trade (Carpenter)'; +const difficulty = 'challenging'; +const target = 10; + +const extendedTestData = { + name: this.item.name, + type: "extendedTest", + img: this.item.img, + system: { + SL: { + current: 0, + target: target + }, + test: { + value: test + }, + completion: { + value: "remove" + }, + difficulty: { + value: difficulty + } + }, + effects: [ + { + name: `Repair the ${this.item.name}`, + icon: this.item.img, + flags: { + wfrp4e: { + applicationData: { + type: "document", + documentType: "Item" + }, + scriptData: [ + { + label: this.item.name, + script: ` + let id = this.item.flags.wfrp4e.fromEffect; + let effect = this.actor.appliedEffects.find(e => e.id === id); + this.script.scriptMessage("${repaired_message}"); + await effect.item.delete(); + `, + trigger: "deleteEffect" + } + ] + } + } + } + ] +}; + +await this.actor.createEmbeddedDocuments("Item", [extendedTestData], {fromEffect: this.effect.id}); diff --git a/reference_scripts/UtqUthabeQ4rHDLQ.js b/reference_scripts/UtqUthabeQ4rHDLQ.js new file mode 100644 index 0000000..291bca4 --- /dev/null +++ b/reference_scripts/UtqUthabeQ4rHDLQ.js @@ -0,0 +1,2 @@ +let item = await fromUuid("Compendium.wfrp4e-core.items.Item.tNWrJUOArwfWXsPw"); +this.actor.createEmbeddedDocuments("Item", [item], {fromEffect: this.effect.id}); \ No newline at end of file diff --git a/reference_scripts/Uvk1X7sEhvv77YkD.js b/reference_scripts/Uvk1X7sEhvv77YkD.js new file mode 100644 index 0000000..ea8388a --- /dev/null +++ b/reference_scripts/Uvk1X7sEhvv77YkD.js @@ -0,0 +1,5 @@ +if (!args.flags.distractingApplied) +{ + args.fields.modifier -= 20; + args.flags.distractingApplied = true; +} \ No newline at end of file diff --git a/reference_scripts/VINX6TBAJQznhVcN.js b/reference_scripts/VINX6TBAJQznhVcN.js new file mode 100644 index 0000000..87ceb4a --- /dev/null +++ b/reference_scripts/VINX6TBAJQznhVcN.js @@ -0,0 +1,53 @@ +const repaired_message = `

Finished replacing ${this.item.name} with a makeshift one.

`; +const test = 'Maintenance Crew Test'; +const difficulty = 'hard'; +const target = 80; + +const extendedTestData = { + name: this.item.name, + type: "extendedTest", + img: this.item.img, + system: { + SL: { + current: 0, + target: target + }, + test: { + value: test + }, + completion: { + value: "remove" + }, + difficulty: { + value: difficulty + } + }, + effects: [ + { + name: `Repair the ${this.item.name}`, + icon: this.item.img, + flags: { + wfrp4e: { + applicationData: { + type: "document", + documentType: "Item" + }, + scriptData: [ + { + label: this.item.name, + script: ` + let id = this.item.flags.wfrp4e.fromEffect; + let effect = this.actor.appliedEffects.find(e => e.id === id); + this.script.scriptMessage("${repaired_message}"); + await effect.item.delete(); + `, + trigger: "deleteEffect" + } + ] + } + } + } + ] +}; + +await this.actor.createEmbeddedDocuments("Item", [extendedTestData], {fromEffect: this.effect.id}); diff --git a/reference_scripts/VLdF2HPnCrNIgp7a.js b/reference_scripts/VLdF2HPnCrNIgp7a.js new file mode 100644 index 0000000..a04183d --- /dev/null +++ b/reference_scripts/VLdF2HPnCrNIgp7a.js @@ -0,0 +1,13 @@ +let items = []; + +let etiquette = (await fromUuid("Compendium.wfrp4e-core.items.Item.sYbgpSnRqSZWgwFP")).toObject(); +etiquette.name += " (Followers of Khorne)"; + +items.push(etiquette); + +let animosity = (await fromUuid("Compendium.wfrp4e-core.items.Item.0VpT5yubw4UL7j6f")).toObject(); + animosity.system.specification.value = "Followers of Slaanesh"; + +items.push(animosity); + +await this.actor.createEmbeddedDocuments("Item", items, {fromEffect : this.effect.id}); diff --git a/reference_scripts/VTS4RzbmReI87K9a.js b/reference_scripts/VTS4RzbmReI87K9a.js new file mode 100644 index 0000000..7281d15 --- /dev/null +++ b/reference_scripts/VTS4RzbmReI87K9a.js @@ -0,0 +1 @@ +args.fields.slBonus = Math.floor(this.item.system.total.value * 0.1); \ No newline at end of file diff --git a/reference_scripts/VlHuDIAvPr8JM1P5.js b/reference_scripts/VlHuDIAvPr8JM1P5.js new file mode 100644 index 0000000..3f2a904 --- /dev/null +++ b/reference_scripts/VlHuDIAvPr8JM1P5.js @@ -0,0 +1 @@ +return args.skill?.name !== game.i18n.localize("NAME.Row"); \ No newline at end of file diff --git a/reference_scripts/Vns6WrafVq8NjX7t.js b/reference_scripts/Vns6WrafVq8NjX7t.js new file mode 100644 index 0000000..3b16346 --- /dev/null +++ b/reference_scripts/Vns6WrafVq8NjX7t.js @@ -0,0 +1 @@ +return args.skill?.name != game.i18n.localize("NAME.Heal") \ No newline at end of file diff --git a/reference_scripts/WJkwIrdj4NceOYe8.js b/reference_scripts/WJkwIrdj4NceOYe8.js new file mode 100644 index 0000000..47fd0a7 --- /dev/null +++ b/reference_scripts/WJkwIrdj4NceOYe8.js @@ -0,0 +1 @@ +return args.characteristic !== 'fel'; \ No newline at end of file diff --git a/reference_scripts/WR0Kqn8CF5iwToak.js b/reference_scripts/WR0Kqn8CF5iwToak.js new file mode 100644 index 0000000..60fd32e --- /dev/null +++ b/reference_scripts/WR0Kqn8CF5iwToak.js @@ -0,0 +1,53 @@ +const repaired_message = `

Finished repairing ${this.item.name}.

`; +const test = 'Trade (Tailor)'; +const difficulty = 'difficult'; +const target = 40; + +const extendedTestData = { + name: this.item.name, + type: "extendedTest", + img: this.item.img, + system: { + SL: { + current: 0, + target: target + }, + test: { + value: test + }, + completion: { + value: "remove" + }, + difficulty: { + value: difficulty + } + }, + effects: [ + { + name: `Repair the ${this.item.name}`, + icon: this.item.img, + flags: { + wfrp4e: { + applicationData: { + type: "document", + documentType: "Item" + }, + scriptData: [ + { + label: this.item.name, + script: ` + let id = this.item.flags.wfrp4e.fromEffect; + let effect = this.actor.appliedEffects.find(e => e.id === id); + this.script.scriptMessage("${repaired_message}"); + await effect.item.delete(); + `, + trigger: "deleteEffect" + } + ] + } + } + } + ] +}; + +await this.actor.createEmbeddedDocuments("Item", [extendedTestData], {fromEffect: this.effect.id}); diff --git a/reference_scripts/WeTlTniskT3Ej6vg.js b/reference_scripts/WeTlTniskT3Ej6vg.js new file mode 100644 index 0000000..5ae3d41 --- /dev/null +++ b/reference_scripts/WeTlTniskT3Ej6vg.js @@ -0,0 +1 @@ +args.modifiers.other.push({label : this.effect.name, value : 2}) \ No newline at end of file diff --git a/reference_scripts/X08401eOhKJrhNf1.js b/reference_scripts/X08401eOhKJrhNf1.js new file mode 100644 index 0000000..cb65e67 --- /dev/null +++ b/reference_scripts/X08401eOhKJrhNf1.js @@ -0,0 +1,9 @@ +const grim = this.actor.items.find(i => i.type === "trait" && i.name.includes("Grim")); + +if (args.options?.deltaAdv > 0 && this.actor.hasCondition("engaged") && grim.specification.value !== 4) { + grim.update({"system.specification.value": 4}); +} + +if (!this.actor.hasCondition("engaged") && grim.specification.value !== 2) { + grim.update({"system.specification.value": 2}); +} \ No newline at end of file diff --git a/reference_scripts/X3vpmNUj9SL2CDnF.js b/reference_scripts/X3vpmNUj9SL2CDnF.js new file mode 100644 index 0000000..329c5ee --- /dev/null +++ b/reference_scripts/X3vpmNUj9SL2CDnF.js @@ -0,0 +1,2 @@ +let item = args.actor.items.find(i => i.name.includes("Flying Jib")); +item.name += ` (Disabled by ${this.item.name})`; \ No newline at end of file diff --git a/reference_scripts/XCAfy460IotarQek.js b/reference_scripts/XCAfy460IotarQek.js new file mode 100644 index 0000000..92b4e92 --- /dev/null +++ b/reference_scripts/XCAfy460IotarQek.js @@ -0,0 +1 @@ +return false; \ No newline at end of file diff --git a/reference_scripts/YySjPfSAPdMAfjsh.js b/reference_scripts/YySjPfSAPdMAfjsh.js new file mode 100644 index 0000000..f6d648c --- /dev/null +++ b/reference_scripts/YySjPfSAPdMAfjsh.js @@ -0,0 +1,11 @@ +let talents = ["Berserk Charge", "Combat Aware", "Combat Reflexes", "Furious Assault", "Implacable", "Magic Resistance", "Resistance (Magic)", "Resolute", "Strike Mighty Blow", "Warrior Born"]; +let currentCareer = this.actor.system.currentCareer; + +if (!currentCareer) return; + +for (let talent of talents) { + if (currentCareer.system.talents.includes(talent)) + continue; + currentCareer.system.talents.push(talent); +} + diff --git a/reference_scripts/Z41L3MwOpJdAjVaj.js b/reference_scripts/Z41L3MwOpJdAjVaj.js new file mode 100644 index 0000000..e772071 --- /dev/null +++ b/reference_scripts/Z41L3MwOpJdAjVaj.js @@ -0,0 +1,2 @@ +if (args.actorsystem.details.move.sail.value > 0) + args.actor.system.details.move.sail.value -= 2; diff --git a/reference_scripts/ZCBcwbVFHFTFRntb.js b/reference_scripts/ZCBcwbVFHFTFRntb.js new file mode 100644 index 0000000..da61c9c --- /dev/null +++ b/reference_scripts/ZCBcwbVFHFTFRntb.js @@ -0,0 +1,53 @@ +const repaired_message = `

Finished repairing ${this.item.name}.

`; +const test = 'Trade (Carpentry)'; +const difficulty = 'easy'; +const target = 10; + +const extendedTestData = { + name: this.item.name, + type: "extendedTest", + img: this.item.img, + system: { + SL: { + current: 0, + target: target + }, + test: { + value: test + }, + completion: { + value: "remove" + }, + difficulty: { + value: difficulty + } + }, + effects: [ + { + name: `Repair the ${this.item.name}`, + icon: this.item.img, + flags: { + wfrp4e: { + applicationData: { + type: "document", + documentType: "Item" + }, + scriptData: [ + { + label: this.item.name, + script: ` + let id = this.item.flags.wfrp4e.fromEffect; + let effect = this.actor.appliedEffects.find(e => e.id === id); + this.script.scriptMessage("${repaired_message}"); + await effect.item.delete(); + `, + trigger: "deleteEffect" + } + ] + } + } + } + ] +}; + +await this.actor.createEmbeddedDocuments("Item", [extendedTestData], {fromEffect: this.effect.id}); diff --git a/reference_scripts/ZLspFT2I3ZdWWr2H.js b/reference_scripts/ZLspFT2I3ZdWWr2H.js new file mode 100644 index 0000000..a3fa949 --- /dev/null +++ b/reference_scripts/ZLspFT2I3ZdWWr2H.js @@ -0,0 +1 @@ +return args.skill?.name !== game.i18n.localize("NAME.Leadership"); \ No newline at end of file diff --git a/reference_scripts/ZOgtDW3mkTfeyc5M.js b/reference_scripts/ZOgtDW3mkTfeyc5M.js new file mode 100644 index 0000000..5e590a8 --- /dev/null +++ b/reference_scripts/ZOgtDW3mkTfeyc5M.js @@ -0,0 +1 @@ +args.actor.system.details.price.gc += args.actor.system.details.price.gc * 0.1; \ No newline at end of file diff --git a/reference_scripts/ZRoG7GiMDQWso6gN.js b/reference_scripts/ZRoG7GiMDQWso6gN.js new file mode 100644 index 0000000..3dbc1f6 --- /dev/null +++ b/reference_scripts/ZRoG7GiMDQWso6gN.js @@ -0,0 +1,53 @@ +const repaired_message = `

Finished repairing ${this.item.name}.

`; +const test = 'Trade (Carpentry)'; +const difficulty = 'difficult'; +const target = 30; + +const extendedTestData = { + name: this.item.name, + type: "extendedTest", + img: this.item.img, + system: { + SL: { + current: 0, + target: target + }, + test: { + value: test + }, + completion: { + value: "remove" + }, + difficulty: { + value: difficulty + } + }, + effects: [ + { + name: `Repair the ${this.item.name}`, + icon: this.item.img, + flags: { + wfrp4e: { + applicationData: { + type: "document", + documentType: "Item" + }, + scriptData: [ + { + label: this.item.name, + script: ` + let id = this.item.flags.wfrp4e.fromEffect; + let effect = this.actor.appliedEffects.find(e => e.id === id); + this.script.scriptMessage("${repaired_message}"); + await effect.item.delete(); + `, + trigger: "deleteEffect" + } + ] + } + } + } + ] +}; + +await this.actor.createEmbeddedDocuments("Item", [extendedTestData], {fromEffect: this.effect.id}); diff --git a/reference_scripts/ZuoIVv3nmlGhhdx0.js b/reference_scripts/ZuoIVv3nmlGhhdx0.js new file mode 100644 index 0000000..3c729c7 --- /dev/null +++ b/reference_scripts/ZuoIVv3nmlGhhdx0.js @@ -0,0 +1,4 @@ +let rating = parseInt(this.effect.name.match(/\d+/)?.[0]) || 1; +let holed = this.actor.flags.holed || {holed: 0}; +holed.holed += rating; +this.actor.flags.holed = holed; diff --git a/reference_scripts/araS9qYWOAVrV8F7.js b/reference_scripts/araS9qYWOAVrV8F7.js new file mode 100644 index 0000000..7415a12 --- /dev/null +++ b/reference_scripts/araS9qYWOAVrV8F7.js @@ -0,0 +1,2 @@ +args.actor.system.details.man -= 3; +args.actor.system.details.move.value -= 2; \ No newline at end of file diff --git a/reference_scripts/b8G4cjfn3RG2tEYX.js b/reference_scripts/b8G4cjfn3RG2tEYX.js new file mode 100644 index 0000000..692d5e5 --- /dev/null +++ b/reference_scripts/b8G4cjfn3RG2tEYX.js @@ -0,0 +1 @@ +this.actor.addCondition("ablaze", 3); \ No newline at end of file diff --git a/reference_scripts/bL98Sr1TRLMPEdlk.js b/reference_scripts/bL98Sr1TRLMPEdlk.js new file mode 100644 index 0000000..7f837ba --- /dev/null +++ b/reference_scripts/bL98Sr1TRLMPEdlk.js @@ -0,0 +1,4 @@ +if (args.test.failed) +{ + this.actor.addCondition("fatigued"); +} \ No newline at end of file diff --git a/reference_scripts/bRiFHPC1StKxqNIC.js b/reference_scripts/bRiFHPC1StKxqNIC.js new file mode 100644 index 0000000..0879a8c --- /dev/null +++ b/reference_scripts/bRiFHPC1StKxqNIC.js @@ -0,0 +1,6 @@ +if (isNaN(parseInt(this.item.system.specification.value))) { + let value = await ValueDialog.create("Sturdy Value", "Enter the Sturdy value"); + if (value) { + this.item.updateSource({"system.specification.value" : value}); + } +} \ No newline at end of file diff --git a/reference_scripts/cJFDnq1HI4gXWcJo.js b/reference_scripts/cJFDnq1HI4gXWcJo.js index 7371b34..427e3a8 100644 --- a/reference_scripts/cJFDnq1HI4gXWcJo.js +++ b/reference_scripts/cJFDnq1HI4gXWcJo.js @@ -1,6 +1,6 @@ if (isNaN(parseInt(this.item.system.specification.value))) { - let value = await ValueDialog.create("Ward Value", "Enter the Ward value"); + let value = await ValueDialog.create("Enter Ward value", this.effect.name); if (value) { this.item.updateSource({"system.specification.value" : value}); diff --git a/reference_scripts/cTYNaKbepMwqYsZ8.js b/reference_scripts/cTYNaKbepMwqYsZ8.js new file mode 100644 index 0000000..20d2172 --- /dev/null +++ b/reference_scripts/cTYNaKbepMwqYsZ8.js @@ -0,0 +1,16 @@ + + let difficulty = "" + if (this.effect.name.includes("Moderate")) + difficulty = "easy" + else if (this.effect.name.includes("Severe")) + difficulty = "average" + else + difficulty = "veasy" + + let test = await this.actor.setupSkill(game.i18n.localize("NAME.Endurance"), {context : {failure : this.actor.name + " dies from Blight"}, fields: {difficulty}, appendTitle : " - Blight"}) + await test.roll(); + if (test.failed) + { + this.actor.addCondition("dead"); + } + \ No newline at end of file diff --git a/reference_scripts/ckKbPfaTiQ2qBZdR.js b/reference_scripts/ckKbPfaTiQ2qBZdR.js new file mode 100644 index 0000000..39c15b2 --- /dev/null +++ b/reference_scripts/ckKbPfaTiQ2qBZdR.js @@ -0,0 +1 @@ +console.log("DAMAGE", this) \ No newline at end of file diff --git a/reference_scripts/dULCkRxtisuzQyuK.js b/reference_scripts/dULCkRxtisuzQyuK.js new file mode 100644 index 0000000..aa8b036 --- /dev/null +++ b/reference_scripts/dULCkRxtisuzQyuK.js @@ -0,0 +1,2 @@ +if (args.options.condition) + this.effect.delete(); \ No newline at end of file diff --git a/reference_scripts/dWr3tkFoIzsAgelu.js b/reference_scripts/dWr3tkFoIzsAgelu.js new file mode 100644 index 0000000..d674e39 --- /dev/null +++ b/reference_scripts/dWr3tkFoIzsAgelu.js @@ -0,0 +1,11 @@ +let injury = this.effect.itemTargets[0] +if (injury && this.effect.sourceTest.result.outcome == "success") { + let days = new Roll(injury.system.duration.value).roll( {async: false} ).total + let num = 1 + Number(this.effect.sourceTest.result.SL); + let roll = await new Roll(num+'d10').roll({async: false}) + await roll.toMessage(this.script.getChatData()) + let newDays = Math.max(days - roll.total, 1) + this.actor.updateEmbeddedDocuments("Item", [{_id: injury.id, 'system.duration.value': newDays} ]) + let message = "Injury reduces to "+newDays+" (-" + roll.total + ") instead of "+days + this.script.scriptMessage(message) +} diff --git a/reference_scripts/dbHv7dAXgB2Oy1Fg.js b/reference_scripts/dbHv7dAXgB2Oy1Fg.js new file mode 100644 index 0000000..bb1fa09 --- /dev/null +++ b/reference_scripts/dbHv7dAXgB2Oy1Fg.js @@ -0,0 +1,3 @@ +let nbBleeding = 1 + Number(this.effect.sourceTest.result.SL); +this.actor.removeCondition("bleeding", nbBleeding); +console.log(this.actor); diff --git a/reference_scripts/dh5mAlaOOLCBC0YQ.js b/reference_scripts/dh5mAlaOOLCBC0YQ.js new file mode 100644 index 0000000..9dae7e4 --- /dev/null +++ b/reference_scripts/dh5mAlaOOLCBC0YQ.js @@ -0,0 +1 @@ +args.actor.system.details.length.value += args.actor.system.details.length.value * 0.1; \ No newline at end of file diff --git a/reference_scripts/dsXGavzXLerXR8Xg.js b/reference_scripts/dsXGavzXLerXR8Xg.js new file mode 100644 index 0000000..fb7fc0e --- /dev/null +++ b/reference_scripts/dsXGavzXLerXR8Xg.js @@ -0,0 +1 @@ +return !args.skill?.name.includes(game.i18n.localize("NAME.Sail")) && !args.skill?.name.includes(game.i18n.localize("NAME.Row")) \ No newline at end of file diff --git a/reference_scripts/dxxDFXNNqUsuMyUD.js b/reference_scripts/dxxDFXNNqUsuMyUD.js new file mode 100644 index 0000000..b0dbc02 --- /dev/null +++ b/reference_scripts/dxxDFXNNqUsuMyUD.js @@ -0,0 +1 @@ +args.fields.slBonus += 1 \ No newline at end of file diff --git a/reference_scripts/e4HotRnEiyXR0pIu.js b/reference_scripts/e4HotRnEiyXR0pIu.js new file mode 100644 index 0000000..94eae28 --- /dev/null +++ b/reference_scripts/e4HotRnEiyXR0pIu.js @@ -0,0 +1 @@ +this.actor.applyEffect({effectUuids : this.item.effects.contents[1].uuid}) \ No newline at end of file diff --git a/reference_scripts/f29Pv6TQtgILxt1h.js b/reference_scripts/f29Pv6TQtgILxt1h.js new file mode 100644 index 0000000..575fef3 --- /dev/null +++ b/reference_scripts/f29Pv6TQtgILxt1h.js @@ -0,0 +1,11 @@ +if (args.test.options.healWounds) { + if (args.test.result.roll <= game.settings.get("wfrp4e", "automaticSuccess") || args.test.result.roll <= args.test.target) { + let wounds = this.actor.characteristics.int.bonus + ~~args.test.result.SL + if (args.test.options.fieldDressing && args.test.result.reversed) + wounds = this.actor.characteristics.int.bonus + Math.min(1, Number(args.test.result.SL)) + args.test.result.woundsHealed = wounds + args.test.result.other.push(`${this.actor.name} healed ${wounds} wounds of the patient.`) + } + else if (this.actor.characteristics.int.bonus + args.test.result.SL < 0) + args.test.result.other.push(`The patient contracts a @UUID[Compendium.wfrp4e-core.items.Item.1hQuVFZt9QnnbWzg]{Minor Infection}.`) +} \ No newline at end of file diff --git a/reference_scripts/fFi9JD4uCY9DPC5B.js b/reference_scripts/fFi9JD4uCY9DPC5B.js new file mode 100644 index 0000000..c8fc681 --- /dev/null +++ b/reference_scripts/fFi9JD4uCY9DPC5B.js @@ -0,0 +1,4 @@ +let specification = Number(this.item.specification.value) || 1; +args.actor.system.characteristics.t.initial += 10 * specification; +args.actor.system.status.carries.max -= Math.floor(args.actor.system.status.carries.max * 0.1 * specification); +args.actor.system.details.price.gc += Math.floor(args.actor.system.details.price.gc * 0.1 * specification); \ No newline at end of file diff --git a/reference_scripts/fTw3mpSUOlkqVVUC.js b/reference_scripts/fTw3mpSUOlkqVVUC.js new file mode 100644 index 0000000..861c31d --- /dev/null +++ b/reference_scripts/fTw3mpSUOlkqVVUC.js @@ -0,0 +1 @@ +this.actor.applyEffect({effectUuids : this.item.effects.contents[0].uuid}) \ No newline at end of file diff --git a/reference_scripts/g0SzfsLyW7aD2F19.js b/reference_scripts/g0SzfsLyW7aD2F19.js index e319818..e0ff529 100644 --- a/reference_scripts/g0SzfsLyW7aD2F19.js +++ b/reference_scripts/g0SzfsLyW7aD2F19.js @@ -1,4 +1,4 @@ -if (this.item.name.includes("(") && this.item.system.tests.value.includes("(Social Group)")) +if (this.item.system.tests.value.includes("(Social Group)")) { let tests = this.item.system.tests.value let name = this.item.name @@ -9,5 +9,14 @@ if (this.item.name.includes("(") && this.item.system.tests.value.includes("(Soci let group = name.split("(")[1].split(")")[0] tests = `${tests.split("(")[0].trim()} (${group})` } + else if (!name.includes("(")) + { + let value = await ValueDialog.create("Enter Etiquette Group", this.effect.name); + if (value) + { + name = this.item.name + ` (${value})`; + tests = this.item.system.tests.value.replace("Social Group", value); + } + } this.item.updateSource({name, "system.tests.value" : tests}) } \ No newline at end of file diff --git a/reference_scripts/gMIenSmLklAkB2Zm.js b/reference_scripts/gMIenSmLklAkB2Zm.js new file mode 100644 index 0000000..118f64a --- /dev/null +++ b/reference_scripts/gMIenSmLklAkB2Zm.js @@ -0,0 +1,8 @@ +if (isNaN(parseInt(this.item.system.specification.value))) +{ + let value = await ValueDialog.create("Enter Venom Strength", this.effect.name, "", Object.values(game.wfrp4e.config.difficultyNames)); + if (value) + { + this.item.updateSource({"system.specification.value" : value}); + } +} \ No newline at end of file diff --git a/reference_scripts/gOm8utR3HLQBT5hA.js b/reference_scripts/gOm8utR3HLQBT5hA.js new file mode 100644 index 0000000..d8929cd --- /dev/null +++ b/reference_scripts/gOm8utR3HLQBT5hA.js @@ -0,0 +1,6 @@ +let {value} = this.effect.getFlag("wfrp4e-soc", "m4result") || {}; + +if (value === 0) + args.actor.system.status.mood.value = 0; +else if (value !== undefined) + args.actor.system.status.mood.value += value; \ No newline at end of file diff --git a/reference_scripts/goz8yTlMozlsz3uY.js b/reference_scripts/goz8yTlMozlsz3uY.js new file mode 100644 index 0000000..b886e2e --- /dev/null +++ b/reference_scripts/goz8yTlMozlsz3uY.js @@ -0,0 +1,53 @@ +const repaired_message = `

Finished repairing ${this.item.name}.

`; +const test = 'Strength'; +const difficulty = 'easy'; +const target = 10; + +const extendedTestData = { + name: this.item.name, + type: "extendedTest", + img: this.item.img, + system: { + SL: { + current: 0, + target: target + }, + test: { + value: test + }, + completion: { + value: "remove" + }, + difficulty: { + value: difficulty + } + }, + effects: [ + { + name: `Repair the ${this.item.name}`, + icon: this.item.img, + flags: { + wfrp4e: { + applicationData: { + type: "document", + documentType: "Item" + }, + scriptData: [ + { + label: this.item.name, + script: ` + let id = this.item.flags.wfrp4e.fromEffect; + let effect = this.actor.appliedEffects.find(e => e.id === id); + this.script.scriptMessage("${repaired_message}"); + await effect.item.delete(); + `, + trigger: "deleteEffect" + } + ] + } + } + } + ] +}; + +await this.actor.createEmbeddedDocuments("Item", [extendedTestData], {fromEffect: this.effect.id}); diff --git a/reference_scripts/groEX1wJ9l00PkDF.js b/reference_scripts/groEX1wJ9l00PkDF.js new file mode 100644 index 0000000..ebf8cbe --- /dev/null +++ b/reference_scripts/groEX1wJ9l00PkDF.js @@ -0,0 +1,75 @@ +let turns = this.effect.getFlag("wfrp4e", "turns"); +if (turns <= 0) return; +turns--; + +const speaker = ChatMessage.getSpeaker({actor: this.actor}); +const targetId = this.effect.getFlag("wfrp4e", "target"); +const target = canvas.scene.tokens.get(targetId); + +if (turns > 0) { + this.effect.setFlag("wfrp4e", "turns", turns); + + return this.script.scriptMessage(`

${speaker.alias} continues wrapping itself around ${target.name}. It will be able to start crushin in ${turns} turns.

`); +} + +if (this.actor.items.find(i => i.type === "extendedTest" && i.name === this.effect.name)) { + this.script.scriptMessage(`

${speaker.alias} can resume crushing ${target.name} with the Extended Test.

`); + + return; +} + +const extendedTestData = { + name: this.effect.name, + type: "extendedTest", + img: this.effect.img, + system: { + SL: { + current: 0, + target: target.actor.system.status.wounds.value + }, + test: { + value: 'Strength' + }, + completion: { + value: "remove" + }, + difficulty: { + value: "challenging" + } + } +}; + +const extendedTests = await this.actor.createEmbeddedDocuments("Item", [extendedTestData], {fromEffect: this.effect.id}); +const extendedTest = extendedTests[0]; + +this.script.scriptMessage(`

${speaker.alias} finished wrapping itself around ${target.name}. It can now begin crushing via the @UUID[${extendedTest.uuid}] Extended Test.

`); + +let effect = { + name: extendedTest.name, + icon: extendedTest.img, + flags: { + wfrp4e: { + applicationData: { + type: "document", + documentType: "Item" + }, + scriptData: [ + { + label: extendedTest.name, + script: ` + let id = this.item.flags.wfrp4e.fromEffect; + let effect = this.actor.effects.find(e => e.id === id); + const speaker = ChatMessage.getSpeaker({actor: this.actor}); + const targetId = effect.getFlag("wfrp4e", "target"); + const target = canvas.scene.tokens.get(targetId); + this.script.scriptMessage(\`

${speaker.alias} crushed the ${target.name}. Boat shatters, reduced to a mass of flotsam.

\`); + await effect.delete(); + `, + trigger: "deleteEffect" + } + ] + } + } +} + +await extendedTests[0].createEmbeddedDocuments("ActiveEffect", [effect]); \ No newline at end of file diff --git a/reference_scripts/gxuBeGHwjZ7WfPeu.js b/reference_scripts/gxuBeGHwjZ7WfPeu.js new file mode 100644 index 0000000..027009f --- /dev/null +++ b/reference_scripts/gxuBeGHwjZ7WfPeu.js @@ -0,0 +1,2 @@ +let specification = Number(this.item.specification.value) || 1; +args.fields.slBonus -= specification; \ No newline at end of file diff --git a/reference_scripts/hOgha3ir8K9TVphO.js b/reference_scripts/hOgha3ir8K9TVphO.js new file mode 100644 index 0000000..c573099 --- /dev/null +++ b/reference_scripts/hOgha3ir8K9TVphO.js @@ -0,0 +1 @@ +return args.characteristic !== "fel"; \ No newline at end of file diff --git a/reference_scripts/hSImyYjL0CENTvXf.js b/reference_scripts/hSImyYjL0CENTvXf.js new file mode 100644 index 0000000..3000ac8 --- /dev/null +++ b/reference_scripts/hSImyYjL0CENTvXf.js @@ -0,0 +1,23 @@ +let test = await this.actor.setupSkill("Endurance", {fields : {difficulty : "difficult", appendTitle : ` - ${this.effect.name}`}}); +await test.roll(); +if (test.failed) +{ + await this.actor.addCondition("blinded"); +} + +let msg = `` +let armour = args.actor.itemTypes.armour.filter(i => i.system.isMetal && i.system.isEquipped); +for(let item of armour) +{ + for(let key in item.system.AP) + { + let AP = item.system.AP[key] + let damage = Math.floor(AP / 2); + await item.system.damageItem(damage, [key]); + } + msg += `

${item.name} AP reduced by half

` +} +if (msg) +{ + this.script.scriptMessage(msg, {speaker : {alias : args.actor.name}}); +} \ No newline at end of file diff --git a/reference_scripts/hWWvkPbgIN3lxz1u.js b/reference_scripts/hWWvkPbgIN3lxz1u.js new file mode 100644 index 0000000..f135bff --- /dev/null +++ b/reference_scripts/hWWvkPbgIN3lxz1u.js @@ -0,0 +1 @@ +return args.item?.system?.attackType !== "melee"; \ No newline at end of file diff --git a/reference_scripts/hYNWp75ggWSTht55.js b/reference_scripts/hYNWp75ggWSTht55.js new file mode 100644 index 0000000..c867124 --- /dev/null +++ b/reference_scripts/hYNWp75ggWSTht55.js @@ -0,0 +1,7 @@ +if (args.test.result.hitloc.value != "head" && args.test.result.critical) +{ + game.wfrp4e.utility.sleep(200).then(() => { + this.script.scriptMessage("Can roll on the @Table[crithead]{Head Critical Hits} instead of the normal hit location") + + }) +} \ No newline at end of file diff --git a/reference_scripts/hj7tI212neKIu9dh.js b/reference_scripts/hj7tI212neKIu9dh.js new file mode 100644 index 0000000..c400384 --- /dev/null +++ b/reference_scripts/hj7tI212neKIu9dh.js @@ -0,0 +1 @@ +this.actor.system.status.ward.value = 7; \ No newline at end of file diff --git a/reference_scripts/ht7csu1KImHzpzL5.js b/reference_scripts/ht7csu1KImHzpzL5.js new file mode 100644 index 0000000..132862f --- /dev/null +++ b/reference_scripts/ht7csu1KImHzpzL5.js @@ -0,0 +1 @@ +return args.item?.actor?.type !== "vehicle" || args.item?.type !== "weapon" || !args.item.name.includes("Cannon"); \ No newline at end of file diff --git a/reference_scripts/huJcVpVn6Q7sQkFC.js b/reference_scripts/huJcVpVn6Q7sQkFC.js new file mode 100644 index 0000000..abfc1b0 --- /dev/null +++ b/reference_scripts/huJcVpVn6Q7sQkFC.js @@ -0,0 +1,2 @@ +if (args.actorsystem.details.move.sail.value > 0) + args.actor.system.details.move.sail.value -= 1; diff --git a/reference_scripts/iO2hCDwyQ7v4qrOI.js b/reference_scripts/iO2hCDwyQ7v4qrOI.js new file mode 100644 index 0000000..ac4be73 --- /dev/null +++ b/reference_scripts/iO2hCDwyQ7v4qrOI.js @@ -0,0 +1,10 @@ +if (args.test.options.staunchBleeding) { + if (args.test.result.roll <= game.settings.get("wfrp4e", "automaticSuccess") || args.test.result.roll <= args.test.target) { + let staunch = ~~args.test.result.SL + 1 + if (args.test.options.fieldDressing && args.test.result.reversed) + staunch = Math.min(1, Number(args.test.result.SL)) + 1 + args.test.result.other.push(`${this.actor.name} removed ${staunch} Bleeding conditions from the patient.`) + } + else if (this.actor.characteristics.int.bonus + args.test.result.SL < 0) + args.test.result.other.push(`The patient contracts a @UUID[Compendium.wfrp4e-core.items.Item.1hQuVFZt9QnnbWzg]{Minor Infection}.`) +} \ No newline at end of file diff --git a/reference_scripts/iqUvV1Vu81M3WyZ4.js b/reference_scripts/iqUvV1Vu81M3WyZ4.js new file mode 100644 index 0000000..3688a7d --- /dev/null +++ b/reference_scripts/iqUvV1Vu81M3WyZ4.js @@ -0,0 +1,4 @@ +let SL = Number(this.effect.sourceTest.result.SL); +for (let i=0; i${speaker.alias} is Immersed within a Sea Elemental and suffers from @UUID[Compendium.wfrp4e-core.journals.JournalEntry.NS3YGlJQxwTggjRX.JournalEntryPage.WCivInLZrqEtZzF4#drowning-and-suffocation]{Suffocation}

They may attempt to escape by freeing themselves from the @Condition[Entangled} Condition as if they were @UUID[Compendium.wfrp4e-core.journals.JournalEntry.NS3YGlJQxwTggjRX.JournalEntryPage.wmA76Q2zJJ9HrkvA#grappling]{Grappled} by the Sea Elemental, making an Opposed Strength Test against its Strength of 59.

`); \ No newline at end of file diff --git a/reference_scripts/k0AkkBLtE8oZhBwn.js b/reference_scripts/k0AkkBLtE8oZhBwn.js new file mode 100644 index 0000000..fcd0fbe --- /dev/null +++ b/reference_scripts/k0AkkBLtE8oZhBwn.js @@ -0,0 +1,6 @@ +if (isNaN(parseInt(this.item.system.specification.value))) { + let value = await ValueDialog.create("Armoured Value", "Enter the Armoured value"); + if (value) { + this.item.updateSource({"system.specification.value" : value}); + } +} \ No newline at end of file diff --git a/reference_scripts/kbXDGAmWWD4CZJHB.js b/reference_scripts/kbXDGAmWWD4CZJHB.js new file mode 100644 index 0000000..46569c0 --- /dev/null +++ b/reference_scripts/kbXDGAmWWD4CZJHB.js @@ -0,0 +1,5 @@ +const sin = this.effect.sourceActor.system.status.sin.value; +const roll = new Roll(`2d10 - ${sin}`); +await roll.evaluate(); +await roll.toMessage({flavor: `${this.effect.name}`}); +this.actor.system.status.mood.addEntry(`${this.effect.name} (${this.effect.sourceActor.name})`, roll.total); \ No newline at end of file diff --git a/reference_scripts/kvnZz8yqdTZbErkr.js b/reference_scripts/kvnZz8yqdTZbErkr.js new file mode 100644 index 0000000..e35746a --- /dev/null +++ b/reference_scripts/kvnZz8yqdTZbErkr.js @@ -0,0 +1,3 @@ +args.actor.system.details.move.value -= 2; +args.actor.system.details.man -= 1; +args.actor.system.status.carries.max *= 1.5; \ No newline at end of file diff --git a/reference_scripts/lOIHiAIDtj91kllN.js b/reference_scripts/lOIHiAIDtj91kllN.js new file mode 100644 index 0000000..35b81b2 --- /dev/null +++ b/reference_scripts/lOIHiAIDtj91kllN.js @@ -0,0 +1,6 @@ +const chanties = await WFRP_Utility.findAll('wfrp4e-soc.chanty'); +let choice = await ItemDialog.create(chanties, 1, "Choose Chanty"); +if (choice.length) { + console.log(choice); + this.actor.createEmbeddedDocuments("Item", choice, {fromEffect: this.effect.id}); +} \ No newline at end of file diff --git a/reference_scripts/lZuavewrJzOehrJQ.js b/reference_scripts/lZuavewrJzOehrJQ.js new file mode 100644 index 0000000..64118c4 --- /dev/null +++ b/reference_scripts/lZuavewrJzOehrJQ.js @@ -0,0 +1,14 @@ +let test = await this.actor.setupSkill('Endurance', { + appendTitle: ` – ${this.effect.name}`, + skipTargets: true, + fields: {difficulty: 'easy'}, + characteristic: 't', + context: {failure: "Mast shattered!"} +}); +await test.roll(); + +if (test.failed) { + let crit = await fromUuid("Item.d4bCnR1zINTNF9VC"); + await this.actor.createEmbeddedDocuments("Item", [crit]); + this.effect.update({disabled: true}); +} \ No newline at end of file diff --git a/reference_scripts/ljGX2w8hCTyLAjRp.js b/reference_scripts/ljGX2w8hCTyLAjRp.js new file mode 100644 index 0000000..2371ff4 --- /dev/null +++ b/reference_scripts/ljGX2w8hCTyLAjRp.js @@ -0,0 +1,2 @@ +let specification = Number(this.item.specification.value) || 1; +args.actor.system.details.price.gc -= Math.floor(args.actor.system.details.price.gc * 0.1 * specification); \ No newline at end of file diff --git a/reference_scripts/mGHKBkDp4omSaBlD.js b/reference_scripts/mGHKBkDp4omSaBlD.js new file mode 100644 index 0000000..36c1d60 --- /dev/null +++ b/reference_scripts/mGHKBkDp4omSaBlD.js @@ -0,0 +1,12 @@ +this.actor.getActiveTokens().forEach(t => t.document.update({light : { + "dim": 20, + "bright": 10, + "angle": 360, + "alpha": 0.4, + "animation": { + "speed": 3, + "intensity": 3, + "type": "torch", + }, + "color": "#ffcc66", + }})); \ No newline at end of file diff --git a/reference_scripts/mT7PDcjF3cJTDbjR.js b/reference_scripts/mT7PDcjF3cJTDbjR.js new file mode 100644 index 0000000..6995528 --- /dev/null +++ b/reference_scripts/mT7PDcjF3cJTDbjR.js @@ -0,0 +1,2 @@ +args.actor.system.details.move.value -= 1; +args.actor.system.status.carries.max *= 1.25; \ No newline at end of file diff --git a/reference_scripts/mXvtf3qhJjshpopX.js b/reference_scripts/mXvtf3qhJjshpopX.js new file mode 100644 index 0000000..53e2cdb --- /dev/null +++ b/reference_scripts/mXvtf3qhJjshpopX.js @@ -0,0 +1 @@ +return ["weapon", "cast", "channelling"].includes(args.type) \ No newline at end of file diff --git a/reference_scripts/mlulnXQo8XU8vKLD.js b/reference_scripts/mlulnXQo8XU8vKLD.js new file mode 100644 index 0000000..95f2044 --- /dev/null +++ b/reference_scripts/mlulnXQo8XU8vKLD.js @@ -0,0 +1,8 @@ +if (isNaN(parseInt(this.item.system.specification.value))) +{ + let value = await ValueDialog.create("Enter Grim value", this.effect.name); + if (value) + { + this.item.updateSource({"system.specification.value" : value}); + } +} \ No newline at end of file diff --git a/reference_scripts/nIOeK0BrtdZeZW8X.js b/reference_scripts/nIOeK0BrtdZeZW8X.js new file mode 100644 index 0000000..8e85711 --- /dev/null +++ b/reference_scripts/nIOeK0BrtdZeZW8X.js @@ -0,0 +1,17 @@ +console.log("SKILL", this) + +let test = await this.actor.setupSkill(game.i18n.localize("NAME.Cool"), {fields : {difficulty : "challenging"}, appendTitle : ` - ${this.effect.name}`}) +await test.roll(); + +let rollD10 = await new Roll("1d10").roll() +rollD10.toMessage(this.script.getChatData()) + + +if (test.succeeded) +{ + //... +} +else if (test.failed) +{ + //... +} diff --git a/reference_scripts/nkSmu7v9WiAaK4vq.js b/reference_scripts/nkSmu7v9WiAaK4vq.js new file mode 100644 index 0000000..0043a12 --- /dev/null +++ b/reference_scripts/nkSmu7v9WiAaK4vq.js @@ -0,0 +1,53 @@ +const repaired_message = `

Finished repairing ${this.item.name}.

`; +const test = 'Trade (Tailor)'; +const difficulty = 'easy'; +const target = 20; + +const extendedTestData = { + name: this.item.name, + type: "extendedTest", + img: this.item.img, + system: { + SL: { + current: 0, + target: target + }, + test: { + value: test + }, + completion: { + value: "remove" + }, + difficulty: { + value: difficulty + } + }, + effects: [ + { + name: `Repair the ${this.item.name}`, + icon: this.item.img, + flags: { + wfrp4e: { + applicationData: { + type: "document", + documentType: "Item" + }, + scriptData: [ + { + label: this.item.name, + script: ` + let id = this.item.flags.wfrp4e.fromEffect; + let effect = this.actor.appliedEffects.find(e => e.id === id); + this.script.scriptMessage("${repaired_message}"); + await effect.item.delete(); + `, + trigger: "deleteEffect" + } + ] + } + } + } + ] +}; + +await this.actor.createEmbeddedDocuments("Item", [extendedTestData], {fromEffect: this.effect.id}); diff --git a/reference_scripts/nlQA0shW8FCXjY7u.js b/reference_scripts/nlQA0shW8FCXjY7u.js new file mode 100644 index 0000000..179770d --- /dev/null +++ b/reference_scripts/nlQA0shW8FCXjY7u.js @@ -0,0 +1 @@ +return args.type != "cast" || args.item.lore.value != "fire" \ No newline at end of file diff --git a/reference_scripts/pVSnn4Zw6y1EBDhv.js b/reference_scripts/pVSnn4Zw6y1EBDhv.js new file mode 100644 index 0000000..bbb77c7 --- /dev/null +++ b/reference_scripts/pVSnn4Zw6y1EBDhv.js @@ -0,0 +1,2 @@ +args.actor.system.details.man -= 1; +args.actor.system.details.move.value -= 1; \ No newline at end of file diff --git a/reference_scripts/pkKpxVqRHIzywerL.js b/reference_scripts/pkKpxVqRHIzywerL.js new file mode 100644 index 0000000..5ed3721 --- /dev/null +++ b/reference_scripts/pkKpxVqRHIzywerL.js @@ -0,0 +1,6 @@ +const ablaze = this.actor.hasCondition("ablaze"); + +if (ablaze) { + ablaze.delete(); + this.script.scriptNotification("Resisted Ablaze"); +} \ No newline at end of file diff --git a/reference_scripts/pvk5OhTNdVgwXoUa.js b/reference_scripts/pvk5OhTNdVgwXoUa.js new file mode 100644 index 0000000..29ff2f6 --- /dev/null +++ b/reference_scripts/pvk5OhTNdVgwXoUa.js @@ -0,0 +1 @@ +args.fields.successBonus += 2; \ No newline at end of file diff --git a/reference_scripts/q8lOAWr2970sZeTw.js b/reference_scripts/q8lOAWr2970sZeTw.js new file mode 100644 index 0000000..9ee1f34 --- /dev/null +++ b/reference_scripts/q8lOAWr2970sZeTw.js @@ -0,0 +1,53 @@ +const repaired_message = `

Finished repairing ${this.item.name}.

`; +const test = 'Trade (Carpentry)'; +const difficulty = 'challenging'; +const target = 20; + +const extendedTestData = { + name: this.item.name, + type: "extendedTest", + img: this.item.img, + system: { + SL: { + current: 0, + target: target + }, + test: { + value: test + }, + completion: { + value: "remove" + }, + difficulty: { + value: difficulty + } + }, + effects: [ + { + name: `Repair the ${this.item.name}`, + icon: this.item.img, + flags: { + wfrp4e: { + applicationData: { + type: "document", + documentType: "Item" + }, + scriptData: [ + { + label: this.item.name, + script: ` + let id = this.item.flags.wfrp4e.fromEffect; + let effect = this.actor.appliedEffects.find(e => e.id === id); + this.script.scriptMessage("${repaired_message}"); + await effect.item.delete(); + `, + trigger: "deleteEffect" + } + ] + } + } + } + ] +}; + +await this.actor.createEmbeddedDocuments("Item", [extendedTestData], {fromEffect: this.effect.id}); diff --git a/reference_scripts/qTcK1TSjLTi0jNQK.js b/reference_scripts/qTcK1TSjLTi0jNQK.js new file mode 100644 index 0000000..b894a45 --- /dev/null +++ b/reference_scripts/qTcK1TSjLTi0jNQK.js @@ -0,0 +1,8 @@ +let AP = args.actor.status.armour; + +AP["head"].value += 1; +AP["rArm"].value += 1; +AP["lArm"].value += 1; +AP["body"].value += 1; +AP["lLeg"].value += 1; +AP["rLeg"].value += 1; \ No newline at end of file diff --git a/reference_scripts/qnJu82zgnfOsnqZV.js b/reference_scripts/qnJu82zgnfOsnqZV.js new file mode 100644 index 0000000..5677b9a --- /dev/null +++ b/reference_scripts/qnJu82zgnfOsnqZV.js @@ -0,0 +1,12 @@ +let closed = !this.item.getFlag("wfrp4e-soc", "gunport") || false; + +await this.item.setFlag("wfrp4e-soc", "gunport", closed); +let scriptData = this.effect.flags.wfrp4e.scriptData; + +if (closed) { + scriptData[0].label = "Open"; +} else { + scriptData[0].label = "Close"; +} + +await this.effect.update({"flags.wfrp4e.scriptData": scriptData}); \ No newline at end of file diff --git a/reference_scripts/qzGPJflVW7c2Ciim.js b/reference_scripts/qzGPJflVW7c2Ciim.js new file mode 100644 index 0000000..cb29090 --- /dev/null +++ b/reference_scripts/qzGPJflVW7c2Ciim.js @@ -0,0 +1 @@ +return args.skill?.name !== game.i18n.localize("NAME.Cool"); \ No newline at end of file diff --git a/reference_scripts/rBAoyhzeU3Q8MVSk.js b/reference_scripts/rBAoyhzeU3Q8MVSk.js new file mode 100644 index 0000000..3dd08db --- /dev/null +++ b/reference_scripts/rBAoyhzeU3Q8MVSk.js @@ -0,0 +1,53 @@ +const repaired_message = `

Finished repairing ${this.item.name}.

`; +const test = 'Trade (Carpenter)'; +const difficulty = 'difficult'; +const target = 50; + +const extendedTestData = { + name: this.item.name, + type: "extendedTest", + img: this.item.img, + system: { + SL: { + current: 0, + target: target + }, + test: { + value: test + }, + completion: { + value: "remove" + }, + difficulty: { + value: difficulty + } + }, + effects: [ + { + name: `Repair the ${this.item.name}`, + icon: this.item.img, + flags: { + wfrp4e: { + applicationData: { + type: "document", + documentType: "Item" + }, + scriptData: [ + { + label: this.item.name, + script: ` + let id = this.item.flags.wfrp4e.fromEffect; + let effect = this.actor.appliedEffects.find(e => e.id === id); + this.script.scriptMessage("${repaired_message}"); + await effect.item.delete(); + `, + trigger: "deleteEffect" + } + ] + } + } + } + ] +}; + +await this.actor.createEmbeddedDocuments("Item", [extendedTestData], {fromEffect: this.effect.id}); diff --git a/reference_scripts/rVRDoxiWILo7d8FF.js b/reference_scripts/rVRDoxiWILo7d8FF.js new file mode 100644 index 0000000..a75ce6f --- /dev/null +++ b/reference_scripts/rVRDoxiWILo7d8FF.js @@ -0,0 +1,4 @@ +let specification = Number(this.item.specification.value) || 1; +args.actor.system.status.wounds.max += Math.floor(args.actor.system.status.wounds.max * 0.3 * specification); +args.actor.system.status.carries.max -= Math.floor(args.actor.system.status.carries.max * 0.1 * specification); +args.actor.system.details.price.gc += args.actor.system.details.price.gc * 0.2 * specification; \ No newline at end of file diff --git a/reference_scripts/rX8FTinyTMj9WJri.js b/reference_scripts/rX8FTinyTMj9WJri.js new file mode 100644 index 0000000..d0c393f --- /dev/null +++ b/reference_scripts/rX8FTinyTMj9WJri.js @@ -0,0 +1,37 @@ +if (!this.actor.flags.holed) return; +if (this.actor.flags.holed.applied === true) return; +if (this.actor.hasCondition("dead")) return; + +const currentHoled = this.actor.flags.holed.holed || 0; + +const openGunPorts = this.actor.itemTypes.vehicleMod.reduce((acc, m) => { + if (!m.name.toLowerCase().includes("gun port")) + return acc; + + let closed = m.getFlag("wfrp4e-soc", "gunport"); + if (!closed) acc++; + + return acc; +}, 0); + +const totalHoled = currentHoled + openGunPorts; +const toughness = this.actor.system.characteristics.t.value; +this.actor.flags.holed.total = totalHoled; + +if (totalHoled >= toughness) { + const speaker = ChatMessage.getSpeaker({actor: this.actor}); + this.script.scriptMessage(` +

${speaker.alias} sank due to having Holed (${totalHoled}) rating equal to, or exceeding its Toughness (${toughness })

+

+ Holed due to Critical Damage: ${currentHoled}
+ Holed due to opened Gun Ports: ${openGunPorts} +

+ `, { flavor: this.effect.name.split("(")[0]}); + this.actor.addCondition("dead"); +} else if (totalHoled >= (toughness * 0.5)) { + this.actor.system.details.move.value -= 1; + this.actor.system.details.man -= 1; + this.actor.flags.holed.half = true; +} + +this.actor.flags.holed.applied = true; \ No newline at end of file diff --git a/reference_scripts/rlTvhnDpj4lzfusf.js b/reference_scripts/rlTvhnDpj4lzfusf.js new file mode 100644 index 0000000..2a8b74f --- /dev/null +++ b/reference_scripts/rlTvhnDpj4lzfusf.js @@ -0,0 +1 @@ +return !args.skill?.name.includes(game.i18n.localize("NAME.Sail")) && args.skill?.name !== game.i18n.localize("NAME.Climb"); \ No newline at end of file diff --git a/reference_scripts/rly9iBUy8EX7NhQT.js b/reference_scripts/rly9iBUy8EX7NhQT.js new file mode 100644 index 0000000..c6e64e8 --- /dev/null +++ b/reference_scripts/rly9iBUy8EX7NhQT.js @@ -0,0 +1,27 @@ +if (game.user.targets.size !== 1) + return ui.notifications.warn("You must target exactly one Boat."); + +const target = game.user.targets.first(); +const vehicle = target.actor; + +if (!(vehicle.system instanceof VehicleModel)) + return ui.notifications.warn("You can only Constrict a Boat"); + +if (vehicle.size > 3) + return ui.notifications.warn("You can only Constrict vessels of Size Large or smaller"); + +const turns = Math.ceil(vehicle.system.details.length.value / 10); + +const mainEffect = this.item.effects.contents[0]; +const effectData = mainEffect.toObject(); + +effectData.statuses = [effectData.name.slugify()]; + +foundry.utils.setProperty(effectData, "flags.wfrp4e.target", target.id); +foundry.utils.setProperty(effectData, "flags.wfrp4e.turns", turns); + +await this.actor.applyEffect({effectData: [effectData]}); + +const speaker = ChatMessage.getSpeaker({actor: this.actor}); + +this.script.scriptMessage(`${speaker.alias} started wrapping itself around the ${target.name} and will be able to start crushing it after ${turns} turns.`); \ No newline at end of file diff --git a/reference_scripts/rqTT8yOyK4bUwbdm.js b/reference_scripts/rqTT8yOyK4bUwbdm.js new file mode 100644 index 0000000..024c9a6 --- /dev/null +++ b/reference_scripts/rqTT8yOyK4bUwbdm.js @@ -0,0 +1,15 @@ +let test = args.test +if (test.spell.lore.value == "fire") +{ + if (test.result.overcast.usage.target?.AoE) + { + test.result.overcast.usage.target.current += test.actor.characteristics.wp.bonus + test.result.overcast.usage.target.initial += test.actor.characteristics.wp.bonus + } + if (test.result.overcast.usage.range) + { + test.result.overcast.usage.range.current *= 2 + test.result.overcast.usage.range.initial *= 2 + } + +} \ No newline at end of file diff --git a/reference_scripts/sHVLKIdPbzLVItCa.js b/reference_scripts/sHVLKIdPbzLVItCa.js new file mode 100644 index 0000000..d0c491a --- /dev/null +++ b/reference_scripts/sHVLKIdPbzLVItCa.js @@ -0,0 +1,2 @@ +if (args.actorsystem.details.move.oars.value > 0) + args.actor.system.details.move.oars.value -= 1; \ No newline at end of file diff --git a/reference_scripts/sQDh3g11pWchxpW9.js b/reference_scripts/sQDh3g11pWchxpW9.js new file mode 100644 index 0000000..2a92563 --- /dev/null +++ b/reference_scripts/sQDh3g11pWchxpW9.js @@ -0,0 +1 @@ +return true \ No newline at end of file diff --git a/reference_scripts/tuIsytv3jl2yAIb2.js b/reference_scripts/tuIsytv3jl2yAIb2.js new file mode 100644 index 0000000..cf810e0 --- /dev/null +++ b/reference_scripts/tuIsytv3jl2yAIb2.js @@ -0,0 +1 @@ +return args.skill?.name !== game.i18n.localize("NAME.Charm") && args.skill?.name !== game.i18n.localize("NAME.Intimidate") && args.skill?.name !== game.i18n.localize("NAME.Leadership") \ No newline at end of file diff --git a/reference_scripts/uhCq5NwjQ2a2idPn.js b/reference_scripts/uhCq5NwjQ2a2idPn.js new file mode 100644 index 0000000..c8158a4 --- /dev/null +++ b/reference_scripts/uhCq5NwjQ2a2idPn.js @@ -0,0 +1,53 @@ +const repaired_message = `

Finished repairing ${this.item.name}.

`; +const test = 'Trade (Tailor)'; +const difficulty = 'easy'; +const target = 30; + +const extendedTestData = { + name: this.item.name, + type: "extendedTest", + img: this.item.img, + system: { + SL: { + current: 0, + target: target + }, + test: { + value: test + }, + completion: { + value: "remove" + }, + difficulty: { + value: difficulty + } + }, + effects: [ + { + name: `Repair the ${this.item.name}`, + icon: this.item.img, + flags: { + wfrp4e: { + applicationData: { + type: "document", + documentType: "Item" + }, + scriptData: [ + { + label: this.item.name, + script: ` + let id = this.item.flags.wfrp4e.fromEffect; + let effect = this.actor.appliedEffects.find(e => e.id === id); + this.script.scriptMessage("${repaired_message}"); + await effect.item.delete(); + `, + trigger: "deleteEffect" + } + ] + } + } + } + ] +}; + +await this.actor.createEmbeddedDocuments("Item", [extendedTestData], {fromEffect: this.effect.id}); diff --git a/reference_scripts/v18mmwUmuKiVfwzQ.js b/reference_scripts/v18mmwUmuKiVfwzQ.js new file mode 100644 index 0000000..518055f --- /dev/null +++ b/reference_scripts/v18mmwUmuKiVfwzQ.js @@ -0,0 +1,6 @@ +let test = await this.actor.setupTest(game.i18n.localize("NAME.Endurance"), {appendTitle : ` - ${this.effect.name}`, skipTargets: true}); +await test.roll(); +if (test.failed) +{ + this.actor.addCondition("stunned"); +} \ No newline at end of file diff --git a/reference_scripts/vTebTUzXortx1Qut.js b/reference_scripts/vTebTUzXortx1Qut.js new file mode 100644 index 0000000..d65570d --- /dev/null +++ b/reference_scripts/vTebTUzXortx1Qut.js @@ -0,0 +1,4 @@ +let specification = Number(this.item.specification.value) || 1; +args.actor.system.characteristics.t.initial += 10 * specification; +args.actor.system.status.carries.max -= Math.floor(args.actor.system.status.carries.max * 0.1 * specification); +args.actor.system.details.price.gc += args.actor.system.details.price.gc * 0.1 * specification; \ No newline at end of file diff --git a/reference_scripts/vUpMQlbwDiYfMCNS.js b/reference_scripts/vUpMQlbwDiYfMCNS.js new file mode 100644 index 0000000..a1b5b3f --- /dev/null +++ b/reference_scripts/vUpMQlbwDiYfMCNS.js @@ -0,0 +1 @@ +this.actor.addCondition("ablaze"); \ No newline at end of file diff --git a/reference_scripts/w4RuGIfseGoxXA3k.js b/reference_scripts/w4RuGIfseGoxXA3k.js new file mode 100644 index 0000000..55abc51 --- /dev/null +++ b/reference_scripts/w4RuGIfseGoxXA3k.js @@ -0,0 +1,53 @@ +const repaired_message = `

Finished repairing ${this.item.name}.

`; +const test = 'Trade (Carpenter)'; +const difficulty = 'challenging'; +const target = 20; + +const extendedTestData = { + name: this.item.name, + type: "extendedTest", + img: this.item.img, + system: { + SL: { + current: 0, + target: target + }, + test: { + value: test + }, + completion: { + value: "remove" + }, + difficulty: { + value: difficulty + } + }, + effects: [ + { + name: `Repair the ${this.item.name}`, + icon: this.item.img, + flags: { + wfrp4e: { + applicationData: { + type: "document", + documentType: "Item" + }, + scriptData: [ + { + label: this.item.name, + script: ` + let id = this.item.flags.wfrp4e.fromEffect; + let effect = this.actor.appliedEffects.find(e => e.id === id); + this.script.scriptMessage("${repaired_message}"); + await effect.item.delete(); + `, + trigger: "deleteEffect" + } + ] + } + } + } + ] +}; + +await this.actor.createEmbeddedDocuments("Item", [extendedTestData], {fromEffect: this.effect.id}); diff --git a/reference_scripts/wRxgpGmlUpe7nwzJ.js b/reference_scripts/wRxgpGmlUpe7nwzJ.js new file mode 100644 index 0000000..45b97af --- /dev/null +++ b/reference_scripts/wRxgpGmlUpe7nwzJ.js @@ -0,0 +1,12 @@ +this.actor.getActiveTokens().forEach(t => t.document.update({light : { + "dim": 0, + "bright": 0, + "angle": 360, + "alpha": 0.5, + "animation": { + "speed": 0, + "intensity": 0, + "type": "none", + }, + "color": "", + }})); \ No newline at end of file diff --git a/reference_scripts/xVYVegD692CCv8Yl.js b/reference_scripts/xVYVegD692CCv8Yl.js new file mode 100644 index 0000000..91e8707 --- /dev/null +++ b/reference_scripts/xVYVegD692CCv8Yl.js @@ -0,0 +1,12 @@ +let test = await this.actor.setupSkill(game.i18n.localize("NAME.Endurance"), {fields : {difficulty : "hard"}, appendTitle : ` - ${this.effect.name}`}) +await test.roll(); + +let newFortune = Math.max(0, this.actor.status.fortune.value - 1) +this.actor.update({ "system.status.fortune.value": newFortune }); + +if (test.failed) +{ + let char = this.effect.sourceActor.characteristics; + let duration = Math.floor((char.wp.initial + char.wp.advances)/10) ; + this.script.scriptMessage("Fatethief has been applied for " + duration + " days"); +} \ No newline at end of file diff --git a/reference_scripts/xWPgIZOQLba5nZ23.js b/reference_scripts/xWPgIZOQLba5nZ23.js new file mode 100644 index 0000000..0023126 --- /dev/null +++ b/reference_scripts/xWPgIZOQLba5nZ23.js @@ -0,0 +1,14 @@ +let nbFatigue = 1 + Number(this.effect.sourceTest.result.SL); +this.actor.addCondition("fatigued", nbFatigue); + +let test = await this.actor.setupSkill(game.i18n.localize("NAME.Endurance"), {fields : {difficulty : "hard"}, appendTitle : ` - ${this.effect.name}`}) +await test.roll(); + +if (test.succeeded) +{ + this.script.scriptNotification(this.actor.name + "resisted !") +} +else if (test.failed) +{ + this.actor.addCondition("unconscious", 1); +} \ No newline at end of file diff --git a/reference_scripts/xihniGjgqOhuaKWc.js b/reference_scripts/xihniGjgqOhuaKWc.js new file mode 100644 index 0000000..b2990e6 --- /dev/null +++ b/reference_scripts/xihniGjgqOhuaKWc.js @@ -0,0 +1,9 @@ + + if (args.test.failed) + { + let applicableCharacteristics = ["ws", "bs", "s", "fel", "ag", "t", "dex"]; + if (applicableCharacteristics.includes(args.test.characteristicKey)) + { + this.actor.addCondition("stunned"); + } + } \ No newline at end of file diff --git a/reference_scripts/z14Tb2YKCjiE5ZTU.js b/reference_scripts/z14Tb2YKCjiE5ZTU.js new file mode 100644 index 0000000..927f0b6 --- /dev/null +++ b/reference_scripts/z14Tb2YKCjiE5ZTU.js @@ -0,0 +1,12 @@ +this.actor.getActiveTokens().forEach(t => t.document.update({light : { + "dim": 30, + "bright": 20, + "angle": 90, + "alpha": 0.6, + "animation": { + "speed": 3, + "intensity": 3, + "type": "torch", + }, + "color": "#ffcc66", + }})); \ No newline at end of file diff --git a/reference_scripts/zL7ECmBBMAqf5Esn.js b/reference_scripts/zL7ECmBBMAqf5Esn.js new file mode 100644 index 0000000..b205bb2 --- /dev/null +++ b/reference_scripts/zL7ECmBBMAqf5Esn.js @@ -0,0 +1,30 @@ +let hasMagazine = await Dialog.confirm({content: "

Does the vessel have a magazine or any other kind of store for blackpowder?

"}); + +if (!hasMagazine) return; + +let roll = new Roll("d10"); +await roll.evaluate(); +// await roll.toMessage(); +let anchor = roll.toAnchor(); + +let crits = []; + +for (let i = 0; i < roll.total; i++) { + let result = await WFRP_Tables.rollTable('crithull'); + let collection = game.packs.get(result.object.documentCollection) + + if (collection) + await collection.getDocuments() + + if (!collection) + collection = game.items; + + let item = collection.get(result.object.documentId) + if (item) + crits.push(item); +} + +const items = await this.actor.createEmbeddedDocuments("Item", crits); +const speaker = ChatMessage.getSpeaker({actor: this.actor}); +const uuids = items.map(i => `@UUID[${i.uuid}]`); +this.script.scriptMessage(`

${this.item.name} caused an additional ${anchor.outerHTML} Critical Hits to the Hull!

  • ${uuids.join('
  • ')}
`) \ No newline at end of file diff --git a/reference_scripts/zXh8rgMxWoCLTxVd.js b/reference_scripts/zXh8rgMxWoCLTxVd.js new file mode 100644 index 0000000..6cb2243 --- /dev/null +++ b/reference_scripts/zXh8rgMxWoCLTxVd.js @@ -0,0 +1,53 @@ +const repaired_message = `

Finished repairing ${this.item.name}.

`; +const test = 'Sail'; +const difficulty = 'challenging'; +const target = 40; + +const extendedTestData = { + name: this.item.name, + type: "extendedTest", + img: this.item.img, + system: { + SL: { + current: 0, + target: target + }, + test: { + value: test + }, + completion: { + value: "remove" + }, + difficulty: { + value: difficulty + } + }, + effects: [ + { + name: `Repair the ${this.item.name}`, + icon: this.item.img, + flags: { + wfrp4e: { + applicationData: { + type: "document", + documentType: "Item" + }, + scriptData: [ + { + label: this.item.name, + script: ` + let id = this.item.flags.wfrp4e.fromEffect; + let effect = this.actor.appliedEffects.find(e => e.id === id); + this.script.scriptMessage("${repaired_message}"); + await effect.item.delete(); + `, + trigger: "deleteEffect" + } + ] + } + } + } + ] +}; + +await this.actor.createEmbeddedDocuments("Item", [extendedTestData], {fromEffect: this.effect.id}); diff --git a/reference_scripts/zdGAvfL7zJ7wpYxG.js b/reference_scripts/zdGAvfL7zJ7wpYxG.js new file mode 100644 index 0000000..8865d25 --- /dev/null +++ b/reference_scripts/zdGAvfL7zJ7wpYxG.js @@ -0,0 +1,53 @@ +const repaired_message = `

Finished repairing ${this.item.name}.

`; +const test = 'Trade (Carpenter)'; +const difficulty = 'easy'; +const target = 40; + +const extendedTestData = { + name: this.item.name, + type: "extendedTest", + img: this.item.img, + system: { + SL: { + current: 0, + target: target + }, + test: { + value: test + }, + completion: { + value: "remove" + }, + difficulty: { + value: difficulty + } + }, + effects: [ + { + name: `Repair the ${this.item.name}`, + icon: this.item.img, + flags: { + wfrp4e: { + applicationData: { + type: "document", + documentType: "Item" + }, + scriptData: [ + { + label: this.item.name, + script: ` + let id = this.item.flags.wfrp4e.fromEffect; + let effect = this.actor.appliedEffects.find(e => e.id === id); + this.script.scriptMessage("${repaired_message}"); + await effect.item.delete(); + `, + trigger: "deleteEffect" + } + ] + } + } + } + ] +}; + +await this.actor.createEmbeddedDocuments("Item", [extendedTestData], {fromEffect: this.effect.id}); diff --git a/reference_scripts/zkc1gIPLj0VoAONT.js b/reference_scripts/zkc1gIPLj0VoAONT.js new file mode 100644 index 0000000..1a86fae --- /dev/null +++ b/reference_scripts/zkc1gIPLj0VoAONT.js @@ -0,0 +1,8 @@ +let AP = args.actor.status.armour; + +AP["head"].value += 2; +AP["rArm"].value += 2; +AP["lArm"].value += 2; +AP["body"].value += 2; +AP["lLeg"].value += 2; +AP["rLeg"].value += 2; \ No newline at end of file diff --git a/reference_scripts/ztIkD5Zt6ko9D4Ca.js b/reference_scripts/ztIkD5Zt6ko9D4Ca.js new file mode 100644 index 0000000..22d98fa --- /dev/null +++ b/reference_scripts/ztIkD5Zt6ko9D4Ca.js @@ -0,0 +1 @@ +args.fields.modifier -= 10 \ No newline at end of file diff --git a/scripts/2W9uMTT6iJhfQ044.js b/scripts/2W9uMTT6iJhfQ044.js index ab95121..d8fe017 100644 --- a/scripts/2W9uMTT6iJhfQ044.js +++ b/scripts/2W9uMTT6iJhfQ044.js @@ -6,13 +6,14 @@ if (!currentCareer) return let inCurrentCareer = currentCareer.system.skills.includes(skill); -if (existingSkill && inCurrentCareer) +let craftsmanAdded = this.actor.getFlag("wfrp4e", "craftsmanAdded") || {}; +if (existingSkill && inCurrentCareer && !craftsmanAdded[existingSkill.name]) { existingSkill.system.advances.costModifier = -5; } else { + craftsmanAdded[skill] = true; currentCareer.system.skills.push(skill); -} - - + setProperty(this.actor, "flags.wfrp4e.craftsmanAdded", craftsmanAdded) +} \ No newline at end of file diff --git a/scripts/HrOBAXsEX073ReKl.js b/scripts/HrOBAXsEX073ReKl.js index 04bf5c0..c40ea3e 100644 --- a/scripts/HrOBAXsEX073ReKl.js +++ b/scripts/HrOBAXsEX073ReKl.js @@ -6,13 +6,16 @@ if (!currentCareer) return let inCurrentCareer = currentCareer.system.skills.includes(skill); -if (existingSkill && inCurrentCareer) +let perfectPitchAdded = this.actor.getFlag("wfrp4e", "perfectPitchAdded") || {}; +if (existingSkill && inCurrentCareer && !perfectPitchAdded[existingSkill.name]) { existingSkill.system.advances.costModifier = -5; } else { + perfectPitchAdded[skill] = true; currentCareer.system.skills.push(skill); + setProperty(this.actor, "flags.wfrp4e.perfectPitchAdded", perfectPitchAdded) } diff --git a/scripts/IzoOmDywGLqLNljN.js b/scripts/IzoOmDywGLqLNljN.js new file mode 100644 index 0000000..120e53d --- /dev/null +++ b/scripts/IzoOmDywGLqLNljN.js @@ -0,0 +1,19 @@ +let skill = `Langue (Magick)` +let currentCareer = this.actor.system.currentCareer; +let existingSkill = this.actor.itemTypes.skill.find(i => i.name == skill); + +if (!currentCareer) return + + +let inCurrentCareer = currentCareer.system.skills.includes(skill); +let witchAdded = actor.getFlag("wfrp4e", "witchAdded") || {}; +if (existingSkill && inCurrentCareer && !witchAdded[existingSkill.name]) +{ + existingSkill.system.advances.costModifier = -5; +} +else +{ + witchAdded[skill] = true; + currentCareer.system.skills.push(skill); + setProperty(this.actor, "flags.wfrp4e.witchAdded", witchAdded) +} \ No newline at end of file diff --git a/scripts/OGX4BneaYAnV25TO.js b/scripts/OGX4BneaYAnV25TO.js index f7f1a66..cd24841 100644 --- a/scripts/OGX4BneaYAnV25TO.js +++ b/scripts/OGX4BneaYAnV25TO.js @@ -15,25 +15,25 @@ if (wounds.value > 0) { wounds.value = wounds.max } - message += `${this.actor.name} récupère ${regen} Blessures.` + message += `${this.actor.name} regagne ${regen} Blessures.` if (regen == 10) { - message += `
En plus, il guérit d'une Blessure Critique.` -B } + message += `
Et guéri une Blessure Critique.` + } } else if (regen >= 8) { - message += `${this.actor.name} résultat de ${regen} et récupère 1 Blessure.` + message += `${this.actor.name} a obtenu ${regen} et récupère 1 Blessure.` wounds.value += 1 if (regen == 10) { - message += `
En plus, il guérit d'une Blessure Critique.` + message += `
Et guéri une Blessure Critique.` } } else { - message += `${this.actor.name} Résultat de ${regen} - Aucun effet.` + message += `${this.actor.name} Résultat de régénération de ${regen} - Aucun effet.` } await this.actor.update({ "system.status.wounds": wounds }) diff --git a/scripts/SWIJjM2RCmzfr64u.js b/scripts/SWIJjM2RCmzfr64u.js index 5a07e2e..0db546e 100644 --- a/scripts/SWIJjM2RCmzfr64u.js +++ b/scripts/SWIJjM2RCmzfr64u.js @@ -1,6 +1,4 @@ -if (args.test.result.hitloc.result == "head") -{ - args.test.result.critModifier = args.test.result.critModifier ? args.test.result.critModifier + 40 : 40 - +if (args.test.result.hitloc.result == "head" && args.test.result.critical){ + args.test.result.critModifier = args.test.result.critModifier ? args.test.result.critModifier + 40 : 40 args.test.result.critical += ` (+${args.test.result.critModifier})` } diff --git a/scripts/Uvk1X7sEhvv77YkD.js b/scripts/Uvk1X7sEhvv77YkD.js new file mode 100644 index 0000000..ea8388a --- /dev/null +++ b/scripts/Uvk1X7sEhvv77YkD.js @@ -0,0 +1,5 @@ +if (!args.flags.distractingApplied) +{ + args.fields.modifier -= 20; + args.flags.distractingApplied = true; +} \ No newline at end of file diff --git a/scripts/mXvtf3qhJjshpopX.js b/scripts/mXvtf3qhJjshpopX.js new file mode 100644 index 0000000..53e2cdb --- /dev/null +++ b/scripts/mXvtf3qhJjshpopX.js @@ -0,0 +1 @@ +return ["weapon", "cast", "channelling"].includes(args.type) \ No newline at end of file diff --git a/scripts/zXh8rgMxWoCLTxVd.js b/scripts/zXh8rgMxWoCLTxVd.js new file mode 100644 index 0000000..a904726 --- /dev/null +++ b/scripts/zXh8rgMxWoCLTxVd.js @@ -0,0 +1,53 @@ +const repaired_message = `

Réparation finie de ${this.item.name}.

`; +const test = 'Voile'; +const difficulty = 'challenging'; +const target = 40; + +const extendedTestData = { + name: this.item.name, + type: "extendedTest", + img: this.item.img, + system: { + SL: { + current: 0, + target: target + }, + test: { + value: test + }, + completion: { + value: "remove" + }, + difficulty: { + value: difficulty + } + }, + effects: [ + { + name: `Réparer le ${this.item.name}`, + icon: this.item.img, + flags: { + wfrp4e: { + applicationData: { + type: "document", + documentType: "Item" + }, + scriptData: [ + { + label: this.item.name, + script: ` + let id = this.item.flags.wfrp4e.fromEffect; + let effect = this.actor.appliedEffects.find(e => e.id === id); + this.script.scriptMessage("${repaired_message}"); + await effect.item.delete(); + `, + trigger: "deleteEffect" + } + ] + } + } + } + ] +}; + +await this.actor.createEmbeddedDocuments("Item", [extendedTestData], {fromEffect: this.effect.id}); diff --git a/tools/test01.lua b/tools/test01.lua deleted file mode 100644 index 480edc2..0000000 --- a/tools/test01.lua +++ /dev/null @@ -1,6 +0,0 @@ -let item1 = await fromUuid("Compendium.wfrp4e-core.items.Item.EO05HX7jql0g605A") -let item2 = await fromUuid("Compendium.wfrp4e-core.items.Item.Bvd2aZ0gQUXHfCTh") -let ids = await this.actor.createEmbeddedDocuments("Item", [item1, item2], {fromEffect : this.effect.id}) -console.log(ids) -this.actor.updateEmbeddedDocuments('Item', [ {_id: ids[0], `system.specification.value`: 16} ] ) -